ZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9SRUFETUUubWQgYi9hcGktdGVzdHMvUkVBRE1FLm1kCmluZGV4IDRiMmMxZjUuLjVkYzJhYzQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9SRUFETUUubWQKKysrIGIvYXBpLXRlc3RzL1JFQURNRS5tZApAQCAtMTksNiArMTksMTYgQEAKICMjIyBQU0EgRGV2ZWxvcGVyIEFQSXMKIFRoZSB0ZXN0IHN1aXRlIGZvciB0aGlzIHNwZWNpZmljYXRpb24gaXMgbG9jYXRlZCBpbiB0aGUgZGV2X2FwaXMgZGlyZWN0b3J5IG9mIHRoaXMgcmVwb3NpdG9yeS4gU2VlIFtQU0EgRGV2ZWxvcGVyIEFQSXMgUmVhZG1lXShkZXZfYXBpcy9SRUFETUUubWQpIGZpbGUgZm9yIG1vcmUgZGV0YWlscy4KIAorIyMgUmVsZWFzZSBVcGRhdGUKKyAtIFJlbGVhc2UgVmVyc2lvbiAtIDAuNworIC0gQ29kZSBRdWFsaXR5OiBQcmUtQmV0YS4gUGxlYXNlIHVzZSB0aGlzIG9wcG9ydHVuaXR5IHRvIHN1Z2dlc3QgZW5oYW5jZW1lbnRzIGFuZCBwb2ludCBvdXQgZXJyb3JzLgorIC0gQ3VycmVudCByZWxlYXNlIGNvbnRhaW5zIGZvbGxvd2luZyBEZXZlbG9wZXIgQVBJcyB0ZXN0czoKKyAxLiAqKkNyeXB0byB0ZXN0cyoqIHRoYXQgYXJlIHdyaXR0ZW4gZm9yIHRoZSBjcnlwdG8gc2VydmljZSBBUElzIGRlZmluZWQgaW4gdGhlIFtjcnlwdG8uaF0oLi4vYXBpLXNwZWNzL2luY2x1ZGUvY3J5cHRvLmgpCisgMi4gKipQcm90ZWN0ZWQgU3RvcmFnZSB0ZXN0cyoqIHRoYXQgYXJlIHdyaXR0ZW4gZm9yIHRoZSBwcm90ZWN0ZWQgc3RvcmFnZSBzZXJ2aWNlIEFQSXMgZGVmaW5lZCBpbiB0aGUgW3Byb3RlY3RlZF9zdG9yYWdlLmhdKC4uL2FwaS1zcGVjcy9pbmNsdWRlL3Byb3RlY3RlZF9zdG9yYWdlLmgpCisgMy4gKipJbnRlcm5hbCBUcnVzdGVkIFN0b3JhZ2UgdGVzdHMqKiB0aGF0IGFyZSB3cml0dGVuIGZvciB0aGUgaW50ZXJuYWwgdHJ1c3RlZCBzdG9yYWdlIHNlcnZpY2UgQVBJcyBkZWZpbmVkIGluIHRoZSBbaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLmhdKC4uL2FwaS1zcGVjcy9pbmNsdWRlL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS5oKQorIC0gQ3VycmVudCByZWxlYXNlIGNvbnRhaW5zIGZvbGxvd2luZyBQU0EtRkYgdGVzdHM6CisgMS4gKipJUEMgdGVzdHMqKiB0aGF0IGFyZSB3cml0dGVuIGZvciB2ZXJzaW9uIDEuMC1CZXRhLTAgb2YgdGhlIFBTQSBGRiBzcGVjaWZpY2F0aW9uLgorCiAjIyBMaWNlbnNlCiAKIEFybSBQU0EgdGVzdCBzdWl0ZSBpcyBkaXN0cmlidXRlZCB1bmRlciBBcGFjaGUgdjIuMCBMaWNlbnNlLgpAQCAtMzMsNCArNDMsNCBAQAogCiAtLS0tLS0tLS0tLS0tLQogCi0qQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLioKKypDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4qCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvUkVBRE1FLm1kIGIvYXBpLXRlc3RzL2Rldl9hcGlzL1JFQURNRS5tZAppbmRleCA3NjYzNzkzLi40YWRhMzllIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvUkVBRE1FLm1kCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9SRUFETUUubWQKQEAgLTEzLDE2ICsxMyw5IEBACiAKIFRoZSBBcmNoaXRlY3R1cmUgVGVzdCBTdWl0ZSBjb250YWlucyB0aGUgdGVzdHMgdGhhdCBhcmUgc2VsZi1jaGVja2luZywgcG9ydGFibGUgQy1iYXNlZCB0ZXN0cyB3aXRoIGRpcmVjdGVkIHN0aW11bHVzLgogCi1UaGUgdGVzdHMgYXJlIGF2YWlsYWJsZSBhcyBvcGVuIHNvdXJjZS4gVGhlIHRlc3RzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBhYnN0cmFjdGlvbiBsYXllcnMgYXJlIGF2YWlsYWJsZSB3aXRoIGFuIEFwYWNoZSB2Mi4wIGxpY2Vuc2UgYWxsb3dpbmcgZm9yIGV4dGVybmFsIGNvbnRyaWJ1dGlvbi4KK1RoZSB0ZXN0cyBhcmUgYXZhaWxhYmxlIGFzIG9wZW4gc291cmNlLiBUaGUgdGVzdHMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGFic3RyYWN0aW9uIGxheWVycyBhcmUgYXZhaWxhYmxlIHdpdGggYW4gQXBhY2hlIHYyLjAgbGljZW5zZSBhbGxvd2luZyBmb3IgZXh0ZXJuYWwgY29udHJpYnV0aW9uLiBUaGlzIHRlc3Qgc3VpdGUgaXMgbm90IGEgc3Vic3RpdHV0ZSBmb3IgZGVzaWduIHZlcmlmaWNhdGlvbi4gVG8gcmV2aWV3IHRoZSB0ZXN0IGxvZ3MsIEFybSBsaWNlbnNlZXMgY2FuIGNvbnRhY3QgQXJtIGRpcmVjdGx5IHRocm91Z2ggdGhlaXIgcGFydG5lciBtYW5hZ2Vycy4KIAotRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXJjaGl0ZWN0dXJlIFRlc3QgU3VpdGUgc3BlY2lmaWNhdGlvbiwgcmVmZXIgdGhlIFtWYWxpZGF0aW9uIE1ldGhvZG9sb2d5XSguLi9kb2NzL0FybV9QU0FfRkZfQXJjaF9UZXN0X1ZhbGlkYXRpb25fTWV0aG9kb2xvZ3kucGRmKSBkb2N1bWVudC4KLQotIyMgUmVsZWFzZSBVcGRhdGUKLSAtIFJlbGVhc2UgVmVyc2lvbiAtIDAuNQotIC0gQ29kZSBRdWFsaXR5IC0gQWxwaGEuIFRoaXMgaW5kaWNhdGVzIHRoZSBzdWl0ZSBpcyBpbiBkZXZlbG9wbWVudCBhbmQgaXQgY29udGFpbnMgdGVzdHMgd2hpY2ggaGF2ZSBub3QgYmVlbiB2YWxpZGF0ZWQgb24gYW55IHBsYXRmb3JtLiBQbGVhc2UgdXNlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gc3VnZ2VzdCBlbmhhbmNlbWVudHMgYW5kIHBvaW50IG91dCBlcnJvcnMuCi0gLSBDdXJyZW50IHJlbGVhc2UgY29udGFpbnMgKipDcnlwdG8gdGVzdHMqKiB0aGF0IGFyZSB3cml0dGVuIGZvciB0aGUgY3J5cHRvIHNlcnZpY2UgQVBJcyBkZWZpbmVkIGluIHRoZSBbY3J5cHRvLmhdKC4uLy4uL2FwaS1zcGVjcy9pbmNsdWRlL2NyeXB0by5oKQotIC0gVGhpcyB0ZXN0IHN1aXRlIGlzIG5vdCBhIHN1YnN0aXR1dGUgZm9yIGRlc2lnbiB2ZXJpZmljYXRpb24uCi0gLSBUbyByZXZpZXcgdGhlIHRlc3QgbG9ncywgQXJtIGxpY2Vuc2VlcyBjYW4gY29udGFjdCBBcm0gZGlyZWN0bHkgdGhyb3VnaCB0aGVpciBwYXJ0bmVyIG1hbmFnZXJzLgorRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXJjaGl0ZWN0dXJlIFRlc3QgU3VpdGUgc3BlY2lmaWNhdGlvbiwgcmVmZXIgdGhlIFtWYWxpZGF0aW9uIE1ldGhvZG9sb2d5XSguLi9kb2NzL0FybV9QU0FfQVBJc19BcmNoX1Rlc3RfVmFsaWRhdGlvbl9NZXRob2RvbG9neS5wZGYpIGRvY3VtZW50LgogCiAjIyBUZXN0cyBTY2VuYXJpb3MKIApAQCAtMzksNyArMzIsNyBAQAogCiAjIyMgUG9ydGluZyBzdGVwcwogCi1SZWZlciB0byB0aGUgW1BvcnRpbmcgR3VpZGVdKC4uL2RvY3MvcG9ydGluZ19ndWlkZS5tZCkgZG9jdW1lbnQgZm9yIHBvcnRpbmcgc3RlcHMuCitSZWZlciB0byB0aGUgW1BTQSBEZXZlbG9wZXIgQVBJcyBUZXN0IFN1aXRlIFBvcnRpbmcgR3VpZGVdKC4uL2RvY3MvcG9ydGluZ19ndWlkZV9kZXZfYXBpcy5tZCkgZG9jdW1lbnQgZm9yIHBvcnRpbmcgc3RlcHMuCiAKICMjIyBCdWlsZCBzdGVwcwogCkBAIC01NCwxNSArNDcsMTUgQEAKIC0gICA8cGxhdGZvcm1fbmFtZT4gaXMgdGhlIHNhbWUgYXMgdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBzcGVjaWZpYyBkaXJlY3RvcnkgY3JlYXRlZCBpbiB0aGUgcGxhdGZvcm0vdGFyZ2V0cy8gZGlyZWN0b3J5LiAgPGJyIC8+CiAtICAgPGNwdV9hcmNoaXRlY3R1cmVfdmVyc2lvbj4gaXMgdGhlIEFybSBBcmNoaXRlY3R1cmUgdmVyc2lvbiBuYW1lIGZvciB3aGljaCB0ZXN0IGJpbmFyaWVzIHNob3VsZCBiZSBjb21waWxlZC4gRm9yIGV4YW1wbGUsIEFybXY3TSwgQXJtdjhNLUJhc2VsaW5lIGFuZCBBcm12OE0tTWFpbmxpbmUgQXJjaGl0ZWN0dXJlLiAgPGJyIC8+CiAtICAgPHN1aXRlX25hbWU+IGlzIHRoZSBzdWl0ZSBuYW1lIGFuZCBpdCBpcyBzYW1lIGFzIHRoZSBzdWl0ZSBuYW1lIGF2YWlsYWJsZSBpbiB0ZXN0X3N1aXRlcy8gZGlyZWN0b3J5LiA8YnIgLz4KLS0gICA8aW5jbHVkZV9wYXRoPiBpcyBhbiBhZGRpdGlvbmFsIGRpcmVjdG9yeSB0byBiZSBpbmNsdWRlZCBpbnRvIGNvbXBpbGVyIHNlYXJjaCBwYXRoLiAqKk5vdGUqKiAtIFRvIHJ1biBjcnlwdG8gdGVzdHMsIGluY2x1ZGUgcGF0aCBtdXN0IHBvaW50IHRvIHBhdGggd2hlcmUgInBzYS9jcnlwdG8uaCIgaXMgbG9jYXRlZCBpbiB5b3VyIGJ1aWxkIHN5c3RlbS48YnIgLz4KKy0gICA8aW5jbHVkZV9wYXRoPiBpcyBhbiBhZGRpdGlvbmFsIGRpcmVjdG9yeSB0byBiZSBpbmNsdWRlZCBpbnRvIGNvbXBpbGVyIHNlYXJjaCBwYXRoLiBOb3RlLSBZb3UgbXVzdCBwcm92aWRlIERldmVsb3BlciBBUElzIGhlYWRlciBmaWxlIGltcGxlbWVudGF0aW9uIHRvIFRlc3QgU3VpdGUgYnVpbGQgc3lzdGVtIHVzaW5nIHRoaXMgb3B0aW9uLiBGb3IgZXhhbXBsZSAtIFRvIGNvbXBpbGVyIENyeXB0byB0ZXN0cywgaW5jbHVkZSBwYXRoIG11c3QgcG9pbnQgdG8gcGF0aCB3aGVyZSAicHNhL2NyeXB0by5oIiBpcyBsb2NhdGVkIGluIHlvdXIgYnVpbGQgc3lzdGVtLjxiciAvPgogLSAgIDxidWlsZF9kaXI+IGlzIGFuIG91dHB1dCBkaXJlY3RvcnkgdG8ga2VlcCBidWlsZCBmaWxlcy4KIAogUmVmZXIgLi90b29scy9zY3JpcHRzL3NldHVwLnNoIC0taGVscCB0byBrbm93IG1vcmUgYWJvdXQgb3B0aW9ucy4KIAotKlRvIGNvbXBpbGUgY3J5cHRvIHRlc3RzIGZvciBmdnBfbXBzMl9jbTRfbWJlZG9zIHBsYXRmb3JtKgorKlRvIGNvbXBpbGUgY3J5cHRvIHRlc3RzIGZvciB0Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200IHBsYXRmb3JtKgogYGBgCiBjZCBhcGktdGVzdHMKLS4vdG9vbHMvc2NyaXB0cy9zZXR1cC5zaCAtLXRhcmdldCBmdnBfbXBzMl9jbTRfbWJlZG9zIC0tY3B1X2FyY2ggYXJtdjdtIC0tc3VpdGUgY3J5cHRvIC0tYnVpbGQgQlVJTERfQ1JZUFRPIC0taW5jbHVkZSA8aW5jbHVkZV9wYXRoPgorLi90b29scy9zY3JpcHRzL3NldHVwLnNoIC0tdGFyZ2V0IHRndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQgLS1jcHVfYXJjaCBhcm12N20gLS1zdWl0ZSBjcnlwdG8gLS1idWlsZCBCVUlMRF9DUllQVE8gLS1pbmNsdWRlIDxpbmNsdWRlX3BhdGg+CiBgYGAKIAogIyMjIEJ1aWxkIG91dHB1dApAQCAtMTAwLDUgKzkzLDUgQEAKIAogLS0tLS0tLS0tLS0tLS0KIAotKkNvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4qCisqQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuKgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwMS90ZXN0X2MwMDEuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDAxL3Rlc3RfYzAwMS5jCmluZGV4IDgzNGY0NDIuLjBiMzM0ZmMgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDAxL3Rlc3RfYzAwMS5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDAxL3Rlc3RfYzAwMS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSwxNCArMTUsOCBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCi0jZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgotI2VuZGlmCi0KICNpbmNsdWRlICJ0ZXN0X2MwMDEuaCIKIAogY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMDFfY3J5cHRvX2xpc3RbXSA9IHsKQEAgLTM2LDQ5ICszMCw0NCBAQAogaW50MzJfdCBwc2FfZ2VuZXJhdGVfcmFuZG9tX3dpdGhvdXRfaW5pdF90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQogewogICAgIHVpbnQ4X3QgICAgICAgICBvdXRwdXRbR0VORVJBVEVfU0laRV07CisgICAgaW50MzJfdCAgICAgICAgIHN0YXR1czsKIAotICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgY2FsbGluZyBjcnlwdG8gZnVuY3Rpb25zIGJlZm9yZSBwc2FfY3J5cHRvX2luaXQgXG4iLCAwKTsKKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBjYWxsaW5nIGNyeXB0byBmdW5jdGlvbnMgYmVmb3JlIHBzYV9jcnlwdG9faW5pdFxuIiwgMCk7CiAKICAgICAvKiBHZW5lcmF0ZSByYW5kb20gYnl0ZXMgKi8KLSAgICBpZiAodmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFURV9SQU5ET00sIG91dHB1dCwgR0VORVJBVEVfU0laRSkgPT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiVGhlIGNyeXB0byBmdW5jdGlvbiBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IHN1Y2NlZWRlZFxuIiwgMCk7Ci0gICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0NSWVBUT19GQUlMVVJFOwotICAgIH0KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRFX1JBTkRPTSwgb3V0cHV0LCBHRU5FUkFURV9TSVpFKTsKKyAgICBpZiAoc3RhdHVzID09IFBTQV9TVUNDRVNTKQorICAgICAgICByZXR1cm4gUkVTVUxUX1NLSVAoVkFMX1NUQVRVU19JTklUX0FMUkVBRFlfRE9ORSk7CisgICAgZWxzZQorICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9CQURfU1RBVEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOwogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KIAogaW50MzJfdCBwc2FfY3J5cHRvX2luaXRfdGVzdChzZWN1cml0eV90IGNhbGxlcikKIHsKLSAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworICAgIGludDMyX3QgICAgICAgIHN0YXR1czsKIAotICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazJdIFRlc3QgcHNhX2NyeXB0b19pbml0XG4iLCBzdGF0dXMpOworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAyXSBUZXN0IHBzYV9jcnlwdG9faW5pdFxuIiwgMCk7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwotICAgIGlmICh2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpICE9IFBTQV9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIkNyeXB0byBpbml0IGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfSU5JVF9GQUlMRUQ7Ci0gICAgfQorICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CiAKLSAgIHJldHVybiBzdGF0dXM7CisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KIAogaW50MzJfdCBtdWx0aXBsZV9wc2FfY3J5cHRvX2luaXRfdGVzdChzZWN1cml0eV90IGNhbGxlcikKIHsKLSAgICBpbnQzMl90ICAgICAgICAgaSwgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworICAgIGludDMyX3QgICAgICAgICBpLCBzdGF0dXM7CiAKLSAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2szXSBUZXN0IG11bHRpcGxlIHBzYV9jcnlwdG9faW5pdCBcbiIsIDApOworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAzXSBUZXN0IG11bHRpcGxlIHBzYV9jcnlwdG9faW5pdCBcbiIsIDApOwogICAgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspCiAgICAgewogICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwotICAgICAgICBpZiAodmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKSAhPSBQU0FfU1VDQ0VTUykKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19JTklUX0ZBSUxFRDsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CiAgICAgfQogCi0gICByZXR1cm4gc3RhdHVzOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwMS90ZXN0X2MwMDEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDAxL3Rlc3RfYzAwMS5oCmluZGV4IGUyM2VlNzYuLjAyYThjNmIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDAxL3Rlc3RfYzAwMS5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDAxL3Rlc3RfYzAwMS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xOCw3ICsxOCw2IEBACiAjZGVmaW5lIF9URVNUX0MwMDFfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCi0KICNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzAwMSkKICNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKICNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDAyL3Rlc3RfYzAwMi5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDIvdGVzdF9jMDAyLmMKaW5kZXggZGY0ZGU4NC4uOGUxZjBjMSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDIvdGVzdF9jMDAyLmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDIvdGVzdF9jMDAyLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDE0ICsxNSw4IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKLSNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgInRlc3RfYzAwMi5oIgogI2luY2x1ZGUgInRlc3RfZGF0YS5oIgogI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKQEAgLTM0LDM3ICsyOCwzOCBAQAogICAgIE5VTEwsCiB9OwogCi1pbnQgZ190ZXN0X2NvdW50Oworc3RhdGljIGludCBnX3Rlc3RfY291bnQgPSAxOwogCiBpbnQzMl90IHBzYV9pbXBvcnRfa2V5X3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCiB7Ci0gICAgaW50MzJfdCAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7Ci0gICAgdWludDMyX3QgICAgICAgICBsZW5ndGgsIGksIGo7CisgICAgdWludDMyX3QgICAgICAgICBsZW5ndGgsIGk7CiAgICAgdWludDhfdCAgICAgICAgICBkYXRhW0JVRkZFUl9TSVpFXTsKICAgICB1aW50OF90ICAgICAgICAgICprZXlfZGF0YTsKICAgICBwc2Ffa2V5X3BvbGljeV90IHBvbGljeTsKICAgICBwc2Ffa2V5X3R5cGVfdCAgIGtleV90eXBlOwogICAgIHNpemVfdCAgICAgICAgICAgYml0czsKICAgICBpbnQgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKLQotICAgIGdfdGVzdF9jb3VudCA9IDE7CisgICAgaW50MzJfdCAgICAgICAgICBzdGF0dXM7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwotICAgIGlmICh2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpICE9IFBTQV9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5JVF9GQUlMRUQ7Ci0gICAgfQotCi0gICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCi0gICAgICogdXNhZ2Ugb2YgdGhlIGtleQotICAgICAqLwotICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOwogCiAgICAgLyogU2V0IHRoZSBrZXkgZGF0YSBidWZmZXIgdG8gdGhlIGlucHV0IGJhc2Ugb24gYWxnb3JpdGhtICovCiAgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKICAgICB7CiAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOwogICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKICAgICAgICAgaWYgKFBTQV9LRVlfVFlQRV9JU19SU0EoY2hlY2sxW2ldLmtleV90eXBlKSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGNoZWNrMVtpXS5rZXlfdHlwZSA9PSBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIpCkBAIC0xMDAsODAgKzk1LDQ2IEBACiAgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOwogCisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2sxW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9sZW5ndGgsICZjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCiAgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9zbG90LCAmcG9saWN5KTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIHNldCBrZXkgcG9saWN5IGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CiAKICAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLwotICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfc2xvdCwgY2hlY2sxW2ldLmtleV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSwgY2hlY2sxW2ldLmtleV9sZW5ndGgpOwotICAgICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgaW1wb3J0IGtleSBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQorICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X3R5cGUsIGtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvKiBHZXQgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYSBrZXkgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRVRfS0VZX0lORk9STUFUSU9OLCBjaGVjazFbaV0ua2V5X3Nsb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleV90eXBlLCAmYml0cyk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBnZXQga2V5IGluZm9ybWF0aW9uIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0tFWV9JTkZPUk1BVElPTiwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXlfdHlwZSwgJmJpdHMpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKIAotICAgICAgICBpZiAoa2V5X3R5cGUgIT0gY2hlY2sxW2ldLmtleV90eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgbWlzbWF0Y2gga2V5IHR5cGVcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQorICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChrZXlfdHlwZSwgY2hlY2sxW2ldLmtleV90eXBlLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKIAotICAgICAgICBpZiAoYml0cyAhPSBjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0U3RvcmVkIGtleSBsZW5ndGggbWlzbWF0Y2hcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRF9TSVpFOwotICAgICAgICB9CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGJpdHMsIGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKIAogICAgICAgICAvKiBFeHBvcnQgYSBrZXkgaW4gYmluYXJ5IGZvcm1hdCAqLwotICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0VYUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfc2xvdCwgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVGRkVSX1NJWkUsICZsZW5ndGgpOwotICAgICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgZXhwb3J0IGtleSBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQorICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0VYUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVUZGRVJfU0laRSwgJmxlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOwogCi0gICAgICAgIGlmIChsZW5ndGggIT0gY2hlY2sxW2ldLmV4cGVjdGVkX2tleV9sZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEtleSBsZW5ndGggbWlzbWF0Y2hcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRF9TSVpFOwotICAgICAgICB9CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGxlbmd0aCwgY2hlY2sxW2ldLmV4cGVjdGVkX2tleV9sZW5ndGgsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKIAotICAgICAgICBpZiAodmFsLT5jcnlwdG9fa2V5X3R5cGVfaXNfcmF3KGNoZWNrMVtpXS5rZXlfdHlwZSkpCisgICAgICAgIGlmIChQU0FfS0VZX1RZUEVfSVNfVU5TVFJVQ1RVUkVEKGNoZWNrMVtpXS5rZXlfdHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW5ndGg7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmtleV9kYXRhW2pdICE9IGRhdGFbal0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRLZXkgZGF0YSBtaXNtYXRjaFxuIiwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0RBVEFfTUlTTUFUQ0g7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgVEVTVF9BU1NFUlRfTUVNQ01QKGRhdGEsIGNoZWNrMVtpXS5rZXlfZGF0YSwgbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDExKSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoUFNBX0tFWV9UWVBFX0lTX1JTQShjaGVjazFbaV0ua2V5X3R5cGUpIHx8IFBTQV9LRVlfVFlQRV9JU19FQ0MoY2hlY2sxW2ldLmtleV90eXBlKSkKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxlbmd0aDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChrZXlfZGF0YVtqXSAhPSBkYXRhW2pdKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0S2V5IGRhdGEgbWlzbWF0Y2hcbiIsIDApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19EQVRBX01JU01BVENIOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX01FTUNNUChrZXlfZGF0YSwgZGF0YSwgbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEyKSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CkBAIC0xODYsMjEgKzE0NywyOCBAQAogCiBpbnQzMl90IHBzYV9pbXBvcnRfa2V5X25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCiB7Ci0gICAgaW50MzJfdCAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CiAgICAgaW50ICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMikvc2l6ZW9mKGNoZWNrMlswXSk7Ci0gICAgdWludDMyX3QgICAgICAgICBpOworICAgIGludDMyX3QgICAgICAgICAgaSwgc3RhdHVzOwogICAgIHBzYV9rZXlfcG9saWN5X3QgcG9saWN5OworICAgIHBzYV9rZXlfaGFuZGxlX3QgaW52YWxpZF9rZXlfaGFuZGxlID0gMHhkZWFkOwogCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KLSAgICBpZiAodmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKSAhPSBQU0FfU1VDQ0VTUykKLSAgICB7Ci0gICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOSVRfRkFJTEVEOwotICAgIH0KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKICAgICB7Ci0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOwotICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMltpXS50ZXN0X2Rlc2MsIDApOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2ltcG9ydF9rZXkgd2l0aCBhbHJlYWR5IG9jY3VwaWVkIGtleSBzbG90XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMltpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfbGVuZ3RoLCAmY2hlY2syW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKIAogICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CkBAIC0yMTIsMTMgKzE4MCwzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2FsZyk7CiAKICAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLwotICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMltpXS5rZXlfc2xvdCwgY2hlY2syW2ldLmtleV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfZGF0YSwgY2hlY2syW2ldLmtleV9sZW5ndGgpOwotICAgICAgICBpZiAoY2hlY2syW2ldLmV4cGVjdGVkX3N0YXR1cyAhPSBzdGF0dXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBpbXBvcnQga2V5IHNob3VsZCBoYXZlIGZhaWxlZCBidXQgc3VjY2VlZGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwotICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2syW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfdHlwZSwgY2hlY2syW2ldLmtleV9kYXRhLCBjaGVjazJbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIC8qIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUgb2NjdXBpZWQga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X3R5cGUsIGNoZWNrMltpXS5rZXlfZGF0YSwgY2hlY2syW2ldLmtleV9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9PQ0NVUElFRF9TTE9ULCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2ltcG9ydF9rZXkgd2l0aCB6ZXJvIGFzIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSB3aXRoIHplcm8gYXMga2V5IGhhbmRsZSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIDAsIGNoZWNrMltpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfZGF0YSwgY2hlY2syW2ldLmtleV9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9pbXBvcnRfa2V5IHdpdGggZGVzdHJveWVkIGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBEZXN0cm95IHRoZSBoYW5kbGUgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2syW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIHdpdGggZGVzdHJveWVkIGhhbmRsZSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfdHlwZSwgY2hlY2syW2ldLmtleV9kYXRhLCBjaGVjazJbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2ltcG9ydF9rZXkgd2l0aCB1bmFsbG9jYXRlZCBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIEltcG9ydCB0aGUga2V5IGRhdGEgd2l0aCB1bmFsbG9jYXRlZCBrZXkgaGFuZGxlICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgaW52YWxpZF9rZXlfaGFuZGxlLCBjaGVjazJbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2RhdGEsIGNoZWNrMltpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwMi90ZXN0X2MwMDIuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDAyL3Rlc3RfYzAwMi5oCmluZGV4IDU0MTFlMjcuLjQwODFkMjkgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDAyL3Rlc3RfYzAwMi5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDAyL3Rlc3RfYzAwMi5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xOCw3ICsxOCw2IEBACiAjZGVmaW5lIF9URVNUX0MwMDJfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCi0KICNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzAwMikKICNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKICNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDAyL3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDIvdGVzdF9kYXRhLmgKaW5kZXggNTQ5MjQ2My4uY2E3NTk2MCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDIvdGVzdF9kYXRhLmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDIvdGVzdF9kYXRhLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE5LDcgKzE5LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1s3NV07Ci0gICAgcHNhX2tleV9zbG90X3QgICAgICAgICAga2V5X3Nsb3Q7CisgICAgcHNhX2tleV9oYW5kbGVfdCAgICAgICAga2V5X2hhbmRsZTsKICAgICBwc2Ffa2V5X3R5cGVfdCAgICAgICAgICBrZXlfdHlwZTsKICAgICB1aW50OF90ICAgICAgICAgICAgICAgICBrZXlfZGF0YVszNF07CiAgICAgdWludDMyX3QgICAgICAgICAgICAgICAga2V5X2xlbmd0aDsKQEAgLTMwLDEwICszMCwxMCBAQAogICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1czsKIH0gdGVzdF9kYXRhOwogCi11aW50OF90IHJzYV8zODRfa2V5cGFpclsxXTsKLXVpbnQ4X3QgcnNhXzM4NF9rZXlkYXRhWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlwYWlyWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlkYXRhWzFdOwogCi11aW50OF90IHJzYV8yNTZfa2V5cGFpcltdID0geworc3RhdGljIHVpbnQ4X3QgcnNhXzI1Nl9rZXlwYWlyW10gPSB7CiAgMHgzMCwgMHg4MiwgMHgwNCwgMHhBNSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhDMCwKICAweDk1LCAweDA4LCAweEUxLCAweDU3LCAweDQxLCAweEYyLCAweDcxLCAweDZELCAweEI3LCAweEQyLCAweDQ1LCAweDQxLCAweDI3LAogIDB4MDEsIDB4NjUsIDB4QzYsIDB4NDUsIDB4QUUsIDB4RjIsIDB4QkMsIDB4MjQsIDB4MzAsIDB4QjgsIDB4OTUsIDB4Q0UsIDB4MkYsCkBAIC0xMjcsNyArMTI3LDcgQEAKICAweDVGLCAweEE4LCAweEJGLCAweDE5LCAweDMyLCAweEExLCAweEY1LCAweERDLCAweDAzLCAweEU2LCAweDdDLCAweDlBLCAweDFGLAogIDB4MEMsIDB4N0MsIDB4QTksIDB4QjAsIDB4MEUsIDB4MjEsIDB4MzcsIDB4M0IsIDB4RjEsIDB4QjB9OwogCi11aW50OF90IHJzYV8yNTZfa2V5ZGF0YVtdID0geworc3RhdGljIHVpbnQ4X3QgcnNhXzI1Nl9rZXlkYXRhW10gPSB7CiAgMHgzMCwgMHg4MiwgMHgwMSwgMHgyMiwgMHgzMCwgMHgwRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwKICAweDAxLCAweDAxLCAweDAxLCAweDA1LCAweDAwLCAweDAzLCAweDgyLCAweDAxLCAweDBGLCAweDAwLCAweDMwLCAweDgyLCAweDAxLCAweDBBLAogIDB4MDIsIDB4ODIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4REIsIDB4MUMsIDB4N0YsIDB4MkUsIDB4MEIsIDB4Q0QsIDB4QkYsIDB4Q0UsIDB4RDEsCkBAIC0xNTAsNyArMTUwLDcgQEAKICAweDBGLCAweDcxLCAweDJELCAweEQyLCAweDA4LCAweDEwLCAweDFCLCAweEFELCAweDQ0LCAweDQxLCAweEUwLCAweEZFLCAweDc5LCAweEEwLAogIDB4NjMsIDB4OTMsIDB4OEEsIDB4QjEsIDB4NUQsIDB4RTksIDB4QjAsIDB4RUUsIDB4NkYsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDF9OwogCi11aW50OF90IGVjX2tleWRhdGFbXSA9IHsKK3N0YXRpYyB1aW50OF90IGVjX2tleWRhdGFbXSA9IHsKICAweDMwLCAweDQ5LCAweDMwLCAweDEzLCAweDA2LCAweDA3LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAyLCAweDAxLCAweDA2LAogIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDMsIDB4MzIsIDB4MDAsIDB4MDQsIDB4QkMsCiAgMHg3OSwgMHg3RCwgMHhCMywgMHhBRSwgMHg3RiwgMHgwOCwgMHhFQywgMHgzRCwgMHg0OSwgMHg2QiwgMHg0RiwgMHhCNCwgMHgxMSwgMHhCMywKQEAgLTE1OCw3ICsxNTgsNyBAQAogIDB4RUMsIDB4OEIsIDB4MUEsIDB4N0IsIDB4RjIsIDB4NEIsIDB4RTksIDB4MjksIDB4NTEsIDB4Q0MsIDB4NUIsIDB4QTEsIDB4QkUsIDB4QkIsCiAgMHgyNCwgMHg3NCwgMHg5MCwgMHg5QSwgMHhFMH07CiAKLXVpbnQ4X3QgZWNfa2V5cGFpcltdID0geworc3RhdGljIHVpbnQ4X3QgZWNfa2V5cGFpcltdID0gewogIDB4MzAsIDB4NUYsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MTgsIDB4MzMsIDB4OEUsIDB4ODYsIDB4QTgsIDB4ODEsIDB4RTIsIDB4MzgsCiAgMHhGNSwgMHg0OSwgMHhCRCwgMHg2RiwgMHgwNSwgMHg1MywgMHg0OSwgMHg0QiwgMHg3MywgMHhFMywgMHhENiwgMHgxMSwgMHgzMCwgMHhGRCwKICAweEM2LCAweEM5LCAweDZELCAweEEwLCAweDBBLCAweDA2LCAweDA4LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAzLCAweDAxLApAQCAtMTY3LDE4ICsxNjcsMTggQEAKICAweEI3LCAweDc2LCAweEM2LCAweDc0LCAweEY3LCAweEM2LCAweEYzLCAweDU0LCAweEI3LCAweEQyLCAweDI0LCAweDA2LCAweDJDLCAweDFGLAogIDB4NjgsIDB4NTQsIDB4QjUsIDB4QTcsIDB4QUYsIDB4MEYsIDB4RTUsIDB4NzgsIDB4RUEsIDB4RjIsIDB4NTgsIDB4RjAsIDB4Mjd9OwogCi10ZXN0X2RhdGEgY2hlY2sxW10gPSB7CitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0gewogeyJUZXN0IHBzYV9pbXBvcnRfa2V5IDE2IEJ5dGUgQUVTXG4iLCAxLCBQU0FfS0VZX1RZUEVfQUVTLAogezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCiAgMHg1RiwgMHhDOX0sCi0gQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKICBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIAogeyJUZXN0IHBzYV9pbXBvcnRfa2V5IDI0IEJ5dGUgQUVTXG4iLCAyLCBQU0FfS0VZX1RZUEVfQUVTLAogezB4MjQsIDB4MTMsIDB4NjEsIDB4NDcsIDB4NjEsIDB4QjgsIDB4QzgsIDB4RjAsIDB4REYsIDB4QUIsIDB4NUEsIDB4MEUsIDB4ODcsCiAgMHg0MCwgMHhBQywgMHhBMywgMHg5MCwgMHg3NywgMHg4MywgMHg1MiwgMHgzMSwgMHg3NCwgMHhGOX0sCi0gQUVTXzI0Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKICBCWVRFU19UT19CSVRTKEFFU18yNEJfS0VZX1NJWkUpLCBBRVNfMjRCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIApAQCAtMTg2LDcgKzE4Niw3IEBACiB7MHhFQSwgMHhENSwgMHhFNiwgMHhDOCwgMHg1MSwgMHhGOSwgMHhFQywgMHhCQiwgMHg5QiwgMHg1NywgMHg3QywgMHhFRCwgMHhEMiwKICAweDRCLCAweDgyLCAweDg0LCAweDlGLCAweDlGLCAweEU2LCAweDczLCAweDIxLCAweDNELCAweDFBLCAweDA1LCAweEM5LCAweEVELAogIDB4REYsIDB4MjUsIDB4MTcsIDB4NjgsIDB4ODYsIDB4QUV9LAotIEFFU18zMkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKKyBBRVNfMzJCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsCiAgQllURVNfVE9fQklUUyhBRVNfMzJCX0tFWV9TSVpFKSwgQUVTXzMyQl9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKQEAgLTIwNCwxNCArMjA0LDE0IEBACiAKIHsiVGVzdCBwc2FfaW1wb3J0X2tleSB3aXRoIERFUyA2NCBiaXQga2V5XG4iLCA2LCBQU0FfS0VZX1RZUEVfREVTLAogIHsweDcwLCAweDI0LCAweDU1LCAweDBDLCAweDE0LCAweDlELCAweEVELCAweDI5fSwKLSBERVNfOEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKKyBERVNfOEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKICBCWVRFU19UT19CSVRTKERFU184Ql9LRVlfU0laRSksIERFU184Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKIHsiVGVzdCBwc2FfaW1wb3J0X2tleSB3aXRoIFRyaXBsZSBERVMgMi1LZXlcbiIsIDcsIFBTQV9LRVlfVFlQRV9ERVMsCiB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGfSwKLSBERVMzXzJLRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIERFUzNfMktFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsCiAgQllURVNfVE9fQklUUyhERVMzXzJLRVlfU0laRSksIERFUzNfMktFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIApAQCAtMjE5LDcgKzIxOSw3IEBACiB7MHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhBQiwgMHhDRCwgMHhFRiwKICAweEYxLCAweEUwLCAweEQzLCAweEMyLCAweEI1LCAweEE0LCAweDk3LCAweDg2LAogIDB4RkUsIDB4REMsIDB4QkEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTB9LAotIERFUzNfM0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgREVTM18zS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKICBCWVRFU19UT19CSVRTKERFUzNfM0tFWV9TSVpFKSwgREVTM18zS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogCkBAIC0yMzYsNTAgKzIzNiwzNiBAQAogIDk3LCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DQVRFR09SWV9BU1lNTUVUUklDX0VOQ1JZUFRJT04sCiAgMTkyLCA5NywgUFNBX1NVQ0NFU1MKIH0sCi19OwogCi0KLXRlc3RfZGF0YSBjaGVjazJbXSA9IHsKIHsiVGVzdCBwc2FfaW1wb3J0X2tleSB3aXRoIGtleSBkYXRhIGdyZWF0ZXIgdGhhbiB0aGUgYWxnb3JpdGhtIHNpemVcbiIsIDExLCBQU0FfS0VZX1RZUEVfQUVTLAogezB4MjQsIDB4MTMsIDB4NjEsIDB4NDcsIDB4NjEsIDB4QjgsIDB4QzgsIDB4RjAsIDB4REYsIDB4QUIsIDB4NUEsIDB4MEUsIDB4ODcsCiAgMHg0MCwgMHhBQywgMHhBMywgMHg5MCwgMHg3NywgMHg4MywgMHg1MiwgMHgzMSwgMHg3NCwgMHhGOSwgMHgwNSwgMHhDOSwgMHhFRCwKICAweERGLCAweDI1LCAweDE3LCAweDY4LCAweDg2LCAweEFFfSwKLSBBRVNfMzRCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgQUVTXzM0Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAogIEJZVEVTX1RPX0JJVFMoQUVTXzM0Ql9LRVlfU0laRSksIEFFU18zNEJfS0VZX1NJWkUsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCiB9LAogCiB7IlRlc3QgcHNhX2ltcG9ydF9rZXkgd2l0aCBpbmNvcnJlY3Qga2V5IGRhdGEgc2l6ZVxuIiwgMTIsIFBTQV9LRVlfVFlQRV9BRVMsCiB7MHgyNCwgMHgxMywgMHg2MSwgMHg0NywgMHg2MSwgMHhCOCwgMHhDOCwgMHhGMCwgMHhERiwgMHhBQiwgMHg1QSwgMHgwRSwgMHg4NywKICAweDQwLCAweEFDLCAweEEzLCAweDkwfSwKLUFFU18xOEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKK0FFU18xOEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKIEJZVEVTX1RPX0JJVFMoQUVTXzE4Ql9LRVlfU0laRSksIEFFU18xOEJfS0VZX1NJWkUsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCiB9LAogCiB7IlRlc3QgcHNhX2ltcG9ydF9rZXkgd2l0aCBpbmNvcnJlY3Qga2V5IHR5cGVcbiIsIDEzLCBQU0FfS0VZX1RZUEVfVkVORE9SX0ZMQUcsCiB7MHgyNCwgMHgxMywgMHg2MSwgMHg0NywgMHg2MSwgMHhCOCwgMHhDOCwgMHhGMCwgMHhERiwgMHhBQiwgMHg1QSwgMHgwRSwgMHg4NywKICAweDQwLCAweEFDLCAweEEzLCAweDkwLCAweDc3LCAweDgzLCAweDUyLCAweDMxLCAweDc0LCAweEY5fSwKLUFFU18yNEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKK0FFU18yNEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKIEJZVEVTX1RPX0JJVFMoQUVTXzI0Ql9LRVlfU0laRSksIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVELAogfSwKK307CiAKLXsiVGVzdCBwc2FfaW1wb3J0X2tleSB3aXRoIGFscmVhZHkgb2NjdXBpZWQga2V5IHNsb3RcbiIsIDEsIFBTQV9LRVlfVFlQRV9BRVMsCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMltdID0geworeyJUZXN0IHBzYV9pbXBvcnRfa2V5IG5lZ2F0aXZlIGNhc2VzXG4iLCAxLCBQU0FfS0VZX1RZUEVfQUVTLAogezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCiAgMHg1RiwgMHhDOX0sCi1BRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCitBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsCiBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfRVJST1JfT0NDVVBJRURfU0xPVAogfSwKIAoteyJUZXN0IHBzYV9pbXBvcnRfa2V5IHdpdGggaW52YWxpZCBrZXkgc2xvdFxuIiwgSU5WQUxJRF9LRVlfU0xPVCwgUFNBX0tFWV9UWVBFX0FFUywKLXsweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAotIDB4NUYsIDB4Qzl9LAotQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAotQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKLX0sCi0KLXsiVGVzdCBwc2FfaW1wb3J0X2tleSB3aXRoIHplcm8ga2V5IHNsb3RcbiIsIFpFUk9fS0VZX1NMT1QsIFBTQV9LRVlfVFlQRV9BRVMsCi17MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKLSAweDVGLCAweEM5fSwKLUFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKLUJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCi19LAogfTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDAzL3Rlc3RfYzAwMy5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDMvdGVzdF9jMDAzLmMKaW5kZXggNjYxMzkxYi4uNGQ5MTIxYSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDMvdGVzdF9jMDAzLmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDMvdGVzdF9jMDAzLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDE0ICsxNSw4IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKLSNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgInRlc3RfYzAwMy5oIgogI2luY2x1ZGUgInRlc3RfZGF0YS5oIgogCkBAIC0zMywzNSArMjcsMzggQEAKICAgICBOVUxMLAogfTsKIAotaW50IGdfdGVzdF9jb3VudDsKK3N0YXRpYyBpbnQgICAgICBnX3Rlc3RfY291bnQgPSAxOworc3RhdGljIHVpbnQ4X3QgIGRhdGFbQlVGRkVSX1NJWkVdOwogCiBpbnQzMl90IHBzYV9leHBvcnRfa2V5X3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCiB7Ci0gICAgaW50MzJfdCAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7Ci0gICAgdWludDMyX3QgICAgICAgICBsZW5ndGgsIGksIGo7Ci0gICAgdWludDhfdCAgICAgICAgICBkYXRhW0JVRkZFUl9TSVpFXTsKKyAgICB1aW50MzJfdCAgICAgICAgIGxlbmd0aCwgaTsKICAgICB1aW50OF90ICAgICAgICAgICprZXlfZGF0YTsKICAgICBwc2Ffa2V5X3BvbGljeV90IHBvbGljeTsKICAgICBwc2Ffa2V5X3R5cGVfdCAgIGtleV90eXBlOwogICAgIHNpemVfdCAgICAgICAgICAgYml0czsKICAgICBpbnQgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKLQotICAgIGdfdGVzdF9jb3VudCA9IDE7CisgICAgaW50MzJfdCAgICAgICAgICBzdGF0dXM7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwotICAgIGlmICh2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpICE9IFBTQV9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5JVF9GQUlMRUQ7Ci0gICAgfQotCi0gICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCi0gICAgICogdXNhZ2Ugb2YgdGhlIGtleQotICAgICAqLwotICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOwogCiAgICAgLyogU2V0IHRoZSBrZXkgZGF0YSBidWZmZXIgdG8gdGhlIGlucHV0IGJhc2Ugb24gYWxnb3JpdGhtICovCiAgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKICAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKICAgICAgICAgaWYgKFBTQV9LRVlfVFlQRV9JU19SU0EoY2hlY2sxW2ldLmtleV90eXBlKSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGNoZWNrMVtpXS5rZXlfdHlwZSA9PSBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIpCkBAIC05Niw4NyArOTMsNDggQEAKICAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCiAgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOwotICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKKworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMVtpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfbGVuZ3RoLCAmY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKIAogICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCi0gICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfc2xvdCwgJnBvbGljeSk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBzZXQga2V5IHBvbGljeSBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQorICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOwogCiAgICAgICAgIC8qIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazFbaV0ua2V5X3Nsb3QsIGNoZWNrMVtpXS5rZXlfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEsIGNoZWNrMVtpXS5rZXlfbGVuZ3RoKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGltcG9ydCBrZXkgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV90eXBlLCBrZXlfZGF0YSwgY2hlY2sxW2ldLmtleV9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKIAogICAgICAgICAvKiBHZXQgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYSBrZXkgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRVRfS0VZX0lORk9STUFUSU9OLCBjaGVjazFbaV0ua2V5X3Nsb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleV90eXBlLCAmYml0cyk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBnZXQga2V5IGluZm9ybWF0aW9uIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0tFWV9JTkZPUk1BVElPTiwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5X3R5cGUsICZiaXRzKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CiAKLSAgICAgICAgaWYgKGtleV90eXBlICE9IGNoZWNrMVtpXS5rZXlfdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIG1pc21hdGNoIGtleSB0eXBlXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoa2V5X3R5cGUsIGNoZWNrMVtpXS5rZXlfdHlwZSwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CiAKLSAgICAgICAgaWYgKGJpdHMgIT0gY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFN0b3JlZCBrZXkgbGVuZ3RoIG1pc21hdGNoXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfU0laRTsKLSAgICAgICAgfQorICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChiaXRzLCBjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CiAKICAgICAgICAgLyogRXhwb3J0IGEga2V5IGluIGJpbmFyeSBmb3JtYXQgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19FWFBPUlRfS0VZLCBjaGVjazFbaV0ua2V5X3Nsb3QsIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVRkZFUl9TSVpFLCAmbGVuZ3RoKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgZXhwb3J0IGtleSBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICAgICAgfQorICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0VYUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uYnVmZmVyX3NpemUsICZsZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOwogCiAgICAgICAgIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGxlbmd0aCAhPSBjaGVjazFbaV0uZXhwZWN0ZWRfa2V5X2xlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0S2V5IGxlbmd0aCBtaXNtYXRjaFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX1NJWkU7Ci0gICAgICAgIH0KKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobGVuZ3RoLCBjaGVjazFbaV0uZXhwZWN0ZWRfa2V5X2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOwogCiAgICAgICAgIC8qIENoZWNrIGlmIG9yaWdpbmFsIGtleSBkYXRhIG1hdGNoZXMgd2l0aCB0aGUgZXhwb3J0ZWQgZGF0YSAqLwotICAgICAgICBpZiAodmFsLT5jcnlwdG9fa2V5X3R5cGVfaXNfcmF3KGNoZWNrMVtpXS5rZXlfdHlwZSkpCisgICAgICAgIGlmIChQU0FfS0VZX1RZUEVfSVNfVU5TVFJVQ1RVUkVEKGNoZWNrMVtpXS5rZXlfdHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW5ndGg7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmtleV9kYXRhW2pdICE9IGRhdGFbal0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRLZXkgZGF0YSBtaXNtYXRjaFxuIiwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0RBVEFfTUlTTUFUQ0g7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgVEVTVF9BU1NFUlRfTUVNQ01QKGNoZWNrMVtpXS5rZXlfZGF0YSwgZGF0YSwgbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDExKSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoUFNBX0tFWV9UWVBFX0lTX1JTQShjaGVjazFbaV0ua2V5X3R5cGUpIHx8IFBTQV9LRVlfVFlQRV9JU19FQ0MoY2hlY2sxW2ldLmtleV90eXBlKSkKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxlbmd0aDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChrZXlfZGF0YVtqXSAhPSBkYXRhW2pdKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0S2V5IGRhdGEgbWlzbWF0Y2hcbiIsIDApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19EQVRBX01JU01BVENIOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX01FTUNNUChrZXlfZGF0YSwgZGF0YSwgbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEyKSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CkBAIC0xODksMzAgKzE0Nyw3NiBAQAogCiBpbnQzMl90IHBzYV9leHBvcnRfa2V5X25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCiB7Ci0gICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKLSAgICBpbnQgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazIpL3NpemVvZihjaGVjazJbMF0pOwotICAgIHVpbnQzMl90ICAgICAgICBpLCBsZW5ndGg7Ci0gICAgdWludDhfdCAgICAgICAgIGRhdGFbQlVGRkVSX1NJWkVdOworICAgIGludCAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazIpL3NpemVvZihjaGVjazJbMF0pOworICAgIHVpbnQzMl90ICAgICAgICAgaSwgbGVuZ3RoOworICAgIGludDMyX3QgICAgICAgICAgc3RhdHVzOworICAgIHBzYV9rZXlfcG9saWN5X3QgcG9saWN5OwogCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KLSAgICBpZiAodmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKSAhPSBQU0FfU1VDQ0VTUykKLSAgICB7Ci0gICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOSVRfRkFJTEVEOwotICAgIH0KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKICAgICB7Ci0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOwotICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMltpXS50ZXN0X2Rlc2MsIDApOworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2V4cG9ydF9rZXkgd2l0aCB1bmFsbG9jYXRlZCBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBFeHBvcnQgYSBrZXkgaW4gYmluYXJ5IGZvcm1hdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0VYUE9SVF9LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9sZW5ndGgsICZsZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9leHBvcnRfa2V5IHdpdGggZW1wdHkga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazJbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMltpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CiAKICAgICAgICAgLyogRXhwb3J0IGEga2V5IGluIGJpbmFyeSBmb3JtYXQgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19FWFBPUlRfS0VZLCBjaGVjazJbaV0ua2V5X3Nsb3QsIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9sZW5ndGgsICZsZW5ndGgpOwotICAgICAgICBpZiAoY2hlY2syW2ldLmV4cGVjdGVkX3N0YXR1cyAhPSBzdGF0dXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBleHBvcnQga2V5IHNob3VsZCBoYXZlIGZhaWxlZCBidXQgc3VjY2VlZGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwotICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRVhQT1JUX0tFWSwgY2hlY2syW2ldLmtleV9oYW5kbGUsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmxlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0VNUFRZX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIHplcm8gYXMga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogRXhwb3J0IGEga2V5IGluIGJpbmFyeSBmb3JtYXQgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19FWFBPUlRfS0VZLCAwLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9sZW5ndGgsICZsZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9leHBvcnRfa2V5IHdpdGggZGVzdHJveWVkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMltpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2syW2ldLmtleV9oYW5kbGUsICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2syW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV90eXBlLCBjaGVjazJbaV0ua2V5X2RhdGEsIGNoZWNrMltpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisKKyAgICAgICAgLyogRGVzdHJveSB0aGUga2V5IGhhbmRsZSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOworCisgICAgICAgIC8qIEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRVhQT1JUX0tFWSwgY2hlY2syW2ldLmtleV9oYW5kbGUsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmxlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CiAgICAgfQorCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDAzL3Rlc3RfYzAwMy5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDMvdGVzdF9jMDAzLmgKaW5kZXggM2ZmNjIwZS4uNGQ4YTRkNiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDMvdGVzdF9jMDAzLmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDMvdGVzdF9jMDAzLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE4LDcgKzE4LDYgQEAKICNkZWZpbmUgX1RFU1RfQzAwM19DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKLQogI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxjMDAzKQogI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQogI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDMvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwMy90ZXN0X2RhdGEuaAppbmRleCBhNTYwYzYzLi5hNTNiMWM1IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwMy90ZXN0X2RhdGEuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwMy90ZXN0X2RhdGEuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjEsMjAgKzIxLDIxIEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBjaGFyICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbNzVdOwotICAgIHBzYV9rZXlfc2xvdF90ICAgICAgICAgIGtleV9zbG90OworICAgIHBzYV9rZXlfaGFuZGxlX3QgICAgICAgIGtleV9oYW5kbGU7CiAgICAgcHNhX2tleV90eXBlX3QgICAgICAgICAga2V5X3R5cGU7CiAgICAgdWludDhfdCAgICAgICAgICAgICAgICAga2V5X2RhdGFbMzRdOwogICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGtleV9sZW5ndGg7CiAgICAgcHNhX2tleV91c2FnZV90ICAgICAgICAgdXNhZ2U7CiAgICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAga2V5X2FsZzsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBidWZmZXJfc2l6ZTsKICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBleHBlY3RlZF9iaXRfbGVuZ3RoOwogICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGV4cGVjdGVkX2tleV9sZW5ndGg7CiAgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzOwogfSB0ZXN0X2RhdGE7CiAKLXVpbnQ4X3QgcnNhXzM4NF9rZXlwYWlyWzFdOwotdWludDhfdCByc2FfMzg0X2tleWRhdGFbMV07Ci11aW50OF90IHJzYV8yNTZfa2V5cGFpcltdID0geworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlwYWlyWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlkYXRhWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzI1Nl9rZXlwYWlyW10gPSB7CiAgMHgzMCwgMHg4MiwgMHgwNCwgMHhBNSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhDMCwKICAweDk1LCAweDA4LCAweEUxLCAweDU3LCAweDQxLCAweEYyLCAweDcxLCAweDZELCAweEI3LCAweEQyLCAweDQ1LCAweDQxLCAweDI3LAogIDB4MDEsIDB4NjUsIDB4QzYsIDB4NDUsIDB4QUUsIDB4RjIsIDB4QkMsIDB4MjQsIDB4MzAsIDB4QjgsIDB4OTUsIDB4Q0UsIDB4MkYsCkBAIC0xMjgsNyArMTI5LDcgQEAKICAweDVGLCAweEE4LCAweEJGLCAweDE5LCAweDMyLCAweEExLCAweEY1LCAweERDLCAweDAzLCAweEU2LCAweDdDLCAweDlBLCAweDFGLAogIDB4MEMsIDB4N0MsIDB4QTksIDB4QjAsIDB4MEUsIDB4MjEsIDB4MzcsIDB4M0IsIDB4RjEsIDB4QjB9OwogCi11aW50OF90IHJzYV8yNTZfa2V5ZGF0YVtdID0geworc3RhdGljIHVpbnQ4X3QgcnNhXzI1Nl9rZXlkYXRhW10gPSB7CiAgMHgzMCwgMHg4MiwgMHgwMSwgMHgyMiwgMHgzMCwgMHgwRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwKICAweDAxLCAweDAxLCAweDAxLCAweDA1LCAweDAwLCAweDAzLCAweDgyLCAweDAxLCAweDBGLCAweDAwLCAweDMwLCAweDgyLCAweDAxLCAweDBBLAogIDB4MDIsIDB4ODIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4REIsIDB4MUMsIDB4N0YsIDB4MkUsIDB4MEIsIDB4Q0QsIDB4QkYsIDB4Q0UsIDB4RDEsCkBAIC0xNTEsNyArMTUyLDcgQEAKICAweDBGLCAweDcxLCAweDJELCAweEQyLCAweDA4LCAweDEwLCAweDFCLCAweEFELCAweDQ0LCAweDQxLCAweEUwLCAweEZFLCAweDc5LCAweEEwLAogIDB4NjMsIDB4OTMsIDB4OEEsIDB4QjEsIDB4NUQsIDB4RTksIDB4QjAsIDB4RUUsIDB4NkYsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDF9OwogCi11aW50OF90IGVjX2tleWRhdGFbXSA9IHsKK3N0YXRpYyB1aW50OF90IGVjX2tleWRhdGFbXSA9IHsKICAweDMwLCAweDQ5LCAweDMwLCAweDEzLCAweDA2LCAweDA3LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAyLCAweDAxLCAweDA2LAogIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDMsIDB4MzIsIDB4MDAsIDB4MDQsIDB4QkMsCiAgMHg3OSwgMHg3RCwgMHhCMywgMHhBRSwgMHg3RiwgMHgwOCwgMHhFQywgMHgzRCwgMHg0OSwgMHg2QiwgMHg0RiwgMHhCNCwgMHgxMSwgMHhCMywKQEAgLTE1OSw3ICsxNjAsNyBAQAogIDB4RUMsIDB4OEIsIDB4MUEsIDB4N0IsIDB4RjIsIDB4NEIsIDB4RTksIDB4MjksIDB4NTEsIDB4Q0MsIDB4NUIsIDB4QTEsIDB4QkUsIDB4QkIsCiAgMHgyNCwgMHg3NCwgMHg5MCwgMHg5QSwgMHhFMH07CiAKLXVpbnQ4X3QgZWNfa2V5cGFpcltdID0geworc3RhdGljIHVpbnQ4X3QgZWNfa2V5cGFpcltdID0gewogIDB4MzAsIDB4NUYsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MTgsIDB4MzMsIDB4OEUsIDB4ODYsIDB4QTgsIDB4ODEsIDB4RTIsIDB4MzgsCiAgMHhGNSwgMHg0OSwgMHhCRCwgMHg2RiwgMHgwNSwgMHg1MywgMHg0OSwgMHg0QiwgMHg3MywgMHhFMywgMHhENiwgMHgxMSwgMHgzMCwgMHhGRCwKICAweEM2LCAweEM5LCAweDZELCAweEEwLCAweDBBLCAweDA2LCAweDA4LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAzLCAweDAxLApAQCAtMTY4LDE4ICsxNjksMTggQEAKICAweEI3LCAweDc2LCAweEM2LCAweDc0LCAweEY3LCAweEM2LCAweEYzLCAweDU0LCAweEI3LCAweEQyLCAweDI0LCAweDA2LCAweDJDLCAweDFGLAogIDB4NjgsIDB4NTQsIDB4QjUsIDB4QTcsIDB4QUYsIDB4MEYsIDB4RTUsIDB4NzgsIDB4RUEsIDB4RjIsIDB4NTgsIDB4RjAsIDB4Mjd9OwogCi10ZXN0X2RhdGEgY2hlY2sxW10gPSB7CitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0gewogeyJUZXN0IHBzYV9leHBvcnRfa2V5IDE2IEJ5dGUgQUVTXG4iLCAxLCBQU0FfS0VZX1RZUEVfQUVTLAogezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCiAgMHg1RiwgMHhDOX0sCi0gQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwgQlVGRkVSX1NJWkUsCiAgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKIHsiVGVzdCBwc2FfZXhwb3J0X2tleSAyNCBCeXRlIEFFU1xuIiwgMiwgUFNBX0tFWV9UWVBFX0FFUywKIHsweDI0LCAweDEzLCAweDYxLCAweDQ3LCAweDYxLCAweEI4LCAweEM4LCAweEYwLCAweERGLCAweEFCLCAweDVBLCAweDBFLCAweDg3LAogIDB4NDAsIDB4QUMsIDB4QTMsIDB4OTAsIDB4NzcsIDB4ODMsIDB4NTIsIDB4MzEsIDB4NzQsIDB4Rjl9LAotIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKKyBBRVNfMjRCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsIEJVRkZFUl9TSVpFLAogIEJZVEVTX1RPX0JJVFMoQUVTXzI0Ql9LRVlfU0laRSksIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogCkBAIC0xODcsMzIgKzE4OCwzMiBAQAogezB4RUEsIDB4RDUsIDB4RTYsIDB4QzgsIDB4NTEsIDB4RjksIDB4RUMsIDB4QkIsIDB4OUIsIDB4NTcsIDB4N0MsIDB4RUQsIDB4RDIsCiAgMHg0QiwgMHg4MiwgMHg4NCwgMHg5RiwgMHg5RiwgMHhFNiwgMHg3MywgMHgyMSwgMHgzRCwgMHgxQSwgMHgwNSwgMHhDOSwgMHhFRCwKICAweERGLCAweDI1LCAweDE3LCAweDY4LCAweDg2LCAweEFFfSwKLSBBRVNfMzJCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgQUVTXzMyQl9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLCBCVUZGRVJfU0laRSwKICBCWVRFU19UT19CSVRTKEFFU18zMkJfS0VZX1NJWkUpLCBBRVNfMzJCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIAogeyJUZXN0IHBzYV9leHBvcnRfa2V5IDIwNDggUlNBIHB1YmxpYyBrZXlcbiIsIDQsIFBTQV9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSwKICB7MH0sCi0gMjk0LCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVcsCisgMjk0LCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVcsIEJVRkZFUl9TSVpFLAogIDIwNDgsIDI5NCwgUFNBX1NVQ0NFU1MKIH0sCiAKIHsiVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIFJTQSAyMDQ4IGtleXBhaXJcbiIsIDUsIFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUiwKICB7MH0sCi0gMTE5MywgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fUkFXLAorIDExOTMsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOX1JBVywgQlVGRkVSX1NJWkUsCiAgMjA0OCwgMTE5MywgUFNBX1NVQ0NFU1MKIH0sCiAKIHsiVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIERFUyA2NCBiaXQga2V5XG4iLCA2LCBQU0FfS0VZX1RZUEVfREVTLAogIHsweDcwLCAweDI0LCAweDU1LCAweDBDLCAweDE0LCAweDlELCAweEVELCAweDI5fSwKLSBERVNfOEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKKyBERVNfOEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwgQlVGRkVSX1NJWkUsCiAgQllURVNfVE9fQklUUyhERVNfOEJfS0VZX1NJWkUpLCBERVNfOEJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogCiB7IlRlc3QgcHNhX2V4cG9ydF9rZXkgd2l0aCBUcmlwbGUgREVTIDItS2V5XG4iLCA3LCBQU0FfS0VZX1RZUEVfREVTLAogezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRn0sCi0gREVTM18yS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKKyBERVMzXzJLRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLCBCVUZGRVJfU0laRSwKICBCWVRFU19UT19CSVRTKERFUzNfMktFWV9TSVpFKSwgREVTM18yS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogCkBAIC0yMjAsNTUgKzIyMSw0NCBAQAogezB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4Q0QsIDB4RUYsCiAgMHhGMSwgMHhFMCwgMHhEMywgMHhDMiwgMHhCNSwgMHhBNCwgMHg5NywgMHg4NiwKICAweEZFLCAweERDLCAweEJBLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwfSwKLSBERVMzXzNLRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIERFUzNfM0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsIEJVRkZFUl9TSVpFLAogIEJZVEVTX1RPX0JJVFMoREVTM18zS0VZX1NJWkUpLCBERVMzXzNLRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKIHsiVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIEVDIFB1YmxpYyBrZXlcbiIsIDksCiAgUFNBX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZX0JBU0UgfCBQU0FfRUNDX0NVUlZFX1NFQ1AxOTJSMSwKICB7MH0sCi0gNzUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTiwKKyA3NSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OLCBCVUZGRVJfU0laRSwKICAxOTIsIDc1LCBQU0FfU1VDQ0VTUwogfSwKIAogeyJUZXN0IHBzYV9leHBvcnRfa2V5IHdpdGggRUMga2V5cGFpclxuIiwgMTAsCiAgUFNBX0tFWV9UWVBFX0VDQ19LRVlQQUlSX0JBU0UgfCBQU0FfRUNDX0NVUlZFX1NFQ1AxOTJSMSwKICB7MH0sCi0gOTcsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTiwKKyA5NywgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OLCBCVUZGRVJfU0laRSwKICAxOTIsIDk3LCBQU0FfU1VDQ0VTUwogfSwKIAogeyJUZXN0IHBzYV9leHBvcnRfa2V5IHdpdGgga2V5IHBvbGljeSB2ZXJpZnlcbiIsIDExLCBQU0FfS0VZX1RZUEVfQUVTLAogezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCiAgMHg1RiwgMHhDOX0sCi0gQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9WRVJJRlksIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBQU0FfQUxHX0NUUiwgQlVGRkVSX1NJWkUsCiAgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQKIH0sCisKK3siVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIGxlc3MgYnVmZmVyIHNpemVcbiIsIDEyLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOX0sCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLCAxNCwKKyBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTAorfSwKIH07CiAKLQotdGVzdF9kYXRhIGNoZWNrMltdID0gewoteyJUZXN0IHBzYV9leHBvcnRfa2V5IHdpdGggaW52YWxpZCBrZXkgc2xvdFxuIiwgSU5WQUxJRF9LRVlfU0xPVCwgUFNBX0tFWV9UWVBFX0FFUywKLXswfSwKLUFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKLUJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCi19LAotCi17IlRlc3QgcHNhX2V4cG9ydF9rZXkgd2l0aCB6ZXJvIGtleSBzbG90XG4iLCBaRVJPX0tFWV9TTE9ULCBQU0FfS0VZX1RZUEVfQUVTLAotezB9LAotQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAotQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKLX0sCi0KLXsiVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIGxlc3MgYnVmZmVyIHNpemVcbiIsIDEsIFBTQV9LRVlfVFlQRV9BRVMsCi17MH0sCi0xNCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAotQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwKLX0sCi0KLXsiVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIGVtcHR5IGtleSBzbG90XG4iLCBFTVBUWV9LRVlfU0xPVCwgUFNBX0tFWV9UWVBFX0FFUywKLXswfSwKLUFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKLUJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9FUlJPUl9FTVBUWV9TTE9UCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMltdID0geworeyJUZXN0IHBzYV9leHBvcnRfa2V5IG5lZ2F0aXZlIGNhc2VcbiIsIDEzLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOX0sCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLCBCVUZGRVJfU0laRSwKKyBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIH07CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNC90ZXN0X2MwMDQuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA0L3Rlc3RfYzAwNC5jCmluZGV4IDY2YzY4MzkuLjI1N2IzN2QgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA0L3Rlc3RfYzAwNC5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA0L3Rlc3RfYzAwNC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSw1MyArMTUsNTAgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgotI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKLSNlbmRpZgotCiAjaW5jbHVkZSAidGVzdF9jMDA0LmgiCiAjaW5jbHVkZSAidGVzdF9kYXRhLmgiCiAKIGNsaWVudF90ZXN0X3QgdGVzdF9jMDA0X2NyeXB0b19saXN0W10gPSB7CiAgICAgTlVMTCwKICAgICB0ZXN0X3BzYV9leHBvcnRfcHVibGljX2tleSwKLSAgICB0ZXN0X3BzYV9leHBvcnRfcHVibGljX2tleV9zbG90LAorICAgIHRlc3RfcHNhX2V4cG9ydF9wdWJsaWNfa2V5X2hhbmRsZSwKICAgICBOVUxMLAogfTsKIAotaW50IGdfdGVzdF9jb3VudDsKK3N0YXRpYyBpbnQgICAgICAgICAgZ190ZXN0X2NvdW50ID0gMTsKK3N0YXRpYyB1aW50OF90ICAgICAgZGF0YVtCVUZGRVJfU0laRV07CiAKIGludDMyX3QgdGVzdF9wc2FfZXhwb3J0X3B1YmxpY19rZXkoc2VjdXJpdHlfdCBjYWxsZXIpCiB7Ci0gICAgaW50MzJfdCAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7Ci0gICAgdWludDMyX3QgICAgICAgICBsZW5ndGgsIGksIGo7Ci0gICAgdWludDhfdCAgICAgICAgICBkYXRhW0JVRkZFUl9TSVpFXTsKKyAgICB1aW50MzJfdCAgICAgICAgIGxlbmd0aCwgaTsKICAgICB1aW50OF90ICAgICAgICAgICprZXlfZGF0YTsKICAgICBwc2Ffa2V5X3BvbGljeV90IHBvbGljeTsKICAgICBwc2Ffa2V5X3R5cGVfdCAgIGtleV90eXBlOwogICAgIHNpemVfdCAgICAgICAgICAgYml0czsKICAgICBpbnQgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKLQotICAgIGdfdGVzdF9jb3VudCA9IDE7CisgICAgaW50MzJfdCAgICAgICAgICBzdGF0dXM7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwotICAgIGlmICh2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpICE9IFBTQV9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5JVF9GQUlMRUQ7Ci0gICAgfQotCi0gICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCi0gICAgICogdXNhZ2Ugb2YgdGhlIGtleQotICAgICAqLwotICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOwogCiAgICAgLyogU2V0IHRoZSBrZXkgZGF0YSBidWZmZXIgdG8gdGhlIGlucHV0IGJhc2Ugb24gYWxnb3JpdGhtICovCiAgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKICAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKICAgICAgICAgaWYgKFBTQV9LRVlfVFlQRV9JU19SU0EoY2hlY2sxW2ldLmtleV90eXBlKSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGNoZWNrMVtpXS5rZXlfdHlwZSA9PSBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIpCkBAIC05Niw3NiArOTMsNDQgQEAKICAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCiAgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOwotICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKKworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMVtpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfbGVuZ3RoLCAmY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKIAogICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCi0gICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfc2xvdCwgJnBvbGljeSk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBzZXQga2V5IHBvbGljeSBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQorICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOwogCiAgICAgICAgIC8qIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazFbaV0ua2V5X3Nsb3QsIGNoZWNrMVtpXS5rZXlfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEsIGNoZWNrMVtpXS5rZXlfbGVuZ3RoKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGltcG9ydCBrZXkgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV90eXBlLCBrZXlfZGF0YSwgY2hlY2sxW2ldLmtleV9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKIAogICAgICAgICAvKiBHZXQgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYSBrZXkgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRVRfS0VZX0lORk9STUFUSU9OLCBjaGVjazFbaV0ua2V5X3Nsb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleV90eXBlLCAmYml0cyk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBnZXQga2V5IGluZm9ybWF0aW9uIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0tFWV9JTkZPUk1BVElPTiwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXlfdHlwZSwgJmJpdHMpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKIAotICAgICAgICBpZiAoa2V5X3R5cGUgIT0gY2hlY2sxW2ldLmtleV90eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgbWlzbWF0Y2gga2V5IHR5cGVcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQorICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChrZXlfdHlwZSwgY2hlY2sxW2ldLmtleV90eXBlLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKIAotICAgICAgICBpZiAoYml0cyAhPSBjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0U3RvcmVkIGtleSBsZW5ndGggbWlzbWF0Y2hcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRF9TSVpFOwotICAgICAgICB9CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGJpdHMsIGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKIAogICAgICAgICAvKiBFeHBvcnQgYSBrZXkgaW4gYmluYXJ5IGZvcm1hdCAqLwotICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0VYUE9SVF9QVUJMSUNfS0VZLCBjaGVjazFbaV0ua2V5X3Nsb3QsIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVRkZFUl9TSVpFLCAmbGVuZ3RoKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgZXhwb3J0IHB1YmxpYyBrZXkgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19FWFBPUlRfUFVCTElDX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5idWZmZXJfc2l6ZSwgJmxlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CiAKICAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAobGVuZ3RoICE9IGNoZWNrMVtpXS5leHBlY3RlZF9rZXlfbGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRLZXkgbGVuZ3RoIG1pc21hdGNoXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfU0laRTsKLSAgICAgICAgfQorICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChsZW5ndGgsIGNoZWNrMVtpXS5leHBlY3RlZF9rZXlfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CiAKICAgICAgICAgLyogQ2hlY2sgaWYgb3JpZ2luYWwga2V5IGRhdGEgbWF0Y2hlcyB3aXRoIHRoZSBleHBvcnRlZCBkYXRhICovCi0gICAgICAgIGlmICh2YWwtPmNyeXB0b19rZXlfdHlwZV9pc19yYXcoY2hlY2sxW2ldLmtleV90eXBlKSkKKyAgICAgICAgaWYgKFBTQV9LRVlfVFlQRV9JU19VTlNUUlVDVFVSRUQoY2hlY2sxW2ldLmtleV90eXBlKSkKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxlbmd0aDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjaGVjazFbaV0ua2V5X2RhdGFbal0gIT0gZGF0YVtqXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEtleSBkYXRhIG1pc21hdGNoXG4iLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfREFUQV9NSVNNQVRDSDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBURVNUX0FTU0VSVF9NRU1DTVAoY2hlY2sxW2ldLmtleV9kYXRhLCBkYXRhLCBsZW5ndGgsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTEpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChQU0FfS0VZX1RZUEVfSVNfUlNBKGNoZWNrMVtpXS5rZXlfdHlwZSkgfHwgUFNBX0tFWV9UWVBFX0lTX0VDQyhjaGVjazFbaV0ua2V5X3R5cGUpKQogICAgICAgICB7CkBAIC0xNzQsMTQgKzEzOSw3IEBACiAgICAgICAgICAgICBlbHNlIGlmIChQU0FfS0VZX1RZUEVfSVNfRUNDX0tFWVBBSVIoY2hlY2sxW2ldLmtleV90eXBlKSkKICAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IGV4cGVjdGVkX2VjX3B1YnBydjsKIAotICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxlbmd0aDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChrZXlfZGF0YVtqXSAhPSBkYXRhW2pdKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0S2V5IGRhdGEgbWlzbWF0Y2hcbiIsIDApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19EQVRBX01JU01BVENIOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX01FTUNNUChrZXlfZGF0YSwgZGF0YSwgbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEyKSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CkBAIC0xOTMsMzMgKzE1MSwxMDkgQEAKIAogfQogCi1pbnQzMl90IHRlc3RfcHNhX2V4cG9ydF9wdWJsaWNfa2V5X3Nsb3Qoc2VjdXJpdHlfdCBjYWxsZXIpCitpbnQzMl90IHRlc3RfcHNhX2V4cG9ydF9wdWJsaWNfa2V5X2hhbmRsZShzZWN1cml0eV90IGNhbGxlcikKIHsKLSAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwotICAgIGludCAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMikvc2l6ZW9mKGNoZWNrMlswXSk7Ci0gICAgdWludDMyX3QgICAgICAgIGksIGxlbmd0aDsKLSAgICB1aW50OF90ICAgICAgICAgZGF0YVtCVUZGRVJfU0laRV07CisgICAgaW50ICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMikvc2l6ZW9mKGNoZWNrMlswXSk7CisgICAgdWludDMyX3QgICAgICAgICBpLCBsZW5ndGg7CisgICAgaW50MzJfdCAgICAgICAgICBzdGF0dXM7CisgICAgdWludDhfdCAgICAgICAgICAqa2V5X2RhdGE7CisgICAgcHNhX2tleV9wb2xpY3lfdCBwb2xpY3k7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwotICAgIGlmICh2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpICE9IFBTQV9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5JVF9GQUlMRUQ7Ci0gICAgfQorICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQogICAgIHsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7Ci0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2syW2ldLnRlc3RfZGVzYywgMCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIHVuYWxsb2NhdGVkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOwogCiAgICAgICAgIC8qIEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICovCi0gICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRVhQT1JUX1BVQkxJQ19LRVksIGNoZWNrMltpXS5rZXlfc2xvdCwgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmxlbmd0aCk7Ci0gICAgICAgIGlmIChjaGVjazJbaV0uZXhwZWN0ZWRfc3RhdHVzICE9IHN0YXR1cykKKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19FWFBPUlRfUFVCTElDX0tFWSwgY2hlY2syW2ldLmtleV9oYW5kbGUsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfbGVuZ3RoLCAmbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIGVtcHR5IGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2syW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9sZW5ndGgsICZjaGVjazJbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIC8qIEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRVhQT1JUX1BVQkxJQ19LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmxlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0VNUFRZX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIHplcm8gYXMga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19FWFBPUlRfUFVCTElDX0tFWSwgMCwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9sZW5ndGgsICZsZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9leHBvcnRfa2V5IHdpdGggZGVzdHJveWVkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMltpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2syW2ldLmtleV9oYW5kbGUsICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgICAgICBpZiAoUFNBX0tFWV9UWVBFX0lTX1JTQShjaGVjazJbaV0ua2V5X3R5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgZXhwb3J0IHB1YmxpY2tleSBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IHN1Y2NlZWRlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICAgICAgICAgIGlmIChjaGVjazJbaV0ua2V5X3R5cGUgPT0gUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjaGVjazJbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCA9PSBCWVRFU19UT19CSVRTKDM4NCkpCisgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzM4NF9rZXlwYWlyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrMltpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMjU2KSkKKyAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMjU2X2tleXBhaXI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjaGVjazJbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCA9PSBCWVRFU19UT19CSVRTKDM4NCkpCisgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzM4NF9rZXlkYXRhOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrMltpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMjU2KSkKKyAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMjU2X2tleWRhdGE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFBTQV9LRVlfVFlQRV9JU19FQ0MoY2hlY2syW2ldLmtleV90eXBlKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKFBTQV9LRVlfVFlQRV9JU19FQ0NfS0VZUEFJUihjaGVjazJbaV0ua2V5X3R5cGUpKQorICAgICAgICAgICAgICAgIGtleV9kYXRhID0gZWNfa2V5cGFpcjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IGVjX2tleWRhdGE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAga2V5X2RhdGEgPSBjaGVjazJbaV0ua2V5X2RhdGE7CisKKyAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfdHlwZSwga2V5X2RhdGEsIGNoZWNrMltpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisKKyAgICAgICAgLyogRGVzdHJveSB0aGUga2V5IGhhbmRsZSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOworCisgICAgICAgIC8qIEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRVhQT1JUX1BVQkxJQ19LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmxlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CiAgICAgfQorCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KLQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDQvdGVzdF9jMDA0LmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNC90ZXN0X2MwMDQuaAppbmRleCBjNzRkNDM2Li5jMjRlYzgyIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNC90ZXN0X2MwMDQuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNC90ZXN0X2MwMDQuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTgsNyArMTgsNiBAQAogI2RlZmluZSBfVEVTVF9DMDA0X0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NyeXB0by5oIgotCiAjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGMwMDQpCiAjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCiAjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCkBAIC0yOCw1ICsyNyw1IEBACiBleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMDRfY3J5cHRvX2xpc3RbXTsKIAogaW50MzJfdCB0ZXN0X3BzYV9leHBvcnRfcHVibGljX2tleShzZWN1cml0eV90IGNhbGxlcik7Ci1pbnQzMl90IHRlc3RfcHNhX2V4cG9ydF9wdWJsaWNfa2V5X3Nsb3Qoc2VjdXJpdHlfdCBjYWxsZXIpOworaW50MzJfdCB0ZXN0X3BzYV9leHBvcnRfcHVibGljX2tleV9oYW5kbGUoc2VjdXJpdHlfdCBjYWxsZXIpOwogI2VuZGlmIC8qIF9URVNUX0MwMDRfQ0xJRU5UX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNC90ZXN0X2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA0L3Rlc3RfZGF0YS5oCmluZGV4IGI0NDYzNTAuLmJiOGVlYmUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA0L3Rlc3RfZGF0YS5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA0L3Rlc3RfZGF0YS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNywyNCArMTcsMjMgQEAKIAogI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKIAotI2RlZmluZSBFTVBUWV9LRVlfU0xPVCAgICAgIDMxCi0KIHR5cGVkZWYgc3RydWN0IHsKICAgICBjaGFyICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbNzVdOwotICAgIHBzYV9rZXlfc2xvdF90ICAgICAgICAgIGtleV9zbG90OworICAgIHBzYV9rZXlfaGFuZGxlX3QgICAgICAgIGtleV9oYW5kbGU7CiAgICAgcHNhX2tleV90eXBlX3QgICAgICAgICAga2V5X3R5cGU7CiAgICAgdWludDhfdCAgICAgICAgICAgICAgICAga2V5X2RhdGFbMzRdOwogICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGtleV9sZW5ndGg7CiAgICAgcHNhX2tleV91c2FnZV90ICAgICAgICAgdXNhZ2U7CiAgICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAga2V5X2FsZzsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBidWZmZXJfc2l6ZTsKICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBleHBlY3RlZF9iaXRfbGVuZ3RoOwogICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGV4cGVjdGVkX2tleV9sZW5ndGg7CiAgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzOwogfSB0ZXN0X2RhdGE7CiAKLXVpbnQ4X3QgcnNhXzM4NF9rZXlwYWlyWzFdOwotdWludDhfdCByc2FfMzg0X2tleWRhdGFbMV07Ci11aW50OF90IGV4cGVjdGVkX3JzYV8yNTZfcHVicHJ2W10gPSB7CitzdGF0aWMgdWludDhfdCByc2FfMzg0X2tleXBhaXJbMV07CitzdGF0aWMgdWludDhfdCByc2FfMzg0X2tleWRhdGFbMV07CitzdGF0aWMgdWludDhfdCBleHBlY3RlZF9yc2FfMjU2X3B1YnBydltdID0gewogMHgzMCwgMHg4MiwgMHgwMSwgMHgyMiwgMHgzMCwgMHgwRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywKIDB4MEQsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDUsIDB4MDAsIDB4MDMsIDB4ODIsIDB4MDEsIDB4MEYsIDB4MDAsIDB4MzAsIDB4ODIsCiAweDAxLCAweDBBLCAweDAyLCAweDgyLCAweDAxLCAweDAxLCAweDAwLCAweEMwLCAweDk1LCAweDA4LCAweEUxLCAweDU3LCAweDQxLApAQCAtNTksNyArNTgsNyBAQAogMHhBQSwgMHhFQiwgMHhDNCwgMHhFMSwgMHhFNiwgMHg2MSwgMHg4MywgMHhDNSwgMHhEMiwgMHg5NiwgMHhERiwgMHhEOSwgMHhEMCwKIDB4NEYsIDB4QUQsIDB4RDcsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDF9OwogCi11aW50OF90IGV4cGVjdGVkX2VjX3B1YnBydltdID0geworc3RhdGljIHVpbnQ4X3QgZXhwZWN0ZWRfZWNfcHVicHJ2W10gPSB7CiAgMHgzMCwgMHg0OSwgMHgzMCwgMHgxMywgMHgwNiwgMHgwNywgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwMiwgMHgwMSwKICAweDA2LCAweDA4LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAzLCAweDAxLCAweDAxLCAweDAzLCAweDMyLCAweDAwLAogIDB4MDQsIDB4NTEsIDB4NzUsIDB4QkMsIDB4REYsIDB4MzAsIDB4QTMsIDB4NzAsIDB4RjMsIDB4OUQsIDB4NTMsIDB4OTMsIDB4RTYsCkBAIC02Nyw3ICs2Niw3IEBACiAgMHhGNywgMHhDNiwgMHhGMywgMHg1NCwgMHhCNywgMHhEMiwgMHgyNCwgMHgwNiwgMHgyQywgMHgxRiwgMHg2OCwgMHg1NCwgMHhCNSwKICAweEE3LCAweEFGLCAweDBGLCAweEU1LCAweDc4LCAweEVBLCAweEYyLCAweDU4LCAweEYwLCAweDI3fTsKIAotdWludDhfdCByc2FfMjU2X2tleXBhaXJbXSA9IHsKK3N0YXRpYyB1aW50OF90IHJzYV8yNTZfa2V5cGFpcltdID0gewogIDB4MzAsIDB4ODIsIDB4MDQsIDB4QTUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4QzAsCiAgMHg5NSwgMHgwOCwgMHhFMSwgMHg1NywgMHg0MSwgMHhGMiwgMHg3MSwgMHg2RCwgMHhCNywgMHhEMiwgMHg0NSwgMHg0MSwgMHgyNywKICAweDAxLCAweDY1LCAweEM2LCAweDQ1LCAweEFFLCAweEYyLCAweEJDLCAweDI0LCAweDMwLCAweEI4LCAweDk1LCAweENFLCAweDJGLApAQCAtMTYxLDcgKzE2MCw3IEBACiAgMHg1RiwgMHhBOCwgMHhCRiwgMHgxOSwgMHgzMiwgMHhBMSwgMHhGNSwgMHhEQywgMHgwMywgMHhFNiwgMHg3QywgMHg5QSwgMHgxRiwKICAweDBDLCAweDdDLCAweEE5LCAweEIwLCAweDBFLCAweDIxLCAweDM3LCAweDNCLCAweEYxLCAweEIwfTsKIAotdWludDhfdCByc2FfMjU2X2tleWRhdGFbXSA9IHsKK3N0YXRpYyB1aW50OF90IHJzYV8yNTZfa2V5ZGF0YVtdID0gewogIDB4MzAsIDB4ODIsIDB4MDEsIDB4MjIsIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDksIDB4MkEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4RjcsIDB4MEQsCiAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNSwgMHgwMCwgMHgwMywgMHg4MiwgMHgwMSwgMHgwRiwgMHgwMCwgMHgzMCwgMHg4MiwgMHgwMSwgMHgwQSwKICAweDAyLCAweDgyLCAweDAxLCAweDAxLCAweDAwLCAweERCLCAweDFDLCAweDdGLCAweDJFLCAweDBCLCAweENELCAweEJGLCAweENFLCAweEQxLApAQCAtMTg0LDcgKzE4Myw3IEBACiAgMHgwRiwgMHg3MSwgMHgyRCwgMHhEMiwgMHgwOCwgMHgxMCwgMHgxQiwgMHhBRCwgMHg0NCwgMHg0MSwgMHhFMCwgMHhGRSwgMHg3OSwgMHhBMCwKICAweDYzLCAweDkzLCAweDhBLCAweEIxLCAweDVELCAweEU5LCAweEIwLCAweEVFLCAweDZGLCAweDAyLCAweDAzLCAweDAxLCAweDAwLCAweDAxfTsKIAotdWludDhfdCBlY19rZXlkYXRhW10gPSB7CitzdGF0aWMgdWludDhfdCBlY19rZXlkYXRhW10gPSB7CiAgMHgzMCwgMHg0OSwgMHgzMCwgMHgxMywgMHgwNiwgMHgwNywgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwMiwgMHgwMSwgMHgwNiwKICAweDA4LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAzLCAweDAxLCAweDAxLCAweDAzLCAweDMyLCAweDAwLCAweDA0LCAweEJDLAogIDB4NzksIDB4N0QsIDB4QjMsIDB4QUUsIDB4N0YsIDB4MDgsIDB4RUMsIDB4M0QsIDB4NDksIDB4NkIsIDB4NEYsIDB4QjQsIDB4MTEsIDB4QjMsCkBAIC0xOTIsNyArMTkxLDcgQEAKICAweEVDLCAweDhCLCAweDFBLCAweDdCLCAweEYyLCAweDRCLCAweEU5LCAweDI5LCAweDUxLCAweENDLCAweDVCLCAweEExLCAweEJFLCAweEJCLAogIDB4MjQsIDB4NzQsIDB4OTAsIDB4OUEsIDB4RTB9OwogCi11aW50OF90IGVjX2tleXBhaXJbXSA9IHsKK3N0YXRpYyB1aW50OF90IGVjX2tleXBhaXJbXSA9IHsKICAweDMwLCAweDVGLCAweDAyLCAweDAxLCAweDAxLCAweDA0LCAweDE4LCAweDMzLCAweDhFLCAweDg2LCAweEE4LCAweDgxLCAweEUyLCAweDM4LAogIDB4RjUsIDB4NDksIDB4QkQsIDB4NkYsIDB4MDUsIDB4NTMsIDB4NDksIDB4NEIsIDB4NzMsIDB4RTMsIDB4RDYsIDB4MTEsIDB4MzAsIDB4RkQsCiAgMHhDNiwgMHhDOSwgMHg2RCwgMHhBMCwgMHgwQSwgMHgwNiwgMHgwOCwgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwMywgMHgwMSwKQEAgLTIwMSwxOCArMjAwLDE4IEBACiAgMHhCNywgMHg3NiwgMHhDNiwgMHg3NCwgMHhGNywgMHhDNiwgMHhGMywgMHg1NCwgMHhCNywgMHhEMiwgMHgyNCwgMHgwNiwgMHgyQywgMHgxRiwKICAweDY4LCAweDU0LCAweEI1LCAweEE3LCAweEFGLCAweDBGLCAweEU1LCAweDc4LCAweEVBLCAweEYyLCAweDU4LCAweEYwLCAweDI3fTsKIAotdGVzdF9kYXRhIGNoZWNrMVtdID0geworc3RhdGljIHRlc3RfZGF0YSBjaGVjazFbXSA9IHsKIHsiVGVzdCBwc2FfZXhwb3J0X3B1YmxpY19rZXkgMTYgQnl0ZSBBRVNcbiIsIDEsIFBTQV9LRVlfVFlQRV9BRVMsCiB7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKICAweDVGLCAweEM5fSwKLSBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLCBCVUZGRVJfU0laRSwKICBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAogfSwKIAogeyJUZXN0IHBzYV9leHBvcnRfcHVibGljX2tleSAyNCBCeXRlIEFFU1xuIiwgMiwgUFNBX0tFWV9UWVBFX0FFUywKIHsweDI0LCAweDEzLCAweDYxLCAweDQ3LCAweDYxLCAweEI4LCAweEM4LCAweEYwLCAweERGLCAweEFCLCAweDVBLCAweDBFLCAweDg3LAogIDB4NDAsIDB4QUMsIDB4QTMsIDB4OTAsIDB4NzcsIDB4ODMsIDB4NTIsIDB4MzEsIDB4NzQsIDB4Rjl9LAotIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKKyBBRVNfMjRCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsIEJVRkZFUl9TSVpFLAogIEJZVEVTX1RPX0JJVFMoQUVTXzI0Ql9LRVlfU0laRSksIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCiB9LAogCkBAIC0yMjAsMzIgKzIxOSwzMiBAQAogezB4RUEsIDB4RDUsIDB4RTYsIDB4QzgsIDB4NTEsIDB4RjksIDB4RUMsIDB4QkIsIDB4OUIsIDB4NTcsIDB4N0MsIDB4RUQsIDB4RDIsCiAgMHg0QiwgMHg4MiwgMHg4NCwgMHg5RiwgMHg5RiwgMHhFNiwgMHg3MywgMHgyMSwgMHgzRCwgMHgxQSwgMHgwNSwgMHhDOSwgMHhFRCwKICAweERGLCAweDI1LCAweDE3LCAweDY4LCAweDg2LCAweEFFfSwKLSBBRVNfMzJCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgQUVTXzMyQl9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLCBCVUZGRVJfU0laRSwKICBCWVRFU19UT19CSVRTKEFFU18zMkJfS0VZX1NJWkUpLCBBRVNfMzJCX0tFWV9TSVpFLCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAogfSwKIAogeyJUZXN0IHBzYV9leHBvcnRfcHVibGljX2tleSAyMDQ4IFJTQSBwdWJsaWMga2V5XG4iLCA0LCBQU0FfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVksCiAgezB9LAotIDI5NCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fUkFXLAorIDI5NCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fUkFXLCBCVUZGRVJfU0laRSwKICAyMDQ4LCAyOTQsIFBTQV9TVUNDRVNTCiB9LAogCiB7IlRlc3QgcHNhX2V4cG9ydF9wdWJsaWNfa2V5IHdpdGggUlNBIDIwNDgga2V5cGFpclxuIiwgNSwgUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSLAogIHswfSwKLSAxMTkzLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVcsCisgMTE5MywgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fUkFXLCBCVUZGRVJfU0laRSwKICAyMDQ4LCAyOTQsIFBTQV9TVUNDRVNTCiB9LAogCiB7IlRlc3QgcHNhX2V4cG9ydF9wdWJsaWNfa2V5IHdpdGggREVTIDY0IGJpdCBrZXlcbiIsIDYsIFBTQV9LRVlfVFlQRV9ERVMsCiAgezB4NzAsIDB4MjQsIDB4NTUsIDB4MEMsIDB4MTQsIDB4OUQsIDB4RUQsIDB4Mjl9LAotIERFU184Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIERFU184Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLCBCVUZGRVJfU0laRSwKICBCWVRFU19UT19CSVRTKERFU184Ql9LRVlfU0laRSksIERFU184Ql9LRVlfU0laRSwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKIH0sCiAKIHsiVGVzdCBwc2FfZXhwb3J0X3B1YmxpY19rZXkgd2l0aCBUcmlwbGUgREVTIDItS2V5XG4iLCA3LCBQU0FfS0VZX1RZUEVfREVTLAogezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRn0sCi0gREVTM18yS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKKyBERVMzXzJLRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLCBCVUZGRVJfU0laRSwKICBCWVRFU19UT19CSVRTKERFUzNfMktFWV9TSVpFKSwgREVTM18yS0VZX1NJWkUsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCiB9LAogCkBAIC0yNTMsNTcgKzI1Miw0MiBAQAogezB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4Q0QsIDB4RUYsCiAgMHhGMSwgMHhFMCwgMHhEMywgMHhDMiwgMHhCNSwgMHhBNCwgMHg5NywgMHg4NiwKICAweEZFLCAweERDLCAweEJBLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwfSwKLSBERVMzXzNLRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIERFUzNfM0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsIEJVRkZFUl9TSVpFLAogIEJZVEVTX1RPX0JJVFMoREVTM18zS0VZX1NJWkUpLCBERVMzXzNLRVlfU0laRSwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKIH0sCiAKIHsiVGVzdCBwc2FfZXhwb3J0X3B1YmxpY19rZXkgd2l0aCBFQyBQdWJsaWMga2V5XG4iLCA5LAogIFBTQV9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWV9CQVNFIHwgUFNBX0VDQ19DVVJWRV9TRUNQMTkyUjEsCiAgezB9LAotIDc1LCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DQVRFR09SWV9BU1lNTUVUUklDX0VOQ1JZUFRJT04sCisgNzUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTiwgQlVGRkVSX1NJWkUsCiAgMTkyLCA3NSwgUFNBX1NVQ0NFU1MKIH0sCiAKIHsiVGVzdCBwc2FfZXhwb3J0X3B1YmxpY19rZXkgd2l0aCBFQyBrZXlwYWlyXG4iLCAxMCwKICBQU0FfS0VZX1RZUEVfRUNDX0tFWVBBSVJfQkFTRSB8IFBTQV9FQ0NfQ1VSVkVfU0VDUDE5MlIxLAogIHswfSwKLSA5NywgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OLAorIDk3LCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DQVRFR09SWV9BU1lNTUVUUklDX0VOQ1JZUFRJT04sIEJVRkZFUl9TSVpFLAogIDE5MiwgNzUsIFBTQV9TVUNDRVNTCiB9LAogCiB7IlRlc3QgcHNhX2V4cG9ydF9wdWJsaWNfa2V5IHdpdGggaW52YWxpZCBrZXkgdXNhZ2UgcG9saWN5XG4iLCAxMSwKICBQU0FfS0VZX1RZUEVfRUNDX0tFWVBBSVJfQkFTRSB8IFBTQV9FQ0NfQ1VSVkVfU0VDUDE5MlIxLAogIHswfSwKLSA5NywgUFNBX0tFWV9VU0FHRV9WRVJJRlksIFBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OLAorIDk3LCBQU0FfS0VZX1VTQUdFX1ZFUklGWSwgUFNBX0FMR19DQVRFR09SWV9BU1lNTUVUUklDX0VOQ1JZUFRJT04sIEJVRkZFUl9TSVpFLAogIDE5MiwgNzUsIFBTQV9TVUNDRVNTCiB9LAogCi19OwotCi0KLXRlc3RfZGF0YSBjaGVjazJbXSA9IHsKLXsiVGVzdCBwc2FfZXhwb3J0X3B1YmxpY19rZXkgd2l0aCBpbnZhbGlkIGtleXNsb3RcbiIsIElOVkFMSURfS0VZX1NMT1QsIFBTQV9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSwKK3siVGVzdCBwc2FfZXhwb3J0X3B1YmxpY19rZXkgd2l0aCBsZXNzIGJ1ZmZlciBzaXplXG4iLCAxMiwgUFNBX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZLAogezB9LAotQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAotQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKLX0sCi0KLXsiVGVzdCBwc2FfZXhwb3J0X3B1YmxpY19rZXkgd2l0aCB6ZXJvIGtleSBzbG90XG4iLCBaRVJPX0tFWV9TTE9ULCBQU0FfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVksCi17MH0sCi0yOTQsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOX1JBVywKLTIwNDgsIDI5NCwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKLX0sCi0KLXsiVGVzdCBwc2FfZXhwb3J0X3B1YmxpY19rZXkgd2l0aCBsZXNzIGJ1ZmZlciBzaXplXG4iLCA0LCBQU0FfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVksCi17MH0sCi0yMDAsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOX1JBVywKKzI5NCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fUkFXLCAyMDAsCiAyMDQ4LCAyOTQsIFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMCiB9LAorfTsKIAoteyJUZXN0IHBzYV9leHBvcnRfcHVibGljX2tleSB3aXRoIGVtcHR5IGtleSBzbG90XG4iLCBFTVBUWV9LRVlfU0xPVCwgUFNBX0tFWV9UWVBFX0FFUywKLXswfSwKLUFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKLUJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9FUlJPUl9FTVBUWV9TTE9UCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMltdID0geworeyJUZXN0IHBzYV9leHBvcnRfcHVibGljX2tleSBuZWdhdGl2ZSBjYXNlXG4iLCAxMywgUFNBX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZLAorIHswfSwKKyAyOTQsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOX1JBVywgQlVGRkVSX1NJWkUsCisgMjA0OCwgMjk0LCBQU0FfU1VDQ0VTUwogfSwKLQogfTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA1L3Rlc3RfYzAwNS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDUvdGVzdF9jMDA1LmMKaW5kZXggODNmMDFhZi4uMWQ1MDMxNSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDUvdGVzdF9jMDA1LmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDUvdGVzdF9jMDA1LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDE0ICsxNSw4IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKLSNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgInRlc3RfYzAwNS5oIgogI2luY2x1ZGUgInRlc3RfZGF0YS5oIgogCkBAIC0zMywzNCArMjcsMzcgQEAKICAgICBOVUxMLAogfTsKIAotaW50IGdfdGVzdF9jb3VudDsKK3N0YXRpYyBpbnQgZ190ZXN0X2NvdW50ID0gMTsKIAogaW50MzJfdCBwc2FfZGVzdHJveV9rZXlfdGVzdChzZWN1cml0eV90IGNhbGxlcikKIHsKLSAgICBpbnQzMl90ICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICB1aW50MzJfdCAgICAgICAgIGk7CiAgICAgdWludDhfdCAgICAgICAgICAqa2V5X2RhdGE7CiAgICAgcHNhX2tleV9wb2xpY3lfdCBwb2xpY3k7CiAgICAgcHNhX2tleV90eXBlX3QgICBrZXlfdHlwZTsKICAgICBzaXplX3QgICAgICAgICAgIGJpdHM7CiAgICAgaW50ICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7Ci0KLSAgICBnX3Rlc3RfY291bnQgPSAxOworICAgIGludDMyX3QgICAgICAgICAgc3RhdHVzOwogCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KLSAgICBpZiAodmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKSAhPSBQU0FfU1VDQ0VTUykKLSAgICB7Ci0gICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOSVRfRkFJTEVEOwotICAgIH0KLQotICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAotICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKLSAgICAgKi8KLSAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKIAogICAgIC8qIFNldCB0aGUga2V5IGRhdGEgYnVmZmVyIHRvIHRoZSBpbnB1dCBiYXNlIG9uIGFsZ29yaXRobSAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCiAgICAgeworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCiAgICAgICAgIGlmIChQU0FfS0VZX1RZUEVfSVNfUlNBKGNoZWNrMVtpXS5rZXlfdHlwZSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChjaGVjazFbaV0ua2V5X3R5cGUgPT0gUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSKQpAQCAtOTUsNzYgKzkyLDQzIEBACiAgICAgICAgIC8qIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLwogICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazFbaV0udXNhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfYWxnKTsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7Ci0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CisKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazFbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CiAKICAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLwotICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazFbaV0ua2V5X3Nsb3QsICZwb2xpY3kpOwotICAgICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0Egc2V0IGtleSBwb2xpY3kgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKIAogICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICovCi0gICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9zbG90LCBjaGVjazFbaV0ua2V5X3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBpbXBvcnQga2V5IGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfdHlwZSwga2V5X2RhdGEsIGNoZWNrMVtpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CiAKICAgICAgICAgLyogR2V0IGJhc2ljIG1ldGFkYXRhIGFib3V0IGEga2V5ICovCi0gICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0tFWV9JTkZPUk1BVElPTiwgY2hlY2sxW2ldLmtleV9zbG90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXlfdHlwZSwgJmJpdHMpOwotICAgICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgZ2V0IGtleSBpbmZvcm1hdGlvbiBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQorICAgICAgICBURVNUX0FTU0VSVF9FUVVBTCh2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFVF9LRVlfSU5GT1JNQVRJT04sIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAma2V5X3R5cGUsICZiaXRzKSwKKyAgICAgICAgICAgICAgICAgICAgUFNBX1NVQ0NFU1MsCisgICAgICAgICAgICAgICAgICAgIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOwogCi0gICAgICAgIGlmIChrZXlfdHlwZSAhPSBjaGVjazFbaV0ua2V5X3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBtaXNtYXRjaCBrZXkgdHlwZVxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGtleV90eXBlLCBjaGVjazFbaV0ua2V5X3R5cGUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOwogCi0gICAgICAgIGlmIChiaXRzICE9IGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRTdG9yZWQga2V5IGxlbmd0aCBtaXNtYXRjaFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX1NJWkU7Ci0gICAgICAgIH0KKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoYml0cywgY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGgsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOwogCiAgICAgICAgIC8qIERlc3Ryb3kgYSBrZXkgYW5kIHJlc3RvcmUgdGhlIHNsb3QgdG8gaXRzIGRlZmF1bHQgc3RhdGUgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9zbG90KTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgZGVzdHJveSBrZXkgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOwogCi0gICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0tFWV9JTkZPUk1BVElPTiwgY2hlY2sxW2ldLmtleV9zbG90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXlfdHlwZSwgJmJpdHMpOwotICAgICAgICBpZiAoc3RhdHVzID09IFBTQV9TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgZ2V0IGtleSBpbmZvIHN1Y2NlZWRlZCBidXQgc2hvdWxkIGhhdmUgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwotICAgICAgICB9CisgICAgICAgIC8qIEdldCBiYXNpYyBtZXRhZGF0YSBhYm91dCBhIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFVF9LRVlfSU5GT1JNQVRJT04sIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5X3R5cGUsICZiaXRzKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKIAogICAgICAgICAvKiBDaGVjayB0aGF0IGlmIHRoZSBrZXkgbWV0YWRhdGEgYXJlIGRlc3Ryb3llZCAqLwotICAgICAgICBpZiAoa2V5X3R5cGUgPT0gY2hlY2sxW2ldLmtleV90eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0Ega2V5IG1ldGEgZGF0YSBub3QgZGVzdHJveWVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IGJpdHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBrZXkgbWV0YSBkYXRhIG5vdCBkZXN0cm95ZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQotCisgICAgICAgIFRFU1RfQVNTRVJUX05PVF9FUVVBTChrZXlfdHlwZSwgY2hlY2sxW2ldLmtleV90eXBlLCBURVNUX0NIRUNLUE9JTlRfTlVNKDExKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX05PVF9FUVVBTChiaXRzLCBjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMikpOwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CkBAIC0xNzIsMjggKzEzNiw0NiBAQAogCiBpbnQzMl90IHBzYV9kZXN0cm95X2ludmFsaWRfa2V5X3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCiB7Ci0gICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBpbnQgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazIpL3NpemVvZihjaGVjazJbMF0pOwotICAgIHVpbnQzMl90ICAgICAgICBpOworICAgIGludDMyX3QgICAgICAgICBpLCBzdGF0dXM7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwotICAgIGlmICh2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpICE9IFBTQV9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5JVF9GQUlMRUQ7Ci0gICAgfQorICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQogICAgIHsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7Ci0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2syW2ldLnRlc3RfZGVzYywgMCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfZGVzdHJveV9rZXkgd2l0aCB1bmFsbG9jYXRlZCBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKIAogICAgICAgICAvKiBEZXN0cm95IGEga2V5IGFuZCByZXN0b3JlIHRoZSBzbG90IHRvIGl0cyBkZWZhdWx0IHN0YXRlICovCi0gICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMltpXS5rZXlfc2xvdCk7Ci0gICAgICAgIGlmIChjaGVjazJbaV0uZXhwZWN0ZWRfc3RhdHVzICE9IHN0YXR1cykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGRlc3Ryb3kga2V5IHNob3VsZCBoYXZlIGZhaWxlZCBidXQgc3VjY2VlZGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwotICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfZGVzdHJveV9rZXkgd2l0aCB6ZXJvIGFzIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIERlc3Ryb3kgYSBrZXkgYW5kIHJlc3RvcmUgdGhlIHNsb3QgdG8gaXRzIGRlZmF1bHQgc3RhdGUgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgMCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMltpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfbGVuZ3RoLCAmY2hlY2syW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9kZXN0cm95X2tleSB3aXRoIGVtcHR5IGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIERlc3Ryb3kgYSBrZXkgYW5kIHJlc3RvcmUgdGhlIHNsb3QgdG8gaXRzIGRlZmF1bHQgc3RhdGUgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2syW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgICAgICAvKiBEZXN0cm95IGEga2V5IGFuZCByZXN0b3JlIHRoZSBzbG90IHRvIGl0cyBkZWZhdWx0IHN0YXRlICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOwogICAgIH0KKwogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNS90ZXN0X2MwMDUuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA1L3Rlc3RfYzAwNS5oCmluZGV4IGY1YTUwOGIuLmQxOTFhZWQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA1L3Rlc3RfYzAwNS5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA1L3Rlc3RfYzAwNS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xOCw3ICsxOCw2IEBACiAjZGVmaW5lIF9URVNUX0MwMDVfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCi0KICNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzAwNSkKICNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKICNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA1L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDUvdGVzdF9kYXRhLmgKaW5kZXggMzdmN2UxZi4uNWQ4N2FhYiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDUvdGVzdF9kYXRhLmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDUvdGVzdF9kYXRhLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIxLDcgKzIxLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1s3NV07Ci0gICAgcHNhX2tleV9zbG90X3QgICAgICAgICAga2V5X3Nsb3Q7CisgICAgcHNhX2tleV9oYW5kbGVfdCAgICAgICAga2V5X2hhbmRsZTsKICAgICBwc2Ffa2V5X3R5cGVfdCAgICAgICAgICBrZXlfdHlwZTsKICAgICB1aW50OF90ICAgICAgICAgICAgICAgICBrZXlfZGF0YVszNF07CiAgICAgdWludDMyX3QgICAgICAgICAgICAgICAga2V5X2xlbmd0aDsKQEAgLTMyLDkgKzMyLDkgQEAKICAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXM7CiB9IHRlc3RfZGF0YTsKIAotdWludDhfdCByc2FfMzg0X2tleXBhaXJbMV07Ci11aW50OF90IHJzYV8zODRfa2V5ZGF0YVsxXTsKLXVpbnQ4X3QgcnNhXzI1Nl9rZXlwYWlyW10gPSB7CitzdGF0aWMgdWludDhfdCByc2FfMzg0X2tleXBhaXJbMV07CitzdGF0aWMgdWludDhfdCByc2FfMzg0X2tleWRhdGFbMV07CitzdGF0aWMgdWludDhfdCByc2FfMjU2X2tleXBhaXJbXSA9IHsKICAweDMwLCAweDgyLCAweDA0LCAweEE1LCAweDAyLCAweDAxLCAweDAwLCAweDAyLCAweDgyLCAweDAxLCAweDAxLCAweDAwLCAweEMwLAogIDB4OTUsIDB4MDgsIDB4RTEsIDB4NTcsIDB4NDEsIDB4RjIsIDB4NzEsIDB4NkQsIDB4QjcsIDB4RDIsIDB4NDUsIDB4NDEsIDB4MjcsCiAgMHgwMSwgMHg2NSwgMHhDNiwgMHg0NSwgMHhBRSwgMHhGMiwgMHhCQywgMHgyNCwgMHgzMCwgMHhCOCwgMHg5NSwgMHhDRSwgMHgyRiwKQEAgLTEyOCw3ICsxMjgsNyBAQAogIDB4NUYsIDB4QTgsIDB4QkYsIDB4MTksIDB4MzIsIDB4QTEsIDB4RjUsIDB4REMsIDB4MDMsIDB4RTYsIDB4N0MsIDB4OUEsIDB4MUYsCiAgMHgwQywgMHg3QywgMHhBOSwgMHhCMCwgMHgwRSwgMHgyMSwgMHgzNywgMHgzQiwgMHhGMSwgMHhCMH07CiAKLXVpbnQ4X3QgcnNhXzI1Nl9rZXlkYXRhW10gPSB7CitzdGF0aWMgdWludDhfdCByc2FfMjU2X2tleWRhdGFbXSA9IHsKICAweDMwLCAweDgyLCAweDAxLCAweDIyLCAweDMwLCAweDBELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELAogIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDUsIDB4MDAsIDB4MDMsIDB4ODIsIDB4MDEsIDB4MEYsIDB4MDAsIDB4MzAsIDB4ODIsIDB4MDEsIDB4MEEsCiAgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhEQiwgMHgxQywgMHg3RiwgMHgyRSwgMHgwQiwgMHhDRCwgMHhCRiwgMHhDRSwgMHhEMSwKQEAgLTE1MSw3ICsxNTEsNyBAQAogIDB4MEYsIDB4NzEsIDB4MkQsIDB4RDIsIDB4MDgsIDB4MTAsIDB4MUIsIDB4QUQsIDB4NDQsIDB4NDEsIDB4RTAsIDB4RkUsIDB4NzksIDB4QTAsCiAgMHg2MywgMHg5MywgMHg4QSwgMHhCMSwgMHg1RCwgMHhFOSwgMHhCMCwgMHhFRSwgMHg2RiwgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMX07CiAKLXVpbnQ4X3QgZWNfa2V5ZGF0YVtdID0geworc3RhdGljIHVpbnQ4X3QgZWNfa2V5ZGF0YVtdID0gewogIDB4MzAsIDB4NDksIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDcsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDIsIDB4MDEsIDB4MDYsCiAgMHgwOCwgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwMywgMHgwMSwgMHgwMSwgMHgwMywgMHgzMiwgMHgwMCwgMHgwNCwgMHhCQywKICAweDc5LCAweDdELCAweEIzLCAweEFFLCAweDdGLCAweDA4LCAweEVDLCAweDNELCAweDQ5LCAweDZCLCAweDRGLCAweEI0LCAweDExLCAweEIzLApAQCAtMTU5LDcgKzE1OSw3IEBACiAgMHhFQywgMHg4QiwgMHgxQSwgMHg3QiwgMHhGMiwgMHg0QiwgMHhFOSwgMHgyOSwgMHg1MSwgMHhDQywgMHg1QiwgMHhBMSwgMHhCRSwgMHhCQiwKICAweDI0LCAweDc0LCAweDkwLCAweDlBLCAweEUwfTsKIAotdWludDhfdCBlY19rZXlwYWlyW10gPSB7CitzdGF0aWMgdWludDhfdCBlY19rZXlwYWlyW10gPSB7CiAgMHgzMCwgMHg1RiwgMHgwMiwgMHgwMSwgMHgwMSwgMHgwNCwgMHgxOCwgMHgzMywgMHg4RSwgMHg4NiwgMHhBOCwgMHg4MSwgMHhFMiwgMHgzOCwKICAweEY1LCAweDQ5LCAweEJELCAweDZGLCAweDA1LCAweDUzLCAweDQ5LCAweDRCLCAweDczLCAweEUzLCAweEQ2LCAweDExLCAweDMwLCAweEZELAogIDB4QzYsIDB4QzksIDB4NkQsIDB4QTAsIDB4MEEsIDB4MDYsIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDMsIDB4MDEsCkBAIC0xNjgsMTggKzE2OCwxOCBAQAogIDB4QjcsIDB4NzYsIDB4QzYsIDB4NzQsIDB4RjcsIDB4QzYsIDB4RjMsIDB4NTQsIDB4QjcsIDB4RDIsIDB4MjQsIDB4MDYsIDB4MkMsIDB4MUYsCiAgMHg2OCwgMHg1NCwgMHhCNSwgMHhBNywgMHhBRiwgMHgwRiwgMHhFNSwgMHg3OCwgMHhFQSwgMHhGMiwgMHg1OCwgMHhGMCwgMHgyN307CiAKLXRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2sxW10gPSB7CiB7IlRlc3QgcHNhX2Rlc3Ryb3lfa2V5IDE2IEJ5dGUgQUVTXG4iLCAxLCBQU0FfS0VZX1RZUEVfQUVTLAogezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCiAgMHg1RiwgMHhDOX0sCi0gQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKICBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIAogeyJUZXN0IHBzYV9kZXN0cm95X2tleSAyNCBCeXRlIEFFU1xuIiwgMiwgUFNBX0tFWV9UWVBFX0FFUywKIHsweDI0LCAweDEzLCAweDYxLCAweDQ3LCAweDYxLCAweEI4LCAweEM4LCAweEYwLCAweERGLCAweEFCLCAweDVBLCAweDBFLCAweDg3LAogIDB4NDAsIDB4QUMsIDB4QTMsIDB4OTAsIDB4NzcsIDB4ODMsIDB4NTIsIDB4MzEsIDB4NzQsIDB4Rjl9LAotIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKKyBBRVNfMjRCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsCiAgQllURVNfVE9fQklUUyhBRVNfMjRCX0tFWV9TSVpFKSwgQUVTXzI0Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKQEAgLTE4Nyw3ICsxODcsNyBAQAogezB4RUEsIDB4RDUsIDB4RTYsIDB4QzgsIDB4NTEsIDB4RjksIDB4RUMsIDB4QkIsIDB4OUIsIDB4NTcsIDB4N0MsIDB4RUQsIDB4RDIsCiAgMHg0QiwgMHg4MiwgMHg4NCwgMHg5RiwgMHg5RiwgMHhFNiwgMHg3MywgMHgyMSwgMHgzRCwgMHgxQSwgMHgwNSwgMHhDOSwgMHhFRCwKICAweERGLCAweDI1LCAweDE3LCAweDY4LCAweDg2LCAweEFFfSwKLSBBRVNfMzJCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgQUVTXzMyQl9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAogIEJZVEVTX1RPX0JJVFMoQUVTXzMyQl9LRVlfU0laRSksIEFFU18zMkJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogCkBAIC0yMDUsMTQgKzIwNSwxNCBAQAogCiB7IlRlc3QgcHNhX2Rlc3Ryb3lfa2V5IHdpdGggREVTIDY0IGJpdCBrZXlcbiIsIDYsIFBTQV9LRVlfVFlQRV9ERVMsCiAgezB4NzAsIDB4MjQsIDB4NTUsIDB4MEMsIDB4MTQsIDB4OUQsIDB4RUQsIDB4Mjl9LAotIERFU184Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIERFU184Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAogIEJZVEVTX1RPX0JJVFMoREVTXzhCX0tFWV9TSVpFKSwgREVTXzhCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIAogeyJUZXN0IHBzYV9kZXN0cm95X2tleSB3aXRoIFRyaXBsZSBERVMgMi1LZXlcbiIsIDcsIFBTQV9LRVlfVFlQRV9ERVMsCiB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGfSwKLSBERVMzXzJLRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIERFUzNfMktFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsCiAgQllURVNfVE9fQklUUyhERVMzXzJLRVlfU0laRSksIERFUzNfMktFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIApAQCAtMjIwLDcgKzIyMCw3IEBACiB7MHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhBQiwgMHhDRCwgMHhFRiwKICAweEYxLCAweEUwLCAweEQzLCAweEMyLCAweEI1LCAweEE0LCAweDk3LCAweDg2LAogIDB4RkUsIDB4REMsIDB4QkEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTB9LAotIERFUzNfM0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgREVTM18zS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKICBCWVRFU19UT19CSVRTKERFUzNfM0tFWV9TSVpFKSwgREVTM18zS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogCkBAIC0yNDAsMjIgKzI0MCwxMSBAQAogfTsKIAogCi10ZXN0X2RhdGEgY2hlY2syW10gPSB7Ci17IlRlc3QgcHNhX2Rlc3Ryb3lfa2V5IHdpdGggaW52YWxpZCBrZXkgc2xvdFxuIiwgSU5WQUxJRF9LRVlfU0xPVCwgUFNBX0tFWV9UWVBFX0FFUywKLXswfSwKLUFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKLUJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCi19LAotCi17IlRlc3QgcHNhX2Rlc3Ryb3lfa2V5IHdpdGggemVybyBrZXkgc2xvdFxuIiwgWkVST19LRVlfU0xPVCwgUFNBX0tFWV9UWVBFX0FFUywKLXswfSwKLUFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKLUJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCi19LAotCi17IlRlc3QgcHNhX2Rlc3Ryb3lfa2V5IHdpdGggZW1wdHkga2V5IHNsb3RcbiIsIEVNUFRZX0tFWV9TTE9ULCBQU0FfS0VZX1RZUEVfQUVTLAotezB9LAotQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAotQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2syW10gPSB7Cit7IlRlc3QgcHNhX2Rlc3Ryb3lfa2V5IG5lZ2F0aXZlIGNhc2VcbiIsIDExLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOX0sCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAorIEJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogfTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA2L3Rlc3RfYzAwNi5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDYvdGVzdF9jMDA2LmMKaW5kZXggYmM1NThhMS4uNGE1NjczNCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDYvdGVzdF9jMDA2LmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDYvdGVzdF9jMDA2LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDE0ICsxNSw4IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKLSNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgInRlc3RfYzAwNi5oIgogI2luY2x1ZGUgInRlc3RfZGF0YS5oIgogCkBAIC0zMywzNCArMjcsMzYgQEAKICAgICBOVUxMLAogfTsKIAotaW50IGdfdGVzdF9jb3VudDsKK3N0YXRpYyBpbnQgZ190ZXN0X2NvdW50ID0gMTsKIAogaW50MzJfdCBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbl90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgIGludDMyX3QgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwotICAgIHVpbnQzMl90ICAgICAgICAgaTsKKyAgICBpbnQzMl90ICAgICAgICAgIGksIHN0YXR1czsKICAgICB1aW50OF90ICAgICAgICAgICprZXlfZGF0YTsKICAgICBwc2Ffa2V5X3BvbGljeV90IHBvbGljeTsKICAgICBwc2Ffa2V5X3R5cGVfdCAgIGtleV90eXBlOwogICAgIHNpemVfdCAgICAgICAgICAgYml0czsKICAgICBpbnQgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKIAotICAgIGdfdGVzdF9jb3VudCA9IDE7Ci0KICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwotICAgIGlmICh2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpICE9IFBTQV9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5JVF9GQUlMRUQ7Ci0gICAgfQotCi0gICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCi0gICAgICogdXNhZ2Ugb2YgdGhlIGtleQotICAgICAqLwotICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOwogCiAgICAgLyogU2V0IHRoZSBrZXkgZGF0YSBidWZmZXIgdG8gdGhlIGlucHV0IGJhc2Ugb24gYWxnb3JpdGhtICovCiAgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKICAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKICAgICAgICAgaWYgKFBTQV9LRVlfVFlQRV9JU19SU0EoY2hlY2sxW2ldLmtleV90eXBlKSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGNoZWNrMVtpXS5rZXlfdHlwZSA9PSBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIpCkBAIC05NSw0NiArOTEsMzIgQEAKICAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCiAgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOwotICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKKworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMVtpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfbGVuZ3RoLCAmY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKIAogICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCi0gICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfc2xvdCwgJnBvbGljeSk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBzZXQga2V5IHBvbGljeSBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQorICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOwogCiAgICAgICAgIC8qIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazFbaV0ua2V5X3Nsb3QsIGNoZWNrMVtpXS5rZXlfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEsIGNoZWNrMVtpXS5rZXlfbGVuZ3RoKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGltcG9ydCBrZXkgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV90eXBlLCBrZXlfZGF0YSwgY2hlY2sxW2ldLmtleV9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKIAogICAgICAgICAvKiBHZXQgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYSBrZXkgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRVRfS0VZX0lORk9STUFUSU9OLCBjaGVjazFbaV0ua2V5X3Nsb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleV90eXBlLCAmYml0cyk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBnZXQga2V5IGluZm9ybWF0aW9uIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0tFWV9JTkZPUk1BVElPTiwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXlfdHlwZSwgJmJpdHMpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOwogCi0gICAgICAgIGlmIChrZXlfdHlwZSAhPSBjaGVjazFbaV0ua2V5X3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBtaXNtYXRjaCBrZXkgdHlwZVxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisgICAgICAgIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTKQorICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGJpdHMgIT0gY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFN0b3JlZCBrZXkgbGVuZ3RoIG1pc21hdGNoXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfU0laRTsKLSAgICAgICAgfQorICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChrZXlfdHlwZSwgY2hlY2sxW2ldLmtleV90eXBlLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChiaXRzLCBjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKQEAgLTE0MiwyOCArMTI0LDU3IEBACiAKIGludDMyX3QgcHNhX2dldF9rZXlfaW5mb3JtYXRpb25faW52YWxpZF90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgIGludDMyX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7Ci0gICAgaW50ICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2syKS9zaXplb2YoY2hlY2syWzBdKTsKLSAgICB1aW50MzJfdCAgICAgICAgaTsKKyAgICBpbnQgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2syKS9zaXplb2YoY2hlY2syWzBdKTsKKyAgICBpbnQzMl90ICAgICAgICAgIGksIHN0YXR1czsKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCi0gICAgaWYgKHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCkgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTklUX0ZBSUxFRDsKLSAgICB9CisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCiAgICAgewotICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazJbaV0udGVzdF9kZXNjLCAwKTsKLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRVRfS0VZX0lORk9STUFUSU9OLCBjaGVjazJbaV0ua2V5X3Nsb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoZWNrMltpXS5rZXlfdHlwZSwgJmNoZWNrMltpXS5rZXlfbGVuZ3RoKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBjaGVjazJbaV0uZXhwZWN0ZWRfc3RhdHVzKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgZ2V0IGtleSBpbmZvIHNob3VsZCBoYXZlIGZhaWxlZCBidXQgc3VjY2VlZGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwotICAgICAgICB9CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbiB3aXRoIHVuYWxsb2NhdGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGtleSBoYW5kbGVcbiIsIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogR2V0IGJhc2ljIG1ldGFkYXRhIGFib3V0IGEga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0tFWV9JTkZPUk1BVElPTiwgY2hlY2syW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGVjazJbaV0ua2V5X3R5cGUsICZjaGVjazJbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2dldF9rZXlfaW5mb3JtYXRpb24gd2l0aCB6ZXJvIGFzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGtleSBoYW5kbGVcbiIsIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRVRfS0VZX0lORk9STUFUSU9OLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hlY2syW2ldLmtleV90eXBlLCAmY2hlY2syW2ldLmtleV9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9nZXRfa2V5X2luZm9ybWF0aW9uIHdpdGggZW1wdHkga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazJbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMltpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgLyogR2V0IGJhc2ljIG1ldGFkYXRhIGFib3V0IGEga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0tFWV9JTkZPUk1BVElPTiwgY2hlY2syW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGVjazJbaV0ua2V5X3R5cGUsICZjaGVjazJbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0VNUFRZX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbiB3aXRoIGRlc3Ryb3llZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBrZXkgaGFuZGxlXG4iLCBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIERlc3Ryb3kgYSBrZXkgYW5kIHJlc3RvcmUgdGhlIHNsb3QgdG8gaXRzIGRlZmF1bHQgc3RhdGUgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2syW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgICAgICAvKiBHZXQgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYSBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRVRfS0VZX0lORk9STUFUSU9OLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoZWNrMltpXS5rZXlfdHlwZSwgJmNoZWNrMltpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOwogCiAgICAgfQorCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA2L3Rlc3RfYzAwNi5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDYvdGVzdF9jMDA2LmgKaW5kZXggMGU3YTFlMS4uZjhkODM0YiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDYvdGVzdF9jMDA2LmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDYvdGVzdF9jMDA2LmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE4LDcgKzE4LDYgQEAKICNkZWZpbmUgX1RFU1RfQzAwNl9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKLQogI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxjMDA2KQogI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQogI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDYvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNi90ZXN0X2RhdGEuaAppbmRleCBhZTFlZThmLi5iMDZmYTViIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNi90ZXN0X2RhdGEuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNi90ZXN0X2RhdGEuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjEsNyArMjEsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKLSAgICBwc2Ffa2V5X3Nsb3RfdCAgICAgICAgICBrZXlfc2xvdDsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOwogICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOwogICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzM0XTsKICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOwpAQCAtMzIsMTAgKzMyLDEwIEBACiAgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzOwogfSB0ZXN0X2RhdGE7CiAKLXVpbnQ4X3QgcnNhXzM4NF9rZXlwYWlyWzFdOwotdWludDhfdCByc2FfMzg0X2tleWRhdGFbMV07CitzdGF0aWMgdWludDhfdCByc2FfMzg0X2tleXBhaXJbMV07CitzdGF0aWMgdWludDhfdCByc2FfMzg0X2tleWRhdGFbMV07CiAKLXVpbnQ4X3QgcnNhXzI1Nl9rZXlwYWlyW10gPSB7CitzdGF0aWMgdWludDhfdCByc2FfMjU2X2tleXBhaXJbXSA9IHsKICAweDMwLCAweDgyLCAweDA0LCAweEE1LCAweDAyLCAweDAxLCAweDAwLCAweDAyLCAweDgyLCAweDAxLCAweDAxLCAweDAwLCAweEMwLAogIDB4OTUsIDB4MDgsIDB4RTEsIDB4NTcsIDB4NDEsIDB4RjIsIDB4NzEsIDB4NkQsIDB4QjcsIDB4RDIsIDB4NDUsIDB4NDEsIDB4MjcsCiAgMHgwMSwgMHg2NSwgMHhDNiwgMHg0NSwgMHhBRSwgMHhGMiwgMHhCQywgMHgyNCwgMHgzMCwgMHhCOCwgMHg5NSwgMHhDRSwgMHgyRiwKQEAgLTEyOSw3ICsxMjksNyBAQAogIDB4NUYsIDB4QTgsIDB4QkYsIDB4MTksIDB4MzIsIDB4QTEsIDB4RjUsIDB4REMsIDB4MDMsIDB4RTYsIDB4N0MsIDB4OUEsIDB4MUYsCiAgMHgwQywgMHg3QywgMHhBOSwgMHhCMCwgMHgwRSwgMHgyMSwgMHgzNywgMHgzQiwgMHhGMSwgMHhCMH07CiAKLXVpbnQ4X3QgcnNhXzI1Nl9rZXlkYXRhW10gPSB7CitzdGF0aWMgdWludDhfdCByc2FfMjU2X2tleWRhdGFbXSA9IHsKICAweDMwLCAweDgyLCAweDAxLCAweDIyLCAweDMwLCAweDBELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELAogIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDUsIDB4MDAsIDB4MDMsIDB4ODIsIDB4MDEsIDB4MEYsIDB4MDAsIDB4MzAsIDB4ODIsIDB4MDEsIDB4MEEsCiAgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhEQiwgMHgxQywgMHg3RiwgMHgyRSwgMHgwQiwgMHhDRCwgMHhCRiwgMHhDRSwgMHhEMSwKQEAgLTE1Miw3ICsxNTIsNyBAQAogIDB4MEYsIDB4NzEsIDB4MkQsIDB4RDIsIDB4MDgsIDB4MTAsIDB4MUIsIDB4QUQsIDB4NDQsIDB4NDEsIDB4RTAsIDB4RkUsIDB4NzksIDB4QTAsCiAgMHg2MywgMHg5MywgMHg4QSwgMHhCMSwgMHg1RCwgMHhFOSwgMHhCMCwgMHhFRSwgMHg2RiwgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMX07CiAKLXVpbnQ4X3QgZWNfa2V5ZGF0YVtdID0geworc3RhdGljIHVpbnQ4X3QgZWNfa2V5ZGF0YVtdID0gewogIDB4MzAsIDB4NDksIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDcsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDIsIDB4MDEsIDB4MDYsCiAgMHgwOCwgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwMywgMHgwMSwgMHgwMSwgMHgwMywgMHgzMiwgMHgwMCwgMHgwNCwgMHhCQywKICAweDc5LCAweDdELCAweEIzLCAweEFFLCAweDdGLCAweDA4LCAweEVDLCAweDNELCAweDQ5LCAweDZCLCAweDRGLCAweEI0LCAweDExLCAweEIzLApAQCAtMTYwLDcgKzE2MCw3IEBACiAgMHhFQywgMHg4QiwgMHgxQSwgMHg3QiwgMHhGMiwgMHg0QiwgMHhFOSwgMHgyOSwgMHg1MSwgMHhDQywgMHg1QiwgMHhBMSwgMHhCRSwgMHhCQiwKICAweDI0LCAweDc0LCAweDkwLCAweDlBLCAweEUwfTsKIAotdWludDhfdCBlY19rZXlwYWlyW10gPSB7CitzdGF0aWMgdWludDhfdCBlY19rZXlwYWlyW10gPSB7CiAgMHgzMCwgMHg1RiwgMHgwMiwgMHgwMSwgMHgwMSwgMHgwNCwgMHgxOCwgMHgzMywgMHg4RSwgMHg4NiwgMHhBOCwgMHg4MSwgMHhFMiwgMHgzOCwKICAweEY1LCAweDQ5LCAweEJELCAweDZGLCAweDA1LCAweDUzLCAweDQ5LCAweDRCLCAweDczLCAweEUzLCAweEQ2LCAweDExLCAweDMwLCAweEZELAogIDB4QzYsIDB4QzksIDB4NkQsIDB4QTAsIDB4MEEsIDB4MDYsIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDMsIDB4MDEsCkBAIC0xNjksMTggKzE2OSwxOCBAQAogIDB4QjcsIDB4NzYsIDB4QzYsIDB4NzQsIDB4RjcsIDB4QzYsIDB4RjMsIDB4NTQsIDB4QjcsIDB4RDIsIDB4MjQsIDB4MDYsIDB4MkMsIDB4MUYsCiAgMHg2OCwgMHg1NCwgMHhCNSwgMHhBNywgMHhBRiwgMHgwRiwgMHhFNSwgMHg3OCwgMHhFQSwgMHhGMiwgMHg1OCwgMHhGMCwgMHgyN307CiAKLXRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2sxW10gPSB7CiB7IlRlc3QgcHNhX2dldF9rZXlfaW5mb3JtYXRpb24gMTYgQnl0ZSBBRVNcbiIsIDEsIFBTQV9LRVlfVFlQRV9BRVMsCiB7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKICAweDVGLCAweEM5fSwKLSBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAogIEJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogCiB7IlRlc3QgcHNhX2dldF9rZXlfaW5mb3JtYXRpb24gMjQgQnl0ZSBBRVNcbiIsIDIsIFBTQV9LRVlfVFlQRV9BRVMsCiB7MHgyNCwgMHgxMywgMHg2MSwgMHg0NywgMHg2MSwgMHhCOCwgMHhDOCwgMHhGMCwgMHhERiwgMHhBQiwgMHg1QSwgMHgwRSwgMHg4NywKICAweDQwLCAweEFDLCAweEEzLCAweDkwLCAweDc3LCAweDgzLCAweDUyLCAweDMxLCAweDc0LCAweEY5fSwKLSBBRVNfMjRCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgQUVTXzI0Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAogIEJZVEVTX1RPX0JJVFMoQUVTXzI0Ql9LRVlfU0laRSksIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogCkBAIC0xODgsNyArMTg4LDcgQEAKIHsweEVBLCAweEQ1LCAweEU2LCAweEM4LCAweDUxLCAweEY5LCAweEVDLCAweEJCLCAweDlCLCAweDU3LCAweDdDLCAweEVELCAweEQyLAogIDB4NEIsIDB4ODIsIDB4ODQsIDB4OUYsIDB4OUYsIDB4RTYsIDB4NzMsIDB4MjEsIDB4M0QsIDB4MUEsIDB4MDUsIDB4QzksIDB4RUQsCiAgMHhERiwgMHgyNSwgMHgxNywgMHg2OCwgMHg4NiwgMHhBRX0sCi0gQUVTXzMyQl9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIEFFU18zMkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKICBCWVRFU19UT19CSVRTKEFFU18zMkJfS0VZX1NJWkUpLCBBRVNfMzJCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIApAQCAtMjA2LDE0ICsyMDYsMTQgQEAKIAogeyJUZXN0IHBzYV9nZXRfa2V5X2luZm9ybWF0aW9uIHdpdGggREVTIDY0IGJpdCBrZXlcbiIsIDYsIFBTQV9LRVlfVFlQRV9ERVMsCiAgezB4NzAsIDB4MjQsIDB4NTUsIDB4MEMsIDB4MTQsIDB4OUQsIDB4RUQsIDB4Mjl9LAotIERFU184Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIERFU184Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAogIEJZVEVTX1RPX0JJVFMoREVTXzhCX0tFWV9TSVpFKSwgREVTXzhCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIAogeyJUZXN0IHBzYV9nZXRfa2V5X2luZm9ybWF0aW9uIHdpdGggVHJpcGxlIERFUyAyLUtleVxuIiwgNywgUFNBX0tFWV9UWVBFX0RFUywKIHsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9LAotIERFUzNfMktFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgREVTM18yS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKICBCWVRFU19UT19CSVRTKERFUzNfMktFWV9TSVpFKSwgREVTM18yS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogCkBAIC0yMjEsNyArMjIxLDcgQEAKIHsweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGLAogIDB4RjEsIDB4RTAsIDB4RDMsIDB4QzIsIDB4QjUsIDB4QTQsIDB4OTcsIDB4ODYsCiAgMHhGRSwgMHhEQywgMHhCQSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMH0sCi0gREVTM18zS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKKyBERVMzXzNLRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAogIEJZVEVTX1RPX0JJVFMoREVTM18zS0VZX1NJWkUpLCBERVMzXzNLRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKQEAgLTI0MCwyMyArMjQwLDExIEBACiB9LAogfTsKIAotCi10ZXN0X2RhdGEgY2hlY2syW10gPSB7Ci17IlRlc3QgcHNhX2dldF9rZXlfaW5mb3JtYXRpb24gd2l0aCBpbnZhbGlkIGtleSBzbG90XG4iLCBJTlZBTElEX0tFWV9TTE9ULCBQU0FfS0VZX1RZUEVfQUVTLAotezB9LAotQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAotQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKLX0sCi0KLXsiVGVzdCBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbiB3aXRoIHplcm8ga2V5IHNsb3RcbiIsIFpFUk9fS0VZX1NMT1QsIFBTQV9LRVlfVFlQRV9BRVMsCi17MH0sCi1BRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCi1CWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAotfSwKLQoteyJUZXN0IHBzYV9nZXRfa2V5X2luZm9ybWF0aW9uIHdpdGggZW1wdHkga2V5IHNsb3RcbiIsIEVNUFRZX0tFWV9TTE9ULCBQU0FfS0VZX1RZUEVfQUVTLAotezB9LAotQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAotQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0VSUk9SX0VNUFRZX1NMT1QKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2syW10gPSB7Cit7IlRlc3QgcHNhX2dldF9rZXlfaW5mb3JtYXRpb24gbmVnYXRpdmUgY2FzZXNcbiIsIDExLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOX0sCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAorIEJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogfTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA3L3Rlc3RfYzAwNy5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDcvdGVzdF9jMDA3LmMKaW5kZXggMmU1OWIxYy4uZDkyMjQ1YSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDcvdGVzdF9jMDA3LmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDcvdGVzdF9jMDA3LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDE0ICsxNSw4IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKLSNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgInRlc3RfYzAwNy5oIgogI2luY2x1ZGUgInRlc3RfZGF0YS5oIgogI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKQEAgLTM0LDM0ICsyOCwzNSBAQAogICAgIE5VTEwsCiB9OwogCi1pbnQgZ190ZXN0X2NvdW50Oworc3RhdGljIGludCBnX3Rlc3RfY291bnQgPSAxOwogCiBpbnQzMl90IHBzYV9zZXRfa2V5X3BvbGljeV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgIGludDMyX3QgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHVpbnQ4X3QgICAgICAgICAgKmtleV9kYXRhOwogICAgIHBzYV9rZXlfcG9saWN5X3QgcG9saWN5LCBleHBlY3RlZF9wb2xpY3k7CiAgICAgaW50ICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7Ci0gICAgdWludDMyX3QgICAgICAgICBpOwotCi0gICAgZ190ZXN0X2NvdW50ID0gMTsKKyAgICBpbnQzMl90ICAgICAgICAgIGksIHN0YXR1czsKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCi0gICAgaWYgKHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCkgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTklUX0ZBSUxFRDsKLSAgICB9Ci0KLSAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKLSAgICAgKiB1c2FnZSBvZiB0aGUga2V5Ci0gICAgICovCi0gICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CiAKICAgICAvKiBTZXQgdGhlIGtleSBkYXRhIGJ1ZmZlciB0byB0aGUgaW5wdXQgYmFzZSBvbiBhbGdvcml0aG0gKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQogICAgIHsKKwogICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKICAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCiAgICAgICAgIGlmIChQU0FfS0VZX1RZUEVfSVNfUlNBKGNoZWNrMVtpXS5rZXlfdHlwZSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChjaGVjazFbaV0ua2V5X3R5cGUgPT0gUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSKQpAQCAtOTcsMzggKzkyLDMzIEBACiAgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZyk7CiAKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazFbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKICAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLwotICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazFbaV0ua2V5X3Nsb3QsICZwb2xpY3kpOwotICAgICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0Egc2V0IGtleSBwb2xpY3kgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTKQorICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLwotICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfc2xvdCwgY2hlY2sxW2ldLmtleV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBpbXBvcnQga2V5IGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfdHlwZSwga2V5X2RhdGEsIGNoZWNrMVtpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CiAKICAgICAgICAgLyogIEdldCB0aGUgdXNhZ2UgcG9saWN5IGZvciBhIGtleSBzbG90ICovCi0gICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4cGVjdGVkX3BvbGljeSk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBnZXQga2V5IHBvbGljeSBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQorICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFVF9LRVlfUE9MSUNZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4cGVjdGVkX3BvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOwogCi0gICAgICAgIGlmICgoZXhwZWN0ZWRfcG9saWN5LnVzYWdlICE9IGNoZWNrMVtpXS51c2FnZSkgfHwKLSAgICAgICAgICAgIChleHBlY3RlZF9wb2xpY3kuYWxnICE9ICBjaGVjazFbaV0ua2V5X2FsZykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBvbGljeSBkYXRhIE1pc21hdGNoXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0RBVEFfTUlTTUFUQ0g7Ci0gICAgICAgIH0KKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlIHVzYWdlIGlzIHNhbWUgYXMgcHJvZ3JhbW1lZCAqLworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChleHBlY3RlZF9wb2xpY3kudXNhZ2UsIGNoZWNrMVtpXS51c2FnZSwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlIGFsZ29yaXRobSBpcyBzYW1lIGFzIHByb2dyYW1tZWQgKi8KKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZXhwZWN0ZWRfcG9saWN5LmFsZywgY2hlY2sxW2ldLmtleV9hbGcsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CkBAIC0xMzYsMTYgKzEyNiwxMyBAQAogCiBpbnQzMl90IHBzYV9zZXRfa2V5X3BvbGljeV9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgIGludDMyX3QgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIGludCAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazIpL3NpemVvZihjaGVjazJbMF0pOwotICAgIHVpbnQzMl90ICAgICAgICAgaTsKKyAgICBpbnQzMl90ICAgICAgICAgIGksIHN0YXR1czsKICAgICBwc2Ffa2V5X3BvbGljeV90IHBvbGljeTsKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCi0gICAgaWYgKHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCkgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTklUX0ZBSUxFRDsKLSAgICB9CisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKIAogICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAogICAgICogdXNhZ2Ugb2YgdGhlIGtleQpAQCAtMTU0LDIwICsxNDEsNDkgQEAKIAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCiAgICAgewotICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazJbaV0udGVzdF9kZXNjLCAwKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9zZXRfa2V5X3BvbGljeSB3aXRoIHVuYWxsb2NhdGVkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKIAotICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KLSAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazJbaV0udXNhZ2UsCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2syW2ldLnVzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcpOworICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMltpXS5rZXlfaGFuZGxlLCAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOwogCi0gICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLwotICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMltpXS5rZXlfc2xvdCwgJnBvbGljeSk7Ci0gICAgICAgaWYgKHN0YXR1cyAhPSBjaGVjazJbaV0uZXhwZWN0ZWRfc3RhdHVzKQotICAgICAgIHsKLSAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIHNldCBrZXkgcG9saWN5IHNob3VsZCBoYXZlIGZhaWxlZCBidXQgc3VjY2VlZGVkXG4iLCAwKTsKLSAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7Ci0gICAgICAgfQorICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX3NldF9rZXlfcG9saWN5IHdpdGggemVybyBhcyBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCAwLCAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMltpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9zZXRfa2V5X3BvbGljeSB3aXRoIGFscmVhZHkgb2NjdXBpZWQgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazJbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMltpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgIC8qIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV90eXBlLCBjaGVjazJbaV0ua2V5X2RhdGEsIGNoZWNrMltpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX09DQ1VQSUVEX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNy90ZXN0X2MwMDcuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA3L3Rlc3RfYzAwNy5oCmluZGV4IDAyMDE4NTIuLmVlNTYzNWYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA3L3Rlc3RfYzAwNy5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA3L3Rlc3RfYzAwNy5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xOCw3ICsxOCw2IEBACiAjZGVmaW5lIF9URVNUX0MwMDdfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCi0KICNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzAwNykKICNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKICNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA3L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDcvdGVzdF9kYXRhLmgKaW5kZXggYzU0MDEwOS4uYTEyMTZkZCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDcvdGVzdF9kYXRhLmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDcvdGVzdF9kYXRhLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE5LDcgKzE5LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1s3NV07Ci0gICAgcHNhX2tleV9zbG90X3QgICAgICAgICAga2V5X3Nsb3Q7CisgICAgcHNhX2tleV9oYW5kbGVfdCAgICAgICAga2V5X2hhbmRsZTsKICAgICBwc2Ffa2V5X3R5cGVfdCAgICAgICAgICBrZXlfdHlwZTsKICAgICB1aW50OF90ICAgICAgICAgICAgICAgICBrZXlfZGF0YVszNF07CiAgICAgdWludDMyX3QgICAgICAgICAgICAgICAga2V5X2xlbmd0aDsKQEAgLTMwLDEwICszMCwxMCBAQAogICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1czsKIH0gdGVzdF9kYXRhOwogCi11aW50OF90IHJzYV8zODRfa2V5cGFpclsxXTsKLXVpbnQ4X3QgcnNhXzM4NF9rZXlkYXRhWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlwYWlyWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlkYXRhWzFdOwogCi11aW50OF90IHJzYV8yNTZfa2V5cGFpcltdID0geworc3RhdGljIHVpbnQ4X3QgcnNhXzI1Nl9rZXlwYWlyW10gPSB7CiAgMHgzMCwgMHg4MiwgMHgwNCwgMHhBNSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhDMCwKICAweDk1LCAweDA4LCAweEUxLCAweDU3LCAweDQxLCAweEYyLCAweDcxLCAweDZELCAweEI3LCAweEQyLCAweDQ1LCAweDQxLCAweDI3LAogIDB4MDEsIDB4NjUsIDB4QzYsIDB4NDUsIDB4QUUsIDB4RjIsIDB4QkMsIDB4MjQsIDB4MzAsIDB4QjgsIDB4OTUsIDB4Q0UsIDB4MkYsCkBAIC0xMjcsNyArMTI3LDcgQEAKICAweDVGLCAweEE4LCAweEJGLCAweDE5LCAweDMyLCAweEExLCAweEY1LCAweERDLCAweDAzLCAweEU2LCAweDdDLCAweDlBLCAweDFGLAogIDB4MEMsIDB4N0MsIDB4QTksIDB4QjAsIDB4MEUsIDB4MjEsIDB4MzcsIDB4M0IsIDB4RjEsIDB4QjB9OwogCi11aW50OF90IHJzYV8yNTZfa2V5ZGF0YVtdID0geworc3RhdGljIHVpbnQ4X3QgcnNhXzI1Nl9rZXlkYXRhW10gPSB7CiAgMHgzMCwgMHg4MiwgMHgwMSwgMHgyMiwgMHgzMCwgMHgwRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwKICAweDAxLCAweDAxLCAweDAxLCAweDA1LCAweDAwLCAweDAzLCAweDgyLCAweDAxLCAweDBGLCAweDAwLCAweDMwLCAweDgyLCAweDAxLCAweDBBLAogIDB4MDIsIDB4ODIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4REIsIDB4MUMsIDB4N0YsIDB4MkUsIDB4MEIsIDB4Q0QsIDB4QkYsIDB4Q0UsIDB4RDEsCkBAIC0xNTAsNyArMTUwLDcgQEAKICAweDBGLCAweDcxLCAweDJELCAweEQyLCAweDA4LCAweDEwLCAweDFCLCAweEFELCAweDQ0LCAweDQxLCAweEUwLCAweEZFLCAweDc5LCAweEEwLAogIDB4NjMsIDB4OTMsIDB4OEEsIDB4QjEsIDB4NUQsIDB4RTksIDB4QjAsIDB4RUUsIDB4NkYsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDF9OwogCi11aW50OF90IGVjX2tleWRhdGFbXSA9IHsKK3N0YXRpYyB1aW50OF90IGVjX2tleWRhdGFbXSA9IHsKICAweDMwLCAweDQ5LCAweDMwLCAweDEzLCAweDA2LCAweDA3LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAyLCAweDAxLCAweDA2LAogIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDMsIDB4MzIsIDB4MDAsIDB4MDQsIDB4QkMsCiAgMHg3OSwgMHg3RCwgMHhCMywgMHhBRSwgMHg3RiwgMHgwOCwgMHhFQywgMHgzRCwgMHg0OSwgMHg2QiwgMHg0RiwgMHhCNCwgMHgxMSwgMHhCMywKQEAgLTE1OCw3ICsxNTgsNyBAQAogIDB4RUMsIDB4OEIsIDB4MUEsIDB4N0IsIDB4RjIsIDB4NEIsIDB4RTksIDB4MjksIDB4NTEsIDB4Q0MsIDB4NUIsIDB4QTEsIDB4QkUsIDB4QkIsCiAgMHgyNCwgMHg3NCwgMHg5MCwgMHg5QSwgMHhFMH07CiAKLXVpbnQ4X3QgZWNfa2V5cGFpcltdID0geworc3RhdGljIHVpbnQ4X3QgZWNfa2V5cGFpcltdID0gewogIDB4MzAsIDB4NUYsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MTgsIDB4MzMsIDB4OEUsIDB4ODYsIDB4QTgsIDB4ODEsIDB4RTIsIDB4MzgsCiAgMHhGNSwgMHg0OSwgMHhCRCwgMHg2RiwgMHgwNSwgMHg1MywgMHg0OSwgMHg0QiwgMHg3MywgMHhFMywgMHhENiwgMHgxMSwgMHgzMCwgMHhGRCwKICAweEM2LCAweEM5LCAweDZELCAweEEwLCAweDBBLCAweDA2LCAweDA4LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAzLCAweDAxLApAQCAtMTY3LDE4ICsxNjcsMTggQEAKICAweEI3LCAweDc2LCAweEM2LCAweDc0LCAweEY3LCAweEM2LCAweEYzLCAweDU0LCAweEI3LCAweEQyLCAweDI0LCAweDA2LCAweDJDLCAweDFGLAogIDB4NjgsIDB4NTQsIDB4QjUsIDB4QTcsIDB4QUYsIDB4MEYsIDB4RTUsIDB4NzgsIDB4RUEsIDB4RjIsIDB4NTgsIDB4RjAsIDB4Mjd9OwogCi10ZXN0X2RhdGEgY2hlY2sxW10gPSB7CitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0gewogeyJUZXN0IHBzYV9zZXRfa2V5X3BvbGljeSAxNiBCeXRlIEFFU1xuIiwgMSwgUFNBX0tFWV9UWVBFX0FFUywKIHsweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAogIDB4NUYsIDB4Qzl9LAotIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKKyBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsCiAgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKIHsiVGVzdCBwc2Ffc2V0X2tleV9wb2xpY3kgMjQgQnl0ZSBBRVNcbiIsIDIsIFBTQV9LRVlfVFlQRV9BRVMsCiB7MHgyNCwgMHgxMywgMHg2MSwgMHg0NywgMHg2MSwgMHhCOCwgMHhDOCwgMHhGMCwgMHhERiwgMHhBQiwgMHg1QSwgMHgwRSwgMHg4NywKICAweDQwLCAweEFDLCAweEEzLCAweDkwLCAweDc3LCAweDgzLCAweDUyLCAweDMxLCAweDc0LCAweEY5fSwKLSBBRVNfMjRCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DVFIsCiAgQllURVNfVE9fQklUUyhBRVNfMjRCX0tFWV9TSVpFKSwgQUVTXzI0Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKQEAgLTE4Niw3ICsxODYsNyBAQAogezB4RUEsIDB4RDUsIDB4RTYsIDB4QzgsIDB4NTEsIDB4RjksIDB4RUMsIDB4QkIsIDB4OUIsIDB4NTcsIDB4N0MsIDB4RUQsIDB4RDIsCiAgMHg0QiwgMHg4MiwgMHg4NCwgMHg5RiwgMHg5RiwgMHhFNiwgMHg3MywgMHgyMSwgMHgzRCwgMHgxQSwgMHgwNSwgMHhDOSwgMHhFRCwKICAweERGLCAweDI1LCAweDE3LCAweDY4LCAweDg2LCAweEFFfSwKLSBBRVNfMzJCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIEFFU18zMkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19DVFIsCiAgQllURVNfVE9fQklUUyhBRVNfMzJCX0tFWV9TSVpFKSwgQUVTXzMyQl9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKQEAgLTIwNCwxNCArMjA0LDE0IEBACiAKIHsiVGVzdCBwc2Ffc2V0X2tleV9wb2xpY3kgd2l0aCBERVMgNjQgYml0IGtleVxuIiwgNiwgUFNBX0tFWV9UWVBFX0RFUywKICB7MHg3MCwgMHgyNCwgMHg1NSwgMHgwQywgMHgxNCwgMHg5RCwgMHhFRCwgMHgyOX0sCi0gREVTXzhCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgREVTXzhCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsCiAgQllURVNfVE9fQklUUyhERVNfOEJfS0VZX1NJWkUpLCBERVNfOEJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogCiB7IlRlc3QgcHNhX3NldF9rZXlfcG9saWN5IHdpdGggVHJpcGxlIERFUyAyLUtleVxuIiwgNywgUFNBX0tFWV9UWVBFX0RFUywKIHsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9LAotIERFUzNfMktFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgREVTM18yS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKICBCWVRFU19UT19CSVRTKERFUzNfMktFWV9TSVpFKSwgREVTM18yS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogCkBAIC0yMTksNyArMjE5LDcgQEAKIHsweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGLAogIDB4RjEsIDB4RTAsIDB4RDMsIDB4QzIsIDB4QjUsIDB4QTQsIDB4OTcsIDB4ODYsCiAgMHhGRSwgMHhEQywgMHhCQSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMH0sCi0gREVTM18zS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKKyBERVMzXzNLRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAogIEJZVEVTX1RPX0JJVFMoREVTM18zS0VZX1NJWkUpLCBERVMzXzNLRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKQEAgLTIzNiwzNSArMjM2LDIyIEBACiAgOTcsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTiwKICAxOTIsIDk3LCBQU0FfU1VDQ0VTUwogfSwKLX07Ci0KLQotdGVzdF9kYXRhIGNoZWNrMltdID0gewoteyJUZXN0IHBzYV9zZXRfa2V5X3BvbGljeSB3aXRoIGFscmVhZHkgb2NjdXBpZWQga2V5IHNsb3RcbiIsIDEsIFBTQV9LRVlfVFlQRV9BRVMsCi17MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKLSAweDVGLCAweEM5fSwKLUFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKLUJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9FUlJPUl9PQ0NVUElFRF9TTE9UCi19LAotCi17IlRlc3QgcHNhX3NldF9rZXlfcG9saWN5IHdpdGggaW52YWxpZCBrZXkgc2xvdFxuIiwgSU5WQUxJRF9LRVlfU0xPVCwgUFNBX0tFWV9UWVBFX0FFUywKLXsweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAotIDB4NUYsIDB4Qzl9LAotQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAotQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKLX0sCi0KLXsiVGVzdCBwc2Ffc2V0X2tleV9wb2xpY3kgd2l0aCB6ZXJvIGtleSBzbG90XG4iLCBaRVJPX0tFWV9TTE9ULCBQU0FfS0VZX1RZUEVfQUVTLAotezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCi0gMHg1RiwgMHhDOX0sCi1BRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCi1CWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAotfSwKIAogeyJUZXN0IHBzYV9zZXRfa2V5X3BvbGljeSB3aXRoIGludmFsaWQgdXNhZ2VcbiIsIDEzLCBQU0FfS0VZX1RZUEVfQUVTLAogezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCiAgMHg1RiwgMHhDOX0sCi1BRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0lOVkFMSUQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9JTlZBTElELCBQU0FfQUxHX0NUUiwKIEJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCiB9LAogfTsKKworCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMltdID0geworeyJUZXN0IHBzYV9zZXRfa2V5X3BvbGljeSBuZWdhdGl2ZSBjYXNlXG4iLCAxMSwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4Qzl9LAorQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAorQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0VSUk9SX09DQ1VQSUVEX1NMT1QKK30sCisKK307CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwOC90ZXN0X2MwMDguYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA4L3Rlc3RfYzAwOC5jCmluZGV4IDI0N2E4MjYuLmY1MWQ3NzEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA4L3Rlc3RfYzAwOC5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA4L3Rlc3RfYzAwOC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSwxNCArMTUsOCBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCi0jZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgotI2VuZGlmCi0KICNpbmNsdWRlICJ0ZXN0X2MwMDguaCIKICNpbmNsdWRlICJ0ZXN0X2RhdGEuaCIKICNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCkBAIC0zNCwzNiArMjgsMzYgQEAKICAgICBOVUxMLAogfTsKIAotaW50IGdfdGVzdF9jb3VudDsKK3N0YXRpYyBpbnQgZ190ZXN0X2NvdW50ID0gMTsKIAogaW50MzJfdCBwc2FfZ2V0X2tleV9wb2xpY3lfdGVzdChzZWN1cml0eV90IGNhbGxlcikKIHsKLSAgICBpbnQzMl90ICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICB1aW50OF90ICAgICAgICAgICprZXlfZGF0YTsKICAgICBwc2Ffa2V5X3BvbGljeV90IHBvbGljeSwgZXhwZWN0ZWRfcG9saWN5OwogICAgIHBzYV9rZXlfdXNhZ2VfdCAgZXhwZWN0ZWRfdXNhZ2U7CiAgICAgcHNhX2FsZ29yaXRobV90ICBleHBlY3RlZF9hbGc7CiAgICAgaW50ICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7Ci0gICAgdWludDMyX3QgICAgICAgICBpOwotCi0gICAgZ190ZXN0X2NvdW50ID0gMTsKKyAgICBpbnQzMl90ICAgICAgICAgIGksIHN0YXR1czsKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCi0gICAgaWYgKHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCkgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTklUX0ZBSUxFRDsKLSAgICB9Ci0KLSAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKLSAgICAgKiB1c2FnZSBvZiB0aGUga2V5Ci0gICAgICovCi0gICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CiAKICAgICAvKiBTZXQgdGhlIGtleSBkYXRhIGJ1ZmZlciB0byB0aGUgaW5wdXQgYmFzZSBvbiBhbGdvcml0aG0gKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQogICAgIHsKICAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CiAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKwogICAgICAgICBpZiAoUFNBX0tFWV9UWVBFX0lTX1JTQShjaGVjazFbaV0ua2V5X3R5cGUpKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmtleV90eXBlID09IFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUikKQEAgLTk5LDM4ICs5MywzMCBAQAogICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazFbaV0udXNhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOwogCisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2sxW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9sZW5ndGgsICZjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCiAgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9zbG90LCAmcG9saWN5KTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIHNldCBrZXkgcG9saWN5IGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CiAKICAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLwotICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfc2xvdCwgY2hlY2sxW2ldLmtleV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBpbXBvcnQga2V5IGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfdHlwZSwga2V5X2RhdGEsIGNoZWNrMVtpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CiAKICAgICAgICAgLyogR2V0IHRoZSB1c2FnZSBwb2xpY3kgZm9yIGEga2V5IHNsb3QgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9zbG90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhwZWN0ZWRfcG9saWN5KTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGdldCBrZXkgcG9saWN5IGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhwZWN0ZWRfcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKIAotICAgICAgICBpZiAoKGV4cGVjdGVkX3BvbGljeS51c2FnZSAhPSBjaGVjazFbaV0udXNhZ2UpIHx8Ci0gICAgICAgICAgICAoZXhwZWN0ZWRfcG9saWN5LmFsZyAhPSAgY2hlY2sxW2ldLmtleV9hbGcpKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQb2xpY3kgZGF0YSBNaXNtYXRjaFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19EQVRBX01JU01BVENIOwotICAgICAgICB9CisgICAgICAgIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZXhwZWN0ZWRfcG9saWN5LnVzYWdlLCBjaGVjazFbaV0udXNhZ2UsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChleHBlY3RlZF9wb2xpY3kuYWxnLCBjaGVjazFbaV0ua2V5X2FsZywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CiAKICAgICAgICAgLyogUmV0cmlldmUgdGhlIHVzYWdlIGZpZWxkIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLwogICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfR0VUX1VTQUdFLCAmcG9saWN5LCAmZXhwZWN0ZWRfdXNhZ2UpOwpAQCAtMTM4LDEzICsxMjQsOCBAQAogICAgICAgICAvKiBSZXRyaWV2ZSB0aGUgYWxnb3JpdGhtIGZpZWxkIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLwogICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfR0VUX0FMR09SSVRITSwgJnBvbGljeSwgJmV4cGVjdGVkX2FsZyk7CiAKLSAgICAgICAgaWYgKChleHBlY3RlZF91c2FnZSAhPSBjaGVjazFbaV0udXNhZ2UpIHx8Ci0gICAgICAgICAgICAoZXhwZWN0ZWRfYWxnICE9ICBjaGVjazFbaV0ua2V5X2FsZykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBvbGljeSBkYXRhIE1pc21hdGNoXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0RBVEFfTUlTTUFUQ0g7Ci0gICAgICAgIH0KLQorICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChleHBlY3RlZF91c2FnZSwgY2hlY2sxW2ldLnVzYWdlLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZXhwZWN0ZWRfYWxnLCBjaGVjazFbaV0ua2V5X2FsZywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CkBAIC0xNTIsMTYgKzEzMywxMyBAQAogCiBpbnQzMl90IHBzYV9nZXRfa2V5X3BvbGljeV9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgIGludDMyX3QgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIGludCAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazIpL3NpemVvZihjaGVjazJbMF0pOwotICAgIHVpbnQzMl90ICAgICAgICAgaTsKKyAgICBpbnQzMl90ICAgICAgICAgIGksIHN0YXR1czsKICAgICBwc2Ffa2V5X3BvbGljeV90IHBvbGljeTsKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCi0gICAgaWYgKHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCkgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTklUX0ZBSUxFRDsKLSAgICB9CisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKIAogICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAogICAgICogdXNhZ2Ugb2YgdGhlIGtleQpAQCAtMTczLDEzICsxNTEsMzIgQEAKICAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CiAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2syW2ldLnRlc3RfZGVzYywgMCk7CiAKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9nZXRfa2V5X3BvbGljeSB3aXRoIHVuYWxsb2NhdGVkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOwogICAgICAgICAvKiBHZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCi0gICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0tFWV9QT0xJQ1ksIGNoZWNrMltpXS5rZXlfc2xvdCwgJnBvbGljeSk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gY2hlY2syW2ldLmV4cGVjdGVkX3N0YXR1cykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGdldCBrZXkgcG9saWN5IHNob3VsZCBoYXZlIGZhaWxlZCBidXQgc3VjY2VlZGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwotICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0tFWV9QT0xJQ1ksIGNoZWNrMltpXS5rZXlfaGFuZGxlLCAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfZ2V0X2tleV9wb2xpY3kgd2l0aCB6ZXJvIGFzIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBHZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0tFWV9QT0xJQ1ksIDAsICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9nZXRfa2V5X3BvbGljeSB3aXRoIGVtcHR5IGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMltpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfbGVuZ3RoLCAmY2hlY2syW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICAvKiBHZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0tFWV9QT0xJQ1ksIGNoZWNrMltpXS5rZXlfaGFuZGxlLCAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRU1QVFlfU0xPVCwgIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOwogICAgICB9CiAKICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA4L3Rlc3RfYzAwOC5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDgvdGVzdF9jMDA4LmgKaW5kZXggYjYwY2RmZC4uYTY3NjI4ZCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDgvdGVzdF9jMDA4LmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDgvdGVzdF9jMDA4LmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE4LDcgKzE4LDYgQEAKICNkZWZpbmUgX1RFU1RfQzAwOF9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKLQogI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxjMDA4KQogI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQogI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDgvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwOC90ZXN0X2RhdGEuaAppbmRleCBlZWVjMDI5Li5kMmE2NDA2IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwOC90ZXN0X2RhdGEuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwOC90ZXN0X2RhdGEuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTksNyArMTksNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKLSAgICBwc2Ffa2V5X3Nsb3RfdCAgICAgICAgICBrZXlfc2xvdDsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOwogICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOwogICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzM0XTsKICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOwpAQCAtMzAsMTAgKzMwLDEwIEBACiAgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzOwogfSB0ZXN0X2RhdGE7CiAKLXVpbnQ4X3QgcnNhXzM4NF9rZXlwYWlyWzFdOwotdWludDhfdCByc2FfMzg0X2tleWRhdGFbMV07CitzdGF0aWMgdWludDhfdCByc2FfMzg0X2tleXBhaXJbMV07CitzdGF0aWMgdWludDhfdCByc2FfMzg0X2tleWRhdGFbMV07CiAKLXVpbnQ4X3QgcnNhXzI1Nl9rZXlwYWlyW10gPSB7CitzdGF0aWMgdWludDhfdCByc2FfMjU2X2tleXBhaXJbXSA9IHsKICAweDMwLCAweDgyLCAweDA0LCAweEE1LCAweDAyLCAweDAxLCAweDAwLCAweDAyLCAweDgyLCAweDAxLCAweDAxLCAweDAwLCAweEMwLAogIDB4OTUsIDB4MDgsIDB4RTEsIDB4NTcsIDB4NDEsIDB4RjIsIDB4NzEsIDB4NkQsIDB4QjcsIDB4RDIsIDB4NDUsIDB4NDEsIDB4MjcsCiAgMHgwMSwgMHg2NSwgMHhDNiwgMHg0NSwgMHhBRSwgMHhGMiwgMHhCQywgMHgyNCwgMHgzMCwgMHhCOCwgMHg5NSwgMHhDRSwgMHgyRiwKQEAgLTEyNyw3ICsxMjcsNyBAQAogIDB4NUYsIDB4QTgsIDB4QkYsIDB4MTksIDB4MzIsIDB4QTEsIDB4RjUsIDB4REMsIDB4MDMsIDB4RTYsIDB4N0MsIDB4OUEsIDB4MUYsCiAgMHgwQywgMHg3QywgMHhBOSwgMHhCMCwgMHgwRSwgMHgyMSwgMHgzNywgMHgzQiwgMHhGMSwgMHhCMH07CiAKLXVpbnQ4X3QgcnNhXzI1Nl9rZXlkYXRhW10gPSB7CitzdGF0aWMgdWludDhfdCByc2FfMjU2X2tleWRhdGFbXSA9IHsKICAweDMwLCAweDgyLCAweDAxLCAweDIyLCAweDMwLCAweDBELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELAogIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDUsIDB4MDAsIDB4MDMsIDB4ODIsIDB4MDEsIDB4MEYsIDB4MDAsIDB4MzAsIDB4ODIsIDB4MDEsIDB4MEEsCiAgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhEQiwgMHgxQywgMHg3RiwgMHgyRSwgMHgwQiwgMHhDRCwgMHhCRiwgMHhDRSwgMHhEMSwKQEAgLTE1MCw3ICsxNTAsNyBAQAogIDB4MEYsIDB4NzEsIDB4MkQsIDB4RDIsIDB4MDgsIDB4MTAsIDB4MUIsIDB4QUQsIDB4NDQsIDB4NDEsIDB4RTAsIDB4RkUsIDB4NzksIDB4QTAsCiAgMHg2MywgMHg5MywgMHg4QSwgMHhCMSwgMHg1RCwgMHhFOSwgMHhCMCwgMHhFRSwgMHg2RiwgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMX07CiAKLXVpbnQ4X3QgZWNfa2V5ZGF0YVtdID0geworc3RhdGljIHVpbnQ4X3QgZWNfa2V5ZGF0YVtdID0gewogIDB4MzAsIDB4NDksIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDcsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDIsIDB4MDEsIDB4MDYsCiAgMHgwOCwgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwMywgMHgwMSwgMHgwMSwgMHgwMywgMHgzMiwgMHgwMCwgMHgwNCwgMHhCQywKICAweDc5LCAweDdELCAweEIzLCAweEFFLCAweDdGLCAweDA4LCAweEVDLCAweDNELCAweDQ5LCAweDZCLCAweDRGLCAweEI0LCAweDExLCAweEIzLApAQCAtMTU4LDcgKzE1OCw3IEBACiAgMHhFQywgMHg4QiwgMHgxQSwgMHg3QiwgMHhGMiwgMHg0QiwgMHhFOSwgMHgyOSwgMHg1MSwgMHhDQywgMHg1QiwgMHhBMSwgMHhCRSwgMHhCQiwKICAweDI0LCAweDc0LCAweDkwLCAweDlBLCAweEUwfTsKIAotdWludDhfdCBlY19rZXlwYWlyW10gPSB7CitzdGF0aWMgdWludDhfdCBlY19rZXlwYWlyW10gPSB7CiAgMHgzMCwgMHg1RiwgMHgwMiwgMHgwMSwgMHgwMSwgMHgwNCwgMHgxOCwgMHgzMywgMHg4RSwgMHg4NiwgMHhBOCwgMHg4MSwgMHhFMiwgMHgzOCwKICAweEY1LCAweDQ5LCAweEJELCAweDZGLCAweDA1LCAweDUzLCAweDQ5LCAweDRCLCAweDczLCAweEUzLCAweEQ2LCAweDExLCAweDMwLCAweEZELAogIDB4QzYsIDB4QzksIDB4NkQsIDB4QTAsIDB4MEEsIDB4MDYsIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDMsIDB4MDEsCkBAIC0xNjcsMTggKzE2NywxOCBAQAogIDB4QjcsIDB4NzYsIDB4QzYsIDB4NzQsIDB4RjcsIDB4QzYsIDB4RjMsIDB4NTQsIDB4QjcsIDB4RDIsIDB4MjQsIDB4MDYsIDB4MkMsIDB4MUYsCiAgMHg2OCwgMHg1NCwgMHhCNSwgMHhBNywgMHhBRiwgMHgwRiwgMHhFNSwgMHg3OCwgMHhFQSwgMHhGMiwgMHg1OCwgMHhGMCwgMHgyN307CiAKLXRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2sxW10gPSB7CiB7IlRlc3QgcHNhX2dldF9rZXlfcG9saWN5IDE2IEJ5dGUgQUVTXG4iLCAxLCBQU0FfS0VZX1RZUEVfQUVTLAogezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCiAgMHg1RiwgMHhDOX0sCi0gQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKICBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIAogeyJUZXN0IHBzYV9nZXRfa2V5X3BvbGljeSAyNCBCeXRlIEFFU1xuIiwgMiwgUFNBX0tFWV9UWVBFX0FFUywKIHsweDI0LCAweDEzLCAweDYxLCAweDQ3LCAweDYxLCAweEI4LCAweEM4LCAweEYwLCAweERGLCAweEFCLCAweDVBLCAweDBFLCAweDg3LAogIDB4NDAsIDB4QUMsIDB4QTMsIDB4OTAsIDB4NzcsIDB4ODMsIDB4NTIsIDB4MzEsIDB4NzQsIDB4Rjl9LAotIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgQUVTXzI0Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NUUiwKICBCWVRFU19UT19CSVRTKEFFU18yNEJfS0VZX1NJWkUpLCBBRVNfMjRCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIApAQCAtMTg2LDcgKzE4Niw3IEBACiB7MHhFQSwgMHhENSwgMHhFNiwgMHhDOCwgMHg1MSwgMHhGOSwgMHhFQywgMHhCQiwgMHg5QiwgMHg1NywgMHg3QywgMHhFRCwgMHhEMiwKICAweDRCLCAweDgyLCAweDg0LCAweDlGLCAweDlGLCAweEU2LCAweDczLCAweDIxLCAweDNELCAweDFBLCAweDA1LCAweEM5LCAweEVELAogIDB4REYsIDB4MjUsIDB4MTcsIDB4NjgsIDB4ODYsIDB4QUV9LAotIEFFU18zMkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgQUVTXzMyQl9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NUUiwKICBCWVRFU19UT19CSVRTKEFFU18zMkJfS0VZX1NJWkUpLCBBRVNfMzJCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIApAQCAtMjA0LDE0ICsyMDQsMTQgQEAKIAogeyJUZXN0IHBzYV9nZXRfa2V5X3BvbGljeSB3aXRoIERFUyA2NCBiaXQga2V5XG4iLCA2LCBQU0FfS0VZX1RZUEVfREVTLAogIHsweDcwLCAweDI0LCAweDU1LCAweDBDLCAweDE0LCAweDlELCAweEVELCAweDI5fSwKLSBERVNfOEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKKyBERVNfOEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKICBCWVRFU19UT19CSVRTKERFU184Ql9LRVlfU0laRSksIERFU184Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKIHsiVGVzdCBwc2FfZ2V0X2tleV9wb2xpY3kgd2l0aCBUcmlwbGUgREVTIDItS2V5XG4iLCA3LCBQU0FfS0VZX1RZUEVfREVTLAogezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRn0sCi0gREVTM18yS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKKyBERVMzXzJLRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAogIEJZVEVTX1RPX0JJVFMoREVTM18yS0VZX1NJWkUpLCBERVMzXzJLRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKQEAgLTIxOSw3ICsyMTksNyBAQAogezB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4Q0QsIDB4RUYsCiAgMHhGMSwgMHhFMCwgMHhEMywgMHhDMiwgMHhCNSwgMHhBNCwgMHg5NywgMHg4NiwKICAweEZFLCAweERDLCAweEJBLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwfSwKLSBERVMzXzNLRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIERFUzNfM0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsCiAgQllURVNfVE9fQklUUyhERVMzXzNLRVlfU0laRSksIERFUzNfM0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIApAQCAtMjM4LDE5ICsyMzgsMTEgQEAKIH0sCiB9OwogCi0KLXRlc3RfZGF0YSBjaGVjazJbXSA9IHsKLXsiVGVzdCBwc2FfZ2V0X2tleV9wb2xpY3kgd2l0aCBpbnZhbGlkIGtleSBzbG90XG4iLCBJTlZBTElEX0tFWV9TTE9ULCBQU0FfS0VZX1RZUEVfQUVTLAorc3RhdGljIHRlc3RfZGF0YSBjaGVjazJbXSA9IHsKK3siVGVzdCBwc2FfZ2V0X2tleV9wb2xpY3kgbmVnYXRpdmUgY2FzZXNcbiIsIDExLCBQU0FfS0VZX1RZUEVfQUVTLAogezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCiAgMHg1RiwgMHhDOX0sCi1BRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCi1CWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAotfSwKLQoteyJUZXN0IHBzYV9nZXRfa2V5X3BvbGljeSB3aXRoIHplcm8ga2V5IHNsb3RcbiIsIFpFUk9fS0VZX1NMT1QsIFBTQV9LRVlfVFlQRV9BRVMsCi17MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKLSAweDVGLCAweEM5fSwKLUFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKLUJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAorIEJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogfTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA5L3Rlc3RfYzAwOS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDkvdGVzdF9jMDA5LmMKaW5kZXggMTgyOTdhZC4uZmQ3ODI5NSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDkvdGVzdF9jMDA5LmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDkvdGVzdF9jMDA5LmMKQEAgLTE1LDI2MiArMTUsNzUgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgotI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKLSNlbmRpZgotCiAjaW5jbHVkZSAidGVzdF9jMDA5LmgiCiAjaW5jbHVkZSAidGVzdF9kYXRhLmgiCiAjaW5jbHVkZSAidmFsX2NyeXB0by5oIgogCisjZGVmaW5lICBNQVhfS0VZUyAgIDEwMAorCiBjbGllbnRfdGVzdF90IHRlc3RfYzAwOV9jcnlwdG9fbGlzdFtdID0gewogICAgIE5VTEwsCi0gICAgcHNhX3NldF9rZXlfbGlmZXRpbWVfdGVzdCwKLSAgICBwc2Ffc2V0X2tleV9saWZldGltZV9uZWdhdGl2ZV90ZXN0LAorICAgIHBzYV9hbGxvY2F0ZV9rZXlfdGVzdCwKKyAgICBwc2FfYWxsb2NhdGVfa2V5X25lZ2F0aXZlX3Rlc3QsCiAgICAgTlVMTCwKIH07CiAKLWludCBnX3Rlc3RfY291bnQ7CitzdGF0aWMgaW50IGdfdGVzdF9jb3VudCA9IDE7CiAKLWludDMyX3QgcHNhX3NldF9rZXlfbGlmZXRpbWVfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK2ludDMyX3QgcHNhX2FsbG9jYXRlX2tleV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgIGludDMyX3QgICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwotICAgIHVpbnQ4X3QgICAgICAgICAgICAgKmtleV9kYXRhLCBkYXRhW0JVRkZFUl9TSVpFXTsKLSAgICBwc2Ffa2V5X3BvbGljeV90ICAgIHBvbGljeTsKLSAgICBpbnQgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKLSAgICB1aW50MzJfdCAgICAgICAgICAgIGksIGosIGxlbmd0aDsKLSAgICBib290X3N0YXRlX3QgICAgICAgIGJvb3Rfc3RhdGU7Ci0KLSAgICBnX3Rlc3RfY291bnQgPSAxOworICAgIGludCAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazEpL3NpemVvZihjaGVjazFbMF0pOworICAgIGludDMyX3QgICAgICAgICAgaSwgc3RhdHVzOwogCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KLSAgICBpZiAodmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKSAhPSBQU0FfU1VDQ0VTUykKKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgLyogU2V0IHRoZSBrZXkgZGF0YSBidWZmZXIgdG8gdGhlIGlucHV0IGJhc2Ugb24gYWxnb3JpdGhtICovCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKICAgICB7Ci0gICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOSVRfRkFJTEVEOwotICAgIH0KKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CiAKLSAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKLSAgICAgKiB1c2FnZSBvZiB0aGUga2V5Ci0gICAgICovCi0gICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKIAotICAgIHN0YXR1cyA9IHZhbC0+Z2V0X2Jvb3RfZmxhZygmYm9vdF9zdGF0ZSk7Ci0gICAgaWYgKHN0YXR1cyAhPSBWQUxfU1RBVFVTX1NVQ0NFU1MpCi0gICAgewotICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRHZXQgYm9vdCBmbGFnIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQorICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMVtpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfbGVuZ3RoLCAmY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOwogCi0gICAgaWYgKGJvb3Rfc3RhdGUgPT0gQk9PVF9OT1RfRVhQRUNURUQpCi0gICAgewotICAgICAgICAvKiBTZXQgdGhlIGtleSBkYXRhIGJ1ZmZlciB0byB0aGUgaW5wdXQgYmFzZSBvbiBhbGdvcml0aG0gKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOwotICAgICAgICAgICAgaWYgKFBTQV9LRVlfVFlQRV9JU19SU0EoY2hlY2sxW2ldLmtleV90eXBlKSkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoZWNrMVtpXS5rZXlfdHlwZSA9PSBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygzODQpKQotICAgICAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMzg0X2tleXBhaXI7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMjU2KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzI1Nl9rZXlwYWlyOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygzODQpKQotICAgICAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMzg0X2tleWRhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMjU2KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzI1Nl9rZXlkYXRhOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFBTQV9LRVlfVFlQRV9JU19FQ0MoY2hlY2sxW2ldLmtleV90eXBlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoUFNBX0tFWV9UWVBFX0lTX0VDQ19LRVlQQUlSKGNoZWNrMVtpXS5rZXlfdHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gZWNfa2V5cGFpcjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gZWNfa2V5ZGF0YTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IGNoZWNrMVtpXS5rZXlfZGF0YTsKLQotICAgICAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCi0gICAgICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazFbaV0udXNhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOwotCi0gICAgICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCi0gICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazFbaV0ua2V5X3Nsb3QsICZwb2xpY3kpOwotICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0Egc2V0IGtleSBwb2xpY3kgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBDaGFuZ2UgdGhlIGxpZmV0aW1lIG9mIGEga2V5IHNsb3QgKi8KLSAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9MSUZFVElNRSwgY2hlY2sxW2ldLmtleV9zbG90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5saWZldGltZSk7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzICE9IGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIHNldCBrZXkgbGlmZXRpbWUgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICovCi0gICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfdHlwZSwga2V5X2RhdGEsIGNoZWNrMVtpXS5rZXlfbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGltcG9ydCBrZXkgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLQotICAgICAgICBzdGF0dXMgPSB2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9DUllQVE8pOwotICAgICAgICBpZiAoc3RhdHVzICE9IFZBTF9TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0U2V0IGJvb3QgZmxhZyBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQotCi0gICAgICAgIC8qV2FpdGluZyBoZXJlIGZvciB3YXRjaGRvZyBleHBpcnkgKi8KLSAgICAgICAgd2hpbGUgKDEpOwotICAgIH0KLSAgICBlbHNlIGlmIChib290X3N0YXRlID09IEJPT1RfRVhQRUNURURfQ1JZUFRPKQotICAgIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOwotICAgICAgICAgICAgaWYgKGNoZWNrMVtpXS5saWZldGltZSA9PSBQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvKiBTZXQgdGhlIGtleSBkYXRhIGJ1ZmZlciB0byB0aGUgaW5wdXQgYmFzZSBvbiBhbGdvcml0aG0gKi8KLSAgICAgICAgICAgIGlmIChQU0FfS0VZX1RZUEVfSVNfUlNBKGNoZWNrMVtpXS5rZXlfdHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoZWNrMVtpXS5rZXlfdHlwZSA9PSBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygzODQpKQotICAgICAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMzg0X2tleXBhaXI7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMjU2KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzI1Nl9rZXlwYWlyOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygzODQpKQotICAgICAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMzg0X2tleWRhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMjU2KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzI1Nl9rZXlkYXRhOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFBTQV9LRVlfVFlQRV9JU19FQ0MoY2hlY2sxW2ldLmtleV90eXBlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoUFNBX0tFWV9UWVBFX0lTX0VDQ19LRVlQQUlSKGNoZWNrMVtpXS5rZXlfdHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gZWNfa2V5cGFpcjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gZWNfa2V5ZGF0YTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IGNoZWNrMVtpXS5rZXlfZGF0YTsKLQotICAgICAgICAgICAgLyogRXhwb3J0IGEga2V5IGluIGJpbmFyeSBmb3JtYXQgKi8KLSAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRVhQT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9zbG90LCBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVUZGRVJfU0laRSwgJmxlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBleHBvcnQga2V5IGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxlbmd0aCAhPSBjaGVjazFbaV0uZXhwZWN0ZWRfa2V5X2xlbmd0aCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRLZXkgbGVuZ3RoIG1pc21hdGNoXG4iLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX1NJWkU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIENoZWNrIGlmIG9yaWdpbmFsIGtleSBkYXRhIG1hdGNoZXMgd2l0aCB0aGUgZXhwb3J0ZWQgZGF0YSAqLwotICAgICAgICAgICAgaWYgKHZhbC0+Y3J5cHRvX2tleV90eXBlX2lzX3JhdyhjaGVjazFbaV0ua2V5X3R5cGUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGVjazFbaV0ua2V5X2RhdGFbal0gIT0gZGF0YVtqXSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0S2V5IGRhdGEgbWlzbWF0Y2hcbiIsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfREFUQV9NSVNNQVRDSDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFBTQV9LRVlfVFlQRV9JU19SU0EoY2hlY2sxW2ldLmtleV90eXBlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoa2V5X2RhdGFbal0gIT0gZGF0YVtqXSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0S2V5IGRhdGEgbWlzbWF0Y2hcbiIsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfREFUQV9NSVNNQVRDSDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEludmFsaWQgYm9vdCBzdGF0ZVxuIiwgMCk7Ci0gICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KIAotaW50MzJfdCBwc2Ffc2V0X2tleV9saWZldGltZV9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoraW50MzJfdCBwc2FfYWxsb2NhdGVfa2V5X25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCiB7Ci0gICAgaW50MzJfdCAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7Ci0gICAgaW50ICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMikvc2l6ZW9mKGNoZWNrMlswXSk7Ci0gICAgdWludDMyX3QgICAgICAgICBpOwotICAgIHBzYV9rZXlfcG9saWN5X3QgcG9saWN5OworICAgIGludDMyX3QgICAgICAgICAgICAgaSwgc3RhdHVzOworICAgIHBzYV9rZXlfaGFuZGxlX3QgICAga2V5X2hhbmRsZVtNQVhfS0VZU107CisgICAgcHNhX2tleV90eXBlX3QgICAgICBrZXlfdHlwZSA9IFBTQV9LRVlfVFlQRV9BRVM7CisgICAgc2l6ZV90ICAgICAgICAgICAgICBrZXlfbGVuZ3RoID0gQlVGRkVSX1NJWkU7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwotICAgIGlmICh2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpICE9IFBTQV9TVUNDRVNTKQorICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3RpbmcgdGhlIGluc3VmZmljaWVudCBtZW1vcnlcbiIsIGdfdGVzdF9jb3VudCsrKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfS0VZUzsgaSsrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5JVF9GQUlMRUQ7CisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwga2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoLCAma2V5X2hhbmRsZVtpXSk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKLSAgICAqIHVzYWdlIG9mIHRoZSBrZXkKLSAgICAqLwotICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCi0gICAgewotICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazJbaV0udGVzdF9kZXNjLCAwKTsKLQotICAgICAgICAvKiBDaGFuZ2UgdGhlIGxpZmV0aW1lIG9mIGEga2V5IHNsb3QgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX0xJRkVUSU1FLCBjaGVjazJbaV0ua2V5X3Nsb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ubGlmZXRpbWUpOwotICAgICAgICBpZiAoc3RhdHVzICE9IGNoZWNrMltpXS5leHBlY3RlZF9zdGF0dXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBzZXQga2V5IGxpZmV0aW1lIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgICAgICB9Ci0gICAgIH0KLQotICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwOS90ZXN0X2MwMDkuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA5L3Rlc3RfYzAwOS5oCmluZGV4IDE1NjI4MmMuLmY1ZTc1OGIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA5L3Rlc3RfYzAwOS5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA5L3Rlc3RfYzAwOS5oCkBAIC0xOCw3ICsxOCw2IEBACiAjZGVmaW5lIF9URVNUX0MwMDlfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCi0KICNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzAwOSkKICNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKICNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKQEAgLTI3LDYgKzI2LDYgQEAKIGV4dGVybiBwc2FfYXBpX3QgKnBzYTsKIGV4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfYzAwOV9jcnlwdG9fbGlzdFtdOwogCi1pbnQzMl90IHBzYV9zZXRfa2V5X2xpZmV0aW1lX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOwotaW50MzJfdCBwc2Ffc2V0X2tleV9saWZldGltZV9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKK2ludDMyX3QgcHNhX2FsbG9jYXRlX2tleV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKK2ludDMyX3QgcHNhX2FsbG9jYXRlX2tleV9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKICNlbmRpZiAvKiBfVEVTVF9DMDA5X0NMSUVOVF9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDkvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwOS90ZXN0X2RhdGEuaAppbmRleCA2ZGU5OGU0Li4yMDM2OTlmIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwOS90ZXN0X2RhdGEuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwOS90ZXN0X2RhdGEuaApAQCAtMTksMjY2ICsxOSw1MCBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKLSAgICBwc2Ffa2V5X3Nsb3RfdCAgICAgICAgICBrZXlfc2xvdDsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOwogICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOwotICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzM0XTsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOwotICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOwotICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7Ci0gICAgcHNhX2tleV9saWZldGltZV90ICAgICAgbGlmZXRpbWU7Ci0gICAgdWludDMyX3QgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYml0X2xlbmd0aDsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBleHBlY3RlZF9rZXlfbGVuZ3RoOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGtleV9sZW5ndGg7CiAgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzOwogfSB0ZXN0X2RhdGE7CiAKLXVpbnQ4X3QgcnNhXzM4NF9rZXlwYWlyWzFdOwotdWludDhfdCByc2FfMzg0X2tleWRhdGFbMV07Ci0KLXVpbnQ4X3QgcnNhXzI1Nl9rZXlwYWlyW10gPSB7Ci0gMHgzMCwgMHg4MiwgMHgwNCwgMHhBNSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhDMCwKLSAweDk1LCAweDA4LCAweEUxLCAweDU3LCAweDQxLCAweEYyLCAweDcxLCAweDZELCAweEI3LCAweEQyLCAweDQ1LCAweDQxLCAweDI3LAotIDB4MDEsIDB4NjUsIDB4QzYsIDB4NDUsIDB4QUUsIDB4RjIsIDB4QkMsIDB4MjQsIDB4MzAsIDB4QjgsIDB4OTUsIDB4Q0UsIDB4MkYsCi0gMHg0RSwgMHhENiwgMHhGNiwgMHgxQywgMHg4OCwgMHhCQywgMHg3QywgMHg5RiwgMHhGQiwgMHhBOCwgMHg2NywgMHg3RiwgMHhGRSwKLSAweDVDLCAweDlDLCAweDUxLCAweDc1LCAweEY3LCAweDhBLCAweENBLCAweDA3LCAweEU3LCAweDM1LCAweDJGLCAweDhGLCAweEUxLAotIDB4QkQsIDB4N0IsIDB4QzAsIDB4MkYsIDB4N0MsIDB4QUIsIDB4NjQsIDB4QTgsIDB4MTcsIDB4RkMsIDB4Q0EsIDB4NUQsIDB4N0IsCi0gMHhCQSwgMHhFMCwgMHgyMSwgMHhFNSwgMHg3MiwgMHgyRSwgMHg2RiwgMHgyRSwgMHg4NiwgMHhEOCwgMHg5NSwgMHg3MywgMHhEQSwKLSAweEFDLCAweDFCLCAweDUzLCAweEI5LCAweDVGLCAweDNGLCAweEQ3LCAweDE5LCAweDBELCAweDI1LCAweDRGLCAweEUxLCAweDYzLAotIDB4NjMsIDB4NTEsIDB4OEIsIDB4MEIsIDB4NjQsIDB4M0YsIDB4QUQsIDB4NDMsIDB4QjgsIDB4QTUsIDB4MUMsIDB4NUMsIDB4MzQsCi0gMHhCMywgMHhBRSwgMHgwMCwgMHhBMCwgMHg2MywgMHhDNSwgMHhGNiwgMHg3RiwgMHgwQiwgMHg1OSwgMHg2OCwgMHg3OCwgMHg3MywKLSAweEE2LCAweDhDLCAweDE4LCAweEE5LCAweDAyLCAweDZELCAweEFGLCAweEMzLCAweDE5LCAweDAxLCAweDJFLCAweEI4LCAweDEwLAotIDB4RTMsIDB4QzYsIDB4Q0MsIDB4NDAsIDB4QjQsIDB4NjksIDB4QTMsIDB4NDYsIDB4MzMsIDB4NjksIDB4ODcsIDB4NkUsIDB4QzQsCi0gMHhCQiwgMHgxNywgMHhBNiwgMHhGMywgMHhFOCwgMHhERCwgMHhBRCwgMHg3MywgMHhCQywgMHg3QiwgMHgyRiwgMHgyMSwgMHhCNSwKLSAweEZELCAweDY2LCAweDUxLCAweDBDLCAweEJELCAweDU0LCAweEIzLCAweEUxLCAweDZELCAweDVGLCAweDFDLCAweEJDLCAweDIzLAotIDB4NzMsIDB4RDEsIDB4MDksIDB4MDMsIDB4ODksIDB4MTQsIDB4RDIsIDB4MTAsIDB4QjksIDB4NjQsIDB4QzMsIDB4MkEsIDB4RDAsCi0gMHhBMSwgMHg5NiwgMHg0QSwgMHhCQywgMHhFMSwgMHhENCwgMHgxQSwgMHg1QiwgMHhDNywgMHhBMCwgMHhDMCwgMHhDMSwgMHg2MywKLSAweDc4LCAweDBGLCAweDQ0LCAweDM3LCAweDMwLCAweDMyLCAweDk2LCAweDgwLCAweDMyLCAweDIzLCAweDk1LCAweEExLCAweDc3LAotIDB4QkEsIDB4MTMsIDB4RDIsIDB4OTcsIDB4NzMsIDB4RTIsIDB4NUQsIDB4MjUsIDB4QzksIDB4NkEsIDB4MEQsIDB4QzMsIDB4MzksCi0gMHg2MCwgMHhBNCwgMHhCNCwgMHhCMCwgMHg2OSwgMHg0MiwgMHg0MiwgMHgwOSwgMHhFOSwgMHhEOCwgMHgwOCwgMHhCQywgMHgzMywKLSAweDIwLCAweEIzLCAweDU4LCAweDIyLCAweEE3LCAweEFBLCAweEVCLCAweEM0LCAweEUxLCAweEU2LCAweDYxLCAweDgzLCAweEM1LAotIDB4RDIsIDB4OTYsIDB4REYsIDB4RDksIDB4RDAsIDB4NEYsIDB4QUQsIDB4RDcsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDEsCi0gMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHg5QSwgMHhEMCwgMHgzNCwgMHgwRiwgMHg1MiwgMHg2MiwgMHgwNSwgMHg1MCwKLSAweDAxLCAweEVGLCAweDlGLCAweEVELCAweDY0LCAweDZFLCAweEMyLCAweEM0LCAweERBLCAweDFBLCAweEYyLCAweDg0LCAweEQ3LAotIDB4OTIsIDB4MTAsIDB4NDgsIDB4OTIsIDB4QzQsIDB4RTksIDB4NkEsIDB4RUIsIDB4OEIsIDB4NzUsIDB4NkMsIDB4QzYsIDB4NzksCi0gMHgzOCwgMHhGMiwgMHhDOSwgMHg3MiwgMHg0QSwgMHg4NiwgMHg2NCwgMHg1NCwgMHg5NSwgMHg3NywgMHhDQiwgMHhDMywgMHg5QSwKLSAweDlELCAweEI3LCAweEQ0LCAweDFELCAweEE0LCAweDAwLCAweEM4LCAweDlFLCAweDRFLCAweEU0LCAweERELCAweEM3LCAweEJBLAotIDB4NjcsIDB4MTYsIDB4QzEsIDB4NzQsIDB4QkMsIDB4QTksIDB4RDYsIDB4OTQsIDB4OEYsIDB4MkIsIDB4MzAsIDB4MUEsIDB4RkIsCi0gMHhFRCwgMHhERiwgMHgyMSwgMHgwNSwgMHgyMywgMHhEOSwgMHg0QSwgMHgzOSwgMHhCRCwgMHg5OCwgMHg2QiwgMHg2NSwgMHg5QSwKLSAweEI4LCAweERDLCAweEM0LCAweDdELCAweEVFLCAweEE2LCAweDQzLCAweDE1LCAweDJFLCAweDNELCAweEJFLCAweDFELCAweDIyLAotIDB4NjAsIDB4MkEsIDB4NzMsIDB4MzAsIDB4RDUsIDB4M0UsIDB4RDgsIDB4QTIsIDB4QUMsIDB4ODYsIDB4NDMsIDB4MkUsIDB4QzQsCi0gMHhGNSwgMHg2NCwgMHg1RSwgMHgzRiwgMHg4OSwgMHg3NSwgMHgwRiwgMHgxMSwgMHhEOCwgMHg1MSwgMHgyNSwgMHg0RSwgMHg5RiwKLSAweEQ4LCAweEFBLCAweEEzLCAweENFLCAweDYwLCAweEIzLCAweEUyLCAweDhBLCAweEQ5LCAweDdFLCAweDFCLCAweEYwLCAweDY0LAotIDB4Q0EsIDB4OUEsIDB4NUIsIDB4MDUsIDB4MEIsIDB4NUIsIDB4QUEsIDB4Q0IsIDB4RTUsIDB4RTMsIDB4M0YsIDB4NkUsIDB4MzIsCi0gMHgyMiwgMHgwNSwgMHhGMywgMHhEMCwgMHhGQSwgMHhFRiwgMHg3NCwgMHg1MiwgMHg4MSwgMHhFMiwgMHg1RiwgMHg3NCwgMHhEMywKLSAweEJELCAweEZGLCAweDMxLCAweDgzLCAweDQ1LCAweDc1LCAweEZBLCAweDYzLCAweDdBLCAweDk3LCAweDJFLCAweEQ2LCAweEI2LAotIDB4MTksIDB4QzYsIDB4OTIsIDB4MjYsIDB4RTQsIDB4MjgsIDB4MDYsIDB4NTAsIDB4NTAsIDB4MEUsIDB4NzgsIDB4MkUsIDB4QTksCi0gMHg3OCwgMHgwRCwgMHgxNCwgMHg5NywgMHhCNCwgMHgxMiwgMHhEOCwgMHgzMSwgMHg0MCwgMHhBQiwgMHhBMSwgMHgwMSwgMHg0MSwKLSAweEMyLCAweDMwLCAweEY4LCAweDA3LCAweDVGLCAweDE2LCAweEU0LCAweDYxLCAweDc3LCAweEQyLCAweDYwLCAweEYyLCAweDlGLAotIDB4OEQsIDB4RTgsIDB4RjQsIDB4QkEsIDB4RUIsIDB4NjMsIDB4REUsIDB4MkEsIDB4OTcsIDB4ODEsIDB4RUYsIDB4NEMsIDB4NkMsCi0gMHhFNiwgMHg1NSwgMHgzNCwgMHg1MSwgMHgyQiwgMHgyOCwgMHgzNCwgMHhGNCwgMHg1MywgMHgxQywgMHhDNCwgMHg1OCwgMHgwQSwKLSAweDNGLCAweEJCLCAweEFGLCAweEI1LCAweEY3LCAweDRBLCAweDg1LCAweDQzLCAweDJELCAweDNDLCAweEYxLCAweDU4LCAweDU4LAotIDB4ODEsIDB4MDIsIDB4ODEsIDB4ODEsIDB4MDAsIDB4RjIsIDB4MkMsIDB4NTQsIDB4NzYsIDB4MzksIDB4MjMsIDB4NjMsIDB4QzksCi0gMHgxMCwgMHgzMiwgMHhCNywgMHg5MywgMHhBRCwgMHhBRiwgMHhCRSwgMHgxOSwgMHg3NSwgMHg5NiwgMHg4MSwgMHg2NCwgMHhFNiwKLSAweEI1LCAweEI4LCAweDg5LCAweDQyLCAweDQxLCAweEQxLCAweDZELCAweEQwLCAweDFDLCAweDFCLCAweEY4LCAweDFCLCAweEFDLAotIDB4NjksIDB4Q0IsIDB4MzYsIDB4M0MsIDB4NjQsIDB4N0QsIDB4REMsIDB4RjQsIDB4MTksIDB4QjgsIDB4QzMsIDB4NjAsIDB4QjEsCi0gMHg1NywgMHg0OCwgMHg1RiwgMHg1MiwgMHg0RiwgMHg1OSwgMHgzQSwgMHg1NSwgMHg3RiwgMHgzMiwgMHhDMCwgMHgxOSwgMHg0MywKLSAweDUwLCAweDNGLCAweEFFLCAweENFLCAweDZGLCAweDE3LCAweEYzLCAweDBFLCAweDlGLCAweDQwLCAweENBLCAweDRFLCAweEFELAotIDB4MTUsIDB4M0IsIDB4QzksIDB4NzksIDB4RTksIDB4QzAsIDB4NTksIDB4MzgsIDB4NzMsIDB4NzAsIDB4OUMsIDB4MEEsIDB4N0MsCi0gMHhDOSwgMHgzQSwgMHg0OCwgMHgzMiwgMHhBNywgMHhEOCwgMHg0OSwgMHg3NSwgMHgwQSwgMHg4NSwgMHhDMiwgMHhDMiwgMHhGRCwKLSAweDE1LCAweDczLCAweERBLCAweDk5LCAweDA5LCAweDJBLCAweDY5LCAweDlBLCAweDlGLCAweDBBLCAweDcxLCAweEJGLCAweEIwLAotIDB4MDQsIDB4QTYsIDB4OEMsIDB4N0EsIDB4NUEsIDB4NkYsIDB4NDgsIDB4NUEsIDB4NTQsIDB4M0IsIDB4QzYsIDB4QjEsIDB4NTMsCi0gMHgxNywgMHhERiwgMHhFNywgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhDQiwgMHg5MywgMHhERSwgMHg3NywgMHgxNSwgMHg1RCwKLSAweEI3LCAweDVDLCAweDVDLCAweDdDLCAweEQ4LCAweDkwLCAweEE5LCAweDk4LCAweDJELCAweEQ2LCAweDY5LCAweDBFLCAweDYzLAotIDB4QjMsIDB4QTMsIDB4REMsIDB4QTYsIDB4Q0MsIDB4OEIsIDB4NkEsIDB4QTQsIDB4QTIsIDB4MTIsIDB4OEMsIDB4OEUsIDB4N0IsCi0gMHg0OCwgMHgyQywgMHhCMiwgMHg0QiwgMHgzNywgMHhEQywgMHgwNiwgMHgxOCwgMHg3RCwgMHhFQSwgMHhGRSwgMHg3NiwgMHhBMSwKLSAweEQ0LCAweEExLCAweEU5LCAweDNGLCAweDBELCAweENELCAweDFCLCAweDVGLCAweEFGLCAweDVGLCAweDlFLCAweDk2LCAweDVCLAotIDB4NUIsIDB4MEYsIDB4QTEsIDB4N0MsIDB4QUYsIDB4QjMsIDB4OUIsIDB4OTAsIDB4REIsIDB4NTcsIDB4NzMsIDB4M0EsIDB4RUQsCi0gMHhCMCwgMHgyMywgMHg0NCwgMHhBRSwgMHg0MSwgMHg0RiwgMHgxRiwgMHgwNywgMHg0MiwgMHgxMywgMHgyMywgMHg0QywgMHhDQiwKLSAweEZBLCAweEY0LCAweDE0LCAweEE0LCAweEQ1LCAweEY3LCAweDlFLCAweDM2LCAweDdDLCAweDVCLCAweDlGLCAweEE4LCAweDNDLAotIDB4QzEsIDB4ODUsIDB4NUYsIDB4NzQsIDB4RDIsIDB4MzksIDB4MkQsIDB4RkYsIDB4RDAsIDB4ODQsIDB4REYsIDB4RkIsIDB4QjMsCi0gMHgyMCwgMHg3QSwgMHgyRSwgMHg5QiwgMHgxNywgMHhBRSwgMHhFNiwgMHhCQSwgMHgwQiwgMHhBRSwgMHg1RiwgMHg1MywgMHhBNCwKLSAweDUyLCAweEVELCAweDFCLCAweEM0LCAweDkxLCAweDAyLCAweDgxLCAweDgxLCAweDAwLCAweEVDLCAweDk4LCAweERBLCAweEJCLAotIDB4RDUsIDB4RkUsIDB4RjksIDB4NTIsIDB4NEEsIDB4N0QsIDB4MDIsIDB4NTUsIDB4NDksIDB4NkYsIDB4NTUsIDB4NkUsIDB4NTIsCi0gMHgyRiwgMHg4NCwgMHhBMywgMHgyQiwgMHhCMywgMHg4NiwgMHg2MiwgMHhCMywgMHg1NCwgMHhEMiwgMHg2MywgMHg1MiwgMHhEQSwKLSAweEUzLCAweDg4LCAweDc2LCAweEEwLCAweEVGLCAweDhCLCAweDE1LCAweEE1LCAweEQzLCAweDE4LCAweDE0LCAweDcyLCAweDc3LAotIDB4NUUsIDB4QzcsIDB4QTMsIDB4MDQsIDB4MUYsIDB4OUUsIDB4MTksIDB4NjIsIDB4QjUsIDB4MUIsIDB4MUIsIDB4OUUsIDB4QzMsCi0gMHhGMiwgMHhCNSwgMHgzMiwgMHhGOSwgMHg0QywgMHhDMSwgMHhBQSwgMHhFQiwgMHgwQywgMHgyNiwgMHg3RCwgMHhENCwgMHg1RiwKLSAweDRBLCAweDUxLCAweDVDLCAweEE0LCAweDQ1LCAweDA2LCAweDcwLCAweDQ0LCAweEE3LCAweDU2LCAweEMwLCAweEQ0LCAweDIyLAotIDB4MTQsIDB4NzYsIDB4OUUsIDB4RDgsIDB4NjMsIDB4NTAsIDB4ODksIDB4OTAsIDB4RDMsIDB4RTIsIDB4QkYsIDB4ODEsIDB4OTUsCi0gMHg5MiwgMHgzMSwgMHg0MSwgMHg4NywgMHgzOSwgMHgxQSwgMHg0MywgMHgwQiwgMHgxOCwgMHhBNSwgMHg1MywgMHgxRiwgMHgzOSwKLSAweDFBLCAweDVGLCAweDFGLCAweDQzLCAweEJDLCAweDg3LCAweDZBLCAweERGLCAweDZFLCAweEQzLCAweDIyLCAweDAwLCAweEZFLAotIDB4MjIsIDB4OTgsIDB4NzAsIDB4NEUsIDB4MUEsIDB4MTksIDB4MjksIDB4MDIsIDB4ODEsIDB4ODEsIDB4MDAsIDB4OEEsIDB4NDEsCi0gMHg1NiwgMHgyOCwgMHg1MSwgMHg5RSwgMHg1RiwgMHhENCwgMHg5RSwgMHgwQiwgMHgzQiwgMHg5OCwgMHhBMywgMHg1NCwgMHhGMiwKLSAweDZDLCAweDU2LCAweEQ0LCAweEFBLCAweEU5LCAweDY5LCAweDMzLCAweDg1LCAweDI0LCAweDBDLCAweERBLCAweEQ0LCAweDBDLAotIDB4MkQsIDB4QzQsIDB4QkYsIDB4NEYsIDB4MDIsIDB4NjksIDB4MzgsIDB4N0MsIDB4RDQsIDB4RTYsIDB4REMsIDB4NEMsIDB4RUQsCi0gMHhENywgMHgxNiwgMHgxMSwgMHhDMywgMHgzRSwgMHgwMCwgMHhFNywgMHhDMywgMHgyNiwgMHhDMCwgMHg1MSwgMHgwMiwgMHhERSwKLSAweEJCLCAweDc1LCAweDlDLCAweDZGLCAweDU2LCAweDlDLCAweDdBLCAweEYzLCAweDhFLCAweEVGLCAweENGLCAweDhBLCAweEM1LAotIDB4MkIsIDB4RDIsIDB4REEsIDB4MDYsIDB4NkEsIDB4NDQsIDB4QzksIDB4NzMsIDB4RkUsIDB4NkUsIDB4OTksIDB4ODcsIDB4RjgsCi0gMHg1QiwgMHhCRSwgMHhGMSwgMHg3QywgMHhFNiwgMHg2NSwgMHhCNSwgMHg0RiwgMHg2QywgMHhGMCwgMHhDOSwgMHhDNSwgMHhGRiwKLSAweDE2LCAweENBLCAweDhCLCAweDFCLCAweDE3LCAweEUyLCAweDU4LCAweDNELCAweEEyLCAweDM3LCAweEFCLCAweDAxLCAweEJDLAotIDB4QkYsIDB4NDAsIDB4Q0UsIDB4NTMsIDB4OEMsIDB4OEUsIDB4RUQsIDB4RUYsIDB4RUUsIDB4NTksIDB4OUQsIDB4RTAsIDB4NjMsCi0gMHhFNiwgMHg3QywgMHg1RSwgMHhGNSwgMHg4RSwgMHg0QiwgMHhGMSwgMHgzQiwgMHhDMSwgMHgwMiwgMHg4MSwgMHg4MCwgMHg0RCwKLSAweDQ1LCAweEY5LCAweDQwLCAweDhDLCAweEM1LCAweDVCLCAweEY0LCAweDJBLCAweDFBLCAweDhBLCAweEI0LCAweEYyLCAweDFDLAotIDB4QUMsIDB4NkIsIDB4RTksIDB4MEMsIDB4NTYsIDB4MzYsIDB4QjcsIDB4NEUsIDB4NzIsIDB4OTYsIDB4RDUsIDB4RTUsIDB4OEEsCi0gMHhEMiwgMHhFMiwgMHhGRiwgMHhGMSwgMHhGMSwgMHgxOCwgMHgxMywgMHgzRCwgMHg4NiwgMHgwOSwgMHhCOCwgMHhEOCwgMHg3NiwKLSAweEE3LCAweEM5LCAweDFDLCAweDcxLCAweDUyLCAweDk0LCAweDMwLCAweDQzLCAweEUwLCAweEYxLCAweDc4LCAweDc0LCAweEZELAotIDB4NjEsIDB4MUIsIDB4NEMsIDB4MDksIDB4Q0MsIDB4RTYsIDB4NjgsIDB4MkEsIDB4NzEsIDB4QUQsIDB4MUMsIDB4REYsIDB4NDMsCi0gMHhCQywgMHg1NiwgMHhEQiwgMHhBNSwgMHhBNCwgMHhCRSwgMHgzNSwgMHg3MCwgMHhBNCwgMHg1RSwgMHhDRiwgMHg0RiwgMHhGQywKLSAweDAwLCAweDU1LCAweDk5LCAweDNBLCAweDNELCAweDIzLCAweENGLCAweDY3LCAweDVBLCAweEY1LCAweDIyLCAweEY4LCAweEI1LAotIDB4MjksIDB4RDAsIDB4NDQsIDB4MTEsIDB4RUIsIDB4MzUsIDB4MkUsIDB4NDYsIDB4QkUsIDB4RkQsIDB4OEUsIDB4MTgsIDB4QjIsCi0gMHg1RiwgMHhBOCwgMHhCRiwgMHgxOSwgMHgzMiwgMHhBMSwgMHhGNSwgMHhEQywgMHgwMywgMHhFNiwgMHg3QywgMHg5QSwgMHgxRiwKLSAweDBDLCAweDdDLCAweEE5LCAweEIwLCAweDBFLCAweDIxLCAweDM3LCAweDNCLCAweEYxLCAweEIwfTsKLQotdWludDhfdCByc2FfMjU2X2tleWRhdGFbXSA9IHsKLSAweDMwLCAweDgyLCAweDAxLCAweDIyLCAweDMwLCAweDBELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELAotIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDUsIDB4MDAsIDB4MDMsIDB4ODIsIDB4MDEsIDB4MEYsIDB4MDAsIDB4MzAsIDB4ODIsIDB4MDEsIDB4MEEsCi0gMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhEQiwgMHgxQywgMHg3RiwgMHgyRSwgMHgwQiwgMHhDRCwgMHhCRiwgMHhDRSwgMHhEMSwKLSAweDc1LCAweDEwLCAweEEwLCAweEEyLCAweEI4LCAweENFLCAweDdELCAweEFBLCAweEUyLCAweDA1LCAweEUwLCAweDdBLCAweEQ4LCAweDQ0LAotIDB4NjMsIDB4OEYsIDB4QjUsIDB4QkQsIDB4QzAsIDB4QjAsIDB4MTksIDB4QjksIDB4MzcsIDB4QjgsIDB4MTksIDB4NEEsIDB4MEUsIDB4RjEsCi0gMHg1RCwgMHg3NCwgMHg4MCwgMHg2NywgMHg0NiwgMHg4NywgMHgwNiwgMHhERSwgMHg1QiwgMHg3RiwgMHgwNiwgMHgwMywgMHhCRCwgMHhDMSwKLSAweDhELCAweDVFLCAweDA3LCAweDE1LCAweEQ0LCAweDVCLCAweEY0LCAweERDLCAweEU1LCAweENGLCAweDNELCAweEY5LCAweEMxLCAweDExLAotIDB4MkMsIDB4QUUsIDB4NkEsIDB4QjksIDB4OEEsIDB4QkQsIDB4MUQsIDB4NjcsIDB4NjYsIDB4MTcsIDB4RUEsIDB4NEUsIDB4QkQsIDB4REIsCi0gMHgxNSwgMHg5QSwgMHg4MiwgMHg4NywgMHhFNCwgMHhGMCwgMHg3OCwgMHhDMywgMHhBMywgMHg4NSwgMHg4NywgMHhCMCwgMHhGRCwgMHg5RiwKLSAweEE5LCAweDk5LCAweDVGLCAweEUzLCAweDMzLCAweEVDLCAweENDLCAweEVBLCAweDBCLCAweEI1LCAweDYxLCAweDVFLCAweEYxLCAweDQ5LAotIDB4N0UsIDB4M0YsIDB4QTMsIDB4MkQsIDB4RUEsIDB4MDEsIDB4MEMsIDB4Q0MsIDB4NDIsIDB4OUEsIDB4NzYsIDB4OUIsIDB4QzQsIDB4RDAsCi0gMHgzNywgMHhEMywgMHhCMSwgMHgxNywgMHgwMSwgMHg2MSwgMHgwMSwgMHgxNiwgMHg1OSwgMHg3RSwgMHgxQywgMHgxNywgMHhDMywgMHg1MywKLSAweEZELCAweEQxLCAweDcyLCAweENCLCAweDRDLCAweDYwLCAweDE1LCAweERBLCAweDdELCAweEUyLCAweEVBLCAweEFELCAweDUwLCAweEVGLAotIDB4OEUsIDB4RTIsIDB4OEIsIDB4RDQsIDB4NkEsIDB4NzcsIDB4NTUsIDB4RDYsIDB4NzAsIDB4RDksIDB4NkIsIDB4QkIsIDB4RjEsIDB4RUUsCi0gMHgzOSwgMHgwNCwgMHgzOCwgMHhBMywgMHhCRCwgMHhFMiwgMHhEMSwgMHhFMCwgMHg2NiwgMHg2QiwgMHhFMiwgMHg5QywgMHg0NywgMHg5OSwKLSAweEU5LCAweDI4LCAweEU2LCAweEI2LCAweEZDLCAweDJFLCAweENBLCAweDY3LCAweDQzLCAweDg0LCAweEU4LCAweEQ1LCAweDgzLCAweEQ2LAotIDB4OUQsIDB4OTgsIDB4NkIsIDB4MDEsIDB4M0UsIDB4ODEsIDB4REMsIDB4M0MsIDB4N0EsIDB4Q0EsIDB4RjksIDB4RjMsIDB4OUMsIDB4RjcsCi0gMHhENiwgMHgyOCwgMHgxQiwgMHgyNywgMHg3OCwgMHg3QywgMHhDMywgMHhEMCwgMHhENSwgMHg2MywgMHhBNywgMHg4MSwgMHgzNCwgMHg4OSwKLSAweEFELCAweDI1LCAweDZBLCAweEJELCAweEYyLCAweEVBLCAweEVELCAweEZBLCAweDU3LCAweEZDLCAweEU1LCAweDM0LCAweEM2LCAweEMxLAotIDB4MEYsIDB4NzEsIDB4MkQsIDB4RDIsIDB4MDgsIDB4MTAsIDB4MUIsIDB4QUQsIDB4NDQsIDB4NDEsIDB4RTAsIDB4RkUsIDB4NzksIDB4QTAsCi0gMHg2MywgMHg5MywgMHg4QSwgMHhCMSwgMHg1RCwgMHhFOSwgMHhCMCwgMHhFRSwgMHg2RiwgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMX07Ci0KLXVpbnQ4X3QgZWNfa2V5ZGF0YVtdID0gewotIDB4MzAsIDB4NDksIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDcsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDIsIDB4MDEsIDB4MDYsCi0gMHgwOCwgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwMywgMHgwMSwgMHgwMSwgMHgwMywgMHgzMiwgMHgwMCwgMHgwNCwgMHhCQywKLSAweDc5LCAweDdELCAweEIzLCAweEFFLCAweDdGLCAweDA4LCAweEVDLCAweDNELCAweDQ5LCAweDZCLCAweDRGLCAweEI0LCAweDExLCAweEIzLAotIDB4RjYsIDB4MjAsIDB4QTUsIDB4NTgsIDB4QTUsIDB4MDEsIDB4RTAsIDB4MjIsIDB4MkQsIDB4MDgsIDB4Q0YsIDB4RTAsIDB4REMsIDB4OEEsCi0gMHhFQywgMHg4QiwgMHgxQSwgMHg3QiwgMHhGMiwgMHg0QiwgMHhFOSwgMHgyOSwgMHg1MSwgMHhDQywgMHg1QiwgMHhBMSwgMHhCRSwgMHhCQiwKLSAweDI0LCAweDc0LCAweDkwLCAweDlBLCAweEUwfTsKLQotdWludDhfdCBlY19rZXlwYWlyW10gPSB7Ci0gMHgzMCwgMHg1RiwgMHgwMiwgMHgwMSwgMHgwMSwgMHgwNCwgMHgxOCwgMHgzMywgMHg4RSwgMHg4NiwgMHhBOCwgMHg4MSwgMHhFMiwgMHgzOCwKLSAweEY1LCAweDQ5LCAweEJELCAweDZGLCAweDA1LCAweDUzLCAweDQ5LCAweDRCLCAweDczLCAweEUzLCAweEQ2LCAweDExLCAweDMwLCAweEZELAotIDB4QzYsIDB4QzksIDB4NkQsIDB4QTAsIDB4MEEsIDB4MDYsIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDMsIDB4MDEsCi0gMHgwMSwgMHhBMSwgMHgzNCwgMHgwMywgMHgzMiwgMHgwMCwgMHgwNCwgMHg1MSwgMHg3NSwgMHhCQywgMHhERiwgMHgzMCwgMHhBMywgMHg3MCwKLSAweEYzLCAweDlELCAweDUzLCAweDkzLCAweEU2LCAweDEyLCAweDcyLCAweDg4LCAweEQ4LCAweDAxLCAweDY3LCAweEI1LCAweEY0LCAweEI0LAotIDB4QjcsIDB4NzYsIDB4QzYsIDB4NzQsIDB4RjcsIDB4QzYsIDB4RjMsIDB4NTQsIDB4QjcsIDB4RDIsIDB4MjQsIDB4MDYsIDB4MkMsIDB4MUYsCi0gMHg2OCwgMHg1NCwgMHhCNSwgMHhBNywgMHhBRiwgMHgwRiwgMHhFNSwgMHg3OCwgMHhFQSwgMHhGMiwgMHg1OCwgMHhGMCwgMHgyN307Ci0KLQotdGVzdF9kYXRhIGNoZWNrMVtdID0gewoteyJUZXN0IHBzYV9zZXRfa2V5X2xpZmV0aW1lIDE2IEJ5dGUgQUVTXG4iLCAxLCBQU0FfS0VZX1RZUEVfQUVTLAotezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCi0gMHg1RiwgMHhDOX0sCi0gQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAotIFBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEUsIEJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0geworeyJUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgMTYgQnl0ZSBBRVNcbiIsIDEsIFBTQV9LRVlfVFlQRV9BRVMsCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKLSNpZmRlZiBOT19TVVBQT1JUCi0vKiBQU0EgY3J5cHRvIGRvZXNuJ3Qgc3VwcG9ydCB0aGVzZSB0ZXN0IHNjZW5hcmlvcyAqLwoteyJUZXN0IHBzYV9zZXRfa2V5X2xpZmV0aW1lIDI0IEJ5dGUgQUVTXG4iLCAyLCBQU0FfS0VZX1RZUEVfQUVTLAotezB4MjQsIDB4MTMsIDB4NjEsIDB4NDcsIDB4NjEsIDB4QjgsIDB4QzgsIDB4RjAsIDB4REYsIDB4QUIsIDB4NUEsIDB4MEUsIDB4ODcsCi0gMHg0MCwgMHhBQywgMHhBMywgMHg5MCwgMHg3NywgMHg4MywgMHg1MiwgMHgzMSwgMHg3NCwgMHhGOX0sCi0gQUVTXzI0Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKLSBQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQsIEJZVEVTX1RPX0JJVFMoQUVTXzI0Ql9LRVlfU0laRSksIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCit7IlRlc3QgcHNhX2FsbG9jYXRlX2tleSAyNCBCeXRlIEFFU1xuIiwgMiwgUFNBX0tFWV9UWVBFX0FFUywKKyBBRVNfMjRCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIAoteyJUZXN0IHBzYV9zZXRfa2V5X2xpZmV0aW1lIDMyIEJ5dGUgQUVTXG4iLCAzLCBQU0FfS0VZX1RZUEVfQUVTLAotezB4RUEsIDB4RDUsIDB4RTYsIDB4QzgsIDB4NTEsIDB4RjksIDB4RUMsIDB4QkIsIDB4OUIsIDB4NTcsIDB4N0MsIDB4RUQsIDB4RDIsCi0gMHg0QiwgMHg4MiwgMHg4NCwgMHg5RiwgMHg5RiwgMHhFNiwgMHg3MywgMHgyMSwgMHgzRCwgMHgxQSwgMHgwNSwgMHhDOSwgMHhFRCwKLSAweERGLCAweDI1LCAweDE3LCAweDY4LCAweDg2LCAweEFFfSwKLSBBRVNfMzJCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAotIFBTQV9LRVlfTElGRVRJTUVfV1JJVEVfT05DRSwgQllURVNfVE9fQklUUyhBRVNfMzJCX0tFWV9TSVpFKSwgQUVTXzMyQl9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKLX0sCi0jZW5kaWYKLQoteyJUZXN0IHBzYV9zZXRfa2V5X2xpZmV0aW1lIDIwNDggUlNBIHB1YmxpYyBrZXlcbiIsIDQsIFBTQV9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSwKLSB7MH0sCi0gMjk0LCBQU0FfS0VZX1VTQUdFX1NJR04sIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fUkFXLAotIFBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEUsIDIwNDgsIDI5NCwgUFNBX1NVQ0NFU1MKK3siVGVzdCBwc2FfYWxsb2NhdGVfa2V5IDMyIEJ5dGUgQUVTXG4iLCAzLCBQU0FfS0VZX1RZUEVfQUVTLAorIEFFU18zMkJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogCi0jaWZkZWYgTk9fU1VQUE9SVAotLyogUFNBIGNyeXB0byBkb2Vzbid0IHN1cHBvcnQgdGhlc2UgdGVzdCBzY2VuYXJpb3MgKi8KLXsiVGVzdCBwc2Ffc2V0X2tleV9saWZldGltZSB3aXRoIFJTQSAyMDQ4IGtleXBhaXJcbiIsIDUsIFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUiwKLSB7MH0sCi0gMTE5MywgUFNBX0tFWV9VU0FHRV9WRVJJRlksIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fUkFXLAotIFBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVCwgMjA0OCwgMTE5MywgUFNBX1NVQ0NFU1MKK3siVGVzdCBwc2FfYWxsb2NhdGVfa2V5IDIwNDggUlNBIHB1YmxpYyBrZXlcbiIsIDQsIFBTQV9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSwKKyAyOTQsIFBTQV9TVUNDRVNTCiB9LAogCi17IlRlc3QgcHNhX3NldF9rZXlfbGlmZXRpbWUgd2l0aCBERVMgNjQgYml0IGtleVxuIiwgNiwgUFNBX0tFWV9UWVBFX0RFUywKLSB7MHg3MCwgMHgyNCwgMHg1NSwgMHgwQywgMHgxNCwgMHg5RCwgMHhFRCwgMHgyOX0sCi0gREVTXzhCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCi0gUFNBX0tFWV9MSUZFVElNRV9XUklURV9PTkNFLCBCWVRFU19UT19CSVRTKERFU184Ql9LRVlfU0laRSksIERFU184Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKLX0sCi0jZW5kaWYKLQoteyJUZXN0IHBzYV9zZXRfa2V5X2xpZmV0aW1lIHdpdGggVHJpcGxlIERFUyAyLUtleVxuIiwgNywgUFNBX0tFWV9UWVBFX0RFUywKLXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9LAotIERFUzNfMktFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCi0gUFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRSwgQllURVNfVE9fQklUUyhERVMzXzJLRVlfU0laRSksIERFUzNfMktFWV9TSVpFLCBQU0FfU1VDQ0VTUworeyJUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgd2l0aCBSU0EgMjA0OCBrZXlwYWlyXG4iLCA1LCBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIsCisgMTE5MywgUFNBX1NVQ0NFU1MKIH0sCiAKLSNpZmRlZiBOT19TVVBQT1JUCi0vKiBQU0EgY3J5cHRvIGRvZXNuJ3Qgc3VwcG9ydCB0aGVzZSB0ZXN0IHNjZW5hcmlvcyAqLwoteyJUZXN0IHBzYV9zZXRfa2V5X2xpZmV0aW1lIHdpdGggVHJpcGxlIERFUyAzLUtleVxuIiwgOCwgUFNBX0tFWV9UWVBFX0RFUywKLXsweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGLAotIDB4RjEsIDB4RTAsIDB4RDMsIDB4QzIsIDB4QjUsIDB4QTQsIDB4OTcsIDB4ODYsCi0gMHhGRSwgMHhEQywgMHhCQSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMH0sCi0gREVTM18zS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwKLSBQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQsIEJZVEVTX1RPX0JJVFMoREVTM18zS0VZX1NJWkUpLCBERVMzXzNLRVlfU0laRSwgUFNBX1NVQ0NFU1MKLX0sCi0jZW5kaWYKLQoteyJUZXN0IHBzYV9zZXRfa2V5X2xpZmV0aW1lIHdpdGggRUMgUHVibGljIGtleVxuIiwgOSwKLSBQU0FfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVlfQkFTRSB8IFBTQV9FQ0NfQ1VSVkVfU0VDUDE5MlIxLAotIHswfSwKLSA3NSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OLAotIFBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEUsIDE5MiwgNzUsIFBTQV9TVUNDRVNTCit7IlRlc3QgcHNhX2FsbG9jYXRlX2tleSB3aXRoIERFUyA2NCBiaXQga2V5XG4iLCA2LCBQU0FfS0VZX1RZUEVfREVTLAorIERFU184Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKLXsiVGVzdCBwc2Ffc2V0X2tleV9saWZldGltZSB3aXRoIEVDIGtleXBhaXJcbiIsIDEwLAotIFBTQV9LRVlfVFlQRV9FQ0NfS0VZUEFJUl9CQVNFIHwgUFNBX0VDQ19DVVJWRV9TRUNQMTkyUjEsCi0gezB9LAotIDk3LCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DQVRFR09SWV9BU1lNTUVUUklDX0VOQ1JZUFRJT04sCi0gUFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRSwgMTkyLCA5NywgUFNBX1NVQ0NFU1MKLX0sCi19OwotCi0KLXRlc3RfZGF0YSBjaGVjazJbXSA9IHsKLXsiVGVzdCBwc2Ffc2V0X2tleV9saWZldGltZSB3aXRoIGludmFsaWQga2V5IHNsb3RcbiIsIElOVkFMSURfS0VZX1NMT1QsIFBTQV9LRVlfVFlQRV9BRVMsCi17MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKLSAweDVGLCAweEM5fSwKLSBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsIFBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEUsCi0gQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK3siVGVzdCBwc2FfYWxsb2NhdGVfa2V5IHdpdGggVHJpcGxlIERFUyAyLUtleVxuIiwgNywgUFNBX0tFWV9UWVBFX0RFUywKKyBERVMzXzJLRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKLXsiVGVzdCBwc2Ffc2V0X2tleV9saWZldGltZSB3aXRoIHplcm8ga2V5IHNsb3RcbiIsIFpFUk9fS0VZX1NMT1QsIFBTQV9LRVlfVFlQRV9BRVMsCi17MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKLSAweDVGLCAweEM5fSwKLSBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsIFBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEUsCi0gQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK3siVGVzdCBwc2FfYWxsb2NhdGVfa2V5IHdpdGggVHJpcGxlIERFUyAzLUtleVxuIiwgOCwgUFNBX0tFWV9UWVBFX0RFUywKKyBERVMzXzNLRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAKLXsiVGVzdCBwc2Ffc2V0X2tleV9saWZldGltZSB3aXRoIGludmFsaWQgbGlmZXRpbWVcbiIsIDExLCBQU0FfS0VZX1RZUEVfQUVTLAotezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCi0gMHg1RiwgMHhDOX0sCi0gQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLCBQU0FfS0VZX0xJRkVUSU1FX0lOVkFMSUQsCi0gQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK3siVGVzdCBwc2FfYWxsb2NhdGVfa2V5IHdpdGggRUMgUHVibGljIGtleVxuIiwgOSwKKyA3NSwgUFNBX1NVQ0NFU1MKIH0sCiAKLSNpZmRlZiBOT19TVVBQT1JUCi17IlRlc3QgcHNhX3NldF9rZXlfbGlmZXRpbWUgd2l0aCBvY2N1cGllZCBzbG90XG4iLCAxMSwgUFNBX0tFWV9UWVBFX0FFUywKLXsweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAotIDB4NUYsIDB4Qzl9LAotIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwgUFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRSwKLSBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfRVJST1JfT0NDVVBJRURfU0xPVAoreyJUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgd2l0aCBFQyBrZXlwYWlyXG4iLCAxMCwKKyA5NywgUFNBX1NVQ0NFU1MKIH0sCi0jZW5kaWYKLQogfTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDEwL3Rlc3RfYzAxMC5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTAvdGVzdF9jMDEwLmMKaW5kZXggMDgzZDVhOS4uMjkwYzkxZiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTAvdGVzdF9jMDEwLmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTAvdGVzdF9jMDEwLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDE0ICsxNSw4IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKLSNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgInRlc3RfYzAxMC5oIgogI2luY2x1ZGUgInRlc3RfZGF0YS5oIgogI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKQEAgLTM0LDM1ICsyOCwzNSBAQAogICAgIE5VTEwsCiB9OwogCi1pbnQgZ190ZXN0X2NvdW50Oworc3RhdGljIGludCBnX3Rlc3RfY291bnQgPSAxOwogCiBpbnQzMl90IHBzYV9nZXRfa2V5X2xpZmV0aW1lX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCiB7Ci0gICAgaW50MzJfdCAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CiAgICAgdWludDhfdCAgICAgICAgICAgICAqa2V5X2RhdGE7CiAgICAgcHNhX2tleV9wb2xpY3lfdCAgICBwb2xpY3k7CiAgICAgaW50ICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7Ci0gICAgdWludDMyX3QgICAgICAgICAgICBpOworICAgIGludDMyX3QgICAgICAgICAgICAgaSwgc3RhdHVzOwogICAgIHBzYV9rZXlfbGlmZXRpbWVfdCAgbGlmZXRpbWU7CiAKLSAgICBnX3Rlc3RfY291bnQgPSAxOwotCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KLSAgICBpZiAodmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKSAhPSBQU0FfU1VDQ0VTUykKLSAgICB7Ci0gICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOSVRfRkFJTEVEOwotICAgIH0KLQotICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAotICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKLSAgICAgKi8KLSAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKIAogICAgIC8qIFNldCB0aGUga2V5IGRhdGEgYnVmZmVyIHRvIHRoZSBpbnB1dCBiYXNlIG9uIGFsZ29yaXRobSAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCiAgICAgewogICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKICAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCiAgICAgICAgIGlmIChQU0FfS0VZX1RZUEVfSVNfUlNBKGNoZWNrMVtpXS5rZXlfdHlwZSkpCiAgICAgICAgICB7CiAgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmtleV90eXBlID09IFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUikKQEAgLTk4LDQ3ICs5MiwyNSBAQAogICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazFbaV0udXNhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZyk7CiAKLSAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLwotICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazFbaV0ua2V5X3Nsb3QsICZwb2xpY3kpOwotICAgICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0Egc2V0IGtleSBwb2xpY3kgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazFbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKIAotICAgICAgICAvKiBDaGFuZ2UgdGhlIGxpZmV0aW1lIG9mIGEga2V5IHNsb3QgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX0xJRkVUSU1FLCBjaGVjazFbaV0ua2V5X3Nsb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ubGlmZXRpbWUpOwotICAgICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0Egc2V0IGtleSBsaWZldGltZSBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQorICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CiAKICAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLwotICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV90eXBlLCBrZXlfZGF0YSwgY2hlY2sxW2ldLmtleV9sZW5ndGgpOwotICAgICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgaW1wb3J0IGtleSBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQorICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X3R5cGUsIGtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOwogCiAgICAgICAgIC8qIEdldCB0aGUgbGlmZXRpbWUgb2YgYSBrZXkgc2xvdCAqLwotICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFVF9LRVlfTElGRVRJTUUsIGNoZWNrMVtpXS5rZXlfc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGlmZXRpbWUpOwotICAgICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgZ2V0IGtleSBsaWZldGltZSBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQorICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFVF9LRVlfTElGRVRJTUUsIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCAmbGlmZXRpbWUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKIAotICAgICAgICBpZiAobGlmZXRpbWUgIT0gY2hlY2sxW2ldLmxpZmV0aW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRLZXkgbGlmZXRpbWUgbWlzbWF0Y2hcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfREFUQV9NSVNNQVRDSDsKLSAgICAgICAgfQotCisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGxpZmV0aW1lLCBjaGVjazFbaV0ubGlmZXRpbWUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CkBAIC0xNDYsMzYgKzExOCw1MiBAQAogCiBpbnQzMl90IHBzYV9nZXRfa2V5X2xpZmV0aW1lX25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCiB7Ci0gICAgaW50MzJfdCAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CiAgICAgaW50ICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMikvc2l6ZW9mKGNoZWNrMlswXSk7Ci0gICAgdWludDMyX3QgICAgICAgICAgICBpOworICAgIGludDMyX3QgICAgICAgICAgICAgaSwgc3RhdHVzOwogICAgIHBzYV9rZXlfbGlmZXRpbWVfdCAgbGlmZXRpbWU7CiAgICAgcHNhX2tleV9wb2xpY3lfdCAgICBwb2xpY3k7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwotICAgIGlmICh2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpICE9IFBTQV9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5JVF9GQUlMRUQ7Ci0gICAgfQotCi0gICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCi0gICAgKiB1c2FnZSBvZiB0aGUga2V5Ci0gICAgKi8KLSAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCiAgICAgewotICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazJbaV0udGVzdF9kZXNjLCAwKTsKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2dldF9rZXlfbGlmZXRpbWUgd2l0aCBpbnZhbGlkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBHZXQgdGhlIGxpZmV0aW1lIG9mIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRVRfS0VZX0xJRkVUSU1FLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwgJmxpZmV0aW1lKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfZ2V0X2tleV9saWZldGltZSB3aXRoIHplcm8gYXMga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIEdldCB0aGUgbGlmZXRpbWUgb2YgYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFVF9LRVlfTElGRVRJTUUsIDAsICZsaWZldGltZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2dldF9rZXlfbGlmZXRpbWUgd2l0aCBlbXB0eSBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazJbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMltpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOwogCiAgICAgICAgIC8qIEdldCB0aGUgbGlmZXRpbWUgb2YgYSBrZXkgc2xvdCAqLwotICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFVF9LRVlfTElGRVRJTUUsIGNoZWNrMltpXS5rZXlfc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsaWZldGltZSk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gY2hlY2syW2ldLmV4cGVjdGVkX3N0YXR1cykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGdldCBrZXkgbGlmZXRpbWUgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRVRfS0VZX0xJRkVUSU1FLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwgJmxpZmV0aW1lKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CiAgICAgIH0KIAogICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTAvdGVzdF9jMDEwLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMC90ZXN0X2MwMTAuaAppbmRleCAzNzBiYmNjLi4wMzMwOGU4IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMC90ZXN0X2MwMTAuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMC90ZXN0X2MwMTAuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTgsNyArMTgsNiBAQAogI2RlZmluZSBfVEVTVF9DMDEwX0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NyeXB0by5oIgotCiAjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGMwMTApCiAjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCiAjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMC90ZXN0X2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDEwL3Rlc3RfZGF0YS5oCmluZGV4IDQyZDNhMDAuLjE2Zjg5NmQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDEwL3Rlc3RfZGF0YS5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDEwL3Rlc3RfZGF0YS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNywxMSArMTcsOSBAQAogCiAjaW5jbHVkZSAidmFsX2NyeXB0by5oIgogCi0jZGVmaW5lICBFTVBUWV9LRVlfU0xPVCAgICAgMzEKLQogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1s3NV07Ci0gICAgcHNhX2tleV9zbG90X3QgICAgICAgICAga2V5X3Nsb3Q7CisgICAgcHNhX2tleV9oYW5kbGVfdCAgICAgICAga2V5X2hhbmRsZTsKICAgICBwc2Ffa2V5X3R5cGVfdCAgICAgICAgICBrZXlfdHlwZTsKICAgICB1aW50OF90ICAgICAgICAgICAgICAgICBrZXlfZGF0YVszNF07CiAgICAgdWludDMyX3QgICAgICAgICAgICAgICAga2V5X2xlbmd0aDsKQEAgLTMzLDEwICszMSwxMCBAQAogICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1czsKIH0gdGVzdF9kYXRhOwogCi11aW50OF90IHJzYV8zODRfa2V5cGFpclsxXTsKLXVpbnQ4X3QgcnNhXzM4NF9rZXlkYXRhWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlwYWlyWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlkYXRhWzFdOwogCi11aW50OF90IHJzYV8yNTZfa2V5cGFpcltdID0geworc3RhdGljIHVpbnQ4X3QgcnNhXzI1Nl9rZXlwYWlyW10gPSB7CiAgMHgzMCwgMHg4MiwgMHgwNCwgMHhBNSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhDMCwKICAweDk1LCAweDA4LCAweEUxLCAweDU3LCAweDQxLCAweEYyLCAweDcxLCAweDZELCAweEI3LCAweEQyLCAweDQ1LCAweDQxLCAweDI3LAogIDB4MDEsIDB4NjUsIDB4QzYsIDB4NDUsIDB4QUUsIDB4RjIsIDB4QkMsIDB4MjQsIDB4MzAsIDB4QjgsIDB4OTUsIDB4Q0UsIDB4MkYsCkBAIC0xMzAsNyArMTI4LDcgQEAKICAweDVGLCAweEE4LCAweEJGLCAweDE5LCAweDMyLCAweEExLCAweEY1LCAweERDLCAweDAzLCAweEU2LCAweDdDLCAweDlBLCAweDFGLAogIDB4MEMsIDB4N0MsIDB4QTksIDB4QjAsIDB4MEUsIDB4MjEsIDB4MzcsIDB4M0IsIDB4RjEsIDB4QjB9OwogCi11aW50OF90IHJzYV8yNTZfa2V5ZGF0YVtdID0geworc3RhdGljIHVpbnQ4X3QgcnNhXzI1Nl9rZXlkYXRhW10gPSB7CiAgMHgzMCwgMHg4MiwgMHgwMSwgMHgyMiwgMHgzMCwgMHgwRCwgMHgwNiwgMHgwOSwgMHgyQSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhGNywgMHgwRCwKICAweDAxLCAweDAxLCAweDAxLCAweDA1LCAweDAwLCAweDAzLCAweDgyLCAweDAxLCAweDBGLCAweDAwLCAweDMwLCAweDgyLCAweDAxLCAweDBBLAogIDB4MDIsIDB4ODIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4REIsIDB4MUMsIDB4N0YsIDB4MkUsIDB4MEIsIDB4Q0QsIDB4QkYsIDB4Q0UsIDB4RDEsCkBAIC0xNTMsNyArMTUxLDcgQEAKICAweDBGLCAweDcxLCAweDJELCAweEQyLCAweDA4LCAweDEwLCAweDFCLCAweEFELCAweDQ0LCAweDQxLCAweEUwLCAweEZFLCAweDc5LCAweEEwLAogIDB4NjMsIDB4OTMsIDB4OEEsIDB4QjEsIDB4NUQsIDB4RTksIDB4QjAsIDB4RUUsIDB4NkYsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDF9OwogCi11aW50OF90IGVjX2tleWRhdGFbXSA9IHsKK3N0YXRpYyB1aW50OF90IGVjX2tleWRhdGFbXSA9IHsKICAweDMwLCAweDQ5LCAweDMwLCAweDEzLCAweDA2LCAweDA3LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAyLCAweDAxLCAweDA2LAogIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDMsIDB4MzIsIDB4MDAsIDB4MDQsIDB4QkMsCiAgMHg3OSwgMHg3RCwgMHhCMywgMHhBRSwgMHg3RiwgMHgwOCwgMHhFQywgMHgzRCwgMHg0OSwgMHg2QiwgMHg0RiwgMHhCNCwgMHgxMSwgMHhCMywKQEAgLTE2MSw3ICsxNTksNyBAQAogIDB4RUMsIDB4OEIsIDB4MUEsIDB4N0IsIDB4RjIsIDB4NEIsIDB4RTksIDB4MjksIDB4NTEsIDB4Q0MsIDB4NUIsIDB4QTEsIDB4QkUsIDB4QkIsCiAgMHgyNCwgMHg3NCwgMHg5MCwgMHg5QSwgMHhFMH07CiAKLXVpbnQ4X3QgZWNfa2V5cGFpcltdID0geworc3RhdGljIHVpbnQ4X3QgZWNfa2V5cGFpcltdID0gewogIDB4MzAsIDB4NUYsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MTgsIDB4MzMsIDB4OEUsIDB4ODYsIDB4QTgsIDB4ODEsIDB4RTIsIDB4MzgsCiAgMHhGNSwgMHg0OSwgMHhCRCwgMHg2RiwgMHgwNSwgMHg1MywgMHg0OSwgMHg0QiwgMHg3MywgMHhFMywgMHhENiwgMHgxMSwgMHgzMCwgMHhGRCwKICAweEM2LCAweEM5LCAweDZELCAweEEwLCAweDBBLCAweDA2LCAweDA4LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAzLCAweDAxLApAQCAtMTcwLDExICsxNjgsMTEgQEAKICAweEI3LCAweDc2LCAweEM2LCAweDc0LCAweEY3LCAweEM2LCAweEYzLCAweDU0LCAweEI3LCAweEQyLCAweDI0LCAweDA2LCAweDJDLCAweDFGLAogIDB4NjgsIDB4NTQsIDB4QjUsIDB4QTcsIDB4QUYsIDB4MEYsIDB4RTUsIDB4NzgsIDB4RUEsIDB4RjIsIDB4NTgsIDB4RjAsIDB4Mjd9OwogCi10ZXN0X2RhdGEgY2hlY2sxW10gPSB7CitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0gewogeyJUZXN0IHBzYV9nZXRfa2V5X2xpZmV0aW1lIDE2IEJ5dGUgQUVTXG4iLCAxLCBQU0FfS0VZX1RZUEVfQUVTLAogezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCiAgMHg1RiwgMHhDOX0sCi0gQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKICBQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFLCBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIApAQCAtMTgzLDcgKzE4MSw3IEBACiB7IlRlc3QgcHNhX2dldF9rZXlfbGlmZXRpbWUgMjQgQnl0ZSBBRVNcbiIsIDIsIFBTQV9LRVlfVFlQRV9BRVMsCiB7MHgyNCwgMHgxMywgMHg2MSwgMHg0NywgMHg2MSwgMHhCOCwgMHhDOCwgMHhGMCwgMHhERiwgMHhBQiwgMHg1QSwgMHgwRSwgMHg4NywKICAweDQwLCAweEFDLCAweEEzLCAweDkwLCAweDc3LCAweDgzLCAweDUyLCAweDMxLCAweDc0LCAweEY5fSwKLSBBRVNfMjRCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DVFIsCiAgUFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5ULCBCWVRFU19UT19CSVRTKEFFU18yNEJfS0VZX1NJWkUpLCBBRVNfMjRCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIApAQCAtMTkxLDcgKzE4OSw3IEBACiB7MHhFQSwgMHhENSwgMHhFNiwgMHhDOCwgMHg1MSwgMHhGOSwgMHhFQywgMHhCQiwgMHg5QiwgMHg1NywgMHg3QywgMHhFRCwgMHhEMiwKICAweDRCLCAweDgyLCAweDg0LCAweDlGLCAweDlGLCAweEU2LCAweDczLCAweDIxLCAweDNELCAweDFBLCAweDA1LCAweEM5LCAweEVELAogIDB4REYsIDB4MjUsIDB4MTcsIDB4NjgsIDB4ODYsIDB4QUV9LAotIEFFU18zMkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgQUVTXzMyQl9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NUUiwKICBQU0FfS0VZX0xJRkVUSU1FX1dSSVRFX09OQ0UsIEJZVEVTX1RPX0JJVFMoQUVTXzMyQl9LRVlfU0laRSksIEFFU18zMkJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogI2VuZGlmCkBAIC0yMTIsNyArMjEwLDcgQEAKIAogeyJUZXN0IHBzYV9nZXRfa2V5X2xpZmV0aW1lIHdpdGggREVTIDY0IGJpdCBrZXlcbiIsIDYsIFBTQV9LRVlfVFlQRV9ERVMsCiAgezB4NzAsIDB4MjQsIDB4NTUsIDB4MEMsIDB4MTQsIDB4OUQsIDB4RUQsIDB4Mjl9LAotIERFU184Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIERFU184Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAogIFBTQV9LRVlfTElGRVRJTUVfV1JJVEVfT05DRSwgQllURVNfVE9fQklUUyhERVNfOEJfS0VZX1NJWkUpLCBERVNfOEJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LAogI2VuZGlmCkBAIC0yMjAsNyArMjE4LDcgQEAKIHsiVGVzdCBwc2FfZ2V0X2tleV9saWZldGltZSB3aXRoIFRyaXBsZSBERVMgMi1LZXlcbiIsIDcsIFBTQV9LRVlfVFlQRV9ERVMsCiB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGfSwKLSBERVMzXzJLRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLAorIERFUzNfMktFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsCiAgUFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRSwgQllURVNfVE9fQklUUyhERVMzXzJLRVlfU0laRSksIERFUzNfMktFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKIApAQCAtMjMwLDcgKzIyOCw3IEBACiB7MHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhBQiwgMHhDRCwgMHhFRiwKICAweEYxLCAweEUwLCAweEQzLCAweEMyLCAweEI1LCAweEE0LCAweDk3LCAweDg2LAogIDB4RkUsIDB4REMsIDB4QkEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTB9LAotIERFUzNfM0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsCisgREVTM18zS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKICBQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQsIEJZVEVTX1RPX0JJVFMoREVTM18zS0VZX1NJWkUpLCBERVMzXzNLRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCiAjZW5kaWYKQEAgLTI1MiwyOCArMjUwLDExIEBACiB9OwogCiAKLXRlc3RfZGF0YSBjaGVjazJbXSA9IHsKLXsiVGVzdCBwc2FfZ2V0X2tleV9saWZldGltZSB3aXRoIGludmFsaWQga2V5IHNsb3RcbiIsIElOVkFMSURfS0VZX1NMT1QsIFBTQV9LRVlfVFlQRV9BRVMsCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMltdID0geworeyJUZXN0IHBzYV9nZXRfa2V5X2xpZmV0aW1lIHdpdGggbmVnYXRpdmUgY2FzZXNcbiIsIDExLCBQU0FfS0VZX1RZUEVfQUVTLAogezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCiAgMHg1RiwgMHhDOX0sCi0gQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FLCBQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFLAorIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwgUFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRSwKICBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAogfSwKLQoteyJUZXN0IHBzYV9nZXRfa2V5X2xpZmV0aW1lIHdpdGggemVybyBrZXkgc2xvdFxuIiwgWkVST19LRVlfU0xPVCwgUFNBX0tFWV9UWVBFX0FFUywKLXsweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAotIDB4NUYsIDB4Qzl9LAotIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0JMT0NLX0NJUEhFUl9QQURfTk9ORSwgUFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRSwKLSBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAotfSwKLQotI2lmZGVmIE5PX1NVUFBPUlQKLS8qIFBTQSBjcnlwdG8gZG9lc24ndCBzdXBwb3J0IHRoZXNlIHRlc3Qgc2NlbmFyaW9zICovCi17IlRlc3QgcHNhX2dldF9rZXlfbGlmZXRpbWUgd2l0aCBlbXB0eSBrZXkgc2xvdFxuIiwgRU1QVFlfS0VZX1NMT1QsIFBTQV9LRVlfVFlQRV9BRVMsCi17MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKLSAweDVGLCAweEM5fSwKLSBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19CTE9DS19DSVBIRVJfUEFEX05PTkUsIFBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEUsCi0gQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKLX0sCi0jZW5kaWYKIH07CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMS90ZXN0X2MwMTEuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDExL3Rlc3RfYzAxMS5jCmluZGV4IGRlMmY3OWIuLjk2ZmJhMGYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDExL3Rlc3RfYzAxMS5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDExL3Rlc3RfYzAxMS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSwxNCArMTUsOCBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCi0jZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgotI2VuZGlmCi0KICNpbmNsdWRlICJ0ZXN0X2MwMTEuaCIKICNpbmNsdWRlICJ0ZXN0X2RhdGEuaCIKICNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCkBAIC0zMywzNSArMjcsMzQgQEAKICAgICBOVUxMLAogfTsKIAotaW50IGdfdGVzdF9jb3VudDsKK3N0YXRpYyBpbnQgZ190ZXN0X2NvdW50ID0gMTsKIAogaW50MzJfdCBwc2FfaGFzaF9zZXR1cF90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7Ci0gICAgdWludDMyX3QgICAgICAgICAgICAgICAgaTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBpLCBzdGF0dXM7CiAgICAgcHNhX2hhc2hfb3BlcmF0aW9uX3QgICAgb3BlcmF0aW9uOwogCi0gICAgZ190ZXN0X2NvdW50ID0gMTsKLQogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCi0gICAgaWYgKHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCkgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTklUX0ZBSUxFRDsKLSAgICB9CisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCiAgICAgewogICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKICAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKIAorICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKwogICAgICAgICAvKiBTdGFydCBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbiAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfU0VUVVAsICZvcGVyYXRpb24sIGNoZWNrMVtpXS5hbGcpOwotICAgICAgICBpZiAoc3RhdHVzICE9IGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBoYXNoIHNldHVwIGZhaWxlZCIsIDApOwotICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICAgICAgfQorICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qQWJvcnQgdGhlIGhhc2ggb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9BQk9SVCwgJm9wZXJhdGlvbik7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMS90ZXN0X2MwMTEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDExL3Rlc3RfYzAxMS5oCmluZGV4IGYxNGIyMzkuLjNiMzM0NDQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDExL3Rlc3RfYzAxMS5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDExL3Rlc3RfYzAxMS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xOCw3ICsxOCw2IEBACiAjZGVmaW5lIF9URVNUX0MwMTFfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCi0KICNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzAxMSkKICNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKICNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDExL3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTEvdGVzdF9kYXRhLmgKaW5kZXggZTNlZWFkNC4uZDYyMDc2YyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTEvdGVzdF9kYXRhLmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTEvdGVzdF9kYXRhLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXM7CiB9IHRlc3RfZGF0YTsKIAotdGVzdF9kYXRhIGNoZWNrMVtdID0geworc3RhdGljIHRlc3RfZGF0YSBjaGVjazFbXSA9IHsKIHsiVGVzdCBwc2FfaGFzaF9zZXR1cCB3aXRoIE1EMiBhbGdvcml0aG1cbiIsCiAgUFNBX0FMR19NRDIsIFBTQV9TVUNDRVNTLAogfSwKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDEyL3Rlc3RfYzAxMi5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTIvdGVzdF9jMDEyLmMKaW5kZXggMmI2N2Y5YS4uNzdhM2M5ZSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTIvdGVzdF9jMDEyLmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTIvdGVzdF9jMDEyLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDE0ICsxNSw4IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKLSNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgInRlc3RfYzAxMi5oIgogI2luY2x1ZGUgInRlc3RfZGF0YS5oIgogI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKQEAgLTM1LDQ0ICsyOSwzOSBAQAogICAgIE5VTEwsCiB9OwogCi1pbnQgZ190ZXN0X2NvdW50Oworc3RhdGljIGludCBnX3Rlc3RfY291bnQgPSAxOwogCiBpbnQzMl90IHBzYV9oYXNoX3VwZGF0ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7Ci0gICAgdWludDMyX3QgICAgICAgICAgICAgICAgaTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBpLCBzdGF0dXM7CiAgICAgcHNhX2hhc2hfb3BlcmF0aW9uX3QgICAgb3BlcmF0aW9uOwogCi0gICAgZ190ZXN0X2NvdW50ID0gMTsKLQogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCi0gICAgaWYgKHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCkgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTklUX0ZBSUxFRDsKLSAgICB9CisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCiAgICAgewogICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKICAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKIAorICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKwogICAgICAgICAvKiBTdGFydCBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbiAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfU0VUVVAsICZvcGVyYXRpb24sIGNoZWNrMVtpXS5hbGcpOwotICAgICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgaGFzaCBzZXR1cCBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICAgICAgfQorICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKIAogICAgICAgICAvKiBBZGQgYSBtZXNzYWdlIGZyYWdtZW50IHRvIGEgbXVsdGlwYXJ0IGhhc2ggb3BlcmF0aW9uICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9VUERBVEUsICZvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uaW5wdXQsIGNoZWNrMVtpXS5pbnB1dF9sZW5ndGgpOwotICAgICAgICBpZiAoc3RhdHVzICE9IGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBoYXNoIHVwZGF0ZSBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uaW5wdXQsIGNoZWNrMVtpXS5pbnB1dF9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIC8qQWJvcnQgdGhlIGhhc2ggb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9BQk9SVCwgJm9wZXJhdGlvbik7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CkBAIC04MCwzNCArNjksMzUgQEAKIAogaW50MzJfdCBwc2FfaGFzaF91cGRhdGVfaW52YWxpZF9oYW5kbGUoc2VjdXJpdHlfdCBjYWxsZXIpCiB7Ci0gICAgaW50MzJfdCAgICAgICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwotICAgIHBzYV9oYXNoX29wZXJhdGlvbl90ICAgIG9wZXJhdGlvbjsKKyAgICBwc2FfaGFzaF9vcGVyYXRpb25fdCAgICBvcGVyYXRpb24gPSB7MH07CiAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgaW5wdXRbXSA9ICJIZWxsbyBXb3JsZCI7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgaW5wdXRfbGVuZ3RoID0gc2l6ZW9mKGlucHV0KS9zaXplb2YoaW5wdXRbMF0pOworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1czsKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCi0gICAgaWYgKHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCkgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTklUX0ZBSUxFRDsKLSAgICB9CisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKIAogICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOwogICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIlRlc3QgcHNhX2hhc2hfdXBkYXRlIHdpdGhvdXQgaGFzaCBzZXR1cFxuIiwgMCk7CiAKLSAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfVVBEQVRFLCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgaW5wdXRfbGVuZ3RoKTsKLSAgICBpZiAoc3RhdHVzICE9IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UKQotICAgIHsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGhhc2ggdXBkYXRlIHNob3VsZCBoYXZlIGZhaWxlZCBidXQgc3VjY2VlZGVkXG4iLCAwKTsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICB9CisgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgLyogQWRkIGEgbWVzc2FnZSBmcmFnbWVudCB0byBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbiAqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9VUERBVEUsICZvcGVyYXRpb24sIGlucHV0LCBpbnB1dF9sZW5ndGgpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgLypBYm9ydCB0aGUgaGFzaCBvcGVyYXRpb24gKi8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfQUJPUlQsICZvcGVyYXRpb24pOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOwogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KIAogaW50MzJfdCBwc2FfaGFzaF91cGRhdGVfd2l0aF9jb21wbGV0ZWRfaGFuZGxlKHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBwc2FfaGFzaF9vcGVyYXRpb25fdCAgICBvcGVyYXRpb247CiAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgaW5wdXRbXSA9IHsweGJkfTsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICBpbnB1dF9sZW5ndGggPSBzaXplb2YoaW5wdXQpL3NpemVvZihpbnB1dFswXSk7CkBAIC0xMTcsNDggKzEwNywzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdELCAweEM0LCAweEI1LCAweEFBLCAweEUxLCAweDEyLCAweDA0LCAweEMwLCAweDhGLCAweEZFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDczLCAweDJCfTsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICBoYXNoX2xlbmd0aCA9IHNpemVvZihoYXNoKS9zaXplb2YoaGFzaFswXSk7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgc3RhdHVzOwogCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KLSAgICBpZiAodmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKSAhPSBQU0FfU1VDQ0VTUykKLSAgICB7Ci0gICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOSVRfRkFJTEVEOwotICAgIH0KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOwogCiAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CiAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiVGVzdCBwc2FfaGFzaF91cGRhdGUgd2l0aCBjb21wbGV0ZWQgb3BlcnRhaW9uIGhhbmRsZSBcbiIsIDApOwogCisgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCiAgICAgLyogU3RhcnQgYSBtdWx0aXBhcnQgaGFzaCBvcGVyYXRpb24gKi8KICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfU0VUVVAsICZvcGVyYXRpb24sIGFsZyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKLSAgICB7Ci0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBoYXNoIHNldHVwIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7Ci0gICAgfQorICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOwogCiAgICAgLyogQWRkIGEgbWVzc2FnZSBmcmFnbWVudCB0byBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbiAqLwogICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9VUERBVEUsICZvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBpbnB1dF9sZW5ndGgpOwotICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgaGFzaCB1cGRhdGUgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIGlucHV0X2xlbmd0aCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CiAKICAgICAvKiBGaW5pc2ggdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBoYXNoIG9mIGEgbWVzc2FnZSBhbmQgY29tcGFyZSBpdCB3aXRoIGFuIGV4cGVjdGVkIHZhbHVlKi8KICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfVkVSSUZZLCAmb3BlcmF0aW9uLCBoYXNoLCBoYXNoX2xlbmd0aCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKLSAgICB7Ci0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBoYXNoIHZlcmlmeSBmYWlsZWRcbiIsIDApOwotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgIH0KKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKIAogICAgIC8qIEFkZCBhIG1lc3NhZ2UgZnJhZ21lbnQgdG8gYSBtdWx0aXBhcnQgaGFzaCBvcGVyYXRpb24gKi8KLSAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfVVBEQVRFLCAmb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgaW5wdXRfbGVuZ3RoKTsKLSAgICBpZiAoc3RhdHVzICE9IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UKQotICAgIHsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGhhc2ggdXBkYXRlIHNob3VsZCBoYXZlIGZhaWxlZCBidXQgc3VjY2VlZGVkXG4iLCAwKTsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICB9CisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19IQVNIX1VQREFURSwgJm9wZXJhdGlvbiwgaW5wdXQsIGlucHV0X2xlbmd0aCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAvKkFib3J0IHRoZSBoYXNoIG9wZXJhdGlvbiAqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9BQk9SVCwgJm9wZXJhdGlvbik7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTIvdGVzdF9jMDEyLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMi90ZXN0X2MwMTIuaAppbmRleCAxOTY2MDhlLi5jYTM2MjIwIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMi90ZXN0X2MwMTIuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMi90ZXN0X2MwMTIuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTgsNyArMTgsNiBAQAogI2RlZmluZSBfVEVTVF9DMDEyX0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NyeXB0by5oIgotCiAjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGMwMTIpCiAjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCiAjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMi90ZXN0X2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDEyL3Rlc3RfZGF0YS5oCmluZGV4IGU3MDcyYjAuLjA2MzI1YWEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDEyL3Rlc3RfZGF0YS5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDEyL3Rlc3RfZGF0YS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yNSw3ICsyNSw3IEBACiAgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzOwogfSB0ZXN0X2RhdGE7CiAKLXRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2sxW10gPSB7CiB7IlRlc3QgcHNhX2hhc2hfdXBkYXRlIHdpdGggTUQyIGFsZ29yaXRobVxuIiwKICBQU0FfQUxHX01EMiwgIkhlbGxvIFdvcmxkIiwgMTEsIFBTQV9TVUNDRVNTLAogfSwKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDEzL3Rlc3RfYzAxMy5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTMvdGVzdF9jMDEzLmMKaW5kZXggNWJhMjg3OC4uNzNmYWExZCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTMvdGVzdF9jMDEzLmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTMvdGVzdF9jMDEzLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDE0ICsxNSw4IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKLSNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgInRlc3RfYzAxMy5oIgogI2luY2x1ZGUgInRlc3RfZGF0YS5oIgogI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKQEAgLTM0LDI2ICsyOCwyOCBAQAogICAgIE5VTEwsCiB9OwogCi1pbnQgZ190ZXN0X2NvdW50Oworc3RhdGljIGludCBnX3Rlc3RfY291bnQgPSAxOwogCiBpbnQzMl90IHBzYV9oYXNoX3ZlcmlmeV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7Ci0gICAgdWludDMyX3QgICAgICAgICAgICAgICAgaTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBpLCBzdGF0dXM7CiAgICAgcHNhX2hhc2hfb3BlcmF0aW9uX3QgICAgb3BlcmF0aW9uOwogICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICpoYXNoOwogCi0gICAgZ190ZXN0X2NvdW50ID0gMTsKLQogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCi0gICAgaWYgKHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCkgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTklUX0ZBSUxFRDsKLSAgICB9CisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCiAgICAgeworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKwogICAgICAgICBpZiAoY2hlY2sxW2ldLmFsZyA9PSBQU0FfQUxHX1NIQV8zODQpCiAgICAgICAgICAgICBoYXNoID0gc2hhMzg0X2hhc2g7CiAgICAgICAgIGVsc2UgaWYgKGNoZWNrMVtpXS5hbGcgPT0gUFNBX0FMR19TSEFfNTEyKQpAQCAtNjEsMzQgKzU3LDIzIEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGhhc2ggPSBjaGVjazFbaV0uaGFzaDsKIAotICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKLQogICAgICAgICAvKiBTdGFydCBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbiAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfU0VUVVAsICZvcGVyYXRpb24sIGNoZWNrMVtpXS5hbGcpOwotICAgICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgaGFzaCBzZXR1cCBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICAgICAgfQorICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKIAogICAgICAgICAvKiBBZGQgYSBtZXNzYWdlIGZyYWdtZW50IHRvIGEgbXVsdGlwYXJ0IGhhc2ggb3BlcmF0aW9uICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9VUERBVEUsICZvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hlY2sxW2ldLmlucHV0LCBjaGVjazFbaV0uaW5wdXRfbGVuZ3RoKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGhhc2ggdXBkYXRlIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGVjazFbaV0uaW5wdXQsIGNoZWNrMVtpXS5pbnB1dF9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKIAogICAgICAgICAvKiBGaW5pc2ggdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBoYXNoIG9mIGEgbWVzc2FnZSBhbmQgY29tcGFyZSBpdCB3aXRoIGFuIGV4cGVjdGVkIHZhbHVlKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19IQVNIX1ZFUklGWSwgJm9wZXJhdGlvbiwgaGFzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uaGFzaF9sZW5ndGgpOwotICAgICAgICBpZiAoc3RhdHVzICE9IGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBoYXNoIHZlcmlmeSBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmhhc2hfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICAvKkFib3J0IHRoZSBoYXNoIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfQUJPUlQsICZvcGVyYXRpb24pOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKICAgICB9CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwpAQCAtOTYsOCArODEsNyBAQAogCiBpbnQzMl90IHBzYV9oYXNoX3ZlcmlmeV9pbmFjdGl2ZV9vcGVyYXRpb25faGFuZGxlKHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKLSAgICBwc2FfaGFzaF9vcGVyYXRpb25fdCAgICBvcGVyYXRpb247CisgICAgcHNhX2hhc2hfb3BlcmF0aW9uX3QgICAgb3BlcmF0aW9uLCBpbnZhbGlkX29wZXJhdGlvbjsKICAgICBjaGFyICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IDB4YmQ7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgaW5wdXRfbGVuZ3RoID0gMTsKICAgICBwc2FfYWxnb3JpdGhtX3QgICAgICAgICBhbGcgPSBQU0FfQUxHX1NIQV8yNTY7CkBAIC0xMDYsNDggKzkwLDQ3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTUsIDB4NGIsIDB4MzEsIDB4M2QsIDB4MDUsIDB4NzAsIDB4YzksIDB4NWEsIDB4Y2MsIDB4YmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2QsIDB4YzQsIDB4YjUsIDB4YWEsIDB4ZTEsIDB4MTIsIDB4MDQsIDB4YzAsIDB4OGYsIDB4ZmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzMsIDB4MmJ9OworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1czsKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCi0gICAgaWYgKHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCkgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTklUX0ZBSUxFRDsKLSAgICB9CisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKIAogICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOwotICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgInRlc3QgcHNhX2hhc2hfdmVyaWZ5IHdpdGggaW5hY3RpdmUgb3BlcmF0aW9uIGhhbmRsZVxuIiwgMCk7CisgICAgdmFsLT5wcmludChQUklOVF9URVNULCAidGVzdCBwc2FfaGFzaF92ZXJpZnkgd2l0aCBpbmFjdGl2ZSAmIGludmFsaWQgb3BlcmF0aW9uIGhhbmRsZVxuIiwgMCk7CisKKyAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CiAKICAgICAvKiBTdGFydCBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbiAqLwogICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9TRVRVUCwgJm9wZXJhdGlvbiwgYWxnKTsKLSAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGhhc2ggc2V0dXAgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICB9CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CiAKICAgICAvKiBBZGQgYSBtZXNzYWdlIGZyYWdtZW50IHRvIGEgbXVsdGlwYXJ0IGhhc2ggb3BlcmF0aW9uICovCiAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19IQVNIX1VQREFURSwgJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlucHV0LCBpbnB1dF9sZW5ndGgpOwotICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgaGFzaCB1cGRhdGUgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlucHV0LCBpbnB1dF9sZW5ndGgpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOwogCiAgICAgLyogRmluaXNoIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgaGFzaCBvZiBhIG1lc3NhZ2UgYW5kIGNvbXBhcmUgaXQgd2l0aCBhbiBleHBlY3RlZCB2YWx1ZSovCiAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19IQVNIX1ZFUklGWSwgJm9wZXJhdGlvbiwgaGFzaCwgaGFzaF9sZW5ndGgpOwotICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgaGFzaCB2ZXJpZnkgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICB9CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CiAKICAgICAvKiBSZXRyeSB0aGUgb3BlcmF0aW9uIHdpdGggY29tcGxldGVkIG9wZXJhdGlvbiBoYW5kbGUgKi8KICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfVkVSSUZZLCAmb3BlcmF0aW9uLCBoYXNoLCBoYXNoX2xlbmd0aCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCkKLSAgICB7Ci0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBoYXNoIHZlcmlmeSBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IHN1Y2NlZWRlZFxuIiwgMCk7Ci0gICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7Ci0gICAgfQorICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSwgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAvKiBSZXRyeSB0aGUgb3BlcmF0aW9uIHdpdGggaW52YWxpZCBvcGVyYXRpb24gaGFuZGxlICovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19IQVNIX1ZFUklGWSwgJmludmFsaWRfb3BlcmF0aW9uLCBoYXNoLCBoYXNoX2xlbmd0aCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfQkFEX1NUQVRFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgIC8qQWJvcnQgdGhlIGhhc2ggb3BlcmF0aW9uICovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19IQVNIX0FCT1JULCAmb3BlcmF0aW9uKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKworICAgIC8qQWJvcnQgdGhlIGludmFsaWQgaGFzaCBvcGVyYXRpb24gKi8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfQUJPUlQsICZpbnZhbGlkX29wZXJhdGlvbik7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTMvdGVzdF9jMDEzLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMy90ZXN0X2MwMTMuaAppbmRleCA5NzA4ZWM3Li41MTM1ZGRhIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMy90ZXN0X2MwMTMuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMy90ZXN0X2MwMTMuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTgsNyArMTgsNiBAQAogI2RlZmluZSBfVEVTVF9DMDEzX0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NyeXB0by5oIgotCiAjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGMwMTMpCiAjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCiAjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMy90ZXN0X2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDEzL3Rlc3RfZGF0YS5oCmluZGV4IGE1ZDJkZjYuLjk4NGZhYTEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDEzL3Rlc3RfZGF0YS5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDEzL3Rlc3RfZGF0YS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yNywxOCArMjcsMTggQEAKICAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXM7CiB9IHRlc3RfZGF0YTsKIAotY2hhciBzaGEzODRfaGFzaFtdID0gezB4NDMsIDB4NzIsIDB4ZTMsIDB4OGEsIDB4OTIsIDB4YTIsIDB4OGIsIDB4NWQsIDB4MmMsIDB4MzksIDB4MWUsIDB4NjIsCitzdGF0aWMgY2hhciBzaGEzODRfaGFzaFtdID0gezB4NDMsIDB4NzIsIDB4ZTMsIDB4OGEsIDB4OTIsIDB4YTIsIDB4OGIsIDB4NWQsIDB4MmMsIDB4MzksIDB4MWUsIDB4NjIsCiAweDQ1LCAweDJhLCAweDg2LCAweGQ1LCAweDBlLCAweDAyLCAweDY3LCAweDIyLCAweDhiLCAweGUxLCAweDc2LCAweGM3LCAweDdkLCAweDI0LCAweDAyLCAweGVmLAogMHhmZSwgMHg5ZiwgMHhhNSwgMHgwZCwgMHhlNCwgMHgwNywgMHhiYiwgMHhiOCwgMHg1MSwgMHhiMywgMHg3ZCwgMHg1OSwgMHgwNCwgMHhhYiwgMHhhMiwgMHhkZSwKIDB4ZGUsIDB4NzQsIDB4ZGEsIDB4MmF9OwogCi1jaGFyIHNoYTUxMl9oYXNoW10gPSB7MHgyOSwgMHg2ZSwgMHgyMiwgMHg2NywgMHhkNywgMHg0YywgMHgyNywgMHg4ZCwgMHhhYSwgMHhhYSwgMHg5NCwgMHgwZCwKK3N0YXRpYyBjaGFyIHNoYTUxMl9oYXNoW10gPSB7MHgyOSwgMHg2ZSwgMHgyMiwgMHg2NywgMHhkNywgMHg0YywgMHgyNywgMHg4ZCwgMHhhYSwgMHhhYSwgMHg5NCwgMHgwZCwKIDB4MTcsIDB4YjAsIDB4Y2YsIDB4YjcsIDB4NGEsIDB4NTAsIDB4ODMsIDB4ZjgsIDB4ZTAsIDB4NjksIDB4NzIsIDB4NmQsIDB4OGMsIDB4ODQsIDB4MWMsIDB4YmUsCiAweDU5LCAweDZlLCAweDA0LCAweDMxLCAweGNiLCAweDc3LCAweDQxLCAweGE1LCAweGI1LCAweDBmLCAweDcxLCAweDY2LCAweDZjLCAweGZkLCAweDU0LCAweGJhLAogMHhjYiwgMHg3YiwgMHgwMCwgMHhhZSwgMHhhOCwgMHg5MSwgMHg0OSwgMHg5YywgMHhmNCwgMHhlZiwgMHg2YSwgMHgwMywgMHhjOCwgMHhhOCwgMHgzZiwgMHhlMywKIDB4N2MsIDB4M2YsIDB4N2IsIDB4YWZ9OwogCi10ZXN0X2RhdGEgY2hlY2sxW10gPSB7CitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0gewogeyJUZXN0IHBzYV9oYXNoX3ZlcmlmeSB3aXRoIE1EMiBhbGdvcml0aG1cbiIsCiAgUFNBX0FMR19NRDIsIDB4YmQsIDEsCiAgezB4OGMsIDB4OWMsIDB4MTcsIDB4NjYsIDB4NWQsIDB4MjUsIDB4YjMsIDB4NWYsIDB4YzQsIDB4MTMsIDB4YzQsIDB4MTgsIDB4MDUsIDB4YzYsIDB4NzksIDB4Y2Z9LApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTQvdGVzdF9jMDE0LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNC90ZXN0X2MwMTQuYwppbmRleCBlOWExMTk2Li4yYTY2ZmY1IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNC90ZXN0X2MwMTQuYworKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNC90ZXN0X2MwMTQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsMTQgKzE1LDggQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgotI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKLSNlbmRpZgotCiAjaW5jbHVkZSAidGVzdF9jMDE0LmgiCiAjaW5jbHVkZSAidGVzdF9kYXRhLmgiCiAjaW5jbHVkZSAidmFsX2NyeXB0by5oIgpAQCAtMzUsMjcgKzI5LDI5IEBACiAgICAgTlVMTCwKIH07CiAKLWludCBnX3Rlc3RfY291bnQ7CitzdGF0aWMgaW50IGdfdGVzdF9jb3VudCA9IDE7CiAKIGludDMyX3QgcHNhX2hhc2hfZmluaXNoX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCiB7Ci0gICAgaW50MzJfdCAgICAgICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIGludCAgICAgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBpLCBqOworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIGksIHN0YXR1czsKICAgICBwc2FfaGFzaF9vcGVyYXRpb25fdCAgICBvcGVyYXRpb247CiAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgKmV4cGVjdGVkX2hhc2gsIGhhc2hbSEFTSF82NEJdOwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGhhc2hfbGVuZ3RoLCBoYXNoX3NpemUgPSBzaXplb2YoaGFzaCkvc2l6ZW9mKGhhc2hbMF0pOwogCi0gICAgZ190ZXN0X2NvdW50ID0gMTsKLQogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCi0gICAgaWYgKHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCkgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTklUX0ZBSUxFRDsKLSAgICB9CisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCiAgICAgeworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKwogICAgICAgICBpZiAoY2hlY2sxW2ldLmFsZyA9PSBQU0FfQUxHX1NIQV8zODQpCiAgICAgICAgICAgICBleHBlY3RlZF9oYXNoID0gc2hhMzg0X2hhc2g7CiAgICAgICAgIGVsc2UgaWYgKGNoZWNrMVtpXS5hbGcgPT0gUFNBX0FMR19TSEFfNTEyKQpAQCAtNjMsNTEgKzU5LDM1IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV4cGVjdGVkX2hhc2ggPSBjaGVjazFbaV0uaGFzaDsKIAotICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKLQogICAgICAgICAvKiBTdGFydCBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbiAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfU0VUVVAsICZvcGVyYXRpb24sIGNoZWNrMVtpXS5hbGcpOwotICAgICAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgaGFzaCBzZXR1cCBmYWlsZWRcbiIsIDApOwotICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICAgICAgfQorICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKIAogICAgICAgICAvKiBBZGQgYSBtZXNzYWdlIGZyYWdtZW50IHRvIGEgbXVsdGlwYXJ0IGhhc2ggb3BlcmF0aW9uICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9VUERBVEUsICZvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hlY2sxW2ldLmlucHV0LCBjaGVjazFbaV0uaW5wdXRfbGVuZ3RoKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGhhc2ggdXBkYXRlIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGVjazFbaV0uaW5wdXQsIGNoZWNrMVtpXS5pbnB1dF9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKIAogICAgICAgICAvKiBGaW5pc2ggdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBoYXNoIG9mIGEgbWVzc2FnZSAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfRklOSVNILCAmb3BlcmF0aW9uLCBoYXNoLCBoYXNoX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYXNoX2xlbmd0aCk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGhhc2ggZmluaXNoIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYXNoX2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CiAKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qQWJvcnQgdGhlIGhhc2ggb3BlcmF0aW9uICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfQUJPUlQsICZvcGVyYXRpb24pOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CiAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCi0gICAgICAgIGlmIChoYXNoX2xlbmd0aCAhPSBQU0FfSEFTSF9TSVpFKGNoZWNrMVtpXS5hbGcpKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRIYXNoIGxlbmd0aCBtaXNtYXRjaFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCBoYXNoX2xlbmd0aDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaGFzaFtpXSAhPSBleHBlY3RlZF9oYXNoW2ldKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEhhc2ggZGF0YSBtaXNtYXRjaFxuIiwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYXNoX2xlbmd0aCwgUFNBX0hBU0hfU0laRShjaGVjazFbaV0uYWxnKSwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgVEVTVF9BU1NFUlRfTUVNQ01QKGhhc2gsIGV4cGVjdGVkX2hhc2gsIGhhc2hfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKworICAgICAgICAvKkFib3J0IHRoZSBoYXNoIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfQUJPUlQsICZvcGVyYXRpb24pOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKICAgICB9CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwpAQCAtMTE1LDEwNSArOTUsODggQEAKIAogaW50MzJfdCBwc2FfaGFzaF9maW5pc2hfaW5hY3RpdmVfb3BlcmF0aW9uX2hhbmRsZShzZWN1cml0eV90IGNhbGxlcikKIHsKLSAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CiAgICAgcHNhX2hhc2hfb3BlcmF0aW9uX3QgICAgb3BlcmF0aW9uOwogICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIGlucHV0ID0gMHhiZDsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICBpbnB1dF9sZW5ndGggPSAxOwogICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGFsZyA9IFBTQV9BTEdfU0hBXzI1NjsKICAgICBjaGFyICAgICAgICAgICAgICAgICAgICBoYXNoW0hBU0hfNjRCXTsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICBoYXNoX2xlbmd0aCwgaGFzaF9zaXplID0gc2l6ZW9mKGhhc2gpL3NpemVvZihoYXNoWzBdKTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzdGF0dXM7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwotICAgIGlmICh2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpICE9IFBTQV9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5JVF9GQUlMRUQ7Ci0gICAgfQorICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CiAKICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJ0ZXN0IHBzYV9oYXNoX2ZpbmlzaCB3aXRoIGluYWN0aXZlIG9wZXJhdGlvbiBoYW5kbGVcbiIsIDApOwogCisgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCiAgICAgLyogU3RhcnQgYSBtdWx0aXBhcnQgaGFzaCBvcGVyYXRpb24gKi8KICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfU0VUVVAsICZvcGVyYXRpb24sIGFsZyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKLSAgICB7Ci0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBoYXNoIHNldHVwIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7Ci0gICAgfQorICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOwogCiAgICAgLyogQWRkIGEgbWVzc2FnZSBmcmFnbWVudCB0byBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbiAqLwogICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9VUERBVEUsICZvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnB1dCwgaW5wdXRfbGVuZ3RoKTsKLSAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGhhc2ggdXBkYXRlIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7Ci0gICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnB1dCwgaW5wdXRfbGVuZ3RoKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKIAogICAgIC8qIEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGhhc2ggb2YgYSBtZXNzYWdlICovCiAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19IQVNIX0ZJTklTSCwgJm9wZXJhdGlvbiwgaGFzaCwgaGFzaF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYXNoX2xlbmd0aCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKLSAgICB7Ci0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBoYXNoIGZpbmlzaCBmYWlsZWRcbiIsIDApOwotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFzaF9sZW5ndGgpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOwogCiAgICAgLyogUmV0cnkgdGhlIG9wZXJhdGlvbiB3aXRoIGNvbXBsZXRlZCBvcGVyYXRpb24gaGFuZGxlICovCiAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19IQVNIX0ZJTklTSCwgJm9wZXJhdGlvbiwgaGFzaCwgaGFzaF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYXNoX2xlbmd0aCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCkKLSAgICB7Ci0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBoYXNoIGZpbmlzaCBzaG91bGQgaGF2ZSBmYWlsZWRcbiIsIDApOwotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFzaF9sZW5ndGgpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgLypBYm9ydCB0aGUgaGFzaCBvcGVyYXRpb24gKi8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfQUJPUlQsICZvcGVyYXRpb24pOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOwogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KIAogaW50MzJfdCBwc2FfaGFzaF9maW5pc2hfaW52YWxpZF9oYXNoX2J1ZmZlcl9zaXplKHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBwc2FfaGFzaF9vcGVyYXRpb25fdCAgICBvcGVyYXRpb247CiAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSAweGJkOwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGlucHV0X2xlbmd0aCA9IDE7CiAgICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAgYWxnID0gUFNBX0FMR19TSEFfMjU2OwogICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIGhhc2hbSEFTSF82NEJdOwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGhhc2hfbGVuZ3RoLCBoYXNoX3NpemUgPSAxMDsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzdGF0dXM7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwotICAgIGlmICh2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpICE9IFBTQV9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5JVF9GQUlMRUQ7Ci0gICAgfQorICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CiAKICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJ0ZXN0IHBzYV9oYXNoX2ZpbmlzaCB3aXRoIGludmFsaWQgaGFzaCBidWZmZXIgc2l6ZVxuIiwgMCk7CiAKKyAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKICAgICAvKiBTdGFydCBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbiAqLwogICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9TRVRVUCwgJm9wZXJhdGlvbiwgYWxnKTsKLSAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGhhc2ggc2V0dXAgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICB9CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CiAKICAgICAvKiBBZGQgYSBtZXNzYWdlIGZyYWdtZW50IHRvIGEgbXVsdGlwYXJ0IGhhc2ggb3BlcmF0aW9uICovCi0gICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19IQVNIX1VQREFURSwgJm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlucHV0LCBpbnB1dF9sZW5ndGgpOwotICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgaGFzaCB1cGRhdGUgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKLSAgICB9CisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19IQVNIX1VQREFURSwgJm9wZXJhdGlvbiwgJmlucHV0LCBpbnB1dF9sZW5ndGgpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOwogCiAgICAgLyogRmluaXNoIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgaGFzaCBvZiBhIG1lc3NhZ2UgKi8KICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfRklOSVNILCAmb3BlcmF0aW9uLCBoYXNoLCBoYXNoX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhc2hfbGVuZ3RoKTsKLSAgICBpZiAoc3RhdHVzICE9IFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMKQotICAgIHsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGhhc2ggZmluaXNoIHNob3VsZCBoYXZlIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7Ci0gICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYXNoX2xlbmd0aCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTCwgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAvKkFib3J0IHRoZSBoYXNoIG9wZXJhdGlvbiAqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9BQk9SVCwgJm9wZXJhdGlvbik7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTQvdGVzdF9jMDE0LmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNC90ZXN0X2MwMTQuaAppbmRleCBkM2VlOTNmLi4zNDhlMDdjIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNC90ZXN0X2MwMTQuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNC90ZXN0X2MwMTQuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTgsNyArMTgsNiBAQAogI2RlZmluZSBfVEVTVF9DMDE0X0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NyeXB0by5oIgotCiAjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGMwMTQpCiAjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCiAjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNC90ZXN0X2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE0L3Rlc3RfZGF0YS5oCmluZGV4IDY3MzhjNjAuLmFiZjE3ZDUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE0L3Rlc3RfZGF0YS5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE0L3Rlc3RfZGF0YS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yNywxOCArMjcsMTggQEAKICAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXM7CiB9IHRlc3RfZGF0YTsKIAotY2hhciBzaGEzODRfaGFzaFtdID0gezB4NDMsIDB4NzIsIDB4ZTMsIDB4OGEsIDB4OTIsIDB4YTIsIDB4OGIsIDB4NWQsIDB4MmMsIDB4MzksIDB4MWUsIDB4NjIsCitzdGF0aWMgY2hhciBzaGEzODRfaGFzaFtdID0gezB4NDMsIDB4NzIsIDB4ZTMsIDB4OGEsIDB4OTIsIDB4YTIsIDB4OGIsIDB4NWQsIDB4MmMsIDB4MzksIDB4MWUsIDB4NjIsCiAweDQ1LCAweDJhLCAweDg2LCAweGQ1LCAweDBlLCAweDAyLCAweDY3LCAweDIyLCAweDhiLCAweGUxLCAweDc2LCAweGM3LCAweDdkLCAweDI0LCAweDAyLCAweGVmLAogMHhmZSwgMHg5ZiwgMHhhNSwgMHgwZCwgMHhlNCwgMHgwNywgMHhiYiwgMHhiOCwgMHg1MSwgMHhiMywgMHg3ZCwgMHg1OSwgMHgwNCwgMHhhYiwgMHhhMiwgMHhkZSwKIDB4ZGUsIDB4NzQsIDB4ZGEsIDB4MmF9OwogCi1jaGFyIHNoYTUxMl9oYXNoW10gPSB7MHgyOSwgMHg2ZSwgMHgyMiwgMHg2NywgMHhkNywgMHg0YywgMHgyNywgMHg4ZCwgMHhhYSwgMHhhYSwgMHg5NCwgMHgwZCwKK3N0YXRpYyBjaGFyIHNoYTUxMl9oYXNoW10gPSB7MHgyOSwgMHg2ZSwgMHgyMiwgMHg2NywgMHhkNywgMHg0YywgMHgyNywgMHg4ZCwgMHhhYSwgMHhhYSwgMHg5NCwgMHgwZCwKIDB4MTcsIDB4YjAsIDB4Y2YsIDB4YjcsIDB4NGEsIDB4NTAsIDB4ODMsIDB4ZjgsIDB4ZTAsIDB4NjksIDB4NzIsIDB4NmQsIDB4OGMsIDB4ODQsIDB4MWMsIDB4YmUsCiAweDU5LCAweDZlLCAweDA0LCAweDMxLCAweGNiLCAweDc3LCAweDQxLCAweGE1LCAweGI1LCAweDBmLCAweDcxLCAweDY2LCAweDZjLCAweGZkLCAweDU0LCAweGJhLAogMHhjYiwgMHg3YiwgMHgwMCwgMHhhZSwgMHhhOCwgMHg5MSwgMHg0OSwgMHg5YywgMHhmNCwgMHhlZiwgMHg2YSwgMHgwMywgMHhjOCwgMHhhOCwgMHgzZiwgMHhlMywKIDB4N2MsIDB4M2YsIDB4N2IsIDB4YWZ9OwogCi10ZXN0X2RhdGEgY2hlY2sxW10gPSB7CitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0gewogeyJUZXN0IHBzYV9oYXNoX2ZpbmlzaCB3aXRoIE1EMiBhbGdvcml0aG1cbiIsCiAgUFNBX0FMR19NRDIsIDB4YmQsIDEsCiAgezB4OGMsIDB4OWMsIDB4MTcsIDB4NjYsIDB4NWQsIDB4MjUsIDB4YjMsIDB4NWYsIDB4YzQsIDB4MTMsIDB4YzQsIDB4MTgsIDB4MDUsIDB4YzYsIDB4NzksIDB4Y2Z9LApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTUvdGVzdF9jMDE1LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNS90ZXN0X2MwMTUuYwppbmRleCBiMzFmNTYwLi4wZmY2NjlhIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNS90ZXN0X2MwMTUuYworKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNS90ZXN0X2MwMTUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsMTQgKzE1LDggQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgotI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKLSNlbmRpZgotCiAjaW5jbHVkZSAidGVzdF9jMDE1LmgiCiAjaW5jbHVkZSAidGVzdF9kYXRhLmgiCiAjaW5jbHVkZSAidmFsX2NyeXB0by5oIgpAQCAtMzQsNTEgKzI4LDM4IEBACiAgICAgTlVMTCwKIH07CiAKLWludCBnX3Rlc3RfY291bnQ7CitzdGF0aWMgaW50IGdfdGVzdF9jb3VudCA9IDE7CiAKIGludDMyX3QgcHNhX2hhc2hfYWJvcnRfdGVzdChzZWN1cml0eV90IGNhbGxlcikKIHsKLSAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazEpL3NpemVvZihjaGVjazFbMF0pOwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGk7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgaSwgc3RhdHVzOwogICAgIHBzYV9oYXNoX29wZXJhdGlvbl90ICAgIG9wZXJhdGlvbjsKIAotICAgIGdfdGVzdF9jb3VudCA9IDE7Ci0KICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwotICAgIGlmICh2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpICE9IFBTQV9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5JVF9GQUlMRUQ7Ci0gICAgfQorICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQogICAgIHsKICAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CiAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CiAKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKICAgICAgICAgLyogU3RhcnQgYSBtdWx0aXBhcnQgaGFzaCBvcGVyYXRpb24gKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19IQVNIX1NFVFVQLCAmb3BlcmF0aW9uLCBjaGVjazFbaV0uYWxnKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKLSAgICAgICAgewotICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGhhc2ggc2V0dXAgZmFpbGVkXG4iLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7Ci0gICAgICAgIH0KKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CiAKICAgICAgICAgLyogQWJvcnQgYSBoYXNoIG9wZXJhdGlvbiAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfQUJPUlQsICZvcGVyYXRpb24pOwotICAgICAgICBpZiAoc3RhdHVzICE9IGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBoYXNoIGFib3J0IGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgICAgICB9CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CiAKICAgICAgICAgLyogTXVsdGlwbGUgaGFzaCBhYm9ydCBzaG91bGQgc3VjY2VlZCAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfQUJPUlQsICZvcGVyYXRpb24pOwotICAgICAgICBpZiAoc3RhdHVzICE9IGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBoYXNoIGFib3J0IGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgICAgICB9CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CiAKICAgICB9CiAKQEAgLTg3LDU2ICs2OCw0MSBAQAogCiBpbnQzMl90IHBzYV9oYXNoX2Fib3J0X2JlZm9yZV9vcGVyYXRpb25fZmluaXNoKHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBwc2FfaGFzaF9vcGVyYXRpb25fdCAgICBvcGVyYXRpb247CiAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSAweGJkOwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGlucHV0X2xlbmd0aCA9IDE7CiAgICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAgYWxnID0gUFNBX0FMR19TSEFfMjU2OwogICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIGhhc2hbSEFTSF82NEJdOwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGhhc2hfbGVuZ3RoLCBoYXNoX3NpemUgPSBzaXplb2YoaGFzaCkvc2l6ZW9mKGhhc2hbMF0pOworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1czsKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCi0gICAgaWYgKHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCkgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTklUX0ZBSUxFRDsKLSAgICB9CisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKIAogICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOwogICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIlRlc3QgcHNhX2hhc2hfZmluaXNoIGFmdGVyIGNhbGxpbmcgcHNhX2hhc2hfYWJvcnRcbiIsIDApOwogCisgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCiAgICAgLyogU3RhcnQgYSBtdWx0aXBhcnQgaGFzaCBvcGVyYXRpb24gKi8KICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfU0VUVVAsICZvcGVyYXRpb24sIGFsZyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKLSAgICB7Ci0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBoYXNoIHNldHVwIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7Ci0gICAgfQorICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOwogCiAgICAgLyogQWRkIGEgbWVzc2FnZSBmcmFnbWVudCB0byBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbiAqLwotICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9VUERBVEUsICZvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnB1dCwgaW5wdXRfbGVuZ3RoKTsKLSAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0UFNBIGhhc2ggdXBkYXRlIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7Ci0gICAgfQorICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9VUERBVEUsICZvcGVyYXRpb24sICZpbnB1dCwgaW5wdXRfbGVuZ3RoKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKIAogICAgIC8qIEFib3J0IGEgaGFzaCBvcGVyYXRpb24gKi8KICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfQUJPUlQsICZvcGVyYXRpb24pOwotICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCi0gICAgewotICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRQU0EgaGFzaCBhYm9ydCBmYWlsZWRcbiIsIDApOwotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgIH0KKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKIAogICAgIC8qIEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGhhc2ggb2YgYSBtZXNzYWdlICovCiAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19IQVNIX0ZJTklTSCwgJm9wZXJhdGlvbiwgaGFzaCwgaGFzaF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYXNoX2xlbmd0aCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCkKLSAgICB7Ci0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFBTQSBoYXNoIGZpbmlzaCBzaG91bGQgaGF2ZSBmYWlsZWRcbiIsIDApOwotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFzaF9sZW5ndGgpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOwogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE1L3Rlc3RfYzAxNS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTUvdGVzdF9jMDE1LmgKaW5kZXggMzJmN2ExZS4uYmY0MzVjMiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTUvdGVzdF9jMDE1LmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTUvdGVzdF9jMDE1LmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE4LDcgKzE4LDYgQEAKICNkZWZpbmUgX1RFU1RfQzAxNV9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKLQogI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxjMDE1KQogI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQogI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTUvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNS90ZXN0X2RhdGEuaAppbmRleCBkMDZiZjRhLi43NzYzMzkzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNS90ZXN0X2RhdGEuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNS90ZXN0X2RhdGEuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjMsNyArMjMsNyBAQAogICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1czsKIH0gdGVzdF9kYXRhOwogCi10ZXN0X2RhdGEgY2hlY2sxW10gPSB7CitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0gewogeyJUZXN0IHBzYV9oYXNoX2Fib3J0IHdpdGggTUQyIGFsZ29yaXRobVxuIiwKICBQU0FfQUxHX01EMiwgUFNBX1NVQ0NFU1MsCiB9LApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTYvc291cmNlLm1rIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTYvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMGU0M2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNi9zb3VyY2UubWsKQEAgLTAsMCArMSwyMCBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9jMDE2LmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE2L3Rlc3RfYzAxNi5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTYvdGVzdF9jMDE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlNGIyYgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE2L3Rlc3RfYzAxNi5jCkBAIC0wLDAgKzEsMTc5IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9jMDE2LmgiCisjaW5jbHVkZSAidGVzdF9kYXRhLmgiCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCitjbGllbnRfdGVzdF90IHRlc3RfYzAxNl9jcnlwdG9fbGlzdFtdID0geworICAgIE5VTEwsCisgICAgcHNhX2dlbmVyYXRlX2tleV90ZXN0LAorICAgIHBzYV9nZW5lcmF0ZV9rZXlfbmVnYXRpdmVfdGVzdCwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludCAgICAgICBnX3Rlc3RfY291bnQgPSAxOworc3RhdGljIHVpbnQ4X3QgICBkYXRhW0JVRkZFUl9TSVpFXTsKKworaW50MzJfdCBwc2FfZ2VuZXJhdGVfa2V5X3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazEpL3NpemVvZihjaGVjazFbMF0pOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGksIGxlbmd0aDsKKyAgICBwc2Ffa2V5X3BvbGljeV90ICAgICAgICBwb2xpY3k7CisgICAgcHNhX2tleV90eXBlX3QgICAgICAgICAga2V5X3R5cGU7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgYml0czsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzdGF0dXM7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgPT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAgICAqLworICAgICAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfYWxnKTsKKworICAgICAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2sxW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5iaXRzLCAmY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICAgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCAmcG9saWN5KTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworICAgICAgICB9CisKKyAgICAgICAgLyogR2VuZXJhdGUgYSBrZXkgb3Iga2V5IHBhaXIgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFURV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X3R5cGUsIGNoZWNrMVtpXS5iaXRzLCBjaGVjazFbaV0uZXh0cmEsIGNoZWNrMVtpXS5leHRyYV9zaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cyAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qIEdldCBiYXNpYyBtZXRhZGF0YSBhYm91dCBhIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFVF9LRVlfSU5GT1JNQVRJT04sIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAma2V5X3R5cGUsICZiaXRzKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoa2V5X3R5cGUsIGNoZWNrMVtpXS5rZXlfdHlwZSwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoYml0cywgY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGgsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworCisgICAgICAgIC8qIEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRVhQT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVRkZFUl9TSVpFLCAmbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChsZW5ndGgsIGNoZWNrMVtpXS5leHBlY3RlZF9rZXlfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworaW50MzJfdCBwc2FfZ2VuZXJhdGVfa2V5X25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazIpL3NpemVvZihjaGVjazJbMF0pOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGk7CisgICAgcHNhX2tleV9wb2xpY3lfdCAgICAgICAgcG9saWN5OworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1czsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCisgICAgeworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2dlbmVyYXRlX2tleSB3aXRoIHVuYWxsb2NhdGVkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIEdlbmVyYXRlIGEga2V5IG9yIGtleSBwYWlyICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVEVfS0VZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV90eXBlLCBjaGVjazJbaV0uYml0cywgY2hlY2syW2ldLmV4dHJhLCBjaGVjazJbaV0uZXh0cmFfc2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2dlbmVyYXRlX2tleSB3aXRoIHplcm8gYXMga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogR2VuZXJhdGUgYSBrZXkgb3Iga2V5IHBhaXIgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFURV9LRVksIDAsIGNoZWNrMltpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5iaXRzLCBjaGVjazJbaV0uZXh0cmEsIGNoZWNrMltpXS5leHRyYV9zaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfZ2VuZXJhdGVfa2V5IHdpdGggcHJlLW9jY3VwaWVkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgIC8qIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazJbaV0udXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnKTsKKworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMltpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5iaXRzLCAmY2hlY2syW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMltpXS5rZXlfaGFuZGxlLCAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAgICAgLyogR2VuZXJhdGUgYSBrZXkgb3Iga2V5IHBhaXIgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFURV9LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X3R5cGUsIGNoZWNrMltpXS5iaXRzLCBjaGVjazJbaV0uZXh0cmEsIGNoZWNrMltpXS5leHRyYV9zaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgLyogR2VuZXJhdGUgYSBrZXkgb3Iga2V5IHBhaXIgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFURV9LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X3R5cGUsIGNoZWNrMltpXS5iaXRzLCBjaGVjazJbaV0uZXh0cmEsIGNoZWNrMltpXS5leHRyYV9zaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfT0NDVVBJRURfU0xPVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9nZW5lcmF0ZV9rZXkgd2l0aCBkZXN0cm95ZWQga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2syW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKworICAgICAgICAvKiBHZW5lcmF0ZSBhIGtleSBvciBrZXkgcGFpciAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRFX0tFWSwgY2hlY2syW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfdHlwZSwgY2hlY2syW2ldLmJpdHMsIGNoZWNrMltpXS5leHRyYSwgY2hlY2syW2ldLmV4dHJhX3NpemUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOworICAgIH0KKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE2L3Rlc3RfYzAxNi5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTYvdGVzdF9jMDE2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5N2I5MQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE2L3Rlc3RfYzAxNi5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX0MwMTZfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0MwMTZfQ0xJRU5UX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGMwMTYpCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfYzAxNl9jcnlwdG9fbGlzdFtdOworCitpbnQzMl90IHBzYV9nZW5lcmF0ZV9rZXlfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CitpbnQzMl90IHBzYV9nZW5lcmF0ZV9rZXlfbmVnYXRpdmVfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CisjZW5kaWYgLyogX1RFU1RfQzAxNl9DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE2L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTYvdGVzdF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyY2QyMwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE2L3Rlc3RfZGF0YS5oCkBAIC0wLDAgKzEsMTE3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgYml0czsKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqZXh0cmE7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgZXh0cmFfc2l6ZTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBleHBlY3RlZF9iaXRfbGVuZ3RoOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGV4cGVjdGVkX2tleV9sZW5ndGg7CisgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKKyNpZmRlZiBGVVRVUkVfU1VQUE9SVAorc3RhdGljIHVpbnQzMl90IHJzYV9leHRyYSA9IDM7CisjZW5kaWYKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3siVGVzdCBwc2FfZ2VuZXJhdGVfa2V5IDE2IEJ5dGUgQUVTXG4iLCAxLCBQU0FfS0VZX1RZUEVfQUVTLAorIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKKyBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCAgTlVMTCwgMCwKKyBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9nZW5lcmF0ZV9rZXkgMjQgQnl0ZSBBRVNcbiIsIDIsIFBTQV9LRVlfVFlQRV9BRVMsCisgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAorIEJZVEVTX1RPX0JJVFMoQUVTXzI0Ql9LRVlfU0laRSksICBOVUxMLCAwLAorIEJZVEVTX1RPX0JJVFMoQUVTXzI0Ql9LRVlfU0laRSksIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2dlbmVyYXRlX2tleSAzMiBCeXRlIEFFU1xuIiwgMywgUFNBX0tFWV9UWVBFX0FFUywKKyBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsCisgQllURVNfVE9fQklUUyhBRVNfMzJCX0tFWV9TSVpFKSwgIE5VTEwsIDAsCisgQllURVNfVE9fQklUUyhBRVNfMzJCX0tFWV9TSVpFKSwgQUVTXzMyQl9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfZ2VuZXJhdGVfa2V5IHdpdGggREVTIDY0IGJpdCBrZXlcbiIsIDQsIFBTQV9LRVlfVFlQRV9ERVMsCisgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAorIEJZVEVTX1RPX0JJVFMoREVTXzhCX0tFWV9TSVpFKSwgTlVMTCwgMCwKKyBCWVRFU19UT19CSVRTKERFU184Ql9LRVlfU0laRSksIERFU184Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfZ2VuZXJhdGVfa2V5IHdpdGggVHJpcGxlIERFUyAyLUtleVxuIiwgNSwgUFNBX0tFWV9UWVBFX0RFUywKKyBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsCisgQllURVNfVE9fQklUUyhERVMzXzJLRVlfU0laRSksIE5VTEwsIDAsCisgQllURVNfVE9fQklUUyhERVMzXzJLRVlfU0laRSksIERFUzNfMktFWV9TSVpFLCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9nZW5lcmF0ZV9rZXkgd2l0aCBUcmlwbGUgREVTIDMtS2V5XG4iLCA2LCBQU0FfS0VZX1RZUEVfREVTLAorIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKKyBCWVRFU19UT19CSVRTKERFUzNfM0tFWV9TSVpFKSwgTlVMTCwgMCwKKyBCWVRFU19UT19CSVRTKERFUzNfM0tFWV9TSVpFKSwgREVTM18zS0VZX1NJWkUsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2dlbmVyYXRlX2tleSB3aXRoIE51bGwgZXh0cmEgYW5kIE5vbi1aZXJvIGV4dHJhIHNpemVcbiIsIDcsIFBTQV9LRVlfVFlQRV9BRVMsCisgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLAorIEJZVEVTX1RPX0JJVFMoQUVTXzMyQl9LRVlfU0laRSksIE5VTEwsIHNpemVvZih1aW50MzJfdCksCisgMCwgMCwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCisKKyNpZmRlZiBGVVRVUkVfU1VQUE9SVAoreyJUZXN0IHBzYV9nZW5lcmF0ZV9rZXkgd2l0aCBSU0EgMjA0OCBLZXlwYWlyXG4iLCA4LCBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIsCisgUFNBX0tFWV9VU0FHRV9FWFBPUlQgfCBQU0FfS0VZX1VTQUdFX1NJR04gfCBQU0FfS0VZX1VTQUdFX1ZFUklGWSwgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVcsCisgMTAyNCwgTlVMTCwgMCwKKyAxMDI0LCAxMTkzLCBQU0FfU1VDQ0VTUworfSwKKyNlbmRpZgorCit7IlRlc3QgcHNhX2dlbmVyYXRlX2tleSB3aXRoIEVDQyBLZXlQYWlyXG4iLCA5LAorIFBTQV9LRVlfVFlQRV9FQ0NfS0VZUEFJUl9CQVNFIHwgUFNBX0VDQ19DVVJWRV9TRUNQMTkyUjEsCisgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OLAorIDE5MiwgTlVMTCwgMCwKKyAxOTIsIDk4LCBQU0FfU1VDQ0VTUworfSwKKworI2lmZGVmIEZVVFVSRV9TVVBQT1JUCit7IlRlc3QgcHNhX2dlbmVyYXRlX2tleSB3aXRoIE5vbi1OdWxsIGV4dHJhIGZvciAzMiBCeXRlIEFFUyBrZXlcbiIsIDEwLCBQU0FfS0VZX1RZUEVfQUVTLAorIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKKyBCWVRFU19UT19CSVRTKEFFU18zMkJfS0VZX1NJWkUpLCAmcnNhX2V4dHJhLCBzaXplb2YodWludDMyX3QpLAorIDAsIDAsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorI2VuZGlmCisKK3siVGVzdCBwc2FfZ2VuZXJhdGVfa2V5IHdpdGggUlNBIDEwMjQgUHVibGljIGtleVxuIiwgMTEsIFBTQV9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSwKKyBQU0FfS0VZX1VTQUdFX0VYUE9SVCB8IFBTQV9LRVlfVVNBR0VfU0lHTiB8IFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOX1JBVywKKyAxMDI0LCBOVUxMLCAwLAorIDEwMjQsIDExOTMsIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVECit9LAorfTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazJbXSA9IHsKK3siVGVzdCBwc2FfZ2VuZXJhdGVfa2V5IG5lZ2F0aXZlIGNhc2VzXG4iLCAxMiwgUFNBX0tFWV9UWVBFX0FFUywKKyBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsCisgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgIE5VTEwsIDAsCisgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKK30sCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTYvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTYvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NTdkZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNi90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAxNi5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCAxNikKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBnZW5lcmF0b3IgZnVuY3Rpb25zIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9ISUdIX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY3J5cHRvX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2MwMTZfY3J5cHRvX2xpc3QsIEZBTFNFKTsKKworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRlJFRSk7CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE3L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE3L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmIxNWZkCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTcvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfYzAxNy5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNy90ZXN0X2MwMTcuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE3L3Rlc3RfYzAxNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMzg3YjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNy90ZXN0X2MwMTcuYwpAQCAtMCwwICsxLDc0IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9jMDE3LmgiCisjaW5jbHVkZSAidGVzdF9kYXRhLmgiCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCitjbGllbnRfdGVzdF90IHRlc3RfYzAxN19jcnlwdG9fbGlzdFtdID0geworICAgIE5VTEwsCisgICAgcHNhX2dlbmVyYXRlX3JhbmRvbV90ZXN0LAorICAgIE5VTEwsCit9OworCitzdGF0aWMgaW50IGdfdGVzdF9jb3VudCA9IDE7CisKK2ludDMyX3QgcHNhX2dlbmVyYXRlX3JhbmRvbV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBpLCBqLCBkYXRhX3N1bTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBkYXRhW0JVRkZFUl9TSVpFXSA9IHswfTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzdGF0dXM7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogR2VuZXJhdGUgcmFuZG9tIGJ5dGVzICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVEVfUkFORE9NLCBkYXRhLCBjaGVjazFbaV0uc2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBkYXRhX3N1bSA9IDA7CisgICAgICAgIC8qIENoZWNrIHRoYXQgaWYgZ2VuZXJhdGVkIGRhdGEgYXJlIHplcm8gKi8KKyAgICAgICAgZm9yIChqID0gMDsgaiA8IGNoZWNrMVtpXS5zaXplOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGFfc3VtICs9IGRhdGFbal07CisgICAgICAgICAgICBkYXRhW2pdID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaGVjazFbaV0uc2l6ZSAhPSAwKQorICAgICAgICAgICAgVEVTVF9BU1NFUlRfTk9UX0VRVUFMKGRhdGFfc3VtLCAwLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZGF0YV9zdW0sIDAsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworICAgIH0KKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNy90ZXN0X2MwMTcuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE3L3Rlc3RfYzAxNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOGM0ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNy90ZXN0X2MwMTcuaApAQCAtMCwwICsxLDMwIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9DMDE3X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9DMDE3X0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxjMDE3KQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMTdfY3J5cHRvX2xpc3RbXTsKKworaW50MzJfdCBwc2FfZ2VuZXJhdGVfcmFuZG9tX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOworI2VuZGlmIC8qIF9URVNUX0MwMTdfQ0xJRU5UX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNy90ZXN0X2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE3L3Rlc3RfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMGM0NmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNy90ZXN0X2RhdGEuaApAQCAtMCwwICsxLDU2IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBzaXplOworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1czsKK30gdGVzdF9kYXRhOworCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0geworeyJUZXN0IHBzYV9nZW5lcmF0ZV9yYW5kb20gdG8gZ2V0IDAgQnl0ZSBkYXRhXG4iLCAwLCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9nZW5lcmF0ZV9yYW5kb20gdG8gZ2V0IDE2IEJ5dGUgZGF0YVxuIiwgMTYsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2dlbmVyYXRlX3JhbmRvbSB0byBnZXQgMjQgQnl0ZSBkYXRhXG4iLCAyNCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfZ2VuZXJhdGVfcmFuZG9tIHRvIGdldCAzMiBCeXRlIGRhdGFcbiIsIDMyLCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9nZW5lcmF0ZV9yYW5kb20gdG8gZ2V0IDY0IEJ5dGUgZGF0YVxuIiwgNjQsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2dlbmVyYXRlX3JhbmRvbSB0byBnZXQgMTI4IEJ5dGUgZGF0YVxuIiwgMTI4LCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9nZW5lcmF0ZV9yYW5kb20gdG8gZ2V0IDI1NiBCeXRlIGRhdGFcbiIsIDI1NiwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfZ2VuZXJhdGVfcmFuZG9tIHRvIGdldCA1MTIgQnl0ZSBkYXRhXG4iLCA1MTIsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2dlbmVyYXRlX3JhbmRvbSB0byBnZXQgMTAwMCBCeXRlIGRhdGFcbiIsIDEwMCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfZ2VuZXJhdGVfcmFuZG9tIHRvIGdldCAxMDI0IEJ5dGUgZGF0YVxuIiwgMTAyNCwgUFNBX1NVQ0NFU1MKK30sCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTcvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTcvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMGQyZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNy90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAxNy5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCAxNykKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBnZW5lcmF0b3IgZnVuY3Rpb25zIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9ISUdIX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY3J5cHRvX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2MwMTdfY3J5cHRvX2xpc3QsIEZBTFNFKTsKKworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRlJFRSk7CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE4L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE4L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzhmZjIwCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTgvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfYzAxOC5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOC90ZXN0X2MwMTguYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE4L3Rlc3RfYzAxOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNzcwODIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOC90ZXN0X2MwMTguYwpAQCAtMCwwICsxLDE0NyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAxOC5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMThfY3J5cHRvX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHBzYV9nZW5lcmF0b3JfcmVhZF90ZXN0LAorICAgIE5VTEwsCit9OworCitzdGF0aWMgaW50ICAgICAgZ190ZXN0X2NvdW50ID0gMTsKK3N0YXRpYyB1aW50OF90ICBkYXRhW0JVRkZFUl9TSVpFX0hJR0hdOworCitpbnQzMl90IHBzYV9nZW5lcmF0b3JfcmVhZF90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBpLCBqLCBkYXRhX3N1bSwgcmVtYWluaW5nX3NpemU7CisgICAgcHNhX2tleV9wb2xpY3lfdCAgICAgICAgcG9saWN5OworICAgIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QgIGdlbmVyYXRvciwgaW52YWxpZF9nZW5lcmF0b3I7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgc3RhdHVzOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgbWVtc2V0KCZnZW5lcmF0b3IsIDAsIHNpemVvZihnZW5lcmF0b3IpKTsKKyAgICAgICAgbWVtc2V0KCZpbnZhbGlkX2dlbmVyYXRvciwgMHhERUFERUFELCBzaXplb2YoaW52YWxpZF9nZW5lcmF0b3IpKTsKKyAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOworCisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2sxW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9sZW5ndGgsICZjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfdHlwZSwgY2hlY2sxW2ldLmtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIC8qIFNldCB1cCBhIGtleSBkZXJpdmF0aW9uIG9wZXJhdGlvbi4gVXNpbmcgdGhpcyBmdW5jdGlvbiB0byBpbml0aWFsaXplIHRoZSBnZW5lcmF0ZSBhcworICAgICAgICAgKiBYT1Igb3IgUFJORyBnZW5lcmF0b3IgaW5pdGlhbGl6YXRpb24gaXMgbm90IGltcGxlbWVudGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfREVSSVZBVElPTiwgJmdlbmVyYXRvciwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfYWxnLCAmY2hlY2sxW2ldLnNhbHQsIGNoZWNrMVtpXS5zYWx0X2xlbmd0aCwgJmNoZWNrMVtpXS5sYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmxhYmVsX2xlbmd0aCwgY2hlY2sxW2ldLmNhcGFjaXR5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAgICAgLyogUmVhZCBzb21lIGRhdGEgZnJvbSBhIGdlbmVyYXRvciAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9SRUFELCAmZ2VuZXJhdG9yLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uc2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEFib3J0IGEgZ2VuZXJhdG9yICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9BQk9SVCwgJmdlbmVyYXRvcik7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZGF0YV9zdW0gPSAwOworICAgICAgICAvKiBDaGVjayB0aGF0IGlmIGdlbmVyYXRlZCBkYXRhIGFyZSB6ZXJvICovCisgICAgICAgIGZvciAoaiA9IDA7IGogPCBjaGVjazFbaV0uc2l6ZTsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhX3N1bSArPSBkYXRhW2pdOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX05PVF9FUVVBTChkYXRhX3N1bSwgMCwgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisKKyAgICAgICAgcmVtYWluaW5nX3NpemUgPSBjaGVjazFbaV0uY2FwYWNpdHkgLSBjaGVjazFbaV0uc2l6ZTsKKyAgICAgICAgaWYgKHJlbWFpbmluZ19zaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogUmVhZCBzb21lIGRhdGEgZnJvbSBhIGdlbmVyYXRvciAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfUkVBRCwgJmdlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHJlbWFpbmluZ19zaXplKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKKworICAgICAgICAgICAgZGF0YV9zdW0gPSAwOworICAgICAgICAgICAgLyogQ2hlY2sgdGhhdCBpZiBnZW5lcmF0ZWQgZGF0YSBhcmUgemVybyAqLworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHJlbWFpbmluZ19zaXplOyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YV9zdW0gKz0gZGF0YVtqXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9OT1RfRVFVQUwoZGF0YV9zdW0sIDAsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTEpKTsKKworICAgICAgICAgICAgLyogUmVhZCBzb21lIGRhdGEgZnJvbSBhIGdlbmVyYXRvciAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfUkVBRCwgJmdlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIGNoZWNrMVtpXS5zaXplKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9DQVBBQ0lUWSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMikpOworICAgICAgICB9CisKKyAgICAgICAgLyogUmVhZCBkYXRhIHVzaW5nIGludmFsaWQgZ2VuZXJhdG9yIGhhbmRsZSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9SRUFELCAmaW52YWxpZF9nZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgIGRhdGEsIDEpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9CQURfU1RBVEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTMpKTsKKworICAgICAgICAvKiBBYm9ydCBhIGdlbmVyYXRvciAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9BQk9SVCwgJmdlbmVyYXRvcik7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTgvdGVzdF9jMDE4LmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOC90ZXN0X2MwMTguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGY3MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTgvdGVzdF9jMDE4LmgKQEAgLTAsMCArMSwzMCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfQzAxOF9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfQzAxOF9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzAxOCkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9jMDE4X2NyeXB0b19saXN0W107CisKK2ludDMyX3QgcHNhX2dlbmVyYXRvcl9yZWFkX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOworI2VuZGlmIC8qIF9URVNUX0MwMThfQ0xJRU5UX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOC90ZXN0X2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE4L3Rlc3RfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MjQzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOC90ZXN0X2RhdGEuaApAQCAtMCwwICsxLDkwIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzMyXTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgc2FsdFsxNl07CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgc2FsdF9sZW5ndGg7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgbGFiZWxbMTZdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGxhYmVsX2xlbmd0aDsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBjYXBhY2l0eTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBzaXplOworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1czsKK30gdGVzdF9kYXRhOworCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0geworLyogQ292ZXJzIHRoZSBmb2xsb3dpbmcgY2FzZXMKKyAqIC0gMTYgQnl0ZSBrZXkKKyAqIC0gU0hBIDI1NgorICogLSBPdXRwdXQgc2l6ZSBsZXNzIHRoYW4gZ2VuZXJhdG9yIGNhcGFjaXR5CisgKi8KK3siVGVzdCBwc2FfZ2VuZXJhdG9yX3JlYWQgdG8gZ2V0IDE2IEJ5dGUgZGF0YSB3aXRoIFNIQS0yNTZcbiIsIDEsIFBTQV9LRVlfVFlQRV9ERVJJVkUsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5fSwKKyBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0RFUklWRSwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NiksCisgezB9LCAwLCB7MH0sIDAsIDMyLAorIDE2LCBQU0FfU1VDQ0VTUworfSwKKworLyogQ292ZXJzIHRoZSBmb2xsb3dpbmcgY2FzZXMKKyAqIC0gMzIgQnl0ZSBrZXkKKyAqIC0gU0hBIDUxMgorICogLSBPdXRwdXQgc2l6ZSBlcXVhbCB0byBnZW5lcmF0b3IgY2FwYWNpdHkKKyAqLworeyJUZXN0IHBzYV9nZW5lcmF0b3JfcmVhZCB0byBnZXQgMzIgQnl0ZSBkYXRhIHdpdGggU0hBLTUxMlxuIiwgMiwgUFNBX0tFWV9UWVBFX0RFUklWRSwKK3sweEVBLCAweEQ1LCAweEU2LCAweEM4LCAweDUxLCAweEY5LCAweEVDLCAweEJCLCAweDlCLCAweDU3LCAweDdDLCAweEVELCAweEQyLAorIDB4NEIsIDB4ODIsIDB4ODQsIDB4OUYsIDB4OUYsIDB4RTYsIDB4NzMsIDB4MjEsIDB4M0QsIDB4MUEsIDB4MDUsIDB4QzksIDB4RUQsCisgMHhERiwgMHgyNSwgMHgxNywgMHg2OCwgMHg4NiwgMHhBRX0sCisgQUVTXzMyQl9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9ERVJJVkUsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV81MTIpLAorIHswfSwgMCwgezB9LCAwLCA2NCwKKyA2NCwgUFNBX1NVQ0NFU1MKK30sCisKKy8qIENvdmVycyB0aGUgZm9sbG93aW5nIGNhc2VzCisgKiAtIDggQnl0ZSBLZXkKKyAqIC0gU0hBIDEKKyAqIC0gT3V0cHV0IHNpemUgZ3JlYXRlciB0aGFuIHRoZSBnZW5lcmF0b3IgY2FwYWNpdHkKKyAqLworeyJUZXN0IHBzYV9nZW5lcmF0b3JfcmVhZCB0byBnZXQgOCBCeXRlIGRhdGEgd2l0aCBTSEEtMVxuIiwgMywgUFNBX0tFWV9UWVBFX0RFUklWRSwKK3sweDcwLCAweDI0LCAweDU1LCAweDBDLCAweDE0LCAweDlELCAweEVELCAweDI5fSwKKyBERVNfOEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfREVSSVZFLCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMSksCisgezB9LCAwLCB7MH0sIDAsIDY0LAorIDcwLCBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX0NBUEFDSVRZCit9LAorCit7IlRlc3QgcHNhX2dlbmVyYXRvcl9yZWFkIHRvIHJlcXVlc3QgbWF4aW11bSBjYXBhY2l0eVxuIiwgNCwgUFNBX0tFWV9UWVBFX0RFUklWRSwKK3sweDcwLCAweDI0LCAweDU1LCAweDBDLCAweDE0LCAweDlELCAweEVELCAweDI5fSwKKyBERVNfOEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfREVSSVZFLCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMSksCisgezB9LCAwLCB7MH0sIDAsICgyNTUgKiAyMCksCisgKDI1NSAqIDIwKSwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfZ2VuZXJhdG9yX3JlYWQgdG8gcmVxdWVzdCBtYXhpbXVtIGNhcGFjaXR5ICsxXG4iLCA1LCBQU0FfS0VZX1RZUEVfREVSSVZFLAorezB4NzAsIDB4MjQsIDB4NTUsIDB4MEMsIDB4MTQsIDB4OUQsIDB4RUQsIDB4Mjl9LAorIERFU184Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9ERVJJVkUsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8xKSwKKyB7MH0sIDAsIHswfSwgMCwgKDI1NSAqIDIwKSwKKyAoKDI1NSAqIDIwKSArIDEpLCBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX0NBUEFDSVRZCit9LAorfTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE4L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE4L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWU3ZjJkCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTgvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2MwMTguaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9DUllQVE9fQkFTRSwgMTgpCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBjcnlwdG8gZ2VuZXJhdG9yIGZ1bmN0aW9ucyBBUElzXG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NyeXB0b19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9jMDE4X2NyeXB0b19saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0ZSRUUpOworICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOS9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOS9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1NzI3NQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE5L3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2MwMTkuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTkvdGVzdF9jMDE5LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOS90ZXN0X2MwMTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmVhZGM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTkvdGVzdF9jMDE5LmMKQEAgLTAsMCArMSwxMjIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2MwMTkuaCIKKyNpbmNsdWRlICJ0ZXN0X2RhdGEuaCIKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9jMDE5X2NyeXB0b19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBwc2FfZ2V0X2dlbmVyYXRvcl9jYXBhY2l0eV90ZXN0LAorICAgIE5VTEwsCit9OworCitzdGF0aWMgaW50ICAgICAgIGdfdGVzdF9jb3VudCA9IDE7CitzdGF0aWMgdWludDhfdCAgIGRhdGFbQlVGRkVSX1NJWkVdOworCitpbnQzMl90IHBzYV9nZXRfZ2VuZXJhdG9yX2NhcGFjaXR5X3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazEpL3NpemVvZihjaGVjazFbMF0pOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGksIHJlbWFpbmluZ19zaXplOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGNhcGFjaXR5OworICAgIHBzYV9rZXlfcG9saWN5X3QgICAgICAgIHBvbGljeTsKKyAgICBwc2FfY3J5cHRvX2dlbmVyYXRvcl90ICBnZW5lcmF0b3I7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgc3RhdHVzOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgbWVtc2V0KCZnZW5lcmF0b3IsIDAsIHNpemVvZihnZW5lcmF0b3IpKTsKKyAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOworCisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2sxW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9sZW5ndGgsICZjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfdHlwZSwgY2hlY2sxW2ldLmtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIC8qIFNldCB1cCBhIGtleSBkZXJpdmF0aW9uIG9wZXJhdGlvbi4gVXNpbmcgdGhpcyBmdW5jdGlvbiB0byBpbml0aWFsaXplIHRoZSBnZW5lcmF0ZSBhcworICAgICAgICAgKiBYT1Igb3IgUFJORyBnZW5lcmF0b3IgaW5pdGlhbGl6YXRpb24gaXMgbm90IGltcGxlbWVudGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfREVSSVZBVElPTiwgJmdlbmVyYXRvciwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfYWxnLCBjaGVjazFbaV0uc2FsdCwgY2hlY2sxW2ldLnNhbHRfbGVuZ3RoLCBjaGVjazFbaV0ubGFiZWwsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5sYWJlbF9sZW5ndGgsIGNoZWNrMVtpXS5jYXBhY2l0eSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgIC8qIFJldHJpZXZlIHRoZSBjdXJyZW50IGNhcGFjaXR5IG9mIGEgZ2VuZXJhdG9yICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0dFTkVSQVRPUl9DQVBBQ0lUWSwgJmdlbmVyYXRvciwgJmNhcGFjaXR5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cyAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgLyogQWJvcnQgYSBnZW5lcmF0b3IgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVE9SX0FCT1JULCAmZ2VuZXJhdG9yKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChjYXBhY2l0eSwgY2hlY2sxW2ldLmNhcGFjaXR5LCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKworICAgICAgICAvKiBHZW5lcmF0ZSByYW5kb20gYnl0ZXMgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfUkVBRCwgJmdlbmVyYXRvciwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLnNpemUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CisKKyAgICAgICAgcmVtYWluaW5nX3NpemUgPSBjaGVjazFbaV0uY2FwYWNpdHkgLSBjaGVjazFbaV0uc2l6ZTsKKworICAgICAgICAvKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBjYXBhY2l0eSBvZiBhIGdlbmVyYXRvciAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFVF9HRU5FUkFUT1JfQ0FQQUNJVFksICZnZW5lcmF0b3IsICZjYXBhY2l0eSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTEpKTsKKworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChjYXBhY2l0eSwgcmVtYWluaW5nX3NpemUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTIpKTsKKworICAgICAgICAvKiBBYm9ydCBhIGdlbmVyYXRvciAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9BQk9SVCwgJmdlbmVyYXRvcik7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTkvdGVzdF9jMDE5LmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOS90ZXN0X2MwMTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTI5MzY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTkvdGVzdF9jMDE5LmgKQEAgLTAsMCArMSwzMCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfQzAxOV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfQzAxOV9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzAxOSkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9jMDE5X2NyeXB0b19saXN0W107CisKK2ludDMyX3QgcHNhX2dldF9nZW5lcmF0b3JfY2FwYWNpdHlfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CisjZW5kaWYgLyogX1RFU1RfQzAxOV9DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE5L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTkvdGVzdF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliY2MxZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE5L3Rlc3RfZGF0YS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbNzVdOworICAgIHBzYV9rZXlfaGFuZGxlX3QgICAgICAgIGtleV9oYW5kbGU7CisgICAgcHNhX2tleV90eXBlX3QgICAgICAgICAga2V5X3R5cGU7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAga2V5X2RhdGFbMzJdOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGtleV9sZW5ndGg7CisgICAgcHNhX2tleV91c2FnZV90ICAgICAgICAgdXNhZ2U7CisgICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAga2V5X2FsZzsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBzYWx0WzE2XTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBzYWx0X2xlbmd0aDsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBsYWJlbFsxNl07CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgbGFiZWxfbGVuZ3RoOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGNhcGFjaXR5OworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIHNpemU7CisgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2sxW10gPSB7CisvKiBDb3ZlcnMgdGhlIGZvbGxvd2luZyBjYXNlcworICogLSAxNiBCeXRlIGtleQorICogLSBTSEEgMjU2CisgKiAtIE91dHB1dCBzaXplIGxlc3MgdGhhbiBnZW5lcmF0b3IgY2FwYWNpdHkKKyAqLworeyJUZXN0IHBzYV9nZW5lcmF0b3JfZ2V0X2NhcGFjaXR5IHRvIGdldCAxNiBCeXRlIGRhdGEgd2l0aCBTSEEtMjU2XG4iLCAxLCBQU0FfS0VZX1RZUEVfREVSSVZFLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOX0sCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9ERVJJVkUsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpLAorIHswfSwgMCwgezB9LCAwLCAzMiwKKyAxNiwgUFNBX1NVQ0NFU1MKK30sCisKKy8qIENvdmVycyB0aGUgZm9sbG93aW5nIGNhc2VzCisgKiAtIDMyIEJ5dGUga2V5CisgKiAtIFNIQSA1MTIKKyAqIC0gT3V0cHV0IHNpemUgZXF1YWwgdG8gZ2VuZXJhdG9yIGNhcGFjaXR5CisgKi8KK3siVGVzdCBwc2FfZ2VuZXJhdG9yX2dldF9jYXBhY2l0eSB0byBnZXQgMzIgQnl0ZSBkYXRhIHdpdGggU0hBLTUxMlxuIiwgMiwgUFNBX0tFWV9UWVBFX0RFUklWRSwKK3sweEVBLCAweEQ1LCAweEU2LCAweEM4LCAweDUxLCAweEY5LCAweEVDLCAweEJCLCAweDlCLCAweDU3LCAweDdDLCAweEVELCAweEQyLAorIDB4NEIsIDB4ODIsIDB4ODQsIDB4OUYsIDB4OUYsIDB4RTYsIDB4NzMsIDB4MjEsIDB4M0QsIDB4MUEsIDB4MDUsIDB4QzksIDB4RUQsCisgMHhERiwgMHgyNSwgMHgxNywgMHg2OCwgMHg4NiwgMHhBRX0sCisgQUVTXzMyQl9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9ERVJJVkUsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV81MTIpLAorIHswfSwgMCwgezB9LCAwLCA2NCwKKyA2NCwgUFNBX1NVQ0NFU1MKK30sCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTkvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTkvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYzViMTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOS90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAxOS5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCAxOSkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBnZW5lcmF0b3IgZnVuY3Rpb25zIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9ISUdIX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY3J5cHRvX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2MwMTlfY3J5cHRvX2xpc3QsIEZBTFNFKTsKKworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRlJFRSk7CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIwL3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIwL3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjY2NWEyCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjAvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfYzAyMC5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMC90ZXN0X2MwMjAuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIwL3Rlc3RfYzAyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYTlmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMC90ZXN0X2MwMjAuYwpAQCAtMCwwICsxLDMwNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAyMC5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKworI2RlZmluZSAgU0xPVF8xICAgICAwCisjZGVmaW5lICBTTE9UXzIgICAgIDEKKyNkZWZpbmUgIFNMT1RfMyAgICAgMgorI2RlZmluZSAgU0xPVF80ICAgICAzCisKK2NsaWVudF90ZXN0X3QgdGVzdF9jMDIwX2NyeXB0b19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBwc2FfZ2VuZXJhdG9yX2ltcG9ydF9rZXlfdGVzdCwKKyAgICBwc2FfZ2VuZXJhdG9yX2ltcG9ydF9rZXlfbmVnYXRpdmVfdGVzdCwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludCAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCA9IDE7CitzdGF0aWMgdWludDhfdCAgICAgICAgICAgICAgICAgZGF0YVtCVUZGRVJfU0laRV07CitzdGF0aWMgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCAgZ2VuZXJhdG9yOworCitpbnQzMl90IHBzYV9nZW5lcmF0b3JfaW1wb3J0X2tleV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBpLCBqLCBkYXRhX3N1bSwgcmVtYWluaW5nX3NpemUsIGxlbmd0aCA9IDA7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgc2FsdCA9IDAsIGxhYmVsID0gMDsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBzYWx0X2xlbmd0aCA9IDAsIGxhYmVsX2xlbmd0aCA9IDA7CisgICAgcHNhX2tleV9wb2xpY3lfdCAgICAgICAgcG9saWN5OworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1czsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCisgICAgeworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgICAgIG1lbXNldCgmZ2VuZXJhdG9yLCAwLCBzaXplb2YoZ2VuZXJhdG9yKSk7CisgICAgICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCisgICAgICAgIC8qIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazFbaV0udXNhZ2VbU0xPVF8xXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZ1tTTE9UXzFdKTsKKworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMVtpXS5rZXlfdHlwZVtTTE9UXzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfbGVuZ3RoLCAmY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF8xXSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF8xXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZVtTTE9UXzFdLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X3R5cGVbU0xPVF8xXSwgY2hlY2sxW2ldLmtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIC8qIFNldCB1cCBhIGtleSBkZXJpdmF0aW9uIG9wZXJhdGlvbi4gVXNpbmcgdGhpcyBmdW5jdGlvbiB0byBpbml0aWFsaXplIHRoZSBnZW5lcmF0ZSBhcworICAgICAgICAgKiBYT1Igb3IgUFJORyBnZW5lcmF0b3IgaW5pdGlhbGl6YXRpb24gaXMgbm90IGltcGxlbWVudGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfREVSSVZBVElPTiwgJmdlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF8xXSwgIGNoZWNrMVtpXS5rZXlfYWxnW1NMT1RfMV0sICZzYWx0LCBzYWx0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgJmxhYmVsLCBsYWJlbF9sZW5ndGgsIGNoZWNrMVtpXS5jYXBhY2l0eSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZVtTTE9UXzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfYWxnW1NMT1RfMl0pOworCisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2sxW2ldLmtleV90eXBlW1NMT1RfMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfbGVuZ3RoLCAmY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF8yXSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF8yXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgIC8qIENyZWF0ZSBhIHN5bW1ldHJpYyBrZXkgZnJvbSBkYXRhIHJlYWQgZnJvbSBhIGdlbmVyYXRvciAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9JTVBPUlRfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZVtTTE9UXzJdLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X3R5cGVbU0xPVF8yXSwgQllURVNfVE9fQklUUyhjaGVjazFbaV0uc2l6ZSksICZnZW5lcmF0b3IpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworCisgICAgICAgIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBBYm9ydCBhIGdlbmVyYXRvciAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfQUJPUlQsICZnZW5lcmF0b3IpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRVhQT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF8yXSwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVGRkVSX1NJWkUsICZsZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChsZW5ndGgsIGNoZWNrMVtpXS5zaXplLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CisKKyAgICAgICAgZGF0YV9zdW0gPSAwOworICAgICAgICAvKiBDaGVjayB0aGF0IGlmIGdlbmVyYXRlZCBkYXRhIGFyZSB6ZXJvICovCisgICAgICAgIGZvciAoaiA9IDA7IGogPCBjaGVjazFbaV0uc2l6ZTsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhX3N1bSArPSBkYXRhW2pdOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX05PVF9FUVVBTChkYXRhX3N1bSwgMCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMikpOworCisgICAgICAgIHJlbWFpbmluZ19zaXplID0gY2hlY2sxW2ldLmNhcGFjaXR5IC0gY2hlY2sxW2ldLnNpemU7CisgICAgICAgIGlmIChyZW1haW5pbmdfc2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZVtTTE9UXzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGdbU0xPVF8yXSk7CisKKyAgICAgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMVtpXS5rZXlfdHlwZVtTTE9UXzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfbGVuZ3RoLCAmY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF8zXSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF8zXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2xpY3kpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMikpOworCisgICAgICAgICAgICAvKiBDcmVhdGUgYSBzeW1tZXRyaWMga2V5IGZyb20gZGF0YSByZWFkIGZyb20gYSBnZW5lcmF0b3IgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVE9SX0lNUE9SVF9LRVksCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2hhbmRsZVtTTE9UXzNdLCBjaGVjazFbaV0ua2V5X3R5cGVbU0xPVF8yXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVTX1RPX0JJVFMoY2hlY2sxW2ldLnNpemUpLCAmZ2VuZXJhdG9yKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTMpKTsKKworICAgICAgICAgICAgLyogRXhwb3J0IGEga2V5IGluIGJpbmFyeSBmb3JtYXQgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRVhQT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF8zXSwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJVRkZFUl9TSVpFLCAmbGVuZ3RoKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTQpKTsKKworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobGVuZ3RoLCByZW1haW5pbmdfc2l6ZSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxNSkpOworCisgICAgICAgICAgICBkYXRhX3N1bSA9IDA7CisgICAgICAgICAgICAvKiBDaGVjayB0aGF0IGlmIGdlbmVyYXRlZCBkYXRhIGFyZSB6ZXJvICovCisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcmVtYWluaW5nX3NpemU7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhX3N1bSArPSBkYXRhW2pdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX05PVF9FUVVBTChkYXRhX3N1bSwgMCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxNikpOworCisgICAgICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZVtTTE9UXzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGdbU0xPVF8yXSk7CisKKyAgICAgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMVtpXS5rZXlfdHlwZVtTTE9UXzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfbGVuZ3RoLCAmY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF80XSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF80XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2xpY3kpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxNykpOworCisgICAgICAgICAgICAvKiBDcmVhdGUgYSBzeW1tZXRyaWMga2V5IGZyb20gZGF0YSByZWFkIGZyb20gYSBnZW5lcmF0b3IgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVE9SX0lNUE9SVF9LRVksCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2hhbmRsZVtTTE9UXzRdLCBjaGVjazFbaV0ua2V5X3R5cGVbU0xPVF8yXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVTX1RPX0JJVFMoY2hlY2sxW2ldLnNpemUpLCAmZ2VuZXJhdG9yKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9DQVBBQ0lUWSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxOCkpOworICAgICAgICB9CisKKyAgICAgICAgLyogQWJvcnQgYSBnZW5lcmF0b3IgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfQUJPUlQsICZnZW5lcmF0b3IpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE5KSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworaW50MzJfdCBwc2FfZ2VuZXJhdG9yX2ltcG9ydF9rZXlfbmVnYXRpdmVfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMikvc2l6ZW9mKGNoZWNrMlswXSk7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgaSwgc3RhdHVzOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIHNhbHQgPSAwLCBsYWJlbCA9IDA7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgc2FsdF9sZW5ndGggPSAwLCBsYWJlbF9sZW5ndGggPSAwOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGRhdGFbQlVGRkVSX1NJWkVdOworICAgIHBzYV9rZXlfcG9saWN5X3QgICAgICAgIHBvbGljeTsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCisgICAgeworICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgICAgIG1lbXNldCgmZ2VuZXJhdG9yLCAwLCBzaXplb2YoZ2VuZXJhdG9yKSk7CisgICAgICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCisgICAgICAgIC8qIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazJbaV0udXNhZ2VbU0xPVF8xXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnW1NMT1RfMV0pOworCisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2syW2ldLmtleV90eXBlW1NMT1RfMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9sZW5ndGgsICZjaGVjazJbaV0ua2V5X2hhbmRsZVtTTE9UXzFdKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazJbaV0ua2V5X2hhbmRsZVtTTE9UXzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlW1NMT1RfMV0sCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfdHlwZVtTTE9UXzFdLCBjaGVjazJbaV0ua2V5X2RhdGEsIGNoZWNrMltpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgLyogU2V0IHVwIGEga2V5IGRlcml2YXRpb24gb3BlcmF0aW9uLiBVc2luZyB0aGlzIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlIGdlbmVyYXRlIGFzCisgICAgICAgICAqIFhPUiBvciBQUk5HIGdlbmVyYXRvciBpbml0aWFsaXphdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQuCisgICAgICAgICAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9ERVJJVkFUSU9OLCAmZ2VuZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2hhbmRsZVtTTE9UXzFdLCBjaGVjazJbaV0ua2V5X2FsZ1tTTE9UXzFdLCAmc2FsdCwgc2FsdF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICZsYWJlbCwgbGFiZWxfbGVuZ3RoLCBjaGVjazJbaV0uY2FwYWNpdHkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2dlbmVyYXRvcl9pbXBvcnRfa2V5IHdpdGggaW52YWxpZCBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIENyZWF0ZSBhIHN5bW1ldHJpYyBrZXkgZnJvbSBkYXRhIHJlYWQgZnJvbSBhIGdlbmVyYXRvciAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9JTVBPUlRfS0VZLCBjaGVjazJbaV0ua2V5X2hhbmRsZVtTTE9UXzJdLAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X3R5cGVbU0xPVF8yXSwgY2hlY2syW2ldLnNpemUsICZnZW5lcmF0b3IpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9nZW5lcmF0b3JfaW1wb3J0X2tleSB3aXRoIHplcm8gaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBDcmVhdGUgYSBzeW1tZXRyaWMga2V5IGZyb20gZGF0YSByZWFkIGZyb20gYSBnZW5lcmF0b3IgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfSU1QT1JUX0tFWSwgWkVST19LRVlfU0xPVCwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV90eXBlW1NMT1RfMl0sIGNoZWNrMltpXS5zaXplLCAmZ2VuZXJhdG9yKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfZ2VuZXJhdG9yX2ltcG9ydF9rZXkgd2l0aCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBwcmUtb2NjdXBpZWQga2V5IHNsb3RcbiIsIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogQ3JlYXRlIGEgc3ltbWV0cmljIGtleSBmcm9tIGRhdGEgcmVhZCBmcm9tIGEgZ2VuZXJhdG9yICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVE9SX0lNUE9SVF9LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlW1NMT1RfMV0sCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfdHlwZVtTTE9UXzJdLCBjaGVjazJbaV0uc2l6ZSwgJmdlbmVyYXRvcik7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX09DQ1VQSUVEX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOworCisgICAgICAgIC8qIEFib3J0IGEgZ2VuZXJhdG9yICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVE9SX0FCT1JULCAmZ2VuZXJhdG9yKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIwL3Rlc3RfYzAyMC5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjAvdGVzdF9jMDIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4NGJlZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIwL3Rlc3RfYzAyMC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX0MwMjBfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0MwMjBfQ0xJRU5UX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGMwMjApCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfYzAyMF9jcnlwdG9fbGlzdFtdOworCitpbnQzMl90IHBzYV9nZW5lcmF0b3JfaW1wb3J0X2tleV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKK2ludDMyX3QgcHNhX2dlbmVyYXRvcl9pbXBvcnRfa2V5X25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOworI2VuZGlmIC8qIF9URVNUX0MwMjBfQ0xJRU5UX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMC90ZXN0X2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIwL3Rlc3RfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ODlhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMC90ZXN0X2RhdGEuaApAQCAtMCwwICsxLDkwIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlWzRdOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlWzJdOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzMyXTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlWzJdOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGdbMl07CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgY2FwYWNpdHk7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgc2l6ZTsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXM7Cit9IHRlc3RfZGF0YTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3siVGVzdCBwc2FfZ2VuZXJhdG9yX2ltcG9ydF9rZXkgZm9yIDE2IEJ5dGUgQUVTIEtleVxuIiwgezEsIDIsIDMsIDR9LAore1BTQV9LRVlfVFlQRV9ERVJJVkUsIFBTQV9LRVlfVFlQRV9BRVN9LAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOX0sCisgQUVTXzE2Ql9LRVlfU0laRSwge1BTQV9LRVlfVVNBR0VfREVSSVZFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVH0sCisge1BTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpLCBQU0FfQUxHX0NUUn0sCisgMzIsIDE2LCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9nZW5lcmF0b3JfaW1wb3J0X2tleSBmb3IgVHJpcGxlIERFUyAzLUtleVxuIiwgezUsIDYsIDcsIDh9LAore1BTQV9LRVlfVFlQRV9ERVJJVkUsIFBTQV9LRVlfVFlQRV9ERVN9LAorezB4RUEsIDB4RDUsIDB4RTYsIDB4QzgsIDB4NTEsIDB4RjksIDB4RUMsIDB4QkIsIDB4OUIsIDB4NTcsIDB4N0MsIDB4RUQsIDB4RDIsCisgMHg0QiwgMHg4MiwgMHg4NCwgMHg5RiwgMHg5RiwgMHhFNiwgMHg3MywgMHgyMSwgMHgzRCwgMHgxQSwgMHgwNSwgMHhDOSwgMHhFRCwKKyAweERGLCAweDI1LCAweDE3LCAweDY4LCAweDg2LCAweEFFfSwKKyBBRVNfMzJCX0tFWV9TSVpFLCB7UFNBX0tFWV9VU0FHRV9ERVJJVkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JUfSwKK3tQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfNTEyKSwgUFNBX0FMR19DVFJ9LAorIERFUzNfM0tFWV9TSVpFLCBERVMzXzNLRVlfU0laRSwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfZ2VuZXJhdG9yX2ltcG9ydF9rZXkgb3V0cHV0IGdyZWF0ZXIgdGhhbiBjYXBhY2l0eVxuIiwgezksIDEwLCAxMSwgMTJ9LAore1BTQV9LRVlfVFlQRV9ERVJJVkUsIFBTQV9LRVlfVFlQRV9BRVN9LAorezB4NzAsIDB4MjQsIDB4NTUsIDB4MEMsIDB4MTQsIDB4OUQsIDB4RUQsIDB4Mjl9LAorIERFU184Ql9LRVlfU0laRSwge1BTQV9LRVlfVVNBR0VfREVSSVZFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVH0sCit7UFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzEpLCBQU0FfQUxHX0NUUn0sCisgNjQsIDgwLCBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX0NBUEFDSVRZCit9LAorCit7IlRlc3QgcHNhX2dlbmVyYXRvcl9pbXBvcnRfa2V5IGZvciBSU0EgUHVibGljIEtleSAtIEludmFsaWQgdHlwZVxuIiwgezEzLCAxNCwgMTUsIDE2fSwKK3tQU0FfS0VZX1RZUEVfREVSSVZFLCBQU0FfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVl9LAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOX0sCisgQUVTXzE2Ql9LRVlfU0laRSwge1BTQV9LRVlfVVNBR0VfREVSSVZFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVH0sCit7UFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NiksIFBTQV9BTEdfQ1RSfSwKKyAzMiwgMTYsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorCit7IlRlc3QgcHNhX2dlbmVyYXRvcl9pbXBvcnRfa2V5IGZvciBpbnZhbGlkIGJ5dGUgZm9yIGdlbmVyYXRpb25cbiIsIHsyMCwgMjEsIDIyLCAyM30sCit7UFNBX0tFWV9UWVBFX0RFUklWRSwgUFNBX0tFWV9UWVBFX0FFU30sCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5fSwKKyBBRVNfMTZCX0tFWV9TSVpFLCB7UFNBX0tFWV9VU0FHRV9ERVJJVkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JUfSwKK3tQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSwgUFNBX0FMR19DVFJ9LAorIDMyLCAxMCwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCit9OworCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMltdID0geworeyJUZXN0IHBzYV9nZW5lcmF0b3JfaW1wb3J0X2tleSBuZWdhdGl2ZSBjYXNlc1xuIiwKK3sxNywgMTgsIDE4LCAxOH0sCit7UFNBX0tFWV9UWVBFX0RFUklWRSwgUFNBX0tFWV9UWVBFX0FFU30sCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5fSwKKyBBRVNfMTZCX0tFWV9TSVpFLCB7UFNBX0tFWV9VU0FHRV9ERVJJVkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JUfSwKK3tQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSwgUFNBX0FMR19DVFJ9LAorIDMyLCBCWVRFU19UT19CSVRTKDgpLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUKK30sCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjAvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjAvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMDkzOTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMC90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAyMC5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCAyMCkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBnZW5lcmF0b3IgZnVuY3Rpb25zIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9ISUdIX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY3J5cHRvX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2MwMjBfY3J5cHRvX2xpc3QsIEZBTFNFKTsKKworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRlJFRSk7CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIxL3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIxL3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTczNmM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjEvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfYzAyMS5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMS90ZXN0X2MwMjEuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIxL3Rlc3RfYzAyMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYzdhNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMS90ZXN0X2MwMjEuYwpAQCAtMCwwICsxLDExMiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAyMS5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMjFfY3J5cHRvX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHBzYV9nZW5lcmF0b3JfYWJvcnRfdGVzdCwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludCAgICAgICAgZ190ZXN0X2NvdW50ID0gMTsKK3N0YXRpYyB1aW50OF90ICAgIGRhdGFbQlVGRkVSX1NJWkVdOworCitpbnQzMl90IHBzYV9nZW5lcmF0b3JfYWJvcnRfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgaSwgc3RhdHVzOworICAgIHBzYV9rZXlfcG9saWN5X3QgICAgICAgIHBvbGljeTsKKyAgICBwc2FfY3J5cHRvX2dlbmVyYXRvcl90ICBnZW5lcmF0b3I7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICBtZW1zZXQoJmdlbmVyYXRvciwgMCwgc2l6ZW9mKGdlbmVyYXRvcikpOworICAgICAgICBtZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2dlbmVyYXRvcl9hYm9ydCBvbiBlbXB0eSBnZW5lcmF0b3JcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBBYm9ydCBhbiBlbXB0eSBnZW5lcmF0b3IgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfQUJPUlQsICZnZW5lcmF0b3IpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2sxW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazFbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9sZW5ndGgsICZjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfdHlwZSwgY2hlY2sxW2ldLmtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIC8qIFNldCB1cCBhIGtleSBkZXJpdmF0aW9uIG9wZXJhdGlvbi4gVXNpbmcgdGhpcyBmdW5jdGlvbiB0byBpbml0aWFsaXplIHRoZSBnZW5lcmF0ZSBhcworICAgICAgICAgKiBYT1Igb3IgUFJORyBnZW5lcmF0b3IgaW5pdGlhbGl6YXRpb24gaXMgbm90IGltcGxlbWVudGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfREVSSVZBVElPTiwgJmdlbmVyYXRvciwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfYWxnLCBjaGVjazFbaV0uc2FsdCwgY2hlY2sxW2ldLnNhbHRfbGVuZ3RoLCBjaGVjazFbaV0ubGFiZWwsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5sYWJlbF9sZW5ndGgsIGNoZWNrMVtpXS5jYXBhY2l0eSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgIC8qIEFib3J0IHRoZSBnZW5lcmF0b3IgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfQUJPUlQsICZnZW5lcmF0b3IpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgICAgICAvKiBHZW5lcmF0ZSByYW5kb20gYnl0ZXMgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfUkVBRCwgJmdlbmVyYXRvciwgZGF0YSwgY2hlY2sxW2ldLnNpemUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9CQURfU1RBVEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gTXVsdGlwbGUgcHNhX2dlbmVyYXRvcl9hYm9ydCB0ZXN0XG4iLCBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIEFib3J0IHRoZSBnZW5lcmF0b3IgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfQUJPUlQsICZnZW5lcmF0b3IpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKworICAgICAgICAvKiBBYm9ydCB0aGUgZ2VuZXJhdG9yICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVE9SX0FCT1JULCAmZ2VuZXJhdG9yKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOworICAgIH0KKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMS90ZXN0X2MwMjEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIxL3Rlc3RfYzAyMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YjA3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMS90ZXN0X2MwMjEuaApAQCAtMCwwICsxLDMwIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9DMDIxX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9DMDIxX0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxjMDIxKQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMjFfY3J5cHRvX2xpc3RbXTsKKworaW50MzJfdCBwc2FfZ2VuZXJhdG9yX2Fib3J0X3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOworI2VuZGlmIC8qIF9URVNUX0MwMjFfQ0xJRU5UX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMS90ZXN0X2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIxL3Rlc3RfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNjQ0NGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMS90ZXN0X2RhdGEuaApAQCAtMCwwICsxLDQ1IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzMyXTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgc2FsdFsxNl07CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgc2FsdF9sZW5ndGg7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgbGFiZWxbMTZdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGxhYmVsX2xlbmd0aDsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBjYXBhY2l0eTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBzaXplOworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1czsKK30gdGVzdF9kYXRhOworCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0geworeyJUZXN0IHBzYV9nZW5lcmF0b3JfYWJvcnRcbiIsIDEsIFBTQV9LRVlfVFlQRV9ERVJJVkUsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5fSwKKyBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0RFUklWRSwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NiksCisgezB9LCAwLCB7MH0sIDAsIDMyLAorIDE2LCBQU0FfU1VDQ0VTUworfSwKK307CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMS90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMS90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxY2Q5NwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIxL3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUzIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9jMDIxLmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfQ1JZUFRPX0JBU0UsIDIxKQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgY3J5cHRvIGdlbmVyYXRvciBmdW5jdGlvbnMgQVBJc1xuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0hJR0hfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jcnlwdG9fbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfYzAyMV9jcnlwdG9fbGlzdCwgRkFMU0UpOworCisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19GUkVFKTsKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjIvc291cmNlLm1rIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjIvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNDA2MDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMi9zb3VyY2UubWsKQEAgLTAsMCArMSwyMCBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9jMDIyLmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIyL3Rlc3RfYzAyMi5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjIvdGVzdF9jMDIyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhOTdhZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIyL3Rlc3RfYzAyMi5jCkBAIC0wLDAgKzEsMTkwIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9jMDIyLmgiCisjaW5jbHVkZSAidGVzdF9kYXRhLmgiCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCisKK2NsaWVudF90ZXN0X3QgdGVzdF9jMDIyX2NyeXB0b19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBwc2Ffa2V5X2Rlcml2YXRpb25fdGVzdCwKKyAgICBwc2Ffa2V5X2Rlcml2YXRpb25fbmVnYXRpdmVfdGVzdCwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludCAgICAgICAgIGdfdGVzdF9jb3VudCA9IDE7CitzdGF0aWMgdWludDhfdCAgICAgZGF0YVtCVUZGRVJfU0laRV07CisKK2ludDMyX3QgcHNhX2tleV9kZXJpdmF0aW9uX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazEpL3NpemVvZihjaGVjazFbMF0pOworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIGksIHN0YXR1czsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBjYXBhY2l0eTsKKyAgICBwc2Ffa2V5X3BvbGljeV90ICAgICAgICBwb2xpY3k7CisgICAgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCAgZ2VuZXJhdG9yOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgbWVtc2V0KCZnZW5lcmF0b3IsIDAsIHNpemVvZihnZW5lcmF0b3IpKTsKKyAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisgICAgICAgIGNhcGFjaXR5ID0gMDsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2sxW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazFbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9sZW5ndGgsICZjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfdHlwZSwgY2hlY2sxW2ldLmtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIC8qIFNldCB1cCBhIGtleSBkZXJpdmF0aW9uIG9wZXJhdGlvbi4gVXNpbmcgdGhpcyBmdW5jdGlvbiB0byBpbml0aWFsaXplIHRoZSBnZW5lcmF0ZSBhcworICAgICAgICAgKiBYT1Igb3IgUFJORyBnZW5lcmF0b3IgaW5pdGlhbGl6YXRpb24gaXMgbm90IGltcGxlbWVudGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfREVSSVZBVElPTiwgJmdlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9oYW5kbGUsIGNoZWNrMVtpXS5rZXlfYWxnLCBjaGVjazFbaV0uc2FsdCwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLnNhbHRfbGVuZ3RoLCBjaGVjazFbaV0ubGFiZWwsIGNoZWNrMVtpXS5sYWJlbF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5jYXBhY2l0eSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEFib3J0IHRoZSBnZW5lcmF0b3IgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVE9SX0FCT1JULCAmZ2VuZXJhdG9yKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBjYXBhY2l0eSBvZiBhIGdlbmVyYXRvciAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFVF9HRU5FUkFUT1JfQ0FQQUNJVFksICZnZW5lcmF0b3IsICZjYXBhY2l0eSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworCisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGNhcGFjaXR5LCBjaGVjazFbaV0uY2FwYWNpdHksIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworCisgICAgICAgIC8qIEFib3J0IHRoZSBnZW5lcmF0b3IgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfQUJPUlQsICZnZW5lcmF0b3IpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IHBzYV9rZXlfZGVyaXZhdGlvbl9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2syKS9zaXplb2YoY2hlY2syWzBdKTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBpLCBzdGF0dXM7CisgICAgcHNhX2tleV9wb2xpY3lfdCAgICAgICAgcG9saWN5OworICAgIHBzYV9rZXlfaGFuZGxlX3QgICAgICAgIGVtcHR5X2tleV9oYW5kbGU7CisgICAgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCAgZ2VuZXJhdG9yOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgbWVtc2V0KCZnZW5lcmF0b3IsIDAsIHNpemVvZihnZW5lcmF0b3IpKTsKKyAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMltpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2Ffa2V5X2Rlcml2YXRpb24gd2l0aCBpbnZhbGlkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIFNldCB1cCBhIGtleSBkZXJpdmF0aW9uIG9wZXJhdGlvbi4gVXNpbmcgdGhpcyBmdW5jdGlvbiB0byBpbml0aWFsaXplIHRoZSBnZW5lcmF0ZSBhcworICAgICAgICAgKiBYT1Igb3IgUFJORyBnZW5lcmF0b3IgaW5pdGlhbGl6YXRpb24gaXMgbm90IGltcGxlbWVudGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfREVSSVZBVElPTiwgJmdlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9oYW5kbGUsIGNoZWNrMltpXS5rZXlfYWxnLCBjaGVjazJbaV0uc2FsdCwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLnNhbHRfbGVuZ3RoLCBjaGVjazJbaV0ubGFiZWwsIGNoZWNrMltpXS5sYWJlbF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5jYXBhY2l0eSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2tleV9kZXJpdmF0aW9uIHdpdGggemVybyBhcyBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBTZXQgdXAgYSBrZXkgZGVyaXZhdGlvbiBvcGVyYXRpb24uIFVzaW5nIHRoaXMgZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSB0aGUgZ2VuZXJhdGUgYXMKKyAgICAgICAgICogWE9SIG9yIFBSTkcgZ2VuZXJhdG9yIGluaXRpYWxpemF0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZC4KKyAgICAgICAgICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX0RFUklWQVRJT04sICZnZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgIDAsIGNoZWNrMltpXS5rZXlfYWxnLCBjaGVjazJbaV0uc2FsdCwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLnNhbHRfbGVuZ3RoLCBjaGVjazJbaV0ubGFiZWwsIGNoZWNrMltpXS5sYWJlbF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5jYXBhY2l0eSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2tleV9kZXJpdmF0aW9uIHdpdGggZW1wdHkga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2syW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfbGVuZ3RoLCAmZW1wdHlfa2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgZW1wdHlfa2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOworCisgICAgICAgIC8qIFNldCB1cCBhIGtleSBkZXJpdmF0aW9uIG9wZXJhdGlvbi4gVXNpbmcgdGhpcyBmdW5jdGlvbiB0byBpbml0aWFsaXplIHRoZSBnZW5lcmF0ZSBhcworICAgICAgICAgKiBYT1Igb3IgUFJORyBnZW5lcmF0b3IgaW5pdGlhbGl6YXRpb24gaXMgbm90IGltcGxlbWVudGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfREVSSVZBVElPTiwgJmdlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgZW1wdHlfa2V5X2hhbmRsZSwgY2hlY2syW2ldLmtleV9hbGcsIGNoZWNrMltpXS5zYWx0LAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0uc2FsdF9sZW5ndGgsIGNoZWNrMltpXS5sYWJlbCwgY2hlY2syW2ldLmxhYmVsX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmNhcGFjaXR5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRU1QVFlfU0xPVCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOworICAgIH0KKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMi90ZXN0X2MwMjIuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIyL3Rlc3RfYzAyMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMzllYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMi90ZXN0X2MwMjIuaApAQCAtMCwwICsxLDMxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9DMDIyX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9DMDIyX0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxjMDIyKQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMjJfY3J5cHRvX2xpc3RbXTsKKworaW50MzJfdCBwc2Ffa2V5X2Rlcml2YXRpb25fdGVzdChzZWN1cml0eV90IGNhbGxlcik7CitpbnQzMl90IHBzYV9rZXlfZGVyaXZhdGlvbl9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKKyNlbmRpZiAvKiBfVEVTVF9DMDIyX0NMSUVOVF9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjIvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMi90ZXN0X2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDA5Y2RhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjIvdGVzdF9kYXRhLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbNzVdOworICAgIHBzYV9rZXlfaGFuZGxlX3QgICAgICAgIGtleV9oYW5kbGU7CisgICAgcHNhX2tleV90eXBlX3QgICAgICAgICAga2V5X3R5cGU7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAga2V5X2RhdGFbMzJdOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGtleV9sZW5ndGg7CisgICAgcHNhX2tleV91c2FnZV90ICAgICAgICAgdXNhZ2U7CisgICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAga2V5X2FsZzsKKyAgICBjb25zdCB1aW50OF90ICAgICAgICAgICBzYWx0WzE2XTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBzYWx0X2xlbmd0aDsKKyAgICBjb25zdCB1aW50OF90ICAgICAgICAgICBsYWJlbFsxNl07CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgbGFiZWxfbGVuZ3RoOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGNhcGFjaXR5OworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1czsKK30gdGVzdF9kYXRhOworCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0geworeyJUZXN0IHBzYV9rZXlfZGVyaXZhdGlvbiB0byBnZXQgMTYgQnl0ZSBkYXRhIHdpdGggU0hBLTI1NlxuIiwgMSwgUFNBX0tFWV9UWVBFX0RFUklWRSwKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4Qzl9LAorIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfREVSSVZFLCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSwKKyB7MH0sIDAsIHswfSwgMCwgMzIsCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2Ffa2V5X2Rlcml2YXRpb24gdG8gZ2V0IDMyIEJ5dGUgZGF0YSB3aXRoIFNIQS01MTJcbiIsIDIsIFBTQV9LRVlfVFlQRV9ERVJJVkUsCit7MHhFQSwgMHhENSwgMHhFNiwgMHhDOCwgMHg1MSwgMHhGOSwgMHhFQywgMHhCQiwgMHg5QiwgMHg1NywgMHg3QywgMHhFRCwgMHhEMiwKKyAweDRCLCAweDgyLCAweDg0LCAweDlGLCAweDlGLCAweEU2LCAweDczLCAweDIxLCAweDNELCAweDFBLCAweDA1LCAweEM5LCAweEVELAorIDB4REYsIDB4MjUsIDB4MTcsIDB4NjgsIDB4ODYsIDB4QUV9LAorIEFFU18zMkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfREVSSVZFLCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfNTEyKSwKKyB7MH0sIDAsIHswfSwgMCwgNjQsCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2Ffa2V5X2Rlcml2YXRpb24gdG8gZ2V0IDMyIEJ5dGUgZGF0YSB3aXRoIE1ELTVcbiIsIDMsIFBTQV9LRVlfVFlQRV9ERVJJVkUsCit7MHhFQSwgMHhENSwgMHhFNiwgMHhDOCwgMHg1MSwgMHhGOSwgMHhFQywgMHhCQiwgMHg5QiwgMHg1NywgMHg3QywgMHhFRCwgMHhEMiwKKyAweDRCLCAweDgyLCAweDg0LCAweDlGLCAweDlGLCAweEU2LCAweDczLCAweDIxLCAweDNELCAweDFBLCAweDA1LCAweEM5LCAweEVELAorIDB4REYsIDB4MjUsIDB4MTcsIDB4NjgsIDB4ODYsIDB4QUV9LAorIEFFU18zMkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfREVSSVZFLCBQU0FfQUxHX0hLREYoUFNBX0FMR19NRDUpLAorIHswfSwgMCwgezB9LCAwLCA2NCwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9rZXlfZGVyaXZhdGlvbiB0byBnZXQgMTYgQnl0ZSBkYXRhIHdpdGggc2FsdCBhbmQgbGFiZWxcbiIsIDQsIFBTQV9LRVlfVFlQRV9ERVJJVkUsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5fSwKKyBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0RFUklWRSwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NiksCisgImFiY2RlZmdoaWprbG1ub3AiLCAxNiwgIlRoaXMgaXMgYSBsYWJlbCIsIDE1LCAzMiwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9rZXlfZGVyaXZhdGlvbiB3aXRoIGludmFsaWQgYWxnb3JpdGhtXG4iLCA1LCBQU0FfS0VZX1RZUEVfREVSSVZFLAorezB4RUEsIDB4RDUsIDB4RTYsIDB4QzgsIDB4NTEsIDB4RjksIDB4RUMsIDB4QkIsIDB4OUIsIDB4NTcsIDB4N0MsIDB4RUQsIDB4RDIsCisgMHg0QiwgMHg4MiwgMHg4NCwgMHg5RiwgMHg5RiwgMHhFNiwgMHg3MywgMHgyMSwgMHgzRCwgMHgxQSwgMHgwNSwgMHhDOSwgMHhFRCwKKyAweERGLCAweDI1LCAweDE3LCAweDY4LCAweDg2LCAweEFFfSwKKyBBRVNfMzJCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0RFUklWRSwgUFNBX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQsCisgezB9LCAwLCB7MH0sIDAsIDY0LAorIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorCit7IlRlc3QgcHNhX2tleV9kZXJpdmF0aW9uIHdpdGggdG9vIGxhcmdlIGNhcGFjaXR5IGZvciBhbGcgYW5kIGtleVxuIiwgNiwgUFNBX0tFWV9UWVBFX0RFUklWRSwKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4Qzl9LAorIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfREVSSVZFLCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMSksCisgezB9LCAwLCB7MH0sIDAsIDUyMDAsCisgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCisKK3siVGVzdCBwc2Ffa2V5X2Rlcml2YXRpb24gd2l0aCB1bnN1cHBvcnRlZCBrZXkgdHlwZVxuIiwgMTEsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5fSwKKyBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0RFUklWRSwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NiksCisgezB9LCAwLCB7MH0sIDAsIDMyLAorIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorCit7IlRlc3QgcHNhX2tleV9kZXJpdmF0aW9uIHdpdGggaW5jb3JyZWN0IHVzYWdlXG4iLCAxMiwgUFNBX0tFWV9UWVBFX0RFUklWRSwKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4Qzl9LAorIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NiksCisgezB9LCAwLCB7MH0sIDAsIDMyLAorIFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVECit9LAorfTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazJbXSA9IHsKK3siVGVzdCBwc2Ffa2V5X2Rlcml2YXRpb24gdG8gZ2V0IDMyIEJ5dGUgZGF0YSB3aXRoIFNIQS01MTJcbiIsIDEzLCBQU0FfS0VZX1RZUEVfREVSSVZFLAorezB4RUEsIDB4RDUsIDB4RTYsIDB4QzgsIDB4NTEsIDB4RjksIDB4RUMsIDB4QkIsIDB4OUIsIDB4NTcsIDB4N0MsIDB4RUQsIDB4RDIsCisgMHg0QiwgMHg4MiwgMHg4NCwgMHg5RiwgMHg5RiwgMHhFNiwgMHg3MywgMHgyMSwgMHgzRCwgMHgxQSwgMHgwNSwgMHhDOSwgMHhFRCwKKyAweERGLCAweDI1LCAweDE3LCAweDY4LCAweDg2LCAweEFFfSwKKyBBRVNfMzJCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0RFUklWRSwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzUxMiksCisgezB9LCAwLCB7MH0sIDAsIDY0LAorIFBTQV9TVUNDRVNTCit9LAorfTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIyL3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIyL3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDdlNzk4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjIvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2MwMjIuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9DUllQVE9fQkFTRSwgMjIpCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBjcnlwdG8gZ2VuZXJhdG9yIGZ1bmN0aW9ucyBBUElzXG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NyeXB0b19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9jMDIyX2NyeXB0b19saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0ZSRUUpOworICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMy9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMy9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM5NzE3MAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIzL3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2MwMjMuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjMvdGVzdF9jMDIzLmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMy90ZXN0X2MwMjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yzc4NmRjCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjMvdGVzdF9jMDIzLmMKQEAgLTAsMCArMSw2OCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAyMy5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMjNfY3J5cHRvX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHBzYV9rZXlfcG9saWN5X2dldF91c2FnZV90ZXN0LAorICAgIE5VTEwsCit9OworCitzdGF0aWMgaW50IGdfdGVzdF9jb3VudCA9IDE7CisKK2ludDMyX3QgcHNhX2tleV9wb2xpY3lfZ2V0X3VzYWdlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazEpL3NpemVvZihjaGVjazFbMF0pOworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIGksIHN0YXR1czsKKyAgICBwc2Ffa2V5X3BvbGljeV90ICAgICAgICBwb2xpY3k7CisgICAgcHNhX2tleV91c2FnZV90ICAgICAgICAgdXNhZ2U7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2sxW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgLyogUmV0cmlldmUgdGhlIHVzYWdlIGZpZWxkIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfR0VUX1VTQUdFLCAmcG9saWN5LCAmdXNhZ2UpOworCisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHVzYWdlLCBjaGVjazFbaV0udXNhZ2UsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworICAgIH0KKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMy90ZXN0X2MwMjMuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIzL3Rlc3RfYzAyMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYzQwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMy90ZXN0X2MwMjMuaApAQCAtMCwwICsxLDMwIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9DMDIzX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9DMDIzX0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxjMDIzKQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMjNfY3J5cHRvX2xpc3RbXTsKKworaW50MzJfdCBwc2Ffa2V5X3BvbGljeV9nZXRfdXNhZ2VfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CisjZW5kaWYgLyogX1RFU1RfQzAyM19DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIzL3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjMvdGVzdF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzNjcwYgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIzL3Rlc3RfZGF0YS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbNzVdOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7Cit9IHRlc3RfZGF0YTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3siVGVzdCBwc2Ffa2V5X3BvbGljeV9nZXRfdXNhZ2Ugd2l0aCB1c2FnZSBhcyBlbmNyeXB0XG4iLAorIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NiksCit9LAorCit7IlRlc3QgcHNhX2tleV9wb2xpY3lfZ2V0X3VzYWdlIHdpdGggdXNhZ2UgYXMgZGVjcnlwdFxuIiwKKyBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpLAorfSwKKworeyJUZXN0IHBzYV9rZXlfcG9saWN5X2dldF91c2FnZSB3aXRoIHVzYWdlIGFzIGRlcml2ZVxuIiwKKyBQU0FfS0VZX1VTQUdFX0RFUklWRSwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NiksCit9LAorCit7IlRlc3QgcHNhX2tleV9wb2xpY3lfZ2V0X3VzYWdlIHdpdGggdXNhZ2UgYXMgZXhwb3J0XG4iLAorIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSwKK30sCisKK3siVGVzdCBwc2Ffa2V5X3BvbGljeV9nZXRfdXNhZ2Ugd2l0aCB1c2FnZSBhcyBzaWduXG4iLAorIFBTQV9LRVlfVVNBR0VfU0lHTiwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NiksCit9LAorCit7IlRlc3QgcHNhX2tleV9wb2xpY3lfZ2V0X3VzYWdlIHdpdGggdXNhZ2UgYXMgdmVyaWZ5XG4iLAorIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSwKK30sCisKK307CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMy90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMy90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3N2E5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIzL3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUzIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9jMDIzLmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfQ1JZUFRPX0JBU0UsIDIzKQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgY3J5cHRvIGtleSBtYW5hZ2VtZW50IEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9ISUdIX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY3J5cHRvX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2MwMjNfY3J5cHRvX2xpc3QsIEZBTFNFKTsKKworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRlJFRSk7CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI0L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI0L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDFjNmQyCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjQvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfYzAyNC5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNC90ZXN0X2MwMjQuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI0L3Rlc3RfYzAyNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZmMzMWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNC90ZXN0X2MwMjQuYwpAQCAtMCwwICsxLDIwNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAyNC5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorCitjbGllbnRfdGVzdF90IHRlc3RfYzAyNF9jcnlwdG9fbGlzdFtdID0geworICAgIE5VTEwsCisgICAgcHNhX2FlYWRfZW5jcnlwdF90ZXN0LAorICAgIHBzYV9hZWFkX2VuY3J5cHRfbmVnYXRpdmVfdGVzdCwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludCBnX3Rlc3RfY291bnQgPSAxOworCitzdGF0aWMgYm9vbF90IGlzX2J1ZmZlcl9lbXB0eSh1aW50OF90ICpidWZmZXIsIHNpemVfdCBzaXplKQoreworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChidWZmZXJbaV0gIT0gMCkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworaW50MzJfdCBwc2FfYWVhZF9lbmNyeXB0X3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50MzJfdCAgICAgICAgICBpLCBzdGF0dXM7CisgICAgdWludDhfdCAgICAgICAgICBjaXBoZXJ0ZXh0W0JVRkZFUl9TSVpFXTsKKyAgICBwc2Ffa2V5X3BvbGljeV90IHBvbGljeTsKKyAgICBzaXplX3QgICAgICAgICAgIGNpcGhlcnRleHRfbGVuZ3RoOworICAgIGludCAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazEpL3NpemVvZihjaGVjazFbMF0pOworICAgIHVpbnQ4X3QgICAgICAgICAgKm5vbmNlLCAqYWRkaXRpb25hbF9kYXRhOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOworCisgICAgICAgIG1lbXNldChjaXBoZXJ0ZXh0LCAwLCBzaXplb2YoY2lwaGVydGV4dCkpOworCisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2sxW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9sZW5ndGgsICZjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV90eXBlLCBjaGVjazFbaV0ua2V5X2RhdGEsIGNoZWNrMVtpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgaWYgKGlzX2J1ZmZlcl9lbXB0eShjaGVjazFbaV0ubm9uY2UsIGNoZWNrMVtpXS5ub25jZV9sZW5ndGgpID09IFRSVUUpCisgICAgICAgICAgICBub25jZSA9IE5VTEw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5vbmNlID0gY2hlY2sxW2ldLm5vbmNlOworCisgICAgICAgIGlmIChpc19idWZmZXJfZW1wdHkoY2hlY2sxW2ldLmFkZGl0aW9uYWxfZGF0YSwgY2hlY2sxW2ldLmFkZGl0aW9uYWxfZGF0YV9sZW5ndGgpID09IFRSVUUpCisgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGEgPSBOVUxMOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGEgPSBjaGVjazFbaV0uYWRkaXRpb25hbF9kYXRhOworCisgICAgICAgIC8qIFByb2Nlc3MgYW4gYXV0aGVudGljYXRlZCBlbmNyeXB0aW9uIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FFQURfRU5DUllQVCwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfYWxnLCBub25jZSwgY2hlY2sxW2ldLm5vbmNlX2xlbmd0aCwgYWRkaXRpb25hbF9kYXRhLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uYWRkaXRpb25hbF9kYXRhX2xlbmd0aCwgY2hlY2sxW2ldLnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLnBsYWludGV4dF9sZW5ndGgsIGNpcGhlcnRleHQsIGNoZWNrMVtpXS5jaXBoZXJ0ZXh0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICZjaXBoZXJ0ZXh0X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBDaGVjayBpZiB0aGUgbGVuZ3RoIG1hdGNoZXMgKi8KKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoY2lwaGVydGV4dF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5leHBlY3RlZF9jaXBoZXJ0ZXh0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlIGRhdGEgbWF0Y2hlcyAqLworICAgICAgICBURVNUX0FTU0VSVF9NRU1DTVAoY2lwaGVydGV4dCwgY2hlY2sxW2ldLmV4cGVjdGVkX2NpcGhlcnRleHQsIGNpcGhlcnRleHRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworaW50MzJfdCBwc2FfYWVhZF9lbmNyeXB0X25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50MzJfdCAgICAgICAgICBpLCBzdGF0dXM7CisgICAgdWludDhfdCAgICAgICAgICBjaXBoZXJ0ZXh0W0JVRkZFUl9TSVpFXTsKKyAgICBwc2Ffa2V5X3BvbGljeV90IHBvbGljeTsKKyAgICBzaXplX3QgICAgICAgICAgIGNpcGhlcnRleHRfbGVuZ3RoOworICAgIGludCAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazIpL3NpemVvZihjaGVjazJbMF0pOworICAgIHVpbnQ4X3QgICAgICAgICAgKm5vbmNlLCAqYWRkaXRpb25hbF9kYXRhOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMltpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcpOworCisgICAgICAgIGlmIChpc19idWZmZXJfZW1wdHkoY2hlY2syW2ldLm5vbmNlLCBjaGVjazJbaV0ubm9uY2VfbGVuZ3RoKSA9PSBUUlVFKQorICAgICAgICAgICAgbm9uY2UgPSBOVUxMOworICAgICAgICBlbHNlCisgICAgICAgICAgICBub25jZSA9IGNoZWNrMltpXS5ub25jZTsKKworICAgICAgICBpZiAoaXNfYnVmZmVyX2VtcHR5KGNoZWNrMltpXS5hZGRpdGlvbmFsX2RhdGEsIGNoZWNrMltpXS5hZGRpdGlvbmFsX2RhdGFfbGVuZ3RoKSA9PSBUUlVFKQorICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhID0gTlVMTDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhID0gY2hlY2syW2ldLmFkZGl0aW9uYWxfZGF0YTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIGludmFsaWQga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBQcm9jZXNzIGFuIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BRUFEX0VOQ1JZUFQsIGNoZWNrMltpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2FsZywgbm9uY2UsIGNoZWNrMltpXS5ub25jZV9sZW5ndGgsIGFkZGl0aW9uYWxfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmFkZGl0aW9uYWxfZGF0YV9sZW5ndGgsIGNoZWNrMltpXS5wbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5wbGFpbnRleHRfbGVuZ3RoLCBjaXBoZXJ0ZXh0LCBjaGVjazJbaV0uY2lwaGVydGV4dF9zaXplLAorICAgICAgICAgICAgICAgICAgICAmY2lwaGVydGV4dF9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hZWFkX2VuY3J5cHQgLSB6ZXJvIGFzIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogUHJvY2VzcyBhbiBhdXRoZW50aWNhdGVkIGVuY3J5cHRpb24gb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUVBRF9FTkNSWVBULCAwLAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2FsZywgbm9uY2UsIGNoZWNrMltpXS5ub25jZV9sZW5ndGgsIGFkZGl0aW9uYWxfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmFkZGl0aW9uYWxfZGF0YV9sZW5ndGgsIGNoZWNrMltpXS5wbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5wbGFpbnRleHRfbGVuZ3RoLCBjaXBoZXJ0ZXh0LCBjaGVjazJbaV0uY2lwaGVydGV4dF9zaXplLAorICAgICAgICAgICAgICAgICAgICAmY2lwaGVydGV4dF9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hZWFkX2VuY3J5cHQgLSBlbXB0eSBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2syW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9sZW5ndGgsICZjaGVjazJbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2syW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAgICAgLyogUHJvY2VzcyBhbiBhdXRoZW50aWNhdGVkIGVuY3J5cHRpb24gb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUVBRF9FTkNSWVBULCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcsIG5vbmNlLCBjaGVjazJbaV0ubm9uY2VfbGVuZ3RoLCBhZGRpdGlvbmFsX2RhdGEsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5hZGRpdGlvbmFsX2RhdGFfbGVuZ3RoLCBjaGVjazJbaV0ucGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ucGxhaW50ZXh0X2xlbmd0aCwgY2lwaGVydGV4dCwgY2hlY2syW2ldLmNpcGhlcnRleHRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgJmNpcGhlcnRleHRfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRU1QVFlfU0xPVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI0L3Rlc3RfYzAyNC5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjQvdGVzdF9jMDI0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA2MGUzZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI0L3Rlc3RfYzAyNC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX0MwMjRfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0MwMjRfQ0xJRU5UX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGMwMjQpCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfYzAyNF9jcnlwdG9fbGlzdFtdOworCitpbnQzMl90IHBzYV9hZWFkX2VuY3J5cHRfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CitpbnQzMl90IHBzYV9hZWFkX2VuY3J5cHRfbmVnYXRpdmVfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CisKKyNlbmRpZiAvKiBfVEVTVF9DMDI0X0NMSUVOVF9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjQvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNC90ZXN0X2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmQzNjY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjQvdGVzdF9kYXRhLmgKQEAgLTAsMCArMSwxNTggQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisKKyNkZWZpbmUgRU1QVFlfS0VZX1NMT1QgICAgICAzMQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzMyXTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgbm9uY2VbMTZdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIG5vbmNlX2xlbmd0aDsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGFbMzJdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YV9sZW5ndGg7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgcGxhaW50ZXh0WzMwXTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBwbGFpbnRleHRfbGVuZ3RoOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2NpcGhlcnRleHRbNDVdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGNpcGhlcnRleHRfc2l6ZTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBleHBlY3RlZF9jaXBoZXJ0ZXh0X2xlbmd0aDsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXM7Cit9IHRlc3RfZGF0YTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3siVGVzdCBwc2FfYWVhZF9lbmNyeXB0IC0gQ0NNIC0gMTZCIEFFUyAtIDEzQiBub3VuY2UgJiA4QiBhZGRpIGRhdGFcbiIsIDEsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHhENywgMHg4MiwgMHg4RCwgMHgxMywgMHhCMiwgMHhCMCwgMHhCRCwgMHhDMywgMHgyNSwgMHhBNywgMHg2MiwgMHgzNiwgMHhERiwKKyAweDkzLCAweENDLCAweDZCfSwKKyBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0NNLAorezB4MDAsIDB4NDEsIDB4MkIsIDB4NEUsIDB4QTksIDB4Q0QsIDB4QkUsIDB4M0MsIDB4OTYsIDB4OTYsIDB4NzYsIDB4NkMsIDB4RkF9LAorIDEzLAorezB4MEIsIDB4RTEsIDB4QTgsIDB4OEIsIDB4QUMsIDB4RTAsIDB4MTgsIDB4QjF9LCA4LAorezB4MDgsIDB4RTgsIDB4Q0YsIDB4OTcsIDB4RDgsIDB4MjAsIDB4RUEsIDB4MjUsIDB4ODQsIDB4NjAsIDB4RTksIDB4NkEsIDB4RDksCisgMHhDRiwgMHg1MiwgMHg4OSwgMHgwNSwgMHg0RCwgMHg4OSwgMHg1QywgMHhFQSwgMHhDNCwgMHg3Q30sIDIzLAorezB4NEMsIDB4QjksIDB4N0YsIDB4ODYsIDB4QTIsIDB4QTQsIDB4NjgsIDB4OUEsIDB4ODcsIDB4NzksIDB4NDcsIDB4QUIsIDB4ODAsCisgMHg5MSwgMHhFRiwgMHg1MywgMHg4NiwgMHhBNiwgMHhGRiwgMHhCRCwgMHhEMCwgMHg4MCwgMHhGOCwgMHgxMiwgMHgwMywgMHgzMywKKyAweEQxLCAweEZDLCAweEI2LCAweDkxLCAweEYzLCAweDQwLCAweDZDLCAweEJGLCAweDUzLCAweDFGLCAweDgzLCAweEE0LCAweEQ4fSwKKyBCVUZGRVJfU0laRSwgMzksIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIEFFUy1DQ01cbiIsIDIsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0MSwgMHg4OSwgMHgzNSwgMHgxQiwgMHg1QywgMHhBRSwgMHhBMywgMHg3NSwgMHhBMCwgMHgyOSwgMHg5RSwgMHg4MSwgMHhDNiwKKyAweDIxLCAweEJGLCAweDQzfSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NDTSwKK3sweDQ4LCAweGMwLCAweDkwLCAweDY5LCAweDMwLCAweDU2LCAweDFlLCAweDBhLCAweGIwLCAweGVmLCAweDRjLCAweGQ5LCAweDcyfSwKKyAxMywKK3sweDQwLCAweGEyLCAweDdjLCAweDFkLCAweDFlLCAweDIzLCAweGVhLCAweDNkLCAweGJlLCAweDgwLCAweDU2LCAweGIyLCAweDc3LAorIDB4NDgsIDB4NjEsIDB4YTQsIDB4YTIsIDB4MDEsIDB4Y2MsIDB4ZTQsIDB4OWYsIDB4MTksIDB4OTksIDB4N2QsIDB4MTksIDB4MjAsCisgMHg2ZCwgMHg4YywgMHg4YSwgMHgzNCwgMHgzOSwgMHg1MX0sIDMyLAorezB4NDUsIDB4MzUsIDB4ZDEsIDB4MmIsIDB4NDMsIDB4NzcsIDB4OTIsIDB4OGEsIDB4N2MsIDB4MGEsIDB4NjEsIDB4YzksIDB4ZjgsCisgMHgyNSwgMHhhNCwgMHg4NiwgMHg3MSwgMHhlYSwgMHgwNSwgMHg5MSwgMHgwNywgMHg0OCwgMHhjOCwgMHhlZn0sIDI0LAorezB4MjYsIDB4YzUsIDB4NjksIDB4NjEsIDB4YzAsIDB4MzUsIDB4YTcsIDB4ZTQsIDB4NTIsIDB4Y2MsIDB4ZTYsIDB4MWIsIDB4YzYsCisgMHhlZSwgMHgyMiwgMHgwZCwgMHg3NywgMHhiMywgMHhmOSwgMHg0ZCwgMHgxOCwgMHhmZCwgMHgxMCwgMHhiNiwgMHhkOCwgMHgwZSwKKyAweDhiLCAweGY4LCAweDBmLCAweDRhLCAweDQ2LCAweGNhLCAweGIwLCAweDZkLCAweDQzLCAweDEzLCAweGYwLCAweGRiLCAweDliLAorIDB4ZTl9LCBCVUZGRVJfU0laRSwgNDAsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIEFFUy1DQ00gMjQgYnl0ZXMgVGFnIGxlbmd0aCA9IDRcbiIsIDMsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0MSwgMHg4OSwgMHgzNSwgMHgxQiwgMHg1QywgMHhBRSwgMHhBMywgMHg3NSwgMHhBMCwgMHgyOSwgMHg5RSwgMHg4MSwgMHhDNiwKKyAweDIxLCAweEJGLCAweDQzfSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FTkNSWVBULAorIFBTQV9BTEdfQUVBRF9XSVRIX1RBR19MRU5HVEgoUFNBX0FMR19DQ00sIDQpLAorezB4NDgsIDB4YzAsIDB4OTAsIDB4NjksIDB4MzAsIDB4NTYsIDB4MWUsIDB4MGEsIDB4YjAsIDB4ZWYsIDB4NGMsIDB4ZDksIDB4NzJ9LAorIDEzLAorezB4NDAsIDB4YTIsIDB4N2MsIDB4MWQsIDB4MWUsIDB4MjMsIDB4ZWEsIDB4M2QsIDB4YmUsIDB4ODAsIDB4NTYsIDB4YjIsIDB4NzcsCisgMHg0OCwgMHg2MSwgMHhhNCwgMHhhMiwgMHgwMSwgMHhjYywgMHhlNCwgMHg5ZiwgMHgxOSwgMHg5OSwgMHg3ZCwgMHgxOSwgMHgyMCwKKyAweDZkLCAweDhjLCAweDhhLCAweDM0LCAweDM5LCAweDUxfSwgMzIsCit7MHg0NSwgMHgzNSwgMHhkMSwgMHgyYiwgMHg0MywgMHg3NywgMHg5MiwgMHg4YSwgMHg3YywgMHgwYSwgMHg2MSwgMHhjOSwgMHhmOCwKKyAweDI1LCAweGE0LCAweDg2LCAweDcxLCAweGVhLCAweDA1LCAweDkxLCAweDA3LCAweDQ4LCAweGM4LCAweGVmfSwgMjQsCit7MHgyNiwgMHhjNSwgMHg2OSwgMHg2MSwgMHhjMCwgMHgzNSwgMHhhNywgMHhlNCwgMHg1MiwgMHhjYywgMHhlNiwgMHgxYiwgMHhjNiwKKyAweGVlLCAweDIyLCAweDBkLCAweDc3LCAweGIzLCAweGY5LCAweDRkLCAweDE4LCAweGZkLCAweDEwLCAweGI2LCAweDY0LCAweDNiLAorIDB4NGYsIDB4Mzl9LAorIEJVRkZFUl9TSVpFLCAyOCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfYWVhZF9lbmNyeXB0IC0gR0NNIC0gMTZCIEFFUyAtIDEyQiBOb3VuY2UgJiAxMkIgYWRkaSBkYXRhXG4iLAorNCwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDNkLCAweGUwLCAweDk4LCAweDc0LCAweGIzLCAweDg4LCAweGU2LCAweDQ5LCAweDE5LCAweDg4LCAweGQwLCAweGMzLCAweDYwLAorIDB4N2UsIDB4YWUsIDB4MWZ9LCAxNiwgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0dDTSwKK3sweDU3LCAweDY5LCAweDBlLCAweDQzLCAweDRlLCAweDI4LCAweDAwLCAweDAwLCAweGEyLCAweGZjLCAweGExLCAweGEzfSwgMTIsCit7MHg0MiwgMHhmNiwgMHg3ZSwgMHgzZiwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMH0sIDEyLAorezB4NDUsIDB4MDAsIDB4MDAsIDB4MWMsIDB4NDIsIDB4YTIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4NDQsIDB4MWYsIDB4NDAsCisgMHg2NywgMHg5MywgMHhiNiwgMHhlMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwYSwgMHgwMCwgMHhmNSwgMHhmZiwgMHgwMSwgMHgwMiwKKyAweDAyLCAweDAxfSwgMjgsCit7MHhGQiwgMHhBMiwgMHhDQSwgMHg4NCwgMHg1RSwgMHg1RCwgMHhGOSwgMHhGMCwgMHhGMiwgMHgyQywgMHgzRSwgMHg2RSwgMHg4NiwKKyAweERELCAweDgzLCAweDFFLCAweDFGLCAweEM2LCAweDU3LCAweDkyLCAweENELCAweDFBLCAweEY5LCAweDEzLCAweDBFLCAweDEzLAorIDB4NzksIDB4RUQsIDB4MzYsIDB4OUYsIDB4MDcsIDB4MUYsIDB4MzUsIDB4RTAsIDB4MzQsIDB4QkUsIDB4OTUsIDB4RjEsIDB4MTIsCisgMHhFNCwgMHhFNywgMHhEMCwgMHg1RCwgMHgzNX0sCisgQlVGRkVSX1NJWkUsIDQ0LCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9hZWFkX2VuY3J5cHQgLSBERVMgS2V5XG4iLCA1LCBQU0FfS0VZX1RZUEVfREVTLAorezB4NzAsIDB4MjQsIDB4NTUsIDB4MEMsIDB4MTQsIDB4OUQsIDB4RUQsIDB4Mjl9LCBERVNfOEJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NDTSwKK3sweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LCAweDA5LCAweDBBLCAweDBCfSwgMTIsCit7MHhFQywgMHg0NiwgMHhCQiwgMHg2MywgMHhCMCwgMHgyNSwgMHgyMCwgMHhDMywgMHgzQywgMHg0OSwgMHhGRCwgMHg3MH0sIDEyLAorezB4QjksIDB4NkIsIDB4NDksIDB4RTIsIDB4MUQsIDB4NjIsIDB4MTcsIDB4NDEsIDB4NjMsIDB4MjgsIDB4NzUsIDB4REIsIDB4N0YsCisgMHg2QywgMHg5MiwgMHg0MywgMHhEMiwgMHhENywgMHhDMn0sIDE5LAorezB9LCBCVUZGRVJfU0laRSwgMCwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKK30sCisKK3siVGVzdCBwc2FfYWVhZF9lbmNyeXB0IC0gVW5zdXBwb3J0ZWQgQWxnb3JpdGhtXG4iLCA2LCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOX0sIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DRkIsCit7MH0sIDEzLCB7MH0sIDAsICJoZWxsbyB3b3JsZCIsIDExLAorezB4NUQsIDB4QzEsIDB4NzIsIDB4MjMsIDB4NjYsIDB4OTYsIDB4RkQsIDB4RkMsIDB4OTMsIDB4MDYsIDB4MjcsIDB4NTIsIDB4QzcsCisgMHgwQSwgMHhDQiwgMHgzNiwgMHg1NSwgMHgzMCwgMHhDOSwgMHg0OCwgMHg4RiwgMHg1RSwgMHhBNSwgMHhCOSwgMHg1MSwgMHhGQiwKKyAweDRFfSwKKyBCVUZGRVJfU0laRSwgMjcsIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVECit9LAorCit7IlRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIEludmFsaWQga2V5IHVzYWdlXG4iLCA3LCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOX0sIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19HQ00sCit7MH0sIDEzLCB7MH0sIDAsICJoZWxsbyB3b3JsZCIsIDExLAorezB4NUQsIDB4QzEsIDB4NzIsIDB4MjMsIDB4NjYsIDB4OTYsIDB4RkQsIDB4RkMsIDB4OTMsIDB4MDYsIDB4MjcsIDB4NTIsIDB4QzcsCisgMHgwQSwgMHhDQiwgMHgzNiwgMHg1NSwgMHgzMCwgMHhDOSwgMHg0OCwgMHg4RiwgMHg1RSwgMHhBNSwgMHhCOSwgMHg1MSwgMHhGQiwKKyAweDRFfSwKKyBCVUZGRVJfU0laRSwgMjcsIFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVECit9LAorCit7IlRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIFNtYWxsIG91dHB1dCBidWZmZXIgc2l6ZVxuIiwgOCwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4Qzl9LCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfR0NNLAorezB9LCAxMywgezB9LCAwLCAiaGVsbG8gd29ybGQiLCAxMSwKK3sweDVELCAweEMxLCAweDcyLCAweDIzLCAweDY2LCAweDk2LCAweEZELCAweEZDLCAweDkzLCAweDA2LCAweDI3LCAweDUyLCAweEM3LAorIDB4MEEsIDB4Q0IsIDB4MzYsIDB4NTUsIDB4MzAsIDB4QzksIDB4NDgsIDB4OEYsIDB4NUUsIDB4QTUsIDB4QjksIDB4NTEsIDB4RkIsCisgMHg0RX0sCisgMTAsIDI3LCBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAorfSwKK307CisKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2syW10gPSB7Cit7IlRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIE5lZ2F0aXZlIGNhc2VcbiIsIDksIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5fSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0dDTSwKK3swfSwgMTMsIHswfSwgMCwgImhlbGxvIHdvcmxkIiwgMTEsCit7MHg1RCwgMHhDMSwgMHg3MiwgMHgyMywgMHg2NiwgMHg5NiwgMHhGRCwgMHhGQywgMHg5MywgMHgwNiwgMHgyNywgMHg1MiwgMHhDNywKKyAweDBBLCAweENCLCAweDM2LCAweDU1LCAweDMwLCAweEM5LCAweDQ4LCAweDhGLCAweDVFLCAweEE1LCAweEI5LCAweDUxLCAweEZCLAorIDB4NEV9LAorIEJVRkZFUl9TSVpFLCAyNywgUFNBX0VSUk9SX0VNUFRZX1NMT1QKK30sCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjQvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjQvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZjc0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNC90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAyNC5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCAyNCkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBBRUFEIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NyeXB0b19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9jMDI0X2NyeXB0b19saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0ZSRUUpOworICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNS9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNS9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q2NjlhOQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI1L3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2MwMjUuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjUvdGVzdF9jMDI1LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNS90ZXN0X2MwMjUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODQyNWM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjUvdGVzdF9jMDI1LmMKQEAgLTAsMCArMSwyMDEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2MwMjUuaCIKKyNpbmNsdWRlICJ0ZXN0X2RhdGEuaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMjVfY3J5cHRvX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHBzYV9hZWFkX2RlY3J5cHRfdGVzdCwKKyAgICBwc2FfYWVhZF9kZWNyeXB0X25lZ2F0aXZlX3Rlc3QsCisgICAgTlVMTCwKK307CisKK3N0YXRpYyBpbnQgZ190ZXN0X2NvdW50ID0gMTsKKworc3RhdGljIGJvb2xfdCBpc19idWZmZXJfZW1wdHkodWludDhfdCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgeworICAgICAgICBpZiAoYnVmZmVyW2ldICE9IDApCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK2ludDMyX3QgcHNhX2FlYWRfZGVjcnlwdF90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludDMyX3QgICAgICAgICAgaSwgc3RhdHVzOworICAgIHVpbnQ4X3QgICAgICAgICAgcGxhaW50ZXh0W0JVRkZFUl9TSVpFXTsKKyAgICBwc2Ffa2V5X3BvbGljeV90IHBvbGljeTsKKyAgICBzaXplX3QgICAgICAgICAgIHBsYWludGV4dF9sZW5ndGg7CisgICAgaW50ICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7CisgICAgdWludDhfdCAgICAgICAgICAqbm9uY2UsICphZGRpdGlvbmFsX2RhdGE7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2sxW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgbWVtc2V0KHBsYWludGV4dCwgMCwgc2l6ZW9mKHBsYWludGV4dCkpOworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMVtpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfbGVuZ3RoLCAmY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X3R5cGUsIGNoZWNrMVtpXS5rZXlfZGF0YSwgY2hlY2sxW2ldLmtleV9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICBpZiAoaXNfYnVmZmVyX2VtcHR5KGNoZWNrMVtpXS5ub25jZSwgY2hlY2sxW2ldLm5vbmNlX2xlbmd0aCkgPT0gVFJVRSkKKyAgICAgICAgICAgIG5vbmNlID0gTlVMTDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbm9uY2UgPSBjaGVjazFbaV0ubm9uY2U7CisKKyAgICAgICAgaWYgKGlzX2J1ZmZlcl9lbXB0eShjaGVjazFbaV0uYWRkaXRpb25hbF9kYXRhLCBjaGVjazFbaV0uYWRkaXRpb25hbF9kYXRhX2xlbmd0aCkgPT0gVFJVRSkKKyAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YSA9IE5VTEw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YSA9IGNoZWNrMVtpXS5hZGRpdGlvbmFsX2RhdGE7CisKKyAgICAgICAgLyogUHJvY2VzcyBhbiBhdXRoZW50aWNhdGVkIGRlY3J5cHRpb24gb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUVBRF9ERUNSWVBULCBjaGVjazFbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfYWxnLCBub25jZSwgY2hlY2sxW2ldLm5vbmNlX2xlbmd0aCwgYWRkaXRpb25hbF9kYXRhLAorICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmFkZGl0aW9uYWxfZGF0YV9sZW5ndGgsIGNoZWNrMVtpXS5jaXBoZXJ0ZXh0LCBjaGVjazFbaV0uY2lwaGVydGV4dF9zaXplLAorICAgICAgICAgICAgICAgICAgcGxhaW50ZXh0LCBjaGVjazFbaV0ucGxhaW50ZXh0X3NpemUsICZwbGFpbnRleHRfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cyAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qIENoZWNrIGlmIHRoZSBsZW5ndGggbWF0Y2hlcyAqLworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChwbGFpbnRleHRfbGVuZ3RoLCBjaGVjazFbaV0uZXhwZWN0ZWRfcGxhaW50ZXh0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlIGRhdGEgbWF0Y2hlcyAqLworICAgICAgICBURVNUX0FTU0VSVF9NRU1DTVAocGxhaW50ZXh0LCBjaGVjazFbaV0uZXhwZWN0ZWRfcGxhaW50ZXh0LCBwbGFpbnRleHRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworaW50MzJfdCBwc2FfYWVhZF9kZWNyeXB0X25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50MzJfdCAgICAgICAgICBpLCBzdGF0dXM7CisgICAgdWludDhfdCAgICAgICAgICBwbGFpbnRleHRbQlVGRkVSX1NJWkVdOworICAgIHBzYV9rZXlfcG9saWN5X3QgcG9saWN5OworICAgIHNpemVfdCAgICAgICAgICAgcGxhaW50ZXh0X2xlbmd0aDsKKyAgICBpbnQgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2syKS9zaXplb2YoY2hlY2syWzBdKTsKKyAgICB1aW50OF90ICAgICAgICAgICpub25jZSwgKmFkZGl0aW9uYWxfZGF0YTsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCisgICAgeworICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgICAgIC8qIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazJbaV0udXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnKTsKKworICAgICAgICBpZiAoaXNfYnVmZmVyX2VtcHR5KGNoZWNrMltpXS5ub25jZSwgY2hlY2syW2ldLm5vbmNlX2xlbmd0aCkgPT0gVFJVRSkKKyAgICAgICAgICAgIG5vbmNlID0gTlVMTDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbm9uY2UgPSBjaGVjazJbaV0ubm9uY2U7CisKKyAgICAgICAgaWYgKGlzX2J1ZmZlcl9lbXB0eShjaGVjazJbaV0uYWRkaXRpb25hbF9kYXRhLCBjaGVjazJbaV0uYWRkaXRpb25hbF9kYXRhX2xlbmd0aCkgPT0gVFJVRSkKKyAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YSA9IE5VTEw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YSA9IGNoZWNrMltpXS5hZGRpdGlvbmFsX2RhdGE7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hZWFkX2RlY3J5cHQgLSBpbnZhbGlkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogUHJvY2VzcyBhbiBhdXRoZW50aWNhdGVkIGRlY3J5cHRpb24gb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUVBRF9ERUNSWVBULCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnLCBub25jZSwgY2hlY2syW2ldLm5vbmNlX2xlbmd0aCwgYWRkaXRpb25hbF9kYXRhLAorICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmFkZGl0aW9uYWxfZGF0YV9sZW5ndGgsIGNoZWNrMltpXS5jaXBoZXJ0ZXh0LCBjaGVjazJbaV0uY2lwaGVydGV4dF9zaXplLAorICAgICAgICAgICAgICAgICAgcGxhaW50ZXh0LCBjaGVjazJbaV0ucGxhaW50ZXh0X3NpemUsICZwbGFpbnRleHRfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gemVybyBhcyBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIFByb2Nlc3MgYW4gYXV0aGVudGljYXRlZCBkZWNyeXB0aW9uIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FFQURfREVDUllQVCwgMCwKKyAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnLCBub25jZSwgY2hlY2syW2ldLm5vbmNlX2xlbmd0aCwgYWRkaXRpb25hbF9kYXRhLAorICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmFkZGl0aW9uYWxfZGF0YV9sZW5ndGgsIGNoZWNrMltpXS5jaXBoZXJ0ZXh0LCBjaGVjazJbaV0uY2lwaGVydGV4dF9zaXplLAorICAgICAgICAgICAgICAgICAgcGxhaW50ZXh0LCBjaGVjazJbaV0ucGxhaW50ZXh0X3NpemUsICZwbGFpbnRleHRfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gZW1wdHkga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMltpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfbGVuZ3RoLCAmY2hlY2syW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMltpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgIC8qIFByb2Nlc3MgYW4gYXV0aGVudGljYXRlZCBkZWNyeXB0aW9uIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FFQURfREVDUllQVCwgY2hlY2syW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2FsZywgbm9uY2UsIGNoZWNrMltpXS5ub25jZV9sZW5ndGgsIGFkZGl0aW9uYWxfZGF0YSwKKyAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5hZGRpdGlvbmFsX2RhdGFfbGVuZ3RoLCBjaGVjazJbaV0uY2lwaGVydGV4dCwgY2hlY2syW2ldLmNpcGhlcnRleHRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgIHBsYWludGV4dCwgY2hlY2syW2ldLnBsYWludGV4dF9zaXplLCAmcGxhaW50ZXh0X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0VNUFRZX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworICAgICB9CisKKyAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI1L3Rlc3RfYzAyNS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjUvdGVzdF9jMDI1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIwNjY3YgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI1L3Rlc3RfYzAyNS5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX0MwMjVfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0MwMjVfQ0xJRU5UX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGMwMjUpCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfYzAyNV9jcnlwdG9fbGlzdFtdOworCitpbnQzMl90IHBzYV9hZWFkX2RlY3J5cHRfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CitpbnQzMl90IHBzYV9hZWFkX2RlY3J5cHRfbmVnYXRpdmVfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CisKKyNlbmRpZiAvKiBfVEVTVF9DMDI1X0NMSUVOVF9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjUvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNS90ZXN0X2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGU4ZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjUvdGVzdF9kYXRhLmgKQEAgLTAsMCArMSwxODcgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisKKyNkZWZpbmUgRU1QVFlfS0VZX1NMT1QgICAgICAzMQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzMyXTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgbm9uY2VbMTZdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIG5vbmNlX2xlbmd0aDsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGFbMzJdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YV9sZW5ndGg7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcGxhaW50ZXh0WzMwXTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBwbGFpbnRleHRfc2l6ZTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0WzQ1XTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0X3NpemU7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcGxhaW50ZXh0X2xlbmd0aDsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXM7Cit9IHRlc3RfZGF0YTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3siVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gQ0NNIC0gMTZCIEFFUyAtIDEzQiBub3VuY2UgJiA4QiBhZGRpIGRhdGFcbiIsIDEsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHhENywgMHg4MiwgMHg4RCwgMHgxMywgMHhCMiwgMHhCMCwgMHhCRCwgMHhDMywgMHgyNSwgMHhBNywgMHg2MiwgMHgzNiwgMHhERiwKKyAweDkzLCAweENDLCAweDZCfSwKKyBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQ0NNLAorezB4MDAsIDB4NDEsIDB4MkIsIDB4NEUsIDB4QTksIDB4Q0QsIDB4QkUsIDB4M0MsIDB4OTYsIDB4OTYsIDB4NzYsIDB4NkMsIDB4RkF9LAorIDEzLAorezB4MEIsIDB4RTEsIDB4QTgsIDB4OEIsIDB4QUMsIDB4RTAsIDB4MTgsIDB4QjF9LCA4LAorezB4MDgsIDB4RTgsIDB4Q0YsIDB4OTcsIDB4RDgsIDB4MjAsIDB4RUEsIDB4MjUsIDB4ODQsIDB4NjAsIDB4RTksIDB4NkEsIDB4RDksCisgMHhDRiwgMHg1MiwgMHg4OSwgMHgwNSwgMHg0RCwgMHg4OSwgMHg1QywgMHhFQSwgMHhDNCwgMHg3Q30sIEJVRkZFUl9TSVpFLAorezB4NEMsIDB4QjksIDB4N0YsIDB4ODYsIDB4QTIsIDB4QTQsIDB4NjgsIDB4OUEsIDB4ODcsIDB4NzksIDB4NDcsIDB4QUIsIDB4ODAsCisgMHg5MSwgMHhFRiwgMHg1MywgMHg4NiwgMHhBNiwgMHhGRiwgMHhCRCwgMHhEMCwgMHg4MCwgMHhGOCwgMHgxMiwgMHgwMywgMHgzMywKKyAweEQxLCAweEZDLCAweEI2LCAweDkxLCAweEYzLCAweDQwLCAweDZDLCAweEJGLCAweDUzLCAweDFGLCAweDgzLCAweEE0LCAweEQ4fSwKKyAzOSwgMjMsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIEFFUy1DQ01cbiIsIDIsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0MSwgMHg4OSwgMHgzNSwgMHgxQiwgMHg1QywgMHhBRSwgMHhBMywgMHg3NSwgMHhBMCwgMHgyOSwgMHg5RSwgMHg4MSwgMHhDNiwKKyAweDIxLCAweEJGLCAweDQzfSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NDTSwKK3sweDQ4LCAweGMwLCAweDkwLCAweDY5LCAweDMwLCAweDU2LCAweDFlLCAweDBhLCAweGIwLCAweGVmLCAweDRjLCAweGQ5LCAweDcyfSwKKyAxMywKK3sweDQwLCAweGEyLCAweDdjLCAweDFkLCAweDFlLCAweDIzLCAweGVhLCAweDNkLCAweGJlLCAweDgwLCAweDU2LCAweGIyLCAweDc3LAorIDB4NDgsIDB4NjEsIDB4YTQsIDB4YTIsIDB4MDEsIDB4Y2MsIDB4ZTQsIDB4OWYsIDB4MTksIDB4OTksIDB4N2QsIDB4MTksIDB4MjAsCisgMHg2ZCwgMHg4YywgMHg4YSwgMHgzNCwgMHgzOSwgMHg1MX0sIDMyLAorezB4NDUsIDB4MzUsIDB4ZDEsIDB4MmIsIDB4NDMsIDB4NzcsIDB4OTIsIDB4OGEsIDB4N2MsIDB4MGEsIDB4NjEsIDB4YzksIDB4ZjgsCisgMHgyNSwgMHhhNCwgMHg4NiwgMHg3MSwgMHhlYSwgMHgwNSwgMHg5MSwgMHgwNywgMHg0OCwgMHhjOCwgMHhlZn0sIEJVRkZFUl9TSVpFLAorezB4MjYsIDB4YzUsIDB4NjksIDB4NjEsIDB4YzAsIDB4MzUsIDB4YTcsIDB4ZTQsIDB4NTIsIDB4Y2MsIDB4ZTYsIDB4MWIsIDB4YzYsCisgMHhlZSwgMHgyMiwgMHgwZCwgMHg3NywgMHhiMywgMHhmOSwgMHg0ZCwgMHgxOCwgMHhmZCwgMHgxMCwgMHhiNiwgMHhkOCwgMHgwZSwKKyAweDhiLCAweGY4LCAweDBmLCAweDRhLCAweDQ2LCAweGNhLCAweGIwLCAweDZkLCAweDQzLCAweDEzLCAweGYwLCAweGRiLCAweDliLAorIDB4ZTl9LCA0MCwgMjQsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIEFFUy1DQ00gMjQgYnl0ZXMgVGFnIGxlbmd0aCA9IDRcbiIsIDMsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0MSwgMHg4OSwgMHgzNSwgMHgxQiwgMHg1QywgMHhBRSwgMHhBMywgMHg3NSwgMHhBMCwgMHgyOSwgMHg5RSwgMHg4MSwgMHhDNiwKKyAweDIxLCAweEJGLCAweDQzfSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9ERUNSWVBULAorIFBTQV9BTEdfQUVBRF9XSVRIX1RBR19MRU5HVEgoUFNBX0FMR19DQ00sIDQpLAorezB4NDgsIDB4YzAsIDB4OTAsIDB4NjksIDB4MzAsIDB4NTYsIDB4MWUsIDB4MGEsIDB4YjAsIDB4ZWYsIDB4NGMsIDB4ZDksIDB4NzJ9LAorIDEzLAorezB4NDAsIDB4YTIsIDB4N2MsIDB4MWQsIDB4MWUsIDB4MjMsIDB4ZWEsIDB4M2QsIDB4YmUsIDB4ODAsIDB4NTYsIDB4YjIsIDB4NzcsCisgMHg0OCwgMHg2MSwgMHhhNCwgMHhhMiwgMHgwMSwgMHhjYywgMHhlNCwgMHg5ZiwgMHgxOSwgMHg5OSwgMHg3ZCwgMHgxOSwgMHgyMCwKKyAweDZkLCAweDhjLCAweDhhLCAweDM0LCAweDM5LCAweDUxfSwgMzIsCit7MHg0NSwgMHgzNSwgMHhkMSwgMHgyYiwgMHg0MywgMHg3NywgMHg5MiwgMHg4YSwgMHg3YywgMHgwYSwgMHg2MSwgMHhjOSwgMHhmOCwKKyAweDI1LCAweGE0LCAweDg2LCAweDcxLCAweGVhLCAweDA1LCAweDkxLCAweDA3LCAweDQ4LCAweGM4LCAweGVmfSwgQlVGRkVSX1NJWkUsCit7MHgyNiwgMHhjNSwgMHg2OSwgMHg2MSwgMHhjMCwgMHgzNSwgMHhhNywgMHhlNCwgMHg1MiwgMHhjYywgMHhlNiwgMHgxYiwgMHhjNiwKKyAweGVlLCAweDIyLCAweDBkLCAweDc3LCAweGIzLCAweGY5LCAweDRkLCAweDE4LCAweGZkLCAweDEwLCAweGI2LCAweDY0LCAweDNiLAorIDB4NGYsIDB4Mzl9LAorIDI4LCAyNCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gR0NNIC0gMTZCIEFFUyAtIDEyQiBOb3VuY2UgJiAxMkIgYWRkaSBkYXRhXG4iLCA0LCBQU0FfS0VZX1RZUEVfQUVTLAorezB4M2QsIDB4ZTAsIDB4OTgsIDB4NzQsIDB4YjMsIDB4ODgsIDB4ZTYsIDB4NDksIDB4MTksIDB4ODgsIDB4ZDAsIDB4YzMsIDB4NjAsCisgMHg3ZSwgMHhhZSwgMHgxZn0sIDE2LCBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfR0NNLAorezB4NTcsIDB4NjksIDB4MGUsIDB4NDMsIDB4NGUsIDB4MjgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ZmMsIDB4YTEsIDB4YTN9LCAxMiwKK3sweDQyLCAweGY2LCAweDdlLCAweDNmLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwfSwgMTIsCit7MHg0NSwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MiwgMHhhMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHg0NCwgMHgxZiwgMHg0MCwKKyAweDY3LCAweDkzLCAweGI2LCAweGUwLCAweDAwLCAweDAwLCAweDAyLCAweDBhLCAweDAwLCAweGY1LCAweGZmLCAweDAxLCAweDAyLAorIDB4MDIsIDB4MDF9LCBCVUZGRVJfU0laRSwKK3sweEZCLCAweEEyLCAweENBLCAweDg0LCAweDVFLCAweDVELCAweEY5LCAweEYwLCAweEYyLCAweDJDLCAweDNFLCAweDZFLCAweDg2LAorIDB4REQsIDB4ODMsIDB4MUUsIDB4MUYsIDB4QzYsIDB4NTcsIDB4OTIsIDB4Q0QsIDB4MUEsIDB4RjksIDB4MTMsIDB4MEUsIDB4MTMsCisgMHg3OSwgMHhFRCwgMHgzNiwgMHg5RiwgMHgwNywgMHgxRiwgMHgzNSwgMHhFMCwgMHgzNCwgMHhCRSwgMHg5NSwgMHhGMSwgMHgxMiwKKyAweEU0LCAweEU3LCAweEQwLCAweDVELCAweDM1fSwKKyA0NCwgMjgsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2FlYWRfZGVjcnlwdCAtIERFUyBLZXlcbiIsIDUsIFBTQV9LRVlfVFlQRV9ERVMsCit7MHg3MCwgMHgyNCwgMHg1NSwgMHgwQywgMHgxNCwgMHg5RCwgMHhFRCwgMHgyOX0sIERFU184Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQ0NNLAorezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MEEsIDB4MEJ9LCAxMiwKK3sweEVDLCAweDQ2LCAweEJCLCAweDYzLCAweEIwLCAweDI1LCAweDIwLCAweEMzLCAweDNDLCAweDQ5LCAweEZELCAweDcwfSwgMTIsCit7MHhCOSwgMHg2QiwgMHg0OSwgMHhFMiwgMHgxRCwgMHg2MiwgMHgxNywgMHg0MSwgMHg2MywgMHgyOCwgMHg3NSwgMHhEQiwgMHg3RiwKKyAweDZDLCAweDkyLCAweDQzLCAweEQyLCAweEQ3LCAweEMyfSwgQlVGRkVSX1NJWkUsCit7MH0sIDExLCAwLCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAorfSwKKworeyJUZXN0IHBzYV9hZWFkX2RlY3J5cHQgLSBVbnN1cHBvcnRlZCBBbGdvcml0aG1cbiIsIDYsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5fSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NGQiwKK3swfSwgMTMsIHswfSwgMCwgImhlbGxvIHdvcmxkIiwgQlVGRkVSX1NJWkUsCit7MHg1RCwgMHhDMSwgMHg3MiwgMHgyMywgMHg2NiwgMHg5NiwgMHhGRCwgMHhGQywgMHg5MywgMHgwNiwgMHgyNywgMHg1MiwgMHhDNywKKyAweDBBLCAweENCLCAweDM2LCAweDU1LCAweDMwLCAweEM5LCAweDQ4LCAweDhGLCAweDVFLCAweEE1LCAweEI5LCAweDUxLCAweEZCLAorIDB4NEV9LAorIDI3LCAxMSwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKK30sCisKK3siVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gSW52YWxpZCBrZXkgdXNhZ2VcbiIsIDcsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5fSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0dDTSwKK3swfSwgMTMsIHswfSwgMCwgImhlbGxvIHdvcmxkIiwgQlVGRkVSX1NJWkUsCit7MHg1RCwgMHhDMSwgMHg3MiwgMHgyMywgMHg2NiwgMHg5NiwgMHhGRCwgMHhGQywgMHg5MywgMHgwNiwgMHgyNywgMHg1MiwgMHhDNywKKyAweDBBLCAweENCLCAweDM2LCAweDU1LCAweDMwLCAweEM5LCAweDQ4LCAweDhGLCAweDVFLCAweEE1LCAweEI5LCAweDUxLCAweEZCLAorIDB4NEV9LAorIDI3LCAxMSwgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQKK30sCisKK3siVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gU21hbGwgb3V0cHV0IGJ1ZmZlciBzaXplXG4iLCA4LCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOX0sIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19HQ00sCit7MH0sIDEzLCB7MH0sIDAsICJoZWxsbyB3b3JsZCIsIDEwLAorezB4NUQsIDB4QzEsIDB4NzIsIDB4MjMsIDB4NjYsIDB4OTYsIDB4RkQsIDB4RkMsIDB4OTMsIDB4MDYsIDB4MjcsIDB4NTIsIDB4QzcsCisgMHgwQSwgMHhDQiwgMHgzNiwgMHg1NSwgMHgzMCwgMHhDOSwgMHg0OCwgMHg4RiwgMHg1RSwgMHhBNSwgMHhCOSwgMHg1MSwgMHhGQiwKKyAweDRFfSwKKyAyNywgMTEsIFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMCit9LAorCit7IlRlc3QgcHNhX2FlYWRfZGVjcnlwdCAtIEludmFsaWQgY2lwaGVyIHRleHRcbiIsIDksIFBTQV9LRVlfVFlQRV9BRVMsCit7MHhENywgMHg4MiwgMHg4RCwgMHgxMywgMHhCMiwgMHhCMCwgMHhCRCwgMHhDMywgMHgyNSwgMHhBNywgMHg2MiwgMHgzNiwgMHhERiwKKyAweDkzLCAweENDLCAweDZCfSwKKyBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQ0NNLAorezB4MDAsIDB4NDEsIDB4MkIsIDB4NEUsIDB4QTksIDB4Q0QsIDB4QkUsIDB4M0MsIDB4OTYsIDB4OTYsIDB4NzYsIDB4NkMsIDB4RkF9LAorIDEzLAorezB4MEIsIDB4RTEsIDB4QTgsIDB4OEIsIDB4QUMsIDB4RTAsIDB4MTgsIDB4QjF9LCA4LAorezB4MDgsIDB4RTgsIDB4Q0YsIDB4OTcsIDB4RDgsIDB4MjAsIDB4RUEsIDB4MjUsIDB4ODQsIDB4NjAsIDB4RTksIDB4NkEsIDB4RDksCisgMHhDRiwgMHg1MiwgMHg4OSwgMHgwNSwgMHg0RCwgMHg4OSwgMHg1QywgMHhFQSwgMHhDNCwgMHg3Q30sIEJVRkZFUl9TSVpFLAorezB4NEMsIDB4QjgsIDB4N0YsIDB4ODYsIDB4QTIsIDB4QTQsIDB4NjgsIDB4OUEsIDB4ODcsIDB4NzksIDB4NDcsIDB4QUIsIDB4ODAsCisgMHg5MSwgMHhFRiwgMHg1MywgMHg4NiwgMHhBNiwgMHhGRiwgMHhCRCwgMHhEMCwgMHg4MCwgMHhGOCwgMHgxMiwgMHgwMywgMHgzMywKKyAweEQxLCAweEZDLCAweEI2LCAweDkxLCAweEYzLCAweDQwLCAweDZDLCAweEJGLCAweDUzLCAweDFGLCAweDgzLCAweEE0LCAweEQ4fSwKKyAzOSwgMjMsIFBTQV9FUlJPUl9JTlZBTElEX1NJR05BVFVSRQorfSwKKworeyJUZXN0IHBzYV9hZWFkX2RlY3J5cHQgLSBJbnZhbGlkIGNpcGhlciB0ZXh0IHNpemVcbiIsIDEwLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4RDcsIDB4ODIsIDB4OEQsIDB4MTMsIDB4QjIsIDB4QjAsIDB4QkQsIDB4QzMsIDB4MjUsIDB4QTcsIDB4NjIsIDB4MzYsIDB4REYsCisgMHg5MywgMHhDQywgMHg2Qn0sCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NDTSwKK3sweDAwLCAweDQxLCAweDJCLCAweDRFLCAweEE5LCAweENELCAweEJFLCAweDNDLCAweDk2LCAweDk2LCAweDc2LCAweDZDLCAweEZBfSwKKyAxMywKK3sweDBCLCAweEUxLCAweEE4LCAweDhCLCAweEFDLCAweEUwLCAweDE4LCAweEIxfSwgOCwKK3sweDA4LCAweEU4LCAweENGLCAweDk3LCAweEQ4LCAweDIwLCAweEVBLCAweDI1LCAweDg0LCAweDYwLCAweEU5LCAweDZBLCAweEQ5LAorIDB4Q0YsIDB4NTIsIDB4ODksIDB4MDUsIDB4NEQsIDB4ODksIDB4NUMsIDB4RUEsIDB4QzQsIDB4N0N9LCBCVUZGRVJfU0laRSwKK3sweDRDLCAweEI5LCAweDdGLCAweDg2LCAweEEyLCAweEE0LCAweDY4LCAweDlBLCAweDg3LCAweDc5LCAweDQ3LCAweEFCLCAweDgwLAorIDB4OTEsIDB4RUYsIDB4NTMsIDB4ODYsIDB4QTYsIDB4RkYsIDB4QkQsIDB4RDAsIDB4ODAsIDB4RjgsIDB4MTIsIDB4MDMsIDB4MzMsCisgMHhEMSwgMHhGQywgMHhCNiwgMHg5MSwgMHhGMywgMHg0MCwgMHg2QywgMHhCRiwgMHg1MywgMHgxRiwgMHg4MywgMHhBNH0sCisgMzgsIDIzLCBQU0FfRVJST1JfSU5WQUxJRF9TSUdOQVRVUkUKK30sCit9OworCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMltdID0geworeyJUZXN0IHBzYV9hZWFkX2RlY3J5cHQgLSBOZWdhdGl2ZSBjYXNlc1xuIiwgMTEsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5fSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0dDTSwKK3swfSwgMTMsIHswfSwgMCwgImhlbGxvIHdvcmxkIiwgQlVGRkVSX1NJWkUsCit7MHg1RCwgMHhDMSwgMHg3MiwgMHgyMywgMHg2NiwgMHg5NiwgMHhGRCwgMHhGQywgMHg5MywgMHgwNiwgMHgyNywgMHg1MiwgMHhDNywKKyAweDBBLCAweENCLCAweDM2LCAweDU1LCAweDMwLCAweEM5LCAweDQ4LCAweDhGLCAweDVFLCAweEE1LCAweEI5LCAweDUxLCAweEZCLAorIDB4NEV9LAorIDExLCAyNywgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjUvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjUvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MWFjNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNS90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAyNS5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCAyNSkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBBRUFEIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NyeXB0b19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9jMDI1X2NyeXB0b19saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0ZSRUUpOworICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNi9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNi9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2MDJiNgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI2L3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2MwMjYuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjYvdGVzdF9jMDI2LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNi90ZXN0X2MwMjYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzE3Zjk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjYvdGVzdF9jMDI2LmMKQEAgLTAsMCArMSwxNDkgQEAKKworLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAyNi5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorCitjbGllbnRfdGVzdF90IHRlc3RfYzAyNl9jcnlwdG9fbGlzdFtdID0geworICAgIE5VTEwsCisgICAgcHNhX21hY19zaWduX3NldHVwX3Rlc3QsCisgICAgcHNhX21hY19zaWduX3NldHVwX25lZ2F0aXZlX3Rlc3QsCisgICAgTlVMTCwKK307CisKK3N0YXRpYyBpbnQgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCA9IDE7CitzdGF0aWMgcHNhX21hY19vcGVyYXRpb25fdCBvcGVyYXRpb247CisKK2ludDMyX3QgcHNhX21hY19zaWduX3NldHVwX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7CisgICAgcHNhX2tleV9wb2xpY3lfdCAgICBwb2xpY3k7CisgICAgaW50MzJfdCAgICAgICAgICAgICBpLCBzdGF0dXM7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2sxW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazFbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9sZW5ndGgsICZjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfdHlwZSwgY2hlY2sxW2ldLmtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIC8qIFN0YXJ0IGEgbXVsdGlwYXJ0IE1BQyBjYWxjdWxhdGlvbiBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfU0lHTl9TRVRVUCwgJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9oYW5kbGUsIGNoZWNrMVtpXS5rZXlfYWxnKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgICAgICAvKiBBYm9ydCBhIE1BQyBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfQUJPUlQsICZvcGVyYXRpb24pOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IHBzYV9tYWNfc2lnbl9zZXR1cF9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludCAgICAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazIpL3NpemVvZihjaGVjazJbMF0pOworICAgIHBzYV9rZXlfcG9saWN5X3QgICAgcG9saWN5OworICAgIGludDMyX3QgICAgICAgICAgICAgaSwgc3RhdHVzOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMltpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfbWFjX3NpZ25fc2V0dXAgd2l0aCBpbnZhbGlkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIFN0YXJ0IGEgbXVsdGlwYXJ0IE1BQyBjYWxjdWxhdGlvbiBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfU0lHTl9TRVRVUCwgJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9oYW5kbGUsIGNoZWNrMltpXS5rZXlfYWxnKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfbWFjX3NpZ25fc2V0dXAgd2l0aCB6ZXJvIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIFN0YXJ0IGEgbXVsdGlwYXJ0IE1BQyBjYWxjdWxhdGlvbiBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfU0lHTl9TRVRVUCwgJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgMCwgY2hlY2syW2ldLmtleV9hbGcpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9tYWNfc2lnbl9zZXR1cCB3aXRoIGVtcHR5IGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2syW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfbGVuZ3RoLCAmY2hlY2syW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMltpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAgICAgLyogU3RhcnQgYSBtdWx0aXBhcnQgTUFDIGNhbGN1bGF0aW9uIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19TSUdOX1NFVFVQLCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2hhbmRsZSwgY2hlY2syW2ldLmtleV9hbGcpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9FTVBUWV9TTE9ULCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNi90ZXN0X2MwMjYuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI2L3Rlc3RfYzAyNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkM2UwNTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNi90ZXN0X2MwMjYuaApAQCAtMCwwICsxLDMxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9DMDI2X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9DMDI2X0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxjMDI2KQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMjZfY3J5cHRvX2xpc3RbXTsKKworaW50MzJfdCBwc2FfbWFjX3NpZ25fc2V0dXBfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CitpbnQzMl90IHBzYV9tYWNfc2lnbl9zZXR1cF9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKKyNlbmRpZiAvKiBfVEVTVF9DMDI2X0NMSUVOVF9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjYvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNi90ZXN0X2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTVlNTg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjYvdGVzdF9kYXRhLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisKKyNkZWZpbmUgRU1QVFlfS0VZX1NMT1QgICAgICAzMQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzY0XTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7CisgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2sxW10gPSB7Cit7IlRlc3QgcHNhX21hY19zaWduX3NldHVwIDY0IEJ5dGUgSE1BQ1xuIiwgMSwgUFNBX0tFWV9UWVBFX0hNQUMsCit7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywKKyAweDBkLCAweDBlLCAweDBmLCAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4LCAweDE5LAorIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsIDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsCisgMHgyNywgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywKKyAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmfSwKKyA2NCwgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX0hNQUMoUFNBX0FMR19TSEFfMjU2KSwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9tYWNfc2lnbl9zZXR1cCAxNiBCeXRlIEFFUyAtIENNQUNcbiIsIDIsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5LCAweDAwfSwKKyBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX1NJR04sIFBTQV9BTEdfQ01BQywKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9tYWNfc2lnbl9zZXR1cCAxNiBCeXRlIEFFUyAtIEdNQUNcbiIsIDMsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5LCAweDAwfSwKKyBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX1NJR04sIFBTQV9BTEdfR01BQywKKyBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAorfSwKKworeyJUZXN0IHBzYV9tYWNfc2lnbl9zZXR1cCBpbmNvbXBhY3RpYmxlIEhNQUMgZm9yIENNQUNcbiIsIDQsIFBTQV9LRVlfVFlQRV9ITUFDLAorezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsCisgMHgwRCwgMHgwRSwgMHgwRn0sCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX0NNQUMsCisgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKK30sCisKK3siVGVzdCBwc2FfbWFjX3NpZ25fc2V0dXAgaW52YWxpZCB1c2FnZVxuIiwgNSwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4Qzl9LAorIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NNQUMsCisgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQKK30sCisKK3siVGVzdCBwc2FfbWFjX3NpZ25fc2V0dXAgaW52YWxpZCBrZXkgdHlwZVxuIiwgNywgUFNBX0tFWV9UWVBFX1JBV19EQVRBLAorezB4MEIsIDB4MEIsIDB4MEIsIDB4MEIsIDB4MEIsIDB4MEIsIDB4MEIsIDB4MEIsIDB4MEIsIDB4MEIsIDB4MEIsIDB4MEIsIDB4MEIsCisgMHgwQiwgMHgwQiwgMHgwQn0sCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX0hNQUMoUFNBX0FMR19TSEFfMjU2KSwKKyBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKKworeyJUZXN0IHBzYV9tYWNfc2lnbl9zZXR1cCB0cnVuY2F0ZWQgTUFDIHRvbyBsYXJnZVxuIiwgOCwgUFNBX0tFWV9UWVBFX0hNQUMsCit7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywKKyAweDBkLCAweDBlLCAweDBmLCAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4LCAweDE5LAorIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsIDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsCisgMHgyNywgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywKKyAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmfSwKKyA2NCwgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX1RSVU5DQVRFRF9NQUMoUFNBX0FMR19ITUFDKFBTQV9BTEdfU0hBXzI1NiksIDMzKSwKKyBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKKworeyJUZXN0IHBzYV9tYWNfc2lnbl9zZXR1cCB0cnVuY2F0ZWQgTUFDIHRvbyBzbWFsbFxuIiwgOSwgUFNBX0tFWV9UWVBFX0hNQUMsCit7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywKKyAweDBkLCAweDBlLCAweDBmLCAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4LCAweDE5LAorIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsIDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsCisgMHgyNywgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywKKyAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmfSwKKyA2NCwgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX1RSVU5DQVRFRF9NQUMoUFNBX0FMR19ITUFDKFBTQV9BTEdfU0hBXzI1NiksIDEpLAorIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVECit9LAorCit7IlRlc3QgcHNhX21hY19zaWduX3NldHVwIGJhZCBhbGdvcml0aG0gKHVua25vd24gTUFDIGFsZ29yaXRobSlcbiIsIDEwLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOSwgMHgwMH0sCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX0hNQUMoMCksCisgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKK30sCisKK3siVGVzdCBwc2FfbWFjX3NpZ25fc2V0dXAgYmFkIGFsZ29yaXRobSAobm90IGEgTUFDIGFsZ29yaXRobSlcbiIsIDExLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOSwgMHgwMH0sCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorCit9OworCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMltdID0geworeyJUZXN0IHBzYV9tYWNfc2lnbl9zZXR1cCAtIE5lZ2F0aXZlIGNhc2VcbiIsIDEyLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOSwgMHgwMH0sCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX0NNQUMsCisgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjYvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjYvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YjMxMjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNi90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAyNi5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCAyNikKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBNQUMgQVBJc1xuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9ISUdIX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY3J5cHRvX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2MwMjZfY3J5cHRvX2xpc3QsIEZBTFNFKTsKKworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRlJFRSk7CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI3L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI3L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODgyNmRlCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjcvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfYzAyNy5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNy90ZXN0X2MwMjcuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI3L3Rlc3RfYzAyNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMTc3Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNy90ZXN0X2MwMjcuYwpAQCAtMCwwICsxLDE0MCBAQAorCisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9jMDI3LmgiCisjaW5jbHVkZSAidGVzdF9kYXRhLmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9jMDI3X2NyeXB0b19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBwc2FfbWFjX3VwZGF0ZV90ZXN0LAorICAgIHBzYV9tYWNfdXBkYXRlX2ludmFsaWRfb3BlcmF0b3JfdGVzdCwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludCAgICAgIGdfdGVzdF9jb3VudCA9IDE7CitzdGF0aWMgdWludDhfdCAgZGF0YVtCVUZGRVJfU0laRV07CisKK2ludDMyX3QgcHNhX21hY191cGRhdGVfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgIGksIHN0YXR1czsKKyAgICBzaXplX3QgICAgICAgICAgICAgIGxlbmd0aDsKKyAgICBwc2Ffa2V5X3BvbGljeV90ICAgIHBvbGljeTsKKyAgICBwc2FfbWFjX29wZXJhdGlvbl90IG9wZXJhdGlvbjsKKworICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMVtpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIC8qIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV90eXBlLCBjaGVjazFbaV0ua2V5X2RhdGEsIGNoZWNrMVtpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgLyogU3RhcnQgYSBtdWx0aXBhcnQgTUFDIGNhbGN1bGF0aW9uIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19TSUdOX1NFVFVQLCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2hhbmRsZSwgY2hlY2sxW2ldLmtleV9hbGcpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgICAgICAvKiBBZGQgYSBtZXNzYWdlIGZyYWdtZW50IHRvIGEgbXVsdGlwYXJ0IE1BQyBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfVVBEQVRFLCAmb3BlcmF0aW9uLCBjaGVjazFbaV0uZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmRhdGFfc2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEFib3J0IGEgTUFDIG9wZXJhdGlvbiAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfQUJPUlQsICZvcGVyYXRpb24pOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCisgICAgICAgIC8qIEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIE1BQyBvZiBhIG1lc3NhZ2UgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfU0lHTl9GSU5JU0gsICZvcGVyYXRpb24sIGRhdGEsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihkYXRhKS9zaXplb2YoZGF0YVswXSksICZsZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKworICAgICAgICAvKiBBZGQgYSBtZXNzYWdlIGZyYWdtZW50IHRvIHRoZSBzYW1lIG11bHRpcGFydCBNQUMgb3BlcmF0aW9uKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfVVBEQVRFLCAmb3BlcmF0aW9uLCBjaGVjazFbaV0uZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmRhdGFfc2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOworCisgICAgICAgIC8qIEFib3J0IGEgTUFDIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19BQk9SVCwgJm9wZXJhdGlvbik7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTEpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IHBzYV9tYWNfdXBkYXRlX2ludmFsaWRfb3BlcmF0b3JfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICBwc2FfbWFjX29wZXJhdGlvbl90IG9wZXJhdGlvbjsKKyAgICBpbnQzMl90ICAgICAgICAgICAgIHN0YXR1czsKKworICAgIG1lbXNldChkYXRhLCAweEMwREVDQUZFLCBzaXplb2YoZGF0YSkpOworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIlRlc3QgcHNhX21hY191cGRhdGUgd2l0aG91dCBtYWMgc2V0dXBcbiIsIDApOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgLyogU3RhcnQgYSBtdWx0aXBhcnQgTUFDIGNhbGN1bGF0aW9uIG9wZXJhdGlvbiAqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX1VQREFURSwgJm9wZXJhdGlvbiwgZGF0YSwKKyAgICAgICAgICAgICAgICAgc2l6ZW9mKGRhdGEpL3NpemVvZihkYXRhWzBdKSk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfQkFEX1NUQVRFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgIC8qIEFib3J0IGEgTUFDIG9wZXJhdGlvbiAqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX0FCT1JULCAmb3BlcmF0aW9uKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNy90ZXN0X2MwMjcuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI3L3Rlc3RfYzAyNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNGMyMmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNy90ZXN0X2MwMjcuaApAQCAtMCwwICsxLDMxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9DMDI3X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9DMDI3X0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxjMDI3KQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMjdfY3J5cHRvX2xpc3RbXTsKKworaW50MzJfdCBwc2FfbWFjX3VwZGF0ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKK2ludDMyX3QgcHNhX21hY191cGRhdGVfaW52YWxpZF9vcGVyYXRvcl90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKKyNlbmRpZiAvKiBfVEVTVF9DMDI3X0NMSUVOVF9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjcvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNy90ZXN0X2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjk1MmZkCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjcvdGVzdF9kYXRhLmgKQEAgLTAsMCArMSw1OCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1s3NV07CisgICAgcHNhX2tleV9oYW5kbGVfdCAgICAgICAga2V5X2hhbmRsZTsKKyAgICBwc2Ffa2V5X3R5cGVfdCAgICAgICAgICBrZXlfdHlwZTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBrZXlfZGF0YVs2NF07CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAga2V5X2xlbmd0aDsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBkYXRhWzY0XTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBkYXRhX3NpemU7CisgICAgcHNhX2tleV91c2FnZV90ICAgICAgICAgdXNhZ2U7CisgICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAga2V5X2FsZzsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXM7Cit9IHRlc3RfZGF0YTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3siVGVzdCBwc2FfbWFjX3VwZGF0ZSA2NCBCeXRlIEhNQUMgU0hBMjU2XG4iLCAxLCBQU0FfS0VZX1RZUEVfSE1BQywKK3sweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLAorIDB4MGQsIDB4MGUsIDB4MGYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MTgsIDB4MTksCisgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwgMHgyMCwgMHgyMSwgMHgyMiwgMHgyMywgMHgyNCwgMHgyNSwgMHgyNiwKKyAweDI3LCAweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLCAweDJlLCAweDJmLCAweDMwLCAweDMxLCAweDMyLCAweDMzLAorIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2Z9LAorIDY0LCAiaGVsbG8gd29ybGQiLCAxMSwgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX0hNQUMoUFNBX0FMR19TSEFfMjU2KSwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9tYWNfdXBkYXRlIDE2IEJ5dGUgQUVTIC0gQ01BQ1xuIiwgMiwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4QzksIDB4MDB9LAorIEFFU18xNkJfS0VZX1NJWkUsICJoZWxsbyB3b3JsZCIsIDExLCBQU0FfS0VZX1VTQUdFX1NJR04sIFBTQV9BTEdfQ01BQywKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9tYWNfdXBkYXRlIDMyIEJ5dGUgSE1BQyBTSEE1MTJcbiIsIDMsIFBTQV9LRVlfVFlQRV9ITUFDLAorezB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsCisgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwKKyAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBifSwKKyAzMiwgICJoZWxsbyB3b3JsZCIsIDExLCBQU0FfS0VZX1VTQUdFX1NJR04sIFBTQV9BTEdfSE1BQyhQU0FfQUxHX1NIQV81MTIpLAorIFBTQV9TVUNDRVNTCit9LAorfTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI3L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI3L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWRlYmZjCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjcvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2MwMjcuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9DUllQVE9fQkFTRSwgMjcpCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBjcnlwdG8gTUFDIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NyeXB0b19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9jMDI3X2NyeXB0b19saXN0LCBGQUxTRSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19GUkVFKTsKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjgvc291cmNlLm1rIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjgvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNmI4MWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyOC9zb3VyY2UubWsKQEAgLTAsMCArMSwyMCBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9jMDI4LmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI4L3Rlc3RfYzAyOC5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjgvdGVzdF9jMDI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU1OTBiMAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI4L3Rlc3RfYzAyOC5jCkBAIC0wLDAgKzEsMTIzIEBACisKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2MwMjguaCIKKyNpbmNsdWRlICJ0ZXN0X2RhdGEuaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMjhfY3J5cHRvX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHBzYV9tYWNfc2lnbl9maW5pc2hfdGVzdCwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludCAgICAgICAgICAgZ190ZXN0X2NvdW50ID0gMTsKK3N0YXRpYyB1aW50OF90ICAgICAgIGRhdGFbQlVGRkVSX1NJWkVdOworCitpbnQzMl90IHBzYV9tYWNfc2lnbl9maW5pc2hfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgIGksIHN0YXR1czsKKyAgICBzaXplX3QgICAgICAgICAgICAgIGxlbmd0aDsKKyAgICBwc2Ffa2V5X3BvbGljeV90ICAgIHBvbGljeTsKKyAgICBwc2FfbWFjX29wZXJhdGlvbl90IG9wZXJhdGlvbjsKKworICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOworCisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2sxW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfbGVuZ3RoLCAmY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X3R5cGUsIGNoZWNrMVtpXS5rZXlfZGF0YSwgY2hlY2sxW2ldLmtleV9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICAvKiBTdGFydCBhIG11bHRpcGFydCBNQUMgY2FsY3VsYXRpb24gb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX1NJR05fU0VUVVAsICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCBjaGVjazFbaV0ua2V5X2FsZyk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgIC8qIEFkZCBhIG1lc3NhZ2UgZnJhZ21lbnQgdG8gYSBtdWx0aXBhcnQgTUFDIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19VUERBVEUsICZvcGVyYXRpb24sIGNoZWNrMVtpXS5kYXRhLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uZGF0YV9zaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgLyogRmluaXNoIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgTUFDIG9mIGEgbWVzc2FnZSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19TSUdOX0ZJTklTSCwgJm9wZXJhdGlvbiwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLm1hY19zaXplLCAmbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKworICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cyAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgLyogQWJvcnQgYSBNQUMgb3BlcmF0aW9uICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19BQk9SVCwgJm9wZXJhdGlvbik7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlIE1BQyBsZW5ndGggbWF0Y2hlcyB3aXRoIHRoZSBleHBlY3RlZCBsZW5ndGggKi8KKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobGVuZ3RoLCBjaGVjazFbaV0uZXhwZWN0ZWRfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlIE1BQyBkYXRhIG1hdGNoZXMgd2l0aCB0aGUgZXhwZWN0ZWQgZGF0YSAqLworICAgICAgICBURVNUX0FTU0VSVF9NRU1DTVAoY2hlY2sxW2ldLmV4cGVjdGVkX2RhdGEsIGRhdGEsIGxlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMSkpOworCisgICAgICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCisgICAgICAgIC8qIEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIE1BQyBvZiBhIG1lc3NhZ2UgdXNpbmcgc2FtZSBvcGVyYXRpb24KKyAgICAgICAgICogc2hvdWxkIHJldHVybiBlcnJvcgorICAgICAgICAgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfU0lHTl9GSU5JU0gsICZvcGVyYXRpb24sIGRhdGEsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5tYWNfc2l6ZSwgJmxlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMikpOworCisgICAgICAgIC8qIEFib3J0IGEgTUFDIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19BQk9SVCwgJm9wZXJhdGlvbik7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjgvdGVzdF9jMDI4LmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyOC90ZXN0X2MwMjguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGIxYjBmCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjgvdGVzdF9jMDI4LmgKQEAgLTAsMCArMSwzMCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfQzAyOF9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfQzAyOF9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzAyOCkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9jMDI4X2NyeXB0b19saXN0W107CisKK2ludDMyX3QgcHNhX21hY19zaWduX2ZpbmlzaF90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKKyNlbmRpZiAvKiBfVEVTVF9DMDI4X0NMSUVOVF9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjgvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyOC90ZXN0X2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmJiNDA0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjgvdGVzdF9kYXRhLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbNzVdOworICAgIHBzYV9rZXlfaGFuZGxlX3QgICAgICAgIGtleV9oYW5kbGU7CisgICAgcHNhX2tleV90eXBlX3QgICAgICAgICAga2V5X3R5cGU7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAga2V5X2RhdGFbNjRdOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGtleV9sZW5ndGg7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgZGF0YVsxNl07CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgZGF0YV9zaXplOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2RhdGFbNjRdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIG1hY19zaXplOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2xlbmd0aDsKKyAgICBwc2Ffa2V5X3VzYWdlX3QgICAgICAgICB1c2FnZTsKKyAgICBwc2FfYWxnb3JpdGhtX3QgICAgICAgICBrZXlfYWxnOworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1czsKK30gdGVzdF9kYXRhOworCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0geworeyJUZXN0IHBzYV9tYWNfc2lnbl9maW5pc2ggSE1BQyBTSEEgMjI0XG4iLCAxLCBQU0FfS0VZX1RZUEVfSE1BQywKK3sweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLAorIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGJ9LCAyMCwKK3sweDQ4LCAweDY5LCAweDIwLCAweDU0LCAweDY4LCAweDY1LCAweDcyLCAweDY1fSwgOCwKK3sweDg5LCAweDZmLCAweGIxLCAweDEyLCAweDhhLCAweGJiLCAweGRmLCAweDE5LCAweDY4LCAweDMyLCAweDEwLCAweDdjLCAweGQ0LAorIDB4OWQsIDB4ZjMsIDB4M2YsIDB4NDcsIDB4YjQsIDB4YjEsIDB4MTYsIDB4OTksIDB4MTIsIDB4YmEsIDB4NGYsIDB4NTMsIDB4NjgsCisgMHg0YiwgMHgyMn0sIDY0LCAyOCwKKyBQU0FfS0VZX1VTQUdFX1NJR04sIFBTQV9BTEdfSE1BQyhQU0FfQUxHX1NIQV8yMjQpLAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX21hY19zaWduX2ZpbmlzaCBITUFDIFNIQSAyNTZcbiIsIDIsIFBTQV9LRVlfVFlQRV9ITUFDLAorezB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsCisgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYn0sIDIwLAorezB4NDgsIDB4NjksIDB4MjAsIDB4NTQsIDB4NjgsIDB4NjUsIDB4NzIsIDB4NjV9LCA4LAorezB4YjAsIDB4MzQsIDB4NGMsIDB4NjEsIDB4ZDgsIDB4ZGIsIDB4MzgsIDB4NTMsIDB4NWMsIDB4YTgsIDB4YWYsIDB4Y2UsIDB4YWYsCisgMHgwYiwgMHhmMSwgMHgyYiwgMHg4OCwgMHgxZCwgMHhjMiwgMHgwMCwgMHhjOSwgMHg4MywgMHgzZCwgMHhhNywgMHgyNiwgMHhlOSwKKyAweDM3LCAweDZjLCAweDJlLCAweDMyLCAweGNmLCAweGY3fSwgNjQsIDMyLAorIFBTQV9LRVlfVVNBR0VfU0lHTiwgUFNBX0FMR19ITUFDKFBTQV9BTEdfU0hBXzI1NiksCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfbWFjX3NpZ25fZmluaXNoIEhNQUMgU0hBIDUxMlxuIiwgMywgUFNBX0tFWV9UWVBFX0hNQUMsCit7MHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwKKyAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBifSwgMjAsCit7MHg0OCwgMHg2OSwgMHgyMCwgMHg1NCwgMHg2OCwgMHg2NSwgMHg3MiwgMHg2NX0sIDgsCit7MHg4NywgMHhhYSwgMHg3YywgMHhkZSwgMHhhNSwgMHhlZiwgMHg2MSwgMHg5ZCwgMHg0ZiwgMHhmMCwgMHhiNCwgMHgyNCwgMHgxYSwKKyAweDFkLCAweDZjLCAweGIwLCAweDIzLCAweDc5LCAweGY0LCAweGUyLCAweGNlLCAweDRlLCAweGMyLCAweDc4LCAweDdhLCAweGQwLAorIDB4YjMsIDB4MDUsIDB4NDUsIDB4ZTEsIDB4N2MsIDB4ZGUsIDB4ZGEsIDB4YTgsIDB4MzMsIDB4YjcsIDB4ZDYsIDB4YjgsIDB4YTcsCisgMHgwMiwgMHgwMywgMHg4YiwgMHgyNywgMHg0ZSwgMHhhZSwgMHhhMywgMHhmNCwgMHhlNCwgMHhiZSwgMHg5ZCwgMHg5MSwgMHg0ZSwKKyAweGViLCAweDYxLCAweGYxLCAweDcwLCAweDJlLCAweDY5LCAweDZjLCAweDIwLCAweDNhLCAweDEyLCAweDY4LCAweDU0fSwgNjQsIDY0LAorIFBTQV9LRVlfVVNBR0VfU0lHTiwgUFNBX0FMR19ITUFDKFBTQV9BTEdfU0hBXzUxMiksCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfbWFjX3NpZ25fZmluaXNoIEhNQUMgU0hBIDIyNCAodHJ1bmNhdGVkIHRvIDggQnl0ZSlcbiIsIDQsIFBTQV9LRVlfVFlQRV9ITUFDLAorezB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsCisgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYn0sIDIwLAorezB4NDgsIDB4NjksIDB4MjAsIDB4NTQsIDB4NjgsIDB4NjUsIDB4NzIsIDB4NjV9LCA4LAorezB4ODksIDB4NmYsIDB4YjEsIDB4MTIsIDB4OGEsIDB4YmIsIDB4ZGYsIDB4MTksIDB4Njh9LCA2NCwgOCwKKyBQU0FfS0VZX1VTQUdFX1NJR04sIFBTQV9BTEdfVFJVTkNBVEVEX01BQyhQU0FfQUxHX0hNQUMoUFNBX0FMR19TSEFfMjI0KSwgOCksCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfbWFjX3NpZ25fZmluaXNoIENNQUMgQUVTIDEyOFxuIiwgNSwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDJiLCAweDdlLCAweDE1LCAweDE2LCAweDI4LCAweGFlLCAweGQyLCAweGE2LCAweGFiLCAweGY3LCAweDE1LCAweDg4LCAweDA5LAorIDB4Y2YsIDB4NGYsIDB4M2N9LCAxNiwKK3sweDQ4LCAweDY5LCAweDIwLCAweDU0LCAweDY4LCAweDY1LCAweDcyLCAweDY1fSwgOCwKK3sweDlBLCAweDhGLCAweEZGLCAweDhELCAweEEzLCAweDVCLCAweDk3LCAweENCLCAweDRDLCAweDk1LCAweEYwLCAweEZBLCAweDZBLAorIDB4RTcsIDB4RTAsIDB4Nzd9LCA2NCwgMTYsCisgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX0NNQUMsCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfbWFjX3NpZ25fZmluaXNoIHNtYWxsIHNpemUgYnVmZmVyXG4iLCA2LCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksCisgMHhjZiwgMHg0ZiwgMHgzY30sIDE2LAorezB4NDgsIDB4NjksIDB4MjAsIDB4NTQsIDB4NjgsIDB4NjUsIDB4NzIsIDB4NjV9LCA4LAorezB4OUEsIDB4OEYsIDB4RkYsIDB4OEQsIDB4QTMsIDB4NUIsIDB4OTcsIDB4Q0IsIDB4NEMsIDB4OTUsIDB4RjAsIDB4RkEsIDB4NkEsCisgMHhFNywgMHhFMCwgMHg3N30sIDgsIDE2LAorIFBTQV9LRVlfVVNBR0VfU0lHTiwgUFNBX0FMR19DTUFDLAorIFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMCit9LAorfTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI4L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI4L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmRkYTY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjgvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2MwMjguaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9DUllQVE9fQkFTRSwgMjgpCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBjcnlwdG8gTUFDIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NyeXB0b19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9jMDI4X2NyeXB0b19saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0ZSRUUpOworICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyOS9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyOS9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4OTc4NAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI5L3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2MwMjkuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjkvdGVzdF9jMDI5LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyOS90ZXN0X2MwMjkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTFlNmZkCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjkvdGVzdF9jMDI5LmMKQEAgLTAsMCArMSwxNDQgQEAKKworLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAyOS5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorCitjbGllbnRfdGVzdF90IHRlc3RfYzAyOV9jcnlwdG9fbGlzdFtdID0geworICAgIE5VTEwsCisgICAgcHNhX21hY192ZXJpZnlfc2V0dXBfdGVzdCwKKyAgICBwc2FfbWFjX3ZlcmlmeV9zZXR1cF9uZWdhdGl2ZV90ZXN0LAorICAgIE5VTEwsCit9OworCitzdGF0aWMgaW50ICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQgPSAxOworc3RhdGljIHBzYV9tYWNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uOworCitpbnQzMl90IHBzYV9tYWNfdmVyaWZ5X3NldHVwX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7CisgICAgcHNhX2tleV9wb2xpY3lfdCAgICBwb2xpY3k7CisgICAgaW50MzJfdCAgICAgICAgICAgICBpLCBzdGF0dXM7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2sxW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazFbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9sZW5ndGgsICZjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfdHlwZSwgY2hlY2sxW2ldLmtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIC8qIFN0YXJ0IGEgbXVsdGlwYXJ0IE1BQyB2ZXJpZmljYXRpb24gb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX1ZFUklGWV9TRVRVUCwgJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9oYW5kbGUsIGNoZWNrMVtpXS5rZXlfYWxnKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgICAgICAvKiBBYm9ydCBhIE1BQyBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfQUJPUlQsICZvcGVyYXRpb24pOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IHBzYV9tYWNfdmVyaWZ5X3NldHVwX25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMikvc2l6ZW9mKGNoZWNrMlswXSk7CisgICAgcHNhX2tleV9wb2xpY3lfdCAgICBwb2xpY3k7CisgICAgaW50MzJfdCAgICAgICAgICAgICBpLCBzdGF0dXM7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2syW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9tYWNfdmVyaWZ5X3NldHVwIGludmFsaWQga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogU3RhcnQgYSBtdWx0aXBhcnQgTUFDIHZlcmlmaWNhdGlvbiBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfVkVSSUZZX1NFVFVQLCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2hhbmRsZSwgY2hlY2syW2ldLmtleV9hbGcpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9tYWNfdmVyaWZ5X3NldHVwIHplcm8gYXMga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogU3RhcnQgYSBtdWx0aXBhcnQgTUFDIHZlcmlmaWNhdGlvbiBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfVkVSSUZZX1NFVFVQLCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAwLCBjaGVjazJbaV0ua2V5X2FsZyk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMltpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMltpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9tYWNfdmVyaWZ5X3NldHVwIGVtcHR5IGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIFN0YXJ0IGEgbXVsdGlwYXJ0IE1BQyB2ZXJpZmljYXRpb24gb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX1ZFUklGWV9TRVRVUCwgJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9oYW5kbGUsIGNoZWNrMltpXS5rZXlfYWxnKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRU1QVFlfU0xPVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjkvdGVzdF9jMDI5LmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyOS90ZXN0X2MwMjkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQ5ZmVkCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjkvdGVzdF9jMDI5LmgKQEAgLTAsMCArMSwzMiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfQzAyOV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfQzAyOV9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzAyOSkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9jMDI5X2NyeXB0b19saXN0W107CisKK2ludDMyX3QgcHNhX21hY192ZXJpZnlfc2V0dXBfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CitpbnQzMl90IHBzYV9tYWNfdmVyaWZ5X3NldHVwX25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOworCisjZW5kaWYgLyogX1RFU1RfQzAyOV9DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI5L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjkvdGVzdF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVjNDQxYgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI5L3Rlc3RfZGF0YS5oCkBAIC0wLDAgKzEsMTI0IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCisjZGVmaW5lIEVNUFRZX0tFWV9TTE9UICAgICAgMzEKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1s3NV07CisgICAgcHNhX2tleV9oYW5kbGVfdCAgICAgICAga2V5X2hhbmRsZTsKKyAgICBwc2Ffa2V5X3R5cGVfdCAgICAgICAgICBrZXlfdHlwZTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBrZXlfZGF0YVs2NF07CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAga2V5X2xlbmd0aDsKKyAgICBwc2Ffa2V5X3VzYWdlX3QgICAgICAgICB1c2FnZTsKKyAgICBwc2FfYWxnb3JpdGhtX3QgICAgICAgICBrZXlfYWxnOworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1czsKK30gdGVzdF9kYXRhOworCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0geworeyJUZXN0IHBzYV9tYWNfdmVyaWZ5X3NldHVwIDY0IEJ5dGUgSE1BQ1xuIiwgMSwgUFNBX0tFWV9UWVBFX0hNQUMsCit7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywKKyAweDBkLCAweDBlLCAweDBmLCAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4LCAweDE5LAorIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsIDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsCisgMHgyNywgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywKKyAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmfSwKKyA2NCwgUFNBX0tFWV9VU0FHRV9WRVJJRlksIFBTQV9BTEdfSE1BQyhQU0FfQUxHX1NIQV8yNTYpLAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX21hY192ZXJpZnlfc2V0dXAgMTYgQnl0ZSBBRVMgLSBDTUFDXG4iLCAyLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MiwgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5LCAweDAwfSwKKyBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX1ZFUklGWSwgUFNBX0FMR19DTUFDLAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX21hY192ZXJpZnlfc2V0dXAgMTYgQnl0ZSBBRVMgLSBHTUFDXG4iLCAzLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOSwgMHgwMH0sCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9WRVJJRlksIFBTQV9BTEdfR01BQywKKyBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAorfSwKKworeyJUZXN0IHBzYV9tYWNfdmVyaWZ5X3NldHVwIGluY29tcGFjdGlibGUgSE1BQyBmb3IgQ01BQ1xuIiwgNCwgUFNBX0tFWV9UWVBFX0hNQUMsCit7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywKKyAweDBELCAweDBFLCAweDBGfSwKKyBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX1ZFUklGWSwgUFNBX0FMR19DTUFDLAorIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVECit9LAorCit7IlRlc3QgcHNhX21hY192ZXJpZnlfc2V0dXAgaW52YWxpZCB1c2FnZVxuIiwgNSwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4Qzl9LAorIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NNQUMsCisgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQKK30sCisKK3siVGVzdCBwc2FfbWFjX3ZlcmlmeV9zZXR1cCBpbnZhbGlkIGtleSB0eXBlXG4iLCA2LCBQU0FfS0VZX1RZUEVfUkFXX0RBVEEsCit7MHgwQiwgMHgwQiwgMHgwQiwgMHgwQiwgMHgwQiwgMHgwQiwgMHgwQiwgMHgwQiwgMHgwQiwgMHgwQiwgMHgwQiwgMHgwQiwgMHgwQiwKKyAweDBCLCAweDBCLCAweDBCfSwKKyBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX1ZFUklGWSwgUFNBX0FMR19ITUFDKFBTQV9BTEdfU0hBXzI1NiksCisgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCisKK3siVGVzdCBwc2FfbWFjX3ZlcmlmeV9zZXR1cCB0cnVuY2F0ZWQgTUFDIHRvbyBsYXJnZVxuIiwgNywgUFNBX0tFWV9UWVBFX0hNQUMsCit7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywKKyAweDBkLCAweDBlLCAweDBmLCAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4LCAweDE5LAorIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsIDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsCisgMHgyNywgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywKKyAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmfSwKKyA2NCwgUFNBX0tFWV9VU0FHRV9WRVJJRlksIFBTQV9BTEdfVFJVTkNBVEVEX01BQyhQU0FfQUxHX0hNQUMoUFNBX0FMR19TSEFfMjU2KSwgMzMpLAorIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorCit7IlRlc3QgcHNhX21hY192ZXJpZnlfc2V0dXAgdHJ1bmNhdGVkIE1BQyB0b28gc21hbGxcbiIsIDgsIFBTQV9LRVlfVFlQRV9ITUFDLAorezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsCisgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCwgMHgxOSwKKyAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLCAweDIwLCAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LAorIDB4MjcsIDB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsIDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsCisgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHgzZn0sCisgNjQsIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBQU0FfQUxHX1RSVU5DQVRFRF9NQUMoUFNBX0FMR19ITUFDKFBTQV9BTEdfU0hBXzI1NiksIDEpLAorIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVECit9LAorCit7IlRlc3QgcHNhX21hY192ZXJpZnlfc2V0dXAgYmFkIGFsZ29yaXRobSAodW5rbm93biBNQUMgYWxnb3JpdGhtKVxuIiwgOSwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4QzksIDB4MDB9LAorIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBQU0FfQUxHX0hNQUMoMCksCisgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKK30sCisKK3siVGVzdCBwc2FfbWFjX3ZlcmlmeV9zZXR1cCBiYWQgYWxnb3JpdGhtIChub3QgYSBNQUMgYWxnb3JpdGhtKVxuIiwgMTAsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5LCAweDAwfSwKKyBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX1ZFUklGWSwgUFNBX0FMR19DQkNfTk9fUEFERElORywKKyBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKK307CisKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2syW10gPSB7Cit7IlRlc3QgcHNhX21hY192ZXJpZnlfc2V0dXAgNjQgbmVnYXRpdmUgY2FzZVxuIiwgMTEsIFBTQV9LRVlfVFlQRV9ITUFDLAorezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsCisgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCwgMHgxOSwKKyAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLCAweDIwLCAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LAorIDB4MjcsIDB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsIDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsCisgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHgzZn0sCisgNjQsIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBQU0FfQUxHX0hNQUMoUFNBX0FMR19TSEFfMjU2KSwKKyBQU0FfU1VDQ0VTUworfSwKK307CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyOS90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyOS90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjMzIzZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI5L3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9jMDI5LmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfQ1JZUFRPX0JBU0UsIDI5KQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgY3J5cHRvIE1BQyBBUElzXG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0hJR0hfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jcnlwdG9fbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfYzAyOV9jcnlwdG9fbGlzdCwgRkFMU0UpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRlJFRSk7CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMwL3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMwL3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYThjYTJlCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzAvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfYzAzMC5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMC90ZXN0X2MwMzAuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMwL3Rlc3RfYzAzMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYmIyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMC90ZXN0X2MwMzAuYwpAQCAtMCwwICsxLDExMyBAQAorCisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9jMDMwLmgiCisjaW5jbHVkZSAidGVzdF9kYXRhLmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9jMDMwX2NyeXB0b19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBwc2FfbWFjX3ZlcmlmeV9maW5pc2hfdGVzdCwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludCBnX3Rlc3RfY291bnQgPSAxOworCitpbnQzMl90IHBzYV9tYWNfdmVyaWZ5X2ZpbmlzaF90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludCAgICAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazEpL3NpemVvZihjaGVjazFbMF0pOworICAgIGludDMyX3QgICAgICAgICAgICAgaSwgc3RhdHVzOworICAgIHBzYV9rZXlfcG9saWN5X3QgICAgcG9saWN5OworICAgIHBzYV9tYWNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOworCisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2sxW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfbGVuZ3RoLCAmY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X3R5cGUsIGNoZWNrMVtpXS5rZXlfZGF0YSwgY2hlY2sxW2ldLmtleV9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICAvKiBTdGFydCBhIG11bHRpcGFydCBNQUMgY2FsY3VsYXRpb24gb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX1ZFUklGWV9TRVRVUCwgJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9oYW5kbGUsIGNoZWNrMVtpXS5rZXlfYWxnKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAgICAgLyogQWRkIGEgbWVzc2FnZSBmcmFnbWVudCB0byBhIG11bHRpcGFydCBNQUMgb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX1VQREFURSwgJm9wZXJhdGlvbiwgY2hlY2sxW2ldLmRhdGEsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5kYXRhX3NpemUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgICAgICAvKiBGaW5pc2ggdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBNQUMgb2YgYSBtZXNzYWdlIGFuZCBjb21wYXJlIGl0IHdpdGgKKyAgICAgICAgICogYW4gZXhwZWN0ZWQgdmFsdWUKKyAgICAgICAgICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX1ZFUklGWV9GSU5JU0gsICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5leHBlY3RlZF9tYWMsIGNoZWNrMVtpXS5tYWNfc2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisKKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEFib3J0IGEgTUFDIG9wZXJhdGlvbiAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfQUJPUlQsICZvcGVyYXRpb24pOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIE1BQyBvZiBhIG1lc3NhZ2UgdXNpbmcgc2FtZSBvcGVyYXRpb24KKyAgICAgICAgICogc2hvdWxkIHJldHVybiBlcnJvcgorICAgICAgICAgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfVkVSSUZZX0ZJTklTSCwgJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmV4cGVjdGVkX21hYywgY2hlY2sxW2ldLm1hY19zaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfQkFEX1NUQVRFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CisKKyAgICAgICAgLyogQWJvcnQgYSBNQUMgb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX0FCT1JULCAmb3BlcmF0aW9uKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMSkpOworICAgIH0KKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMC90ZXN0X2MwMzAuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMwL3Rlc3RfYzAzMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YzI3MjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMC90ZXN0X2MwMzAuaApAQCAtMCwwICsxLDMwIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9DMDMwX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9DMDMwX0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxjMDMwKQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMzBfY3J5cHRvX2xpc3RbXTsKKworaW50MzJfdCBwc2FfbWFjX3ZlcmlmeV9maW5pc2hfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CisjZW5kaWYgLyogX1RFU1RfQzAzMF9DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMwL3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzAvdGVzdF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQyZTU3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMwL3Rlc3RfZGF0YS5oCkBAIC0wLDAgKzEsMTExIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzY0XTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGRhdGFbMTZdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGRhdGFfc2l6ZTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBleHBlY3RlZF9tYWNbNjRdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIG1hY19zaXplOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7CisgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2sxW10gPSB7Cit7IlRlc3QgcHNhX21hY192ZXJpZnlfZmluaXNoIEhNQUMgU0hBIDIyNFxuIiwgMSwgUFNBX0tFWV9UWVBFX0hNQUMsCit7MHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwKKyAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBifSwgMjAsCit7MHg0OCwgMHg2OSwgMHgyMCwgMHg1NCwgMHg2OCwgMHg2NSwgMHg3MiwgMHg2NX0sIDgsCit7MHg4OSwgMHg2ZiwgMHhiMSwgMHgxMiwgMHg4YSwgMHhiYiwgMHhkZiwgMHgxOSwgMHg2OCwgMHgzMiwgMHgxMCwgMHg3YywgMHhkNCwKKyAweDlkLCAweGYzLCAweDNmLCAweDQ3LCAweGI0LCAweGIxLCAweDE2LCAweDk5LCAweDEyLCAweGJhLCAweDRmLCAweDUzLCAweDY4LAorIDB4NGIsIDB4MjJ9LCAyOCwKKyBQU0FfS0VZX1VTQUdFX1ZFUklGWSwgUFNBX0FMR19ITUFDKFBTQV9BTEdfU0hBXzIyNCksCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfbWFjX3ZlcmlmeV9maW5pc2ggSE1BQyBTSEEgMjU2XG4iLCAyLCBQU0FfS0VZX1RZUEVfSE1BQywKK3sweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLAorIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGJ9LCAyMCwKK3sweDQ4LCAweDY5LCAweDIwLCAweDU0LCAweDY4LCAweDY1LCAweDcyLCAweDY1fSwgOCwKK3sweGIwLCAweDM0LCAweDRjLCAweDYxLCAweGQ4LCAweGRiLCAweDM4LCAweDUzLCAweDVjLCAweGE4LCAweGFmLCAweGNlLCAweGFmLAorIDB4MGIsIDB4ZjEsIDB4MmIsIDB4ODgsIDB4MWQsIDB4YzIsIDB4MDAsIDB4YzksIDB4ODMsIDB4M2QsIDB4YTcsIDB4MjYsIDB4ZTksCisgMHgzNywgMHg2YywgMHgyZSwgMHgzMiwgMHhjZiwgMHhmN30sIDMyLAorIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBQU0FfQUxHX0hNQUMoUFNBX0FMR19TSEFfMjU2KSwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9tYWNfdmVyaWZ5X2ZpbmlzaCBITUFDIFNIQSA1MTJcbiIsIDMsIFBTQV9LRVlfVFlQRV9ITUFDLAorezB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsCisgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYn0sIDIwLAorezB4NDgsIDB4NjksIDB4MjAsIDB4NTQsIDB4NjgsIDB4NjUsIDB4NzIsIDB4NjV9LCA4LAorezB4ODcsIDB4YWEsIDB4N2MsIDB4ZGUsIDB4YTUsIDB4ZWYsIDB4NjEsIDB4OWQsIDB4NGYsIDB4ZjAsIDB4YjQsIDB4MjQsIDB4MWEsCisgMHgxZCwgMHg2YywgMHhiMCwgMHgyMywgMHg3OSwgMHhmNCwgMHhlMiwgMHhjZSwgMHg0ZSwgMHhjMiwgMHg3OCwgMHg3YSwgMHhkMCwKKyAweGIzLCAweDA1LCAweDQ1LCAweGUxLCAweDdjLCAweGRlLCAweGRhLCAweGE4LCAweDMzLCAweGI3LCAweGQ2LCAweGI4LCAweGE3LAorIDB4MDIsIDB4MDMsIDB4OGIsIDB4MjcsIDB4NGUsIDB4YWUsIDB4YTMsIDB4ZjQsIDB4ZTQsIDB4YmUsIDB4OWQsIDB4OTEsIDB4NGUsCisgMHhlYiwgMHg2MSwgMHhmMSwgMHg3MCwgMHgyZSwgMHg2OSwgMHg2YywgMHgyMCwgMHgzYSwgMHgxMiwgMHg2OCwgMHg1NH0sIDY0LAorIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBQU0FfQUxHX0hNQUMoUFNBX0FMR19TSEFfNTEyKSwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9tYWNfdmVyaWZ5X2ZpbmlzaCBITUFDIFNIQSAyMjQgKHRydW5jYXRlZCB0byA4IEJ5dGUpXG4iLCA0LCBQU0FfS0VZX1RZUEVfSE1BQywKK3sweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLAorIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGJ9LCAyMCwKK3sweDQ4LCAweDY5LCAweDIwLCAweDU0LCAweDY4LCAweDY1LCAweDcyLCAweDY1fSwgOCwKK3sweDg5LCAweDZmLCAweGIxLCAweDEyLCAweDhhLCAweGJiLCAweGRmLCAweDE5LCAweDY4fSwgOCwKKyBQU0FfS0VZX1VTQUdFX1ZFUklGWSwgUFNBX0FMR19UUlVOQ0FURURfTUFDKFBTQV9BTEdfSE1BQyhQU0FfQUxHX1NIQV8yMjQpLCA4KSwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9tYWNfdmVyaWZ5X2ZpbmlzaCBDTUFDIEFFUyAxMjhcbiIsIDUsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwKKyAweGNmLCAweDRmLCAweDNjfSwgMTYsCit7MHg0OCwgMHg2OSwgMHgyMCwgMHg1NCwgMHg2OCwgMHg2NSwgMHg3MiwgMHg2NX0sIDgsCit7MHg5QSwgMHg4RiwgMHhGRiwgMHg4RCwgMHhBMywgMHg1QiwgMHg5NywgMHhDQiwgMHg0QywgMHg5NSwgMHhGMCwgMHhGQSwgMHg2QSwKKyAweEU3LCAweEUwLCAweDc3fSwgMTYsCisgUFNBX0tFWV9VU0FHRV9WRVJJRlksIFBTQV9BTEdfQ01BQywKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9tYWNfdmVyaWZ5X2ZpbmlzaCBzbWFsbCBzaXplIGJ1ZmZlclxuIiwgNiwgUFNBX0tFWV9UWVBFX0hNQUMsCit7MHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwKKyAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBifSwgMjAsCit7MHg0OCwgMHg2OSwgMHgyMCwgMHg1NCwgMHg2OCwgMHg2NSwgMHg3MiwgMHg2NX0sIDgsCit7MHhiMCwgMHgzNCwgMHg0YywgMHg2MSwgMHhkOCwgMHhkYiwgMHgzOCwgMHg1MywgMHg1YywgMHhhOCwgMHhhZiwgMHhjZSwgMHhhZiwKKyAweDBiLCAweGYxLCAweDJiLCAweDg4LCAweDFkLCAweGMyLCAweDAwLCAweGM5LCAweDgzLCAweDNkLCAweGE3LCAweDI2LCAweGU5LAorIDB4MzcsIDB4NmMsIDB4MmUsIDB4MzIsIDB4Y2YsIDB4Zjd9LCAzMCwKKyBQU0FfS0VZX1VTQUdFX1ZFUklGWSwgUFNBX0FMR19ITUFDKFBTQV9BTEdfU0hBXzI1NiksCisgUFNBX0VSUk9SX0lOVkFMSURfU0lHTkFUVVJFCit9LAorCit7IlRlc3QgcHNhX21hY192ZXJpZnlfZmluaXNoIGluY29ycmVjdCBleHBlY3RlZCBNQUNcbiIsIDcsIFBTQV9LRVlfVFlQRV9ITUFDLAorezB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsCisgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYn0sIDIwLAorezB4NDgsIDB4NjksIDB4MjAsIDB4NTQsIDB4NjgsIDB4NjUsIDB4NzIsIDB4NjV9LCA4LAorezB4ODksIDB4NmYsIDB4YjEsIDB4MTIsIDB4OGEsIDB4YmIsIDB4ZGYsIDB4MTksIDB4NjgsIDB4MzIsIDB4MTAsIDB4N2MsIDB4ZDQsCisgMHg5ZCwgMHhmMywgMHgzZiwgMHg0NywgMHhiNCwgMHhiMSwgMHgxNiwgMHg5OSwgMHgxMiwgMHhiYSwgMHg0ZiwgMHg1MywgMHg2OCwKKyAweDRiLCAweDIwfSwgMjgsCisgUFNBX0tFWV9VU0FHRV9WRVJJRlksIFBTQV9BTEdfSE1BQyhQU0FfQUxHX1NIQV8yMjQpLAorIFBTQV9FUlJPUl9JTlZBTElEX1NJR05BVFVSRQorfSwKK307CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMC90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMC90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4OGEwOAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMwL3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUzIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9jMDMwLmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfQ1JZUFRPX0JBU0UsIDMwKQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgY3J5cHRvIE1BQyBBUElzXG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0hJR0hfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jcnlwdG9fbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfYzAzMF9jcnlwdG9fbGlzdCwgRkFMU0UpOworCisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19GUkVFKTsKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzEvc291cmNlLm1rIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzEvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOGQzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMS9zb3VyY2UubWsKQEAgLTAsMCArMSwyMCBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9jMDMxLmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMxL3Rlc3RfYzAzMS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzEvdGVzdF9jMDMxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc4ZWJlZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMxL3Rlc3RfYzAzMS5jCkBAIC0wLDAgKzEsMTYyIEBACisKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2MwMzEuaCIKKyNpbmNsdWRlICJ0ZXN0X2RhdGEuaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMzFfY3J5cHRvX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHBzYV9tYWNfYWJvcnRfdGVzdCwKKyAgICBwc2FfbWFjX2Fib3J0X2JlZm9yZV9maW5pc2hfdGVzdCwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludCAgICAgICAgIGdfdGVzdF9jb3VudCA9IDE7CitzdGF0aWMgdWludDhfdCAgICAgZGF0YVtCVUZGRVJfU0laRV07CisKK2ludDMyX3QgcHNhX21hY19hYm9ydF90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludCAgICAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazEpL3NpemVvZihjaGVjazFbMF0pOworICAgIGludDMyX3QgICAgICAgICAgICAgaSwgc3RhdHVzOworICAgIHBzYV9rZXlfcG9saWN5X3QgICAgcG9saWN5OworICAgIHBzYV9tYWNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOworCisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2sxW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfbGVuZ3RoLCAmY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X3R5cGUsIGNoZWNrMVtpXS5rZXlfZGF0YSwgY2hlY2sxW2ldLmtleV9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICAvKiBTdGFydCBhIG11bHRpcGFydCBNQUMgY2FsY3VsYXRpb24gb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX1NJR05fU0VUVVAsICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCBjaGVjazFbaV0ua2V5X2FsZyk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgIC8qIEFib3J0IGEgTUFDIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19BQk9SVCwgJm9wZXJhdGlvbik7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworCisgICAgICAgIC8qIE11bHRpcGxlIEFib3J0IGEgTUFDIG9wZXJhdGlvbiBzaG91bGQgc3VjY2VlZCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19BQk9SVCwgJm9wZXJhdGlvbik7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworICAgIH0KKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3QgcHNhX21hY19hYm9ydF9iZWZvcmVfZmluaXNoX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgc2l6ZV90ICAgICAgICAgICAgICBsZW5ndGg7CisgICAgcHNhX2tleV9wb2xpY3lfdCAgICBwb2xpY3k7CisgICAgcHNhX2FsZ29yaXRobV90ICAgICBrZXlfYWxnID0gUFNBX0FMR19DTUFDOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgdXNhZ2UgPSBQU0FfS0VZX1VTQUdFX1NJR047CisgICAgcHNhX2tleV9oYW5kbGVfdCAgICBrZXlfaGFuZGxlID0gMTA7CisgICAgcHNhX2tleV90eXBlX3QgICAgICBrZXlfdHlwZSA9IFBTQV9LRVlfVFlQRV9BRVM7CisgICAgcHNhX21hY19vcGVyYXRpb25fdCBvcGVyYXRpb247CisgICAgdWludDhfdCAgICAgICAgICAgICBrZXlfZGF0YVtdID0gezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsIDB4ZjcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4ODgsIDB4MDksIDB4Y2YsIDB4NGYsIDB4M2N9OworICAgIHVpbnQ4X3QgICAgICAgICAgICAgaW5wdXRfZGF0YVtdID0gezB4NDgsIDB4NjksIDB4MjAsIDB4NTQsIDB4NjgsIDB4NjUsIDB4NzIsIDB4NjV9OworICAgIHNpemVfdCAgICAgICAgICAgICAga2V5X2xlbmd0aCA9IHNpemVvZihrZXlfZGF0YSkvc2l6ZW9mKGtleV9kYXRhWzBdKTsKKyAgICBzaXplX3QgICAgICAgICAgICAgIGlucHV0ZGF0YV9zaXplID0gc2l6ZW9mKGlucHV0X2RhdGEpL3NpemVvZihpbnB1dF9kYXRhWzBdKTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgIHN0YXR1czsKKworICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCisgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CisgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiVGVzdCBwc2FfbWFjX3NpZ25fZmluaXNoIGFmdGVyIGNhbGxpbmcgcHNhX21hY19hYm9ydFxuIiwgMCk7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICovCisgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgdXNhZ2UsIGtleV9hbGcpOworCisgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGtleV90eXBlLCBrZXlfbGVuZ3RoLCAma2V5X2hhbmRsZSk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwga2V5X2hhbmRsZSwgJnBvbGljeSk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBrZXlfaGFuZGxlLCBrZXlfdHlwZSwga2V5X2RhdGEsCisgICAgICAgICAgICAgICAga2V5X2xlbmd0aCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAvKiBTdGFydCBhIG11bHRpcGFydCBNQUMgY2FsY3VsYXRpb24gb3BlcmF0aW9uICovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfU0lHTl9TRVRVUCwgJm9wZXJhdGlvbiwga2V5X2hhbmRsZSwga2V5X2FsZyk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAvKiBBZGQgYSBtZXNzYWdlIGZyYWdtZW50IHRvIGEgbXVsdGlwYXJ0IE1BQyBvcGVyYXRpb24gKi8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19VUERBVEUsICZvcGVyYXRpb24sIGlucHV0X2RhdGEsIGlucHV0ZGF0YV9zaXplKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgIC8qIEFib3J0IGEgTUFDIG9wZXJhdGlvbiAqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX0FCT1JULCAmb3BlcmF0aW9uKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKworICAgIC8qIEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIE1BQyBvZiBhIG1lc3NhZ2UgKi8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19TSUdOX0ZJTklTSCwgJm9wZXJhdGlvbiwgZGF0YSwKKyAgICAgICAgICAgICAgICBCVUZGRVJfU0laRSwgJmxlbmd0aCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfQkFEX1NUQVRFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMS90ZXN0X2MwMzEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMxL3Rlc3RfYzAzMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZWU2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMS90ZXN0X2MwMzEuaApAQCAtMCwwICsxLDMxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9DMDMxX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9DMDMxX0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxjMDMxKQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMzFfY3J5cHRvX2xpc3RbXTsKKworaW50MzJfdCBwc2FfbWFjX2Fib3J0X3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOworaW50MzJfdCBwc2FfbWFjX2Fib3J0X2JlZm9yZV9maW5pc2hfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CisjZW5kaWYgLyogX1RFU1RfQzAzMV9DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMxL3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzEvdGVzdF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdhYTdmZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMxL3Rlc3RfZGF0YS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbNzVdOworICAgIHBzYV9rZXlfaGFuZGxlX3QgICAgICAgIGtleV9oYW5kbGU7CisgICAgcHNhX2tleV90eXBlX3QgICAgICAgICAga2V5X3R5cGU7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAga2V5X2RhdGFbNjRdOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGtleV9sZW5ndGg7CisgICAgcHNhX2tleV91c2FnZV90ICAgICAgICAgdXNhZ2U7CisgICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAga2V5X2FsZzsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXM7Cit9IHRlc3RfZGF0YTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3siVGVzdCBwc2FfbWFjX2Fib3J0IEhNQUMgU0hBIDIyNFxuIiwgMSwgUFNBX0tFWV9UWVBFX0hNQUMsCit7MHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwKKyAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBifSwgMjAsCisgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX0hNQUMoUFNBX0FMR19TSEFfMjI0KSwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9tYWNfYWJvcnQgSE1BQyBTSEEgMjU2XG4iLCAyLCBQU0FfS0VZX1RZUEVfSE1BQywKK3sweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLAorIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGJ9LCAyMCwKKyBQU0FfS0VZX1VTQUdFX1NJR04sIFBTQV9BTEdfSE1BQyhQU0FfQUxHX1NIQV8yNTYpLAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX21hY19hYm9ydCBITUFDIFNIQSA1MTJcbiIsIDMsIFBTQV9LRVlfVFlQRV9ITUFDLAorezB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsCisgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYn0sIDIwLAorIFBTQV9LRVlfVVNBR0VfU0lHTiwgUFNBX0FMR19ITUFDKFBTQV9BTEdfU0hBXzUxMiksCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfbWFjX2Fib3J0IEhNQUMgU0hBIDIyNCAodHJ1bmNhdGVkIHRvIDggQnl0ZSlcbiIsIDQsIFBTQV9LRVlfVFlQRV9ITUFDLAorezB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsCisgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYn0sIDIwLAorIFBTQV9LRVlfVVNBR0VfU0lHTiwgUFNBX0FMR19UUlVOQ0FURURfTUFDKFBTQV9BTEdfSE1BQyhQU0FfQUxHX1NIQV8yMjQpLCA4KSwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9tYWNfYWJvcnQgQ01BQyBBRVMgMTI4XG4iLCA1LCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksCisgMHhjZiwgMHg0ZiwgMHgzY30sIDE2LAorIFBTQV9LRVlfVVNBR0VfU0lHTiwgUFNBX0FMR19DTUFDLAorIFBTQV9TVUNDRVNTCit9LAorfTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMxL3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMxL3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDk3YTBkCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzEvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2MwMzEuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9DUllQVE9fQkFTRSwgMzEpCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBjcnlwdG8gTUFDIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NyeXB0b19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9jMDMxX2NyeXB0b19saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0ZSRUUpOworICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMi9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMi9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA5ODk0NwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMyL3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2MwMzIuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzIvdGVzdF9jMDMyLmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMi90ZXN0X2MwMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmY4MGYxCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzIvdGVzdF9jMDMyLmMKQEAgLTAsMCArMSwxODEgQEAKKworLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAzMi5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorCitjbGllbnRfdGVzdF90IHRlc3RfYzAzMl9jcnlwdG9fbGlzdFtdID0geworICAgIE5VTEwsCisgICAgcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwX3Rlc3QsCisgICAgcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwX25lZ2F0aXZlX3Rlc3QsCisgICAgTlVMTCwKK307CisKK3N0YXRpYyBpbnQgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQgPSAxOworc3RhdGljIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgIG9wZXJhdGlvbjsKKworaW50MzJfdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXBfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgaSwgc3RhdHVzOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICprZXlfZGF0YTsKKyAgICBwc2Ffa2V5X3BvbGljeV90ICAgICAgICBwb2xpY3k7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2sxW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgaWYgKFBTQV9LRVlfVFlQRV9JU19SU0EoY2hlY2sxW2ldLmtleV90eXBlKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNoZWNrMVtpXS5rZXlfdHlwZSA9PSBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMzg0KSkKKyAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMzg0X2tleXBhaXI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygyNTYpKQorICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IHJzYV8yNTZfa2V5cGFpcjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMzg0KSkKKyAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMzg0X2tleWRhdGE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygyNTYpKQorICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IHJzYV8yNTZfa2V5ZGF0YTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoUFNBX0tFWV9UWVBFX0lTX0VDQyhjaGVjazFbaV0ua2V5X3R5cGUpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoUFNBX0tFWV9UWVBFX0lTX0VDQ19LRVlQQUlSKGNoZWNrMVtpXS5rZXlfdHlwZSkpCisgICAgICAgICAgICAgICAga2V5X2RhdGEgPSBlY19rZXlwYWlyOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGtleV9kYXRhID0gZWNfa2V5ZGF0YTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBrZXlfZGF0YSA9IGNoZWNrMVtpXS5rZXlfZGF0YTsKKworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMVtpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIC8qIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV90eXBlLCBrZXlfZGF0YSwgY2hlY2sxW2ldLmtleV9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICAvKiBTZXQgdGhlIGtleSBmb3IgYSBtdWx0aXBhcnQgc3ltbWV0cmljIGVuY3J5cHRpb24gb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX0VOQ1JZUFRfU0VUVVAsICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCBjaGVjazFbaV0ua2V5X2FsZyk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAgICAgLyogQWJvcnQgYSBjaXBoZXIgb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX0FCT1JULCAmb3BlcmF0aW9uKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworaW50MzJfdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXBfbmVnYXRpdmVfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMikvc2l6ZW9mKGNoZWNrMlswXSk7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgaSwgc3RhdHVzOworICAgIHBzYV9rZXlfcG9saWN5X3QgICAgICAgIHBvbGljeTsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCisgICAgeworICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgICAgIC8qIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazJbaV0udXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwIC0gSW52YWxpZCBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIFNldCB0aGUga2V5IGZvciBhIG11bHRpcGFydCBzeW1tZXRyaWMgZW5jcnlwdGlvbiBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfRU5DUllQVF9TRVRVUCwgJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9oYW5kbGUsIGNoZWNrMltpXS5rZXlfYWxnKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgLSBaZXJvIGFzIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogU2V0IHRoZSBrZXkgZm9yIGEgbXVsdGlwYXJ0IHN5bW1ldHJpYyBlbmNyeXB0aW9uIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9FTkNSWVBUX1NFVFVQLCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAwLCBjaGVjazJbaV0ua2V5X2FsZyk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwIC0gRW1wdHkga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMltpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMltpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgIC8qIFNldCB0aGUga2V5IGZvciBhIG11bHRpcGFydCBzeW1tZXRyaWMgZW5jcnlwdGlvbiBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfRU5DUllQVF9TRVRVUCwgJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9oYW5kbGUsIGNoZWNrMltpXS5rZXlfYWxnKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRU1QVFlfU0xPVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzIvdGVzdF9jMDMyLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMi90ZXN0X2MwMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmE5MDJjCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzIvdGVzdF9jMDMyLmgKQEAgLTAsMCArMSwzMSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfQzAzMl9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfQzAzMl9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzAzMikKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9jMDMyX2NyeXB0b19saXN0W107CisKK2ludDMyX3QgcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOworaW50MzJfdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXBfbmVnYXRpdmVfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CisjZW5kaWYgLyogX1RFU1RfQzAzMl9DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMyL3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzIvdGVzdF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJiNGM0YgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMyL3Rlc3RfZGF0YS5oCkBAIC0wLDAgKzEsMjgwIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzY0XTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYml0X2xlbmd0aDsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXM7Cit9IHRlc3RfZGF0YTsKKworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlwYWlyWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlkYXRhWzFdOworCitzdGF0aWMgdWludDhfdCByc2FfMjU2X2tleXBhaXJbXSA9IHsKKyAweDMwLCAweDgyLCAweDA0LCAweEE1LCAweDAyLCAweDAxLCAweDAwLCAweDAyLCAweDgyLCAweDAxLCAweDAxLCAweDAwLCAweEMwLAorIDB4OTUsIDB4MDgsIDB4RTEsIDB4NTcsIDB4NDEsIDB4RjIsIDB4NzEsIDB4NkQsIDB4QjcsIDB4RDIsIDB4NDUsIDB4NDEsIDB4MjcsCisgMHgwMSwgMHg2NSwgMHhDNiwgMHg0NSwgMHhBRSwgMHhGMiwgMHhCQywgMHgyNCwgMHgzMCwgMHhCOCwgMHg5NSwgMHhDRSwgMHgyRiwKKyAweDRFLCAweEQ2LCAweEY2LCAweDFDLCAweDg4LCAweEJDLCAweDdDLCAweDlGLCAweEZCLCAweEE4LCAweDY3LCAweDdGLCAweEZFLAorIDB4NUMsIDB4OUMsIDB4NTEsIDB4NzUsIDB4RjcsIDB4OEEsIDB4Q0EsIDB4MDcsIDB4RTcsIDB4MzUsIDB4MkYsIDB4OEYsIDB4RTEsCisgMHhCRCwgMHg3QiwgMHhDMCwgMHgyRiwgMHg3QywgMHhBQiwgMHg2NCwgMHhBOCwgMHgxNywgMHhGQywgMHhDQSwgMHg1RCwgMHg3QiwKKyAweEJBLCAweEUwLCAweDIxLCAweEU1LCAweDcyLCAweDJFLCAweDZGLCAweDJFLCAweDg2LCAweEQ4LCAweDk1LCAweDczLCAweERBLAorIDB4QUMsIDB4MUIsIDB4NTMsIDB4QjksIDB4NUYsIDB4M0YsIDB4RDcsIDB4MTksIDB4MEQsIDB4MjUsIDB4NEYsIDB4RTEsIDB4NjMsCisgMHg2MywgMHg1MSwgMHg4QiwgMHgwQiwgMHg2NCwgMHgzRiwgMHhBRCwgMHg0MywgMHhCOCwgMHhBNSwgMHgxQywgMHg1QywgMHgzNCwKKyAweEIzLCAweEFFLCAweDAwLCAweEEwLCAweDYzLCAweEM1LCAweEY2LCAweDdGLCAweDBCLCAweDU5LCAweDY4LCAweDc4LCAweDczLAorIDB4QTYsIDB4OEMsIDB4MTgsIDB4QTksIDB4MDIsIDB4NkQsIDB4QUYsIDB4QzMsIDB4MTksIDB4MDEsIDB4MkUsIDB4QjgsIDB4MTAsCisgMHhFMywgMHhDNiwgMHhDQywgMHg0MCwgMHhCNCwgMHg2OSwgMHhBMywgMHg0NiwgMHgzMywgMHg2OSwgMHg4NywgMHg2RSwgMHhDNCwKKyAweEJCLCAweDE3LCAweEE2LCAweEYzLCAweEU4LCAweERELCAweEFELCAweDczLCAweEJDLCAweDdCLCAweDJGLCAweDIxLCAweEI1LAorIDB4RkQsIDB4NjYsIDB4NTEsIDB4MEMsIDB4QkQsIDB4NTQsIDB4QjMsIDB4RTEsIDB4NkQsIDB4NUYsIDB4MUMsIDB4QkMsIDB4MjMsCisgMHg3MywgMHhEMSwgMHgwOSwgMHgwMywgMHg4OSwgMHgxNCwgMHhEMiwgMHgxMCwgMHhCOSwgMHg2NCwgMHhDMywgMHgyQSwgMHhEMCwKKyAweEExLCAweDk2LCAweDRBLCAweEJDLCAweEUxLCAweEQ0LCAweDFBLCAweDVCLCAweEM3LCAweEEwLCAweEMwLCAweEMxLCAweDYzLAorIDB4NzgsIDB4MEYsIDB4NDQsIDB4MzcsIDB4MzAsIDB4MzIsIDB4OTYsIDB4ODAsIDB4MzIsIDB4MjMsIDB4OTUsIDB4QTEsIDB4NzcsCisgMHhCQSwgMHgxMywgMHhEMiwgMHg5NywgMHg3MywgMHhFMiwgMHg1RCwgMHgyNSwgMHhDOSwgMHg2QSwgMHgwRCwgMHhDMywgMHgzOSwKKyAweDYwLCAweEE0LCAweEI0LCAweEIwLCAweDY5LCAweDQyLCAweDQyLCAweDA5LCAweEU5LCAweEQ4LCAweDA4LCAweEJDLCAweDMzLAorIDB4MjAsIDB4QjMsIDB4NTgsIDB4MjIsIDB4QTcsIDB4QUEsIDB4RUIsIDB4QzQsIDB4RTEsIDB4RTYsIDB4NjEsIDB4ODMsIDB4QzUsCisgMHhEMiwgMHg5NiwgMHhERiwgMHhEOSwgMHhEMCwgMHg0RiwgMHhBRCwgMHhENywgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMSwKKyAweDAyLCAweDgyLCAweDAxLCAweDAxLCAweDAwLCAweDlBLCAweEQwLCAweDM0LCAweDBGLCAweDUyLCAweDYyLCAweDA1LCAweDUwLAorIDB4MDEsIDB4RUYsIDB4OUYsIDB4RUQsIDB4NjQsIDB4NkUsIDB4QzIsIDB4QzQsIDB4REEsIDB4MUEsIDB4RjIsIDB4ODQsIDB4RDcsCisgMHg5MiwgMHgxMCwgMHg0OCwgMHg5MiwgMHhDNCwgMHhFOSwgMHg2QSwgMHhFQiwgMHg4QiwgMHg3NSwgMHg2QywgMHhDNiwgMHg3OSwKKyAweDM4LCAweEYyLCAweEM5LCAweDcyLCAweDRBLCAweDg2LCAweDY0LCAweDU0LCAweDk1LCAweDc3LCAweENCLCAweEMzLCAweDlBLAorIDB4OUQsIDB4QjcsIDB4RDQsIDB4MUQsIDB4QTQsIDB4MDAsIDB4QzgsIDB4OUUsIDB4NEUsIDB4RTQsIDB4REQsIDB4QzcsIDB4QkEsCisgMHg2NywgMHgxNiwgMHhDMSwgMHg3NCwgMHhCQywgMHhBOSwgMHhENiwgMHg5NCwgMHg4RiwgMHgyQiwgMHgzMCwgMHgxQSwgMHhGQiwKKyAweEVELCAweERGLCAweDIxLCAweDA1LCAweDIzLCAweEQ5LCAweDRBLCAweDM5LCAweEJELCAweDk4LCAweDZCLCAweDY1LCAweDlBLAorIDB4QjgsIDB4REMsIDB4QzQsIDB4N0QsIDB4RUUsIDB4QTYsIDB4NDMsIDB4MTUsIDB4MkUsIDB4M0QsIDB4QkUsIDB4MUQsIDB4MjIsCisgMHg2MCwgMHgyQSwgMHg3MywgMHgzMCwgMHhENSwgMHgzRSwgMHhEOCwgMHhBMiwgMHhBQywgMHg4NiwgMHg0MywgMHgyRSwgMHhDNCwKKyAweEY1LCAweDY0LCAweDVFLCAweDNGLCAweDg5LCAweDc1LCAweDBGLCAweDExLCAweEQ4LCAweDUxLCAweDI1LCAweDRFLCAweDlGLAorIDB4RDgsIDB4QUEsIDB4QTMsIDB4Q0UsIDB4NjAsIDB4QjMsIDB4RTIsIDB4OEEsIDB4RDksIDB4N0UsIDB4MUIsIDB4RjAsIDB4NjQsCisgMHhDQSwgMHg5QSwgMHg1QiwgMHgwNSwgMHgwQiwgMHg1QiwgMHhBQSwgMHhDQiwgMHhFNSwgMHhFMywgMHgzRiwgMHg2RSwgMHgzMiwKKyAweDIyLCAweDA1LCAweEYzLCAweEQwLCAweEZBLCAweEVGLCAweDc0LCAweDUyLCAweDgxLCAweEUyLCAweDVGLCAweDc0LCAweEQzLAorIDB4QkQsIDB4RkYsIDB4MzEsIDB4ODMsIDB4NDUsIDB4NzUsIDB4RkEsIDB4NjMsIDB4N0EsIDB4OTcsIDB4MkUsIDB4RDYsIDB4QjYsCisgMHgxOSwgMHhDNiwgMHg5MiwgMHgyNiwgMHhFNCwgMHgyOCwgMHgwNiwgMHg1MCwgMHg1MCwgMHgwRSwgMHg3OCwgMHgyRSwgMHhBOSwKKyAweDc4LCAweDBELCAweDE0LCAweDk3LCAweEI0LCAweDEyLCAweEQ4LCAweDMxLCAweDQwLCAweEFCLCAweEExLCAweDAxLCAweDQxLAorIDB4QzIsIDB4MzAsIDB4RjgsIDB4MDcsIDB4NUYsIDB4MTYsIDB4RTQsIDB4NjEsIDB4NzcsIDB4RDIsIDB4NjAsIDB4RjIsIDB4OUYsCisgMHg4RCwgMHhFOCwgMHhGNCwgMHhCQSwgMHhFQiwgMHg2MywgMHhERSwgMHgyQSwgMHg5NywgMHg4MSwgMHhFRiwgMHg0QywgMHg2QywKKyAweEU2LCAweDU1LCAweDM0LCAweDUxLCAweDJCLCAweDI4LCAweDM0LCAweEY0LCAweDUzLCAweDFDLCAweEM0LCAweDU4LCAweDBBLAorIDB4M0YsIDB4QkIsIDB4QUYsIDB4QjUsIDB4RjcsIDB4NEEsIDB4ODUsIDB4NDMsIDB4MkQsIDB4M0MsIDB4RjEsIDB4NTgsIDB4NTgsCisgMHg4MSwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhGMiwgMHgyQywgMHg1NCwgMHg3NiwgMHgzOSwgMHgyMywgMHg2MywgMHhDOSwKKyAweDEwLCAweDMyLCAweEI3LCAweDkzLCAweEFELCAweEFGLCAweEJFLCAweDE5LCAweDc1LCAweDk2LCAweDgxLCAweDY0LCAweEU2LAorIDB4QjUsIDB4QjgsIDB4ODksIDB4NDIsIDB4NDEsIDB4RDEsIDB4NkQsIDB4RDAsIDB4MUMsIDB4MUIsIDB4RjgsIDB4MUIsIDB4QUMsCisgMHg2OSwgMHhDQiwgMHgzNiwgMHgzQywgMHg2NCwgMHg3RCwgMHhEQywgMHhGNCwgMHgxOSwgMHhCOCwgMHhDMywgMHg2MCwgMHhCMSwKKyAweDU3LCAweDQ4LCAweDVGLCAweDUyLCAweDRGLCAweDU5LCAweDNBLCAweDU1LCAweDdGLCAweDMyLCAweEMwLCAweDE5LCAweDQzLAorIDB4NTAsIDB4M0YsIDB4QUUsIDB4Q0UsIDB4NkYsIDB4MTcsIDB4RjMsIDB4MEUsIDB4OUYsIDB4NDAsIDB4Q0EsIDB4NEUsIDB4QUQsCisgMHgxNSwgMHgzQiwgMHhDOSwgMHg3OSwgMHhFOSwgMHhDMCwgMHg1OSwgMHgzOCwgMHg3MywgMHg3MCwgMHg5QywgMHgwQSwgMHg3QywKKyAweEM5LCAweDNBLCAweDQ4LCAweDMyLCAweEE3LCAweEQ4LCAweDQ5LCAweDc1LCAweDBBLCAweDg1LCAweEMyLCAweEMyLCAweEZELAorIDB4MTUsIDB4NzMsIDB4REEsIDB4OTksIDB4MDksIDB4MkEsIDB4NjksIDB4OUEsIDB4OUYsIDB4MEEsIDB4NzEsIDB4QkYsIDB4QjAsCisgMHgwNCwgMHhBNiwgMHg4QywgMHg3QSwgMHg1QSwgMHg2RiwgMHg0OCwgMHg1QSwgMHg1NCwgMHgzQiwgMHhDNiwgMHhCMSwgMHg1MywKKyAweDE3LCAweERGLCAweEU3LCAweDAyLCAweDgxLCAweDgxLCAweDAwLCAweENCLCAweDkzLCAweERFLCAweDc3LCAweDE1LCAweDVELAorIDB4QjcsIDB4NUMsIDB4NUMsIDB4N0MsIDB4RDgsIDB4OTAsIDB4QTksIDB4OTgsIDB4MkQsIDB4RDYsIDB4NjksIDB4MEUsIDB4NjMsCisgMHhCMywgMHhBMywgMHhEQywgMHhBNiwgMHhDQywgMHg4QiwgMHg2QSwgMHhBNCwgMHhBMiwgMHgxMiwgMHg4QywgMHg4RSwgMHg3QiwKKyAweDQ4LCAweDJDLCAweEIyLCAweDRCLCAweDM3LCAweERDLCAweDA2LCAweDE4LCAweDdELCAweEVBLCAweEZFLCAweDc2LCAweEExLAorIDB4RDQsIDB4QTEsIDB4RTksIDB4M0YsIDB4MEQsIDB4Q0QsIDB4MUIsIDB4NUYsIDB4QUYsIDB4NUYsIDB4OUUsIDB4OTYsIDB4NUIsCisgMHg1QiwgMHgwRiwgMHhBMSwgMHg3QywgMHhBRiwgMHhCMywgMHg5QiwgMHg5MCwgMHhEQiwgMHg1NywgMHg3MywgMHgzQSwgMHhFRCwKKyAweEIwLCAweDIzLCAweDQ0LCAweEFFLCAweDQxLCAweDRGLCAweDFGLCAweDA3LCAweDQyLCAweDEzLCAweDIzLCAweDRDLCAweENCLAorIDB4RkEsIDB4RjQsIDB4MTQsIDB4QTQsIDB4RDUsIDB4RjcsIDB4OUUsIDB4MzYsIDB4N0MsIDB4NUIsIDB4OUYsIDB4QTgsIDB4M0MsCisgMHhDMSwgMHg4NSwgMHg1RiwgMHg3NCwgMHhEMiwgMHgzOSwgMHgyRCwgMHhGRiwgMHhEMCwgMHg4NCwgMHhERiwgMHhGQiwgMHhCMywKKyAweDIwLCAweDdBLCAweDJFLCAweDlCLCAweDE3LCAweEFFLCAweEU2LCAweEJBLCAweDBCLCAweEFFLCAweDVGLCAweDUzLCAweEE0LAorIDB4NTIsIDB4RUQsIDB4MUIsIDB4QzQsIDB4OTEsIDB4MDIsIDB4ODEsIDB4ODEsIDB4MDAsIDB4RUMsIDB4OTgsIDB4REEsIDB4QkIsCisgMHhENSwgMHhGRSwgMHhGOSwgMHg1MiwgMHg0QSwgMHg3RCwgMHgwMiwgMHg1NSwgMHg0OSwgMHg2RiwgMHg1NSwgMHg2RSwgMHg1MiwKKyAweDJGLCAweDg0LCAweEEzLCAweDJCLCAweEIzLCAweDg2LCAweDYyLCAweEIzLCAweDU0LCAweEQyLCAweDYzLCAweDUyLCAweERBLAorIDB4RTMsIDB4ODgsIDB4NzYsIDB4QTAsIDB4RUYsIDB4OEIsIDB4MTUsIDB4QTUsIDB4RDMsIDB4MTgsIDB4MTQsIDB4NzIsIDB4NzcsCisgMHg1RSwgMHhDNywgMHhBMywgMHgwNCwgMHgxRiwgMHg5RSwgMHgxOSwgMHg2MiwgMHhCNSwgMHgxQiwgMHgxQiwgMHg5RSwgMHhDMywKKyAweEYyLCAweEI1LCAweDMyLCAweEY5LCAweDRDLCAweEMxLCAweEFBLCAweEVCLCAweDBDLCAweDI2LCAweDdELCAweEQ0LCAweDVGLAorIDB4NEEsIDB4NTEsIDB4NUMsIDB4QTQsIDB4NDUsIDB4MDYsIDB4NzAsIDB4NDQsIDB4QTcsIDB4NTYsIDB4QzAsIDB4RDQsIDB4MjIsCisgMHgxNCwgMHg3NiwgMHg5RSwgMHhEOCwgMHg2MywgMHg1MCwgMHg4OSwgMHg5MCwgMHhEMywgMHhFMiwgMHhCRiwgMHg4MSwgMHg5NSwKKyAweDkyLCAweDMxLCAweDQxLCAweDg3LCAweDM5LCAweDFBLCAweDQzLCAweDBCLCAweDE4LCAweEE1LCAweDUzLCAweDFGLCAweDM5LAorIDB4MUEsIDB4NUYsIDB4MUYsIDB4NDMsIDB4QkMsIDB4ODcsIDB4NkEsIDB4REYsIDB4NkUsIDB4RDMsIDB4MjIsIDB4MDAsIDB4RkUsCisgMHgyMiwgMHg5OCwgMHg3MCwgMHg0RSwgMHgxQSwgMHgxOSwgMHgyOSwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHg4QSwgMHg0MSwKKyAweDU2LCAweDI4LCAweDUxLCAweDlFLCAweDVGLCAweEQ0LCAweDlFLCAweDBCLCAweDNCLCAweDk4LCAweEEzLCAweDU0LCAweEYyLAorIDB4NkMsIDB4NTYsIDB4RDQsIDB4QUEsIDB4RTksIDB4NjksIDB4MzMsIDB4ODUsIDB4MjQsIDB4MEMsIDB4REEsIDB4RDQsIDB4MEMsCisgMHgyRCwgMHhDNCwgMHhCRiwgMHg0RiwgMHgwMiwgMHg2OSwgMHgzOCwgMHg3QywgMHhENCwgMHhFNiwgMHhEQywgMHg0QywgMHhFRCwKKyAweEQ3LCAweDE2LCAweDExLCAweEMzLCAweDNFLCAweDAwLCAweEU3LCAweEMzLCAweDI2LCAweEMwLCAweDUxLCAweDAyLCAweERFLAorIDB4QkIsIDB4NzUsIDB4OUMsIDB4NkYsIDB4NTYsIDB4OUMsIDB4N0EsIDB4RjMsIDB4OEUsIDB4RUYsIDB4Q0YsIDB4OEEsIDB4QzUsCisgMHgyQiwgMHhEMiwgMHhEQSwgMHgwNiwgMHg2QSwgMHg0NCwgMHhDOSwgMHg3MywgMHhGRSwgMHg2RSwgMHg5OSwgMHg4NywgMHhGOCwKKyAweDVCLCAweEJFLCAweEYxLCAweDdDLCAweEU2LCAweDY1LCAweEI1LCAweDRGLCAweDZDLCAweEYwLCAweEM5LCAweEM1LCAweEZGLAorIDB4MTYsIDB4Q0EsIDB4OEIsIDB4MUIsIDB4MTcsIDB4RTIsIDB4NTgsIDB4M0QsIDB4QTIsIDB4MzcsIDB4QUIsIDB4MDEsIDB4QkMsCisgMHhCRiwgMHg0MCwgMHhDRSwgMHg1MywgMHg4QywgMHg4RSwgMHhFRCwgMHhFRiwgMHhFRSwgMHg1OSwgMHg5RCwgMHhFMCwgMHg2MywKKyAweEU2LCAweDdDLCAweDVFLCAweEY1LCAweDhFLCAweDRCLCAweEYxLCAweDNCLCAweEMxLCAweDAyLCAweDgxLCAweDgwLCAweDRELAorIDB4NDUsIDB4RjksIDB4NDAsIDB4OEMsIDB4QzUsIDB4NUIsIDB4RjQsIDB4MkEsIDB4MUEsIDB4OEEsIDB4QjQsIDB4RjIsIDB4MUMsCisgMHhBQywgMHg2QiwgMHhFOSwgMHgwQywgMHg1NiwgMHgzNiwgMHhCNywgMHg0RSwgMHg3MiwgMHg5NiwgMHhENSwgMHhFNSwgMHg4QSwKKyAweEQyLCAweEUyLCAweEZGLCAweEYxLCAweEYxLCAweDE4LCAweDEzLCAweDNELCAweDg2LCAweDA5LCAweEI4LCAweEQ4LCAweDc2LAorIDB4QTcsIDB4QzksIDB4MUMsIDB4NzEsIDB4NTIsIDB4OTQsIDB4MzAsIDB4NDMsIDB4RTAsIDB4RjEsIDB4NzgsIDB4NzQsIDB4RkQsCisgMHg2MSwgMHgxQiwgMHg0QywgMHgwOSwgMHhDQywgMHhFNiwgMHg2OCwgMHgyQSwgMHg3MSwgMHhBRCwgMHgxQywgMHhERiwgMHg0MywKKyAweEJDLCAweDU2LCAweERCLCAweEE1LCAweEE0LCAweEJFLCAweDM1LCAweDcwLCAweEE0LCAweDVFLCAweENGLCAweDRGLCAweEZDLAorIDB4MDAsIDB4NTUsIDB4OTksIDB4M0EsIDB4M0QsIDB4MjMsIDB4Q0YsIDB4NjcsIDB4NUEsIDB4RjUsIDB4MjIsIDB4RjgsIDB4QjUsCisgMHgyOSwgMHhEMCwgMHg0NCwgMHgxMSwgMHhFQiwgMHgzNSwgMHgyRSwgMHg0NiwgMHhCRSwgMHhGRCwgMHg4RSwgMHgxOCwgMHhCMiwKKyAweDVGLCAweEE4LCAweEJGLCAweDE5LCAweDMyLCAweEExLCAweEY1LCAweERDLCAweDAzLCAweEU2LCAweDdDLCAweDlBLCAweDFGLAorIDB4MEMsIDB4N0MsIDB4QTksIDB4QjAsIDB4MEUsIDB4MjEsIDB4MzcsIDB4M0IsIDB4RjEsIDB4QjB9OworCitzdGF0aWMgdWludDhfdCByc2FfMjU2X2tleWRhdGFbXSA9IHsKKyAweDMwLCAweDgyLCAweDAxLCAweDIyLCAweDMwLCAweDBELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELAorIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDUsIDB4MDAsIDB4MDMsIDB4ODIsIDB4MDEsIDB4MEYsIDB4MDAsIDB4MzAsIDB4ODIsIDB4MDEsIDB4MEEsCisgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhEQiwgMHgxQywgMHg3RiwgMHgyRSwgMHgwQiwgMHhDRCwgMHhCRiwgMHhDRSwgMHhEMSwKKyAweDc1LCAweDEwLCAweEEwLCAweEEyLCAweEI4LCAweENFLCAweDdELCAweEFBLCAweEUyLCAweDA1LCAweEUwLCAweDdBLCAweEQ4LCAweDQ0LAorIDB4NjMsIDB4OEYsIDB4QjUsIDB4QkQsIDB4QzAsIDB4QjAsIDB4MTksIDB4QjksIDB4MzcsIDB4QjgsIDB4MTksIDB4NEEsIDB4MEUsIDB4RjEsCisgMHg1RCwgMHg3NCwgMHg4MCwgMHg2NywgMHg0NiwgMHg4NywgMHgwNiwgMHhERSwgMHg1QiwgMHg3RiwgMHgwNiwgMHgwMywgMHhCRCwgMHhDMSwKKyAweDhELCAweDVFLCAweDA3LCAweDE1LCAweEQ0LCAweDVCLCAweEY0LCAweERDLCAweEU1LCAweENGLCAweDNELCAweEY5LCAweEMxLCAweDExLAorIDB4MkMsIDB4QUUsIDB4NkEsIDB4QjksIDB4OEEsIDB4QkQsIDB4MUQsIDB4NjcsIDB4NjYsIDB4MTcsIDB4RUEsIDB4NEUsIDB4QkQsIDB4REIsCisgMHgxNSwgMHg5QSwgMHg4MiwgMHg4NywgMHhFNCwgMHhGMCwgMHg3OCwgMHhDMywgMHhBMywgMHg4NSwgMHg4NywgMHhCMCwgMHhGRCwgMHg5RiwKKyAweEE5LCAweDk5LCAweDVGLCAweEUzLCAweDMzLCAweEVDLCAweENDLCAweEVBLCAweDBCLCAweEI1LCAweDYxLCAweDVFLCAweEYxLCAweDQ5LAorIDB4N0UsIDB4M0YsIDB4QTMsIDB4MkQsIDB4RUEsIDB4MDEsIDB4MEMsIDB4Q0MsIDB4NDIsIDB4OUEsIDB4NzYsIDB4OUIsIDB4QzQsIDB4RDAsCisgMHgzNywgMHhEMywgMHhCMSwgMHgxNywgMHgwMSwgMHg2MSwgMHgwMSwgMHgxNiwgMHg1OSwgMHg3RSwgMHgxQywgMHgxNywgMHhDMywgMHg1MywKKyAweEZELCAweEQxLCAweDcyLCAweENCLCAweDRDLCAweDYwLCAweDE1LCAweERBLCAweDdELCAweEUyLCAweEVBLCAweEFELCAweDUwLCAweEVGLAorIDB4OEUsIDB4RTIsIDB4OEIsIDB4RDQsIDB4NkEsIDB4NzcsIDB4NTUsIDB4RDYsIDB4NzAsIDB4RDksIDB4NkIsIDB4QkIsIDB4RjEsIDB4RUUsCisgMHgzOSwgMHgwNCwgMHgzOCwgMHhBMywgMHhCRCwgMHhFMiwgMHhEMSwgMHhFMCwgMHg2NiwgMHg2QiwgMHhFMiwgMHg5QywgMHg0NywgMHg5OSwKKyAweEU5LCAweDI4LCAweEU2LCAweEI2LCAweEZDLCAweDJFLCAweENBLCAweDY3LCAweDQzLCAweDg0LCAweEU4LCAweEQ1LCAweDgzLCAweEQ2LAorIDB4OUQsIDB4OTgsIDB4NkIsIDB4MDEsIDB4M0UsIDB4ODEsIDB4REMsIDB4M0MsIDB4N0EsIDB4Q0EsIDB4RjksIDB4RjMsIDB4OUMsIDB4RjcsCisgMHhENiwgMHgyOCwgMHgxQiwgMHgyNywgMHg3OCwgMHg3QywgMHhDMywgMHhEMCwgMHhENSwgMHg2MywgMHhBNywgMHg4MSwgMHgzNCwgMHg4OSwKKyAweEFELCAweDI1LCAweDZBLCAweEJELCAweEYyLCAweEVBLCAweEVELCAweEZBLCAweDU3LCAweEZDLCAweEU1LCAweDM0LCAweEM2LCAweEMxLAorIDB4MEYsIDB4NzEsIDB4MkQsIDB4RDIsIDB4MDgsIDB4MTAsIDB4MUIsIDB4QUQsIDB4NDQsIDB4NDEsIDB4RTAsIDB4RkUsIDB4NzksIDB4QTAsCisgMHg2MywgMHg5MywgMHg4QSwgMHhCMSwgMHg1RCwgMHhFOSwgMHhCMCwgMHhFRSwgMHg2RiwgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMX07CisKK3N0YXRpYyB1aW50OF90IGVjX2tleWRhdGFbXSA9IHsKKyAweDMwLCAweDQ5LCAweDMwLCAweDEzLCAweDA2LCAweDA3LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAyLCAweDAxLCAweDA2LAorIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDMsIDB4MzIsIDB4MDAsIDB4MDQsIDB4QkMsCisgMHg3OSwgMHg3RCwgMHhCMywgMHhBRSwgMHg3RiwgMHgwOCwgMHhFQywgMHgzRCwgMHg0OSwgMHg2QiwgMHg0RiwgMHhCNCwgMHgxMSwgMHhCMywKKyAweEY2LCAweDIwLCAweEE1LCAweDU4LCAweEE1LCAweDAxLCAweEUwLCAweDIyLCAweDJELCAweDA4LCAweENGLCAweEUwLCAweERDLCAweDhBLAorIDB4RUMsIDB4OEIsIDB4MUEsIDB4N0IsIDB4RjIsIDB4NEIsIDB4RTksIDB4MjksIDB4NTEsIDB4Q0MsIDB4NUIsIDB4QTEsIDB4QkUsIDB4QkIsCisgMHgyNCwgMHg3NCwgMHg5MCwgMHg5QSwgMHhFMH07CisKK3N0YXRpYyB1aW50OF90IGVjX2tleXBhaXJbXSA9IHsKKyAweDMwLCAweDVGLCAweDAyLCAweDAxLCAweDAxLCAweDA0LCAweDE4LCAweDMzLCAweDhFLCAweDg2LCAweEE4LCAweDgxLCAweEUyLCAweDM4LAorIDB4RjUsIDB4NDksIDB4QkQsIDB4NkYsIDB4MDUsIDB4NTMsIDB4NDksIDB4NEIsIDB4NzMsIDB4RTMsIDB4RDYsIDB4MTEsIDB4MzAsIDB4RkQsCisgMHhDNiwgMHhDOSwgMHg2RCwgMHhBMCwgMHgwQSwgMHgwNiwgMHgwOCwgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwMywgMHgwMSwKKyAweDAxLCAweEExLCAweDM0LCAweDAzLCAweDMyLCAweDAwLCAweDA0LCAweDUxLCAweDc1LCAweEJDLCAweERGLCAweDMwLCAweEEzLCAweDcwLAorIDB4RjMsIDB4OUQsIDB4NTMsIDB4OTMsIDB4RTYsIDB4MTIsIDB4NzIsIDB4ODgsIDB4RDgsIDB4MDEsIDB4NjcsIDB4QjUsIDB4RjQsIDB4QjQsCisgMHhCNywgMHg3NiwgMHhDNiwgMHg3NCwgMHhGNywgMHhDNiwgMHhGMywgMHg1NCwgMHhCNywgMHhEMiwgMHgyNCwgMHgwNiwgMHgyQywgMHgxRiwKKyAweDY4LCAweDU0LCAweEI1LCAweEE3LCAweEFGLCAweDBGLCAweEU1LCAweDc4LCAweEVBLCAweEYyLCAweDU4LCAweEYwLCAweDI3fTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3siVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgMTYgQnl0ZSBBRVNcbiIsIDEsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5LCAweEQwfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ1RSLCBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwIDI0IEJ5dGUgQUVTXG4iLCAyLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MjQsIDB4MTMsIDB4NjEsIDB4NDcsIDB4NjEsIDB4QjgsIDB4QzgsIDB4RjAsIDB4REYsIDB4QUIsIDB4NUEsIDB4MEUsIDB4ODcsCisgMHg0MCwgMHhBQywgMHhBMywgMHg5MCwgMHg3NywgMHg4MywgMHg1MiwgMHgzMSwgMHg3NCwgMHhGOX0sIEFFU18yNEJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NUUiwgQllURVNfVE9fQklUUyhBRVNfMjRCX0tFWV9TSVpFKSwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAzMiBCeXRlIEFFU1xuIiwgMywgUFNBX0tFWV9UWVBFX0FFUywKK3sweEVBLCAweEQ1LCAweEU2LCAweEM4LCAweDUxLCAweEY5LCAweEVDLCAweEJCLCAweDlCLCAweDU3LCAweDdDLCAweEVELCAweEQyLAorIDB4NEIsIDB4ODIsIDB4ODQsIDB4OUYsIDB4OUYsIDB4RTYsIDB4NzMsIDB4MjEsIDB4M0QsIDB4MUEsIDB4MDUsIDB4QzksIDB4RUQsCisgMHhERiwgMHgyNSwgMHgxNywgMHg2OCwgMHg4NiwgMHhBRX0sIEFFU18zMkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NUUiwgQllURVNfVE9fQklUUyhBRVNfMzJCX0tFWV9TSVpFKSwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCBERVMgNjQgYml0IGtleVxuIiwgNCwgUFNBX0tFWV9UWVBFX0RFUywKKyB7MHg3MCwgMHgyNCwgMHg1NSwgMHgwQywgMHgxNCwgMHg5RCwgMHhFRCwgMHgyOX0sCisgREVTXzhCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsIEJZVEVTX1RPX0JJVFMoREVTXzhCX0tFWV9TSVpFKSwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCBUcmlwbGUgREVTIDItS2V5XG4iLCA1LCBQU0FfS0VZX1RZUEVfREVTLAorezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRn0sCisgREVTM18yS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DQkNfTk9fUEFERElORywgQllURVNfVE9fQklUUyhERVMzXzJLRVlfU0laRSksCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgVHJpcGxlIERFUyAzLUtleVxuIiwgNiwgUFNBX0tFWV9UWVBFX0RFUywKK3sweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGLAorIDB4RjEsIDB4RTAsIDB4RDMsIDB4QzIsIDB4QjUsIDB4QTQsIDB4OTcsIDB4ODYsCisgMHhGRSwgMHhEQywgMHhCQSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMH0sCisgREVTM18zS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DQkNfTk9fUEFERElORywgQllURVNfVE9fQklUUyhERVMzXzNLRVlfU0laRSksCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgMTYgQnl0ZSByYXcgZGF0YVxuIiwgNywgUFNBX0tFWV9UWVBFX1JBV19EQVRBLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOSwgMHhEMH0sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NUUiwgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwKKyBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAorfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAtIG5vdCBhIGNpcGhlciBhbGdvcml0aG1cbiIsIDgsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5LCAweEQwfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ01BQywgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwKKyBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAtIHVua25vd24gY2lwaGVyIGFsZ29yaXRobVxuIiwgOSwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4QzksIDB4RDB9LCBBRVNfMTZCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DQVRFR09SWV9DSVBIRVIsIEJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksCisgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgLSBpbmNvbXBhdGlibGUga2V5IEFSQzRcbiIsIDEwLCBQU0FfS0VZX1RZUEVfQVJDNCwKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4QzksIDB4RDB9LCBBRVNfMTZCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DVFIsIEJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksCisgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgLSBpbmNvcnJlY3QgdXNhZ2VcbiIsIDExLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOSwgMHhEMH0sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NUUiwgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwKKyBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAorfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAtIFJTQSBwdWJsaWMga2V5XG4iLCAxMiwgUFNBX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZLAorezB9LCAyOTQsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOX1JBVywgMjA0OCwKKyBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAtIFJTQSBrZXlwYWlyXG4iLCAxMywgUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSLAorezB9LCAxMTkzLAorIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVcsIDIwNDgsCisgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgLSBFQyBQdWJsaWMga2V5XG4iLCAxNCwKKyBQU0FfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVlfQkFTRSB8IFBTQV9FQ0NfQ1VSVkVfU0VDUDE5MlIxLCB7MH0sIDc1LAorIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DQVRFR09SWV9BU1lNTUVUUklDX0VOQ1JZUFRJT04sIDE5MiwKKyBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAtIEVDIGtleXBhaXJcbiIsIDE1LAorIFBTQV9LRVlfVFlQRV9FQ0NfS0VZUEFJUl9CQVNFIHwgUFNBX0VDQ19DVVJWRV9TRUNQMTkyUjEsIHswfSwgOTcsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTiwgMTkyLAorIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorfTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazJbXSA9IHsKK3siVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgbmVnYXRpdmUgY2FzZXNcbiIsIDE2LCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOSwgMHhEMH0sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NUUiwgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwKKyBQU0FfU1VDQ0VTUworfSwKK307CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMi90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMi90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmOGI4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMyL3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUzIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9jMDMyLmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfQ1JZUFRPX0JBU0UsIDMyKQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgY3J5cHRvIHN5bW1ldHJpYyBjaXBoZXIgQVBJc1xuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9ISUdIX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY3J5cHRvX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2MwMzJfY3J5cHRvX2xpc3QsIEZBTFNFKTsKKworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRlJFRSk7CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMzL3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMzL3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmM5M2E2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzMvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfYzAzMy5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMy90ZXN0X2MwMzMuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMzL3Rlc3RfYzAzMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMTA1NWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMy90ZXN0X2MwMzMuYwpAQCAtMCwwICsxLDE4MSBAQAorCisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9jMDMzLmgiCisjaW5jbHVkZSAidGVzdF9kYXRhLmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9jMDMzX2NyeXB0b19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXBfdGVzdCwKKyAgICBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXBfbmVnYXRpdmVfdGVzdCwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludCAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCA9IDE7CitzdGF0aWMgcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAgb3BlcmF0aW9uOworCitpbnQzMl90IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cF90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBpLCBzdGF0dXM7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgKmtleV9kYXRhOworICAgIHBzYV9rZXlfcG9saWN5X3QgICAgICAgIHBvbGljeTsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCisgICAgeworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgICAgIC8qIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazFbaV0udXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfYWxnKTsKKworICAgICAgICBpZiAoUFNBX0tFWV9UWVBFX0lTX1JTQShjaGVjazFbaV0ua2V5X3R5cGUpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmtleV90eXBlID09IFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygzODQpKQorICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IHJzYV8zODRfa2V5cGFpcjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCA9PSBCWVRFU19UT19CSVRTKDI1NikpCisgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzI1Nl9rZXlwYWlyOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygzODQpKQorICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IHJzYV8zODRfa2V5ZGF0YTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCA9PSBCWVRFU19UT19CSVRTKDI1NikpCisgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzI1Nl9rZXlkYXRhOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQU0FfS0VZX1RZUEVfSVNfRUNDKGNoZWNrMVtpXS5rZXlfdHlwZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChQU0FfS0VZX1RZUEVfSVNfRUNDX0tFWVBBSVIoY2hlY2sxW2ldLmtleV90eXBlKSkKKyAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IGVjX2tleXBhaXI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAga2V5X2RhdGEgPSBlY19rZXlkYXRhOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGtleV9kYXRhID0gY2hlY2sxW2ldLmtleV9kYXRhOworCisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2sxW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfbGVuZ3RoLCAmY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X3R5cGUsIGtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIC8qIFNldCB0aGUga2V5IGZvciBhIG11bHRpcGFydCBzeW1tZXRyaWMgZGVjcnlwdGlvbiBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfREVDUllQVF9TRVRVUCwgJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9oYW5kbGUsIGNoZWNrMVtpXS5rZXlfYWxnKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgICAgICAvKiBBYm9ydCBhIGNpcGhlciBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfQUJPUlQsICZvcGVyYXRpb24pOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cF9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2syKS9zaXplb2YoY2hlY2syWzBdKTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBpLCBzdGF0dXM7CisgICAgcHNhX2tleV9wb2xpY3lfdCAgICAgICAgcG9saWN5OworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMltpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSBJbnZhbGlkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogU2V0IHRoZSBrZXkgZm9yIGEgbXVsdGlwYXJ0IHN5bW1ldHJpYyBkZWNyeXB0aW9uIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9ERUNSWVBUX1NFVFVQLCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2hhbmRsZSwgY2hlY2syW2ldLmtleV9hbGcpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCAtIFplcm8gYXMga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBTZXQgdGhlIGtleSBmb3IgYSBtdWx0aXBhcnQgc3ltbWV0cmljIGRlY3J5cHRpb24gb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX0RFQ1JZUFRfU0VUVVAsICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgIDAsIGNoZWNrMltpXS5rZXlfYWxnKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSBFbXB0eSBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2syW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfbGVuZ3RoLCAmY2hlY2syW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMltpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBrZXkgZm9yIGEgbXVsdGlwYXJ0IHN5bW1ldHJpYyBkZWNyeXB0aW9uIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9ERUNSWVBUX1NFVFVQLCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2hhbmRsZSwgY2hlY2syW2ldLmtleV9hbGcpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9FTVBUWV9TTE9ULCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMy90ZXN0X2MwMzMuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMzL3Rlc3RfYzAzMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMGJlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMy90ZXN0X2MwMzMuaApAQCAtMCwwICsxLDMxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9DMDMzX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9DMDMzX0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxjMDMzKQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMzNfY3J5cHRvX2xpc3RbXTsKKworaW50MzJfdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXBfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CitpbnQzMl90IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cF9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKKyNlbmRpZiAvKiBfVEVTVF9DMDMzX0NMSUVOVF9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzMvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMy90ZXN0X2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmU5ODVhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzMvdGVzdF9kYXRhLmgKQEAgLTAsMCArMSwyODIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisKKyNkZWZpbmUgRU1QVFlfS0VZX1NMT1QgICAgICAzMQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzY0XTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYml0X2xlbmd0aDsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXM7Cit9IHRlc3RfZGF0YTsKKworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlwYWlyWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlkYXRhWzFdOworCitzdGF0aWMgdWludDhfdCByc2FfMjU2X2tleXBhaXJbXSA9IHsKKyAweDMwLCAweDgyLCAweDA0LCAweEE1LCAweDAyLCAweDAxLCAweDAwLCAweDAyLCAweDgyLCAweDAxLCAweDAxLCAweDAwLCAweEMwLAorIDB4OTUsIDB4MDgsIDB4RTEsIDB4NTcsIDB4NDEsIDB4RjIsIDB4NzEsIDB4NkQsIDB4QjcsIDB4RDIsIDB4NDUsIDB4NDEsIDB4MjcsCisgMHgwMSwgMHg2NSwgMHhDNiwgMHg0NSwgMHhBRSwgMHhGMiwgMHhCQywgMHgyNCwgMHgzMCwgMHhCOCwgMHg5NSwgMHhDRSwgMHgyRiwKKyAweDRFLCAweEQ2LCAweEY2LCAweDFDLCAweDg4LCAweEJDLCAweDdDLCAweDlGLCAweEZCLCAweEE4LCAweDY3LCAweDdGLCAweEZFLAorIDB4NUMsIDB4OUMsIDB4NTEsIDB4NzUsIDB4RjcsIDB4OEEsIDB4Q0EsIDB4MDcsIDB4RTcsIDB4MzUsIDB4MkYsIDB4OEYsIDB4RTEsCisgMHhCRCwgMHg3QiwgMHhDMCwgMHgyRiwgMHg3QywgMHhBQiwgMHg2NCwgMHhBOCwgMHgxNywgMHhGQywgMHhDQSwgMHg1RCwgMHg3QiwKKyAweEJBLCAweEUwLCAweDIxLCAweEU1LCAweDcyLCAweDJFLCAweDZGLCAweDJFLCAweDg2LCAweEQ4LCAweDk1LCAweDczLCAweERBLAorIDB4QUMsIDB4MUIsIDB4NTMsIDB4QjksIDB4NUYsIDB4M0YsIDB4RDcsIDB4MTksIDB4MEQsIDB4MjUsIDB4NEYsIDB4RTEsIDB4NjMsCisgMHg2MywgMHg1MSwgMHg4QiwgMHgwQiwgMHg2NCwgMHgzRiwgMHhBRCwgMHg0MywgMHhCOCwgMHhBNSwgMHgxQywgMHg1QywgMHgzNCwKKyAweEIzLCAweEFFLCAweDAwLCAweEEwLCAweDYzLCAweEM1LCAweEY2LCAweDdGLCAweDBCLCAweDU5LCAweDY4LCAweDc4LCAweDczLAorIDB4QTYsIDB4OEMsIDB4MTgsIDB4QTksIDB4MDIsIDB4NkQsIDB4QUYsIDB4QzMsIDB4MTksIDB4MDEsIDB4MkUsIDB4QjgsIDB4MTAsCisgMHhFMywgMHhDNiwgMHhDQywgMHg0MCwgMHhCNCwgMHg2OSwgMHhBMywgMHg0NiwgMHgzMywgMHg2OSwgMHg4NywgMHg2RSwgMHhDNCwKKyAweEJCLCAweDE3LCAweEE2LCAweEYzLCAweEU4LCAweERELCAweEFELCAweDczLCAweEJDLCAweDdCLCAweDJGLCAweDIxLCAweEI1LAorIDB4RkQsIDB4NjYsIDB4NTEsIDB4MEMsIDB4QkQsIDB4NTQsIDB4QjMsIDB4RTEsIDB4NkQsIDB4NUYsIDB4MUMsIDB4QkMsIDB4MjMsCisgMHg3MywgMHhEMSwgMHgwOSwgMHgwMywgMHg4OSwgMHgxNCwgMHhEMiwgMHgxMCwgMHhCOSwgMHg2NCwgMHhDMywgMHgyQSwgMHhEMCwKKyAweEExLCAweDk2LCAweDRBLCAweEJDLCAweEUxLCAweEQ0LCAweDFBLCAweDVCLCAweEM3LCAweEEwLCAweEMwLCAweEMxLCAweDYzLAorIDB4NzgsIDB4MEYsIDB4NDQsIDB4MzcsIDB4MzAsIDB4MzIsIDB4OTYsIDB4ODAsIDB4MzIsIDB4MjMsIDB4OTUsIDB4QTEsIDB4NzcsCisgMHhCQSwgMHgxMywgMHhEMiwgMHg5NywgMHg3MywgMHhFMiwgMHg1RCwgMHgyNSwgMHhDOSwgMHg2QSwgMHgwRCwgMHhDMywgMHgzOSwKKyAweDYwLCAweEE0LCAweEI0LCAweEIwLCAweDY5LCAweDQyLCAweDQyLCAweDA5LCAweEU5LCAweEQ4LCAweDA4LCAweEJDLCAweDMzLAorIDB4MjAsIDB4QjMsIDB4NTgsIDB4MjIsIDB4QTcsIDB4QUEsIDB4RUIsIDB4QzQsIDB4RTEsIDB4RTYsIDB4NjEsIDB4ODMsIDB4QzUsCisgMHhEMiwgMHg5NiwgMHhERiwgMHhEOSwgMHhEMCwgMHg0RiwgMHhBRCwgMHhENywgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMSwKKyAweDAyLCAweDgyLCAweDAxLCAweDAxLCAweDAwLCAweDlBLCAweEQwLCAweDM0LCAweDBGLCAweDUyLCAweDYyLCAweDA1LCAweDUwLAorIDB4MDEsIDB4RUYsIDB4OUYsIDB4RUQsIDB4NjQsIDB4NkUsIDB4QzIsIDB4QzQsIDB4REEsIDB4MUEsIDB4RjIsIDB4ODQsIDB4RDcsCisgMHg5MiwgMHgxMCwgMHg0OCwgMHg5MiwgMHhDNCwgMHhFOSwgMHg2QSwgMHhFQiwgMHg4QiwgMHg3NSwgMHg2QywgMHhDNiwgMHg3OSwKKyAweDM4LCAweEYyLCAweEM5LCAweDcyLCAweDRBLCAweDg2LCAweDY0LCAweDU0LCAweDk1LCAweDc3LCAweENCLCAweEMzLCAweDlBLAorIDB4OUQsIDB4QjcsIDB4RDQsIDB4MUQsIDB4QTQsIDB4MDAsIDB4QzgsIDB4OUUsIDB4NEUsIDB4RTQsIDB4REQsIDB4QzcsIDB4QkEsCisgMHg2NywgMHgxNiwgMHhDMSwgMHg3NCwgMHhCQywgMHhBOSwgMHhENiwgMHg5NCwgMHg4RiwgMHgyQiwgMHgzMCwgMHgxQSwgMHhGQiwKKyAweEVELCAweERGLCAweDIxLCAweDA1LCAweDIzLCAweEQ5LCAweDRBLCAweDM5LCAweEJELCAweDk4LCAweDZCLCAweDY1LCAweDlBLAorIDB4QjgsIDB4REMsIDB4QzQsIDB4N0QsIDB4RUUsIDB4QTYsIDB4NDMsIDB4MTUsIDB4MkUsIDB4M0QsIDB4QkUsIDB4MUQsIDB4MjIsCisgMHg2MCwgMHgyQSwgMHg3MywgMHgzMCwgMHhENSwgMHgzRSwgMHhEOCwgMHhBMiwgMHhBQywgMHg4NiwgMHg0MywgMHgyRSwgMHhDNCwKKyAweEY1LCAweDY0LCAweDVFLCAweDNGLCAweDg5LCAweDc1LCAweDBGLCAweDExLCAweEQ4LCAweDUxLCAweDI1LCAweDRFLCAweDlGLAorIDB4RDgsIDB4QUEsIDB4QTMsIDB4Q0UsIDB4NjAsIDB4QjMsIDB4RTIsIDB4OEEsIDB4RDksIDB4N0UsIDB4MUIsIDB4RjAsIDB4NjQsCisgMHhDQSwgMHg5QSwgMHg1QiwgMHgwNSwgMHgwQiwgMHg1QiwgMHhBQSwgMHhDQiwgMHhFNSwgMHhFMywgMHgzRiwgMHg2RSwgMHgzMiwKKyAweDIyLCAweDA1LCAweEYzLCAweEQwLCAweEZBLCAweEVGLCAweDc0LCAweDUyLCAweDgxLCAweEUyLCAweDVGLCAweDc0LCAweEQzLAorIDB4QkQsIDB4RkYsIDB4MzEsIDB4ODMsIDB4NDUsIDB4NzUsIDB4RkEsIDB4NjMsIDB4N0EsIDB4OTcsIDB4MkUsIDB4RDYsIDB4QjYsCisgMHgxOSwgMHhDNiwgMHg5MiwgMHgyNiwgMHhFNCwgMHgyOCwgMHgwNiwgMHg1MCwgMHg1MCwgMHgwRSwgMHg3OCwgMHgyRSwgMHhBOSwKKyAweDc4LCAweDBELCAweDE0LCAweDk3LCAweEI0LCAweDEyLCAweEQ4LCAweDMxLCAweDQwLCAweEFCLCAweEExLCAweDAxLCAweDQxLAorIDB4QzIsIDB4MzAsIDB4RjgsIDB4MDcsIDB4NUYsIDB4MTYsIDB4RTQsIDB4NjEsIDB4NzcsIDB4RDIsIDB4NjAsIDB4RjIsIDB4OUYsCisgMHg4RCwgMHhFOCwgMHhGNCwgMHhCQSwgMHhFQiwgMHg2MywgMHhERSwgMHgyQSwgMHg5NywgMHg4MSwgMHhFRiwgMHg0QywgMHg2QywKKyAweEU2LCAweDU1LCAweDM0LCAweDUxLCAweDJCLCAweDI4LCAweDM0LCAweEY0LCAweDUzLCAweDFDLCAweEM0LCAweDU4LCAweDBBLAorIDB4M0YsIDB4QkIsIDB4QUYsIDB4QjUsIDB4RjcsIDB4NEEsIDB4ODUsIDB4NDMsIDB4MkQsIDB4M0MsIDB4RjEsIDB4NTgsIDB4NTgsCisgMHg4MSwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhGMiwgMHgyQywgMHg1NCwgMHg3NiwgMHgzOSwgMHgyMywgMHg2MywgMHhDOSwKKyAweDEwLCAweDMyLCAweEI3LCAweDkzLCAweEFELCAweEFGLCAweEJFLCAweDE5LCAweDc1LCAweDk2LCAweDgxLCAweDY0LCAweEU2LAorIDB4QjUsIDB4QjgsIDB4ODksIDB4NDIsIDB4NDEsIDB4RDEsIDB4NkQsIDB4RDAsIDB4MUMsIDB4MUIsIDB4RjgsIDB4MUIsIDB4QUMsCisgMHg2OSwgMHhDQiwgMHgzNiwgMHgzQywgMHg2NCwgMHg3RCwgMHhEQywgMHhGNCwgMHgxOSwgMHhCOCwgMHhDMywgMHg2MCwgMHhCMSwKKyAweDU3LCAweDQ4LCAweDVGLCAweDUyLCAweDRGLCAweDU5LCAweDNBLCAweDU1LCAweDdGLCAweDMyLCAweEMwLCAweDE5LCAweDQzLAorIDB4NTAsIDB4M0YsIDB4QUUsIDB4Q0UsIDB4NkYsIDB4MTcsIDB4RjMsIDB4MEUsIDB4OUYsIDB4NDAsIDB4Q0EsIDB4NEUsIDB4QUQsCisgMHgxNSwgMHgzQiwgMHhDOSwgMHg3OSwgMHhFOSwgMHhDMCwgMHg1OSwgMHgzOCwgMHg3MywgMHg3MCwgMHg5QywgMHgwQSwgMHg3QywKKyAweEM5LCAweDNBLCAweDQ4LCAweDMyLCAweEE3LCAweEQ4LCAweDQ5LCAweDc1LCAweDBBLCAweDg1LCAweEMyLCAweEMyLCAweEZELAorIDB4MTUsIDB4NzMsIDB4REEsIDB4OTksIDB4MDksIDB4MkEsIDB4NjksIDB4OUEsIDB4OUYsIDB4MEEsIDB4NzEsIDB4QkYsIDB4QjAsCisgMHgwNCwgMHhBNiwgMHg4QywgMHg3QSwgMHg1QSwgMHg2RiwgMHg0OCwgMHg1QSwgMHg1NCwgMHgzQiwgMHhDNiwgMHhCMSwgMHg1MywKKyAweDE3LCAweERGLCAweEU3LCAweDAyLCAweDgxLCAweDgxLCAweDAwLCAweENCLCAweDkzLCAweERFLCAweDc3LCAweDE1LCAweDVELAorIDB4QjcsIDB4NUMsIDB4NUMsIDB4N0MsIDB4RDgsIDB4OTAsIDB4QTksIDB4OTgsIDB4MkQsIDB4RDYsIDB4NjksIDB4MEUsIDB4NjMsCisgMHhCMywgMHhBMywgMHhEQywgMHhBNiwgMHhDQywgMHg4QiwgMHg2QSwgMHhBNCwgMHhBMiwgMHgxMiwgMHg4QywgMHg4RSwgMHg3QiwKKyAweDQ4LCAweDJDLCAweEIyLCAweDRCLCAweDM3LCAweERDLCAweDA2LCAweDE4LCAweDdELCAweEVBLCAweEZFLCAweDc2LCAweEExLAorIDB4RDQsIDB4QTEsIDB4RTksIDB4M0YsIDB4MEQsIDB4Q0QsIDB4MUIsIDB4NUYsIDB4QUYsIDB4NUYsIDB4OUUsIDB4OTYsIDB4NUIsCisgMHg1QiwgMHgwRiwgMHhBMSwgMHg3QywgMHhBRiwgMHhCMywgMHg5QiwgMHg5MCwgMHhEQiwgMHg1NywgMHg3MywgMHgzQSwgMHhFRCwKKyAweEIwLCAweDIzLCAweDQ0LCAweEFFLCAweDQxLCAweDRGLCAweDFGLCAweDA3LCAweDQyLCAweDEzLCAweDIzLCAweDRDLCAweENCLAorIDB4RkEsIDB4RjQsIDB4MTQsIDB4QTQsIDB4RDUsIDB4RjcsIDB4OUUsIDB4MzYsIDB4N0MsIDB4NUIsIDB4OUYsIDB4QTgsIDB4M0MsCisgMHhDMSwgMHg4NSwgMHg1RiwgMHg3NCwgMHhEMiwgMHgzOSwgMHgyRCwgMHhGRiwgMHhEMCwgMHg4NCwgMHhERiwgMHhGQiwgMHhCMywKKyAweDIwLCAweDdBLCAweDJFLCAweDlCLCAweDE3LCAweEFFLCAweEU2LCAweEJBLCAweDBCLCAweEFFLCAweDVGLCAweDUzLCAweEE0LAorIDB4NTIsIDB4RUQsIDB4MUIsIDB4QzQsIDB4OTEsIDB4MDIsIDB4ODEsIDB4ODEsIDB4MDAsIDB4RUMsIDB4OTgsIDB4REEsIDB4QkIsCisgMHhENSwgMHhGRSwgMHhGOSwgMHg1MiwgMHg0QSwgMHg3RCwgMHgwMiwgMHg1NSwgMHg0OSwgMHg2RiwgMHg1NSwgMHg2RSwgMHg1MiwKKyAweDJGLCAweDg0LCAweEEzLCAweDJCLCAweEIzLCAweDg2LCAweDYyLCAweEIzLCAweDU0LCAweEQyLCAweDYzLCAweDUyLCAweERBLAorIDB4RTMsIDB4ODgsIDB4NzYsIDB4QTAsIDB4RUYsIDB4OEIsIDB4MTUsIDB4QTUsIDB4RDMsIDB4MTgsIDB4MTQsIDB4NzIsIDB4NzcsCisgMHg1RSwgMHhDNywgMHhBMywgMHgwNCwgMHgxRiwgMHg5RSwgMHgxOSwgMHg2MiwgMHhCNSwgMHgxQiwgMHgxQiwgMHg5RSwgMHhDMywKKyAweEYyLCAweEI1LCAweDMyLCAweEY5LCAweDRDLCAweEMxLCAweEFBLCAweEVCLCAweDBDLCAweDI2LCAweDdELCAweEQ0LCAweDVGLAorIDB4NEEsIDB4NTEsIDB4NUMsIDB4QTQsIDB4NDUsIDB4MDYsIDB4NzAsIDB4NDQsIDB4QTcsIDB4NTYsIDB4QzAsIDB4RDQsIDB4MjIsCisgMHgxNCwgMHg3NiwgMHg5RSwgMHhEOCwgMHg2MywgMHg1MCwgMHg4OSwgMHg5MCwgMHhEMywgMHhFMiwgMHhCRiwgMHg4MSwgMHg5NSwKKyAweDkyLCAweDMxLCAweDQxLCAweDg3LCAweDM5LCAweDFBLCAweDQzLCAweDBCLCAweDE4LCAweEE1LCAweDUzLCAweDFGLCAweDM5LAorIDB4MUEsIDB4NUYsIDB4MUYsIDB4NDMsIDB4QkMsIDB4ODcsIDB4NkEsIDB4REYsIDB4NkUsIDB4RDMsIDB4MjIsIDB4MDAsIDB4RkUsCisgMHgyMiwgMHg5OCwgMHg3MCwgMHg0RSwgMHgxQSwgMHgxOSwgMHgyOSwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHg4QSwgMHg0MSwKKyAweDU2LCAweDI4LCAweDUxLCAweDlFLCAweDVGLCAweEQ0LCAweDlFLCAweDBCLCAweDNCLCAweDk4LCAweEEzLCAweDU0LCAweEYyLAorIDB4NkMsIDB4NTYsIDB4RDQsIDB4QUEsIDB4RTksIDB4NjksIDB4MzMsIDB4ODUsIDB4MjQsIDB4MEMsIDB4REEsIDB4RDQsIDB4MEMsCisgMHgyRCwgMHhDNCwgMHhCRiwgMHg0RiwgMHgwMiwgMHg2OSwgMHgzOCwgMHg3QywgMHhENCwgMHhFNiwgMHhEQywgMHg0QywgMHhFRCwKKyAweEQ3LCAweDE2LCAweDExLCAweEMzLCAweDNFLCAweDAwLCAweEU3LCAweEMzLCAweDI2LCAweEMwLCAweDUxLCAweDAyLCAweERFLAorIDB4QkIsIDB4NzUsIDB4OUMsIDB4NkYsIDB4NTYsIDB4OUMsIDB4N0EsIDB4RjMsIDB4OEUsIDB4RUYsIDB4Q0YsIDB4OEEsIDB4QzUsCisgMHgyQiwgMHhEMiwgMHhEQSwgMHgwNiwgMHg2QSwgMHg0NCwgMHhDOSwgMHg3MywgMHhGRSwgMHg2RSwgMHg5OSwgMHg4NywgMHhGOCwKKyAweDVCLCAweEJFLCAweEYxLCAweDdDLCAweEU2LCAweDY1LCAweEI1LCAweDRGLCAweDZDLCAweEYwLCAweEM5LCAweEM1LCAweEZGLAorIDB4MTYsIDB4Q0EsIDB4OEIsIDB4MUIsIDB4MTcsIDB4RTIsIDB4NTgsIDB4M0QsIDB4QTIsIDB4MzcsIDB4QUIsIDB4MDEsIDB4QkMsCisgMHhCRiwgMHg0MCwgMHhDRSwgMHg1MywgMHg4QywgMHg4RSwgMHhFRCwgMHhFRiwgMHhFRSwgMHg1OSwgMHg5RCwgMHhFMCwgMHg2MywKKyAweEU2LCAweDdDLCAweDVFLCAweEY1LCAweDhFLCAweDRCLCAweEYxLCAweDNCLCAweEMxLCAweDAyLCAweDgxLCAweDgwLCAweDRELAorIDB4NDUsIDB4RjksIDB4NDAsIDB4OEMsIDB4QzUsIDB4NUIsIDB4RjQsIDB4MkEsIDB4MUEsIDB4OEEsIDB4QjQsIDB4RjIsIDB4MUMsCisgMHhBQywgMHg2QiwgMHhFOSwgMHgwQywgMHg1NiwgMHgzNiwgMHhCNywgMHg0RSwgMHg3MiwgMHg5NiwgMHhENSwgMHhFNSwgMHg4QSwKKyAweEQyLCAweEUyLCAweEZGLCAweEYxLCAweEYxLCAweDE4LCAweDEzLCAweDNELCAweDg2LCAweDA5LCAweEI4LCAweEQ4LCAweDc2LAorIDB4QTcsIDB4QzksIDB4MUMsIDB4NzEsIDB4NTIsIDB4OTQsIDB4MzAsIDB4NDMsIDB4RTAsIDB4RjEsIDB4NzgsIDB4NzQsIDB4RkQsCisgMHg2MSwgMHgxQiwgMHg0QywgMHgwOSwgMHhDQywgMHhFNiwgMHg2OCwgMHgyQSwgMHg3MSwgMHhBRCwgMHgxQywgMHhERiwgMHg0MywKKyAweEJDLCAweDU2LCAweERCLCAweEE1LCAweEE0LCAweEJFLCAweDM1LCAweDcwLCAweEE0LCAweDVFLCAweENGLCAweDRGLCAweEZDLAorIDB4MDAsIDB4NTUsIDB4OTksIDB4M0EsIDB4M0QsIDB4MjMsIDB4Q0YsIDB4NjcsIDB4NUEsIDB4RjUsIDB4MjIsIDB4RjgsIDB4QjUsCisgMHgyOSwgMHhEMCwgMHg0NCwgMHgxMSwgMHhFQiwgMHgzNSwgMHgyRSwgMHg0NiwgMHhCRSwgMHhGRCwgMHg4RSwgMHgxOCwgMHhCMiwKKyAweDVGLCAweEE4LCAweEJGLCAweDE5LCAweDMyLCAweEExLCAweEY1LCAweERDLCAweDAzLCAweEU2LCAweDdDLCAweDlBLCAweDFGLAorIDB4MEMsIDB4N0MsIDB4QTksIDB4QjAsIDB4MEUsIDB4MjEsIDB4MzcsIDB4M0IsIDB4RjEsIDB4QjB9OworCitzdGF0aWMgdWludDhfdCByc2FfMjU2X2tleWRhdGFbXSA9IHsKKyAweDMwLCAweDgyLCAweDAxLCAweDIyLCAweDMwLCAweDBELCAweDA2LCAweDA5LCAweDJBLCAweDg2LCAweDQ4LCAweDg2LCAweEY3LCAweDBELAorIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDUsIDB4MDAsIDB4MDMsIDB4ODIsIDB4MDEsIDB4MEYsIDB4MDAsIDB4MzAsIDB4ODIsIDB4MDEsIDB4MEEsCisgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhEQiwgMHgxQywgMHg3RiwgMHgyRSwgMHgwQiwgMHhDRCwgMHhCRiwgMHhDRSwgMHhEMSwKKyAweDc1LCAweDEwLCAweEEwLCAweEEyLCAweEI4LCAweENFLCAweDdELCAweEFBLCAweEUyLCAweDA1LCAweEUwLCAweDdBLCAweEQ4LCAweDQ0LAorIDB4NjMsIDB4OEYsIDB4QjUsIDB4QkQsIDB4QzAsIDB4QjAsIDB4MTksIDB4QjksIDB4MzcsIDB4QjgsIDB4MTksIDB4NEEsIDB4MEUsIDB4RjEsCisgMHg1RCwgMHg3NCwgMHg4MCwgMHg2NywgMHg0NiwgMHg4NywgMHgwNiwgMHhERSwgMHg1QiwgMHg3RiwgMHgwNiwgMHgwMywgMHhCRCwgMHhDMSwKKyAweDhELCAweDVFLCAweDA3LCAweDE1LCAweEQ0LCAweDVCLCAweEY0LCAweERDLCAweEU1LCAweENGLCAweDNELCAweEY5LCAweEMxLCAweDExLAorIDB4MkMsIDB4QUUsIDB4NkEsIDB4QjksIDB4OEEsIDB4QkQsIDB4MUQsIDB4NjcsIDB4NjYsIDB4MTcsIDB4RUEsIDB4NEUsIDB4QkQsIDB4REIsCisgMHgxNSwgMHg5QSwgMHg4MiwgMHg4NywgMHhFNCwgMHhGMCwgMHg3OCwgMHhDMywgMHhBMywgMHg4NSwgMHg4NywgMHhCMCwgMHhGRCwgMHg5RiwKKyAweEE5LCAweDk5LCAweDVGLCAweEUzLCAweDMzLCAweEVDLCAweENDLCAweEVBLCAweDBCLCAweEI1LCAweDYxLCAweDVFLCAweEYxLCAweDQ5LAorIDB4N0UsIDB4M0YsIDB4QTMsIDB4MkQsIDB4RUEsIDB4MDEsIDB4MEMsIDB4Q0MsIDB4NDIsIDB4OUEsIDB4NzYsIDB4OUIsIDB4QzQsIDB4RDAsCisgMHgzNywgMHhEMywgMHhCMSwgMHgxNywgMHgwMSwgMHg2MSwgMHgwMSwgMHgxNiwgMHg1OSwgMHg3RSwgMHgxQywgMHgxNywgMHhDMywgMHg1MywKKyAweEZELCAweEQxLCAweDcyLCAweENCLCAweDRDLCAweDYwLCAweDE1LCAweERBLCAweDdELCAweEUyLCAweEVBLCAweEFELCAweDUwLCAweEVGLAorIDB4OEUsIDB4RTIsIDB4OEIsIDB4RDQsIDB4NkEsIDB4NzcsIDB4NTUsIDB4RDYsIDB4NzAsIDB4RDksIDB4NkIsIDB4QkIsIDB4RjEsIDB4RUUsCisgMHgzOSwgMHgwNCwgMHgzOCwgMHhBMywgMHhCRCwgMHhFMiwgMHhEMSwgMHhFMCwgMHg2NiwgMHg2QiwgMHhFMiwgMHg5QywgMHg0NywgMHg5OSwKKyAweEU5LCAweDI4LCAweEU2LCAweEI2LCAweEZDLCAweDJFLCAweENBLCAweDY3LCAweDQzLCAweDg0LCAweEU4LCAweEQ1LCAweDgzLCAweEQ2LAorIDB4OUQsIDB4OTgsIDB4NkIsIDB4MDEsIDB4M0UsIDB4ODEsIDB4REMsIDB4M0MsIDB4N0EsIDB4Q0EsIDB4RjksIDB4RjMsIDB4OUMsIDB4RjcsCisgMHhENiwgMHgyOCwgMHgxQiwgMHgyNywgMHg3OCwgMHg3QywgMHhDMywgMHhEMCwgMHhENSwgMHg2MywgMHhBNywgMHg4MSwgMHgzNCwgMHg4OSwKKyAweEFELCAweDI1LCAweDZBLCAweEJELCAweEYyLCAweEVBLCAweEVELCAweEZBLCAweDU3LCAweEZDLCAweEU1LCAweDM0LCAweEM2LCAweEMxLAorIDB4MEYsIDB4NzEsIDB4MkQsIDB4RDIsIDB4MDgsIDB4MTAsIDB4MUIsIDB4QUQsIDB4NDQsIDB4NDEsIDB4RTAsIDB4RkUsIDB4NzksIDB4QTAsCisgMHg2MywgMHg5MywgMHg4QSwgMHhCMSwgMHg1RCwgMHhFOSwgMHhCMCwgMHhFRSwgMHg2RiwgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMX07CisKK3N0YXRpYyB1aW50OF90IGVjX2tleWRhdGFbXSA9IHsKKyAweDMwLCAweDQ5LCAweDMwLCAweDEzLCAweDA2LCAweDA3LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAyLCAweDAxLCAweDA2LAorIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDMsIDB4MzIsIDB4MDAsIDB4MDQsIDB4QkMsCisgMHg3OSwgMHg3RCwgMHhCMywgMHhBRSwgMHg3RiwgMHgwOCwgMHhFQywgMHgzRCwgMHg0OSwgMHg2QiwgMHg0RiwgMHhCNCwgMHgxMSwgMHhCMywKKyAweEY2LCAweDIwLCAweEE1LCAweDU4LCAweEE1LCAweDAxLCAweEUwLCAweDIyLCAweDJELCAweDA4LCAweENGLCAweEUwLCAweERDLCAweDhBLAorIDB4RUMsIDB4OEIsIDB4MUEsIDB4N0IsIDB4RjIsIDB4NEIsIDB4RTksIDB4MjksIDB4NTEsIDB4Q0MsIDB4NUIsIDB4QTEsIDB4QkUsIDB4QkIsCisgMHgyNCwgMHg3NCwgMHg5MCwgMHg5QSwgMHhFMH07CisKK3N0YXRpYyB1aW50OF90IGVjX2tleXBhaXJbXSA9IHsKKyAweDMwLCAweDVGLCAweDAyLCAweDAxLCAweDAxLCAweDA0LCAweDE4LCAweDMzLCAweDhFLCAweDg2LCAweEE4LCAweDgxLCAweEUyLCAweDM4LAorIDB4RjUsIDB4NDksIDB4QkQsIDB4NkYsIDB4MDUsIDB4NTMsIDB4NDksIDB4NEIsIDB4NzMsIDB4RTMsIDB4RDYsIDB4MTEsIDB4MzAsIDB4RkQsCisgMHhDNiwgMHhDOSwgMHg2RCwgMHhBMCwgMHgwQSwgMHgwNiwgMHgwOCwgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwMywgMHgwMSwKKyAweDAxLCAweEExLCAweDM0LCAweDAzLCAweDMyLCAweDAwLCAweDA0LCAweDUxLCAweDc1LCAweEJDLCAweERGLCAweDMwLCAweEEzLCAweDcwLAorIDB4RjMsIDB4OUQsIDB4NTMsIDB4OTMsIDB4RTYsIDB4MTIsIDB4NzIsIDB4ODgsIDB4RDgsIDB4MDEsIDB4NjcsIDB4QjUsIDB4RjQsIDB4QjQsCisgMHhCNywgMHg3NiwgMHhDNiwgMHg3NCwgMHhGNywgMHhDNiwgMHhGMywgMHg1NCwgMHhCNywgMHhEMiwgMHgyNCwgMHgwNiwgMHgyQywgMHgxRiwKKyAweDY4LCAweDU0LCAweEI1LCAweEE3LCAweEFGLCAweDBGLCAweEU1LCAweDc4LCAweEVBLCAweEYyLCAweDU4LCAweEYwLCAweDI3fTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3siVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgMTYgQnl0ZSBBRVNcbiIsIDEsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5LCAweEQwfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQ1RSLCBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwIDI0IEJ5dGUgQUVTXG4iLCAyLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MjQsIDB4MTMsIDB4NjEsIDB4NDcsIDB4NjEsIDB4QjgsIDB4QzgsIDB4RjAsIDB4REYsIDB4QUIsIDB4NUEsIDB4MEUsIDB4ODcsCisgMHg0MCwgMHhBQywgMHhBMywgMHg5MCwgMHg3NywgMHg4MywgMHg1MiwgMHgzMSwgMHg3NCwgMHhGOX0sIEFFU18yNEJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NUUiwgQllURVNfVE9fQklUUyhBRVNfMjRCX0tFWV9TSVpFKSwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCAzMiBCeXRlIEFFU1xuIiwgMywgUFNBX0tFWV9UWVBFX0FFUywKK3sweEVBLCAweEQ1LCAweEU2LCAweEM4LCAweDUxLCAweEY5LCAweEVDLCAweEJCLCAweDlCLCAweDU3LCAweDdDLCAweEVELCAweEQyLAorIDB4NEIsIDB4ODIsIDB4ODQsIDB4OUYsIDB4OUYsIDB4RTYsIDB4NzMsIDB4MjEsIDB4M0QsIDB4MUEsIDB4MDUsIDB4QzksIDB4RUQsCisgMHhERiwgMHgyNSwgMHgxNywgMHg2OCwgMHg4NiwgMHhBRX0sIEFFU18zMkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NUUiwgQllURVNfVE9fQklUUyhBRVNfMzJCX0tFWV9TSVpFKSwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCBERVMgNjQgYml0IGtleVxuIiwgNCwgUFNBX0tFWV9UWVBFX0RFUywKKyB7MHg3MCwgMHgyNCwgMHg1NSwgMHgwQywgMHgxNCwgMHg5RCwgMHhFRCwgMHgyOX0sCisgREVTXzhCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsIEJZVEVTX1RPX0JJVFMoREVTXzhCX0tFWV9TSVpFKSwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCBUcmlwbGUgREVTIDItS2V5XG4iLCA1LCBQU0FfS0VZX1RZUEVfREVTLAorezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRn0sCisgREVTM18yS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19DQkNfTk9fUEFERElORywgQllURVNfVE9fQklUUyhERVMzXzJLRVlfU0laRSksCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgVHJpcGxlIERFUyAzLUtleVxuIiwgNiwgUFNBX0tFWV9UWVBFX0RFUywKK3sweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGLAorIDB4RjEsIDB4RTAsIDB4RDMsIDB4QzIsIDB4QjUsIDB4QTQsIDB4OTcsIDB4ODYsCisgMHhGRSwgMHhEQywgMHhCQSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMH0sCisgREVTM18zS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19DQkNfTk9fUEFERElORywgQllURVNfVE9fQklUUyhERVMzXzNLRVlfU0laRSksCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgMTYgQnl0ZSByYXcgZGF0YVxuIiwgNywgUFNBX0tFWV9UWVBFX1JBV19EQVRBLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOSwgMHhEMH0sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NUUiwgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwKKyBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAorfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCAtIG5vdCBhIGNpcGhlciBhbGdvcml0aG1cbiIsIDgsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5LCAweEQwfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQ01BQywgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwKKyBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCAtIHVua25vd24gY2lwaGVyIGFsZ29yaXRobVxuIiwgOSwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4QzksIDB4RDB9LCBBRVNfMTZCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19DQVRFR09SWV9DSVBIRVIsIEJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksCisgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSBpbmNvbXBhdGlibGUga2V5IEFSQzRcbiIsIDEwLCBQU0FfS0VZX1RZUEVfQVJDNCwKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4QzksIDB4RDB9LCBBRVNfMTZCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19DVFIsIEJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksCisgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSBpbmNvcnJlY3QgdXNhZ2VcbiIsIDExLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOSwgMHhEMH0sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NUUiwgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwKKyBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAorfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCAtIFJTQSBwdWJsaWMga2V5XG4iLCAxMiwgUFNBX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZLAorezB9LCAyOTQsCisgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOX1JBVywgMjA0OCwKKyBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCAtIFJTQSBrZXlwYWlyXG4iLCAxMywgUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSLAorezB9LCAxMTkzLAorIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVcsIDIwNDgsCisgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSBFQyBQdWJsaWMga2V5XG4iLCAxNCwKKyBQU0FfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVlfQkFTRSB8IFBTQV9FQ0NfQ1VSVkVfU0VDUDE5MlIxLCB7MH0sIDc1LAorIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQsIDE5MiwKKyBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCAtIEVDIGtleXBhaXJcbiIsIDE1LAorIFBTQV9LRVlfVFlQRV9FQ0NfS0VZUEFJUl9CQVNFIHwgUFNBX0VDQ19DVVJWRV9TRUNQMTkyUjEsIHswfSwgOTcsCisgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9DUllQVCwgMTkyLAorIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorfTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazJbXSA9IHsKK3siVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSBuZWdhdGl2ZSB0ZXN0XG4iLCAxNiwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4QzksIDB4RDB9LCBBRVNfMTZCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19DVFIsIEJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksCisgUFNBX1NVQ0NFU1MKK30sCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzMvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzMvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NzlkMzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMy90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAzMy5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCAzMykKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBzeW1tZXRyaWMgY2lwaGVyIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NyeXB0b19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9jMDMzX2NyeXB0b19saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0ZSRUUpOworICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNC9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNC9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZiMTVmNQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM0L3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2MwMzQuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzQvdGVzdF9jMDM0LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNC90ZXN0X2MwMzQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjA1OWVhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzQvdGVzdF9jMDM0LmMKQEAgLTAsMCArMSwxMjMgQEAKKworLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAzNC5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorCisKK2NsaWVudF90ZXN0X3QgdGVzdF9jMDM0X2NyeXB0b19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBwc2FfY2lwaGVyX2dlbmVyYXRlX2l2X3Rlc3QsCisgICAgTlVMTCwKK307CisKK3N0YXRpYyBpbnQgICAgIGdfdGVzdF9jb3VudCA9IDE7CisKK2ludDMyX3QgcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdl90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBpLCBqLCBpdl9zdW07CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgaXZbMzJdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGl2X2xlbmd0aDsKKyAgICBwc2Ffa2V5X3BvbGljeV90ICAgICAgICBwb2xpY3k7CisgICAgcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAgb3BlcmF0aW9uOworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1czsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCisgICAgeworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgICAgIC8qIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazFbaV0udXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfYWxnKTsKKworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMVtpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIC8qIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV90eXBlLCBjaGVjazFbaV0ua2V5X2RhdGEsIGNoZWNrMVtpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBrZXkgZm9yIGEgbXVsdGlwYXJ0IHN5bW1ldHJpYyBlbmNyeXB0aW9uIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9FTkNSWVBUX1NFVFVQLCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2hhbmRsZSwgY2hlY2sxW2ldLmtleV9hbGcpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgICAgICAvKiBHZW5lcmF0ZSBhbiBJViBmb3IgYSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfR0VORVJBVEVfSVYsICZvcGVyYXRpb24sIGl2LAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uaXZfc2l6ZSwgJml2X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEFib3J0IGEgY2lwaGVyIG9wZXJhdGlvbiAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfQUJPUlQsICZvcGVyYXRpb24pOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENoZWNrIHRoYXQgaWYgZ2VuZXJhdGVkIGl2IGxlbmd0aCBtYXRjaCB0aGUgZXhwZWN0ZWQgbGVuZ3RoICovCisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGl2X2xlbmd0aCwgY2hlY2sxW2ldLmV4cGVjdGVkX2l2X2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisKKyAgICAgICAgaXZfc3VtID0gMDsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IGl2X2xlbmd0aDsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpdl9zdW0gKz0gaXZbal07CisgICAgICAgIH0KKworICAgICAgICAvKiBDaGVjayB0aGF0IGlmIGdlbmVyYXRlZCBpdiBhcmUgemVybyAqLworICAgICAgICBURVNUX0FTU0VSVF9OT1RfRVFVQUwoaXZfc3VtLCAwLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CisKKyAgICAgICAgLyogR2VuZXJhdGluZyBhbiBJViBmb3IgYSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBvcGVyYXRpb24gdXNpbmcgdGhlIHNhbWUgb3BlcmF0b3IKKyAgICAgICAgICogc2hvdWxkIGZhaWwKKyAgICAgICAgICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX0dFTkVSQVRFX0lWLCAmb3BlcmF0aW9uLCBpdiwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLml2X3NpemUsICZpdl9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9CQURfU1RBVEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTEpKTsKKworICAgICAgICAvKiBBYm9ydCBhIGNpcGhlciBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfQUJPUlQsICZvcGVyYXRpb24pOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEyKSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM0L3Rlc3RfYzAzNC5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzQvdGVzdF9jMDM0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QxMjExYQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM0L3Rlc3RfYzAzNC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX0MwMzRfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0MwMzRfQ0xJRU5UX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGMwMzQpCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfYzAzNF9jcnlwdG9fbGlzdFtdOworCitpbnQzMl90IHBzYV9jaXBoZXJfZ2VuZXJhdGVfaXZfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CisjZW5kaWYgLyogX1RFU1RfQzAzNF9DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM0L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzQvdGVzdF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg4MjJmOAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM0L3Rlc3RfZGF0YS5oCkBAIC0wLDAgKzEsMTA3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzMyXTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgaXZfc2l6ZTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBleHBlY3RlZF9pdl9sZW5ndGg7CisgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2sxW10gPSB7Cit7IlRlc3QgcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdiAxNiBCeXRlIEFFU1xuIiwgMSwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4QzksIDB4RDB9LCBBRVNfMTZCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DVFIsIDE2LCAxNiwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZ2VuZXJhdGVfaXYgMjQgQnl0ZSBBRVNcbiIsIDIsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyNCwgMHgxMywgMHg2MSwgMHg0NywgMHg2MSwgMHhCOCwgMHhDOCwgMHhGMCwgMHhERiwgMHhBQiwgMHg1QSwgMHgwRSwgMHg4NywKKyAweDQwLCAweEFDLCAweEEzLCAweDkwLCAweDc3LCAweDgzLCAweDUyLCAweDMxLCAweDc0LCAweEY5fSwgQUVTXzI0Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ1RSLCAxNiwgMTYsCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2dlbmVyYXRlX2l2IDMyIEJ5dGUgQUVTXG4iLCAzLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4RUEsIDB4RDUsIDB4RTYsIDB4QzgsIDB4NTEsIDB4RjksIDB4RUMsIDB4QkIsIDB4OUIsIDB4NTcsIDB4N0MsIDB4RUQsIDB4RDIsCisgMHg0QiwgMHg4MiwgMHg4NCwgMHg5RiwgMHg5RiwgMHhFNiwgMHg3MywgMHgyMSwgMHgzRCwgMHgxQSwgMHgwNSwgMHhDOSwgMHhFRCwKKyAweERGLCAweDI1LCAweDE3LCAweDY4LCAweDg2LCAweEFFfSwgQUVTXzMyQl9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ1RSLCAxNiwgMTYsCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2dlbmVyYXRlX2l2IERFUyA2NCBiaXQga2V5XG4iLCA0LCBQU0FfS0VZX1RZUEVfREVTLAorIHsweDcwLCAweDI0LCAweDU1LCAweDBDLCAweDE0LCAweDlELCAweEVELCAweDI5fSwKKyBERVNfOEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DQkNfTk9fUEFERElORywKKyA4LCA4LAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdiBUcmlwbGUgREVTIDItS2V5XG4iLCA1LCBQU0FfS0VZX1RZUEVfREVTLAorezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRn0sCisgREVTM18yS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DQkNfTk9fUEFERElORywKKyA4LCA4LAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdiBUcmlwbGUgREVTIDMtS2V5XG4iLCA2LCBQU0FfS0VZX1RZUEVfREVTLAorezB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4Q0QsIDB4RUYsCisgMHhGMSwgMHhFMCwgMHhEMywgMHhDMiwgMHhCNSwgMHhBNCwgMHg5NywgMHg4NiwKKyAweEZFLCAweERDLCAweEJBLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwfSwKKyBERVMzXzNLRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorIDgsIDgsCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2dlbmVyYXRlX2l2IEFFUyAtIHNtYWxsIGl2IGJ1ZmZlclxuIiwgNywgUFNBX0tFWV9UWVBFX0FFUywKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4QzksIDB4RDB9LCBBRVNfMTZCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DVFIsIDgsIDE2LAorIFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdiBERVMgLSBzbWFsbCBpdiBidWZmZXJcbiIsIDgsIFBTQV9LRVlfVFlQRV9ERVMsCisgezB4NzAsIDB4MjQsIDB4NTUsIDB4MEMsIDB4MTQsIDB4OUQsIDB4RUQsIDB4Mjl9LAorIERFU184Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorIDQsIDgsCisgUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2dlbmVyYXRlX2l2IEFFUyAtIGxhcmdlIGl2IGJ1ZmZlclxuIiwgOSwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4QzksIDB4RDB9LCBBRVNfMTZCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DVFIsIDMyLCAxNiwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZ2VuZXJhdGVfaXYgREVTIC0gbGFyZ2UgaXYgYnVmZmVyXG4iLCAxMCwgUFNBX0tFWV9UWVBFX0RFUywKKyB7MHg3MCwgMHgyNCwgMHg1NSwgMHgwQywgMHgxNCwgMHg5RCwgMHhFRCwgMHgyOX0sCisgREVTXzhCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCisgMTYsIDgsCisgUFNBX1NVQ0NFU1MKK30sCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzQvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzQvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NmE2N2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNC90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAzNC5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCAzNCkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBzeW1tZXRyaWMgY2lwaGVyIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NyeXB0b19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9jMDM0X2NyeXB0b19saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0ZSRUUpOworICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNS9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNS9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0Yjk3NAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM1L3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2MwMzUuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzUvdGVzdF9jMDM1LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNS90ZXN0X2MwMzUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTY0YTM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzUvdGVzdF9jMDM1LmMKQEAgLTAsMCArMSwxMDAgQEAKKworLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAzNS5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorCisKK2NsaWVudF90ZXN0X3QgdGVzdF9jMDM1X2NyeXB0b19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBwc2FfY2lwaGVyX3NldF9pdl90ZXN0LAorICAgIE5VTEwsCit9OworCitzdGF0aWMgaW50ICAgICBnX3Rlc3RfY291bnQgPSAxOworCitpbnQzMl90IHBzYV9jaXBoZXJfc2V0X2l2X3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazEpL3NpemVvZihjaGVjazFbMF0pOworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIGksIHN0YXR1czsKKyAgICBwc2Ffa2V5X3BvbGljeV90ICAgICAgICBwb2xpY3k7CisgICAgcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAgb3BlcmF0aW9uOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOworCisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2sxW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfbGVuZ3RoLCAmY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X3R5cGUsIGNoZWNrMVtpXS5rZXlfZGF0YSwgY2hlY2sxW2ldLmtleV9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICAvKiBTZXQgdGhlIGtleSBmb3IgYSBtdWx0aXBhcnQgc3ltbWV0cmljIGVuY3J5cHRpb24gb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX0VOQ1JZUFRfU0VUVVAsICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCBjaGVjazFbaV0ua2V5X2FsZyk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgIC8qIFNldCBhbiBJViBmb3IgYSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfU0VUX0lWLCAmb3BlcmF0aW9uLCBjaGVjazFbaV0uaXYsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5pdl9zaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgICAgICAvKiBTZXR0aW5nIGFuIElWIGZvciBhIHN5bW1ldHJpYyBlbmNyeXB0aW9uIG9wZXJhdGlvbiB1c2luZyB0aGUgc2FtZSBvcGVyYXRvcgorICAgICAgICAgKiBzaG91bGQgZmFpbAorICAgICAgICAgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfU0VUX0lWLCAmb3BlcmF0aW9uLCBjaGVjazFbaV0uaXYsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5pdl9zaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfQkFEX1NUQVRFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKworICAgICAgICAvKiBBYm9ydCBhIGNpcGhlciBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfQUJPUlQsICZvcGVyYXRpb24pOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzUvdGVzdF9jMDM1LmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNS90ZXN0X2MwMzUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGNmNmY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzUvdGVzdF9jMDM1LmgKQEAgLTAsMCArMSwzMCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfQzAzNV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfQzAzNV9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzAzNSkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9jMDM1X2NyeXB0b19saXN0W107CisKK2ludDMyX3QgcHNhX2NpcGhlcl9zZXRfaXZfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CisjZW5kaWYgLyogX1RFU1RfQzAzNV9DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM1L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzUvdGVzdF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMjYwZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM1L3Rlc3RfZGF0YS5oCkBAIC0wLDAgKzEsMTE4IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzMyXTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgaXZbMzJdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGl2X3NpemU7CisgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2sxW10gPSB7Cit7IlRlc3QgcHNhX2NpcGhlcl9zZXRfaXYgMTYgQnl0ZSBBRVNcbiIsIDEsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5LCAweEQwfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ1RSLAorezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsCisgMHgwRCwgMHgwRSwgMHgwRn0sIDE2LAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9zZXRfaXYgMjQgQnl0ZSBBRVNcbiIsIDIsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyNCwgMHgxMywgMHg2MSwgMHg0NywgMHg2MSwgMHhCOCwgMHhDOCwgMHhGMCwgMHhERiwgMHhBQiwgMHg1QSwgMHgwRSwgMHg4NywKKyAweDQwLCAweEFDLCAweEEzLCAweDkwLCAweDc3LCAweDgzLCAweDUyLCAweDMxLCAweDc0LCAweEY5fSwgQUVTXzI0Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ1RSLAorezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsCisgMHgwRCwgMHgwRSwgMHgwRn0sIDE2LAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9zZXRfaXYgMzIgQnl0ZSBBRVNcbiIsIDMsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHhFQSwgMHhENSwgMHhFNiwgMHhDOCwgMHg1MSwgMHhGOSwgMHhFQywgMHhCQiwgMHg5QiwgMHg1NywgMHg3QywgMHhFRCwgMHhEMiwKKyAweDRCLCAweDgyLCAweDg0LCAweDlGLCAweDlGLCAweEU2LCAweDczLCAweDIxLCAweDNELCAweDFBLCAweDA1LCAweEM5LCAweEVELAorIDB4REYsIDB4MjUsIDB4MTcsIDB4NjgsIDB4ODYsIDB4QUV9LCBBRVNfMzJCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DVFIsCit7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywKKyAweDBELCAweDBFLCAweDBGfSwgMTYsCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX3NldF9pdiBERVMgNjQgYml0IGtleVxuIiwgNCwgUFNBX0tFWV9UWVBFX0RFUywKKyB7MHg3MCwgMHgyNCwgMHg1NSwgMHgwQywgMHgxNCwgMHg5RCwgMHhFRCwgMHgyOX0sCisgREVTXzhCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCisgezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDd9LCA4LAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9zZXRfaXYgVHJpcGxlIERFUyAyLUtleVxuIiwgNSwgUFNBX0tFWV9UWVBFX0RFUywKK3sweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9LAorIERFUzNfMktFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCisgezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDd9LCA4LAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9zZXRfaXYgVHJpcGxlIERFUyAzLUtleVxuIiwgNiwgUFNBX0tFWV9UWVBFX0RFUywKK3sweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGLAorIDB4RjEsIDB4RTAsIDB4RDMsIDB4QzIsIDB4QjUsIDB4QTQsIDB4OTcsIDB4ODYsCisgMHhGRSwgMHhEQywgMHhCQSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMH0sCisgREVTM18zS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DQkNfTk9fUEFERElORywKKyB7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwN30sIDgsCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX3NldF9pdiBBRVMgLSBzbWFsbCBpdiBidWZmZXJcbiIsIDcsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5LCAweEQwfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ1RSLAorIHsweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3fSwgOCwKKyBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfc2V0X2l2IERFUyAtIHNtYWxsIGl2IGJ1ZmZlclxuIiwgOCwgUFNBX0tFWV9UWVBFX0RFUywKKyB7MHg3MCwgMHgyNCwgMHg1NSwgMHgwQywgMHgxNCwgMHg5RCwgMHhFRCwgMHgyOX0sCisgREVTXzhCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCit7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMyx9LCA0LAorIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9zZXRfaXYgQUVTIC0gbGFyZ2UgaXYgYnVmZmVyXG4iLCA5LCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOSwgMHhEMH0sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NUUiwKK3sweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLAorIDB4MEQsIDB4MEUsIDB4MEYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MTgsIDB4MTksCisgMHgxQSwgMHgxQiwgMHgxQywgMHgxRCwgMHgxRSwgMHgxRn0sIDMyLAorIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9zZXRfaXYgREVTIC0gbGFyZ2UgaXYgYnVmZmVyXG4iLCAxMCwgUFNBX0tFWV9UWVBFX0RFUywKKyB7MHg3MCwgMHgyNCwgMHg1NSwgMHgwQywgMHgxNCwgMHg5RCwgMHhFRCwgMHgyOX0sCisgREVTXzhCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCit7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywKKyAweDBELCAweDBFLCAweDBGfSwgMTYsCisgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzUvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzUvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNzIwMGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNS90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAzNS5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCAzNSkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBzeW1tZXRyaWMgY2lwaGVyIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NyeXB0b19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9jMDM1X2NyeXB0b19saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0ZSRUUpOworICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNi9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNi9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmZTgzMQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM2L3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2MwMzYuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzYvdGVzdF9jMDM2LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNi90ZXN0X2MwMzYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTQxNmI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzYvdGVzdF9jMDM2LmMKQEAgLTAsMCArMSwxMjkgQEAKKworLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAzNi5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorCisKK2NsaWVudF90ZXN0X3QgdGVzdF9jMDM2X2NyeXB0b19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBwc2FfY2lwaGVyX3VwZGF0ZV90ZXN0LAorICAgIE5VTEwsCit9OworCitzdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50ID0gMTsKK3N0YXRpYyB1aW50OF90ICAgICAgICAgICAgICAgICBvdXRwdXRbU0laRV8zMkJdOworc3RhdGljIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgIG9wZXJhdGlvbjsKKworaW50MzJfdCBwc2FfY2lwaGVyX3VwZGF0ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBpLCBzdGF0dXM7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgbGVuZ3RoOworICAgIHBzYV9rZXlfcG9saWN5X3QgICAgICAgIHBvbGljeTsKKyAgICBwc2FfY2lwaGVyX29wZXJhdGlvbl90ICBpbnZhbGlkX29wZXJhdGlvbiA9IHswfTsKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2sxW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazFbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9sZW5ndGgsICZjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfdHlwZSwgY2hlY2sxW2ldLmtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIGlmIChjaGVjazFbaV0udXNhZ2UgPT0gUFNBX0tFWV9VU0FHRV9FTkNSWVBUKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBTZXQgdGhlIGtleSBmb3IgYSBtdWx0aXBhcnQgc3ltbWV0cmljIGVuY3J5cHRpb24gb3BlcmF0aW9uICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9FTkNSWVBUX1NFVFVQLCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9oYW5kbGUsIGNoZWNrMVtpXS5rZXlfYWxnKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNoZWNrMVtpXS51c2FnZSA9PSBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX0RFQ1JZUFRfU0VUVVAsICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2hhbmRsZSwgY2hlY2sxW2ldLmtleV9hbGcpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBTZXQgYW4gSVYgZm9yIGEgc3ltbWV0cmljIGVuY3J5cHRpb24gb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX1NFVF9JViwgJm9wZXJhdGlvbiwgY2hlY2sxW2ldLml2LAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uaXZfc2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworCisgICAgICAgIC8qIEVuY3J5cHQgb3IgZGVjcnlwdCBhIG1lc3NhZ2UgZnJhZ21lbnQgaW4gYW4gYWN0aXZlIGNpcGhlciBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfVVBEQVRFLCAmb3BlcmF0aW9uLCBjaGVjazFbaV0uaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5pbnB1dF9sZW5ndGgsIG91dHB1dCwgY2hlY2sxW2ldLm91dHB1dF9zaXplLCAmbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKworICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cyAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgLyogQWJvcnQgYSBjaXBoZXIgb3BlcmF0aW9uICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9BQk9SVCwgJm9wZXJhdGlvbik7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENoZWNrIGlmIHRoZSBvdXRwdXQgbGVuZ3RoIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGxlbmd0aCAqLworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChsZW5ndGgsIGNoZWNrMVtpXS5leHBlY3RlZF9vdXRwdXRfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDExKSk7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlIG91dHB1dCBkYXRhIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGRhdGEgKi8KKyAgICAgICAgVEVTVF9BU1NFUlRfTUVNQ01QKG91dHB1dCwgY2hlY2sxW2ldLmV4cGVjdGVkX291dHB1dCwgbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEyKSk7CisKKyAgICAgICAgLyogRW5jcnlwdCBvciBkZWNyeXB0IGEgbWVzc2FnZSBmcmFnbWVudCBpbiBhbiBpbnZhbGlkIGNpcGhlciBvcGVyYXRpb24gc2hvdWxkIGZhaWwgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfVVBEQVRFLCAmaW52YWxpZF9vcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5pbnB1dCwgY2hlY2sxW2ldLmlucHV0X2xlbmd0aCwgb3V0cHV0LCBjaGVjazFbaV0ub3V0cHV0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICZsZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9CQURfU1RBVEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTMpKTsKKworICAgICAgICAvKiBBYm9ydCBhIGNpcGhlciBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfQUJPUlQsICZvcGVyYXRpb24pOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE0KSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM2L3Rlc3RfYzAzNi5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzYvdGVzdF9jMDM2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ1MjcxYQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM2L3Rlc3RfYzAzNi5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX0MwMzZfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0MwMzZfQ0xJRU5UX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGMwMzYpCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfYzAzNl9jcnlwdG9fbGlzdFtdOworCitpbnQzMl90IHBzYV9jaXBoZXJfdXBkYXRlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOworI2VuZGlmIC8qIF9URVNUX0MwMzZfQ0xJRU5UX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNi90ZXN0X2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM2L3Rlc3RfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ODJmYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNi90ZXN0X2RhdGEuaApAQCAtMCwwICsxLDIxOCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1s3NV07CisgICAgcHNhX2tleV9oYW5kbGVfdCAgICAgICAga2V5X2hhbmRsZTsKKyAgICBwc2Ffa2V5X3R5cGVfdCAgICAgICAgICBrZXlfdHlwZTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBrZXlfZGF0YVszMl07CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAga2V5X2xlbmd0aDsKKyAgICBwc2Ffa2V5X3VzYWdlX3QgICAgICAgICB1c2FnZTsKKyAgICBwc2FfYWxnb3JpdGhtX3QgICAgICAgICBrZXlfYWxnOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGl2WzE2XTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBpdl9zaXplOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGlucHV0WzMyXTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBpbnB1dF9sZW5ndGg7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemU7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfb3V0cHV0WzMyXTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBleHBlY3RlZF9vdXRwdXRfbGVuZ3RoOworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1czsKK30gdGVzdF9kYXRhOworCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0geworeyJUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIC0gRW5jcnlwdCAtIEFFUyBDQkNfTk9fUEFERElOR1xuIiwgMSwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDJiLCAweDdlLCAweDE1LCAweDE2LCAweDI4LCAweGFlLCAweGQyLCAweGE2LCAweGFiLCAweGY3LCAweDE1LCAweDg4LCAweDA5LAorIDB4Y2YsIDB4NGYsIDB4M2N9LCBBRVNfMTZCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DQkNfTk9fUEFERElORywKK3sweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLAorIDB4MmEsIDB4MmEsIDB4MmF9LCAxNiwKK3sweDZiLCAweGMxLCAweGJlLCAweGUyLCAweDJlLCAweDQwLCAweDlmLCAweDk2LCAweGU5LCAweDNkLCAweDdlLCAweDExLCAweDczLAorIDB4OTMsIDB4MTcsIDB4MmF9LCAxNiwgMTYsCit7MHhBMCwgMHg3NiwgMHhFQywgMHg5RCwgMHhGQiwgMHhFNCwgMHg3RCwgMHg1MiwgMHhBRiwgMHhDMywgMHg1NywgMHgzMywgMHg2RiwKKyAweDIwLCAweDc0LCAweDNCfSwgMTYsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBFbmNyeXB0IC0gQUVTIENCQ19OT19QQURESU5HIChTaG9ydCBpbnB1dClcbiIsIDIsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwKKyAweGNmLCAweDRmLCAweDNjfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCit7MHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwKKyAweDJhLCAweDJhLCAweDJhfSwgMTYsCit7MHg2YiwgMHhjMSwgMHhiZSwgMHhlMiwgMHgyM30sIDUsIDE2LAorezB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MjN9LCAwLCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIC0gRW5jcnlwdCAtIEFFUyBDQkNfUEtDUzdcbiIsIDMsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwKKyAweGNmLCAweDRmLCAweDNjfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX1BLQ1M3LAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsCisgMHgyYSwgMHgyYSwgMHgyYX0sIDE2LAorezB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsIDB4ZTksIDB4M2QsIDB4N2UsIDB4MTEsIDB4NzMsCisgMHg5MywgMHgxNywgMHgyYX0sIDE2LCAxNiwKK3sweGEwLCAweDc2LCAweGVjLCAweDlkLCAweGZiLCAweGU0LCAweDdkLCAweDUyLCAweGFmLCAweGMzLCAweDU3LCAweDMzLCAweDZmLAorIDB4MjAsIDB4NzQsIDB4M2J9LCAxNiwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIEVuY3J5cHQgLSBBRVMgQ0JDX1BLQ1M3IChTaG9ydCBpbnB1dClcbiIsIDQsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwKKyAweGNmLCAweDRmLCAweDNjfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX1BLQ1M3LAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsCisgMHgyYSwgMHgyYSwgMHgyYX0sIDE2LAorezB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsIDB4ZTksIDB4M2QsIDB4N2UsIDB4MTEsIDB4NzMsCisgMHg5MywgMHgxN30sIDE1LCAxNiwKK3swfSwgMCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIEVuY3J5cHQgLSBBRVMgQ1RSXG4iLCA1LCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksCisgMHhjZiwgMHg0ZiwgMHgzY30sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NUUiwKK3sweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLAorIDB4MmEsIDB4MmEsIDB4MmF9LCAxNiwKK3sweDZiLCAweGMxLCAweGJlLCAweGUyLCAweDJlLCAweDQwLCAweDlmLCAweDk2LCAweGU5LCAweDNkLCAweDdlLCAweDExLCAweDczLAorIDB4OTMsIDB4MTcsIDB4MmF9LCAxNiwgMTYsCit7MHg4ZiwgMHg5NCwgMHgwOCwgMHhmZSwgMHg4MCwgMHhhOCwgMHgxZCwgMHgzZSwgMHg4MSwgMHgzZCwgMHhhMywgMHhjNywgMHhiMCwKKyAweGIyLCAweGJkLCAweDMyfSwgMTYsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBFbmNyeXB0IC0gREVTIENCQyAobm9wYWQpXG4iLCA2LCBQU0FfS0VZX1RZUEVfREVTLAorezB4MDEsIDB4MDIsIDB4MDQsIDB4MDcsIDB4MDgsIDB4MGIsIDB4MGQsIDB4MGV9LCBERVNfOEJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmF9LCA4LAorezB4ZWQsIDB4YTQsIDB4MDEsIDB4MTIsIDB4MzksIDB4YmMsIDB4M2EsIDB4Yzl9LCA4LCA4LAorezB4NjQsIDB4ZjksIDB4MTcsIDB4YjAsIDB4MTUsIDB4MmYsIDB4OGYsIDB4MDV9LCA4LCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIC0gRW5jcnlwdCAtIDIta2V5IDNERSAtQ0JDIChub3BhZClcbiIsIDcsIFBTQV9LRVlfVFlQRV9ERVMsCit7MHgwMSwgMHgwMiwgMHgwNCwgMHgwNywgMHgwOCwgMHgwYiwgMHgwZCwgMHgwZSwgMHhjMSwgMHhjMiwgMHhjNCwgMHhjNywgMHhjOCwKKyAweGNiLCAweGNkLCAweGNlfSwgREVTM18yS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmF9LCA4LAorezB4ZWQsIDB4YTQsIDB4MDEsIDB4MTIsIDB4MzksIDB4YmMsIDB4M2EsIDB4Yzl9LCA4LCA4LAorezB4NWQsIDB4MDYsIDB4NTIsIDB4NDIsIDB4OWMsIDB4NWIsIDB4MGEsIDB4Yzd9LCA4LCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIC0gRW5jcnlwdCAtIDMta2V5IDNERSAtQ0JDIChub3BhZClcbiIsIDgsIFBTQV9LRVlfVFlQRV9ERVMsCit7MHgwMSwgMHgwMiwgMHgwNCwgMHgwNywgMHgwOCwgMHgwYiwgMHgwZCwgMHgwZSwgMHhjMSwgMHhjMiwgMHhjNCwgMHhjNywgMHhjOCwKKyAweGNiLCAweGNkLCAweGNlLCAweDMxLCAweDMyLCAweDM0LCAweDM3LCAweDM4LCAweDNiLCAweDNkLCAweDNlfSwgREVTM18zS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmF9LCA4LAorezB4ZWQsIDB4YTQsIDB4MDEsIDB4MTIsIDB4MzksIDB4YmMsIDB4M2EsIDB4Yzl9LCA4LCA4LAorezB4ODEsIDB4N2MsIDB4YTcsIDB4ZDYsIDB4OWIsIDB4ODAsIDB4ZDgsIDB4NmF9LCA4LCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIC0gc21hbGwgb3V0cHV0IGJ1ZmZlciBzaXplXG4iLCA5LCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksCisgMHhjZiwgMHg0ZiwgMHgzY30sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsCisgMHgyYSwgMHgyYSwgMHgyYX0sIDE2LAorezB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsIDB4ZTksIDB4M2QsIDB4N2UsIDB4MTEsIDB4NzMsCisgMHg5MywgMHgxNywgMHgyYX0sIDE2LCAxNSwKK3sweEEwLCAweDc2LCAweEVDLCAweDlELCAweEZCLCAweEU0LCAweDdELCAweDUyLCAweEFGLCAweEMzLCAweDU3LCAweDMzLCAweDZGLAorIDB4MjAsIDB4NzQsIDB4M0J9LCAxNiwgUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIERlY3J5cHQgLSBBRVMgQ0JDX05PX1BBRERJTkdcbiIsIDEwLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksCisgMHhjZiwgMHg0ZiwgMHgzY30sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsCisgMHgyYSwgMHgyYSwgMHgyYX0sIDE2LAorezB4QTAsIDB4NzYsIDB4RUMsIDB4OUQsIDB4RkIsIDB4RTQsIDB4N0QsIDB4NTIsIDB4QUYsIDB4QzMsIDB4NTcsIDB4MzMsIDB4NkYsCisgMHgyMCwgMHg3NCwgMHgzQn0sIDE2LCAxNiwKK3sweDZiLCAweGMxLCAweGJlLCAweGUyLCAweDJlLCAweDQwLCAweDlmLCAweDk2LCAweGU5LCAweDNkLCAweDdlLCAweDExLCAweDczLAorIDB4OTMsIDB4MTcsIDB4MmF9LCAxNiwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIERlY3J5cHQgLSBBRVMgQ0JDX05PX1BBRERJTkcgKFNob3J0IGlucHV0KVxuIiwgMTEsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwKKyAweGNmLCAweDRmLCAweDNjfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCit7MHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwKKyAweDJhLCAweDJhLCAweDJhfSwgMTYsCit7MHg2YiwgMHhjMSwgMHhiZSwgMHhlMiwgMHgyM30sIDUsIDE2LAorezB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MjN9LCAwLCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIC0gRGVjcnlwdCAtIEFFUyBDQkNfUEtDUzdcbiIsIDEyLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksCisgMHhjZiwgMHg0ZiwgMHgzY30sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NCQ19QS0NTNywKK3sweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLAorIDB4MmEsIDB4MmEsIDB4MmF9LCAxNiwKK3sweGEwLCAweDc2LCAweGVjLCAweDlkLCAweGZiLCAweGU0LCAweDdkLCAweDUyLCAweGFmLCAweGMzLCAweDU3LCAweDMzLCAweDZmLAorIDB4MjAsIDB4NzQsIDB4M2J9LCAxNiwgMTYsCit7MHg2YiwgMHhjMSwgMHhiZSwgMHhlMiwgMHgyZSwgMHg0MCwgMHg5ZiwgMHg5NiwgMHhlOSwgMHgzZCwgMHg3ZSwgMHgxMSwgMHg3MywKKyAweDkzLCAweDE3LCAweDJhfSwgMCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIERlY3J5cHQgLSBBRVMgQ0JDX1BLQ1M3IChTaG9ydCBpbnB1dClcbiIsIDEzLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksCisgMHhjZiwgMHg0ZiwgMHgzY30sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NCQ19QS0NTNywKK3sweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLAorIDB4MmEsIDB4MmEsIDB4MmF9LCAxNiwKK3sweGEwLCAweDc2LCAweGVjLCAweDlkLCAweGZiLCAweGU0LCAweDdkLCAweDUyLCAweGFmLCAweGMzLCAweDU3LCAweDMzLCAweDZmLAorIDB4MjAsIDB4NzQsIDB4M2IsIDB4Y2EsIDB4N2UsIDB4OGEsIDB4MTUsIDB4ZGMsIDB4M2MsIDB4NzcsIDB4NjQsIDB4MzYsIDB4MzEsCisgMHg0MiwgMHg5MywgMHgwMywgMHgxYywgMHhkNCwgMHhmM30sIDMyLCAzMiwKK3sweDZiLCAweGMxLCAweGJlLCAweGUyLCAweDJlLCAweDQwLCAweDlmLCAweDk2LCAweGU5LCAweDNkLCAweDdlLCAweDExLCAweDczLAorIDB4OTMsIDB4MTcsIDB4MmF9LCAxNiwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIERlY3J5cHQgLSBBRVMgQ1RSXG4iLCAxNCwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDJiLCAweDdlLCAweDE1LCAweDE2LCAweDI4LCAweGFlLCAweGQyLCAweGE2LCAweGFiLCAweGY3LCAweDE1LCAweDg4LCAweDA5LAorIDB4Y2YsIDB4NGYsIDB4M2N9LCBBRVNfMTZCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19DVFIsCit7MHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwKKyAweDJhLCAweDJhLCAweDJhfSwgMTYsCit7MHg4ZiwgMHg5NCwgMHgwOCwgMHhmZSwgMHg4MCwgMHhhOCwgMHgxZCwgMHgzZSwgMHg4MSwgMHgzZCwgMHhhMywgMHhjNywgMHhiMCwKKyAweGIyLCAweGJkLCAweDMyfSwgMTYsIDE2LAorezB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsIDB4ZTksIDB4M2QsIDB4N2UsIDB4MTEsIDB4NzMsCisgMHg5MywgMHgxNywgMHgyYX0sIDE2LCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIC0gRGVjcnlwdCAtIERFUyBDQkMgKG5vcGFkKVxuIiwgMTUsIFBTQV9LRVlfVFlQRV9ERVMsCit7MHgwMSwgMHgwMiwgMHgwNCwgMHgwNywgMHgwOCwgMHgwYiwgMHgwZCwgMHgwZX0sIERFU184Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCit7MHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYX0sIDgsCit7MHg2NCwgMHhmOSwgMHgxNywgMHhiMCwgMHgxNSwgMHgyZiwgMHg4ZiwgMHgwNX0sIDgsIDgsCit7MHhlZCwgMHhhNCwgMHgwMSwgMHgxMiwgMHgzOSwgMHhiYywgMHgzYSwgMHhjOX0sIDgsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBEZWNyeXB0IC0gMi1rZXkgM0RFIC1DQkMgKG5vcGFkKVxuIiwgMTYsIFBTQV9LRVlfVFlQRV9ERVMsCit7MHgwMSwgMHgwMiwgMHgwNCwgMHgwNywgMHgwOCwgMHgwYiwgMHgwZCwgMHgwZSwgMHhjMSwgMHhjMiwgMHhjNCwgMHhjNywgMHhjOCwKKyAweGNiLCAweGNkLCAweGNlfSwgREVTM18yS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmF9LCA4LAorezB4NWQsIDB4MDYsIDB4NTIsIDB4NDIsIDB4OWMsIDB4NWIsIDB4MGEsIDB4Yzd9LCA4LCA4LAorezB4ZWQsIDB4YTQsIDB4MDEsIDB4MTIsIDB4MzksIDB4YmMsIDB4M2EsIDB4Yzl9LCA4LCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIC0gRGVjcnlwdCAtIDMta2V5IDNERSAtQ0JDIChub3BhZClcbiIsIDE3LCBQU0FfS0VZX1RZUEVfREVTLAorezB4MDEsIDB4MDIsIDB4MDQsIDB4MDcsIDB4MDgsIDB4MGIsIDB4MGQsIDB4MGUsIDB4YzEsIDB4YzIsIDB4YzQsIDB4YzcsIDB4YzgsCisgMHhjYiwgMHhjZCwgMHhjZSwgMHgzMSwgMHgzMiwgMHgzNCwgMHgzNywgMHgzOCwgMHgzYiwgMHgzZCwgMHgzZX0sIERFUzNfM0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19DQkNfTk9fUEFERElORywKK3sweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhfSwgOCwKK3sweDgxLCAweDdjLCAweGE3LCAweGQ2LCAweDliLCAweDgwLCAweGQ4LCAweDZhfSwgOCwgOCwKK3sweGVkLCAweGE0LCAweDAxLCAweDEyLCAweDM5LCAweGJjLCAweDNhLCAweGM5fSwgOCwgUFNBX1NVQ0NFU1MKK30sCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzYvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzYvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NmE2YjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNi90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAzNi5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCAzNikKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBzeW1tZXRyaWMgY2lwaGVyIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NyeXB0b19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9jMDM2X2NyeXB0b19saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0ZSRUUpOworICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNy9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNy9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFhMDY3NAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM3L3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2MwMzcuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzcvdGVzdF9jMDM3LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNy90ZXN0X2MwMzcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTQ2NDAyCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzcvdGVzdF9jMDM3LmMKQEAgLTAsMCArMSwxNDIgQEAKKworLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAzNy5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorCisjZGVmaW5lIFNMT1RfMSAgICAgIDAKKyNkZWZpbmUgU0xPVF8yICAgICAgMQorCitjbGllbnRfdGVzdF90IHRlc3RfYzAzN19jcnlwdG9fbGlzdFtdID0geworICAgIE5VTEwsCisgICAgcHNhX2NpcGhlcl9maW5pc2hfdGVzdCwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludCAgICAgICAgZ190ZXN0X2NvdW50ID0gMTsKK3N0YXRpYyB1aW50OF90ICAgIG91dHB1dFtTSVpFXzMyQl07CisKK2ludDMyX3QgcHNhX2NpcGhlcl9maW5pc2hfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgaSwgc3RhdHVzOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIHVwZGF0ZV9sZW5ndGgsIGZpbmlzaF9sZW5ndGg7CisgICAgcHNhX2tleV9wb2xpY3lfdCAgICAgICAgcG9saWN5OworICAgIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgIG9wZXJhdGlvbiwgaW52YWxpZF9vcGVyYXRpb247CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2sxW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazFbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9sZW5ndGgsICZjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfdHlwZSwgY2hlY2sxW2ldLmtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIGlmIChjaGVjazFbaV0udXNhZ2UgPT0gUFNBX0tFWV9VU0FHRV9FTkNSWVBUKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBTZXQgdGhlIGtleSBmb3IgYSBtdWx0aXBhcnQgc3ltbWV0cmljIGVuY3J5cHRpb24gb3BlcmF0aW9uICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9FTkNSWVBUX1NFVFVQLCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9oYW5kbGUsIGNoZWNrMVtpXS5rZXlfYWxnKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNoZWNrMVtpXS51c2FnZSA9PSBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNldCB0aGUga2V5IGZvciBhIG11bHRpcGFydCBzeW1tZXRyaWMgZGVjcnlwdGlvbiBvcGVyYXRpb24gKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX0RFQ1JZUFRfU0VUVVAsICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2hhbmRsZSwgY2hlY2sxW2ldLmtleV9hbGcpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBTZXQgYW4gSVYgZm9yIGEgc3ltbWV0cmljIGVuY3J5cHRpb24gb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX1NFVF9JViwgJm9wZXJhdGlvbiwgY2hlY2sxW2ldLml2LAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uaXZfc2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworCisgICAgICAgIC8qIEVuY3J5cHQgb3IgZGVjcnlwdCBhIG1lc3NhZ2UgZnJhZ21lbnQgaW4gYW4gYWN0aXZlIGNpcGhlciBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfVVBEQVRFLCAmb3BlcmF0aW9uLCBjaGVjazFbaV0uaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5pbnB1dF9sZW5ndGgsIG91dHB1dCwgY2hlY2sxW2ldLm91dHB1dF9zaXplW1NMT1RfMV0sICZ1cGRhdGVfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisKKyAgICAgICAgLyogRmluaXNoIGVuY3J5cHRpbmcgb3IgZGVjcnlwdGluZyBhIG1lc3NhZ2UgaW4gYSBjaXBoZXIgb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX0ZJTklTSCwgJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICsgdXBkYXRlX2xlbmd0aCwgY2hlY2sxW2ldLm91dHB1dF9zaXplW1NMT1RfMl0sICZmaW5pc2hfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CisKKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEFib3J0IGEgY2lwaGVyIG9wZXJhdGlvbiAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfQUJPUlQsICZvcGVyYXRpb24pOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMSkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKiBDaGVjayBpZiB0aGUgb3V0cHV0IGxlbmd0aCBtYXRjaGVzIHRoZSBleHBlY3RlZCBsZW5ndGggKi8KKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmluaXNoX2xlbmd0aCwgY2hlY2sxW2ldLmV4cGVjdGVkX291dHB1dF9sZW5ndGgsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTIpKTsKKworICAgICAgICAvKiBDaGVjayBpZiB0aGUgb3V0cHV0IGRhdGEgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgZGF0YSAqLworICAgICAgICBURVNUX0FTU0VSVF9NRU1DTVAob3V0cHV0LCBjaGVjazFbaV0uZXhwZWN0ZWRfb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAodXBkYXRlX2xlbmd0aCArIGZpbmlzaF9sZW5ndGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9DSEVDS1BPSU5UX05VTSgxMykpOworCisgICAgICAgIC8qIEZpbmlzaCBlbmNyeXB0aW5nIG9yIGRlY3J5cHRpbmcgYSBtZXNzYWdlIHVzaW5nIGFuIGludmFsaWQgb3BlcmF0aW9uIHNob3VsZCBmYWlsICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX0ZJTklTSCwgJmludmFsaWRfb3BlcmF0aW9uLCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5vdXRwdXRfc2l6ZVtTTE9UXzJdLCAmZmluaXNoX2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxNCkpOworCisgICAgICAgIC8qIEFib3J0IGEgY2lwaGVyIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9BQk9SVCwgJm9wZXJhdGlvbik7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTUpKTsKKworICAgICAgICAvKiBBYm9ydCBhIGNpcGhlciBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfQUJPUlQsICZpbnZhbGlkX29wZXJhdGlvbik7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTYpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzcvdGVzdF9jMDM3LmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNy90ZXN0X2MwMzcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2UxYmRhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzcvdGVzdF9jMDM3LmgKQEAgLTAsMCArMSwzMCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfQzAzN19DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfQzAzN19DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzAzNykKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9jMDM3X2NyeXB0b19saXN0W107CisKK2ludDMyX3QgcHNhX2NpcGhlcl9maW5pc2hfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CisjZW5kaWYgLyogX1RFU1RfQzAzN19DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM3L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzcvdGVzdF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ4YTFkZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM3L3Rlc3RfZGF0YS5oCkBAIC0wLDAgKzEsMjQ3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzMyXTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgaXZbMTZdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGl2X3NpemU7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgaW5wdXRbMzJdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGlucHV0X2xlbmd0aDsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZVsyXTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBleHBlY3RlZF9vdXRwdXRbMzJdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dHB1dF9sZW5ndGg7CisgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2sxW10gPSB7Cit7IlRlc3QgcHNhX2NpcGhlcl9maW5pc2ggLSBFbmNyeXB0IC0gQUVTIENCQ19OT19QQURESU5HXG4iLCAxLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksCisgMHhjZiwgMHg0ZiwgMHgzY30sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsCisgMHgyYSwgMHgyYSwgMHgyYX0sIDE2LAorezB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsIDB4ZTksIDB4M2QsIDB4N2UsIDB4MTEsIDB4NzMsCisgMHg5MywgMHgxNywgMHgyYX0sIDE2LCB7U0laRV8zMkIsIFNJWkVfMzJCfSwKK3sweEEwLCAweDc2LCAweEVDLCAweDlELCAweEZCLCAweEU0LCAweDdELCAweDUyLCAweEFGLCAweEMzLCAweDU3LCAweDMzLCAweDZGLAorIDB4MjAsIDB4NzQsIDB4M0J9LCAwLCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gRW5jcnlwdCAtIEFFUyBDQkNfTk9fUEFERElORyAoU2hvcnQgaW5wdXQpXG4iLCAyLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksCisgMHhjZiwgMHg0ZiwgMHgzY30sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsCisgMHgyYSwgMHgyYSwgMHgyYX0sIDE2LAorezB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MjN9LCA1LCB7MTYsIDE2fSwKK3sweDZiLCAweGMxLCAweGJlLCAweGUyLCAweDIzfSwgMCwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIEVuY3J5cHQgLSBBRVMgQ0JDX1BLQ1M3XG4iLCAzLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksCisgMHhjZiwgMHg0ZiwgMHgzY30sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NCQ19QS0NTNywKK3sweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLAorIDB4MmEsIDB4MmEsIDB4MmF9LCAxNiwKK3sweDZiLCAweGMxLCAweGJlLCAweGUyLCAweDJlLCAweDQwLCAweDlmLCAweDk2LCAweGU5LCAweDNkLCAweDdlLCAweDExLCAweDczLAorIDB4OTMsIDB4MTcsIDB4MmF9LCAxNiwge1NJWkVfMzJCLCBTSVpFXzMyQn0sCit7MHhhMCwgMHg3NiwgMHhlYywgMHg5ZCwgMHhmYiwgMHhlNCwgMHg3ZCwgMHg1MiwgMHhhZiwgMHhjMywgMHg1NywgMHgzMywgMHg2ZiwKKyAweDIwLCAweDc0LCAweDNiLCAweGNhLCAweDdlLCAweDhhLCAweDE1LCAweGRjLCAweDNjLCAweDc3LCAweDY0LCAweDM2LCAweDMxLAorIDB4NDIsIDB4OTMsIDB4MDMsIDB4MWMsIDB4ZDQsIDB4ZjN9LCAxNiwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIEVuY3J5cHQgLSBBRVMgQ0JDX1BLQ1M3IChTaG9ydCBpbnB1dClcbiIsIDQsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwKKyAweGNmLCAweDRmLCAweDNjfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX1BLQ1M3LAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsCisgMHgyYSwgMHgyYSwgMHgyYX0sIDE2LAorezB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsIDB4ZTksIDB4M2QsIDB4N2UsIDB4MTEsIDB4NzMsCisgMHg5MywgMHgxN30sIDE1LCB7U0laRV8zMkIsIFNJWkVfMzJCfSwKK3sweDYyLCAweDc5LCAweGI0LCAweDlkLCAweDdmLCAweDdhLCAweDhkLCAweGQ4LCAweDdiLCAweDY4LCAweDUxLCAweDc1LCAweGQ0LAorIDB4MjcsIDB4NmUsIDB4MjR9LCAxNiwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIEVuY3J5cHQgLSBBRVMgQ1RSXG4iLCA1LCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksCisgMHhjZiwgMHg0ZiwgMHgzY30sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NUUiwKK3sweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLAorIDB4MmEsIDB4MmEsIDB4MmF9LCAxNiwKK3sweDZiLCAweGMxLCAweGJlLCAweGUyLCAweDJlLCAweDQwLCAweDlmLCAweDk2LCAweGU5LCAweDNkLCAweDdlLCAweDExLCAweDczLAorIDB4OTMsIDB4MTcsIDB4MmF9LCAxNiwge1NJWkVfMzJCLCBTSVpFXzMyQn0sCit7MHg4ZiwgMHg5NCwgMHgwOCwgMHhmZSwgMHg4MCwgMHhhOCwgMHgxZCwgMHgzZSwgMHg4MSwgMHgzZCwgMHhhMywgMHhjNywgMHhiMCwKKyAweGIyLCAweGJkLCAweDMyfSwgMCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIEVuY3J5cHQgLSBBRVMgQ1RSIChzaG9ydCBpbnB1dClcbiIsIDYsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwKKyAweGNmLCAweDRmLCAweDNjfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ1RSLAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsCisgMHgyYSwgMHgyYSwgMHgyYX0sIDE2LAorezB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsIDB4ZTksIDB4M2QsIDB4N2UsIDB4MTEsIDB4NzMsCisgMHg5MywgMHgxN30sIDE1LCB7U0laRV8zMkIsIFNJWkVfMzJCfSwKK3sweDhmLCAweDk0LCAweDA4LCAweGZlLCAweDgwLCAweGE4LCAweDFkLCAweDNlLCAweDgxLCAweDNkLCAweGEzLCAweGM3LCAweGIwLAorIDB4YjIsIDB4YmR9LCAwLCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gRW5jcnlwdCAtIERFUyBDQkMgKG5vcGFkKVxuIiwgNywgUFNBX0tFWV9UWVBFX0RFUywKK3sweDAxLCAweDAyLCAweDA0LCAweDA3LCAweDA4LCAweDBiLCAweDBkLCAweDBlfSwgREVTXzhCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DQkNfTk9fUEFERElORywKK3sweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhfSwgOCwKK3sweGVkLCAweGE0LCAweDAxLCAweDEyLCAweDM5LCAweGJjLCAweDNhLCAweGM5fSwgOCwge1NJWkVfMzJCLCBTSVpFXzMyQn0sCit7MHg2NCwgMHhmOSwgMHgxNywgMHhiMCwgMHgxNSwgMHgyZiwgMHg4ZiwgMHgwNX0sIDAsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9maW5pc2ggLSBFbmNyeXB0IC0gMi1rZXkgM0RFIC1DQkMgKG5vcGFkKVxuIiwgOCwgUFNBX0tFWV9UWVBFX0RFUywKK3sweDAxLCAweDAyLCAweDA0LCAweDA3LCAweDA4LCAweDBiLCAweDBkLCAweDBlLCAweGMxLCAweGMyLCAweGM0LCAweGM3LCAweGM4LAorIDB4Y2IsIDB4Y2QsIDB4Y2V9LCBERVMzXzJLRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCit7MHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYX0sIDgsCit7MHhlZCwgMHhhNCwgMHgwMSwgMHgxMiwgMHgzOSwgMHhiYywgMHgzYSwgMHhjOX0sIDgsIHtTSVpFXzMyQiwgU0laRV8zMkJ9LAorezB4NWQsIDB4MDYsIDB4NTIsIDB4NDIsIDB4OWMsIDB4NWIsIDB4MGEsIDB4Yzd9LCAwLCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gRW5jcnlwdCAtIDMta2V5IDNERSAtQ0JDIChub3BhZClcbiIsIDksIFBTQV9LRVlfVFlQRV9ERVMsCit7MHgwMSwgMHgwMiwgMHgwNCwgMHgwNywgMHgwOCwgMHgwYiwgMHgwZCwgMHgwZSwgMHhjMSwgMHhjMiwgMHhjNCwgMHhjNywgMHhjOCwKKyAweGNiLCAweGNkLCAweGNlLCAweDMxLCAweDMyLCAweDM0LCAweDM3LCAweDM4LCAweDNiLCAweDNkLCAweDNlfSwgREVTM18zS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmF9LCA4LAorezB4ZWQsIDB4YTQsIDB4MDEsIDB4MTIsIDB4MzksIDB4YmMsIDB4M2EsIDB4Yzl9LCA4LCB7U0laRV8zMkIsIFNJWkVfMzJCfSwKK3sweDgxLCAweDdjLCAweGE3LCAweGQ2LCAweDliLCAweDgwLCAweGQ4LCAweDZhfSwgMCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIHNtYWxsIG91dHB1dCBidWZmZXIgc2l6ZVxuIiwgMTAsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwKKyAweGNmLCAweDRmLCAweDNjfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX1BLQ1M3LAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsCisgMHgyYSwgMHgyYSwgMHgyYX0sIDE2LAorezB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsIDB4ZTksIDB4M2QsIDB4N2UsIDB4MTEsIDB4NzMsCisgMHg5MywgMHgxNywgMHgyYX0sIDE2LCB7U0laRV8zMkIsIDE1fSwKK3sweGEwLCAweDc2LCAweGVjLCAweDlkLCAweGZiLCAweGU0LCAweDdkLCAweDUyLCAweGFmLCAweGMzLCAweDU3LCAweDMzLCAweDZmLAorIDB4MjAsIDB4NzQsIDB4M2IsIDB4Y2EsIDB4N2UsIDB4OGEsIDB4MTUsIDB4ZGMsIDB4M2MsIDB4NzcsIDB4NjQsIDB4MzYsIDB4MzEsCisgMHg0MiwgMHg5MywgMHgwMywgMHgxYywgMHhkNCwgMHhmM30sIDE2LCBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTAorfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gRGVjcnlwdCAtIEFFUyBDQkNfTk9fUEFERElOR1xuIiwgMTEsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwKKyAweGNmLCAweDRmLCAweDNjfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCit7MHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwKKyAweDJhLCAweDJhLCAweDJhfSwgMTYsCit7MHhBMCwgMHg3NiwgMHhFQywgMHg5RCwgMHhGQiwgMHhFNCwgMHg3RCwgMHg1MiwgMHhBRiwgMHhDMywgMHg1NywgMHgzMywgMHg2RiwKKyAweDIwLCAweDc0LCAweDNCfSwKKyAxNiwge1NJWkVfMzJCLCBTSVpFXzMyQn0sCit7MHg2YiwgMHhjMSwgMHhiZSwgMHhlMiwgMHgyZSwgMHg0MCwgMHg5ZiwgMHg5NiwgMHhlOSwgMHgzZCwgMHg3ZSwgMHgxMSwgMHg3MywKKyAweDkzLCAweDE3LCAweDJhfSwgMCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIERlY3J5cHQgLSBBRVMgQ0JDX05PX1BBRERJTkcgKFNob3J0IGlucHV0KVxuIiwgMTIsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwKKyAweGNmLCAweDRmLCAweDNjfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCit7MHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwKKyAweDJhLCAweDJhLCAweDJhfSwgMTYsCit7MHg2YiwgMHhjMSwgMHhiZSwgMHhlMiwgMHgyM30sIDUsIHsxNiwgMTZ9LAorezB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MjN9LCAwLCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gRGVjcnlwdCAtIEFFUyBDQkNfUEtDUzdcbiIsIDEzLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksCisgMHhjZiwgMHg0ZiwgMHgzY30sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NCQ19QS0NTNywKK3sweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLAorIDB4MmEsIDB4MmEsIDB4MmF9LCAxNiwKK3sweGEwLCAweDc2LCAweGVjLCAweDlkLCAweGZiLCAweGU0LCAweDdkLCAweDUyLCAweGFmLCAweGMzLCAweDU3LCAweDMzLCAweDZmLAorIDB4MjAsIDB4NzQsIDB4M2IsIDB4Y2EsIDB4N2UsIDB4OGEsIDB4MTUsIDB4ZGMsIDB4M2MsIDB4NzcsIDB4NjQsIDB4MzYsIDB4MzEsCisgMHg0MiwgMHg5MywgMHgwMywgMHgxYywgMHhkNCwgMHhmM30sIDMyLCB7U0laRV8zMkIsIFNJWkVfMzJCfSwKK3sweDZiLCAweGMxLCAweGJlLCAweGUyLCAweDJlLCAweDQwLCAweDlmLCAweDk2LCAweGU5LCAweDNkLCAweDdlLCAweDExLCAweDczLAorIDB4OTMsIDB4MTcsIDB4MmF9LCAwLCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gRGVjcnlwdCAtIEFFUyBDQkNfUEtDUzcgKFNob3J0IGlucHV0KVxuIiwgMTQsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwKKyAweGNmLCAweDRmLCAweDNjfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQ0JDX1BLQ1M3LAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsCisgMHgyYSwgMHgyYSwgMHgyYX0sIDE2LAorezB4NjIsIDB4NzksIDB4YjQsIDB4OWQsIDB4N2YsIDB4N2EsIDB4OGQsIDB4ZDgsIDB4N2IsIDB4NjgsIDB4NTEsIDB4NzUsIDB4ZDQsCisgMHgyNywgMHg2ZSwgMHgyNH0sIDE2LCB7U0laRV8zMkIsIFNJWkVfMzJCfSwKK3sweDZiLCAweGMxLCAweGJlLCAweGUyLCAweDJlLCAweDQwLCAweDlmLCAweDk2LCAweGU5LCAweDNkLCAweDdlLCAweDExLCAweDczLAorIDB4OTMsIDB4MTd9LCAxNSwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIERlY3J5cHQgLSBBRVMgQ1RSXG4iLCAxNSwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDJiLCAweDdlLCAweDE1LCAweDE2LCAweDI4LCAweGFlLCAweGQyLCAweGE2LCAweGFiLCAweGY3LCAweDE1LCAweDg4LCAweDA5LAorIDB4Y2YsIDB4NGYsIDB4M2N9LCBBRVNfMTZCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19DVFIsCit7MHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwKKyAweDJhLCAweDJhLCAweDJhfSwgMTYsCit7MHg4ZiwgMHg5NCwgMHgwOCwgMHhmZSwgMHg4MCwgMHhhOCwgMHgxZCwgMHgzZSwgMHg4MSwgMHgzZCwgMHhhMywgMHhjNywgMHhiMCwKKyAweGIyLCAweGJkLCAweDMyfSwgMTYsIHtTSVpFXzMyQiwgU0laRV8zMkJ9LAorezB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsIDB4ZTksIDB4M2QsIDB4N2UsIDB4MTEsIDB4NzMsCisgMHg5MywgMHgxNywgMHgyYX0sCisgMCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIERlY3J5cHQgLSBBRVMgQ1RSIChzaG9ydCBpbnB1dClcbiIsIDE2LCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksCisgMHhjZiwgMHg0ZiwgMHgzY30sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NUUiwKK3sweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLAorIDB4MmEsIDB4MmEsIDB4MmF9LCAxNiwKK3sweDhmLCAweDk0LCAweDA4LCAweGZlLCAweDgwLCAweGE4LCAweDFkLCAweDNlLCAweDgxLCAweDNkLCAweGEzLCAweGM3LCAweGIwLAorIDB4YjIsIDB4YmR9LCAxNSwge1NJWkVfMzJCLCBTSVpFXzMyQn0sCit7MHg2YiwgMHhjMSwgMHhiZSwgMHhlMiwgMHgyZSwgMHg0MCwgMHg5ZiwgMHg5NiwgMHhlOSwgMHgzZCwgMHg3ZSwgMHgxMSwgMHg3MywKKyAweDkzLCAweDE3fSwgMCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIERlY3J5cHQgLSBERVMgQ0JDIChub3BhZClcbiIsIDE3LCBQU0FfS0VZX1RZUEVfREVTLAorezB4MDEsIDB4MDIsIDB4MDQsIDB4MDcsIDB4MDgsIDB4MGIsIDB4MGQsIDB4MGV9LCBERVNfOEJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmF9LCA4LAorezB4NjQsIDB4ZjksIDB4MTcsIDB4YjAsIDB4MTUsIDB4MmYsIDB4OGYsIDB4MDV9LCA4LCB7U0laRV8zMkIsIFNJWkVfMzJCfSwKK3sweGVkLCAweGE0LCAweDAxLCAweDEyLCAweDM5LCAweGJjLCAweDNhLCAweGM5fSwgMCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIERlY3J5cHQgLSAyLWtleSAzREUgLUNCQyAobm9wYWQpXG4iLCAxOCwgUFNBX0tFWV9UWVBFX0RFUywKK3sweDAxLCAweDAyLCAweDA0LCAweDA3LCAweDA4LCAweDBiLCAweDBkLCAweDBlLCAweGMxLCAweGMyLCAweGM0LCAweGM3LCAweGM4LAorIDB4Y2IsIDB4Y2QsIDB4Y2V9LCBERVMzXzJLRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCit7MHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYX0sIDgsCit7MHg1ZCwgMHgwNiwgMHg1MiwgMHg0MiwgMHg5YywgMHg1YiwgMHgwYSwgMHhjN30sIDgsIHtTSVpFXzMyQiwgU0laRV8zMkJ9LAorezB4ZWQsIDB4YTQsIDB4MDEsIDB4MTIsIDB4MzksIDB4YmMsIDB4M2EsIDB4Yzl9LCAwLCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gMy1rZXkgM0RFIC1DQkMgKG5vcGFkKVxuIiwgMTksIFBTQV9LRVlfVFlQRV9ERVMsCit7MHgwMSwgMHgwMiwgMHgwNCwgMHgwNywgMHgwOCwgMHgwYiwgMHgwZCwgMHgwZSwgMHhjMSwgMHhjMiwgMHhjNCwgMHhjNywgMHhjOCwKKyAweGNiLCAweGNkLCAweGNlLCAweDMxLCAweDMyLCAweDM0LCAweDM3LCAweDM4LCAweDNiLCAweDNkLCAweDNlfSwgREVTM18zS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmF9LCA4LAorezB4ODEsIDB4N2MsIDB4YTcsIDB4ZDYsIDB4OWIsIDB4ODAsIDB4ZDgsIDB4NmF9LCA4LCB7U0laRV8zMkIsIFNJWkVfMzJCfSwKK3sweGVkLCAweGE0LCAweDAxLCAweDEyLCAweDM5LCAweGJjLCAweDNhLCAweGM5fSwgMCwgUFNBX1NVQ0NFU1MKK30sCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzcvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzcvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MzJhZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNy90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAzNy5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCAzNykKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBzeW1tZXRyaWMgY2lwaGVyIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NyeXB0b19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9jMDM3X2NyeXB0b19saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0ZSRUUpOworICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzOC9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzOC9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA0NDJkMgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM4L3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2MwMzguYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzgvdGVzdF9jMDM4LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzOC90ZXN0X2MwMzguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDRmNzJlCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzgvdGVzdF9jMDM4LmMKQEAgLTAsMCArMSwxNzcgQEAKKworLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAzOC5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorCitjbGllbnRfdGVzdF90IHRlc3RfYzAzOF9jcnlwdG9fbGlzdFtdID0geworICAgIE5VTEwsCisgICAgcHNhX2NpcGhlcl9hYm9ydF90ZXN0LAorICAgIHBzYV9jaXBoZXJfYWJvcnRfYmVmb3JlX3VwZGF0ZV90ZXN0LAorICAgIE5VTEwsCit9OworCitzdGF0aWMgaW50ICAgICAgICAgZ190ZXN0X2NvdW50ID0gMTsKK3N0YXRpYyB1aW50OF90ICAgICBvdXRwdXRbU0laRV8zMkJdOworCitpbnQzMl90IHBzYV9jaXBoZXJfYWJvcnRfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgaSwgc3RhdHVzOworICAgIHBzYV9rZXlfcG9saWN5X3QgICAgICAgIHBvbGljeTsKKyAgICBwc2FfY2lwaGVyX29wZXJhdGlvbl90ICBvcGVyYXRpb247CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2sxW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazFbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9sZW5ndGgsICZjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X3R5cGUsIGNoZWNrMVtpXS5rZXlfZGF0YSwgY2hlY2sxW2ldLmtleV9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICBpZiAoY2hlY2sxW2ldLnVzYWdlID09IFBTQV9LRVlfVVNBR0VfRU5DUllQVCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2V0IHRoZSBrZXkgZm9yIGEgbXVsdGlwYXJ0IHN5bW1ldHJpYyBlbmNyeXB0aW9uIG9wZXJhdGlvbiAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfRU5DUllQVF9TRVRVUCwgJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCBjaGVjazFbaV0ua2V5X2FsZyk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjaGVjazFbaV0udXNhZ2UgPT0gUFNBX0tFWV9VU0FHRV9ERUNSWVBUKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBTZXQgdGhlIGtleSBmb3IgYSBtdWx0aXBhcnQgc3ltbWV0cmljIGRlY3J5cHRpb24gb3BlcmF0aW9uICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9ERUNSWVBUX1NFVFVQLCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9oYW5kbGUsIGNoZWNrMVtpXS5rZXlfYWxnKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworICAgICAgICB9CisKKyAgICAgICAgLyogQWJvcnQgYSBjaXBoZXIgb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX0FCT1JULCAmb3BlcmF0aW9uKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisKKyAgICAgICAgLyogTXVsdGlwbGUgYWJvcnQgY2lwaGVyIG9wZXJhdGlvbiBzaG91bGQgcmV0dXJuIHN1Y2Nlc3MqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9BQk9SVCwgJm9wZXJhdGlvbik7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOworICAgIH0KKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3QgcHNhX2NpcGhlcl9hYm9ydF9iZWZvcmVfdXBkYXRlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgbGVuZ3RoOworICAgIHBzYV9rZXlfcG9saWN5X3QgICAgICAgIHBvbGljeTsKKyAgICBwc2FfYWxnb3JpdGhtX3QgICAgICAgICBrZXlfYWxnID0gUFNBX0FMR19DQkNfTk9fUEFERElORzsKKyAgICBwc2Ffa2V5X3VzYWdlX3QgICAgICAgICB1c2FnZSA9IFBTQV9LRVlfVVNBR0VfRU5DUllQVDsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlID0gMTM7CisgICAgcHNhX2tleV90eXBlX3QgICAgICAgICAga2V5X3R5cGUgPSBQU0FfS0VZX1RZUEVfQUVTOworICAgIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgIG9wZXJhdGlvbjsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBrZXlfZGF0YVtdID0gezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGY3LCAweDE1LCAweDg4LCAweDA5LCAweGNmLCAweDRmLCAweDNjfTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBpbnB1dFtdID0gezB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsIDB4ZTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNkLCAweDdlLCAweDExLCAweDczLCAweDkzLCAweDE3LCAweDJhfTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBpdltdID0gezB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhLCAweDJhfTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoID0gc2l6ZW9mKGtleV9kYXRhKS9zaXplb2Yoa2V5X2RhdGFbMF0pOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGlucHV0X2xlbmd0aCA9IHNpemVvZihpbnB1dCkvc2l6ZW9mKGlucHV0WzBdKTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBpdl9zaXplID0gc2l6ZW9mKGl2KS9zaXplb2YoaXZbMF0pOworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1czsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKKworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIlRlc3QgcHNhX2NpcGhlcl91cGRhdGUgYWZ0ZXIgcHNhX2NpcGhlcl9hYm9ydCBzaG91bGQgZmFpbFxuIiwgMCk7CisKKyAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICovCisgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgdXNhZ2UsIGtleV9hbGcpOworCisgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2xlbmd0aCwgJmtleV9oYW5kbGUpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGtleV9oYW5kbGUsICAmcG9saWN5KTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgIC8qIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgKi8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAga2V5X3R5cGUsIGtleV9kYXRhLCBrZXlfbGVuZ3RoKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgIC8qIFNldCB0aGUga2V5IGZvciBhIG11bHRpcGFydCBzeW1tZXRyaWMgZW5jcnlwdGlvbiBvcGVyYXRpb24gKi8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9FTkNSWVBUX1NFVFVQLCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgIGtleV9oYW5kbGUsIGtleV9hbGcpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgLyogU2V0IGFuIElWIGZvciBhIHN5bW1ldHJpYyBlbmNyeXB0aW9uIG9wZXJhdGlvbiAqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX1NFVF9JViwgJm9wZXJhdGlvbiwgaXYsIGl2X3NpemUpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworCisgICAgLyogQWJvcnQgYSBjaXBoZXIgb3BlcmF0aW9uICovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfQUJPUlQsICZvcGVyYXRpb24pOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworCisgICAgLyogRW5jcnlwdCBvciBkZWNyeXB0IGEgbWVzc2FnZSBmcmFnbWVudCBpbiBhbiBhY3RpdmUgY2lwaGVyIG9wZXJhdGlvbiAqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX1VQREFURSwgJm9wZXJhdGlvbiwgaW5wdXQsCisgICAgICAgICAgICAgICAgaW5wdXRfbGVuZ3RoLCBvdXRwdXQsIFNJWkVfMzJCLCAmbGVuZ3RoKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5ULCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzOC90ZXN0X2MwMzguaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM4L3Rlc3RfYzAzOC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNmU1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzOC90ZXN0X2MwMzguaApAQCAtMCwwICsxLDMxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9DMDM4X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9DMDM4X0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxjMDM4KQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMzhfY3J5cHRvX2xpc3RbXTsKKworaW50MzJfdCBwc2FfY2lwaGVyX2Fib3J0X3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOworaW50MzJfdCBwc2FfY2lwaGVyX2Fib3J0X2JlZm9yZV91cGRhdGVfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CisjZW5kaWYgLyogX1RFU1RfQzAzOF9DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM4L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzgvdGVzdF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1NWY2OAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM4L3Rlc3RfZGF0YS5oCkBAIC0wLDAgKzEsMTEzIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzMyXTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7CisgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2sxW10gPSB7Cit7IlRlc3QgcHNhX2NpcGhlcl9hYm9ydCAtIEVuY3J5cHQgLSBBRVMgQ0JDX05PX1BBRERJTkdcbiIsIDEsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwKKyAweGNmLCAweDRmLCAweDNjfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2Fib3J0IC0gRW5jcnlwdCAtIEFFUyBDQkNfUEtDUzdcbiIsIDIsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwKKyAweGNmLCAweDRmLCAweDNjfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX1BLQ1M3LAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9hYm9ydCAtIEVuY3J5cHQgLSBBRVMgQ1RSXG4iLCAzLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksCisgMHhjZiwgMHg0ZiwgMHgzY30sIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NUUiwKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfYWJvcnQgLSBFbmNyeXB0IC0gREVTIENCQyAobm9wYWQpXG4iLCA0LCBQU0FfS0VZX1RZUEVfREVTLAorezB4MDEsIDB4MDIsIDB4MDQsIDB4MDcsIDB4MDgsIDB4MGIsIDB4MGQsIDB4MGV9LCBERVNfOEJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9hYm9ydCAtIEVuY3J5cHQgLSAyLWtleSAzREUgLUNCQyAobm9wYWQpXG4iLCA1LCBQU0FfS0VZX1RZUEVfREVTLAorezB4MDEsIDB4MDIsIDB4MDQsIDB4MDcsIDB4MDgsIDB4MGIsIDB4MGQsIDB4MGUsIDB4YzEsIDB4YzIsIDB4YzQsIDB4YzcsIDB4YzgsCisgMHhjYiwgMHhjZCwgMHhjZX0sIERFUzNfMktFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19DQkNfTk9fUEFERElORywKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfYWJvcnQgLSBFbmNyeXB0IC0gMy1rZXkgM0RFIC1DQkMgKG5vcGFkKVxuIiwgNiwgUFNBX0tFWV9UWVBFX0RFUywKK3sweDAxLCAweDAyLCAweDA0LCAweDA3LCAweDA4LCAweDBiLCAweDBkLCAweDBlLCAweGMxLCAweGMyLCAweGM0LCAweGM3LCAweGM4LAorIDB4Y2IsIDB4Y2QsIDB4Y2UsIDB4MzEsIDB4MzIsIDB4MzQsIDB4MzcsIDB4MzgsIDB4M2IsIDB4M2QsIDB4M2V9LCBERVMzXzNLRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2Fib3J0IC0gRGVjcnlwdCAtIEFFUyBDQkNfTk9fUEFERElOR1xuIiwgNywgUFNBX0tFWV9UWVBFX0FFUywKK3sweDJiLCAweDdlLCAweDE1LCAweDE2LCAweDI4LCAweGFlLCAweGQyLCAweGE2LCAweGFiLCAweGY3LCAweDE1LCAweDg4LCAweDA5LAorIDB4Y2YsIDB4NGYsIDB4M2N9LCBBRVNfMTZCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19DQkNfTk9fUEFERElORywKKyBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9jaXBoZXJfYWJvcnQgLSBEZWNyeXB0IC0gQUVTIENCQ19QS0NTN1xuIiwgOCwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDJiLCAweDdlLCAweDE1LCAweDE2LCAweDI4LCAweGFlLCAweGQyLCAweGE2LCAweGFiLCAweGY3LCAweDE1LCAweDg4LCAweDA5LAorIDB4Y2YsIDB4NGYsIDB4M2N9LCBBRVNfMTZCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19DQkNfUEtDUzcsCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2Fib3J0IC0gRGVjcnlwdCAtIEFFUyBDVFJcbiIsIDksIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwKKyAweGNmLCAweDRmLCAweDNjfSwgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQ1RSLAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9hYm9ydCAtIERlY3J5cHQgLSBERVMgQ0JDIChub3BhZClcbiIsIDEwLCBQU0FfS0VZX1RZUEVfREVTLAorezB4MDEsIDB4MDIsIDB4MDQsIDB4MDcsIDB4MDgsIDB4MGIsIDB4MGQsIDB4MGV9LCBERVNfOEJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2NpcGhlcl9hYm9ydCAtIERlY3J5cHQgLSAyLWtleSAzREUgLUNCQyAobm9wYWQpXG4iLCAxMSwgUFNBX0tFWV9UWVBFX0RFUywKK3sweDAxLCAweDAyLCAweDA0LCAweDA3LCAweDA4LCAweDBiLCAweDBkLCAweDBlLCAweGMxLCAweGMyLCAweGM0LCAweGM3LCAweGM4LAorIDB4Y2IsIDB4Y2QsIDB4Y2V9LCBERVMzXzJLRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCisgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY2lwaGVyX2Fib3J0IC0gRGVjcnlwdCAtIDMta2V5IDNERSAtQ0JDIChub3BhZClcbiIsIDEyLCBQU0FfS0VZX1RZUEVfREVTLAorezB4MDEsIDB4MDIsIDB4MDQsIDB4MDcsIDB4MDgsIDB4MGIsIDB4MGQsIDB4MGUsIDB4YzEsIDB4YzIsIDB4YzQsIDB4YzcsIDB4YzgsCisgMHhjYiwgMHhjZCwgMHhjZSwgMHgzMSwgMHgzMiwgMHgzNCwgMHgzNywgMHgzOCwgMHgzYiwgMHgzZCwgMHgzZX0sIERFUzNfM0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19DQkNfTk9fUEFERElORywKKyBQU0FfU1VDQ0VTUworfSwKK307CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzOC90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzOC90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAyN2FkYQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM4L3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUzIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9jMDM4LmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfQ1JZUFRPX0JBU0UsIDM4KQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgY3J5cHRvIHN5bW1ldHJpYyBjaXBoZXIgQVBJc1xuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9ISUdIX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY3J5cHRvX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2MwMzhfY3J5cHRvX2xpc3QsIEZBTFNFKTsKKworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRlJFRSk7CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM5L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM5L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWY4NmM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzkvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfYzAzOS5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzOS90ZXN0X2MwMzkuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM5L3Rlc3RfYzAzOS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NmJlYzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzOS90ZXN0X2MwMzkuYwpAQCAtMCwwICsxLDI0MCBAQAorCisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9jMDM5LmgiCisjaW5jbHVkZSAidGVzdF9kYXRhLmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9jMDM5X2NyeXB0b19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBwc2FfYXN5bW1ldHJpY19lbmNyeXB0X3Rlc3QsCisgICAgcHNhX2FzeW1tZXRyaWNfZW5jcnlwdF9uZWdhdGl2ZV90ZXN0LAorICAgIE5VTEwsCit9OworCitzdGF0aWMgYm9vbF90IGlzX2J1ZmZlcl9lbXB0eSh1aW50OF90ICpidWZmZXIsIHNpemVfdCBzaXplKQoreworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChidWZmZXJbaV0gIT0gMCkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGludCAgICAgICAgIGdfdGVzdF9jb3VudCA9IDE7CitzdGF0aWMgdWludDhfdCAgICAgb3V0cHV0W1NJWkVfMTI4Ql07CisKK2ludDMyX3QgcHNhX2FzeW1tZXRyaWNfZW5jcnlwdF90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBpLCBzdGF0dXM7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgKmtleV9kYXRhLCAqc2FsdDsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBsZW5ndGg7CisgICAgcHNhX2tleV9wb2xpY3lfdCAgICAgICAgcG9saWN5OworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOworCisgICAgICAgIG1lbXNldChvdXRwdXQsIDAsIHNpemVvZihvdXRwdXQpKTsKKworICAgICAgICAvKiBTZXQgdGhlIGtleSBkYXRhIGJhc2VkIG9uIGtleSB0eXBlICovCisgICAgICAgIGlmIChQU0FfS0VZX1RZUEVfSVNfUlNBKGNoZWNrMVtpXS5rZXlfdHlwZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjaGVjazFbaV0ua2V5X3R5cGUgPT0gUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCA9PSBCWVRFU19UT19CSVRTKDM4NCkpCisgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzM4NF9rZXlwYWlyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMjU2KSkKKyAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMjU2X2tleXBhaXI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygxMjgpKQorICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IHJzYV8xMjhfa2V5cGFpcjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMzg0KSkKKyAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMzg0X2tleWRhdGE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygyNTYpKQorICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IHJzYV8yNTZfa2V5ZGF0YTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCA9PSBCWVRFU19UT19CSVRTKDEyOCkpCisgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzEyOF9rZXlkYXRhOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQU0FfS0VZX1RZUEVfSVNfRUNDKGNoZWNrMVtpXS5rZXlfdHlwZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChQU0FfS0VZX1RZUEVfSVNfRUNDX0tFWVBBSVIoY2hlY2sxW2ldLmtleV90eXBlKSkKKyAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IGVjX2tleXBhaXI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAga2V5X2RhdGEgPSBlY19rZXlkYXRhOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGtleV9kYXRhID0gY2hlY2sxW2ldLmtleV9kYXRhOworCisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgY2hlY2sxW2ldLmtleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfbGVuZ3RoLCAmY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAmcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X3R5cGUsIGtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIGlmIChpc19idWZmZXJfZW1wdHkoY2hlY2sxW2ldLnNhbHQsIGNoZWNrMVtpXS5zYWx0X2xlbmd0aCkgPT0gVFJVRSkKKyAgICAgICAgICAgIHNhbHQgPSBOVUxMOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzYWx0ID0gY2hlY2sxW2ldLnNhbHQ7CisKKyAgICAgICAgLyogRW5jcnlwdCBhIHNob3J0IG1lc3NhZ2Ugd2l0aCBhIHB1YmxpYyBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BU1lNTVRFUklDX0VOQ1JZUFQsIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZywgY2hlY2sxW2ldLmlucHV0LCBjaGVjazFbaV0uaW5wdXRfbGVuZ3RoLCBzYWx0LAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uc2FsdF9sZW5ndGgsIG91dHB1dCwgY2hlY2sxW2ldLm91dHB1dF9zaXplLCAmbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cyAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qIENoZWNrIGlmIHRoZSBvdXRwdXQgbGVuZ3RoIG1hdGNoZXMgd2l0aCB0aGUgZXhwZWN0ZWQgb3V0cHV0IGxlbmd0aCAqLworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChsZW5ndGgsIGNoZWNrMVtpXS5leHBlY3RlZF9vdXRwdXRfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgICAgICAvKiBXZSB0ZXN0IGVuY3J5cHRpb24gYnkgY2hlY2tpbmcgdGhhdCBlbmNyeXB0LXRoZW4tZGVjcnlwdCBnaXZlcyBiYWNrCisgICAgICAgICAqIHRoZSBvcmlnaW5hbCBwbGFpbnRleHQgYmVjYXVzZSBvZiB0aGUgbm9uLW9wdGlvbmFsIHJhbmRvbQorICAgICAgICAgKiBwYXJ0IG9mIGVuY3J5cHRpb24gcHJvY2VzcyB3aGljaCBwcmV2ZW50cyB1c2luZyBmaXhlZCB2ZWN0b3JzLiAqLworICAgICAgICBpZiAoKGNoZWNrMVtpXS51c2FnZSAmIFBTQV9LRVlfVVNBR0VfREVDUllQVCkgPT0gUFNBX0tFWV9VU0FHRV9ERUNSWVBUKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FTWU1NVEVSSUNfREVDUllQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCBjaGVjazFbaV0ua2V5X2FsZywgb3V0cHV0LCBsZW5ndGgsIHNhbHQsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uc2FsdF9sZW5ndGgsIG91dHB1dCwgY2hlY2sxW2ldLm91dHB1dF9zaXplLCAmbGVuZ3RoKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworCisgICAgICAgICAgICAvKiBDaGVjayBpZiB0aGUgb3V0cHV0IGxlbmd0aCBtYXRjaGVzIHdpdGggdGhlIGlucHV0IGxlbmd0aCAqLworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobGVuZ3RoLCBjaGVjazFbaV0uaW5wdXRfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKworICAgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIG91dHB1dCBtYXRjaGVzIHdpdGggdGhlIGdpdmVuIGlucHV0IGRhdGEgKi8KKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX01FTUNNUChvdXRwdXQsIGNoZWNrMVtpXS5pbnB1dCwgbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IHBzYV9hc3ltbWV0cmljX2VuY3J5cHRfbmVnYXRpdmVfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMikvc2l6ZW9mKGNoZWNrMlswXSk7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgaSwgc3RhdHVzOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICpzYWx0OworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKyAgICBwc2Ffa2V5X3BvbGljeV90ICAgICAgICBwb2xpY3k7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQgLSBJbnZhbGlkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2syW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQgLSBJbnZhbGlkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIEVuY3J5cHQgYSBzaG9ydCBtZXNzYWdlIHdpdGggYSBwdWJsaWMga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQVNZTU1URVJJQ19FTkNSWVBULCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcsIGNoZWNrMltpXS5pbnB1dCwgY2hlY2syW2ldLmlucHV0X2xlbmd0aCwgc2FsdCwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLnNhbHRfbGVuZ3RoLCBvdXRwdXQsIGNoZWNrMltpXS5vdXRwdXRfc2l6ZSwgJmxlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2FzeW1tZXRyaWNfZW5jcnlwdCAtIFplcm8gYXMga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogRW5jcnlwdCBhIHNob3J0IG1lc3NhZ2Ugd2l0aCBhIHB1YmxpYyBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BU1lNTVRFUklDX0VOQ1JZUFQsIDAsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnLCBjaGVjazJbaV0uaW5wdXQsIGNoZWNrMltpXS5pbnB1dF9sZW5ndGgsIHNhbHQsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5zYWx0X2xlbmd0aCwgb3V0cHV0LCBjaGVjazJbaV0ub3V0cHV0X3NpemUsICZsZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQgLSBFbXB0eSBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMltpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMltpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgIGlmIChpc19idWZmZXJfZW1wdHkoY2hlY2sxW2ldLnNhbHQsIGNoZWNrMVtpXS5zYWx0X2xlbmd0aCkgPT0gVFJVRSkKKyAgICAgICAgICAgIHNhbHQgPSBOVUxMOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzYWx0ID0gY2hlY2sxW2ldLnNhbHQ7CisKKyAgICAgICAgLyogRW5jcnlwdCBhIHNob3J0IG1lc3NhZ2Ugd2l0aCBhIHB1YmxpYyBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BU1lNTVRFUklDX0VOQ1JZUFQsIGNoZWNrMltpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2FsZywgY2hlY2syW2ldLmlucHV0LCBjaGVjazJbaV0uaW5wdXRfbGVuZ3RoLCBzYWx0LAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0uc2FsdF9sZW5ndGgsIG91dHB1dCwgY2hlY2syW2ldLm91dHB1dF9zaXplLCAmbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRU1QVFlfU0xPVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzkvdGVzdF9jMDM5LmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzOS90ZXN0X2MwMzkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2Q3NDk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzkvdGVzdF9jMDM5LmgKQEAgLTAsMCArMSwzMSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfQzAzOV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfQzAzOV9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzAzOSkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9jMDM5X2NyeXB0b19saXN0W107CisKK2ludDMyX3QgcHNhX2FzeW1tZXRyaWNfZW5jcnlwdF90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKK2ludDMyX3QgcHNhX2FzeW1tZXRyaWNfZW5jcnlwdF9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKKyNlbmRpZiAvKiBfVEVTVF9DMDM5X0NMSUVOVF9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzkvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzOS90ZXN0X2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2E4NmJiCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzkvdGVzdF9kYXRhLmgKQEAgLTAsMCArMSwyMzIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbNzVdOworICAgIHBzYV9rZXlfaGFuZGxlX3QgICAgICAgIGtleV9oYW5kbGU7CisgICAgcHNhX2tleV90eXBlX3QgICAgICAgICAga2V5X3R5cGU7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAga2V5X2RhdGFbMTZdOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGtleV9sZW5ndGg7CisgICAgcHNhX2tleV91c2FnZV90ICAgICAgICAgdXNhZ2U7CisgICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAga2V5X2FsZzsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBzYWx0WzE2XTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBzYWx0X2xlbmd0aDsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBpbnB1dFszMl07CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgaW5wdXRfbGVuZ3RoOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIG91dHB1dF9zaXplOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dHB1dF9sZW5ndGg7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYml0X2xlbmd0aDsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXM7Cit9IHRlc3RfZGF0YTsKKworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlwYWlyWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlkYXRhWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzI1Nl9rZXlwYWlyWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzI1Nl9rZXlkYXRhWzFdOworCitzdGF0aWMgdWludDhfdCBlY19rZXlkYXRhW10gPSB7CisgMHgzMCwgMHg0OSwgMHgzMCwgMHgxMywgMHgwNiwgMHgwNywgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwMiwgMHgwMSwgMHgwNiwKKyAweDA4LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAzLCAweDAxLCAweDAxLCAweDAzLCAweDMyLCAweDAwLCAweDA0LCAweEJDLAorIDB4NzksIDB4N0QsIDB4QjMsIDB4QUUsIDB4N0YsIDB4MDgsIDB4RUMsIDB4M0QsIDB4NDksIDB4NkIsIDB4NEYsIDB4QjQsIDB4MTEsIDB4QjMsCisgMHhGNiwgMHgyMCwgMHhBNSwgMHg1OCwgMHhBNSwgMHgwMSwgMHhFMCwgMHgyMiwgMHgyRCwgMHgwOCwgMHhDRiwgMHhFMCwgMHhEQywgMHg4QSwKKyAweEVDLCAweDhCLCAweDFBLCAweDdCLCAweEYyLCAweDRCLCAweEU5LCAweDI5LCAweDUxLCAweENDLCAweDVCLCAweEExLCAweEJFLCAweEJCLAorIDB4MjQsIDB4NzQsIDB4OTAsIDB4OUEsIDB4RTB9OworCitzdGF0aWMgdWludDhfdCBlY19rZXlwYWlyW10gPSB7CisgMHgzMCwgMHg1RiwgMHgwMiwgMHgwMSwgMHgwMSwgMHgwNCwgMHgxOCwgMHgzMywgMHg4RSwgMHg4NiwgMHhBOCwgMHg4MSwgMHhFMiwgMHgzOCwKKyAweEY1LCAweDQ5LCAweEJELCAweDZGLCAweDA1LCAweDUzLCAweDQ5LCAweDRCLCAweDczLCAweEUzLCAweEQ2LCAweDExLCAweDMwLCAweEZELAorIDB4QzYsIDB4QzksIDB4NkQsIDB4QTAsIDB4MEEsIDB4MDYsIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDMsIDB4MDEsCisgMHgwMSwgMHhBMSwgMHgzNCwgMHgwMywgMHgzMiwgMHgwMCwgMHgwNCwgMHg1MSwgMHg3NSwgMHhCQywgMHhERiwgMHgzMCwgMHhBMywgMHg3MCwKKyAweEYzLCAweDlELCAweDUzLCAweDkzLCAweEU2LCAweDEyLCAweDcyLCAweDg4LCAweEQ4LCAweDAxLCAweDY3LCAweEI1LCAweEY0LCAweEI0LAorIDB4QjcsIDB4NzYsIDB4QzYsIDB4NzQsIDB4RjcsIDB4QzYsIDB4RjMsIDB4NTQsIDB4QjcsIDB4RDIsIDB4MjQsIDB4MDYsIDB4MkMsIDB4MUYsCisgMHg2OCwgMHg1NCwgMHhCNSwgMHhBNywgMHhBRiwgMHgwRiwgMHhFNSwgMHg3OCwgMHhFQSwgMHhGMiwgMHg1OCwgMHhGMCwgMHgyN307CisKK3N0YXRpYyB1aW50OF90IHJzYV8xMjhfa2V5ZGF0YVtdID0geworIDB4MzAsIDB4ODEsIDB4OWYsIDB4MzAsIDB4MGQsIDB4MDYsIDB4MDksIDB4MmEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4ZjcsIDB4MGQsCisgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNSwgMHgwMCwgMHgwMywgMHg4MSwgMHg4ZCwgMHgwMCwgMHgzMCwgMHg4MSwgMHg4OSwgMHgwMiwKKyAweDgxLCAweDgxLCAweDAwLCAweGFmLCAweDA1LCAweDdkLCAweDM5LCAweDZlLCAweGU4LCAweDRmLCAweGI3LCAweDVmLCAweGRiLAorIDB4YjUsIDB4YzIsIDB4YjEsIDB4M2MsIDB4N2YsIDB4ZTUsIDB4YTYsIDB4NTQsIDB4YWEsIDB4OGEsIDB4YTIsIDB4NDcsIDB4MGIsCisgMHg1NCwgMHgxZSwgMHhlMSwgMHhmZSwgMHhiMCwgMHhiMSwgMHgyZCwgMHgyNSwgMHhjNywgMHg5NywgMHgxMSwgMHg1MywgMHgxMiwKKyAweDQ5LCAweGUxLCAweDEyLCAweDk2LCAweDI4LCAweDA0LCAweDJkLCAweGJiLCAweGI2LCAweGMxLCAweDIwLCAweGQxLCAweDQ0LAorIDB4MzUsIDB4MjQsIDB4ZWYsIDB4NGMsIDB4MGUsIDB4NmUsIDB4MWQsIDB4ODksIDB4NTYsIDB4ZWUsIDB4YjIsIDB4MDcsIDB4N2EsCisgMHhmMSwgMHgyMywgMHg0OSwgMHhkZCwgMHhlZSwgMHhlNSwgMHg0NCwgMHg4MywgMHhiYywgMHgwNiwgMHhjMiwgMHhjNiwgMHgxOSwKKyAweDQ4LCAweGNkLCAweDAyLCAweGIyLCAweDAyLCAweGU3LCAweDk2LCAweGFlLCAweGJkLCAweDk0LCAweGQzLCAweGE3LCAweGNiLAorIDB4ZjgsIDB4NTksIDB4YzIsIDB4YzEsIDB4ODEsIDB4OWMsIDB4MzIsIDB4NGMsIDB4YjgsIDB4MmIsIDB4OWMsIDB4ZDMsIDB4NGUsCisgMHhkZSwgMHgyNiwgMHgzYSwgMHgyYSwgMHhiZiwgMHhmZSwgMHg0NywgMHgzMywgMHhmMCwgMHg3NywgMHg4NiwgMHg5ZSwgMHg4NiwKKyAweDYwLCAweGY3LCAweGQ2LCAweDgzLCAweDRkLCAweGE1LCAweDNkLCAweDY5LCAweDBlLCAweGY3LCAweDk4LCAweDVmLCAweDZiLAorIDB4YzMsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDF9OworCitzdGF0aWMgdWludDhfdCByc2FfMTI4X2tleXBhaXJbXSA9IHsKKzB4MzAsIDB4ODIsIDB4MDIsIDB4NWUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODEsIDB4ODEsIDB4MDAsIDB4YWYsIDB4MDUsCisweDdkLCAweDM5LCAweDZlLCAweGU4LCAweDRmLCAweGI3LCAweDVmLCAweGRiLCAweGI1LCAweGMyLCAweGIxLCAweDNjLCAweDdmLAorMHhlNSwgMHhhNiwgMHg1NCwgMHhhYSwgMHg4YSwgMHhhMiwgMHg0NywgMHgwYiwgMHg1NCwgMHgxZSwgMHhlMSwgMHhmZSwgMHhiMCwKKzB4YjEsIDB4MmQsIDB4MjUsIDB4YzcsIDB4OTcsIDB4MTEsIDB4NTMsIDB4MTIsIDB4NDksIDB4ZTEsIDB4MTIsIDB4OTYsIDB4MjgsCisweDA0LCAweDJkLCAweGJiLCAweGI2LCAweGMxLCAweDIwLCAweGQxLCAweDQ0LCAweDM1LCAweDI0LCAweGVmLCAweDRjLCAweDBlLAorMHg2ZSwgMHgxZCwgMHg4OSwgMHg1NiwgMHhlZSwgMHhiMiwgMHgwNywgMHg3YSwgMHhmMSwgMHgyMywgMHg0OSwgMHhkZCwgMHhlZSwKKzB4ZTUsIDB4NDQsIDB4ODMsIDB4YmMsIDB4MDYsIDB4YzIsIDB4YzYsIDB4MTksIDB4NDgsIDB4Y2QsIDB4MDIsIDB4YjIsIDB4MDIsCisweGU3LCAweDk2LCAweGFlLCAweGJkLCAweDk0LCAweGQzLCAweGE3LCAweGNiLCAweGY4LCAweDU5LCAweGMyLCAweGMxLCAweDgxLAorMHg5YywgMHgzMiwgMHg0YywgMHhiOCwgMHgyYiwgMHg5YywgMHhkMywgMHg0ZSwgMHhkZSwgMHgyNiwgMHgzYSwgMHgyYSwgMHhiZiwKKzB4ZmUsIDB4NDcsIDB4MzMsIDB4ZjAsIDB4NzcsIDB4ODYsIDB4OWUsIDB4ODYsIDB4NjAsIDB4ZjcsIDB4ZDYsIDB4ODMsIDB4NGQsCisweGE1LCAweDNkLCAweDY5LCAweDBlLCAweGY3LCAweDk4LCAweDVmLCAweDZiLCAweGMzLCAweDAyLCAweDAzLCAweDAxLCAweDAwLAorMHgwMSwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHg4NywgMHg0YiwgMHhmMCwgMHhmZiwgMHhjMiwgMHhmMiwgMHhhNywgMHgxZCwKKzB4MTQsIDB4NjcsIDB4MWQsIDB4ZGQsIDB4MDEsIDB4NzEsIDB4YzksIDB4NTQsIDB4ZDcsIDB4ZmQsIDB4YmYsIDB4NTAsIDB4MjgsCisweDFlLCAweDRmLCAweDZkLCAweDk5LCAweGVhLCAweDBlLCAweDFlLCAweGJjLCAweGY4LCAweDJmLCAweGFhLCAweDU4LCAweGU3LAorMHhiNSwgMHg5NSwgMHhmZiwgMHhiMiwgMHg5MywgMHhkMSwgMHhhYiwgMHhlMSwgMHg3ZiwgMHgxMSwgMHgwYiwgMHgzNywgMHhjNCwKKzB4OGMsIDB4YzAsIDB4ZjMsIDB4NmMsIDB4MzcsIDB4ZTgsIDB4NGQsIDB4ODcsIDB4NjYsIDB4MjEsIDB4ZDMsIDB4MjcsIDB4ZjYsCisweDRiLCAweGJlLCAweDA4LCAweDQ1LCAweDdkLCAweDNlLCAweGM0LCAweDA5LCAweDhiLCAweGEyLCAweGZhLCAweDBhLCAweDMxLAorMHg5ZiwgMHhiYSwgMHg0MSwgMHgxYywgMHgyOCwgMHg0MSwgMHhlZCwgMHg3YiwgMHhlOCwgMHgzMSwgMHg5NiwgMHhhOCwgMHhjZCwKKzB4ZjksIDB4ZGEsIDB4YTUsIDB4ZDAsIDB4MDYsIDB4OTQsIDB4YmMsIDB4MzMsIDB4NWYsIDB4YzQsIDB4YzMsIDB4MjIsIDB4MTcsCisweGZlLCAweDA0LCAweDg4LCAweGJjLCAweGU5LCAweGNiLCAweDcyLCAweDAyLCAweGU1LCAweDk0LCAweDY4LCAweGIxLCAweGVhLAorMHhkMSwgMHgxOSwgMHgwMCwgMHgwNCwgMHg3NywgMHhkYiwgMHgyYywgMHhhNywgMHg5NywgMHhmYSwgMHhjMSwgMHg5ZSwgMHhkYSwKKzB4M2YsIDB4NTgsIDB4YzEsIDB4MDIsIDB4NDEsIDB4MDAsIDB4ZTIsIDB4YWIsIDB4NzYsIDB4MDgsIDB4NDEsIDB4YmIsIDB4OWQsCisweDMwLCAweGE4LCAweDFkLCAweDIyLCAweDJkLCAweGUxLCAweGViLCAweDczLCAweDgxLCAweGQ4LCAweDIyLCAweDE0LCAweDQwLAorMHg3ZiwgMHgxYiwgMHg5NywgMHg1YywgMHhiYiwgMHhmZSwgMHg0ZSwgMHgxYSwgMHg5NCwgMHg2NywgMHhmZCwgMHg5OCwgMHhhZCwKKzB4YmQsIDB4NzgsIDB4ZjYsIDB4MDcsIDB4ODMsIDB4NmMsIDB4YTUsIDB4YmUsIDB4MTksIDB4MjgsIDB4YjksIDB4ZDEsIDB4NjAsCisweGQ5LCAweDdmLCAweGQ0LCAweDVjLCAweDEyLCAweGQ2LCAweGI1LCAweDJlLCAweDJjLCAweDk4LCAweDcxLCAweGExLCAweDc0LAorMHhjNiwgMHg2YiwgMHg0OCwgMHg4MSwgMHgxMywgMHgwMiwgMHg0MSwgMHgwMCwgMHhjNSwgMHhhYiwgMHgyNywgMHg2MCwgMHgyMSwKKzB4NTksIDB4YWUsIDB4N2QsIDB4NmYsIDB4MjAsIDB4YzMsIDB4YzIsIDB4ZWUsIDB4ODUsIDB4MWUsIDB4NDYsIDB4ZGMsIDB4MTEsCisweDJlLCAweDY4LCAweDllLCAweDI4LCAweGQ1LCAweGZjLCAweGJiLCAweGY5LCAweDkwLCAweGE5LCAweDllLCAweGY4LCAweGE5LAorMHgwYiwgMHg4YiwgMHhiNCwgMHg0ZiwgMHhkMywgMHg2NCwgMHg2NywgMHhlNywgMHhmYywgMHgxNywgMHg4OSwgMHhjZSwgMHhiNiwKKzB4NjMsIDB4YWIsIDB4ZGEsIDB4MzMsIDB4ODYsIDB4NTIsIDB4YzMsIDB4YzcsIDB4M2YsIDB4MTEsIDB4MTcsIDB4NzQsIDB4OTAsCisweDJlLCAweDg0LCAweDA1LCAweDY1LCAweDkyLCAweDcwLCAweDkxLCAweDAyLCAweDQxLCAweDAwLCAweGI2LCAweGNkLCAweGJkLAorMHgzNSwgMHg0ZiwgMHg3ZCwgMHhmNSwgMHg3OSwgMHhhNiwgMHgzYiwgMHg0OCwgMHhiMywgMHg2NCwgMHgzZSwgMHgzNSwgMHgzYiwKKzB4ODQsIDB4ODksIDB4ODcsIDB4NzcsIDB4YjQsIDB4OGIsIDB4MTUsIDB4ZjksIDB4NGUsIDB4MGIsIDB4ZmMsIDB4MDUsIDB4NjcsCisweGE2LCAweGFlLCAweDU5LCAweDExLCAweGQ1LCAweDdhLCAweGQ2LCAweDQwLCAweDljLCAweGY3LCAweDY0LCAweDdiLCAweGY5LAorMHg2MiwgMHg2NCwgMHhlOSwgMHhiZCwgMHg4NywgMHhlYiwgMHg5NSwgMHhlMiwgMHg2MywgMHhiNywgMHgxMSwgMHgwYiwgMHg5YSwKKzB4MWYsIDB4OWYsIDB4OTQsIDB4YWMsIDB4Y2UsIDB4ZDAsIDB4ZmEsIDB4ZmEsIDB4NGQsIDB4MDIsIDB4NDAsIDB4NzEsIDB4MTksCisweDVlLCAweGVjLCAweDM3LCAweGU4LCAweGQyLCAweDU3LCAweGRlLCAweGNmLCAweGM2LCAweDcyLCAweGIwLCAweDdhLCAweGU2LAorMHgzOSwgMHhmMSwgMHgwYywgMHhiYiwgMHg5YiwgMHgwYywgMHg3MywgMHg5ZCwgMHgwYywgMHg4MCwgMHg5OSwgMHg2OCwgMHhkNiwKKzB4NDQsIDB4YTksIDB4NGUsIDB4M2YsIDB4ZDYsIDB4ZWQsIDB4OTIsIDB4ODcsIDB4MDcsIDB4N2EsIDB4MTQsIDB4NTgsIDB4M2YsCisweDM3LCAweDkwLCAweDU4LCAweGY3LCAweDZhLCAweDhhLCAweGVjLCAweGQ0LCAweDNjLCAweDYyLCAweGRjLCAweDhjLCAweDBmLAorMHg0MSwgMHg3NiwgMHg2NiwgMHg1MCwgMHhkNywgMHgyNSwgMHgyNywgMHg1YSwgMHhjNCwgMHhhMSwgMHgwMiwgMHg0MSwgMHgwMCwKKzB4YmIsIDB4MzIsIDB4ZDEsIDB4MzMsIDB4ZWQsIDB4YzIsIDB4ZTAsIDB4NDgsIDB4ZDQsIDB4NjMsIDB4MzgsIDB4OGIsIDB4N2IsCisweGU5LCAweGNiLCAweDRiLCAweGUyLCAweDlmLCAweDRiLCAweDYyLCAweDUwLCAweGJlLCAweDYwLCAweDNlLCAweDcwLCAweGUzLAorMHg2NCwgMHg3NSwgMHgwMSwgMHhjOSwgMHg3ZCwgMHhkZCwgMHhlMiwgMHgwYSwgMHg0ZSwgMHg3MSwgMHhiZSwgMHg5NSwgMHhmZCwKKzB4NWUsIDB4NzEsIDB4NzgsIDB4NGUsIDB4MjUsIDB4YWMsIDB4YTQsIDB4YmEsIDB4ZjIsIDB4NWIsIDB4ZTUsIDB4NzMsIDB4OGEsCisweGFlLCAweDU5LCAweGJiLCAweGZlLCAweDFjLCAweDk5LCAweDc3LCAweDgxLCAweDQ0LCAweDdhLCAweDJiLCAweDI0fTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3siVGVzdCBwc2FfYXN5bW1ldHJpY19lbmNyeXB0IC0gUlNBIFBLQ1MxVjE1XG4iLCAxLCBQU0FfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVksCit7MH0sIDE2MiwgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9DUllQVCwKK3swfSwgMCwKK3sweGJhLCAweDc4LCAweDE2LCAweGJmLCAweDhmLCAweDAxLCAweGNmLCAweGVhLCAweDQxLCAweDQxLCAweDQwLCAweGRlLCAweDVkLAorIDB4YWUsIDB4MjIsIDB4MjMsIDB4YjAsIDB4MDMsIDB4NjEsIDB4YTMsIDB4OTYsIDB4MTcsIDB4N2EsIDB4OWMsIDB4YjQsIDB4MTAsCisgMHhmZiwgMHg2MSwgMHhmMiwgMHgwMCwgMHgxNSwgMHhhZH0sIDIyLCAxMjgsCisgMTI4LCAxMDI0LCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQgLSBSU0EgT0FFUCBTSEEyNTZcbiIsIDIsIFBTQV9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSwKK3swfSwgMTYyLCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfUlNBX09BRVAoUFNBX0FMR19TSEFfMjU2KSwKK3swfSwgMCwKK3sweGJhLCAweDc4LCAweDE2LCAweGJmLCAweDhmLCAweDAxLCAweGNmLCAweGVhLCAweDQxLCAweDQxLCAweDQwLCAweGRlLCAweDVkLAorIDB4YWUsIDB4MjIsIDB4MjMsIDB4YjAsIDB4MDMsIDB4NjEsIDB4YTMsIDB4OTYsIDB4MTcsIDB4N2EsIDB4OWMsIDB4YjQsIDB4MTAsCisgMHhmZiwgMHg2MSwgMHhmMiwgMHgwMCwgMHgxNSwgMHhhZH0sIDIyLCAxMjgsCisgMTI4LCAxMDI0LCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQgLSBSU0EgT0FFUCBTSEEyNTYgd2l0aCBsYWJlbFxuIiwgMywgUFNBX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZLAorezB9LCAxNjIsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19SU0FfT0FFUChQU0FfQUxHX1NIQV8yNTYpLAorezB4NzQsIDB4NjgsIDB4NjksIDB4NzMsIDB4MDAsIDB4NjksIDB4NzMsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmMsIDB4NjEsIDB4NjIsCisgMHg2NSwgMHg2YywgMHgwMH0sIDE2LAorezB4YmEsIDB4NzgsIDB4MTYsIDB4YmYsIDB4OGYsIDB4MDEsIDB4Y2YsIDB4ZWEsIDB4NDEsIDB4NDEsIDB4NDAsIDB4ZGUsIDB4NWQsCisgMHhhZSwgMHgyMiwgMHgyMywgMHhiMCwgMHgwMywgMHg2MSwgMHhhMywgMHg5NiwgMHgxNywgMHg3YSwgMHg5YywgMHhiNCwgMHgxMCwKKyAweGZmLCAweDYxLCAweGYyLCAweDAwLCAweDE1LCAweGFkfSwgMjIsIDEyOCwKKyAxMjgsIDEwMjQsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2FzeW1tZXRyaWNfZW5jcnlwdCAtIFJTQSBLRVlQQUlSIFBLQ1MxVjE1XG4iLCA0LCBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIsCit7MH0sIDYxMCwgUFNBX0tFWV9VU0FHRV9FTkNSWVBUIHwgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9DUllQVCwKK3swfSwgMCwKK3sweGJhLCAweDc4LCAweDE2LCAweGJmLCAweDhmLCAweDAxLCAweGNmLCAweGVhLCAweDQxLCAweDQxLCAweDQwLCAweGRlLCAweDVkLAorIDB4YWUsIDB4MjIsIDB4MjMsIDB4YjAsIDB4MDMsIDB4NjEsIDB4YTMsIDB4OTYsIDB4MTcsIDB4N2EsIDB4OWMsIDB4YjQsIDB4MTAsCisgMHhmZiwgMHg2MSwgMHhmMiwgMHgwMCwgMHgxNSwgMHhhZH0sIDIyLCAxMjgsCisgMTI4LCAxMDI0LCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQgLSBTbWFsbCBvdXRwdXQgYnVmZmVyXG4iLCA1LCBQU0FfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVksCit7MH0sIDE2MiwgUFNBX0tFWV9VU0FHRV9FTkNSWVBUIHwgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9DUllQVCwKK3swfSwgMCwKK3sweGJhLCAweDc4LCAweDE2LCAweGJmLCAweDhmLCAweDAxLCAweGNmLCAweGVhLCAweDQxLCAweDQxLCAweDQwLCAweGRlLCAweDVkLAorIDB4YWUsIDB4MjIsIDB4MjMsIDB4YjAsIDB4MDMsIDB4NjEsIDB4YTMsIDB4OTYsIDB4MTcsIDB4N2EsIDB4OWMsIDB4YjQsIDB4MTAsCisgMHhmZiwgMHg2MSwgMHhmMiwgMHgwMCwgMHgxNSwgMHhhZH0sIDIyLCAxMTAsCisgMTI4LCAxMDI0LCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKKworeyJUZXN0IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQgLSBJbnZhbGlkIGFsZ29yaXRobVxuIiwgNiwgUFNBX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZLAorezB9LCAxNjIsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19TSEFfMjU2LAorezB9LCAwLAorezB4YmEsIDB4NzgsIDB4MTYsIDB4YmYsIDB4OGYsIDB4MDEsIDB4Y2YsIDB4ZWEsIDB4NDEsIDB4NDEsIDB4NDAsIDB4ZGUsIDB4NWQsCisgMHhhZSwgMHgyMiwgMHgyMywgMHhiMCwgMHgwMywgMHg2MSwgMHhhMywgMHg5NiwgMHgxNywgMHg3YSwgMHg5YywgMHhiNCwgMHgxMCwKKyAweGZmLCAweDYxLCAweGYyLCAweDAwLCAweDE1LCAweGFkfSwgMjIsIDEyOCwKKyAxMjgsIDEwMjQsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorCit7IlRlc3QgcHNhX2FzeW1tZXRyaWNfZW5jcnlwdCAtIEludmFsaWQga2V5IHR5cGVcbiIsIDcsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHgzMCwgMHg4MiwgMHgwMiwgMHg1ZSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhhZiwgMHgwNSwKKyAweDdkLCAweDM5LCAweDZlfSwgMTYsCisgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9DUllQVCwKK3swfSwgMCwKK3sweGJhLCAweDc4LCAweDE2LCAweGJmLCAweDhmLCAweDAxLCAweGNmLCAweGVhLCAweDQxLCAweDQxLCAweDQwLCAweGRlLCAweDVkLAorIDB4YWUsIDB4MjIsIDB4MjMsIDB4YjAsIDB4MDMsIDB4NjEsIDB4YTMsIDB4OTYsIDB4MTcsIDB4N2EsIDB4OWMsIDB4YjQsIDB4MTAsCisgMHhmZiwgMHg2MSwgMHhmMiwgMHgwMCwgMHgxNSwgMHhhZH0sIDIyLCAxMjgsCisgMCwgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCisKK3siVGVzdCBwc2FfYXN5bW1ldHJpY19lbmNyeXB0IC0gSW52YWxpZCB1c2FnZVxuIiwgOCwgUFNBX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZLAorezB9LCAxNjIsIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQsCit7MH0sIDAsCit7MHhiYSwgMHg3OCwgMHgxNiwgMHhiZiwgMHg4ZiwgMHgwMSwgMHhjZiwgMHhlYSwgMHg0MSwgMHg0MSwgMHg0MCwgMHhkZSwgMHg1ZCwKKyAweGFlLCAweDIyLCAweDIzLCAweGIwLCAweDAzLCAweDYxLCAweGEzLCAweDk2LCAweDE3LCAweDdhLCAweDljLCAweGI0LCAweDEwLAorIDB4ZmYsIDB4NjEsIDB4ZjIsIDB4MDAsIDB4MTUsIDB4YWR9LCAyMiwgMTI4LAorIDEyOCwgMTAyNCwgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQKK30sCisKKyNpZmRlZiBGVVRVUkVfU1VQUE9SVAoreyJUZXN0IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQgLSBFQ0MgcHVibGljIGtleVxuIiwgOSwKKyBQU0FfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVlfQkFTRSB8IFBTQV9FQ0NfQ1VSVkVfU0VDUDE5MlIxLAorezB9LCA3NSwgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0VDRFNBX0FOWSwKK3swfSwgMCwKK3sweGJhLCAweDc4LCAweDE2LCAweGJmLCAweDhmLCAweDAxLCAweGNmLCAweGVhLCAweDQxLCAweDQxLCAweDQwLCAweGRlLCAweDVkLAorIDB4YWUsIDB4MjIsIDB4MjMsIDB4YjAsIDB4MDMsIDB4NjEsIDB4YTMsIDB4OTYsIDB4MTcsIDB4N2EsIDB4OWMsIDB4YjQsIDB4MTAsCisgMHhmZiwgMHg2MSwgMHhmMiwgMHgwMCwgMHgxNSwgMHhhZH0sIDIyLCAxMjgsCisgMCwgMTkyLCBQU0FfU1VDQ0VTUworfQorCit7IlRlc3QgcHNhX2FzeW1tZXRyaWNfZW5jcnlwdCAtIEVDQyBrZXlwYWlyXG4iLCAxMCwKKyBQU0FfS0VZX1RZUEVfRUNDX0tFWVBBSVIoUFNBX0VDQ19DVVJWRV9TRUNQMjU2UjEpLAorezB9LCA5NywgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EoUFNBX0FMR19TSEFfMjU2KSwKK3swfSwgMCwKK3sweGJhLCAweDc4LCAweDE2LCAweGJmLCAweDhmLCAweDAxLCAweGNmLCAweGVhLCAweDQxLCAweDQxLCAweDQwLCAweGRlLCAweDVkLAorIDB4YWUsIDB4MjIsIDB4MjMsIDB4YjAsIDB4MDMsIDB4NjEsIDB4YTMsIDB4OTYsIDB4MTcsIDB4N2EsIDB4OWMsIDB4YjQsIDB4MTAsCisgMHhmZiwgMHg2MSwgMHhmMiwgMHgwMCwgMHgxNSwgMHhhZH0sIDIyLCAxMjgsCisgMCwgMTkyLCBQU0FfU1VDQ0VTUworfQorI2VuZGlmCit9OworCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMltdID0geworeyJUZXN0IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQgLSBOZWdhdGl2ZSBjYXNlXG4iLCAxMSwgUFNBX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZLAorezB9LCAxNjIsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQsCit7MH0sIDAsCit7MHhiYSwgMHg3OCwgMHgxNiwgMHhiZiwgMHg4ZiwgMHgwMSwgMHhjZiwgMHhlYSwgMHg0MSwgMHg0MSwgMHg0MCwgMHhkZSwgMHg1ZCwKKyAweGFlLCAweDIyLCAweDIzLCAweGIwLCAweDAzLCAweDYxLCAweGEzLCAweDk2LCAweDE3LCAweDdhLCAweDljLCAweGI0LCAweDEwLAorIDB4ZmYsIDB4NjEsIDB4ZjIsIDB4MDAsIDB4MTUsIDB4YWR9LCAyMiwgMTI4LAorIDEyOCwgMTAyNCwgUFNBX1NVQ0NFU1MKK30sCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzkvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzkvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyM2YxNzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzOS90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzAzOS5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCAzOSkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBhc3ltbWV0cmljIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NyeXB0b19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9jMDM5X2NyeXB0b19saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0ZSRUUpOworICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0MC9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0MC9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRlYWZmZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQwL3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2MwNDAuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDAvdGVzdF9jMDQwLmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0MC90ZXN0X2MwNDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGY2MzMyCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDAvdGVzdF9jMDQwLmMKQEAgLTAsMCArMSwyMjcgQEAKKworLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzA0MC5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorCitjbGllbnRfdGVzdF90IHRlc3RfYzA0MF9jcnlwdG9fbGlzdFtdID0geworICAgIE5VTEwsCisgICAgcHNhX2FzeW1tZXRyaWNfZGVjcnlwdF90ZXN0LAorICAgIHBzYV9hc3ltbWV0cmljX2RlY3J5cHRfbmVnYXRpdmVfdGVzdCwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGJvb2xfdCBpc19idWZmZXJfZW1wdHkodWludDhfdCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgeworICAgICAgICBpZiAoYnVmZmVyW2ldICE9IDApCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBpbnQgICAgICAgICBnX3Rlc3RfY291bnQgPSAxOworc3RhdGljIHVpbnQ4X3QgICAgIG91dHB1dFtTSVpFXzEyOEJdOworCitpbnQzMl90IHBzYV9hc3ltbWV0cmljX2RlY3J5cHRfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgaSwgc3RhdHVzOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICprZXlfZGF0YSwgKnNhbHQ7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgbGVuZ3RoOworICAgIHBzYV9rZXlfcG9saWN5X3QgICAgICAgIHBvbGljeTsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCisgICAgeworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgICAgIC8qIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazFbaV0udXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfYWxnKTsKKworICAgICAgICBtZW1zZXQob3V0cHV0LCAwLCBzaXplb2Yob3V0cHV0KSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBrZXkgZGF0YSBiYXNlZCBvbiBrZXkgdHlwZSAqLworICAgICAgICBpZiAoUFNBX0tFWV9UWVBFX0lTX1JTQShjaGVjazFbaV0ua2V5X3R5cGUpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmtleV90eXBlID09IFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygzODQpKQorICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IHJzYV8zODRfa2V5cGFpcjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCA9PSBCWVRFU19UT19CSVRTKDI1NikpCisgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzI1Nl9rZXlwYWlyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMTI4KSkKKyAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMTI4X2tleXBhaXI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCA9PSBCWVRFU19UT19CSVRTKDM4NCkpCisgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzM4NF9rZXlkYXRhOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMjU2KSkKKyAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMjU2X2tleWRhdGE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygxMjgpKQorICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IHJzYV8xMjhfa2V5ZGF0YTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoUFNBX0tFWV9UWVBFX0lTX0VDQyhjaGVjazFbaV0ua2V5X3R5cGUpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoUFNBX0tFWV9UWVBFX0lTX0VDQ19LRVlQQUlSKGNoZWNrMVtpXS5rZXlfdHlwZSkpCisgICAgICAgICAgICAgICAga2V5X2RhdGEgPSBlY19rZXlwYWlyOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGtleV9kYXRhID0gZWNfa2V5ZGF0YTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBrZXlfZGF0YSA9IGNoZWNrMVtpXS5rZXlfZGF0YTsKKworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMVtpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIC8qIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV90eXBlLCBrZXlfZGF0YSwgY2hlY2sxW2ldLmtleV9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgICAgICBpZiAoaXNfYnVmZmVyX2VtcHR5KGNoZWNrMVtpXS5zYWx0LCBjaGVjazFbaV0uc2FsdF9sZW5ndGgpID09IFRSVUUpCisgICAgICAgICAgICBzYWx0ID0gTlVMTDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2FsdCA9IGNoZWNrMVtpXS5zYWx0OworCisgICAgICAgIC8qIERlY3J5cHQgYSBzaG9ydCBtZXNzYWdlIHdpdGggYSBwcml2YXRlIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FTWU1NVEVSSUNfREVDUllQVCwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfYWxnLCBjaGVjazFbaV0uaW5wdXQsIGNoZWNrMVtpXS5pbnB1dF9sZW5ndGgsIHNhbHQsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5zYWx0X2xlbmd0aCwgb3V0cHV0LCBjaGVjazFbaV0ub3V0cHV0X3NpemUsICZsZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlIG91dHB1dCBsZW5ndGggbWF0Y2hlcyB3aXRoIHRoZSBleHBlY3RlZCBsZW5ndGggKi8KKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobGVuZ3RoLCBjaGVjazFbaV0uZXhwZWN0ZWRfb3V0cHV0X2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlIG91dHB1dCBtYXRjaGVzIHdpdGggdGhlIGV4cGVjdGVkIGRhdGEgKi8KKyAgICAgICAgVEVTVF9BU1NFUlRfTUVNQ01QKG91dHB1dCwgY2hlY2sxW2ldLmV4cGVjdGVkX291dHB1dCwgbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IHBzYV9hc3ltbWV0cmljX2RlY3J5cHRfbmVnYXRpdmVfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMikvc2l6ZW9mKGNoZWNrMlswXSk7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgaSwgc3RhdHVzOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICpzYWx0OworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKyAgICBwc2Ffa2V5X3BvbGljeV90ICAgICAgICBwb2xpY3k7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hc3ltbWV0cmljX2RlY3J5cHQgLSBJbnZhbGlkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2syW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hc3ltbWV0cmljX2RlY3J5cHQgLSBJbnZhbGlkIGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIEVuY3J5cHQgYSBzaG9ydCBtZXNzYWdlIHdpdGggYSBwdWJsaWMga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQVNZTU1URVJJQ19ERUNSWVBULCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcsIGNoZWNrMltpXS5pbnB1dCwgY2hlY2syW2ldLmlucHV0X2xlbmd0aCwgc2FsdCwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLnNhbHRfbGVuZ3RoLCBvdXRwdXQsIGNoZWNrMltpXS5vdXRwdXRfc2l6ZSwgJmxlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2FzeW1tZXRyaWNfZGVjcnlwdCAtIFplcm8gYXMga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogRW5jcnlwdCBhIHNob3J0IG1lc3NhZ2Ugd2l0aCBhIHB1YmxpYyBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BU1lNTVRFUklDX0RFQ1JZUFQsIDAsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnLCBjaGVjazJbaV0uaW5wdXQsIGNoZWNrMltpXS5pbnB1dF9sZW5ndGgsIHNhbHQsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5zYWx0X2xlbmd0aCwgb3V0cHV0LCBjaGVjazJbaV0ub3V0cHV0X3NpemUsICZsZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hc3ltbWV0cmljX2RlY3J5cHQgLSBFbXB0eSBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMltpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMltpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgIGlmIChpc19idWZmZXJfZW1wdHkoY2hlY2sxW2ldLnNhbHQsIGNoZWNrMVtpXS5zYWx0X2xlbmd0aCkgPT0gVFJVRSkKKyAgICAgICAgICAgIHNhbHQgPSBOVUxMOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzYWx0ID0gY2hlY2sxW2ldLnNhbHQ7CisKKyAgICAgICAgLyogRW5jcnlwdCBhIHNob3J0IG1lc3NhZ2Ugd2l0aCBhIHB1YmxpYyBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BU1lNTVRFUklDX0RFQ1JZUFQsIGNoZWNrMltpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2FsZywgY2hlY2syW2ldLmlucHV0LCBjaGVjazJbaV0uaW5wdXRfbGVuZ3RoLCBzYWx0LAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0uc2FsdF9sZW5ndGgsIG91dHB1dCwgY2hlY2syW2ldLm91dHB1dF9zaXplLCAmbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRU1QVFlfU0xPVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0MC90ZXN0X2MwNDAuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQwL3Rlc3RfYzA0MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYjhmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0MC90ZXN0X2MwNDAuaApAQCAtMCwwICsxLDMxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9DMDQwX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9DMDQwX0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxjMDQwKQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2MwNDBfY3J5cHRvX2xpc3RbXTsKKworaW50MzJfdCBwc2FfYXN5bW1ldHJpY19kZWNyeXB0X3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOworaW50MzJfdCBwc2FfYXN5bW1ldHJpY19kZWNyeXB0X25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOworI2VuZGlmIC8qIF9URVNUX0MwNDBfQ0xJRU5UX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0MC90ZXN0X2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQwL3Rlc3RfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyM2U2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0MC90ZXN0X2RhdGEuaApAQCAtMCwwICsxLDMwNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1s3NV07CisgICAgcHNhX2tleV9oYW5kbGVfdCAgICAgICAga2V5X2hhbmRsZTsKKyAgICBwc2Ffa2V5X3R5cGVfdCAgICAgICAgICBrZXlfdHlwZTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBrZXlfZGF0YVsxNl07CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAga2V5X2xlbmd0aDsKKyAgICBwc2Ffa2V5X3VzYWdlX3QgICAgICAgICB1c2FnZTsKKyAgICBwc2FfYWxnb3JpdGhtX3QgICAgICAgICBrZXlfYWxnOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIHNhbHRbMTZdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIHNhbHRfbGVuZ3RoOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGlucHV0WzEyOF07CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgaW5wdXRfbGVuZ3RoOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIG91dHB1dF9zaXplOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dHB1dFszMl07CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfb3V0cHV0X2xlbmd0aDsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBleHBlY3RlZF9iaXRfbGVuZ3RoOworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1czsKK30gdGVzdF9kYXRhOworCitzdGF0aWMgdWludDhfdCByc2FfMzg0X2tleXBhaXJbMV07CitzdGF0aWMgdWludDhfdCByc2FfMzg0X2tleWRhdGFbMV07CitzdGF0aWMgdWludDhfdCByc2FfMjU2X2tleXBhaXJbMV07CitzdGF0aWMgdWludDhfdCByc2FfMjU2X2tleWRhdGFbMV07CisKK3N0YXRpYyB1aW50OF90IGVjX2tleWRhdGFbXSA9IHsKKyAweDMwLCAweDQ5LCAweDMwLCAweDEzLCAweDA2LCAweDA3LCAweDJBLCAweDg2LCAweDQ4LCAweENFLCAweDNELCAweDAyLCAweDAxLCAweDA2LAorIDB4MDgsIDB4MkEsIDB4ODYsIDB4NDgsIDB4Q0UsIDB4M0QsIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDMsIDB4MzIsIDB4MDAsIDB4MDQsIDB4QkMsCisgMHg3OSwgMHg3RCwgMHhCMywgMHhBRSwgMHg3RiwgMHgwOCwgMHhFQywgMHgzRCwgMHg0OSwgMHg2QiwgMHg0RiwgMHhCNCwgMHgxMSwgMHhCMywKKyAweEY2LCAweDIwLCAweEE1LCAweDU4LCAweEE1LCAweDAxLCAweEUwLCAweDIyLCAweDJELCAweDA4LCAweENGLCAweEUwLCAweERDLCAweDhBLAorIDB4RUMsIDB4OEIsIDB4MUEsIDB4N0IsIDB4RjIsIDB4NEIsIDB4RTksIDB4MjksIDB4NTEsIDB4Q0MsIDB4NUIsIDB4QTEsIDB4QkUsIDB4QkIsCisgMHgyNCwgMHg3NCwgMHg5MCwgMHg5QSwgMHhFMH07CisKK3N0YXRpYyB1aW50OF90IGVjX2tleXBhaXJbXSA9IHsKKyAweDMwLCAweDVGLCAweDAyLCAweDAxLCAweDAxLCAweDA0LCAweDE4LCAweDMzLCAweDhFLCAweDg2LCAweEE4LCAweDgxLCAweEUyLCAweDM4LAorIDB4RjUsIDB4NDksIDB4QkQsIDB4NkYsIDB4MDUsIDB4NTMsIDB4NDksIDB4NEIsIDB4NzMsIDB4RTMsIDB4RDYsIDB4MTEsIDB4MzAsIDB4RkQsCisgMHhDNiwgMHhDOSwgMHg2RCwgMHhBMCwgMHgwQSwgMHgwNiwgMHgwOCwgMHgyQSwgMHg4NiwgMHg0OCwgMHhDRSwgMHgzRCwgMHgwMywgMHgwMSwKKyAweDAxLCAweEExLCAweDM0LCAweDAzLCAweDMyLCAweDAwLCAweDA0LCAweDUxLCAweDc1LCAweEJDLCAweERGLCAweDMwLCAweEEzLCAweDcwLAorIDB4RjMsIDB4OUQsIDB4NTMsIDB4OTMsIDB4RTYsIDB4MTIsIDB4NzIsIDB4ODgsIDB4RDgsIDB4MDEsIDB4NjcsIDB4QjUsIDB4RjQsIDB4QjQsCisgMHhCNywgMHg3NiwgMHhDNiwgMHg3NCwgMHhGNywgMHhDNiwgMHhGMywgMHg1NCwgMHhCNywgMHhEMiwgMHgyNCwgMHgwNiwgMHgyQywgMHgxRiwKKyAweDY4LCAweDU0LCAweEI1LCAweEE3LCAweEFGLCAweDBGLCAweEU1LCAweDc4LCAweEVBLCAweEYyLCAweDU4LCAweEYwLCAweDI3fTsKKworc3RhdGljIHVpbnQ4X3QgcnNhXzEyOF9rZXlkYXRhW10gPSB7CisgMHgzMCwgMHg4MSwgMHg5ZiwgMHgzMCwgMHgwZCwgMHgwNiwgMHgwOSwgMHgyYSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhmNywgMHgwZCwKKyAweDAxLCAweDAxLCAweDAxLCAweDA1LCAweDAwLCAweDAzLCAweDgxLCAweDhkLCAweDAwLCAweDMwLCAweDgxLCAweDg5LCAweDAyLAorIDB4ODEsIDB4ODEsIDB4MDAsIDB4YWYsIDB4MDUsIDB4N2QsIDB4MzksIDB4NmUsIDB4ZTgsIDB4NGYsIDB4YjcsIDB4NWYsIDB4ZGIsCisgMHhiNSwgMHhjMiwgMHhiMSwgMHgzYywgMHg3ZiwgMHhlNSwgMHhhNiwgMHg1NCwgMHhhYSwgMHg4YSwgMHhhMiwgMHg0NywgMHgwYiwKKyAweDU0LCAweDFlLCAweGUxLCAweGZlLCAweGIwLCAweGIxLCAweDJkLCAweDI1LCAweGM3LCAweDk3LCAweDExLCAweDUzLCAweDEyLAorIDB4NDksIDB4ZTEsIDB4MTIsIDB4OTYsIDB4MjgsIDB4MDQsIDB4MmQsIDB4YmIsIDB4YjYsIDB4YzEsIDB4MjAsIDB4ZDEsIDB4NDQsCisgMHgzNSwgMHgyNCwgMHhlZiwgMHg0YywgMHgwZSwgMHg2ZSwgMHgxZCwgMHg4OSwgMHg1NiwgMHhlZSwgMHhiMiwgMHgwNywgMHg3YSwKKyAweGYxLCAweDIzLCAweDQ5LCAweGRkLCAweGVlLCAweGU1LCAweDQ0LCAweDgzLCAweGJjLCAweDA2LCAweGMyLCAweGM2LCAweDE5LAorIDB4NDgsIDB4Y2QsIDB4MDIsIDB4YjIsIDB4MDIsIDB4ZTcsIDB4OTYsIDB4YWUsIDB4YmQsIDB4OTQsIDB4ZDMsIDB4YTcsIDB4Y2IsCisgMHhmOCwgMHg1OSwgMHhjMiwgMHhjMSwgMHg4MSwgMHg5YywgMHgzMiwgMHg0YywgMHhiOCwgMHgyYiwgMHg5YywgMHhkMywgMHg0ZSwKKyAweGRlLCAweDI2LCAweDNhLCAweDJhLCAweGJmLCAweGZlLCAweDQ3LCAweDMzLCAweGYwLCAweDc3LCAweDg2LCAweDllLCAweDg2LAorIDB4NjAsIDB4ZjcsIDB4ZDYsIDB4ODMsIDB4NGQsIDB4YTUsIDB4M2QsIDB4NjksIDB4MGUsIDB4ZjcsIDB4OTgsIDB4NWYsIDB4NmIsCisgMHhjMywgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMX07CisKK3N0YXRpYyB1aW50OF90IHJzYV8xMjhfa2V5cGFpcltdID0geworMHgzMCwgMHg4MiwgMHgwMiwgMHg1ZSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhhZiwgMHgwNSwKKzB4N2QsIDB4MzksIDB4NmUsIDB4ZTgsIDB4NGYsIDB4YjcsIDB4NWYsIDB4ZGIsIDB4YjUsIDB4YzIsIDB4YjEsIDB4M2MsIDB4N2YsCisweGU1LCAweGE2LCAweDU0LCAweGFhLCAweDhhLCAweGEyLCAweDQ3LCAweDBiLCAweDU0LCAweDFlLCAweGUxLCAweGZlLCAweGIwLAorMHhiMSwgMHgyZCwgMHgyNSwgMHhjNywgMHg5NywgMHgxMSwgMHg1MywgMHgxMiwgMHg0OSwgMHhlMSwgMHgxMiwgMHg5NiwgMHgyOCwKKzB4MDQsIDB4MmQsIDB4YmIsIDB4YjYsIDB4YzEsIDB4MjAsIDB4ZDEsIDB4NDQsIDB4MzUsIDB4MjQsIDB4ZWYsIDB4NGMsIDB4MGUsCisweDZlLCAweDFkLCAweDg5LCAweDU2LCAweGVlLCAweGIyLCAweDA3LCAweDdhLCAweGYxLCAweDIzLCAweDQ5LCAweGRkLCAweGVlLAorMHhlNSwgMHg0NCwgMHg4MywgMHhiYywgMHgwNiwgMHhjMiwgMHhjNiwgMHgxOSwgMHg0OCwgMHhjZCwgMHgwMiwgMHhiMiwgMHgwMiwKKzB4ZTcsIDB4OTYsIDB4YWUsIDB4YmQsIDB4OTQsIDB4ZDMsIDB4YTcsIDB4Y2IsIDB4ZjgsIDB4NTksIDB4YzIsIDB4YzEsIDB4ODEsCisweDljLCAweDMyLCAweDRjLCAweGI4LCAweDJiLCAweDljLCAweGQzLCAweDRlLCAweGRlLCAweDI2LCAweDNhLCAweDJhLCAweGJmLAorMHhmZSwgMHg0NywgMHgzMywgMHhmMCwgMHg3NywgMHg4NiwgMHg5ZSwgMHg4NiwgMHg2MCwgMHhmNywgMHhkNiwgMHg4MywgMHg0ZCwKKzB4YTUsIDB4M2QsIDB4NjksIDB4MGUsIDB4ZjcsIDB4OTgsIDB4NWYsIDB4NmIsIDB4YzMsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsCisweDAxLCAweDAyLCAweDgxLCAweDgxLCAweDAwLCAweDg3LCAweDRiLCAweGYwLCAweGZmLCAweGMyLCAweGYyLCAweGE3LCAweDFkLAorMHgxNCwgMHg2NywgMHgxZCwgMHhkZCwgMHgwMSwgMHg3MSwgMHhjOSwgMHg1NCwgMHhkNywgMHhmZCwgMHhiZiwgMHg1MCwgMHgyOCwKKzB4MWUsIDB4NGYsIDB4NmQsIDB4OTksIDB4ZWEsIDB4MGUsIDB4MWUsIDB4YmMsIDB4ZjgsIDB4MmYsIDB4YWEsIDB4NTgsIDB4ZTcsCisweGI1LCAweDk1LCAweGZmLCAweGIyLCAweDkzLCAweGQxLCAweGFiLCAweGUxLCAweDdmLCAweDExLCAweDBiLCAweDM3LCAweGM0LAorMHg4YywgMHhjMCwgMHhmMywgMHg2YywgMHgzNywgMHhlOCwgMHg0ZCwgMHg4NywgMHg2NiwgMHgyMSwgMHhkMywgMHgyNywgMHhmNiwKKzB4NGIsIDB4YmUsIDB4MDgsIDB4NDUsIDB4N2QsIDB4M2UsIDB4YzQsIDB4MDksIDB4OGIsIDB4YTIsIDB4ZmEsIDB4MGEsIDB4MzEsCisweDlmLCAweGJhLCAweDQxLCAweDFjLCAweDI4LCAweDQxLCAweGVkLCAweDdiLCAweGU4LCAweDMxLCAweDk2LCAweGE4LCAweGNkLAorMHhmOSwgMHhkYSwgMHhhNSwgMHhkMCwgMHgwNiwgMHg5NCwgMHhiYywgMHgzMywgMHg1ZiwgMHhjNCwgMHhjMywgMHgyMiwgMHgxNywKKzB4ZmUsIDB4MDQsIDB4ODgsIDB4YmMsIDB4ZTksIDB4Y2IsIDB4NzIsIDB4MDIsIDB4ZTUsIDB4OTQsIDB4NjgsIDB4YjEsIDB4ZWEsCisweGQxLCAweDE5LCAweDAwLCAweDA0LCAweDc3LCAweGRiLCAweDJjLCAweGE3LCAweDk3LCAweGZhLCAweGMxLCAweDllLCAweGRhLAorMHgzZiwgMHg1OCwgMHhjMSwgMHgwMiwgMHg0MSwgMHgwMCwgMHhlMiwgMHhhYiwgMHg3NiwgMHgwOCwgMHg0MSwgMHhiYiwgMHg5ZCwKKzB4MzAsIDB4YTgsIDB4MWQsIDB4MjIsIDB4MmQsIDB4ZTEsIDB4ZWIsIDB4NzMsIDB4ODEsIDB4ZDgsIDB4MjIsIDB4MTQsIDB4NDAsCisweDdmLCAweDFiLCAweDk3LCAweDVjLCAweGJiLCAweGZlLCAweDRlLCAweDFhLCAweDk0LCAweDY3LCAweGZkLCAweDk4LCAweGFkLAorMHhiZCwgMHg3OCwgMHhmNiwgMHgwNywgMHg4MywgMHg2YywgMHhhNSwgMHhiZSwgMHgxOSwgMHgyOCwgMHhiOSwgMHhkMSwgMHg2MCwKKzB4ZDksIDB4N2YsIDB4ZDQsIDB4NWMsIDB4MTIsIDB4ZDYsIDB4YjUsIDB4MmUsIDB4MmMsIDB4OTgsIDB4NzEsIDB4YTEsIDB4NzQsCisweGM2LCAweDZiLCAweDQ4LCAweDgxLCAweDEzLCAweDAyLCAweDQxLCAweDAwLCAweGM1LCAweGFiLCAweDI3LCAweDYwLCAweDIxLAorMHg1OSwgMHhhZSwgMHg3ZCwgMHg2ZiwgMHgyMCwgMHhjMywgMHhjMiwgMHhlZSwgMHg4NSwgMHgxZSwgMHg0NiwgMHhkYywgMHgxMSwKKzB4MmUsIDB4NjgsIDB4OWUsIDB4MjgsIDB4ZDUsIDB4ZmMsIDB4YmIsIDB4ZjksIDB4OTAsIDB4YTksIDB4OWUsIDB4ZjgsIDB4YTksCisweDBiLCAweDhiLCAweGI0LCAweDRmLCAweGQzLCAweDY0LCAweDY3LCAweGU3LCAweGZjLCAweDE3LCAweDg5LCAweGNlLCAweGI2LAorMHg2MywgMHhhYiwgMHhkYSwgMHgzMywgMHg4NiwgMHg1MiwgMHhjMywgMHhjNywgMHgzZiwgMHgxMSwgMHgxNywgMHg3NCwgMHg5MCwKKzB4MmUsIDB4ODQsIDB4MDUsIDB4NjUsIDB4OTIsIDB4NzAsIDB4OTEsIDB4MDIsIDB4NDEsIDB4MDAsIDB4YjYsIDB4Y2QsIDB4YmQsCisweDM1LCAweDRmLCAweDdkLCAweGY1LCAweDc5LCAweGE2LCAweDNiLCAweDQ4LCAweGIzLCAweDY0LCAweDNlLCAweDM1LCAweDNiLAorMHg4NCwgMHg4OSwgMHg4NywgMHg3NywgMHhiNCwgMHg4YiwgMHgxNSwgMHhmOSwgMHg0ZSwgMHgwYiwgMHhmYywgMHgwNSwgMHg2NywKKzB4YTYsIDB4YWUsIDB4NTksIDB4MTEsIDB4ZDUsIDB4N2EsIDB4ZDYsIDB4NDAsIDB4OWMsIDB4ZjcsIDB4NjQsIDB4N2IsIDB4ZjksCisweDYyLCAweDY0LCAweGU5LCAweGJkLCAweDg3LCAweGViLCAweDk1LCAweGUyLCAweDYzLCAweGI3LCAweDExLCAweDBiLCAweDlhLAorMHgxZiwgMHg5ZiwgMHg5NCwgMHhhYywgMHhjZSwgMHhkMCwgMHhmYSwgMHhmYSwgMHg0ZCwgMHgwMiwgMHg0MCwgMHg3MSwgMHgxOSwKKzB4NWUsIDB4ZWMsIDB4MzcsIDB4ZTgsIDB4ZDIsIDB4NTcsIDB4ZGUsIDB4Y2YsIDB4YzYsIDB4NzIsIDB4YjAsIDB4N2EsIDB4ZTYsCisweDM5LCAweGYxLCAweDBjLCAweGJiLCAweDliLCAweDBjLCAweDczLCAweDlkLCAweDBjLCAweDgwLCAweDk5LCAweDY4LCAweGQ2LAorMHg0NCwgMHhhOSwgMHg0ZSwgMHgzZiwgMHhkNiwgMHhlZCwgMHg5MiwgMHg4NywgMHgwNywgMHg3YSwgMHgxNCwgMHg1OCwgMHgzZiwKKzB4MzcsIDB4OTAsIDB4NTgsIDB4ZjcsIDB4NmEsIDB4OGEsIDB4ZWMsIDB4ZDQsIDB4M2MsIDB4NjIsIDB4ZGMsIDB4OGMsIDB4MGYsCisweDQxLCAweDc2LCAweDY2LCAweDUwLCAweGQ3LCAweDI1LCAweDI3LCAweDVhLCAweGM0LCAweGExLCAweDAyLCAweDQxLCAweDAwLAorMHhiYiwgMHgzMiwgMHhkMSwgMHgzMywgMHhlZCwgMHhjMiwgMHhlMCwgMHg0OCwgMHhkNCwgMHg2MywgMHgzOCwgMHg4YiwgMHg3YiwKKzB4ZTksIDB4Y2IsIDB4NGIsIDB4ZTIsIDB4OWYsIDB4NGIsIDB4NjIsIDB4NTAsIDB4YmUsIDB4NjAsIDB4M2UsIDB4NzAsIDB4ZTMsCisweDY0LCAweDc1LCAweDAxLCAweGM5LCAweDdkLCAweGRkLCAweGUyLCAweDBhLCAweDRlLCAweDcxLCAweGJlLCAweDk1LCAweGZkLAorMHg1ZSwgMHg3MSwgMHg3OCwgMHg0ZSwgMHgyNSwgMHhhYywgMHhhNCwgMHhiYSwgMHhmMiwgMHg1YiwgMHhlNSwgMHg3MywgMHg4YSwKKzB4YWUsIDB4NTksIDB4YmIsIDB4ZmUsIDB4MWMsIDB4OTksIDB4NzcsIDB4ODEsIDB4NDQsIDB4N2EsIDB4MmIsIDB4MjR9OworCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0geworeyJUZXN0IHBzYV9hc3ltbWV0cmljX2RlY3J5cHQgLSBSU0EgS0VZUEFJUiBQS0NTMVYxNVxuIiwgMSwgUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSLAorezB9LCA2MTAsIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQsCit7MH0sIDAsCit7MHg5OSwgMHhmZiwgMHhkZSwgMHgyZiwgMHhjYywgMHgwMCwgMHhjOSwgMHhjYywgMHgwMSwgMHg5NywgMHgyZSwgMHhiZiwgMHhhNywKKyAweDc3LCAweDliLCAweDI5LCAweDhkLCAweGJiLCAweGFmLCAweDdmLCAweDUwLCAweDcwLCAweDdhLCAweDc0LCAweDA1LCAweDI5LAorIDB4NmQsIDB4ZDIsIDB4NzgsIDB4MzQsIDB4NTYsIDB4ZmMsIDB4NzksIDB4MjAsIDB4MDIsIDB4ZjQsIDB4NjIsIDB4ZTcsIDB4NjAsCisgMHg1MCwgMHgwZSwgMHgwMiwgMHhhZiwgMHhhMiwgMHg1YSwgMHg4NSwgMHg5YSwgMHhjZSwgMHg4NywgMHgwMSwgMHhjYiwgMHg1ZCwKKyAweDNiLCAweDAyLCAweDYyLCAweDExLCAweDY0LCAweDMxLCAweGM0LCAweDNhLCAweGY4LCAweGViLCAweDA4LCAweGY1LCAweGE4LAorIDB4ODMsIDB4MDEsIDB4MDUsIDB4N2MsIDB4ZjEsIDB4YzEsIDB4NTYsIDB4YTIsIDB4YTUsIDB4MTksIDB4M2MsIDB4MTQsIDB4M2UsCisgMHg3YSwgMHg1YiwgMHgwMywgMHhmYSwgMHhjMSwgMHgzMiwgMHhiNywgMHhlOCwgMHg5ZSwgMHg2ZCwgMHhjZCwgMHg4ZiwgMHg0YywKKyAweDgyLCAweGM5LCAweGIyLCAweDg0LCAweDUyLCAweDMyLCAweDljLCAweDI2LCAweDBkLCAweDMwLCAweGJjLCAweDM5LCAweGIzLAorIDB4ODEsIDB4NmIsIDB4N2MsIDB4NDYsIDB4YjQsIDB4MWIsIDB4MzcsIDB4YjQsIDB4ODUsIDB4MGQsIDB4MmEsIDB4ZTcsIDB4NGUsCisgMHg3MiwgMHg5ZiwgMHg5OSwgMHhjNiwgMHg2MiwgMHgxZiwgMHhiYiwgMHhlMiwgMHhlNCwgMHg2OCwgMHg3Mn0sCisgMTI4LCAxMjgsCit7MHhiYSwgMHg3OCwgMHgxNiwgMHhiZiwgMHg4ZiwgMHgwMSwgMHhjZiwgMHhlYSwgMHg0MSwgMHg0MSwgMHg0MCwgMHhkZSwgMHg1ZCwKKyAweGFlLCAweDIyLCAweDIzLCAweGIwLCAweDAzLCAweDYxLCAweGEzLCAweDk2LCAweDE3LCAweDdhLCAweDljLCAweGI0LCAweDEwLAorIDB4ZmYsIDB4NjEsIDB4ZjIsIDB4MDAsIDB4MTUsIDB4YWR9LAorIDMyLCAxMDI0LCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9hc3ltbWV0cmljX2RlY3J5cHQgLSBSU0EgS0VZUEFJUiBPQUVQIFNIQTI1NlxuIiwgMiwgUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSLAorezB9LCA2MTAsIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19SU0FfT0FFUChQU0FfQUxHX1NIQV8yNTYpLAorezB9LCAwLAorezB4M2QsIDB4MzEsIDB4NDYsIDB4YjEsIDB4YzksIDB4ODIsIDB4MDAsIDB4NDIsIDB4NzMsIDB4YTksIDB4ZWIsIDB4YjksIDB4YjAsCisgMHg2MywgMHhlNiwgMHhhZSwgMHg1MywgMHhiMSwgMHhhOCwgMHg1YiwgMHhmYywgMHg4MCwgMHgyMywgMHgyNCwgMHhiYywgMHhkZCwKKyAweDA0LCAweGZhLCAweGEwLCAweGY3LCAweDIxLCAweDFmLCAweGIyLCAweGJkLCAweGVlLCAweGE0LCAweDAzLCAweDU4LCAweDA5LAorIDB4NTUsIDB4NTQsIDB4ZGYsIDB4OWMsIDB4MjUsIDB4MDgsIDB4NjYsIDB4YzcsIDB4MzYsIDB4MWUsIDB4NzMsIDB4OGYsIDB4MGQsCisgMHgyNywgMHgwZSwgMHhhYSwgMHgyNywgMHg3MywgMHg4ZSwgMHg4NywgMHg5MiwgMHg4YywgMHg1ZSwgMHgzMSwgMHg4MSwgMHg1NSwKKyAweDA2LCAweDM0LCAweDY3LCAweDI3LCAweDkwLCAweDBmLCAweGYwLCAweDNjLCAweGVmLCAweDBiLCAweGU2LCAweGY5LCAweGRkLAorIDB4NmIsIDB4YmEsIDB4NjMsIDB4Y2UsIDB4ODksIDB4MDcsIDB4NGUsIDB4ODEsIDB4OTQsIDB4ZmUsIDB4NjgsIDB4YjUsIDB4YTUsCisgMHg3MywgMHg5NCwgMHgyMiwgMHhkNCwgMHhmMSwgMHgzOCwgMHhiYiwgMHhiYiwgMHg2MSwgMHhmNCwgMHg5YiwgMHg3NiwgMHhjZiwKKyAweDFmLCAweDE4LCAweGRlLCAweGYyLCAweGM5LCAweDkzLCAweGUzLCAweDExLCAweDNiLCAweDA4LCAweGMxLCAweDkxLCAweGVhLAorIDB4MWQsIDB4YTAsIDB4ZmUsIDB4YjksIDB4NGYsIDB4OGYsIDB4ZDksIDB4YjMsIDB4MDEsIDB4MDksIDB4YTF9LAorIDEyOCwgMTI4LAorezB9LAorIDAsIDEwMjQsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2FzeW1tZXRyaWNfZGVjcnlwdCAtIFJTQSBLRVlQQUlSIE9BRVAgU0hBMjU2IHdpdGggbGFiZWxcbiIsIDMsCisgUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSLAorezB9LCA2MTAsIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19SU0FfT0FFUChQU0FfQUxHX1NIQV8yNTYpLAorezB4NzQsIDB4NjgsIDB4NjksIDB4NzMsIDB4MDAsIDB4NjksIDB4NzMsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmMsIDB4NjEsIDB4NjIsCisgMHg2NSwgMHg2YywgMHgwMH0sIDE2LAorezB4NDYsIDB4ZWQsIDB4YzksIDB4OTgsIDB4NGEsIDB4NmQsIDB4NGIsIDB4N2MsIDB4N2YsIDB4ZDgsIDB4OGYsIDB4ZGEsIDB4OWUsCisgMHhhOSwgMHgxZCwgMHhkYiwgMHhkMywgMHgwYiwgMHgyOCwgMHhhMCwgMHg3OSwgMHgzYywgMHhjNywgMHg1YSwgMHg5ZiwgMHhjZCwKKyAweGQ5LCAweDRkLCAweDg2LCAweDdjLCAweDY5LCAweDA5LCAweDBhLCAweDY5LCAweDdkLCAweDQ2LCAweGE2LCAweGYzLCAweDM2LAorIDB4YTMsIDB4ZTQsIDB4OGEsIDB4MTIsIDB4MmQsIDB4ZDMsIDB4ZWUsIDB4M2IsIDB4NTEsIDB4NTYsIDB4NmIsIDB4NDQsIDB4NWYsCisgMHhmNywgMHg4YSwgMHhkYiwgMHg2MSwgMHgzZCwgMHgwOSwgMHhiNywgMHhkOCwgMHhjNSwgMHg5YywgMHgyNSwgMHhhMiwgMHg3ZCwKKyAweDhjLCAweGY3LCAweGY1LCAweGUzLCAweDY0LCAweDU1LCAweGYyLCAweGU3LCAweDFmLCAweGY2LCAweGM2LCAweGVlLCAweDk4LAorIDB4ZDUsIDB4NzQsIDB4MGUsIDB4NjYsIDB4YjIsIDB4MzcsIDB4OTQsIDB4YWMsIDB4YzcsIDB4MjksIDB4MDYsIDB4NTYsIDB4MTksCisgMHg1MSwgMHhjMiwgMHhiZSwgMHg1MCwgMHg2NCwgMHhmNiwgMHhhMiwgMHg1MCwgMHg2NCwgMHg2YSwgMHhiNiwgMHgyNywgMHhlYywKKyAweGJmLCAweGE0LCAweDhjLCAweDAyLCAweGY4LCAweDJjLCAweDI5LCAweGZlLCAweDliLCAweDhjLCAweDhlLCAweDZiLCAweGU4LAorIDB4ZWIsIDB4NzUsIDB4MjQsIDB4MzIsIDB4MTIsIDB4NDksIDB4NzQsIDB4MzcsIDB4M2IsIDB4NTQsIDB4MmN9LAorIDEyOCwgMTI4LAorezB4NzQsIDB4NjgsIDB4NjksIDB4NzMsIDB4MjAsIDB4NjksIDB4NzMsIDB4MjAsIDB4NmUsIDB4NmYsIDB4MjAsIDB4NzMsIDB4NzEsCisgMHg3NSwgMHg2NSwgMHg2MSwgMHg2ZCwgMHg2OSwgMHg3MywgMHg2OCwgMHgyMCwgMHg2ZiwgMHg3MywgMHg3MywgMHg2OSwgMHg2NiwKKyAweDcyLCAweDYxLCAweDY3LCAweDY1fSwKKyAzMCwgMTAyNCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfYXN5bW1ldHJpY19kZWNyeXB0IC0gSW52YWxpZCBrZXkgdHlwZSAoUlNBIHB1YmxpYyBrZXkpXG4iLCA0LAorUFNBX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZLAorezB9LCAxNjIsIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQsCit7MH0sIDAsCit7MHgzZCwgMHgzMSwgMHg0NiwgMHhiMSwgMHhjOSwgMHg4MiwgMHgwMCwgMHg0MiwgMHg3MywgMHhhOSwgMHhlYiwgMHhiOSwgMHhiMCwKKyAweDYzLCAweGU2LCAweGFlLCAweDUzLCAweGIxLCAweGE4LCAweDViLCAweGZjLCAweDgwLCAweDIzLCAweDI0LCAweGJjLCAweGRkLAorIDB4MDQsIDB4ZmEsIDB4YTAsIDB4ZjcsIDB4MjEsIDB4MWYsIDB4YjIsIDB4YmQsIDB4ZWUsIDB4YTQsIDB4MDMsIDB4NTgsIDB4MDksCisgMHg1NSwgMHg1NCwgMHhkZiwgMHg5YywgMHgyNSwgMHgwOCwgMHg2NiwgMHhjNywgMHgzNiwgMHgxZSwgMHg3MywgMHg4ZiwgMHgwZCwKKyAweDI3LCAweDBlLCAweGFhLCAweDI3LCAweDczLCAweDhlLCAweDg3LCAweDkyLCAweDhjLCAweDVlLCAweDMxLCAweDgxLCAweDU1LAorIDB4MDYsIDB4MzQsIDB4NjcsIDB4MjcsIDB4OTAsIDB4MGYsIDB4ZjAsIDB4M2MsIDB4ZWYsIDB4MGIsIDB4ZTYsIDB4ZjksIDB4ZGQsCisgMHg2YiwgMHhiYSwgMHg2MywgMHhjZSwgMHg4OSwgMHgwNywgMHg0ZSwgMHg4MSwgMHg5NCwgMHhmZSwgMHg2OCwgMHhiNSwgMHhhNSwKKyAweDczLCAweDk0LCAweDIyLCAweGQ0LCAweGYxLCAweDM4LCAweGJiLCAweGJiLCAweDYxLCAweGY0LCAweDliLCAweDc2LCAweGNmLAorIDB4MWYsIDB4MTgsIDB4ZGUsIDB4ZjIsIDB4YzksIDB4OTMsIDB4ZTMsIDB4MTEsIDB4M2IsIDB4MDgsIDB4YzEsIDB4OTEsIDB4ZWEsCisgMHgxZCwgMHhhMCwgMHhmZSwgMHhiOSwgMHg0ZiwgMHg4ZiwgMHhkOSwgMHhiMywgMHgwMSwgMHgwOSwgMHhhMX0sCisgMTI4LCAxMjgsCit7MH0sCisgMCwgMTAyNCwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCisKK3siVGVzdCBwc2FfYXN5bW1ldHJpY19kZWNyeXB0IC0gU21hbGwgb3V0cHV0IGJ1ZmZlclxuIiwgNSwgUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSLAorezB9LCA2MTAsIFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQsCit7MH0sIDAsCit7MHg5OSwgMHhmZiwgMHhkZSwgMHgyZiwgMHhjYywgMHgwMCwgMHhjOSwgMHhjYywgMHgwMSwgMHg5NywgMHgyZSwgMHhiZiwgMHhhNywKKyAweDc3LCAweDliLCAweDI5LCAweDhkLCAweGJiLCAweGFmLCAweDdmLCAweDUwLCAweDcwLCAweDdhLCAweDc0LCAweDA1LCAweDI5LAorIDB4NmQsIDB4ZDIsIDB4NzgsIDB4MzQsIDB4NTYsIDB4ZmMsIDB4NzksIDB4MjAsIDB4MDIsIDB4ZjQsIDB4NjIsIDB4ZTcsIDB4NjAsCisgMHg1MCwgMHgwZSwgMHgwMiwgMHhhZiwgMHhhMiwgMHg1YSwgMHg4NSwgMHg5YSwgMHhjZSwgMHg4NywgMHgwMSwgMHhjYiwgMHg1ZCwKKyAweDNiLCAweDAyLCAweDYyLCAweDExLCAweDY0LCAweDMxLCAweGM0LCAweDNhLCAweGY4LCAweGViLCAweDA4LCAweGY1LCAweGE4LAorIDB4ODMsIDB4MDEsIDB4MDUsIDB4N2MsIDB4ZjEsIDB4YzEsIDB4NTYsIDB4YTIsIDB4YTUsIDB4MTksIDB4M2MsIDB4MTQsIDB4M2UsCisgMHg3YSwgMHg1YiwgMHgwMywgMHhmYSwgMHhjMSwgMHgzMiwgMHhiNywgMHhlOCwgMHg5ZSwgMHg2ZCwgMHhjZCwgMHg4ZiwgMHg0YywKKyAweDgyLCAweGM5LCAweGIyLCAweDg0LCAweDUyLCAweDMyLCAweDljLCAweDI2LCAweDBkLCAweDMwLCAweGJjLCAweDM5LCAweGIzLAorIDB4ODEsIDB4NmIsIDB4N2MsIDB4NDYsIDB4YjQsIDB4MWIsIDB4MzcsIDB4YjQsIDB4ODUsIDB4MGQsIDB4MmEsIDB4ZTcsIDB4NGUsCisgMHg3MiwgMHg5ZiwgMHg5OSwgMHhjNiwgMHg2MiwgMHgxZiwgMHhiYiwgMHhlMiwgMHhlNCwgMHg2OCwgMHg3Mn0sCisgMTI4LCAzMCwKK3sweGJhLCAweDc4LCAweDE2LCAweGJmLCAweDhmLCAweDAxLCAweGNmLCAweGVhLCAweDQxLCAweDQxLCAweDQwLCAweGRlLCAweDVkLAorIDB4YWUsIDB4MjIsIDB4MjMsIDB4YjAsIDB4MDMsIDB4NjEsIDB4YTMsIDB4OTYsIDB4MTcsIDB4N2EsIDB4OWMsIDB4YjQsIDB4MTAsCisgMHhmZiwgMHg2MSwgMHhmMiwgMHgwMCwgMHgxNSwgMHhhZH0sCisgMzIsIDEwMjQsIFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMCit9LAorCit7IlRlc3QgcHNhX2FzeW1tZXRyaWNfZGVjcnlwdCAtIEludmFsaWQgYWxnb3JpdGhtXG4iLCA2LCBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIsCit7MH0sIDYxMCwgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX1NIQV8yNTYsCit7MH0sIDAsCit7MHg5OSwgMHhmZiwgMHhkZSwgMHgyZiwgMHhjYywgMHgwMCwgMHhjOSwgMHhjYywgMHgwMSwgMHg5NywgMHgyZSwgMHhiZiwgMHhhNywKKyAweDc3LCAweDliLCAweDI5LCAweDhkLCAweGJiLCAweGFmLCAweDdmLCAweDUwLCAweDcwLCAweDdhLCAweDc0LCAweDA1LCAweDI5LAorIDB4NmQsIDB4ZDIsIDB4NzgsIDB4MzQsIDB4NTYsIDB4ZmMsIDB4NzksIDB4MjAsIDB4MDIsIDB4ZjQsIDB4NjIsIDB4ZTcsIDB4NjAsCisgMHg1MCwgMHgwZSwgMHgwMiwgMHhhZiwgMHhhMiwgMHg1YSwgMHg4NSwgMHg5YSwgMHhjZSwgMHg4NywgMHgwMSwgMHhjYiwgMHg1ZCwKKyAweDNiLCAweDAyLCAweDYyLCAweDExLCAweDY0LCAweDMxLCAweGM0LCAweDNhLCAweGY4LCAweGViLCAweDA4LCAweGY1LCAweGE4LAorIDB4ODMsIDB4MDEsIDB4MDUsIDB4N2MsIDB4ZjEsIDB4YzEsIDB4NTYsIDB4YTIsIDB4YTUsIDB4MTksIDB4M2MsIDB4MTQsIDB4M2UsCisgMHg3YSwgMHg1YiwgMHgwMywgMHhmYSwgMHhjMSwgMHgzMiwgMHhiNywgMHhlOCwgMHg5ZSwgMHg2ZCwgMHhjZCwgMHg4ZiwgMHg0YywKKyAweDgyLCAweGM5LCAweGIyLCAweDg0LCAweDUyLCAweDMyLCAweDljLCAweDI2LCAweDBkLCAweDMwLCAweGJjLCAweDM5LCAweGIzLAorIDB4ODEsIDB4NmIsIDB4N2MsIDB4NDYsIDB4YjQsIDB4MWIsIDB4MzcsIDB4YjQsIDB4ODUsIDB4MGQsIDB4MmEsIDB4ZTcsIDB4NGUsCisgMHg3MiwgMHg5ZiwgMHg5OSwgMHhjNiwgMHg2MiwgMHgxZiwgMHhiYiwgMHhlMiwgMHhlNCwgMHg2OCwgMHg3Mn0sCisgMTI4LCAxMjgsCit7MHhiYSwgMHg3OCwgMHgxNiwgMHhiZiwgMHg4ZiwgMHgwMSwgMHhjZiwgMHhlYSwgMHg0MSwgMHg0MSwgMHg0MCwgMHhkZSwgMHg1ZCwKKyAweGFlLCAweDIyLCAweDIzLCAweGIwLCAweDAzLCAweDYxLCAweGEzLCAweDk2LCAweDE3LCAweDdhLCAweDljLCAweGI0LCAweDEwLAorIDB4ZmYsIDB4NjEsIDB4ZjIsIDB4MDAsIDB4MTUsIDB4YWR9LAorIDMyLCAxMDI0LCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKKworeyJUZXN0IHBzYV9hc3ltbWV0cmljX2RlY3J5cHQgLSBJbnZhbGlkIGtleSB0eXBlIChBRVMgS2V5KVxuIiwgNywgUFNBX0tFWV9UWVBFX0FFUywKK3sweDMwLCAweDgyLCAweDAyLCAweDVlLCAweDAyLCAweDAxLCAweDAwLCAweDAyLCAweDgxLCAweDgxLCAweDAwLCAweGFmLCAweDA1LAorIDB4N2QsIDB4MzksIDB4NmV9LCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X0NSWVBULAorezB9LCAwLAorezB4OTksIDB4ZmYsIDB4ZGUsIDB4MmYsIDB4Y2MsIDB4MDAsIDB4YzksIDB4Y2MsIDB4MDEsIDB4OTcsIDB4MmUsIDB4YmYsIDB4YTcsCisgMHg3NywgMHg5YiwgMHgyOSwgMHg4ZCwgMHhiYiwgMHhhZiwgMHg3ZiwgMHg1MCwgMHg3MCwgMHg3YSwgMHg3NCwgMHgwNSwgMHgyOSwKKyAweDZkLCAweGQyLCAweDc4LCAweDM0LCAweDU2LCAweGZjLCAweDc5LCAweDIwLCAweDAyLCAweGY0LCAweDYyLCAweGU3LCAweDYwLAorIDB4NTAsIDB4MGUsIDB4MDIsIDB4YWYsIDB4YTIsIDB4NWEsIDB4ODUsIDB4OWEsIDB4Y2UsIDB4ODcsIDB4MDEsIDB4Y2IsIDB4NWQsCisgMHgzYiwgMHgwMiwgMHg2MiwgMHgxMSwgMHg2NCwgMHgzMSwgMHhjNCwgMHgzYSwgMHhmOCwgMHhlYiwgMHgwOCwgMHhmNSwgMHhhOCwKKyAweDgzLCAweDAxLCAweDA1LCAweDdjLCAweGYxLCAweGMxLCAweDU2LCAweGEyLCAweGE1LCAweDE5LCAweDNjLCAweDE0LCAweDNlLAorIDB4N2EsIDB4NWIsIDB4MDMsIDB4ZmEsIDB4YzEsIDB4MzIsIDB4YjcsIDB4ZTgsIDB4OWUsIDB4NmQsIDB4Y2QsIDB4OGYsIDB4NGMsCisgMHg4MiwgMHhjOSwgMHhiMiwgMHg4NCwgMHg1MiwgMHgzMiwgMHg5YywgMHgyNiwgMHgwZCwgMHgzMCwgMHhiYywgMHgzOSwgMHhiMywKKyAweDgxLCAweDZiLCAweDdjLCAweDQ2LCAweGI0LCAweDFiLCAweDM3LCAweGI0LCAweDg1LCAweDBkLCAweDJhLCAweGU3LCAweDRlLAorIDB4NzIsIDB4OWYsIDB4OTksIDB4YzYsIDB4NjIsIDB4MWYsIDB4YmIsIDB4ZTIsIDB4ZTQsIDB4NjgsIDB4NzJ9LAorIDEyOCwgMTI4LAorezB4YmEsIDB4NzgsIDB4MTYsIDB4YmYsIDB4OGYsIDB4MDEsIDB4Y2YsIDB4ZWEsIDB4NDEsIDB4NDEsIDB4NDAsIDB4ZGUsIDB4NWQsCisgMHhhZSwgMHgyMiwgMHgyMywgMHhiMCwgMHgwMywgMHg2MSwgMHhhMywgMHg5NiwgMHgxNywgMHg3YSwgMHg5YywgMHhiNCwgMHgxMCwKKyAweGZmLCAweDYxLCAweGYyLCAweDAwLCAweDE1LCAweGFkfSwKKyAzMiwgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCisKK3siVGVzdCBwc2FfYXN5bW1ldHJpY19kZWNyeXB0IC0gSW52YWxpZCB1c2FnZVxuIiwgOCwgUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSLAorezB9LCA2MTAsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQsCit7MH0sIDAsCit7MHg5OSwgMHhmZiwgMHhkZSwgMHgyZiwgMHhjYywgMHgwMCwgMHhjOSwgMHhjYywgMHgwMSwgMHg5NywgMHgyZSwgMHhiZiwgMHhhNywKKyAweDc3LCAweDliLCAweDI5LCAweDhkLCAweGJiLCAweGFmLCAweDdmLCAweDUwLCAweDcwLCAweDdhLCAweDc0LCAweDA1LCAweDI5LAorIDB4NmQsIDB4ZDIsIDB4NzgsIDB4MzQsIDB4NTYsIDB4ZmMsIDB4NzksIDB4MjAsIDB4MDIsIDB4ZjQsIDB4NjIsIDB4ZTcsIDB4NjAsCisgMHg1MCwgMHgwZSwgMHgwMiwgMHhhZiwgMHhhMiwgMHg1YSwgMHg4NSwgMHg5YSwgMHhjZSwgMHg4NywgMHgwMSwgMHhjYiwgMHg1ZCwKKyAweDNiLCAweDAyLCAweDYyLCAweDExLCAweDY0LCAweDMxLCAweGM0LCAweDNhLCAweGY4LCAweGViLCAweDA4LCAweGY1LCAweGE4LAorIDB4ODMsIDB4MDEsIDB4MDUsIDB4N2MsIDB4ZjEsIDB4YzEsIDB4NTYsIDB4YTIsIDB4YTUsIDB4MTksIDB4M2MsIDB4MTQsIDB4M2UsCisgMHg3YSwgMHg1YiwgMHgwMywgMHhmYSwgMHhjMSwgMHgzMiwgMHhiNywgMHhlOCwgMHg5ZSwgMHg2ZCwgMHhjZCwgMHg4ZiwgMHg0YywKKyAweDgyLCAweGM5LCAweGIyLCAweDg0LCAweDUyLCAweDMyLCAweDljLCAweDI2LCAweDBkLCAweDMwLCAweGJjLCAweDM5LCAweGIzLAorIDB4ODEsIDB4NmIsIDB4N2MsIDB4NDYsIDB4YjQsIDB4MWIsIDB4MzcsIDB4YjQsIDB4ODUsIDB4MGQsIDB4MmEsIDB4ZTcsIDB4NGUsCisgMHg3MiwgMHg5ZiwgMHg5OSwgMHhjNiwgMHg2MiwgMHgxZiwgMHhiYiwgMHhlMiwgMHhlNCwgMHg2OCwgMHg3Mn0sCisgMTI4LCAxMjgsCit7MHhiYSwgMHg3OCwgMHgxNiwgMHhiZiwgMHg4ZiwgMHgwMSwgMHhjZiwgMHhlYSwgMHg0MSwgMHg0MSwgMHg0MCwgMHhkZSwgMHg1ZCwKKyAweGFlLCAweDIyLCAweDIzLCAweGIwLCAweDAzLCAweDYxLCAweGEzLCAweDk2LCAweDE3LCAweDdhLCAweDljLCAweGI0LCAweDEwLAorIDB4ZmYsIDB4NjEsIDB4ZjIsIDB4MDAsIDB4MTUsIDB4YWR9LAorIDMyLCAxMDI0LCBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAorfSwKK307CisKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2syW10gPSB7Cit7IlRlc3QgcHNhX2FzeW1tZXRyaWNfZGVjcnlwdCAtIE5lZ2F0aXZlIGNhc2VcbiIsIDEsIFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUiwKK3swfSwgNjEwLCBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X0NSWVBULAorezB9LCAwLAorezB4OTksIDB4ZmYsIDB4ZGUsIDB4MmYsIDB4Y2MsIDB4MDAsIDB4YzksIDB4Y2MsIDB4MDEsIDB4OTcsIDB4MmUsIDB4YmYsIDB4YTcsCisgMHg3NywgMHg5YiwgMHgyOSwgMHg4ZCwgMHhiYiwgMHhhZiwgMHg3ZiwgMHg1MCwgMHg3MCwgMHg3YSwgMHg3NCwgMHgwNSwgMHgyOSwKKyAweDZkLCAweGQyLCAweDc4LCAweDM0LCAweDU2LCAweGZjLCAweDc5LCAweDIwLCAweDAyLCAweGY0LCAweDYyLCAweGU3LCAweDYwLAorIDB4NTAsIDB4MGUsIDB4MDIsIDB4YWYsIDB4YTIsIDB4NWEsIDB4ODUsIDB4OWEsIDB4Y2UsIDB4ODcsIDB4MDEsIDB4Y2IsIDB4NWQsCisgMHgzYiwgMHgwMiwgMHg2MiwgMHgxMSwgMHg2NCwgMHgzMSwgMHhjNCwgMHgzYSwgMHhmOCwgMHhlYiwgMHgwOCwgMHhmNSwgMHhhOCwKKyAweDgzLCAweDAxLCAweDA1LCAweDdjLCAweGYxLCAweGMxLCAweDU2LCAweGEyLCAweGE1LCAweDE5LCAweDNjLCAweDE0LCAweDNlLAorIDB4N2EsIDB4NWIsIDB4MDMsIDB4ZmEsIDB4YzEsIDB4MzIsIDB4YjcsIDB4ZTgsIDB4OWUsIDB4NmQsIDB4Y2QsIDB4OGYsIDB4NGMsCisgMHg4MiwgMHhjOSwgMHhiMiwgMHg4NCwgMHg1MiwgMHgzMiwgMHg5YywgMHgyNiwgMHgwZCwgMHgzMCwgMHhiYywgMHgzOSwgMHhiMywKKyAweDgxLCAweDZiLCAweDdjLCAweDQ2LCAweGI0LCAweDFiLCAweDM3LCAweGI0LCAweDg1LCAweDBkLCAweDJhLCAweGU3LCAweDRlLAorIDB4NzIsIDB4OWYsIDB4OTksIDB4YzYsIDB4NjIsIDB4MWYsIDB4YmIsIDB4ZTIsIDB4ZTQsIDB4NjgsIDB4NzJ9LAorIDEyOCwgMTI4LAorezB4YmEsIDB4NzgsIDB4MTYsIDB4YmYsIDB4OGYsIDB4MDEsIDB4Y2YsIDB4ZWEsIDB4NDEsIDB4NDEsIDB4NDAsIDB4ZGUsIDB4NWQsCisgMHhhZSwgMHgyMiwgMHgyMywgMHhiMCwgMHgwMywgMHg2MSwgMHhhMywgMHg5NiwgMHgxNywgMHg3YSwgMHg5YywgMHhiNCwgMHgxMCwKKyAweGZmLCAweDYxLCAweGYyLCAweDAwLCAweDE1LCAweGFkfSwKKyAzMiwgMTAyNCwgUFNBX1NVQ0NFU1MKK30sCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDAvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDAvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMzZhZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0MC90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzA0MC5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCA0MCkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBhc3ltbWV0cmljIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NyeXB0b19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9jMDQwX2NyeXB0b19saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0ZSRUUpOworICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0MS9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0MS9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FkMDMwMgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQxL3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2MwNDEuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDEvdGVzdF9jMDQxLmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0MS90ZXN0X2MwNDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWVhYWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDEvdGVzdF9jMDQxLmMKQEAgLTAsMCArMSwyMDEgQEAKKworLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzA0MS5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorCitjbGllbnRfdGVzdF90IHRlc3RfYzA0MV9jcnlwdG9fbGlzdFtdID0geworICAgIE5VTEwsCisgICAgcHNhX2FzeW1tZXRyaWNfc2lnbl90ZXN0LAorICAgIHBzYV9hc3ltbWV0cmljX3NpZ25fbmVnYXRpdmVfdGVzdCwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludCAgICAgICAgIGdfdGVzdF9jb3VudCA9IDE7CitzdGF0aWMgdWludDhfdCAgICAgc2lnbmF0dXJlW1NJWkVfMTI4Ql07CisKK2ludDMyX3QgcHNhX2FzeW1tZXRyaWNfc2lnbl90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBpLCBzdGF0dXM7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgKmtleV9kYXRhOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKyAgICBwc2Ffa2V5X3BvbGljeV90ICAgICAgICBwb2xpY3k7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2sxW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgbWVtc2V0KHNpZ25hdHVyZSwgMCwgc2l6ZW9mKHNpZ25hdHVyZSkpOworCisgICAgICAgIC8qIFNldCB0aGUga2V5IGRhdGEgYmFzZWQgb24ga2V5IHR5cGUgKi8KKyAgICAgICAgaWYgKFBTQV9LRVlfVFlQRV9JU19SU0EoY2hlY2sxW2ldLmtleV90eXBlKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNoZWNrMVtpXS5rZXlfdHlwZSA9PSBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMzg0KSkKKyAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMzg0X2tleXBhaXI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygyNTYpKQorICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IHJzYV8yNTZfa2V5cGFpcjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCA9PSBCWVRFU19UT19CSVRTKDEyOCkpCisgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzEyOF9rZXlwYWlyOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygzODQpKQorICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IHJzYV8zODRfa2V5ZGF0YTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCA9PSBCWVRFU19UT19CSVRTKDI1NikpCisgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzI1Nl9rZXlkYXRhOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMTI4KSkKKyAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMTI4X2tleWRhdGE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFBTQV9LRVlfVFlQRV9JU19FQ0MoY2hlY2sxW2ldLmtleV90eXBlKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKFBTQV9LRVlfVFlQRV9JU19FQ0NfS0VZUEFJUihjaGVjazFbaV0ua2V5X3R5cGUpKQorICAgICAgICAgICAgICAgIGtleV9kYXRhID0gZWNfa2V5cGFpcjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IGVjX2tleWRhdGE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAga2V5X2RhdGEgPSBjaGVjazFbaV0ua2V5X2RhdGE7CisKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazFbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9sZW5ndGgsICZjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfdHlwZSwga2V5X2RhdGEsIGNoZWNrMVtpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgLyogU2lnbiBhIGhhc2ggb3Igc2hvcnQgbWVzc2FnZSB3aXRoIGEgcHJpdmF0ZSBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BU1lNTVRFUklDX1NJR04sIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZywgY2hlY2sxW2ldLmlucHV0LCBjaGVjazFbaV0uaW5wdXRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIGNoZWNrMVtpXS5zaWduYXR1cmVfc2l6ZSwgJmxlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBDaGVjayBpZiB0aGUgb3V0cHV0IGxlbmd0aCBtYXRjaGVzIHdpdGggdGhlIGV4cGVjdGVkIGxlbmd0aCAqLworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChsZW5ndGgsIGNoZWNrMVtpXS5leHBlY3RlZF9zaWduYXR1cmVfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgICAgICAvKiBDaGVjayBpZiB0aGUgb3V0cHV0IG1hdGNoZXMgd2l0aCB0aGUgZXhwZWN0ZWQgZGF0YSAqLworICAgICAgICBURVNUX0FTU0VSVF9NRU1DTVAoc2lnbmF0dXJlLCBjaGVjazFbaV0uZXhwZWN0ZWRfc2lnbmF0dXJlLCBsZW5ndGgsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworICAgIH0KKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3QgcHNhX2FzeW1tZXRyaWNfc2lnbl9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2syKS9zaXplb2YoY2hlY2syWzBdKTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBpLCBzdGF0dXM7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgbGVuZ3RoOworICAgIHBzYV9rZXlfcG9saWN5X3QgICAgICAgIHBvbGljeTsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCisgICAgeworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIEludmFsaWQga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgICAgIC8qIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazJbaV0udXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIEludmFsaWQga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBTaWduIGEgaGFzaCBvciBzaG9ydCBtZXNzYWdlIHdpdGggYSBwcml2YXRlIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FTWU1NVEVSSUNfU0lHTiwgY2hlY2syW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnLCBjaGVjazJbaV0uaW5wdXQsIGNoZWNrMltpXS5pbnB1dF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwgY2hlY2syW2ldLnNpZ25hdHVyZV9zaXplLCAmbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfYXN5bW1ldHJpY19zaWduIC0gemVybyBhcyBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIC8qIFNpZ24gYSBoYXNoIG9yIHNob3J0IG1lc3NhZ2Ugd2l0aCBhIHByaXZhdGUga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQVNZTU1URVJJQ19TSUdOLCAwLAorICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2FsZywgY2hlY2syW2ldLmlucHV0LCBjaGVjazJbaV0uaW5wdXRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIGNoZWNrMltpXS5zaWduYXR1cmVfc2l6ZSwgJmxlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIEVtcHR5IGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazJbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9sZW5ndGgsICZjaGVjazJbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2syW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgICAgICAvKiBTaWduIGEgaGFzaCBvciBzaG9ydCBtZXNzYWdlIHdpdGggYSBwcml2YXRlIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FTWU1NVEVSSUNfU0lHTiwgY2hlY2syW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnLCBjaGVjazJbaV0uaW5wdXQsIGNoZWNrMltpXS5pbnB1dF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwgY2hlY2syW2ldLnNpZ25hdHVyZV9zaXplLCAmbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRU1QVFlfU0xPVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDEvdGVzdF9jMDQxLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0MS90ZXN0X2MwNDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWY4MDc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDEvdGVzdF9jMDQxLmgKQEAgLTAsMCArMSwzMSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfQzA0MV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfQzA0MV9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzA0MSkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9jMDQxX2NyeXB0b19saXN0W107CisKK2ludDMyX3QgcHNhX2FzeW1tZXRyaWNfc2lnbl90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKK2ludDMyX3QgcHNhX2FzeW1tZXRyaWNfc2lnbl9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKKyNlbmRpZiAvKiBfVEVTVF9DMDQxX0NMSUVOVF9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDEvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0MS90ZXN0X2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDc3YTMzCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDEvdGVzdF9kYXRhLmgKQEAgLTAsMCArMSwyODkgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbNzVdOworICAgIHBzYV9rZXlfaGFuZGxlX3QgICAgICAgIGtleV9oYW5kbGU7CisgICAgcHNhX2tleV90eXBlX3QgICAgICAgICAga2V5X3R5cGU7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAga2V5X2RhdGFbMTZdOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGtleV9sZW5ndGg7CisgICAgcHNhX2tleV91c2FnZV90ICAgICAgICAgdXNhZ2U7CisgICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAga2V5X2FsZzsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBpbnB1dFszMl07CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgaW5wdXRfbGVuZ3RoOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZV9zaXplOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3NpZ25hdHVyZVsxMjhdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3NpZ25hdHVyZV9sZW5ndGg7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYml0X2xlbmd0aDsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXM7Cit9IHRlc3RfZGF0YTsKKworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlwYWlyWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzM4NF9rZXlkYXRhWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzI1Nl9rZXlwYWlyWzFdOworc3RhdGljIHVpbnQ4X3QgcnNhXzI1Nl9rZXlkYXRhWzFdOworc3RhdGljIHVpbnQ4X3QgZWNfa2V5ZGF0YVsxXTsKKworc3RhdGljIHVpbnQ4X3QgZWNfa2V5cGFpcltdID0geworIDB4MzAsIDB4NzgsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MjEsIDB4MDAsIDB4YWIsIDB4NDUsIDB4NDMsIDB4NTcsIDB4MTIsIDB4NjQsCisgMHg5YywgMHhiMywgMHgwYiwgMHhiZCwgMHhkYSwgMHhjNCwgMHg5MSwgMHg5NywgMHhlZSwgMHhiZiwgMHgyNywgMHg0MCwgMHhmZiwgMHhjNywKKyAweGY4LCAweDc0LCAweGQ5LCAweDI0LCAweDRjLCAweDM0LCAweDYwLCAweGY1LCAweDRmLCAweDMyLCAweDJkLCAweDNhLCAweGEwLCAweDBhLAorIDB4MDYsIDB4MDgsIDB4MmEsIDB4ODYsIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDMsIDB4MDEsIDB4MDcsIDB4YTEsIDB4NDQsIDB4MDMsIDB4NDIsCisgMHgwMCwgMHgwNCwgMHhkZSwgMHhhNSwgMHhlNCwgMHg1ZCwgMHgwZSwgMHhhMywgMHg3ZiwgMHhjNSwgMHg2NiwgMHgyMywgMHgyYSwgMHg1MCwKKyAweDhmLCAweDRhLCAweGQyLCAweDBlLCAweGExLCAweDNkLCAweDQ3LCAweGU0LCAweGJmLCAweDVmLCAweGE0LCAweGQ1LCAweDRhLCAweDU3LAorIDB4YTAsIDB4YmEsIDB4MDEsIDB4MjAsIDB4NDIsIDB4MDgsIDB4NzAsIDB4OTcsIDB4NDksIDB4NmUsIDB4ZmMsIDB4NTgsIDB4M2YsIDB4ZWQsCisgMHg4YiwgMHgyNCwgMHhhNSwgMHhiOSwgMHhiZSwgMHg5YSwgMHg1MSwgMHhkZSwgMHgwNiwgMHgzZiwgMHg1YSwgMHgwMCwgMHhhOCwgMHhiNiwKKyAweDk4LCAweGExLCAweDZmLCAweGQ3LCAweGYyLCAweDliLCAweDU0LCAweDg1LCAweGYzLCAweDIwfTsKKworc3RhdGljIHVpbnQ4X3QgcnNhXzEyOF9rZXlkYXRhW10gPSB7CisgMHgzMCwgMHg4MSwgMHg5ZiwgMHgzMCwgMHgwZCwgMHgwNiwgMHgwOSwgMHgyYSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhmNywgMHgwZCwKKyAweDAxLCAweDAxLCAweDAxLCAweDA1LCAweDAwLCAweDAzLCAweDgxLCAweDhkLCAweDAwLCAweDMwLCAweDgxLCAweDg5LCAweDAyLAorIDB4ODEsIDB4ODEsIDB4MDAsIDB4YWYsIDB4MDUsIDB4N2QsIDB4MzksIDB4NmUsIDB4ZTgsIDB4NGYsIDB4YjcsIDB4NWYsIDB4ZGIsCisgMHhiNSwgMHhjMiwgMHhiMSwgMHgzYywgMHg3ZiwgMHhlNSwgMHhhNiwgMHg1NCwgMHhhYSwgMHg4YSwgMHhhMiwgMHg0NywgMHgwYiwKKyAweDU0LCAweDFlLCAweGUxLCAweGZlLCAweGIwLCAweGIxLCAweDJkLCAweDI1LCAweGM3LCAweDk3LCAweDExLCAweDUzLCAweDEyLAorIDB4NDksIDB4ZTEsIDB4MTIsIDB4OTYsIDB4MjgsIDB4MDQsIDB4MmQsIDB4YmIsIDB4YjYsIDB4YzEsIDB4MjAsIDB4ZDEsIDB4NDQsCisgMHgzNSwgMHgyNCwgMHhlZiwgMHg0YywgMHgwZSwgMHg2ZSwgMHgxZCwgMHg4OSwgMHg1NiwgMHhlZSwgMHhiMiwgMHgwNywgMHg3YSwKKyAweGYxLCAweDIzLCAweDQ5LCAweGRkLCAweGVlLCAweGU1LCAweDQ0LCAweDgzLCAweGJjLCAweDA2LCAweGMyLCAweGM2LCAweDE5LAorIDB4NDgsIDB4Y2QsIDB4MDIsIDB4YjIsIDB4MDIsIDB4ZTcsIDB4OTYsIDB4YWUsIDB4YmQsIDB4OTQsIDB4ZDMsIDB4YTcsIDB4Y2IsCisgMHhmOCwgMHg1OSwgMHhjMiwgMHhjMSwgMHg4MSwgMHg5YywgMHgzMiwgMHg0YywgMHhiOCwgMHgyYiwgMHg5YywgMHhkMywgMHg0ZSwKKyAweGRlLCAweDI2LCAweDNhLCAweDJhLCAweGJmLCAweGZlLCAweDQ3LCAweDMzLCAweGYwLCAweDc3LCAweDg2LCAweDllLCAweDg2LAorIDB4NjAsIDB4ZjcsIDB4ZDYsIDB4ODMsIDB4NGQsIDB4YTUsIDB4M2QsIDB4NjksIDB4MGUsIDB4ZjcsIDB4OTgsIDB4NWYsIDB4NmIsCisgMHhjMywgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMX07CisKK3N0YXRpYyB1aW50OF90IHJzYV8xMjhfa2V5cGFpcltdID0geworMHgzMCwgMHg4MiwgMHgwMiwgMHg1ZSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhhZiwgMHgwNSwKKzB4N2QsIDB4MzksIDB4NmUsIDB4ZTgsIDB4NGYsIDB4YjcsIDB4NWYsIDB4ZGIsIDB4YjUsIDB4YzIsIDB4YjEsIDB4M2MsIDB4N2YsCisweGU1LCAweGE2LCAweDU0LCAweGFhLCAweDhhLCAweGEyLCAweDQ3LCAweDBiLCAweDU0LCAweDFlLCAweGUxLCAweGZlLCAweGIwLAorMHhiMSwgMHgyZCwgMHgyNSwgMHhjNywgMHg5NywgMHgxMSwgMHg1MywgMHgxMiwgMHg0OSwgMHhlMSwgMHgxMiwgMHg5NiwgMHgyOCwKKzB4MDQsIDB4MmQsIDB4YmIsIDB4YjYsIDB4YzEsIDB4MjAsIDB4ZDEsIDB4NDQsIDB4MzUsIDB4MjQsIDB4ZWYsIDB4NGMsIDB4MGUsCisweDZlLCAweDFkLCAweDg5LCAweDU2LCAweGVlLCAweGIyLCAweDA3LCAweDdhLCAweGYxLCAweDIzLCAweDQ5LCAweGRkLCAweGVlLAorMHhlNSwgMHg0NCwgMHg4MywgMHhiYywgMHgwNiwgMHhjMiwgMHhjNiwgMHgxOSwgMHg0OCwgMHhjZCwgMHgwMiwgMHhiMiwgMHgwMiwKKzB4ZTcsIDB4OTYsIDB4YWUsIDB4YmQsIDB4OTQsIDB4ZDMsIDB4YTcsIDB4Y2IsIDB4ZjgsIDB4NTksIDB4YzIsIDB4YzEsIDB4ODEsCisweDljLCAweDMyLCAweDRjLCAweGI4LCAweDJiLCAweDljLCAweGQzLCAweDRlLCAweGRlLCAweDI2LCAweDNhLCAweDJhLCAweGJmLAorMHhmZSwgMHg0NywgMHgzMywgMHhmMCwgMHg3NywgMHg4NiwgMHg5ZSwgMHg4NiwgMHg2MCwgMHhmNywgMHhkNiwgMHg4MywgMHg0ZCwKKzB4YTUsIDB4M2QsIDB4NjksIDB4MGUsIDB4ZjcsIDB4OTgsIDB4NWYsIDB4NmIsIDB4YzMsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsCisweDAxLCAweDAyLCAweDgxLCAweDgxLCAweDAwLCAweDg3LCAweDRiLCAweGYwLCAweGZmLCAweGMyLCAweGYyLCAweGE3LCAweDFkLAorMHgxNCwgMHg2NywgMHgxZCwgMHhkZCwgMHgwMSwgMHg3MSwgMHhjOSwgMHg1NCwgMHhkNywgMHhmZCwgMHhiZiwgMHg1MCwgMHgyOCwKKzB4MWUsIDB4NGYsIDB4NmQsIDB4OTksIDB4ZWEsIDB4MGUsIDB4MWUsIDB4YmMsIDB4ZjgsIDB4MmYsIDB4YWEsIDB4NTgsIDB4ZTcsCisweGI1LCAweDk1LCAweGZmLCAweGIyLCAweDkzLCAweGQxLCAweGFiLCAweGUxLCAweDdmLCAweDExLCAweDBiLCAweDM3LCAweGM0LAorMHg4YywgMHhjMCwgMHhmMywgMHg2YywgMHgzNywgMHhlOCwgMHg0ZCwgMHg4NywgMHg2NiwgMHgyMSwgMHhkMywgMHgyNywgMHhmNiwKKzB4NGIsIDB4YmUsIDB4MDgsIDB4NDUsIDB4N2QsIDB4M2UsIDB4YzQsIDB4MDksIDB4OGIsIDB4YTIsIDB4ZmEsIDB4MGEsIDB4MzEsCisweDlmLCAweGJhLCAweDQxLCAweDFjLCAweDI4LCAweDQxLCAweGVkLCAweDdiLCAweGU4LCAweDMxLCAweDk2LCAweGE4LCAweGNkLAorMHhmOSwgMHhkYSwgMHhhNSwgMHhkMCwgMHgwNiwgMHg5NCwgMHhiYywgMHgzMywgMHg1ZiwgMHhjNCwgMHhjMywgMHgyMiwgMHgxNywKKzB4ZmUsIDB4MDQsIDB4ODgsIDB4YmMsIDB4ZTksIDB4Y2IsIDB4NzIsIDB4MDIsIDB4ZTUsIDB4OTQsIDB4NjgsIDB4YjEsIDB4ZWEsCisweGQxLCAweDE5LCAweDAwLCAweDA0LCAweDc3LCAweGRiLCAweDJjLCAweGE3LCAweDk3LCAweGZhLCAweGMxLCAweDllLCAweGRhLAorMHgzZiwgMHg1OCwgMHhjMSwgMHgwMiwgMHg0MSwgMHgwMCwgMHhlMiwgMHhhYiwgMHg3NiwgMHgwOCwgMHg0MSwgMHhiYiwgMHg5ZCwKKzB4MzAsIDB4YTgsIDB4MWQsIDB4MjIsIDB4MmQsIDB4ZTEsIDB4ZWIsIDB4NzMsIDB4ODEsIDB4ZDgsIDB4MjIsIDB4MTQsIDB4NDAsCisweDdmLCAweDFiLCAweDk3LCAweDVjLCAweGJiLCAweGZlLCAweDRlLCAweDFhLCAweDk0LCAweDY3LCAweGZkLCAweDk4LCAweGFkLAorMHhiZCwgMHg3OCwgMHhmNiwgMHgwNywgMHg4MywgMHg2YywgMHhhNSwgMHhiZSwgMHgxOSwgMHgyOCwgMHhiOSwgMHhkMSwgMHg2MCwKKzB4ZDksIDB4N2YsIDB4ZDQsIDB4NWMsIDB4MTIsIDB4ZDYsIDB4YjUsIDB4MmUsIDB4MmMsIDB4OTgsIDB4NzEsIDB4YTEsIDB4NzQsCisweGM2LCAweDZiLCAweDQ4LCAweDgxLCAweDEzLCAweDAyLCAweDQxLCAweDAwLCAweGM1LCAweGFiLCAweDI3LCAweDYwLCAweDIxLAorMHg1OSwgMHhhZSwgMHg3ZCwgMHg2ZiwgMHgyMCwgMHhjMywgMHhjMiwgMHhlZSwgMHg4NSwgMHgxZSwgMHg0NiwgMHhkYywgMHgxMSwKKzB4MmUsIDB4NjgsIDB4OWUsIDB4MjgsIDB4ZDUsIDB4ZmMsIDB4YmIsIDB4ZjksIDB4OTAsIDB4YTksIDB4OWUsIDB4ZjgsIDB4YTksCisweDBiLCAweDhiLCAweGI0LCAweDRmLCAweGQzLCAweDY0LCAweDY3LCAweGU3LCAweGZjLCAweDE3LCAweDg5LCAweGNlLCAweGI2LAorMHg2MywgMHhhYiwgMHhkYSwgMHgzMywgMHg4NiwgMHg1MiwgMHhjMywgMHhjNywgMHgzZiwgMHgxMSwgMHgxNywgMHg3NCwgMHg5MCwKKzB4MmUsIDB4ODQsIDB4MDUsIDB4NjUsIDB4OTIsIDB4NzAsIDB4OTEsIDB4MDIsIDB4NDEsIDB4MDAsIDB4YjYsIDB4Y2QsIDB4YmQsCisweDM1LCAweDRmLCAweDdkLCAweGY1LCAweDc5LCAweGE2LCAweDNiLCAweDQ4LCAweGIzLCAweDY0LCAweDNlLCAweDM1LCAweDNiLAorMHg4NCwgMHg4OSwgMHg4NywgMHg3NywgMHhiNCwgMHg4YiwgMHgxNSwgMHhmOSwgMHg0ZSwgMHgwYiwgMHhmYywgMHgwNSwgMHg2NywKKzB4YTYsIDB4YWUsIDB4NTksIDB4MTEsIDB4ZDUsIDB4N2EsIDB4ZDYsIDB4NDAsIDB4OWMsIDB4ZjcsIDB4NjQsIDB4N2IsIDB4ZjksCisweDYyLCAweDY0LCAweGU5LCAweGJkLCAweDg3LCAweGViLCAweDk1LCAweGUyLCAweDYzLCAweGI3LCAweDExLCAweDBiLCAweDlhLAorMHgxZiwgMHg5ZiwgMHg5NCwgMHhhYywgMHhjZSwgMHhkMCwgMHhmYSwgMHhmYSwgMHg0ZCwgMHgwMiwgMHg0MCwgMHg3MSwgMHgxOSwKKzB4NWUsIDB4ZWMsIDB4MzcsIDB4ZTgsIDB4ZDIsIDB4NTcsIDB4ZGUsIDB4Y2YsIDB4YzYsIDB4NzIsIDB4YjAsIDB4N2EsIDB4ZTYsCisweDM5LCAweGYxLCAweDBjLCAweGJiLCAweDliLCAweDBjLCAweDczLCAweDlkLCAweDBjLCAweDgwLCAweDk5LCAweDY4LCAweGQ2LAorMHg0NCwgMHhhOSwgMHg0ZSwgMHgzZiwgMHhkNiwgMHhlZCwgMHg5MiwgMHg4NywgMHgwNywgMHg3YSwgMHgxNCwgMHg1OCwgMHgzZiwKKzB4MzcsIDB4OTAsIDB4NTgsIDB4ZjcsIDB4NmEsIDB4OGEsIDB4ZWMsIDB4ZDQsIDB4M2MsIDB4NjIsIDB4ZGMsIDB4OGMsIDB4MGYsCisweDQxLCAweDc2LCAweDY2LCAweDUwLCAweGQ3LCAweDI1LCAweDI3LCAweDVhLCAweGM0LCAweGExLCAweDAyLCAweDQxLCAweDAwLAorMHhiYiwgMHgzMiwgMHhkMSwgMHgzMywgMHhlZCwgMHhjMiwgMHhlMCwgMHg0OCwgMHhkNCwgMHg2MywgMHgzOCwgMHg4YiwgMHg3YiwKKzB4ZTksIDB4Y2IsIDB4NGIsIDB4ZTIsIDB4OWYsIDB4NGIsIDB4NjIsIDB4NTAsIDB4YmUsIDB4NjAsIDB4M2UsIDB4NzAsIDB4ZTMsCisweDY0LCAweDc1LCAweDAxLCAweGM5LCAweDdkLCAweGRkLCAweGUyLCAweDBhLCAweDRlLCAweDcxLCAweGJlLCAweDk1LCAweGZkLAorMHg1ZSwgMHg3MSwgMHg3OCwgMHg0ZSwgMHgyNSwgMHhhYywgMHhhNCwgMHhiYSwgMHhmMiwgMHg1YiwgMHhlNSwgMHg3MywgMHg4YSwKKzB4YWUsIDB4NTksIDB4YmIsIDB4ZmUsIDB4MWMsIDB4OTksIDB4NzcsIDB4ODEsIDB4NDQsIDB4N2EsIDB4MmIsIDB4MjR9OworCitzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0geworeyJUZXN0IHBzYV9hc3ltbWV0cmljX3NpZ24gLSBSU0EgS0VZUEFJUiBQS0NTMVYxNSBSQVdcbiIsIDEsIFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUiwKK3swfSwgNjEwLCBQU0FfS0VZX1VTQUdFX1NJR04sIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fUkFXLAorezB4NjEsIDB4NjIsIDB4NjN9LCAzLCAxMjgsCit7MHgyYywgMHg3NywgMHg0NCwgMHg5OCwgMHgzZiwgMHgwMiwgMHgzYSwgMHhjNywgMHhiYiwgMHgxYywgMHg1NSwgMHg1MiwgMHg5ZCwKKyAweDgzLCAweGVkLCAweDExLCAweGE3LCAweDZhLCAweDc4LCAweDk4LCAweGExLCAweGJiLCAweDVjLCAweGUxLCAweDkxLCAweDM3LAorIDB4NWEsIDB4NGEsIDB4YTcsIDB4NDksIDB4NWEsIDB4NjMsIDB4M2QsIDB4MjcsIDB4ODcsIDB4OWYsIDB4ZjUsIDB4OGUsIDB4YmEsCisgMHg1YSwgMHg1NywgMHgzNywgMHgxYywgMHgzNCwgMHhmZSwgMHhiMSwgMHgxOCwgMHgwZSwgMHg4YiwgMHg4NSwgMHgwZCwgMHg1NSwKKyAweDI0LCAweDc2LCAweGViLCAweGI1LCAweDYzLCAweDRkLCAweGY2LCAweDIwLCAweDI2LCAweDE5LCAweDkyLCAweGYxLCAweDJlLAorIDB4YmUsIDB4ZTksIDB4MDksIDB4NzAsIDB4NDEsIDB4ZGIsIDB4YmUsIDB4YTgsIDB4NWEsIDB4NDIsIDB4ZDQsIDB4NWIsIDB4MzQsCisgMHg0YiwgMHhlNSwgMHgwNywgMHgzYywgMHhlYiwgMHg3NywgMHgyZiwgMHhmYywgMHg2MCwgMHg0OSwgMHg1NCwgMHhiOSwgMHgxNSwKKyAweDhiLCAweGE4LCAweDFlLCAweGMzLCAweGRjLCAweDRkLCAweDlkLCAweDY1LCAweGUzLCAweGFiLCAweDdhLCAweGEzLCAweDE4LAorIDB4MTYsIDB4NWYsIDB4MzgsIDB4YzMsIDB4NmYsIDB4ODQsIDB4MWYsIDB4MWMsIDB4NjksIDB4Y2IsIDB4MWMsIDB4ZmEsIDB4NDksCisgMHg0YSwgMHhhNSwgMHhjYiwgMHhiNCwgMHhkNiwgMHhjMCwgMHhlZiwgMHhiYSwgMHhmYiwgMHgwNCwgMHgzYX0sCisgMTI4LCAxMDI0LCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9hc3ltbWV0cmljX3NpZ24gLSBSU0EgS0VZUEFJUiBQS0NTMVYxNSBTSEEtMjU2XG4iLCAyLCBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIsCit7MH0sIDYxMCwgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOKFBTQV9BTEdfU0hBXzI1NiksCit7MHhiYSwgMHg3OCwgMHgxNiwgMHhiZiwgMHg4ZiwgMHgwMSwgMHhjZiwgMHhlYSwgMHg0MSwgMHg0MSwgMHg0MCwgMHhkZSwgMHg1ZCwKKyAweGFlLCAweDIyLCAweDIzLCAweGIwLCAweDAzLCAweDYxLCAweGEzLCAweDk2LCAweDE3LCAweDdhLCAweDljLCAweGI0LCAweDEwLAorIDB4ZmYsIDB4NjEsIDB4ZjIsIDB4MDAsIDB4MTUsIDB4YWR9LCAzMiwgMTI4LAorezB4YTcsIDB4MzYsIDB4NjQsIDB4ZDUsIDB4NWIsIDB4MzksIDB4YzcsIDB4ZWEsIDB4NmMsIDB4MWUsIDB4NWIsIDB4NTAsIDB4MTEsCisgMHg3MiwgMHg0YSwgMHgxMSwgMHhlMSwgMHhkNywgMHgwNywgMHgzZCwgMHgzYSwgMHg2OCwgMHhmNCwgMHg4YywgMHg4MywgMHg2ZiwKKyAweGFkLCAweDE1LCAweDNhLCAweDFkLCAweDkxLCAweGI2LCAweGFiLCAweGRiLCAweGM4LCAweGY2LCAweDlkLCAweGExLCAweDNiLAorIDB4MjAsIDB4NmMsIDB4YzksIDB4NmEsIDB4ZjYsIDB4MzYsIDB4M2IsIDB4MTEsIDB4NDQsIDB4NTgsIDB4YjAsIDB4MjYsIDB4YWYsCisgMHgxNCwgMHhiMiwgMHg0ZiwgMHhhYiwgMHg4OSwgMHgyOSwgMHhlZCwgMHg2MywgMHg0YywgMHg2YSwgMHgyYSwgMHhjYSwgMHhjZSwKKyAweDBiLCAweGNjLCAweDYyLCAweGQ5LCAweGJiLCAweDZhLCAweDk4LCAweDRhLCAweGZiLCAweGNiLCAweGZjLCAweGQzLCAweGEwLAorIDB4NjAsIDB4OGQsIDB4MzIsIDB4YTIsIDB4YmEsIDB4ZTUsIDB4MzUsIDB4YjksIDB4Y2QsIDB4MWUsIDB4Y2QsIDB4ZjksIDB4ZGQsCisgMHgyOCwgMHgxZCwgMHhiMSwgMHhlMCwgMHgwMiwgMHg1YywgMHgzYiwgMHhmYiwgMHg1NSwgMHgxMiwgMHg5NiwgMHgzZSwgMHhjMywKKyAweGI5LCAweDhkLCAweGRhLCAweGE2LCAweDllLCAweDM4LCAweGJjLCAweDNjLCAweDg0LCAweGIxLCAweGI2LCAweDFhLCAweDA0LAorIDB4ZTUsIDB4NjQsIDB4ODYsIDB4NDAsIDB4ODUsIDB4NmEsIDB4YWMsIDB4YzYsIDB4ZmMsIDB4NzMsIDB4MTF9LAorIDEyOCwgMTAyNCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfYXN5bW1ldHJpY19zaWduIC0gRUNEU0EgU0VDUDI1NlIxIFNIQS0yNTZcbiIsIDMsCisgUFNBX0tFWV9UWVBFX0VDQ19LRVlQQUlSKFBTQV9FQ0NfQ1VSVkVfU0VDUDI1NlIxKSwgezB9LCAxMjIsCisgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EoUFNBX0FMR19TSEFfMjU2KSwKK3sweDlhLCAweGM0LCAweDMzLCAweDViLCAweDQ2LCAweDliLCAweGJkLCAweDc5LCAweDE0LCAweDM5LCAweDI0LCAweDg1LCAweDA0LAorIDB4ZGQsIDB4MGQsIDB4NDksIDB4YzcsIDB4MTMsIDB4NDksIDB4YTIsIDB4OTUsIDB4ZmUsIDB4ZTUsIDB4YTEsIDB4YzYsIDB4ODUsCisgMHgwNywgMHhmNCwgMHg1YSwgMHg5ZSwgMHgxYywgMHg3Yn0sIDMyLCAxMjgsCit7MHg2YSwgMHgzMywgMHg5OSwgMHhmNiwgMHg5NCwgMHgyMSwgMHhmZiwgMHhlMSwgMHg0OSwgMHgwMywgMHg3NywgMHhhZCwgMHhmMiwKKyAweGVhLCAweDFmLCAweDExLCAweDdkLCAweDgxLCAweGE2LCAweDNjLCAweGY1LCAweGJmLCAweDIyLCAweGU5LCAweDE4LCAweGQ1LAorIDB4MTEsIDB4NzUsIDB4ZWIsIDB4MjUsIDB4OTEsIDB4NTEsIDB4Y2UsIDB4OTUsIDB4ZDcsIDB4YzIsIDB4NmMsIDB4YzAsIDB4NGUsCisgMHgyNSwgMHg1MCwgMHgzZSwgMHgyZiwgMHg3YSwgMHgxZSwgMHhjMywgMHg1NywgMHgzZSwgMHgzYywgMHgyNCwgMHgxMiwgMHg1MywKKyAweDRiLCAweGI0LCAweGExLCAweDliLCAweDNhLCAweDc4LCAweDExLCAweDc0LCAweDJmLCAweDQ5LCAweGY1LCAweDBmfSwKKyA2NCwgNTEyLCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9hc3ltbWV0cmljX3NpZ24gLSBJbnZhbGlkIGtleSB0eXBlIChSU0EgcHVibGljIGtleSlcbiIsIDQsCitQU0FfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVksCit7MH0sIDE2MiwgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOKFBTQV9BTEdfU0hBXzI1NiksCit7MHhiYSwgMHg3OCwgMHgxNiwgMHhiZiwgMHg4ZiwgMHgwMSwgMHhjZiwgMHhlYSwgMHg0MSwgMHg0MSwgMHg0MCwgMHhkZSwgMHg1ZCwKKyAweGFlLCAweDIyLCAweDIzLCAweGIwLCAweDAzLCAweDYxLCAweGEzLCAweDk2LCAweDE3LCAweDdhLCAweDljLCAweGI0LCAweDEwLAorIDB4ZmYsIDB4NjEsIDB4ZjIsIDB4MDAsIDB4MTUsIDB4YWR9LCAzMiwgMTI4LAorezB4YTcsIDB4MzYsIDB4NjQsIDB4ZDUsIDB4NWIsIDB4MzksIDB4YzcsIDB4ZWEsIDB4NmMsIDB4MWUsIDB4NWIsIDB4NTAsIDB4MTEsCisgMHg3MiwgMHg0YSwgMHgxMSwgMHhlMSwgMHhkNywgMHgwNywgMHgzZCwgMHgzYSwgMHg2OCwgMHhmNCwgMHg4YywgMHg4MywgMHg2ZiwKKyAweGFkLCAweDE1LCAweDNhLCAweDFkLCAweDkxLCAweGI2LCAweGFiLCAweGRiLCAweGM4LCAweGY2LCAweDlkLCAweGExLCAweDNiLAorIDB4MjAsIDB4NmMsIDB4YzksIDB4NmEsIDB4ZjYsIDB4MzYsIDB4M2IsIDB4MTEsIDB4NDQsIDB4NTgsIDB4YjAsIDB4MjYsIDB4YWYsCisgMHgxNCwgMHhiMiwgMHg0ZiwgMHhhYiwgMHg4OSwgMHgyOSwgMHhlZCwgMHg2MywgMHg0YywgMHg2YSwgMHgyYSwgMHhjYSwgMHhjZSwKKyAweDBiLCAweGNjLCAweDYyLCAweGQ5LCAweGJiLCAweDZhLCAweDk4LCAweDRhLCAweGZiLCAweGNiLCAweGZjLCAweGQzLCAweGEwLAorIDB4NjAsIDB4OGQsIDB4MzIsIDB4YTIsIDB4YmEsIDB4ZTUsIDB4MzUsIDB4YjksIDB4Y2QsIDB4MWUsIDB4Y2QsIDB4ZjksIDB4ZGQsCisgMHgyOCwgMHgxZCwgMHhiMSwgMHhlMCwgMHgwMiwgMHg1YywgMHgzYiwgMHhmYiwgMHg1NSwgMHgxMiwgMHg5NiwgMHgzZSwgMHhjMywKKyAweGI5LCAweDhkLCAweGRhLCAweGE2LCAweDllLCAweDM4LCAweGJjLCAweDNjLCAweDg0LCAweGIxLCAweGI2LCAweDFhLCAweDA0LAorIDB4ZTUsIDB4NjQsIDB4ODYsIDB4NDAsIDB4ODUsIDB4NmEsIDB4YWMsIDB4YzYsIDB4ZmMsIDB4NzMsIDB4MTF9LAorIDEyOCwgMTAyNCwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCisKK3siVGVzdCBwc2FfYXN5bW1ldHJpY19zaWduIC0gU21hbGwgb3V0cHV0IGJ1ZmZlclxuIiwgNSwgUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSLAorezB9LCA2MTAsIFBTQV9LRVlfVVNBR0VfU0lHTiwgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTihQU0FfQUxHX1NIQV8yNTYpLAorezB4YmEsIDB4NzgsIDB4MTYsIDB4YmYsIDB4OGYsIDB4MDEsIDB4Y2YsIDB4ZWEsIDB4NDEsIDB4NDEsIDB4NDAsIDB4ZGUsIDB4NWQsCisgMHhhZSwgMHgyMiwgMHgyMywgMHhiMCwgMHgwMywgMHg2MSwgMHhhMywgMHg5NiwgMHgxNywgMHg3YSwgMHg5YywgMHhiNCwgMHgxMCwKKyAweGZmLCAweDYxLCAweGYyLCAweDAwLCAweDE1LCAweGFkfSwgMzIsIDEyMCwKK3sweGE3LCAweDM2LCAweDY0LCAweGQ1LCAweDViLCAweDM5LCAweGM3LCAweGVhLCAweDZjLCAweDFlLCAweDViLCAweDUwLCAweDExLAorIDB4NzIsIDB4NGEsIDB4MTEsIDB4ZTEsIDB4ZDcsIDB4MDcsIDB4M2QsIDB4M2EsIDB4NjgsIDB4ZjQsIDB4OGMsIDB4ODMsIDB4NmYsCisgMHhhZCwgMHgxNSwgMHgzYSwgMHgxZCwgMHg5MSwgMHhiNiwgMHhhYiwgMHhkYiwgMHhjOCwgMHhmNiwgMHg5ZCwgMHhhMSwgMHgzYiwKKyAweDIwLCAweDZjLCAweGM5LCAweDZhLCAweGY2LCAweDM2LCAweDNiLCAweDExLCAweDQ0LCAweDU4LCAweGIwLCAweDI2LCAweGFmLAorIDB4MTQsIDB4YjIsIDB4NGYsIDB4YWIsIDB4ODksIDB4MjksIDB4ZWQsIDB4NjMsIDB4NGMsIDB4NmEsIDB4MmEsIDB4Y2EsIDB4Y2UsCisgMHgwYiwgMHhjYywgMHg2MiwgMHhkOSwgMHhiYiwgMHg2YSwgMHg5OCwgMHg0YSwgMHhmYiwgMHhjYiwgMHhmYywgMHhkMywgMHhhMCwKKyAweDYwLCAweDhkLCAweDMyLCAweGEyLCAweGJhLCAweGU1LCAweDM1LCAweGI5LCAweGNkLCAweDFlLCAweGNkLCAweGY5LCAweGRkLAorIDB4MjgsIDB4MWQsIDB4YjEsIDB4ZTAsIDB4MDIsIDB4NWMsIDB4M2IsIDB4ZmIsIDB4NTUsIDB4MTIsIDB4OTYsIDB4M2UsIDB4YzMsCisgMHhiOSwgMHg4ZCwgMHhkYSwgMHhhNiwgMHg5ZSwgMHgzOCwgMHhiYywgMHgzYywgMHg4NCwgMHhiMSwgMHhiNiwgMHgxYSwgMHgwNCwKKyAweGU1LCAweDY0LCAweDg2LCAweDQwLCAweDg1LCAweDZhLCAweGFjLCAweGM2LCAweGZjLCAweDczLCAweDExfSwKKyAxMjgsIDEwMjQsIFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMCit9LAorCit7IlRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIEludmFsaWQgYWxnb3JpdGhtXG4iLCA2LCBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIsCit7MH0sIDYxMCwgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX1NIQV8yNTYsCit7MHg2MSwgMHg2MiwgMHg2M30sIDMsIDEyOCwKK3sweDJjLCAweDc3LCAweDQ0LCAweDk4LCAweDNmLCAweDAyLCAweDNhLCAweGM3LCAweGJiLCAweDFjLCAweDU1LCAweDUyLCAweDlkLAorIDB4ODMsIDB4ZWQsIDB4MTEsIDB4YTcsIDB4NmEsIDB4NzgsIDB4OTgsIDB4YTEsIDB4YmIsIDB4NWMsIDB4ZTEsIDB4OTEsIDB4MzcsCisgMHg1YSwgMHg0YSwgMHhhNywgMHg0OSwgMHg1YSwgMHg2MywgMHgzZCwgMHgyNywgMHg4NywgMHg5ZiwgMHhmNSwgMHg4ZSwgMHhiYSwKKyAweDVhLCAweDU3LCAweDM3LCAweDFjLCAweDM0LCAweGZlLCAweGIxLCAweDE4LCAweDBlLCAweDhiLCAweDg1LCAweDBkLCAweDU1LAorIDB4MjQsIDB4NzYsIDB4ZWIsIDB4YjUsIDB4NjMsIDB4NGQsIDB4ZjYsIDB4MjAsIDB4MjYsIDB4MTksIDB4OTIsIDB4ZjEsIDB4MmUsCisgMHhiZSwgMHhlOSwgMHgwOSwgMHg3MCwgMHg0MSwgMHhkYiwgMHhiZSwgMHhhOCwgMHg1YSwgMHg0MiwgMHhkNCwgMHg1YiwgMHgzNCwKKyAweDRiLCAweGU1LCAweDA3LCAweDNjLCAweGViLCAweDc3LCAweDJmLCAweGZjLCAweDYwLCAweDQ5LCAweDU0LCAweGI5LCAweDE1LAorIDB4OGIsIDB4YTgsIDB4MWUsIDB4YzMsIDB4ZGMsIDB4NGQsIDB4OWQsIDB4NjUsIDB4ZTMsIDB4YWIsIDB4N2EsIDB4YTMsIDB4MTgsCisgMHgxNiwgMHg1ZiwgMHgzOCwgMHhjMywgMHg2ZiwgMHg4NCwgMHgxZiwgMHgxYywgMHg2OSwgMHhjYiwgMHgxYywgMHhmYSwgMHg0OSwKKyAweDRhLCAweGE1LCAweGNiLCAweGI0LCAweGQ2LCAweGMwLCAweGVmLCAweGJhLCAweGZiLCAweDA0LCAweDNhfSwKKyAxMjgsIDEwMjQsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorCit7IlRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIEludmFsaWQga2V5IHR5cGUgKEFFUyBLZXkpXG4iLCA3LCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MzAsIDB4ODIsIDB4MDIsIDB4NWUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODEsIDB4ODEsIDB4MDAsIDB4YWYsIDB4MDUsCisgMHg3ZCwgMHgzOSwgMHg2ZX0sIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfU0lHTiwKKyBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOKFBTQV9BTEdfU0hBXzI1NiksCit7MHg2MSwgMHg2MiwgMHg2M30sIDMsIDEyOCwKK3sweDJjLCAweDc3LCAweDQ0LCAweDk4LCAweDNmLCAweDAyLCAweDNhLCAweGM3LCAweGJiLCAweDFjLCAweDU1LCAweDUyLCAweDlkLAorIDB4ODMsIDB4ZWQsIDB4MTEsIDB4YTcsIDB4NmEsIDB4NzgsIDB4OTgsIDB4YTEsIDB4YmIsIDB4NWMsIDB4ZTEsIDB4OTEsIDB4MzcsCisgMHg1YSwgMHg0YSwgMHhhNywgMHg0OSwgMHg1YSwgMHg2MywgMHgzZCwgMHgyNywgMHg4NywgMHg5ZiwgMHhmNSwgMHg4ZSwgMHhiYSwKKyAweDVhLCAweDU3LCAweDM3LCAweDFjLCAweDM0LCAweGZlLCAweGIxLCAweDE4LCAweDBlLCAweDhiLCAweDg1LCAweDBkLCAweDU1LAorIDB4MjQsIDB4NzYsIDB4ZWIsIDB4YjUsIDB4NjMsIDB4NGQsIDB4ZjYsIDB4MjAsIDB4MjYsIDB4MTksIDB4OTIsIDB4ZjEsIDB4MmUsCisgMHhiZSwgMHhlOSwgMHgwOSwgMHg3MCwgMHg0MSwgMHhkYiwgMHhiZSwgMHhhOCwgMHg1YSwgMHg0MiwgMHhkNCwgMHg1YiwgMHgzNCwKKyAweDRiLCAweGU1LCAweDA3LCAweDNjLCAweGViLCAweDc3LCAweDJmLCAweGZjLCAweDYwLCAweDQ5LCAweDU0LCAweGI5LCAweDE1LAorIDB4OGIsIDB4YTgsIDB4MWUsIDB4YzMsIDB4ZGMsIDB4NGQsIDB4OWQsIDB4NjUsIDB4ZTMsIDB4YWIsIDB4N2EsIDB4YTMsIDB4MTgsCisgMHgxNiwgMHg1ZiwgMHgzOCwgMHhjMywgMHg2ZiwgMHg4NCwgMHgxZiwgMHgxYywgMHg2OSwgMHhjYiwgMHgxYywgMHhmYSwgMHg0OSwKKyAweDRhLCAweGE1LCAweGNiLCAweGI0LCAweGQ2LCAweGMwLCAweGVmLCAweGJhLCAweGZiLCAweDA0LCAweDNhfSwKKyAxMjgsIEJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorCit7IlRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIEludmFsaWQgdXNhZ2VcbiIsIDgsIFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUiwKK3swfSwgNjEwLCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fUkFXLAorezB4NjEsIDB4NjIsIDB4NjN9LCAzLCAxMjgsCit7MHgyYywgMHg3NywgMHg0NCwgMHg5OCwgMHgzZiwgMHgwMiwgMHgzYSwgMHhjNywgMHhiYiwgMHgxYywgMHg1NSwgMHg1MiwgMHg5ZCwKKyAweDgzLCAweGVkLCAweDExLCAweGE3LCAweDZhLCAweDc4LCAweDk4LCAweGExLCAweGJiLCAweDVjLCAweGUxLCAweDkxLCAweDM3LAorIDB4NWEsIDB4NGEsIDB4YTcsIDB4NDksIDB4NWEsIDB4NjMsIDB4M2QsIDB4MjcsIDB4ODcsIDB4OWYsIDB4ZjUsIDB4OGUsIDB4YmEsCisgMHg1YSwgMHg1NywgMHgzNywgMHgxYywgMHgzNCwgMHhmZSwgMHhiMSwgMHgxOCwgMHgwZSwgMHg4YiwgMHg4NSwgMHgwZCwgMHg1NSwKKyAweDI0LCAweDc2LCAweGViLCAweGI1LCAweDYzLCAweDRkLCAweGY2LCAweDIwLCAweDI2LCAweDE5LCAweDkyLCAweGYxLCAweDJlLAorIDB4YmUsIDB4ZTksIDB4MDksIDB4NzAsIDB4NDEsIDB4ZGIsIDB4YmUsIDB4YTgsIDB4NWEsIDB4NDIsIDB4ZDQsIDB4NWIsIDB4MzQsCisgMHg0YiwgMHhlNSwgMHgwNywgMHgzYywgMHhlYiwgMHg3NywgMHgyZiwgMHhmYywgMHg2MCwgMHg0OSwgMHg1NCwgMHhiOSwgMHgxNSwKKyAweDhiLCAweGE4LCAweDFlLCAweGMzLCAweGRjLCAweDRkLCAweDlkLCAweDY1LCAweGUzLCAweGFiLCAweDdhLCAweGEzLCAweDE4LAorIDB4MTYsIDB4NWYsIDB4MzgsIDB4YzMsIDB4NmYsIDB4ODQsIDB4MWYsIDB4MWMsIDB4NjksIDB4Y2IsIDB4MWMsIDB4ZmEsIDB4NDksCisgMHg0YSwgMHhhNSwgMHhjYiwgMHhiNCwgMHhkNiwgMHhjMCwgMHhlZiwgMHhiYSwgMHhmYiwgMHgwNCwgMHgzYX0sCisgMTI4LCAxMDI0LCBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAorfSwKKworeyJUZXN0IHBzYV9hc3ltbWV0cmljX3NpZ24gLSBXcm9uZyBoYXNoIHNpemVcbiIsIDksIFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUiwKK3swfSwgNjEwLCBQU0FfS0VZX1VTQUdFX1NJR04sIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR04oUFNBX0FMR19TSEFfMjU2KSwKK3sweGJhLCAweDc4LCAweDE2LCAweGJmLCAweDhmLCAweDAxLCAweGNmLCAweGVhLCAweDQxLCAweDQxLCAweDQwLCAweGRlLCAweDVkLAorIDB4YWUsIDB4MjIsIDB4MjMsIDB4YjAsIDB4MDMsIDB4NjEsIDB4YTMsIDB4OTYsIDB4MTcsIDB4N2EsIDB4OWMsIDB4YjQsIDB4MTAsCisgMHhmZiwgMHg2MSwgMHhmMiwgMHgwMH0sIDMwLCAxMjgsCit7MHhhNywgMHgzNiwgMHg2NCwgMHhkNSwgMHg1YiwgMHgzOSwgMHhjNywgMHhlYSwgMHg2YywgMHgxZSwgMHg1YiwgMHg1MCwgMHgxMSwKKyAweDcyLCAweDRhLCAweDExLCAweGUxLCAweGQ3LCAweDA3LCAweDNkLCAweDNhLCAweDY4LCAweGY0LCAweDhjLCAweDgzLCAweDZmLAorIDB4YWQsIDB4MTUsIDB4M2EsIDB4MWQsIDB4OTEsIDB4YjYsIDB4YWIsIDB4ZGIsIDB4YzgsIDB4ZjYsIDB4OWQsIDB4YTEsIDB4M2IsCisgMHgyMCwgMHg2YywgMHhjOSwgMHg2YSwgMHhmNiwgMHgzNiwgMHgzYiwgMHgxMSwgMHg0NCwgMHg1OCwgMHhiMCwgMHgyNiwgMHhhZiwKKyAweDE0LCAweGIyLCAweDRmLCAweGFiLCAweDg5LCAweDI5LCAweGVkLCAweDYzLCAweDRjLCAweDZhLCAweDJhLCAweGNhLCAweGNlLAorIDB4MGIsIDB4Y2MsIDB4NjIsIDB4ZDksIDB4YmIsIDB4NmEsIDB4OTgsIDB4NGEsIDB4ZmIsIDB4Y2IsIDB4ZmMsIDB4ZDMsIDB4YTAsCisgMHg2MCwgMHg4ZCwgMHgzMiwgMHhhMiwgMHhiYSwgMHhlNSwgMHgzNSwgMHhiOSwgMHhjZCwgMHgxZSwgMHhjZCwgMHhmOSwgMHhkZCwKKyAweDI4LCAweDFkLCAweGIxLCAweGUwLCAweDAyLCAweDVjLCAweDNiLCAweGZiLCAweDU1LCAweDEyLCAweDk2LCAweDNlLCAweGMzLAorIDB4YjksIDB4OGQsIDB4ZGEsIDB4YTYsIDB4OWUsIDB4MzgsIDB4YmMsIDB4M2MsIDB4ODQsIDB4YjEsIDB4YjYsIDB4MWEsIDB4MDQsCisgMHhlNSwgMHg2NCwgMHg4NiwgMHg0MCwgMHg4NSwgMHg2YSwgMHhhYywgMHhjNiwgMHhmYywgMHg3MywgMHgxMX0sCisgMTI4LCAxMDI0LCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKK307CisKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2syW10gPSB7Cit7IlRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIE5lZ2F0aXZlIGNhc2VcbiIsIDEwLCBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIsCit7MH0sIDYxMCwgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOX1JBVywKK3sweDYxLCAweDYyLCAweDYzfSwgMywgMTI4LAorezB4MmMsIDB4NzcsIDB4NDQsIDB4OTgsIDB4M2YsIDB4MDIsIDB4M2EsIDB4YzcsIDB4YmIsIDB4MWMsIDB4NTUsIDB4NTIsIDB4OWQsCisgMHg4MywgMHhlZCwgMHgxMSwgMHhhNywgMHg2YSwgMHg3OCwgMHg5OCwgMHhhMSwgMHhiYiwgMHg1YywgMHhlMSwgMHg5MSwgMHgzNywKKyAweDVhLCAweDRhLCAweGE3LCAweDQ5LCAweDVhLCAweDYzLCAweDNkLCAweDI3LCAweDg3LCAweDlmLCAweGY1LCAweDhlLCAweGJhLAorIDB4NWEsIDB4NTcsIDB4MzcsIDB4MWMsIDB4MzQsIDB4ZmUsIDB4YjEsIDB4MTgsIDB4MGUsIDB4OGIsIDB4ODUsIDB4MGQsIDB4NTUsCisgMHgyNCwgMHg3NiwgMHhlYiwgMHhiNSwgMHg2MywgMHg0ZCwgMHhmNiwgMHgyMCwgMHgyNiwgMHgxOSwgMHg5MiwgMHhmMSwgMHgyZSwKKyAweGJlLCAweGU5LCAweDA5LCAweDcwLCAweDQxLCAweGRiLCAweGJlLCAweGE4LCAweDVhLCAweDQyLCAweGQ0LCAweDViLCAweDM0LAorIDB4NGIsIDB4ZTUsIDB4MDcsIDB4M2MsIDB4ZWIsIDB4NzcsIDB4MmYsIDB4ZmMsIDB4NjAsIDB4NDksIDB4NTQsIDB4YjksIDB4MTUsCisgMHg4YiwgMHhhOCwgMHgxZSwgMHhjMywgMHhkYywgMHg0ZCwgMHg5ZCwgMHg2NSwgMHhlMywgMHhhYiwgMHg3YSwgMHhhMywgMHgxOCwKKyAweDE2LCAweDVmLCAweDM4LCAweGMzLCAweDZmLCAweDg0LCAweDFmLCAweDFjLCAweDY5LCAweGNiLCAweDFjLCAweGZhLCAweDQ5LAorIDB4NGEsIDB4YTUsIDB4Y2IsIDB4YjQsIDB4ZDYsIDB4YzAsIDB4ZWYsIDB4YmEsIDB4ZmIsIDB4MDQsIDB4M2F9LAorIDEyOCwgMTAyNCwgUFNBX1NVQ0NFU1MKK30sCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDEvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDEvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNzBmMTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0MS90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzA0MS5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCA0MSkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBhc3ltbWV0cmljIEFQSXNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NyeXB0b19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9jMDQxX2NyeXB0b19saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0ZSRUUpOworICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0Mi9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0Mi9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhM2NmOAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQyL3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2MwNDIuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDIvdGVzdF9jMDQyLmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0Mi90ZXN0X2MwNDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDFhZTAxCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDIvdGVzdF9jMDQyLmMKQEAgLTAsMCArMSwxODggQEAKKworLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzA0Mi5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorCitjbGllbnRfdGVzdF90IHRlc3RfYzA0Ml9jcnlwdG9fbGlzdFtdID0geworICAgIE5VTEwsCisgICAgcHNhX2FzeW1tZXRyaWNfdmVyaWZ5X3Rlc3QsCisgICAgcHNhX2FzeW1tZXRyaWNfdmVyaWZ5X25lZ2F0aXZlX3Rlc3QsCisgICAgTlVMTCwKK307CisKK3N0YXRpYyBpbnQgICAgIGdfdGVzdF9jb3VudCA9IDE7CisKK2ludDMyX3QgcHNhX2FzeW1tZXRyaWNfdmVyaWZ5X3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazEpL3NpemVvZihjaGVjazFbMF0pOworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIGksIHN0YXR1czsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAqa2V5X2RhdGE7CisgICAgcHNhX2tleV9wb2xpY3lfdCAgICAgICAgcG9saWN5OworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbAorICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnBvbGljeSk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UsICZwb2xpY3ksIGNoZWNrMVtpXS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcpOworCisgICAgICAgIC8qIFNldCB0aGUga2V5IGRhdGEgYmFzZWQgb24ga2V5IHR5cGUgKi8KKyAgICAgICAgaWYgKFBTQV9LRVlfVFlQRV9JU19SU0EoY2hlY2sxW2ldLmtleV90eXBlKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNoZWNrMVtpXS5rZXlfdHlwZSA9PSBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMzg0KSkKKyAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMzg0X2tleXBhaXI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygyNTYpKQorICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IHJzYV8yNTZfa2V5cGFpcjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCA9PSBCWVRFU19UT19CSVRTKDEyOCkpCisgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzEyOF9rZXlwYWlyOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygzODQpKQorICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IHJzYV8zODRfa2V5ZGF0YTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCA9PSBCWVRFU19UT19CSVRTKDI1NikpCisgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzI1Nl9rZXlkYXRhOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoID09IEJZVEVTX1RPX0JJVFMoMTI4KSkKKyAgICAgICAgICAgICAgICAgICAga2V5X2RhdGEgPSByc2FfMTI4X2tleWRhdGE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFBTQV9LRVlfVFlQRV9JU19FQ0MoY2hlY2sxW2ldLmtleV90eXBlKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKFBTQV9LRVlfVFlQRV9JU19FQ0NfS0VZUEFJUihjaGVjazFbaV0ua2V5X3R5cGUpKQorICAgICAgICAgICAgICAgIGtleV9kYXRhID0gZWNfa2V5cGFpcjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IGVjX2tleWRhdGE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAga2V5X2RhdGEgPSBjaGVjazFbaV0ua2V5X2RhdGE7CisKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazFbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9sZW5ndGgsICZjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfdHlwZSwga2V5X2RhdGEsIGNoZWNrMVtpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgLyogVmVyaWZ5IHRoZSBzaWduYXR1cmUgYSBoYXNoIG9yIHNob3J0IG1lc3NhZ2UgdXNpbmcgYSBwdWJsaWMga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQVNZTU1URVJJQ19WRVJJRlksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZywgY2hlY2sxW2ldLmlucHV0LCBjaGVjazFbaV0uaW5wdXRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uc2lnbmF0dXJlLCBjaGVjazFbaV0uc2lnbmF0dXJlX3NpemUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworICAgIH0KKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3QgcHNhX2FzeW1tZXRyaWNfdmVyaWZ5X25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazIpL3NpemVvZihjaGVjazJbMF0pOworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIGksIHN0YXR1czsKKyAgICBwc2Ffa2V5X3BvbGljeV90ICAgICAgICBwb2xpY3k7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIEludmFsaWQga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgICAgIC8qIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazJbaV0udXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2FzeW1tZXRyaWNfdmVyaWZ5IC0gSW52YWxpZCBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBWZXJpZnkgdGhlIHNpZ25hdHVyZSBhIGhhc2ggb3Igc2hvcnQgbWVzc2FnZSB1c2luZyBhIHB1YmxpYyBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BU1lNTVRFUklDX1ZFUklGWSwgY2hlY2syW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnLCBjaGVjazJbaV0uaW5wdXQsIGNoZWNrMltpXS5pbnB1dF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5zaWduYXR1cmUsIGNoZWNrMltpXS5zaWduYXR1cmVfc2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2FzeW1tZXRyaWNfdmVyaWZ5IC0gWmVybyBhcyBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBWZXJpZnkgdGhlIHNpZ25hdHVyZSBhIGhhc2ggb3Igc2hvcnQgbWVzc2FnZSB1c2luZyBhIHB1YmxpYyBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BU1lNTVRFUklDX1ZFUklGWSwgMCwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcsIGNoZWNrMltpXS5pbnB1dCwgY2hlY2syW2ldLmlucHV0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLnNpZ25hdHVyZSwgY2hlY2syW2ldLnNpZ25hdHVyZV9zaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfYXN5bW1ldHJpY192ZXJpZnkgLSBFbXB0eSBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMltpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMltpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgIC8qIFZlcmlmeSB0aGUgc2lnbmF0dXJlIGEgaGFzaCBvciBzaG9ydCBtZXNzYWdlIHVzaW5nIGEgcHVibGljIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FTWU1NVEVSSUNfVkVSSUZZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcsIGNoZWNrMltpXS5pbnB1dCwgY2hlY2syW2ldLmlucHV0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLnNpZ25hdHVyZSwgY2hlY2syW2ldLnNpZ25hdHVyZV9zaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRU1QVFlfU0xPVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDIvdGVzdF9jMDQyLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0Mi90ZXN0X2MwNDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmMyZjYxCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDIvdGVzdF9jMDQyLmgKQEAgLTAsMCArMSwzMSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfQzA0Ml9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfQzA0Ml9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sYzA0MikKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9jMDQyX2NyeXB0b19saXN0W107CisKK2ludDMyX3QgcHNhX2FzeW1tZXRyaWNfdmVyaWZ5X3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOworaW50MzJfdCBwc2FfYXN5bW1ldHJpY192ZXJpZnlfbmVnYXRpdmVfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CisjZW5kaWYgLyogX1RFU1RfQzA0Ml9DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQyL3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDIvdGVzdF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ0NTQwYQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQyL3Rlc3RfZGF0YS5oCkBAIC0wLDAgKzEsMzQyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzE2XTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgaW5wdXRbMzJdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGlucHV0X2xlbmd0aDsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBzaWduYXR1cmVbMTI4XTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBzaWduYXR1cmVfc2l6ZTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBleHBlY3RlZF9iaXRfbGVuZ3RoOworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1czsKK30gdGVzdF9kYXRhOworCitzdGF0aWMgdWludDhfdCByc2FfMzg0X2tleXBhaXJbMV07CitzdGF0aWMgdWludDhfdCByc2FfMzg0X2tleWRhdGFbMV07CitzdGF0aWMgdWludDhfdCByc2FfMjU2X2tleXBhaXJbMV07CitzdGF0aWMgdWludDhfdCByc2FfMjU2X2tleWRhdGFbMV07CitzdGF0aWMgdWludDhfdCBlY19rZXlkYXRhW10gPSB7CisgMHgzMCwgMHg1OSwgMHgzMCwgMHgxMywgMHgwNiwgMHgwNywgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgzZCwgMHgwMiwgMHgwMSwgMHgwNiwKKyAweDA4LCAweDJhLCAweDg2LCAweDQ4LCAweGNlLCAweDNkLCAweDAzLCAweDAxLCAweDA3LCAweDAzLCAweDQyLCAweDAwLCAweDA0LCAweGRlLAorIDB4YTUsIDB4ZTQsIDB4NWQsIDB4MGUsIDB4YTMsIDB4N2YsIDB4YzUsIDB4NjYsIDB4MjMsIDB4MmEsIDB4NTAsIDB4OGYsIDB4NGEsIDB4ZDIsCisgMHgwZSwgMHhhMSwgMHgzZCwgMHg0NywgMHhlNCwgMHhiZiwgMHg1ZiwgMHhhNCwgMHhkNSwgMHg0YSwgMHg1NywgMHhhMCwgMHhiYSwgMHgwMSwKKyAweDIwLCAweDQyLCAweDA4LCAweDcwLCAweDk3LCAweDQ5LCAweDZlLCAweGZjLCAweDU4LCAweDNmLCAweGVkLCAweDhiLCAweDI0LCAweGE1LAorIDB4YjksIDB4YmUsIDB4OWEsIDB4NTEsIDB4ZGUsIDB4MDYsIDB4M2YsIDB4NWEsIDB4MDAsIDB4YTgsIDB4YjYsIDB4OTgsIDB4YTEsIDB4NmYsCisgMHhkNywgMHhmMiwgMHg5YiwgMHg1NCwgMHg4NSwgMHhmMywgMHgyMH07CisKK3N0YXRpYyB1aW50OF90IGVjX2tleXBhaXJbXSA9IHsKKyAweDMwLCAweDc4LCAweDAyLCAweDAxLCAweDAxLCAweDA0LCAweDIxLCAweDAwLCAweGFiLCAweDQ1LCAweDQzLCAweDU3LCAweDEyLCAweDY0LAorIDB4OWMsIDB4YjMsIDB4MGIsIDB4YmQsIDB4ZGEsIDB4YzQsIDB4OTEsIDB4OTcsIDB4ZWUsIDB4YmYsIDB4MjcsIDB4NDAsIDB4ZmYsIDB4YzcsCisgMHhmOCwgMHg3NCwgMHhkOSwgMHgyNCwgMHg0YywgMHgzNCwgMHg2MCwgMHhmNSwgMHg0ZiwgMHgzMiwgMHgyZCwgMHgzYSwgMHhhMCwgMHgwYSwKKyAweDA2LCAweDA4LCAweDJhLCAweDg2LCAweDQ4LCAweGNlLCAweDNkLCAweDAzLCAweDAxLCAweDA3LCAweGExLCAweDQ0LCAweDAzLCAweDQyLAorIDB4MDAsIDB4MDQsIDB4ZGUsIDB4YTUsIDB4ZTQsIDB4NWQsIDB4MGUsIDB4YTMsIDB4N2YsIDB4YzUsIDB4NjYsIDB4MjMsIDB4MmEsIDB4NTAsCisgMHg4ZiwgMHg0YSwgMHhkMiwgMHgwZSwgMHhhMSwgMHgzZCwgMHg0NywgMHhlNCwgMHhiZiwgMHg1ZiwgMHhhNCwgMHhkNSwgMHg0YSwgMHg1NywKKyAweGEwLCAweGJhLCAweDAxLCAweDIwLCAweDQyLCAweDA4LCAweDcwLCAweDk3LCAweDQ5LCAweDZlLCAweGZjLCAweDU4LCAweDNmLCAweGVkLAorIDB4OGIsIDB4MjQsIDB4YTUsIDB4YjksIDB4YmUsIDB4OWEsIDB4NTEsIDB4ZGUsIDB4MDYsIDB4M2YsIDB4NWEsIDB4MDAsIDB4YTgsIDB4YjYsCisgMHg5OCwgMHhhMSwgMHg2ZiwgMHhkNywgMHhmMiwgMHg5YiwgMHg1NCwgMHg4NSwgMHhmMywgMHgyMH07CisKK3N0YXRpYyB1aW50OF90IHJzYV8xMjhfa2V5ZGF0YVtdID0geworIDB4MzAsIDB4ODEsIDB4OWYsIDB4MzAsIDB4MGQsIDB4MDYsIDB4MDksIDB4MmEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4ZjcsIDB4MGQsCisgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNSwgMHgwMCwgMHgwMywgMHg4MSwgMHg4ZCwgMHgwMCwgMHgzMCwgMHg4MSwgMHg4OSwgMHgwMiwKKyAweDgxLCAweDgxLCAweDAwLCAweGFmLCAweDA1LCAweDdkLCAweDM5LCAweDZlLCAweGU4LCAweDRmLCAweGI3LCAweDVmLCAweGRiLAorIDB4YjUsIDB4YzIsIDB4YjEsIDB4M2MsIDB4N2YsIDB4ZTUsIDB4YTYsIDB4NTQsIDB4YWEsIDB4OGEsIDB4YTIsIDB4NDcsIDB4MGIsCisgMHg1NCwgMHgxZSwgMHhlMSwgMHhmZSwgMHhiMCwgMHhiMSwgMHgyZCwgMHgyNSwgMHhjNywgMHg5NywgMHgxMSwgMHg1MywgMHgxMiwKKyAweDQ5LCAweGUxLCAweDEyLCAweDk2LCAweDI4LCAweDA0LCAweDJkLCAweGJiLCAweGI2LCAweGMxLCAweDIwLCAweGQxLCAweDQ0LAorIDB4MzUsIDB4MjQsIDB4ZWYsIDB4NGMsIDB4MGUsIDB4NmUsIDB4MWQsIDB4ODksIDB4NTYsIDB4ZWUsIDB4YjIsIDB4MDcsIDB4N2EsCisgMHhmMSwgMHgyMywgMHg0OSwgMHhkZCwgMHhlZSwgMHhlNSwgMHg0NCwgMHg4MywgMHhiYywgMHgwNiwgMHhjMiwgMHhjNiwgMHgxOSwKKyAweDQ4LCAweGNkLCAweDAyLCAweGIyLCAweDAyLCAweGU3LCAweDk2LCAweGFlLCAweGJkLCAweDk0LCAweGQzLCAweGE3LCAweGNiLAorIDB4ZjgsIDB4NTksIDB4YzIsIDB4YzEsIDB4ODEsIDB4OWMsIDB4MzIsIDB4NGMsIDB4YjgsIDB4MmIsIDB4OWMsIDB4ZDMsIDB4NGUsCisgMHhkZSwgMHgyNiwgMHgzYSwgMHgyYSwgMHhiZiwgMHhmZSwgMHg0NywgMHgzMywgMHhmMCwgMHg3NywgMHg4NiwgMHg5ZSwgMHg4NiwKKyAweDYwLCAweGY3LCAweGQ2LCAweDgzLCAweDRkLCAweGE1LCAweDNkLCAweDY5LCAweDBlLCAweGY3LCAweDk4LCAweDVmLCAweDZiLAorIDB4YzMsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDF9OworCitzdGF0aWMgdWludDhfdCByc2FfMTI4X2tleXBhaXJbXSA9IHsKKzB4MzAsIDB4ODIsIDB4MDIsIDB4NWUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODEsIDB4ODEsIDB4MDAsIDB4YWYsIDB4MDUsCisweDdkLCAweDM5LCAweDZlLCAweGU4LCAweDRmLCAweGI3LCAweDVmLCAweGRiLCAweGI1LCAweGMyLCAweGIxLCAweDNjLCAweDdmLAorMHhlNSwgMHhhNiwgMHg1NCwgMHhhYSwgMHg4YSwgMHhhMiwgMHg0NywgMHgwYiwgMHg1NCwgMHgxZSwgMHhlMSwgMHhmZSwgMHhiMCwKKzB4YjEsIDB4MmQsIDB4MjUsIDB4YzcsIDB4OTcsIDB4MTEsIDB4NTMsIDB4MTIsIDB4NDksIDB4ZTEsIDB4MTIsIDB4OTYsIDB4MjgsCisweDA0LCAweDJkLCAweGJiLCAweGI2LCAweGMxLCAweDIwLCAweGQxLCAweDQ0LCAweDM1LCAweDI0LCAweGVmLCAweDRjLCAweDBlLAorMHg2ZSwgMHgxZCwgMHg4OSwgMHg1NiwgMHhlZSwgMHhiMiwgMHgwNywgMHg3YSwgMHhmMSwgMHgyMywgMHg0OSwgMHhkZCwgMHhlZSwKKzB4ZTUsIDB4NDQsIDB4ODMsIDB4YmMsIDB4MDYsIDB4YzIsIDB4YzYsIDB4MTksIDB4NDgsIDB4Y2QsIDB4MDIsIDB4YjIsIDB4MDIsCisweGU3LCAweDk2LCAweGFlLCAweGJkLCAweDk0LCAweGQzLCAweGE3LCAweGNiLCAweGY4LCAweDU5LCAweGMyLCAweGMxLCAweDgxLAorMHg5YywgMHgzMiwgMHg0YywgMHhiOCwgMHgyYiwgMHg5YywgMHhkMywgMHg0ZSwgMHhkZSwgMHgyNiwgMHgzYSwgMHgyYSwgMHhiZiwKKzB4ZmUsIDB4NDcsIDB4MzMsIDB4ZjAsIDB4NzcsIDB4ODYsIDB4OWUsIDB4ODYsIDB4NjAsIDB4ZjcsIDB4ZDYsIDB4ODMsIDB4NGQsCisweGE1LCAweDNkLCAweDY5LCAweDBlLCAweGY3LCAweDk4LCAweDVmLCAweDZiLCAweGMzLCAweDAyLCAweDAzLCAweDAxLCAweDAwLAorMHgwMSwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHg4NywgMHg0YiwgMHhmMCwgMHhmZiwgMHhjMiwgMHhmMiwgMHhhNywgMHgxZCwKKzB4MTQsIDB4NjcsIDB4MWQsIDB4ZGQsIDB4MDEsIDB4NzEsIDB4YzksIDB4NTQsIDB4ZDcsIDB4ZmQsIDB4YmYsIDB4NTAsIDB4MjgsCisweDFlLCAweDRmLCAweDZkLCAweDk5LCAweGVhLCAweDBlLCAweDFlLCAweGJjLCAweGY4LCAweDJmLCAweGFhLCAweDU4LCAweGU3LAorMHhiNSwgMHg5NSwgMHhmZiwgMHhiMiwgMHg5MywgMHhkMSwgMHhhYiwgMHhlMSwgMHg3ZiwgMHgxMSwgMHgwYiwgMHgzNywgMHhjNCwKKzB4OGMsIDB4YzAsIDB4ZjMsIDB4NmMsIDB4MzcsIDB4ZTgsIDB4NGQsIDB4ODcsIDB4NjYsIDB4MjEsIDB4ZDMsIDB4MjcsIDB4ZjYsCisweDRiLCAweGJlLCAweDA4LCAweDQ1LCAweDdkLCAweDNlLCAweGM0LCAweDA5LCAweDhiLCAweGEyLCAweGZhLCAweDBhLCAweDMxLAorMHg5ZiwgMHhiYSwgMHg0MSwgMHgxYywgMHgyOCwgMHg0MSwgMHhlZCwgMHg3YiwgMHhlOCwgMHgzMSwgMHg5NiwgMHhhOCwgMHhjZCwKKzB4ZjksIDB4ZGEsIDB4YTUsIDB4ZDAsIDB4MDYsIDB4OTQsIDB4YmMsIDB4MzMsIDB4NWYsIDB4YzQsIDB4YzMsIDB4MjIsIDB4MTcsCisweGZlLCAweDA0LCAweDg4LCAweGJjLCAweGU5LCAweGNiLCAweDcyLCAweDAyLCAweGU1LCAweDk0LCAweDY4LCAweGIxLCAweGVhLAorMHhkMSwgMHgxOSwgMHgwMCwgMHgwNCwgMHg3NywgMHhkYiwgMHgyYywgMHhhNywgMHg5NywgMHhmYSwgMHhjMSwgMHg5ZSwgMHhkYSwKKzB4M2YsIDB4NTgsIDB4YzEsIDB4MDIsIDB4NDEsIDB4MDAsIDB4ZTIsIDB4YWIsIDB4NzYsIDB4MDgsIDB4NDEsIDB4YmIsIDB4OWQsCisweDMwLCAweGE4LCAweDFkLCAweDIyLCAweDJkLCAweGUxLCAweGViLCAweDczLCAweDgxLCAweGQ4LCAweDIyLCAweDE0LCAweDQwLAorMHg3ZiwgMHgxYiwgMHg5NywgMHg1YywgMHhiYiwgMHhmZSwgMHg0ZSwgMHgxYSwgMHg5NCwgMHg2NywgMHhmZCwgMHg5OCwgMHhhZCwKKzB4YmQsIDB4NzgsIDB4ZjYsIDB4MDcsIDB4ODMsIDB4NmMsIDB4YTUsIDB4YmUsIDB4MTksIDB4MjgsIDB4YjksIDB4ZDEsIDB4NjAsCisweGQ5LCAweDdmLCAweGQ0LCAweDVjLCAweDEyLCAweGQ2LCAweGI1LCAweDJlLCAweDJjLCAweDk4LCAweDcxLCAweGExLCAweDc0LAorMHhjNiwgMHg2YiwgMHg0OCwgMHg4MSwgMHgxMywgMHgwMiwgMHg0MSwgMHgwMCwgMHhjNSwgMHhhYiwgMHgyNywgMHg2MCwgMHgyMSwKKzB4NTksIDB4YWUsIDB4N2QsIDB4NmYsIDB4MjAsIDB4YzMsIDB4YzIsIDB4ZWUsIDB4ODUsIDB4MWUsIDB4NDYsIDB4ZGMsIDB4MTEsCisweDJlLCAweDY4LCAweDllLCAweDI4LCAweGQ1LCAweGZjLCAweGJiLCAweGY5LCAweDkwLCAweGE5LCAweDllLCAweGY4LCAweGE5LAorMHgwYiwgMHg4YiwgMHhiNCwgMHg0ZiwgMHhkMywgMHg2NCwgMHg2NywgMHhlNywgMHhmYywgMHgxNywgMHg4OSwgMHhjZSwgMHhiNiwKKzB4NjMsIDB4YWIsIDB4ZGEsIDB4MzMsIDB4ODYsIDB4NTIsIDB4YzMsIDB4YzcsIDB4M2YsIDB4MTEsIDB4MTcsIDB4NzQsIDB4OTAsCisweDJlLCAweDg0LCAweDA1LCAweDY1LCAweDkyLCAweDcwLCAweDkxLCAweDAyLCAweDQxLCAweDAwLCAweGI2LCAweGNkLCAweGJkLAorMHgzNSwgMHg0ZiwgMHg3ZCwgMHhmNSwgMHg3OSwgMHhhNiwgMHgzYiwgMHg0OCwgMHhiMywgMHg2NCwgMHgzZSwgMHgzNSwgMHgzYiwKKzB4ODQsIDB4ODksIDB4ODcsIDB4NzcsIDB4YjQsIDB4OGIsIDB4MTUsIDB4ZjksIDB4NGUsIDB4MGIsIDB4ZmMsIDB4MDUsIDB4NjcsCisweGE2LCAweGFlLCAweDU5LCAweDExLCAweGQ1LCAweDdhLCAweGQ2LCAweDQwLCAweDljLCAweGY3LCAweDY0LCAweDdiLCAweGY5LAorMHg2MiwgMHg2NCwgMHhlOSwgMHhiZCwgMHg4NywgMHhlYiwgMHg5NSwgMHhlMiwgMHg2MywgMHhiNywgMHgxMSwgMHgwYiwgMHg5YSwKKzB4MWYsIDB4OWYsIDB4OTQsIDB4YWMsIDB4Y2UsIDB4ZDAsIDB4ZmEsIDB4ZmEsIDB4NGQsIDB4MDIsIDB4NDAsIDB4NzEsIDB4MTksCisweDVlLCAweGVjLCAweDM3LCAweGU4LCAweGQyLCAweDU3LCAweGRlLCAweGNmLCAweGM2LCAweDcyLCAweGIwLCAweDdhLCAweGU2LAorMHgzOSwgMHhmMSwgMHgwYywgMHhiYiwgMHg5YiwgMHgwYywgMHg3MywgMHg5ZCwgMHgwYywgMHg4MCwgMHg5OSwgMHg2OCwgMHhkNiwKKzB4NDQsIDB4YTksIDB4NGUsIDB4M2YsIDB4ZDYsIDB4ZWQsIDB4OTIsIDB4ODcsIDB4MDcsIDB4N2EsIDB4MTQsIDB4NTgsIDB4M2YsCisweDM3LCAweDkwLCAweDU4LCAweGY3LCAweDZhLCAweDhhLCAweGVjLCAweGQ0LCAweDNjLCAweDYyLCAweGRjLCAweDhjLCAweDBmLAorMHg0MSwgMHg3NiwgMHg2NiwgMHg1MCwgMHhkNywgMHgyNSwgMHgyNywgMHg1YSwgMHhjNCwgMHhhMSwgMHgwMiwgMHg0MSwgMHgwMCwKKzB4YmIsIDB4MzIsIDB4ZDEsIDB4MzMsIDB4ZWQsIDB4YzIsIDB4ZTAsIDB4NDgsIDB4ZDQsIDB4NjMsIDB4MzgsIDB4OGIsIDB4N2IsCisweGU5LCAweGNiLCAweDRiLCAweGUyLCAweDlmLCAweDRiLCAweDYyLCAweDUwLCAweGJlLCAweDYwLCAweDNlLCAweDcwLCAweGUzLAorMHg2NCwgMHg3NSwgMHgwMSwgMHhjOSwgMHg3ZCwgMHhkZCwgMHhlMiwgMHgwYSwgMHg0ZSwgMHg3MSwgMHhiZSwgMHg5NSwgMHhmZCwKKzB4NWUsIDB4NzEsIDB4NzgsIDB4NGUsIDB4MjUsIDB4YWMsIDB4YTQsIDB4YmEsIDB4ZjIsIDB4NWIsIDB4ZTUsIDB4NzMsIDB4OGEsCisweGFlLCAweDU5LCAweGJiLCAweGZlLCAweDFjLCAweDk5LCAweDc3LCAweDgxLCAweDQ0LCAweDdhLCAweDJiLCAweDI0fTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3siVGVzdCBwc2FfYXN5bW1ldHJpY192ZXJpZnkgLSBSU0EgS0VZUEFJUiBQS0NTMVYxNSBSQVdcbiIsIDEsIFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUiwKK3swfSwgNjEwLCBQU0FfS0VZX1VTQUdFX1ZFUklGWSwgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVcsCit7MHg2MSwgMHg2MiwgMHg2M30sIDMsCit7MHgyYywgMHg3NywgMHg0NCwgMHg5OCwgMHgzZiwgMHgwMiwgMHgzYSwgMHhjNywgMHhiYiwgMHgxYywgMHg1NSwgMHg1MiwgMHg5ZCwKKyAweDgzLCAweGVkLCAweDExLCAweGE3LCAweDZhLCAweDc4LCAweDk4LCAweGExLCAweGJiLCAweDVjLCAweGUxLCAweDkxLCAweDM3LAorIDB4NWEsIDB4NGEsIDB4YTcsIDB4NDksIDB4NWEsIDB4NjMsIDB4M2QsIDB4MjcsIDB4ODcsIDB4OWYsIDB4ZjUsIDB4OGUsIDB4YmEsCisgMHg1YSwgMHg1NywgMHgzNywgMHgxYywgMHgzNCwgMHhmZSwgMHhiMSwgMHgxOCwgMHgwZSwgMHg4YiwgMHg4NSwgMHgwZCwgMHg1NSwKKyAweDI0LCAweDc2LCAweGViLCAweGI1LCAweDYzLCAweDRkLCAweGY2LCAweDIwLCAweDI2LCAweDE5LCAweDkyLCAweGYxLCAweDJlLAorIDB4YmUsIDB4ZTksIDB4MDksIDB4NzAsIDB4NDEsIDB4ZGIsIDB4YmUsIDB4YTgsIDB4NWEsIDB4NDIsIDB4ZDQsIDB4NWIsIDB4MzQsCisgMHg0YiwgMHhlNSwgMHgwNywgMHgzYywgMHhlYiwgMHg3NywgMHgyZiwgMHhmYywgMHg2MCwgMHg0OSwgMHg1NCwgMHhiOSwgMHgxNSwKKyAweDhiLCAweGE4LCAweDFlLCAweGMzLCAweGRjLCAweDRkLCAweDlkLCAweDY1LCAweGUzLCAweGFiLCAweDdhLCAweGEzLCAweDE4LAorIDB4MTYsIDB4NWYsIDB4MzgsIDB4YzMsIDB4NmYsIDB4ODQsIDB4MWYsIDB4MWMsIDB4NjksIDB4Y2IsIDB4MWMsIDB4ZmEsIDB4NDksCisgMHg0YSwgMHhhNSwgMHhjYiwgMHhiNCwgMHhkNiwgMHhjMCwgMHhlZiwgMHhiYSwgMHhmYiwgMHgwNCwgMHgzYX0sCisgMTI4LCAxMDI0LCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIFJTQSBLRVlQQUlSIFBLQ1MxVjE1IFNIQS0yNTZcbiIsIDIsIFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUiwKK3swfSwgNjEwLCBQU0FfS0VZX1VTQUdFX1ZFUklGWSwgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTihQU0FfQUxHX1NIQV8yNTYpLAorezB4YmEsIDB4NzgsIDB4MTYsIDB4YmYsIDB4OGYsIDB4MDEsIDB4Y2YsIDB4ZWEsIDB4NDEsIDB4NDEsIDB4NDAsIDB4ZGUsIDB4NWQsCisgMHhhZSwgMHgyMiwgMHgyMywgMHhiMCwgMHgwMywgMHg2MSwgMHhhMywgMHg5NiwgMHgxNywgMHg3YSwgMHg5YywgMHhiNCwgMHgxMCwKKyAweGZmLCAweDYxLCAweGYyLCAweDAwLCAweDE1LCAweGFkfSwgMzIsCit7MHhhNywgMHgzNiwgMHg2NCwgMHhkNSwgMHg1YiwgMHgzOSwgMHhjNywgMHhlYSwgMHg2YywgMHgxZSwgMHg1YiwgMHg1MCwgMHgxMSwKKyAweDcyLCAweDRhLCAweDExLCAweGUxLCAweGQ3LCAweDA3LCAweDNkLCAweDNhLCAweDY4LCAweGY0LCAweDhjLCAweDgzLCAweDZmLAorIDB4YWQsIDB4MTUsIDB4M2EsIDB4MWQsIDB4OTEsIDB4YjYsIDB4YWIsIDB4ZGIsIDB4YzgsIDB4ZjYsIDB4OWQsIDB4YTEsIDB4M2IsCisgMHgyMCwgMHg2YywgMHhjOSwgMHg2YSwgMHhmNiwgMHgzNiwgMHgzYiwgMHgxMSwgMHg0NCwgMHg1OCwgMHhiMCwgMHgyNiwgMHhhZiwKKyAweDE0LCAweGIyLCAweDRmLCAweGFiLCAweDg5LCAweDI5LCAweGVkLCAweDYzLCAweDRjLCAweDZhLCAweDJhLCAweGNhLCAweGNlLAorIDB4MGIsIDB4Y2MsIDB4NjIsIDB4ZDksIDB4YmIsIDB4NmEsIDB4OTgsIDB4NGEsIDB4ZmIsIDB4Y2IsIDB4ZmMsIDB4ZDMsIDB4YTAsCisgMHg2MCwgMHg4ZCwgMHgzMiwgMHhhMiwgMHhiYSwgMHhlNSwgMHgzNSwgMHhiOSwgMHhjZCwgMHgxZSwgMHhjZCwgMHhmOSwgMHhkZCwKKyAweDI4LCAweDFkLCAweGIxLCAweGUwLCAweDAyLCAweDVjLCAweDNiLCAweGZiLCAweDU1LCAweDEyLCAweDk2LCAweDNlLCAweGMzLAorIDB4YjksIDB4OGQsIDB4ZGEsIDB4YTYsIDB4OWUsIDB4MzgsIDB4YmMsIDB4M2MsIDB4ODQsIDB4YjEsIDB4YjYsIDB4MWEsIDB4MDQsCisgMHhlNSwgMHg2NCwgMHg4NiwgMHg0MCwgMHg4NSwgMHg2YSwgMHhhYywgMHhjNiwgMHhmYywgMHg3MywgMHgxMX0sCisgMTI4LCAxMDI0LCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIEVDRFNBIEtFWVBBSVIgU0VDUDI1NlIxIFNIQS0yNTZcbiIsIDMsCisgUFNBX0tFWV9UWVBFX0VDQ19LRVlQQUlSKFBTQV9FQ0NfQ1VSVkVfU0VDUDI1NlIxKSwgezB9LCAxMjIsCisgUFNBX0tFWV9VU0FHRV9WRVJJRlksIFBTQV9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQShQU0FfQUxHX1NIQV8yNTYpLAorezB4OWEsIDB4YzQsIDB4MzMsIDB4NWIsIDB4NDYsIDB4OWIsIDB4YmQsIDB4NzksIDB4MTQsIDB4MzksIDB4MjQsIDB4ODUsIDB4MDQsCisgMHhkZCwgMHgwZCwgMHg0OSwgMHhjNywgMHgxMywgMHg0OSwgMHhhMiwgMHg5NSwgMHhmZSwgMHhlNSwgMHhhMSwgMHhjNiwgMHg4NSwKKyAweDA3LCAweGY0LCAweDVhLCAweDllLCAweDFjLCAweDdifSwgMzIsCit7MHg2YSwgMHgzMywgMHg5OSwgMHhmNiwgMHg5NCwgMHgyMSwgMHhmZiwgMHhlMSwgMHg0OSwgMHgwMywgMHg3NywgMHhhZCwgMHhmMiwKKyAweGVhLCAweDFmLCAweDExLCAweDdkLCAweDgxLCAweGE2LCAweDNjLCAweGY1LCAweGJmLCAweDIyLCAweGU5LCAweDE4LCAweGQ1LAorIDB4MTEsIDB4NzUsIDB4ZWIsIDB4MjUsIDB4OTEsIDB4NTEsIDB4Y2UsIDB4OTUsIDB4ZDcsIDB4YzIsIDB4NmMsIDB4YzAsIDB4NGUsCisgMHgyNSwgMHg1MCwgMHgzZSwgMHgyZiwgMHg3YSwgMHgxZSwgMHhjMywgMHg1NywgMHgzZSwgMHgzYywgMHgyNCwgMHgxMiwgMHg1MywKKyAweDRiLCAweGI0LCAweGExLCAweDliLCAweDNhLCAweDc4LCAweDExLCAweDc0LCAweDJmLCAweDQ5LCAweGY1LCAweDBmfSwKKyA2NCwgNTEyLCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIFJTQSBwdWJsaWMga2V5XG4iLCA0LAorUFNBX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZLAorezB9LCAxNjIsIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOKFBTQV9BTEdfU0hBXzI1NiksCit7MHhiYSwgMHg3OCwgMHgxNiwgMHhiZiwgMHg4ZiwgMHgwMSwgMHhjZiwgMHhlYSwgMHg0MSwgMHg0MSwgMHg0MCwgMHhkZSwgMHg1ZCwKKyAweGFlLCAweDIyLCAweDIzLCAweGIwLCAweDAzLCAweDYxLCAweGEzLCAweDk2LCAweDE3LCAweDdhLCAweDljLCAweGI0LCAweDEwLAorIDB4ZmYsIDB4NjEsIDB4ZjIsIDB4MDAsIDB4MTUsIDB4YWR9LCAzMiwKK3sweGE3LCAweDM2LCAweDY0LCAweGQ1LCAweDViLCAweDM5LCAweGM3LCAweGVhLCAweDZjLCAweDFlLCAweDViLCAweDUwLCAweDExLAorIDB4NzIsIDB4NGEsIDB4MTEsIDB4ZTEsIDB4ZDcsIDB4MDcsIDB4M2QsIDB4M2EsIDB4NjgsIDB4ZjQsIDB4OGMsIDB4ODMsIDB4NmYsCisgMHhhZCwgMHgxNSwgMHgzYSwgMHgxZCwgMHg5MSwgMHhiNiwgMHhhYiwgMHhkYiwgMHhjOCwgMHhmNiwgMHg5ZCwgMHhhMSwgMHgzYiwKKyAweDIwLCAweDZjLCAweGM5LCAweDZhLCAweGY2LCAweDM2LCAweDNiLCAweDExLCAweDQ0LCAweDU4LCAweGIwLCAweDI2LCAweGFmLAorIDB4MTQsIDB4YjIsIDB4NGYsIDB4YWIsIDB4ODksIDB4MjksIDB4ZWQsIDB4NjMsIDB4NGMsIDB4NmEsIDB4MmEsIDB4Y2EsIDB4Y2UsCisgMHgwYiwgMHhjYywgMHg2MiwgMHhkOSwgMHhiYiwgMHg2YSwgMHg5OCwgMHg0YSwgMHhmYiwgMHhjYiwgMHhmYywgMHhkMywgMHhhMCwKKyAweDYwLCAweDhkLCAweDMyLCAweGEyLCAweGJhLCAweGU1LCAweDM1LCAweGI5LCAweGNkLCAweDFlLCAweGNkLCAweGY5LCAweGRkLAorIDB4MjgsIDB4MWQsIDB4YjEsIDB4ZTAsIDB4MDIsIDB4NWMsIDB4M2IsIDB4ZmIsIDB4NTUsIDB4MTIsIDB4OTYsIDB4M2UsIDB4YzMsCisgMHhiOSwgMHg4ZCwgMHhkYSwgMHhhNiwgMHg5ZSwgMHgzOCwgMHhiYywgMHgzYywgMHg4NCwgMHhiMSwgMHhiNiwgMHgxYSwgMHgwNCwKKyAweGU1LCAweDY0LCAweDg2LCAweDQwLCAweDg1LCAweDZhLCAweGFjLCAweGM2LCAweGZjLCAweDczLCAweDExfSwKKyAxMjgsIDEwMjQsIFBTQV9TVUNDRVNTCit9LAorCit7IlRlc3QgcHNhX2FzeW1tZXRyaWNfdmVyaWZ5IC0gU21hbGwgb3V0cHV0IGJ1ZmZlclxuIiwgNSwgUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSLAorezB9LCA2MTAsIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOKFBTQV9BTEdfU0hBXzI1NiksCit7MHhiYSwgMHg3OCwgMHgxNiwgMHhiZiwgMHg4ZiwgMHgwMSwgMHhjZiwgMHhlYSwgMHg0MSwgMHg0MSwgMHg0MCwgMHhkZSwgMHg1ZCwKKyAweGFlLCAweDIyLCAweDIzLCAweGIwLCAweDAzLCAweDYxLCAweGEzLCAweDk2LCAweDE3LCAweDdhLCAweDljLCAweGI0LCAweDEwLAorIDB4ZmYsIDB4NjEsIDB4ZjIsIDB4MDAsIDB4MTUsIDB4YWR9LCAzMiwKK3sweGE3LCAweDM2LCAweDY0LCAweGQ1LCAweDViLCAweDM5LCAweGM3LCAweGVhLCAweDZjLCAweDFlLCAweDViLCAweDUwLCAweDExLAorIDB4NzIsIDB4NGEsIDB4MTEsIDB4ZTEsIDB4ZDcsIDB4MDcsIDB4M2QsIDB4M2EsIDB4NjgsIDB4ZjQsIDB4OGMsIDB4ODMsIDB4NmYsCisgMHhhZCwgMHgxNSwgMHgzYSwgMHgxZCwgMHg5MSwgMHhiNiwgMHhhYiwgMHhkYiwgMHhjOCwgMHhmNiwgMHg5ZCwgMHhhMSwgMHgzYiwKKyAweDIwLCAweDZjLCAweGM5LCAweDZhLCAweGY2LCAweDM2LCAweDNiLCAweDExLCAweDQ0LCAweDU4LCAweGIwLCAweDI2LCAweGFmLAorIDB4MTQsIDB4YjIsIDB4NGYsIDB4YWIsIDB4ODksIDB4MjksIDB4ZWQsIDB4NjMsIDB4NGMsIDB4NmEsIDB4MmEsIDB4Y2EsIDB4Y2UsCisgMHgwYiwgMHhjYywgMHg2MiwgMHhkOSwgMHhiYiwgMHg2YSwgMHg5OCwgMHg0YSwgMHhmYiwgMHhjYiwgMHhmYywgMHhkMywgMHhhMCwKKyAweDYwLCAweDhkLCAweDMyLCAweGEyLCAweGJhLCAweGU1LCAweDM1LCAweGI5LCAweGNkLCAweDFlLCAweGNkLCAweGY5LCAweGRkLAorIDB4MjgsIDB4MWQsIDB4YjEsIDB4ZTAsIDB4MDIsIDB4NWMsIDB4M2IsIDB4ZmIsIDB4NTUsIDB4MTIsIDB4OTYsIDB4M2UsIDB4YzMsCisgMHhiOSwgMHg4ZCwgMHhkYSwgMHhhNiwgMHg5ZSwgMHgzOCwgMHhiYywgMHgzYywgMHg4NCwgMHhiMSwgMHhiNiwgMHgxYSwgMHgwNCwKKyAweGU1LCAweDY0LCAweDg2LCAweDQwLCAweDg1LCAweDZhLCAweGFjLCAweGM2LCAweGZjLCAweDczLCAweDExfSwKKyAxMjAsIDEwMjQsIFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMCit9LAorCit7IlRlc3QgcHNhX2FzeW1tZXRyaWNfdmVyaWZ5IC0gSW52YWxpZCBhbGdvcml0aG1cbiIsIDYsIFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUiwKK3swfSwgNjEwLCBQU0FfS0VZX1VTQUdFX1ZFUklGWSwgUFNBX0FMR19TSEFfMjU2LAorezB4NjEsIDB4NjIsIDB4NjN9LCAzLAorezB4MmMsIDB4NzcsIDB4NDQsIDB4OTgsIDB4M2YsIDB4MDIsIDB4M2EsIDB4YzcsIDB4YmIsIDB4MWMsIDB4NTUsIDB4NTIsIDB4OWQsCisgMHg4MywgMHhlZCwgMHgxMSwgMHhhNywgMHg2YSwgMHg3OCwgMHg5OCwgMHhhMSwgMHhiYiwgMHg1YywgMHhlMSwgMHg5MSwgMHgzNywKKyAweDVhLCAweDRhLCAweGE3LCAweDQ5LCAweDVhLCAweDYzLCAweDNkLCAweDI3LCAweDg3LCAweDlmLCAweGY1LCAweDhlLCAweGJhLAorIDB4NWEsIDB4NTcsIDB4MzcsIDB4MWMsIDB4MzQsIDB4ZmUsIDB4YjEsIDB4MTgsIDB4MGUsIDB4OGIsIDB4ODUsIDB4MGQsIDB4NTUsCisgMHgyNCwgMHg3NiwgMHhlYiwgMHhiNSwgMHg2MywgMHg0ZCwgMHhmNiwgMHgyMCwgMHgyNiwgMHgxOSwgMHg5MiwgMHhmMSwgMHgyZSwKKyAweGJlLCAweGU5LCAweDA5LCAweDcwLCAweDQxLCAweGRiLCAweGJlLCAweGE4LCAweDVhLCAweDQyLCAweGQ0LCAweDViLCAweDM0LAorIDB4NGIsIDB4ZTUsIDB4MDcsIDB4M2MsIDB4ZWIsIDB4NzcsIDB4MmYsIDB4ZmMsIDB4NjAsIDB4NDksIDB4NTQsIDB4YjksIDB4MTUsCisgMHg4YiwgMHhhOCwgMHgxZSwgMHhjMywgMHhkYywgMHg0ZCwgMHg5ZCwgMHg2NSwgMHhlMywgMHhhYiwgMHg3YSwgMHhhMywgMHgxOCwKKyAweDE2LCAweDVmLCAweDM4LCAweGMzLCAweDZmLCAweDg0LCAweDFmLCAweDFjLCAweDY5LCAweGNiLCAweDFjLCAweGZhLCAweDQ5LAorIDB4NGEsIDB4YTUsIDB4Y2IsIDB4YjQsIDB4ZDYsIDB4YzAsIDB4ZWYsIDB4YmEsIDB4ZmIsIDB4MDQsIDB4M2F9LAorIDEyOCwgMTAyNCwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCisKK3siVGVzdCBwc2FfYXN5bW1ldHJpY192ZXJpZnkgLSBJbnZhbGlkIGtleSB0eXBlIChBRVMgS2V5KVxuIiwgNywgUFNBX0tFWV9UWVBFX0FFUywKK3sweDMwLCAweDgyLCAweDAyLCAweDVlLCAweDAyLCAweDAxLCAweDAwLCAweDAyLCAweDgxLCAweDgxLCAweDAwLCAweGFmLCAweDA1LAorIDB4N2QsIDB4MzksIDB4NmV9LCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX1ZFUklGWSwKKyBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOKFBTQV9BTEdfU0hBXzI1NiksCit7MHg2MSwgMHg2MiwgMHg2M30sIDMsCit7MHgyYywgMHg3NywgMHg0NCwgMHg5OCwgMHgzZiwgMHgwMiwgMHgzYSwgMHhjNywgMHhiYiwgMHgxYywgMHg1NSwgMHg1MiwgMHg5ZCwKKyAweDgzLCAweGVkLCAweDExLCAweGE3LCAweDZhLCAweDc4LCAweDk4LCAweGExLCAweGJiLCAweDVjLCAweGUxLCAweDkxLCAweDM3LAorIDB4NWEsIDB4NGEsIDB4YTcsIDB4NDksIDB4NWEsIDB4NjMsIDB4M2QsIDB4MjcsIDB4ODcsIDB4OWYsIDB4ZjUsIDB4OGUsIDB4YmEsCisgMHg1YSwgMHg1NywgMHgzNywgMHgxYywgMHgzNCwgMHhmZSwgMHhiMSwgMHgxOCwgMHgwZSwgMHg4YiwgMHg4NSwgMHgwZCwgMHg1NSwKKyAweDI0LCAweDc2LCAweGViLCAweGI1LCAweDYzLCAweDRkLCAweGY2LCAweDIwLCAweDI2LCAweDE5LCAweDkyLCAweGYxLCAweDJlLAorIDB4YmUsIDB4ZTksIDB4MDksIDB4NzAsIDB4NDEsIDB4ZGIsIDB4YmUsIDB4YTgsIDB4NWEsIDB4NDIsIDB4ZDQsIDB4NWIsIDB4MzQsCisgMHg0YiwgMHhlNSwgMHgwNywgMHgzYywgMHhlYiwgMHg3NywgMHgyZiwgMHhmYywgMHg2MCwgMHg0OSwgMHg1NCwgMHhiOSwgMHgxNSwKKyAweDhiLCAweGE4LCAweDFlLCAweGMzLCAweGRjLCAweDRkLCAweDlkLCAweDY1LCAweGUzLCAweGFiLCAweDdhLCAweGEzLCAweDE4LAorIDB4MTYsIDB4NWYsIDB4MzgsIDB4YzMsIDB4NmYsIDB4ODQsIDB4MWYsIDB4MWMsIDB4NjksIDB4Y2IsIDB4MWMsIDB4ZmEsIDB4NDksCisgMHg0YSwgMHhhNSwgMHhjYiwgMHhiNCwgMHhkNiwgMHhjMCwgMHhlZiwgMHhiYSwgMHhmYiwgMHgwNCwgMHgzYX0sCisgMTI4LCBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAorfSwKKworeyJUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIEludmFsaWQgdXNhZ2VcbiIsIDgsIFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUiwKK3swfSwgNjEwLCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fUkFXLAorezB4NjEsIDB4NjIsIDB4NjN9LCAzLAorezB4MmMsIDB4NzcsIDB4NDQsIDB4OTgsIDB4M2YsIDB4MDIsIDB4M2EsIDB4YzcsIDB4YmIsIDB4MWMsIDB4NTUsIDB4NTIsIDB4OWQsCisgMHg4MywgMHhlZCwgMHgxMSwgMHhhNywgMHg2YSwgMHg3OCwgMHg5OCwgMHhhMSwgMHhiYiwgMHg1YywgMHhlMSwgMHg5MSwgMHgzNywKKyAweDVhLCAweDRhLCAweGE3LCAweDQ5LCAweDVhLCAweDYzLCAweDNkLCAweDI3LCAweDg3LCAweDlmLCAweGY1LCAweDhlLCAweGJhLAorIDB4NWEsIDB4NTcsIDB4MzcsIDB4MWMsIDB4MzQsIDB4ZmUsIDB4YjEsIDB4MTgsIDB4MGUsIDB4OGIsIDB4ODUsIDB4MGQsIDB4NTUsCisgMHgyNCwgMHg3NiwgMHhlYiwgMHhiNSwgMHg2MywgMHg0ZCwgMHhmNiwgMHgyMCwgMHgyNiwgMHgxOSwgMHg5MiwgMHhmMSwgMHgyZSwKKyAweGJlLCAweGU5LCAweDA5LCAweDcwLCAweDQxLCAweGRiLCAweGJlLCAweGE4LCAweDVhLCAweDQyLCAweGQ0LCAweDViLCAweDM0LAorIDB4NGIsIDB4ZTUsIDB4MDcsIDB4M2MsIDB4ZWIsIDB4NzcsIDB4MmYsIDB4ZmMsIDB4NjAsIDB4NDksIDB4NTQsIDB4YjksIDB4MTUsCisgMHg4YiwgMHhhOCwgMHgxZSwgMHhjMywgMHhkYywgMHg0ZCwgMHg5ZCwgMHg2NSwgMHhlMywgMHhhYiwgMHg3YSwgMHhhMywgMHgxOCwKKyAweDE2LCAweDVmLCAweDM4LCAweGMzLCAweDZmLCAweDg0LCAweDFmLCAweDFjLCAweDY5LCAweGNiLCAweDFjLCAweGZhLCAweDQ5LAorIDB4NGEsIDB4YTUsIDB4Y2IsIDB4YjQsIDB4ZDYsIDB4YzAsIDB4ZWYsIDB4YmEsIDB4ZmIsIDB4MDQsIDB4M2F9LAorIDEyOCwgMTAyNCwgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQKK30sCisKK3siVGVzdCBwc2FfYXN5bW1ldHJpY192ZXJpZnkgLSBXcm9uZyBoYXNoIHNpemVcbiIsIDksIFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUiwKK3swfSwgNjEwLCBQU0FfS0VZX1VTQUdFX1ZFUklGWSwgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTihQU0FfQUxHX1NIQV8yNTYpLAorezB4YmEsIDB4NzgsIDB4MTYsIDB4YmYsIDB4OGYsIDB4MDEsIDB4Y2YsIDB4ZWEsIDB4NDEsIDB4NDEsIDB4NDAsIDB4ZGUsIDB4NWQsCisgMHhhZSwgMHgyMiwgMHgyMywgMHhiMCwgMHgwMywgMHg2MSwgMHhhMywgMHg5NiwgMHgxNywgMHg3YSwgMHg5YywgMHhiNCwgMHgxMCwKKyAweGZmLCAweDYxLCAweGYyLCAweDAwfSwgMzAsCit7MHhhNywgMHgzNiwgMHg2NCwgMHhkNSwgMHg1YiwgMHgzOSwgMHhjNywgMHhlYSwgMHg2YywgMHgxZSwgMHg1YiwgMHg1MCwgMHgxMSwKKyAweDcyLCAweDRhLCAweDExLCAweGUxLCAweGQ3LCAweDA3LCAweDNkLCAweDNhLCAweDY4LCAweGY0LCAweDhjLCAweDgzLCAweDZmLAorIDB4YWQsIDB4MTUsIDB4M2EsIDB4MWQsIDB4OTEsIDB4YjYsIDB4YWIsIDB4ZGIsIDB4YzgsIDB4ZjYsIDB4OWQsIDB4YTEsIDB4M2IsCisgMHgyMCwgMHg2YywgMHhjOSwgMHg2YSwgMHhmNiwgMHgzNiwgMHgzYiwgMHgxMSwgMHg0NCwgMHg1OCwgMHhiMCwgMHgyNiwgMHhhZiwKKyAweDE0LCAweGIyLCAweDRmLCAweGFiLCAweDg5LCAweDI5LCAweGVkLCAweDYzLCAweDRjLCAweDZhLCAweDJhLCAweGNhLCAweGNlLAorIDB4MGIsIDB4Y2MsIDB4NjIsIDB4ZDksIDB4YmIsIDB4NmEsIDB4OTgsIDB4NGEsIDB4ZmIsIDB4Y2IsIDB4ZmMsIDB4ZDMsIDB4YTAsCisgMHg2MCwgMHg4ZCwgMHgzMiwgMHhhMiwgMHhiYSwgMHhlNSwgMHgzNSwgMHhiOSwgMHhjZCwgMHgxZSwgMHhjZCwgMHhmOSwgMHhkZCwKKyAweDI4LCAweDFkLCAweGIxLCAweGUwLCAweDAyLCAweDVjLCAweDNiLCAweGZiLCAweDU1LCAweDEyLCAweDk2LCAweDNlLCAweGMzLAorIDB4YjksIDB4OGQsIDB4ZGEsIDB4YTYsIDB4OWUsIDB4MzgsIDB4YmMsIDB4M2MsIDB4ODQsIDB4YjEsIDB4YjYsIDB4MWEsIDB4MDQsCisgMHhlNSwgMHg2NCwgMHg4NiwgMHg0MCwgMHg4NSwgMHg2YSwgMHhhYywgMHhjNiwgMHhmYywgMHg3MywgMHgxMX0sCisgMTI4LCAxMDI0LCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKKworeyJUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIFdyb25nIHNpZ25hdHVyZVxuIiwgMTAsCitQU0FfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVksCit7MH0sIDE2MiwgUFNBX0tFWV9VU0FHRV9WRVJJRlksIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR04oUFNBX0FMR19TSEFfMjU2KSwKK3sweGJhLCAweDc4LCAweDE2LCAweGJmLCAweDhmLCAweDAxLCAweGNmLCAweGVhLCAweDQxLCAweDQxLCAweDQwLCAweGRlLCAweDVkLAorIDB4YWUsIDB4MjIsIDB4MjMsIDB4YjAsIDB4MDMsIDB4NjEsIDB4YTMsIDB4OTYsIDB4MTcsIDB4N2EsIDB4OWMsIDB4YjQsIDB4MTAsCisgMHhmZiwgMHg2MSwgMHhmMiwgMHgwMCwgMHgxNSwgMHhhZH0sIDMyLAorezB4YTgsIDB4MzYsIDB4NjQsIDB4ZDUsIDB4NWIsIDB4MzksIDB4YzcsIDB4ZWEsIDB4NmMsIDB4MWUsIDB4NWIsIDB4NTAsIDB4MTEsCisgMHg3MiwgMHg0YSwgMHgxMSwgMHhlMSwgMHhkNywgMHgwNywgMHgzZCwgMHgzYSwgMHg2OCwgMHhmNCwgMHg4YywgMHg4MywgMHg2ZiwKKyAweGFkLCAweDE1LCAweDNhLCAweDFkLCAweDkxLCAweGI2LCAweGFiLCAweGRiLCAweGM4LCAweGY2LCAweDlkLCAweGExLCAweDNiLAorIDB4MjAsIDB4NmMsIDB4YzksIDB4NmEsIDB4ZjYsIDB4MzYsIDB4M2IsIDB4MTEsIDB4NDQsIDB4NTgsIDB4YjAsIDB4MjYsIDB4YWYsCisgMHgxNCwgMHhiMiwgMHg0ZiwgMHhhYiwgMHg4OSwgMHgyOSwgMHhlZCwgMHg2MywgMHg0YywgMHg2YSwgMHgyYSwgMHhjYSwgMHhjZSwKKyAweDBiLCAweGNjLCAweDYyLCAweGQ5LCAweGJiLCAweDZhLCAweDk4LCAweDRhLCAweGZiLCAweGNiLCAweGZjLCAweGQzLCAweGEwLAorIDB4NjAsIDB4OGQsIDB4MzIsIDB4YTIsIDB4YmEsIDB4ZTUsIDB4MzUsIDB4YjksIDB4Y2QsIDB4MWUsIDB4Y2QsIDB4ZjksIDB4ZGQsCisgMHgyOCwgMHgxZCwgMHhiMSwgMHhlMCwgMHgwMiwgMHg1YywgMHgzYiwgMHhmYiwgMHg1NSwgMHgxMiwgMHg5NiwgMHgzZSwgMHhjMywKKyAweGI5LCAweDhkLCAweGRhLCAweGE2LCAweDllLCAweDM4LCAweGJjLCAweDNjLCAweDg0LCAweGIxLCAweGI2LCAweDFhLCAweDA0LAorIDB4ZTUsIDB4NjQsIDB4ODYsIDB4NDAsIDB4ODUsIDB4NmEsIDB4YWMsIDB4YzYsIDB4ZmMsIDB4NzMsIDB4MTF9LAorIDEyOCwgMTAyNCwgUFNBX0VSUk9SX0lOVkFMSURfU0lHTkFUVVJFCit9LAorCit7IlRlc3QgcHNhX2FzeW1tZXRyaWNfdmVyaWZ5IC0gRUMgcHVibGljIGtleVxuIiwgMTEsCisgUFNBX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKFBTQV9FQ0NfQ1VSVkVfU0VDUDI1NlIxKSwKK3swfSwgOTEsIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBQU0FfQUxHX0VDRFNBX0FOWSwKK3sweDlhLCAweGM0LCAweDMzLCAweDViLCAweDQ2LCAweDliLCAweGJkLCAweDc5LCAweDE0LCAweDM5LCAweDI0LCAweDg1LCAweDA0LAorIDB4ZGQsIDB4MGQsIDB4NDksIDB4YzcsIDB4MTMsIDB4NDksIDB4YTIsIDB4OTUsIDB4ZmUsIDB4ZTUsIDB4YTEsIDB4YzYsIDB4ODUsCisgMHgwNywgMHhmNCwgMHg1YSwgMHg5ZSwgMHgxYywgMHg3Yn0sIDMyLAorezB4NmEsIDB4MzMsIDB4OTksIDB4ZjYsIDB4OTQsIDB4MjEsIDB4ZmYsIDB4ZTEsIDB4NDksIDB4MDMsIDB4NzcsIDB4YWQsIDB4ZjIsCisgMHhlYSwgMHgxZiwgMHgxMSwgMHg3ZCwgMHg4MSwgMHhhNiwgMHgzYywgMHhmNSwgMHhiZiwgMHgyMiwgMHhlOSwgMHgxOCwgMHhkNSwKKyAweDExLCAweDc1LCAweGViLCAweDI1LCAweDkxLCAweDUxLCAweGNlLCAweDk1LCAweGQ3LCAweGMyLCAweDZjLCAweGMwLCAweDRlLAorIDB4MjUsIDB4NTAsIDB4M2UsIDB4MmYsIDB4N2EsIDB4MWUsIDB4YzMsIDB4NTcsIDB4M2UsIDB4M2MsIDB4MjQsIDB4MTIsIDB4NTMsCisgMHg0YiwgMHhiNCwgMHhhMSwgMHg5YiwgMHgzYSwgMHg3OCwgMHgxMSwgMHg3NCwgMHgyZiwgMHg0OSwgMHhmNSwgMHgwZn0sCisgNjQsIDUxMiwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfYXN5bW1ldHJpY192ZXJpZnkgLSBXcm9uZyBzaWduYXR1cmUgc2l6ZVxuIiwgMTIsCisgUFNBX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKFBTQV9FQ0NfQ1VSVkVfU0VDUDI1NlIxKSwKK3swfSwgOTEsIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBQU0FfQUxHX0VDRFNBX0FOWSwKK3sweDlhLCAweGM0LCAweDMzLCAweDViLCAweDQ2LCAweDliLCAweGJkLCAweDc5LCAweDE0LCAweDM5LCAweDI0LCAweDg1LCAweDA0LAorIDB4ZGQsIDB4MGQsIDB4NDksIDB4YzcsIDB4MTMsIDB4NDksIDB4YTIsIDB4OTUsIDB4ZmUsIDB4ZTUsIDB4YTEsIDB4YzYsIDB4ODUsCisgMHgwNywgMHhmNCwgMHg1YSwgMHg5ZSwgMHgxYywgMHg3Yn0sIDMyLAorezB4NmEsIDB4MzMsIDB4OTksIDB4ZjYsIDB4OTQsIDB4MjEsIDB4ZmYsIDB4ZTEsIDB4NDksIDB4MDMsIDB4NzcsIDB4YWQsIDB4ZjIsCisgMHhlYSwgMHgxZiwgMHgxMSwgMHg3ZCwgMHg4MSwgMHhhNiwgMHgzYywgMHhmNSwgMHhiZiwgMHgyMiwgMHhlOSwgMHgxOCwgMHhkNSwKKyAweDExLCAweDc1LCAweGViLCAweDI1LCAweDkxLCAweDUxLCAweGNlLCAweDk1LCAweGQ3LCAweGMyLCAweDZjLCAweGMwLCAweDRlLAorIDB4MjUsIDB4NTAsIDB4M2UsIDB4MmYsIDB4N2EsIDB4MWUsIDB4YzMsIDB4NTcsIDB4M2UsIDB4M2MsIDB4MjQsIDB4MTIsIDB4NTMsCisgMHg0YiwgMHhiNCwgMHhhMSwgMHg5YiwgMHgzYSwgMHg3OCwgMHgxMSwgMHg3NCwgMHgyZiwgMHg0OSwgMHhmNSwgMHgwZiwgMHgwMH0sCisgNjUsIDUxMiwgUFNBX0VSUk9SX0lOVkFMSURfU0lHTkFUVVJFCit9LAorfTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazJbXSA9IHsKK3siVGVzdCBwc2FfYXN5bW1ldHJpY192ZXJpZnkgLSBOZWdhdGl2ZSBjYXNlXG4iLCAxMywgUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSLAorezB9LCA2MTAsIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOX1JBVywKK3sweDYxLCAweDYyLCAweDYzfSwgMywKK3sweDJjLCAweDc3LCAweDQ0LCAweDk4LCAweDNmLCAweDAyLCAweDNhLCAweGM3LCAweGJiLCAweDFjLCAweDU1LCAweDUyLCAweDlkLAorIDB4ODMsIDB4ZWQsIDB4MTEsIDB4YTcsIDB4NmEsIDB4NzgsIDB4OTgsIDB4YTEsIDB4YmIsIDB4NWMsIDB4ZTEsIDB4OTEsIDB4MzcsCisgMHg1YSwgMHg0YSwgMHhhNywgMHg0OSwgMHg1YSwgMHg2MywgMHgzZCwgMHgyNywgMHg4NywgMHg5ZiwgMHhmNSwgMHg4ZSwgMHhiYSwKKyAweDVhLCAweDU3LCAweDM3LCAweDFjLCAweDM0LCAweGZlLCAweGIxLCAweDE4LCAweDBlLCAweDhiLCAweDg1LCAweDBkLCAweDU1LAorIDB4MjQsIDB4NzYsIDB4ZWIsIDB4YjUsIDB4NjMsIDB4NGQsIDB4ZjYsIDB4MjAsIDB4MjYsIDB4MTksIDB4OTIsIDB4ZjEsIDB4MmUsCisgMHhiZSwgMHhlOSwgMHgwOSwgMHg3MCwgMHg0MSwgMHhkYiwgMHhiZSwgMHhhOCwgMHg1YSwgMHg0MiwgMHhkNCwgMHg1YiwgMHgzNCwKKyAweDRiLCAweGU1LCAweDA3LCAweDNjLCAweGViLCAweDc3LCAweDJmLCAweGZjLCAweDYwLCAweDQ5LCAweDU0LCAweGI5LCAweDE1LAorIDB4OGIsIDB4YTgsIDB4MWUsIDB4YzMsIDB4ZGMsIDB4NGQsIDB4OWQsIDB4NjUsIDB4ZTMsIDB4YWIsIDB4N2EsIDB4YTMsIDB4MTgsCisgMHgxNiwgMHg1ZiwgMHgzOCwgMHhjMywgMHg2ZiwgMHg4NCwgMHgxZiwgMHgxYywgMHg2OSwgMHhjYiwgMHgxYywgMHhmYSwgMHg0OSwKKyAweDRhLCAweGE1LCAweGNiLCAweGI0LCAweGQ2LCAweGMwLCAweGVmLCAweGJhLCAweGZiLCAweDA0LCAweDNhfSwKKyAxMjgsIDEwMjQsIFBTQV9TVUNDRVNTCit9LAorfTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQyL3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQyL3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njg3MTQyCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDIvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2MwNDIuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9DUllQVE9fQkFTRSwgNDIpCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBjcnlwdG8gYXN5bW1ldHJpYyBBUElzXG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0hJR0hfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jcnlwdG9fbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfYzA0Ml9jcnlwdG9fbGlzdCwgRkFMU0UpOworCisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19GUkVFKTsKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDMvc291cmNlLm1rIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDMvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YzM0NjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0My9zb3VyY2UubWsKQEAgLTAsMCArMSwyMCBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9jMDQzLmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQzL3Rlc3RfYzA0My5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDMvdGVzdF9jMDQzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhZWEzNwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQzL3Rlc3RfYzA0My5jCkBAIC0wLDAgKzEsMTgxIEBACisKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2MwNDMuaCIKKyNpbmNsdWRlICJ0ZXN0X2RhdGEuaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2MwNDNfY3J5cHRvX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHBzYV9rZXlfYWdyZWVtZW50X3Rlc3QsCisgICAgcHNhX2tleV9hZ3JlZW1lbnRfbmVnYXRpdmVfdGVzdCwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludCAgICAgICAgIGdfdGVzdF9jb3VudCA9IDE7CitzdGF0aWMgdWludDhfdCAgICAgb3V0cHV0W1NJWkVfNTBCXTsKKworaW50MzJfdCBwc2Ffa2V5X2FncmVlbWVudF90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBpLCBzdGF0dXM7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgY2FwYWNpdHk7CisgICAgcHNhX2tleV9wb2xpY3lfdCAgICAgICAgcG9saWN5OworICAgIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QgIGdlbmVyYXRvciA9IHswfTsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCisgICAgeworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworCisgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgICAgIC8qIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazFbaV0udXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfYWxnKTsKKworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksIGNoZWNrMVtpXS5rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2xlbmd0aCwgJmNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgJnBvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIC8qIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV90eXBlLCBjaGVjazFbaV0ua2V5X2RhdGEsIGNoZWNrMVtpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgLyogU2V0IHVwIGEga2V5IGFncmVlbWVudCBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfQUdSRUVNRU5ULCAmZ2VuZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2hhbmRsZSwgY2hlY2sxW2ldLnBlZXJfa2V5LCBjaGVjazFbaV0ucGVlcl9rZXlfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2FsZyk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEFib3J0IGEgZ2VuZXJhdG9yICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9BQk9SVCwgJmdlbmVyYXRvcik7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyogUmV0cmlldmUgdGhlIGN1cnJlbnQgY2FwYWNpdHkgb2YgYSBnZW5lcmF0b3IgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRVRfR0VORVJBVE9SX0NBUEFDSVRZLCAmZ2VuZXJhdG9yLCAmY2FwYWNpdHkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKworICAgICAgICAvKiBDaGVjayBpZiB0aGUgZ2VuZXJhdG9yIGNhcGFjaXR5IG1hdGNoZXMgd2l0aCB0aGUgZXhwZWN0ZWQgY2FwYWNpdHkgKi8KKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoY2FwYWNpdHksIGNoZWNrMVtpXS5leHBlY3RlZF9jYXBhY2l0eSwgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisKKyAgICAgICAgLyogUmVhZCBzb21lIGRhdGEgZnJvbSBhIGdlbmVyYXRvciAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9SRUFELCAmZ2VuZXJhdG9yLCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5leHBlY3RlZF9vdXRwdXRfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOworCisgICAgICAgICAvKiBDaGVjayBpZiB0aGUgb3V0cHV0IG1hdGNoZXMgd2l0aCB0aGUgZXhwZWN0ZWQgZGF0YSAqLworICAgICAgICBURVNUX0FTU0VSVF9NRU1DTVAob3V0cHV0LCBjaGVjazFbaV0uZXhwZWN0ZWRfb3V0cHV0LCBjaGVjazFbaV0uZXhwZWN0ZWRfb3V0cHV0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTEpKTsKKworICAgICAgICAvKiBBYm9ydCBhIGdlbmVyYXRvciAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9BQk9SVCwgJmdlbmVyYXRvcik7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IHBzYV9rZXlfYWdyZWVtZW50X25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbnVtX2NoZWNrcyA9IHNpemVvZihjaGVjazIpL3NpemVvZihjaGVjazJbMF0pOworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIGksIHN0YXR1czsKKyAgICBwc2Ffa2V5X3BvbGljeV90ICAgICAgICBwb2xpY3k7CisgICAgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCAgZ2VuZXJhdG9yID0gezB9OworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGVja3M7IGkrKykKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2Ffa2V5X2FncmVlbWVudCAtIEludmFsaWQga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPndkX3JlcHJvZ3JhbV90aW1lcihXRF9DUllQVE9fVElNRU9VVCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgVkFMX1NUQVRVU19TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2syW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9rZXlfYWdyZWVtZW50IC0gSW52YWxpZCBrZXkgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBTZXQgdXAgYSBrZXkgYWdyZWVtZW50IG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9BR1JFRU1FTlQsICZnZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfaGFuZGxlLCBjaGVjazJbaV0ucGVlcl9rZXksIGNoZWNrMltpXS5wZWVyX2tleV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2Ffa2V5X2FncmVlbWVudCAtIFplcm8gYXMga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKKyAgICAgICAgLyogU2V0IHVwIGEga2V5IGFncmVlbWVudCBvcGVyYXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfQUdSRUVNRU5ULCAmZ2VuZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAwLCBjaGVjazJbaV0ucGVlcl9rZXksIGNoZWNrMltpXS5wZWVyX2tleV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2Ffa2V5X2FncmVlbWVudCAtIEVtcHR5IGtleSBoYW5kbGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCBjaGVjazJbaV0ua2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9sZW5ndGgsICZjaGVjazJbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2syW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgICAgICAvKiBTZXQgdXAgYSBrZXkgYWdyZWVtZW50IG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9BR1JFRU1FTlQsICZnZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfaGFuZGxlLCBjaGVjazJbaV0ucGVlcl9rZXksIGNoZWNrMltpXS5wZWVyX2tleV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRU1QVFlfU0xPVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQzL3Rlc3RfYzA0My5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDMvdGVzdF9jMDQzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE5MmI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQzL3Rlc3RfYzA0My5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX0MwNDNfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0MwNDNfQ0xJRU5UX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGMwNDMpCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfYzA0M19jcnlwdG9fbGlzdFtdOworCitpbnQzMl90IHBzYV9rZXlfYWdyZWVtZW50X3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOworaW50MzJfdCBwc2Ffa2V5X2FncmVlbWVudF9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKKyNlbmRpZiAvKiBfVEVTVF9DMDQzX0NMSUVOVF9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDMvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0My90ZXN0X2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzViYjU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDMvdGVzdF9kYXRhLmgKQEAgLTAsMCArMSwxOTAgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY3J5cHRvLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbNzVdOworICAgIHBzYV9rZXlfaGFuZGxlX3QgICAgICAgIGtleV9oYW5kbGU7CisgICAgcHNhX2tleV90eXBlX3QgICAgICAgICAga2V5X3R5cGU7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAga2V5X2RhdGFbOTFdOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGtleV9sZW5ndGg7CisgICAgcHNhX2tleV91c2FnZV90ICAgICAgICAgdXNhZ2U7CisgICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAga2V5X2FsZzsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBwZWVyX2tleVsxMjBdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIHBlZXJfa2V5X2xlbmd0aDsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBleHBlY3RlZF9vdXRwdXRbNDhdOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dHB1dF9sZW5ndGg7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfY2FwYWNpdHk7CisgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazFbXSA9IHsKK3siVGVzdCBwc2Ffa2V5X2FncmVlbWVudCAtIEVDREggU0VDUDI1NlIxXG4iLCAxLAorIFBTQV9LRVlfVFlQRV9FQ0NfS0VZUEFJUihQU0FfRUNDX0NVUlZFX1NFQ1AyNTZSMSksCit7MHhjOCwgMHg4ZiwgMHgwMSwgMHhmNSwgMHgxMCwgMHhkOSwgMHhhYywgMHgzZiwgMHg3MCwgMHhhMiwgMHg5MiwgMHhkYSwgMHhhMiwKKyAweDMxLCAweDZkLCAweGU1LCAweDQ0LCAweGU5LCAweGFhLCAweGI4LCAweGFmLCAweGU4LCAweDQwLCAweDQ5LCAweGM2LCAweDJhLAorIDB4OWMsIDB4NTcsIDB4ODYsIDB4MmQsIDB4MTQsIDB4MzN9LCAzMiwgUFNBX0tFWV9VU0FHRV9ERVJJVkUsIFBTQV9BTEdfRUNESChQU0FfQUxHX1NFTEVDVF9SQVcpLAorezB4MzAsIDB4NTksIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDcsIDB4MmEsIDB4ODYsIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDIsIDB4MDEsCisgMHgwNiwgMHgwOCwgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgzZCwgMHgwMywgMHgwMSwgMHgwNywgMHgwMywgMHg0MiwgMHgwMCwKKyAweDA0LCAweGQxLCAweDJkLCAweGZiLCAweDUyLCAweDg5LCAweGM4LCAweGQ0LCAweGY4LCAweDEyLCAweDA4LCAweGI3LCAweDAyLAorIDB4NzAsIDB4MzksIDB4OGMsIDB4MzQsIDB4MjIsIDB4OTYsIDB4OTcsIDB4MGEsIDB4MGIsIDB4Y2MsIDB4YjcsIDB4NGMsIDB4NzMsCisgMHg2ZiwgMHhjNywgMHg1NSwgMHg0NCwgMHg5NCwgMHhiZiwgMHg2MywgMHg1NiwgMHhmYiwgMHhmMywgMHhjYSwgMHgzNiwgMHg2YywKKyAweGMyLCAweDNlLCAweDgxLCAweDU3LCAweDg1LCAweDRjLCAweDEzLCAweGM1LCAweDhkLCAweDZhLCAweGFjLCAweDIzLCAweGYwLAorIDB4NDYsIDB4YWQsIDB4YTMsIDB4MGYsIDB4ODMsIDB4NTMsIDB4ZTcsIDB4NGYsIDB4MzMsIDB4MDMsIDB4OTgsIDB4NzIsIDB4YWJ9LAorIDkxLAorezB4ZDYsIDB4ODQsIDB4MGYsIDB4NmIsIDB4NDIsIDB4ZjYsIDB4ZWQsIDB4YWYsIDB4ZDEsIDB4MzEsIDB4MTYsIDB4ZTAsIDB4ZTEsCisgMHgyNSwgMHg2NSwgMHgyMCwgMHgyZiwgMHhlZiwgMHg4ZSwgMHg5ZSwgMHhjZSwgMHg3ZCwgMHhjZSwgMHgwMywgMHg4MSwgMHgyNCwKKyAweDY0LCAweGQwLCAweDRiLCAweDk0LCAweDQyLCAweGRlfSwgMzIsIDMyLCBQU0FfU1VDQ0VTUworfSwKKworeyJUZXN0IHBzYV9rZXlfYWdyZWVtZW50IC0gRUNESCBTRUNQMzg0UjFcbiIsIDIsCisgUFNBX0tFWV9UWVBFX0VDQ19LRVlQQUlSKFBTQV9FQ0NfQ1VSVkVfU0VDUDM4NFIxKSwKK3sweDA5LCAweDlmLCAweDNjLCAweDcwLCAweDM0LCAweGQ0LCAweGEyLCAweGM2LCAweDk5LCAweDg4LCAweDRkLCAweDczLCAweGEzLAorIDB4NzUsIDB4YTYsIDB4N2YsIDB4NzYsIDB4MjQsIDB4ZWYsIDB4N2MsIDB4NmIsIDB4M2MsIDB4MGYsIDB4MTYsIDB4MDYsIDB4NDcsCisgMHhiNiwgMHg3NCwgMHgxNCwgMHhkYywgMHhlNiwgMHg1NSwgMHhlMywgMHg1YiwgMHg1MywgMHg4MCwgMHg0MSwgMHhlNiwgMHg0OSwKKyAweGVlLCAweDNmLCAweGFlLCAweGY4LCAweDk2LCAweDc4LCAweDNhLCAweGIxLCAweDk0fSwgNDgsIFBTQV9LRVlfVVNBR0VfREVSSVZFLAorIFBTQV9BTEdfRUNESChQU0FfQUxHX1NFTEVDVF9SQVcpLAorezB4MzAsIDB4NzYsIDB4MzAsIDB4MTAsIDB4MDYsIDB4MDcsIDB4MmEsIDB4ODYsIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDIsIDB4MDEsCisgMHgwNiwgMHgwNSwgMHgyYiwgMHg4MSwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMywgMHg2MiwgMHgwMCwgMHgwNCwgMHhlNSwgMHg1OCwKKyAweGRiLCAweGVmLCAweDUzLCAweGVlLCAweGNkLCAweGUzLCAweGQzLCAweGZjLCAweGNmLCAweGMxLCAweGFlLCAweGEwLCAweDhhLAorIDB4ODksIDB4YTksIDB4ODcsIDB4NDcsIDB4NWQsIDB4MTIsIDB4ZmQsIDB4OTUsIDB4MGQsIDB4ODMsIDB4Y2YsIDB4YTQsIDB4MTcsCisgMHgzMiwgMHhiYywgMHg1MCwgMHg5ZCwgMHgwZCwgMHgxYSwgMHhjNCwgMHgzYSwgMHgwMywgMHgzNiwgMHhkZSwgMHhmOSwgMHg2ZiwKKyAweGRhLCAweDQxLCAweGQwLCAweDc3LCAweDRhLCAweDM1LCAweDcxLCAweGRjLCAweGZiLCAweGVjLCAweDdhLCAweGFjLCAweGYzLAorIDB4MTksIDB4NjQsIDB4NzIsIDB4MTYsIDB4OWUsIDB4ODMsIDB4ODQsIDB4MzAsIDB4MzYsIDB4N2YsIDB4NjYsIDB4ZWUsIDB4YmUsCisgMHgzYywgMHg2ZSwgMHg3MCwgMHhjNCwgMHgxNiwgMHhkZCwgMHg1ZiwgMHgwYywgMHg2OCwgMHg3NSwgMHg5ZCwgMHhkMSwgMHhmZiwKKyAweGY4LCAweDNmLCAweGE0LCAweDAxLCAweDQyLCAweDIwLCAweDlkLCAweGZmLCAweDVlLCAweGFhLCAweGQ5LCAweDZkLCAweGI5LAorIDB4ZTYsIDB4MzgsIDB4NmN9LCAxMjAsCit7MHgxMSwgMHgxOCwgMHg3MywgMHgzMSwgMHhjMiwgMHg3OSwgMHg5NiwgMHgyZCwgMHg5MywgMHhkNiwgMHgwNCwgMHgyNCwgMHgzZiwKKyAweGQ1LCAweDkyLCAweGNiLCAweDlkLCAweDBhLCAweDkyLCAweDZmLCAweDQyLCAweDJlLCAweDQ3LCAweDE4LCAweDc1LCAweDIxLAorIDB4MjgsIDB4N2UsIDB4NzEsIDB4NTYsIDB4YzUsIDB4YzQsIDB4ZDYsIDB4MDMsIDB4MTMsIDB4NTUsIDB4NjksIDB4YjksIDB4ZTksCisgMHhkMCwgMHg5YywgMHhmNSwgMHhkNCwgMHhhMiwgMHg3MCwgMHhmNSwgMHg5NywgMHg0Nn0sIDQ4LCA0OCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2Ffa2V5X2FncmVlbWVudCAtIEludmFsaWQgdXNhZ2VcbiIsIDMsCisgUFNBX0tFWV9UWVBFX0VDQ19LRVlQQUlSKFBTQV9FQ0NfQ1VSVkVfU0VDUDI1NlIxKSwKK3sweGM4LCAweDhmLCAweDAxLCAweGY1LCAweDEwLCAweGQ5LCAweGFjLCAweDNmLCAweDcwLCAweGEyLCAweDkyLCAweGRhLCAweGEyLAorIDB4MzEsIDB4NmQsIDB4ZTUsIDB4NDQsIDB4ZTksIDB4YWEsIDB4YjgsIDB4YWYsIDB4ZTgsIDB4NDAsIDB4NDksIDB4YzYsIDB4MmEsCisgMHg5YywgMHg1NywgMHg4NiwgMHgyZCwgMHgxNCwgMHgzM30sIDMyLCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfRUNESChQU0FfQUxHX1NFTEVDVF9SQVcpLAorezB4MzAsIDB4NTksIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDcsIDB4MmEsIDB4ODYsIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDIsIDB4MDEsCisgMHgwNiwgMHgwOCwgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgzZCwgMHgwMywgMHgwMSwgMHgwNywgMHgwMywgMHg0MiwgMHgwMCwKKyAweDA0LCAweGQxLCAweDJkLCAweGZiLCAweDUyLCAweDg5LCAweGM4LCAweGQ0LCAweGY4LCAweDEyLCAweDA4LCAweGI3LCAweDAyLAorIDB4NzAsIDB4MzksIDB4OGMsIDB4MzQsIDB4MjIsIDB4OTYsIDB4OTcsIDB4MGEsIDB4MGIsIDB4Y2MsIDB4YjcsIDB4NGMsIDB4NzMsCisgMHg2ZiwgMHhjNywgMHg1NSwgMHg0NCwgMHg5NCwgMHhiZiwgMHg2MywgMHg1NiwgMHhmYiwgMHhmMywgMHhjYSwgMHgzNiwgMHg2YywKKyAweGMyLCAweDNlLCAweDgxLCAweDU3LCAweDg1LCAweDRjLCAweDEzLCAweGM1LCAweDhkLCAweDZhLCAweGFjLCAweDIzLCAweGYwLAorIDB4NDYsIDB4YWQsIDB4YTMsIDB4MGYsIDB4ODMsIDB4NTMsIDB4ZTcsIDB4NGYsIDB4MzMsIDB4MDMsIDB4OTgsIDB4NzIsIDB4YWJ9LAorIDkxLAorezB4ZDYsIDB4ODQsIDB4MGYsIDB4NmIsIDB4NDIsIDB4ZjYsIDB4ZWQsIDB4YWYsIDB4ZDEsIDB4MzEsIDB4MTYsIDB4ZTAsIDB4ZTEsCisgMHgyNSwgMHg2NSwgMHgyMCwgMHgyZiwgMHhlZiwgMHg4ZSwgMHg5ZSwgMHhjZSwgMHg3ZCwgMHhjZSwgMHgwMywgMHg4MSwgMHgyNCwKKyAweDY0LCAweGQwLCAweDRiLCAweDk0LCAweDQyLCAweGRlfSwgMzIsIDMyLCBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAorfSwKKworeyJUZXN0IHBzYV9rZXlfYWdyZWVtZW50IC0gVW5rbm93biBLREZcbiIsIDQsCisgUFNBX0tFWV9UWVBFX0VDQ19LRVlQQUlSKFBTQV9FQ0NfQ1VSVkVfU0VDUDI1NlIxKSwKK3sweGM4LCAweDhmLCAweDAxLCAweGY1LCAweDEwLCAweGQ5LCAweGFjLCAweDNmLCAweDcwLCAweGEyLCAweDkyLCAweGRhLCAweGEyLAorIDB4MzEsIDB4NmQsIDB4ZTUsIDB4NDQsIDB4ZTksIDB4YWEsIDB4YjgsIDB4YWYsIDB4ZTgsIDB4NDAsIDB4NDksIDB4YzYsIDB4MmEsCisgMHg5YywgMHg1NywgMHg4NiwgMHgyZCwgMHgxNCwgMHgzM30sIDMyLCBQU0FfS0VZX1VTQUdFX0RFUklWRSwgUFNBX0FMR19FQ0RIKDApLAorezB4MzAsIDB4NTksIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDcsIDB4MmEsIDB4ODYsIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDIsIDB4MDEsCisgMHgwNiwgMHgwOCwgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgzZCwgMHgwMywgMHgwMSwgMHgwNywgMHgwMywgMHg0MiwgMHgwMCwKKyAweDA0LCAweGQxLCAweDJkLCAweGZiLCAweDUyLCAweDg5LCAweGM4LCAweGQ0LCAweGY4LCAweDEyLCAweDA4LCAweGI3LCAweDAyLAorIDB4NzAsIDB4MzksIDB4OGMsIDB4MzQsIDB4MjIsIDB4OTYsIDB4OTcsIDB4MGEsIDB4MGIsIDB4Y2MsIDB4YjcsIDB4NGMsIDB4NzMsCisgMHg2ZiwgMHhjNywgMHg1NSwgMHg0NCwgMHg5NCwgMHhiZiwgMHg2MywgMHg1NiwgMHhmYiwgMHhmMywgMHhjYSwgMHgzNiwgMHg2YywKKyAweGMyLCAweDNlLCAweDgxLCAweDU3LCAweDg1LCAweDRjLCAweDEzLCAweGM1LCAweDhkLCAweDZhLCAweGFjLCAweDIzLCAweGYwLAorIDB4NDYsIDB4YWQsIDB4YTMsIDB4MGYsIDB4ODMsIDB4NTMsIDB4ZTcsIDB4NGYsIDB4MzMsIDB4MDMsIDB4OTgsIDB4NzIsIDB4YWJ9LAorIDkxLAorezB4ZDYsIDB4ODQsIDB4MGYsIDB4NmIsIDB4NDIsIDB4ZjYsIDB4ZWQsIDB4YWYsIDB4ZDEsIDB4MzEsIDB4MTYsIDB4ZTAsIDB4ZTEsCisgMHgyNSwgMHg2NSwgMHgyMCwgMHgyZiwgMHhlZiwgMHg4ZSwgMHg5ZSwgMHhjZSwgMHg3ZCwgMHhjZSwgMHgwMywgMHg4MSwgMHgyNCwKKyAweDY0LCAweGQwLCAweDRiLCAweDk0LCAweDQyLCAweGRlfSwgMzIsIDMyLCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAorfSwKKworeyJUZXN0IHBzYV9rZXlfYWdyZWVtZW50IC0gTm90IGEga2V5IGFncmVlbWVudCBhbGdcbiIsIDUsCisgUFNBX0tFWV9UWVBFX0VDQ19LRVlQQUlSKFBTQV9FQ0NfQ1VSVkVfU0VDUDI1NlIxKSwKK3sweGM4LCAweDhmLCAweDAxLCAweGY1LCAweDEwLCAweGQ5LCAweGFjLCAweDNmLCAweDcwLCAweGEyLCAweDkyLCAweGRhLCAweGEyLAorIDB4MzEsIDB4NmQsIDB4ZTUsIDB4NDQsIDB4ZTksIDB4YWEsIDB4YjgsIDB4YWYsIDB4ZTgsIDB4NDAsIDB4NDksIDB4YzYsIDB4MmEsCisgMHg5YywgMHg1NywgMHg4NiwgMHgyZCwgMHgxNCwgMHgzM30sIDMyLCBQU0FfS0VZX1VTQUdFX0RFUklWRSwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NiksCit7MHgzMCwgMHg1OSwgMHgzMCwgMHgxMywgMHgwNiwgMHgwNywgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgzZCwgMHgwMiwgMHgwMSwKKyAweDA2LCAweDA4LCAweDJhLCAweDg2LCAweDQ4LCAweGNlLCAweDNkLCAweDAzLCAweDAxLCAweDA3LCAweDAzLCAweDQyLCAweDAwLAorIDB4MDQsIDB4ZDEsIDB4MmQsIDB4ZmIsIDB4NTIsIDB4ODksIDB4YzgsIDB4ZDQsIDB4ZjgsIDB4MTIsIDB4MDgsIDB4YjcsIDB4MDIsCisgMHg3MCwgMHgzOSwgMHg4YywgMHgzNCwgMHgyMiwgMHg5NiwgMHg5NywgMHgwYSwgMHgwYiwgMHhjYywgMHhiNywgMHg0YywgMHg3MywKKyAweDZmLCAweGM3LCAweDU1LCAweDQ0LCAweDk0LCAweGJmLCAweDYzLCAweDU2LCAweGZiLCAweGYzLCAweGNhLCAweDM2LCAweDZjLAorIDB4YzIsIDB4M2UsIDB4ODEsIDB4NTcsIDB4ODUsIDB4NGMsIDB4MTMsIDB4YzUsIDB4OGQsIDB4NmEsIDB4YWMsIDB4MjMsIDB4ZjAsCisgMHg0NiwgMHhhZCwgMHhhMywgMHgwZiwgMHg4MywgMHg1MywgMHhlNywgMHg0ZiwgMHgzMywgMHgwMywgMHg5OCwgMHg3MiwgMHhhYn0sCisgOTEsCit7MHhkNiwgMHg4NCwgMHgwZiwgMHg2YiwgMHg0MiwgMHhmNiwgMHhlZCwgMHhhZiwgMHhkMSwgMHgzMSwgMHgxNiwgMHhlMCwgMHhlMSwKKyAweDI1LCAweDY1LCAweDIwLCAweDJmLCAweGVmLCAweDhlLCAweDllLCAweGNlLCAweDdkLCAweGNlLCAweDAzLCAweDgxLCAweDI0LAorIDB4NjQsIDB4ZDAsIDB4NGIsIDB4OTQsIDB4NDIsIDB4ZGV9LCAzMiwgMzIsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorCit7IlRlc3QgcHNhX2tleV9hZ3JlZW1lbnQgLSBQdWJsaWMga2V5IG9uIGRpZmZlcmVudCBjdXJ2ZVxuIiwgNiwKKyBQU0FfS0VZX1RZUEVfRUNDX0tFWVBBSVIoUFNBX0VDQ19DVVJWRV9TRUNQMjU2UjEpLAorezB4YzgsIDB4OGYsIDB4MDEsIDB4ZjUsIDB4MTAsIDB4ZDksIDB4YWMsIDB4M2YsIDB4NzAsIDB4YTIsIDB4OTIsIDB4ZGEsIDB4YTIsCisgMHgzMSwgMHg2ZCwgMHhlNSwgMHg0NCwgMHhlOSwgMHhhYSwgMHhiOCwgMHhhZiwgMHhlOCwgMHg0MCwgMHg0OSwgMHhjNiwgMHgyYSwKKyAweDljLCAweDU3LCAweDg2LCAweDJkLCAweDE0LCAweDMzfSwgMzIsIFBTQV9LRVlfVVNBR0VfREVSSVZFLCBQU0FfQUxHX0VDREgoUFNBX0FMR19TRUxFQ1RfUkFXKSwKK3sweDMwLCAweDc2LCAweDMwLCAweDEwLCAweDA2LCAweDA3LCAweDJhLCAweDg2LCAweDQ4LCAweGNlLCAweDNkLCAweDAyLCAweDAxLAorIDB4MDYsIDB4MDUsIDB4MmIsIDB4ODEsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDMsIDB4NjIsIDB4MDAsIDB4MDQsIDB4ZTUsIDB4NTgsCisgMHhkYiwgMHhlZiwgMHg1MywgMHhlZSwgMHhjZCwgMHhlMywgMHhkMywgMHhmYywgMHhjZiwgMHhjMSwgMHhhZSwgMHhhMCwgMHg4YSwKKyAweDg5LCAweGE5LCAweDg3LCAweDQ3LCAweDVkLCAweDEyLCAweGZkLCAweDk1LCAweDBkLCAweDgzLCAweGNmLCAweGE0LCAweDE3LAorIDB4MzIsIDB4YmMsIDB4NTAsIDB4OWQsIDB4MGQsIDB4MWEsIDB4YzQsIDB4M2EsIDB4MDMsIDB4MzYsIDB4ZGUsIDB4ZjksIDB4NmYsCisgMHhkYSwgMHg0MSwgMHhkMCwgMHg3NywgMHg0YSwgMHgzNSwgMHg3MSwgMHhkYywgMHhmYiwgMHhlYywgMHg3YSwgMHhhYywgMHhmMywKKyAweDE5LCAweDY0LCAweDcyLCAweDE2LCAweDllLCAweDgzLCAweDg0LCAweDMwLCAweDM2LCAweDdmLCAweDY2LCAweGVlLCAweGJlLAorIDB4M2MsIDB4NmUsIDB4NzAsIDB4YzQsIDB4MTYsIDB4ZGQsIDB4NWYsIDB4MGMsIDB4NjgsIDB4NzUsIDB4OWQsIDB4ZDEsIDB4ZmYsCisgMHhmOCwgMHgzZiwgMHhhNCwgMHgwMSwgMHg0MiwgMHgyMCwgMHg5ZCwgMHhmZiwgMHg1ZSwgMHhhYSwgMHhkOSwgMHg2ZCwgMHhiOSwKKyAweGU2LCAweDM4LCAweDZjfSwgMTIwLAorezB9LCAwLCAwLCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKKworeyJUZXN0IHBzYV9rZXlfYWdyZWVtZW50IC0gUHVibGljIGtleSBpbnN0ZWFkIG9mIHByaXZhdGUga2V5XG4iLCA3LAorIFBTQV9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWShQU0FfRUNDX0NVUlZFX1NFQ1AyNTZSMSksCit7MHgzMCwgMHg1OSwgMHgzMCwgMHgxMywgMHgwNiwgMHgwNywgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgzZCwgMHgwMiwgMHgwMSwKKyAweDA2LCAweDA4LCAweDJhLCAweDg2LCAweDQ4LCAweGNlLCAweDNkLCAweDAzLCAweDAxLCAweDA3LCAweDAzLCAweDQyLCAweDAwLAorIDB4MDQsIDB4ZDEsIDB4MmQsIDB4ZmIsIDB4NTIsIDB4ODksIDB4YzgsIDB4ZDQsIDB4ZjgsIDB4MTIsIDB4MDgsIDB4YjcsIDB4MDIsCisgMHg3MCwgMHgzOSwgMHg4YywgMHgzNCwgMHgyMiwgMHg5NiwgMHg5NywgMHgwYSwgMHgwYiwgMHhjYywgMHhiNywgMHg0YywgMHg3MywKKyAweDZmLCAweGM3LCAweDU1LCAweDQ0LCAweDk0LCAweGJmLCAweDYzLCAweDU2LCAweGZiLCAweGYzLCAweGNhLCAweDM2LCAweDZjLAorIDB4YzIsIDB4M2UsIDB4ODEsIDB4NTcsIDB4ODUsIDB4NGMsIDB4MTMsIDB4YzUsIDB4OGQsIDB4NmEsIDB4YWMsIDB4MjMsIDB4ZjAsCisgMHg0NiwgMHhhZCwgMHhhMywgMHgwZiwgMHg4MywgMHg1MywgMHhlNywgMHg0ZiwgMHgzMywgMHgwMywgMHg5OCwgMHg3MiwgMHhhYn0sCisgOTEsIFBTQV9LRVlfVVNBR0VfREVSSVZFLCBQU0FfQUxHX0VDREgoUFNBX0FMR19TRUxFQ1RfUkFXKSwKK3sweDMwLCAweDU5LCAweDMwLCAweDEzLCAweDA2LCAweDA3LCAweDJhLCAweDg2LCAweDQ4LCAweGNlLCAweDNkLCAweDAyLCAweDAxLAorIDB4MDYsIDB4MDgsIDB4MmEsIDB4ODYsIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDMsIDB4MDEsIDB4MDcsIDB4MDMsIDB4NDIsIDB4MDAsCisgMHgwNCwgMHhkMSwgMHgyZCwgMHhmYiwgMHg1MiwgMHg4OSwgMHhjOCwgMHhkNCwgMHhmOCwgMHgxMiwgMHgwOCwgMHhiNywgMHgwMiwKKyAweDcwLCAweDM5LCAweDhjLCAweDM0LCAweDIyLCAweDk2LCAweDk3LCAweDBhLCAweDBiLCAweGNjLCAweGI3LCAweDRjLCAweDczLAorIDB4NmYsIDB4YzcsIDB4NTUsIDB4NDQsIDB4OTQsIDB4YmYsIDB4NjMsIDB4NTYsIDB4ZmIsIDB4ZjMsIDB4Y2EsIDB4MzYsIDB4NmMsCisgMHhjMiwgMHgzZSwgMHg4MSwgMHg1NywgMHg4NSwgMHg0YywgMHgxMywgMHhjNSwgMHg4ZCwgMHg2YSwgMHhhYywgMHgyMywgMHhmMCwKKyAweDQ2LCAweGFkLCAweGEzLCAweDBmLCAweDgzLCAweDUzLCAweGU3LCAweDRmLCAweDMzLCAweDAzLCAweDk4LCAweDcyLCAweGFifSwKKyA5MSwgezB9LCAwLCAwLCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorfSwKK307CisKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2syW10gPSB7Cit7IlRlc3QgcHNhX2tleV9hZ3JlZW1lbnQgLSBOZWdhdGl2ZSBjYXNlXG4iLCA4LAorIFBTQV9LRVlfVFlQRV9FQ0NfS0VZUEFJUihQU0FfRUNDX0NVUlZFX1NFQ1AyNTZSMSksCit7MHhjOCwgMHg4ZiwgMHgwMSwgMHhmNSwgMHgxMCwgMHhkOSwgMHhhYywgMHgzZiwgMHg3MCwgMHhhMiwgMHg5MiwgMHhkYSwgMHhhMiwKKyAweDMxLCAweDZkLCAweGU1LCAweDQ0LCAweGU5LCAweGFhLCAweGI4LCAweGFmLCAweGU4LCAweDQwLCAweDQ5LCAweGM2LCAweDJhLAorIDB4OWMsIDB4NTcsIDB4ODYsIDB4MmQsIDB4MTQsIDB4MzN9LCAzMiwgUFNBX0tFWV9VU0FHRV9ERVJJVkUsIFBTQV9BTEdfRUNESChQU0FfQUxHX1NFTEVDVF9SQVcpLAorezB4MzAsIDB4NTksIDB4MzAsIDB4MTMsIDB4MDYsIDB4MDcsIDB4MmEsIDB4ODYsIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDIsIDB4MDEsCisgMHgwNiwgMHgwOCwgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgzZCwgMHgwMywgMHgwMSwgMHgwNywgMHgwMywgMHg0MiwgMHgwMCwKKyAweDA0LCAweGQxLCAweDJkLCAweGZiLCAweDUyLCAweDg5LCAweGM4LCAweGQ0LCAweGY4LCAweDEyLCAweDA4LCAweGI3LCAweDAyLAorIDB4NzAsIDB4MzksIDB4OGMsIDB4MzQsIDB4MjIsIDB4OTYsIDB4OTcsIDB4MGEsIDB4MGIsIDB4Y2MsIDB4YjcsIDB4NGMsIDB4NzMsCisgMHg2ZiwgMHhjNywgMHg1NSwgMHg0NCwgMHg5NCwgMHhiZiwgMHg2MywgMHg1NiwgMHhmYiwgMHhmMywgMHhjYSwgMHgzNiwgMHg2YywKKyAweGMyLCAweDNlLCAweDgxLCAweDU3LCAweDg1LCAweDRjLCAweDEzLCAweGM1LCAweDhkLCAweDZhLCAweGFjLCAweDIzLCAweGYwLAorIDB4NDYsIDB4YWQsIDB4YTMsIDB4MGYsIDB4ODMsIDB4NTMsIDB4ZTcsIDB4NGYsIDB4MzMsIDB4MDMsIDB4OTgsIDB4NzIsIDB4YWJ9LAorIDkxLAorezB4ZDYsIDB4ODQsIDB4MGYsIDB4NmIsIDB4NDIsIDB4ZjYsIDB4ZWQsIDB4YWYsIDB4ZDEsIDB4MzEsIDB4MTYsIDB4ZTAsIDB4ZTEsCisgMHgyNSwgMHg2NSwgMHgyMCwgMHgyZiwgMHhlZiwgMHg4ZSwgMHg5ZSwgMHhjZSwgMHg3ZCwgMHhjZSwgMHgwMywgMHg4MSwgMHgyNCwKKyAweDY0LCAweGQwLCAweDRiLCAweDk0LCAweDQyLCAweGRlfSwgMzIsIDMyLCBQU0FfU1VDQ0VTUworfSwKK307CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0My90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0My90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiYTVlMwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQzL3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUzIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9jMDQzLmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfQ1JZUFRPX0JBU0UsIDQzKQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgY3J5cHRvIGdlbmVyYXRvciBBUElzXG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0hJR0hfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jcnlwdG9fbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfYzA0M19jcnlwdG9fbGlzdCwgRkFMU0UpOworCisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19GUkVFKTsKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0c3VpdGUuZGIgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RzdWl0ZS5kYgppbmRleCA4YWQ3YzU2Li42NjE3MGVlIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RzdWl0ZS5kYgorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RzdWl0ZS5kYgpAQCAtMSw1ICsxLDUgQEAKICMvKiogQGZpbGUKLSMgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAjICoKICMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTM1LDUgKzM1LDMzIEBACiB0ZXN0X2MwMTMKIHRlc3RfYzAxNAogdGVzdF9jMDE1Cit0ZXN0X2MwMTYKK3Rlc3RfYzAxNwordGVzdF9jMDE4Cit0ZXN0X2MwMTkKK3Rlc3RfYzAyMAordGVzdF9jMDIxCit0ZXN0X2MwMjIKK3Rlc3RfYzAyMwordGVzdF9jMDI0Cit0ZXN0X2MwMjUKK3Rlc3RfYzAyNgordGVzdF9jMDI3Cit0ZXN0X2MwMjgKK3Rlc3RfYzAyOQordGVzdF9jMDMwCit0ZXN0X2MwMzEKK3Rlc3RfYzAzMgordGVzdF9jMDMzCit0ZXN0X2MwMzQKK3Rlc3RfYzAzNQordGVzdF9jMDM2Cit0ZXN0X2MwMzcKK3Rlc3RfYzAzOAordGVzdF9jMDM5Cit0ZXN0X2MwNDAKK3Rlc3RfYzA0MQordGVzdF9jMDQyCit0ZXN0X2MwNDMKIAogKEVORCkKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAxL3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAxL3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODkzZTdjCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDEvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfczAwMS5jCitDQ19PUFRJT05TID0gLURJVFNfVEVTVAorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAxL3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAxL3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjg5NjkyCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDEvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X3MwMDEuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9TVE9SQUdFX0JBU0UsIDEpCisjZGVmaW5lIFRFU1RfREVTQyAiS2V5IG5vdCBmb3VuZCBlcnJvciBjaGVja1xuIgorCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0hJR0hfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9zZWN1cmVfc3RvcmFnZV9saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9zMDAxX3NzdF9saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDEvdGVzdF9pdHNfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDEvdGVzdF9pdHNfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2ZjMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMS90ZXN0X2l0c19kYXRhLmgKQEAgLTAsMCArMSw4MiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfUzAwMV9JVFNfREFUQV9URVNUU19IXworI2RlZmluZSBfVEVTVF9TMDAxX0lUU19EQVRBX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLmgiCisKKyNkZWZpbmUgU1NUX0ZVTkNUSU9OIHZhbC0+aXRzX2Z1bmN0aW9uCisjZGVmaW5lIHBzYV9zc3RfdWlkX3QgcHNhX2l0c191aWRfdAorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzEwMF07CisgICAgZW51bSBpdHNfZnVuY3Rpb25fY29kZSAgYXBpOworICAgIHBzYV9pdHNfc3RhdHVzX3QgICAgICAgIHN0YXR1czsKK30gdGVzdF9kYXRhOworCitzdGF0aWMgc3RydWN0IHBzYV9pdHNfaW5mb190IGluZm87CitzdGF0aWMgdGVzdF9kYXRhIHMwMDFfZGF0YVtdID0geworeworICJUaGlzIGlzIGR1bW15IGZvciBpbmRleDAiLCAwLCAwCit9LAoreworICJDYWxsIHRoZSBnZXQgYXBpIHdoZW4gbm8gdWlkIGlzIHNldCIsIFZBTF9JVFNfR0VULCBQU0FfSVRTX0VSUk9SX0tFWV9OT1RfRk9VTkQKK30sCit7CisgIkNhbGwgdGhlIGdldF9pbmZvIGFwaSB3aGVuIG5vIHVpZCBpcyBzZXQiLCBWQUxfSVRTX0dFVF9JTkZPLCBQU0FfSVRTX0VSUk9SX0tFWV9OT1RfRk9VTkQKK30sCit7CisgIkNhbGwgdGhlIHJlbW92ZSBhcGkgd2hlbiBubyB1aWQgaXMgc2V0IiwgVkFMX0lUU19SRU1PVkUsIFBTQV9JVFNfRVJST1JfS0VZX05PVF9GT1VORAorfSwKK3sKKyAiQ3JlYXRlIGEgdmFsaWQgc3RvcmFnZSBlbnRpdHkgd2l0aCB1aWQxIiwgVkFMX0lUU19TRVQsIFBTQV9JVFNfU1VDQ0VTUworfSwKK3sKKyAiQ3JlYXRlIGEgdmFsaWQgc3RvcmFnZSBlbnRpdHkgd2l0aCB1aWQyIiwgVkFMX0lUU19TRVQsIFBTQV9JVFNfU1VDQ0VTUworfSwKK3sKKyAiUmVtb3ZlIHVpZDEiLCBWQUxfSVRTX1JFTU9WRSwgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJDYWxsIGdldCBhcGkgZm9yIHVpZDEiLCBWQUxfSVRTX0dFVCwgUFNBX0lUU19FUlJPUl9LRVlfTk9UX0ZPVU5ECit9LAoreworICJDYWxsIGdldF9pbmZvIGFwaSBmb3IgdWlkMSIsIFZBTF9JVFNfR0VUX0lORk8sIFBTQV9JVFNfRVJST1JfS0VZX05PVF9GT1VORAorfSwKK3sKKyAiQ2FsbCByZW1vdmUgYXBpIGZvciB1aWQxIiwgVkFMX0lUU19SRU1PVkUsIFBTQV9JVFNfRVJST1JfS0VZX05PVF9GT1VORAorfSwKK3sKKyAiQ3JlYXRlIGEgdmFsaWQgc3RvcmFnZSBlbnRpdHkgYWdhaW4gd2l0aCB1aWQxIiwgVkFMX0lUU19TRVQsIFBTQV9JVFNfU1VDQ0VTUworfSwKK3sKKyAiQ2FsbCBnZXQgYXBpIGZvciB1aWQgbm90IHNhbWUgYXMgdWlkMSBvciB1aWQyIiwgVkFMX0lUU19HRVQsIFBTQV9JVFNfRVJST1JfS0VZX05PVF9GT1VORAorfSwKK3sKKyAiQ2FsbCBnZXRfaW5mbyBmb3IgdWlkIG5vdCBzYW1lIGFzIHVpZDEgb3IgdWlkMiIsIFZBTF9JVFNfR0VUX0lORk8sIFBTQV9JVFNfRVJST1JfS0VZX05PVF9GT1VORAorfSwKK3sKKyAiQ2FsbCByZW1vdmUgYXBpIGZvciB1aWQgbm90IHNhbWUgYXMgdWlkMSBvciB1aWQyIiwgVkFMX0lUU19SRU1PVkUsIFBTQV9JVFNfRVJST1JfS0VZX05PVF9GT1VORAorfSwKK3sKKyAiUmVtb3ZlIHVpZDEiLCBWQUxfSVRTX1JFTU9WRSwgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJSZW1vdmUgdWlkMiIsIFZBTF9JVFNfUkVNT1ZFLCBQU0FfSVRTX1NVQ0NFU1MKK30sCit9OworI2VuZGlmIC8qIF9URVNUX1MwMDFfSVRTX0RBVEFfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAxL3Rlc3RfcHNfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDEvdGVzdF9wc19kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2Y2IxOQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAxL3Rlc3RfcHNfZGF0YS5oCkBAIC0wLDAgKzEsODIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBwcyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfUzAwMV9QU19EQVRBX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX1MwMDFfUFNfREFUQV9URVNUU19IXworCisjaW5jbHVkZSAidmFsX3Byb3RlY3RlZF9zdG9yYWdlLmgiCisKKyNkZWZpbmUgU1NUX0ZVTkNUSU9OIHZhbC0+cHNfZnVuY3Rpb24KKyNkZWZpbmUgcHNhX3NzdF91aWRfdCBwc2FfcHNfdWlkX3QKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzEwMF07CisgICAgZW51bSBwc19mdW5jdGlvbl9jb2RlICBhcGk7CisgICAgcHNhX3BzX3N0YXR1c190ICAgICAgICBzdGF0dXM7Cit9IHRlc3RfZGF0YTsKKworc3RhdGljIHN0cnVjdCBwc2FfcHNfaW5mb190IGluZm87CitzdGF0aWMgdGVzdF9kYXRhIHMwMDFfZGF0YVtdID0geworeworICJUaGlzIGlzIGR1bW15IGZvciBpbmRleDAiLCAwLCAwCit9LAoreworICJDYWxsIHRoZSBnZXQgYXBpIHdoZW4gbm8gdWlkIGlzIHNldCIsIFZBTF9QU19HRVQsIFBTQV9QU19FUlJPUl9LRVlfTk9UX0ZPVU5ECit9LAoreworICJDYWxsIHRoZSBnZXRfaW5mbyBhcGkgd2hlbiBubyB1aWQgaXMgc2V0IiwgVkFMX1BTX0dFVF9JTkZPLCBQU0FfUFNfRVJST1JfS0VZX05PVF9GT1VORAorfSwKK3sKKyAiQ2FsbCB0aGUgcmVtb3ZlIGFwaSB3aGVuIG5vIHVpZCBpcyBzZXQiLCBWQUxfUFNfUkVNT1ZFLCBQU0FfUFNfRVJST1JfS0VZX05PVF9GT1VORAorfSwKK3sKKyAiQ3JlYXRlIGEgdmFsaWQgc3RvcmFnZSBlbnRpdHkgd2l0aCB1aWQxIiwgVkFMX1BTX1NFVCwgUFNBX1BTX1NVQ0NFU1MKK30sCit7CisgIkNyZWF0ZSBhIHZhbGlkIHN0b3JhZ2UgZW50aXR5IHdpdGggdWlkMiIsIFZBTF9QU19TRVQsIFBTQV9QU19TVUNDRVNTCit9LAoreworICJSZW1vdmUgdWlkMSIsIFZBTF9QU19SRU1PVkUsIFBTQV9QU19TVUNDRVNTCit9LAoreworICJDYWxsIGdldCBhcGkgZm9yIHVpZDEiLCBWQUxfUFNfR0VULCBQU0FfUFNfRVJST1JfS0VZX05PVF9GT1VORAorfSwKK3sKKyAiQ2FsbCBnZXRfaW5mbyBhcGkgZm9yIHVpZDEiLCBWQUxfUFNfR0VUX0lORk8sIFBTQV9QU19FUlJPUl9LRVlfTk9UX0ZPVU5ECit9LAoreworICJDYWxsIHJlbW92ZSBhcGkgZm9yIHVpZDEiLCBWQUxfUFNfUkVNT1ZFLCBQU0FfUFNfRVJST1JfS0VZX05PVF9GT1VORAorfSwKK3sKKyAiQ3JlYXRlIGEgdmFsaWQgc3RvcmFnZSBlbnRpdHkgYWdhaW4gd2l0aCB1aWQxIiwgVkFMX1BTX1NFVCwgUFNBX1BTX1NVQ0NFU1MKK30sCit7CisgIkNhbGwgZ2V0IGFwaSBmb3IgdWlkIG5vdCBzYW1lIGFzIHVpZDEgb3IgdWlkMiIsIFZBTF9QU19HRVQsIFBTQV9QU19FUlJPUl9LRVlfTk9UX0ZPVU5ECit9LAoreworICJDYWxsIGdldF9pbmZvIGZvciB1aWQgbm90IHNhbWUgYXMgdWlkMSBvciB1aWQyIiwgVkFMX1BTX0dFVF9JTkZPLCBQU0FfUFNfRVJST1JfS0VZX05PVF9GT1VORAorfSwKK3sKKyAiQ2FsbCByZW1vdmUgYXBpIGZvciB1aWQgbm90IHNhbWUgYXMgdWlkMSBvciB1aWQyIiwgVkFMX1BTX1JFTU9WRSwgUFNBX1BTX0VSUk9SX0tFWV9OT1RfRk9VTkQKK30sCit7CisgIlJlbW92ZSB1aWQxIiwgVkFMX1BTX1JFTU9WRSwgUFNBX1BTX1NVQ0NFU1MKK30sCit7CisgIlJlbW92ZSB1aWQyIiwgVkFMX1BTX1JFTU9WRSwgUFNBX1BTX1NVQ0NFU1MKK30sCit9OworI2VuZGlmIC8qIF9URVNUX1MwMDFfUFNfREFUQV9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDEvdGVzdF9zMDAxLmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMS90ZXN0X3MwMDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWJlZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDEvdGVzdF9zMDAxLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X3MwMDEuaCIKKyNpZmRlZiBJVFNfVEVTVAorI2luY2x1ZGUgInRlc3RfaXRzX2RhdGEuaCIKKyNlbGlmIFBTX1RFU1QKKyNpbmNsdWRlICJ0ZXN0X3BzX2RhdGEuaCIKKyNlbmRpZgorCisjZGVmaW5lIFRFU1RfQlVGRl9TSVpFIDE2CisKK2NsaWVudF90ZXN0X3QgdGVzdF9zMDAxX3NzdF9saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBwc2Ffc3N0X2tleV9ub3RfZm91bmQsCisgICAgTlVMTCwKK307CisKK3N0YXRpYyB1aW50OF90IHdyaXRlX2J1ZmZbVEVTVF9CVUZGX1NJWkVdID0gezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGfTsKK3N0YXRpYyB1aW50OF90IHJlYWRfYnVmZltURVNUX0JVRkZfU0laRV0gID0gezB9OworCitzdGF0aWMgaW50MzJfdCBzc3RfY2FsbHNfd2l0aG91dF9zZXRfY2FsbChwc2Ffc3N0X3VpZF90IHBfdWlkKQoreworICAgIHVpbnQzMl90IHN0YXR1czsKKworICAgIC8qIGdldCgpIHdpdGhvdXQgdXNpbmcgc2V0KCkgYmVmb3JlICovCisgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIEdFVCBhcGkgY2FsbCBmb3IgVUlEICVkIHdoaWNoIGlzIG5vdCBzZXRcbiIsIHBfdWlkKTsKKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwMV9kYXRhWzFdLmFwaSwgcF91aWQsIDAsIFRFU1RfQlVGRl9TSVpFLCByZWFkX2J1ZmYpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cyxzMDAxX2RhdGFbMV0uc3RhdHVzLFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgLyogIGdldF9pbmZvKCkgd2l0aG91dCB1c2luZyBzZXQoKSBiZWZvcmUgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMl0gR0VUX0lORk8gYXBpIGNhbGwgZm9yIFVJRCAlZCB3aGljaCBpcyBub3Qgc2V0XG4iLCBwX3VpZCk7CisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDFfZGF0YVsyXS5hcGksIHBfdWlkLCAmaW5mbyk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDAxX2RhdGFbMl0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKworICAgIC8qIHJlbW92ZSgpIHdpdGhvdXQgdXNpbmcgc2V0KCkgYmVmb3JlICovCisgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDNdIFJFTU9WRSBhcGkgY2FsbCBmb3IgVUlEICVkIHdoaWNoIGlzIG5vdCBzZXRcbiIsIHBfdWlkKTsKKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwMV9kYXRhWzNdLmFwaSwgcF91aWQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwMV9kYXRhWzNdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgaW50MzJfdCBzc3Rfc2V0X2FuZF9yZW1vdmUocHNhX3NzdF91aWRfdCBwX3VpZCkKK3sKKyAgICB1aW50MzJfdCBzdGF0dXM7CisKKyAgICAvKiBzZXQoKSBhIFVJRDEgKi8KKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwMV9kYXRhWzRdLmFwaSwgcF91aWQsIFRFU1RfQlVGRl9TSVpFLCB3cml0ZV9idWZmLCAwKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDFfZGF0YVs0XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgLyogQWxzbyBzZXQoKSB3aXRoIGEgZGlmZmVyZW50IFVJRCAqLworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDAxX2RhdGFbNV0uYXBpLCBwX3VpZCArIDEsIFRFU1RfQlVGRl9TSVpFLCB3cml0ZV9idWZmLCAwKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDFfZGF0YVs1XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgLyogcmVtb3ZlKCkgVUlEMSAqLworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDAxX2RhdGFbNl0uYXBpLCBwX3VpZCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDAxX2RhdGFbNl0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQzMl90IHNzdF9jYWxsc19hZnRlcl91aWRfcmVtb3ZlKHBzYV9zc3RfdWlkX3QgcF91aWQpCit7CisgICAgdWludDMyX3Qgc3RhdHVzOworCisgICAgLyogZ2V0KCkgZm9yIFVJRCB3aGljaCBpcyByZW1vdmVkICovCisgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDRdIEdFVCBhcGkgY2FsbCBmb3IgVUlEICVkIHdoaWNoIGlzIHJlbW92ZWRcbiIsIHBfdWlkKTsKKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwMV9kYXRhWzddLmFwaSwgcF91aWQsIDAsIFRFU1RfQlVGRl9TSVpFLCByZWFkX2J1ZmYpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwMV9kYXRhWzddLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAvKiBnZXRfaW5mbygpIGZvciBVSUQgd2hpY2ggaXMgcmVtb3ZlZCAqLworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayA1XSBHRVRfSU5GTyBhcGkgY2FsbCBmb3IgVUlEICVkIHdoaWNoIGlzIHJlbW92ZWRcbiIsIHBfdWlkKTsKKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwMV9kYXRhWzhdLmFwaSwgcF91aWQsICZpbmZvKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDFfZGF0YVs4XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworCisgICAgLyogcmVtb3ZlKCkgZm9yIFVJRCB3aGljaCBpcyByZW1vdmVkICovCisgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDZdIFJFTU9WRSBhcGkgY2FsbCBmb3IgVUlEICVkIHdoaWNoIGlzIHJlbW92ZWRcbiIsIHBfdWlkKTsKKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwMV9kYXRhWzldLmFwaSwgcF91aWQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwMV9kYXRhWzldLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgaW50MzJfdCBzc3RfY2FsbHNfd2l0aF9kaWZmZXJlbnRfdWlkKHBzYV9zc3RfdWlkX3QgcF91aWQpCit7CisgICAgdWludDMyX3Qgc3RhdHVzOworCisgICAgLyogc2V0KCkgYSBVSUQgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJTRVQgc3RvcmFnZSBmb3IgVUlEICVkXG4iLCBwX3VpZCk7CisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDFfZGF0YVsxMF0uYXBpLCBwX3VpZCwgVEVTVF9CVUZGX1NJWkUsIHdyaXRlX2J1ZmYsIDApOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwMV9kYXRhWzEwXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKKworICAgIC8qIGdldCgpIGZvciBkaWZmZXJlbnQgdWlkIHRoZW4gc2V0IHVpZCAqLworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayA3XSBHRVQgYXBpIGNhbGwgZm9yIGRpZmZlcmVudCBVSUQgJWRcbiIsIHBfdWlkKTsKKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwMV9kYXRhWzExXS5hcGksIHBfdWlkLTEsIDAsIFRFU1RfQlVGRl9TSVpFIC0gMSwgcmVhZF9idWZmKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDFfZGF0YVsxMV0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDExKSk7CisKKyAgICAvKiBnZXRfaW5mbygpIGZvciBkaWZmZXJlbnQgdWlkIHRoZW4gc2V0IHVpZCAqLworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayA4XSBHRVRfSU5GTyBhcGkgY2FsbCBmb3IgZGlmZmVyZW50IFVJRCAlZFxuIiwgcF91aWQpOworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDAxX2RhdGFbMTJdLmFwaSwgcF91aWQtMSwgJmluZm8pOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwMV9kYXRhWzEyXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTIpKTsKKworICAgIC8qIHJlbW92ZSgpIGZvciBkaWZmZXJlbnQgdWlkIHRoZW4gc2V0IHVpZCAqLworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayA5XSBSRU1PVkUgYXBpIGNhbGwgZm9yIGRpZmZlcmVudCBVSUQgJWRcbiIsIHBfdWlkKTsKKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwMV9kYXRhWzEzXS5hcGksIHBfdWlkLTEpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwMV9kYXRhWzEzXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTMpKTsKKworICAgIC8qIHJlbW92ZSgpIHRoZSBzZXQgdWlkICovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDFfZGF0YVsxNF0uYXBpLCBwX3VpZCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDAxX2RhdGFbMTRdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgxNCkpOworCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludDMyX3Qgc3N0X3JlbW92ZV9zdHJheV91aWQocHNhX3NzdF91aWRfdCBwX3VpZCkKK3sKKyAgICB1aW50MzJfdCBzdGF0dXM7CisKKyAgICAvKiBSZW1vdmUgVUlEICsgMSAqLworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDAxX2RhdGFbMTVdLmFwaSwgcF91aWQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwMV9kYXRhWzE1XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTUpKTsKKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3QgcHNhX3NzdF9rZXlfbm90X2ZvdW5kKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIGludDMyX3QgdGVzdF9zdGF0dXM7CisgICAgcHNhX3NzdF91aWRfdCB1aWQgPSBVSURfQkFTRV9WQUxVRSArIDEwOworCisgICAgdGVzdF9zdGF0dXMgPSBzc3RfY2FsbHNfd2l0aG91dF9zZXRfY2FsbCh1aWQpOworICAgIGlmICh0ZXN0X3N0YXR1cyAhPSBWQUxfU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiB0ZXN0X3N0YXR1czsKKworICAgIHRlc3Rfc3RhdHVzID0gc3N0X3NldF9hbmRfcmVtb3ZlKHVpZCk7CisgICAgaWYgKHRlc3Rfc3RhdHVzICE9IFZBTF9TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHRlc3Rfc3RhdHVzOworCisgICAgdGVzdF9zdGF0dXMgPSBzc3RfY2FsbHNfYWZ0ZXJfdWlkX3JlbW92ZSh1aWQpOworICAgIGlmICh0ZXN0X3N0YXR1cyAhPSBWQUxfU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiB0ZXN0X3N0YXR1czsKKworICAgIHRlc3Rfc3RhdHVzID0gc3N0X2NhbGxzX3dpdGhfZGlmZmVyZW50X3VpZCh1aWQpOworICAgIGlmICh0ZXN0X3N0YXR1cyAhPSBWQUxfU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiB0ZXN0X3N0YXR1czsKKworICAgIHRlc3Rfc3RhdHVzID0gc3N0X3JlbW92ZV9zdHJheV91aWQodWlkICsgMSk7CisgICAgaWYgKHRlc3Rfc3RhdHVzICE9IFZBTF9TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHRlc3Rfc3RhdHVzOworCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAxL3Rlc3RfczAwMS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDEvdGVzdF9zMDAxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU2YTZlMQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAxL3Rlc3RfczAwMS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX1MwMDFfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX1MwMDFfQ0xJRU5UX1RFU1RTX0hfCisKKyNpZmRlZiBJVFNfVEVTVAorI2RlZmluZSBWQUxfU1RPUkFHRV9CQVNFIFZBTF9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfQkFTRQorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XywgczAwMSkKKyNlbGlmIFBTX1RFU1QKKyNkZWZpbmUgVkFMX1NUT1JBR0VfQkFTRSBWQUxfUFJPVEVDVEVEX1NUT1JBR0VfQkFTRQorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XywgcDAwMSkKKyNlbmRpZgorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X3MwMDFfc3N0X2xpc3RbXTsKKworaW50MzJfdCBwc2Ffc3N0X2tleV9ub3RfZm91bmQoc2VjdXJpdHlfdCBjYWxsZXIpOworI2VuZGlmIC8qIF9URVNUX1MwMDFfQ0xJRU5UX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMi9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMi9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjE0Yjg5NwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAyL3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X3MwMDIuYworQ0NfT1BUSU9OUyA9IC1ESVRTX1RFU1QKK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMi90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMi90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTM4YTQxZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAyL3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUzIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9zMDAyLmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfU1RPUkFHRV9CQVNFLCAyKQorI2RlZmluZSBURVNUX0RFU0MgIldyaXRlIG9uY2UgZXJyb3IgY2hlY2tcbiIKKworVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9ISUdIX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fc2VjdXJlX3N0b3JhZ2VfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfczAwMl9zc3RfbGlzdCwgRkFMU0UpOworCisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAyL3Rlc3RfaXRzX2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAyL3Rlc3RfaXRzX2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMTc5Yzk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDIvdGVzdF9pdHNfZGF0YS5oCkBAIC0wLDAgKzEsMTMyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9TMDAyX0lUU19EQVRBX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX1MwMDJfSVRTX0RBVEFfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UuaCIKKworI2RlZmluZSBTU1RfRlVOQ1RJT04gdmFsLT5pdHNfZnVuY3Rpb24KKyNkZWZpbmUgUFNBX1NTVF9GTEFHX1dSSVRFX09OQ0UgUFNBX0lUU19GTEFHX1dSSVRFX09OQ0UKKyNkZWZpbmUgcHNhX3NzdF91aWRfdCBwc2FfaXRzX3VpZF90CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbMTAwXTsKKyAgICBlbnVtIGl0c19mdW5jdGlvbl9jb2RlICBhcGk7CisgICAgcHNhX2l0c19zdGF0dXNfdCAgICAgICAgc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcHNhX2l0c19pbmZvX3Qgb3JpZ19pbmZvOworc3RhdGljIHN0cnVjdCBwc2FfaXRzX2luZm9fdCBuZXdfaW5mbzsKK3N0YXRpYyB0ZXN0X2RhdGEgczAwMl9kYXRhW10gPSB7Cit7CisgIlRoaXMgaXMgZHVtbXkgZm9yIGluZGV4MCIsIDAsIDAKK30sCit7CisgIkNyZWF0ZSBhIHZhbGlkIHN0b3JhZ2Ugd2l0aCBjcmVhdGUgZmxhZyB2YWx1ZSAwIiwgVkFMX0lUU19TRVQsIFBTQV9JVFNfU1VDQ0VTUworfSwKK3sKKyAiQ2FsbCB0aGUgZ2V0X2luZm8gYXBpIHRvIHZhbGlkYXRlIHRoZSBhdHRyaWJ1dGVzIiwgVkFMX0lUU19HRVRfSU5GTywgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJJbmRleCBub3QgdXNlZCBhcyBjaGVjayBmb3IgZ2V0IGluZm8gc2l6ZSIsMCwwCit9LAoreworICJJbmRleCBub3QgdXNlZCBhcyBjaGVjayBmb3IgZ2V0IGluZm8gZmxhZyIsMCwwCit9LAoreworICJ2YWxpZGF0ZSB0aGUgZGF0YSB1c2luZyBnZXQgYXBpIiwgVkFMX0lUU19HRVQsIFBTQV9JVFNfU1VDQ0VTUworfSwKK3sKKyAiSW5kZXggbm90IHVzZWQiLDAsMAorfSwKK3sKKyAiQ2hhbmdlIHRoZSBmbGFnIHRvIFdSSVRFX09OQ0UgdXNpbmcgc2V0IGFwaSIsIFZBTF9JVFNfU0VULCBQU0FfSVRTX1NVQ0NFU1MKK30sCit7CisgIkNhbGwgdGhlIGdldF9pbmZvIGFwaSB0byB2YWxpZGF0ZSB0aGUgZmxhZyBjaGFuZ2UiLCBWQUxfSVRTX0dFVF9JTkZPLCBQU0FfSVRTX1NVQ0NFU1MKK30sCit7CisgIkluZGV4IG5vdCB1c2VkIGFzIGNoZWNrIGZvciBnZXQgaW5mbyBzaXplIiwwLDAKK30sCit7CisgIkluZGV4IG5vdCB1c2VkIGFzIGNoZWNrIGZvciBnZXQgaW5mbyBmbGFnIiwwLDAKK30sCit7CisgInZhbGlkYXRlIHRoZSBkYXRhIHVzaW5nIGdldCBhcGkgYWZ0ZXIgZmxhZyBjaGFuZ2UiLCBWQUxfSVRTX0dFVCwgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJJbmRleCBub3QgdXNlZCIsMCwwCit9LAoreworICIgc3RvcmFnZSBzaG91bGQgbm90IGJlIHJlbW92ZWQgYWZ0ZXIgV1JJVEVfT05DRSBmbGFnIiwgVkFMX0lUU19SRU1PVkUsIFBTQV9JVFNfRVJST1JfV1JJVEVfT05DRQorfSwKK3sKKyAiQ3JlYXRlIGEgdmFsaWQgc3RvcmFnZSB3aXRoIGRpZmZlcmVudCB1aWQgYW5kIGZsYWcgdmFsdWUgV1JJVEVfT05DRSAiLCBWQUxfSVRTX1NFVCwgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJzdG9yYWdlIHNob3VsZCBub3QgYmUgcmVtb3ZlZCIsIFZBTF9JVFNfUkVNT1ZFLCBQU0FfSVRTX0VSUk9SX1dSSVRFX09OQ0UKK30sCit7CisgInZhbGlkYXRlIHRoZSBkYXRhIHVzaW5nIGdldCBhcGkgYWZ0ZXIgZmxhZyBjaGFuZ2UiLCBWQUxfSVRTX0dFVCwgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJJbmRleCBub3QgdXNlZCIsMCwwCit9LAoreworICJDYWxsIHRoZSBnZXRfaW5mbyBhcGkgdG8gdmFsaWRhdGUgdGhlIGZsYWcgY2hhbmdlIiwgVkFMX0lUU19HRVRfSU5GTywgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJJbmRleCBub3QgdXNlZCBhcyBjaGVjayBmb3IgZ2V0IGluZm8gc2l6ZSIsMCwwCit9LAoreworICJJbmRleCBub3QgdXNlZCBhcyBjaGVjayBmb3IgZ2V0IGluZm8gZmxhZyIsMCwwCit9LAoreworICJ0cnkgdG8gc2V0IGRpZmZlcmVudCBzaXplIGZvciBzYW1lIHVpZCBhbmQgZmxhZyB2YWx1ZSAiLCBWQUxfSVRTX1NFVCwgUFNBX0lUU19FUlJPUl9XUklURV9PTkNFCit9LAoreworICJzdG9yYWdlIHNob3VsZCBub3QgYmUgcmVtb3ZlZCIsIFZBTF9JVFNfUkVNT1ZFLCBQU0FfSVRTX0VSUk9SX1dSSVRFX09OQ0UKK30sCit7CisgIkNhbGwgdGhlIGdldF9pbmZvIGFwaSB0byB2YWxpZGF0ZSB0aGUgZmxhZyBjaGFuZ2UiLCBWQUxfSVRTX0dFVF9JTkZPLCBQU0FfSVRTX1NVQ0NFU1MKK30sCit7CisgIkluZGV4IG5vdCB1c2VkIGFzIGNoZWNrIGZvciBnZXQgaW5mbyBzaXplIiwwLDAKK30sCit7CisgIkluZGV4IG5vdCB1c2VkIGFzIGNoZWNrIGZvciBnZXQgaW5mbyBmbGFnIiwwLDAKK30sCit7CisgInZhbGlkYXRlIHRoZSBkYXRhIHVzaW5nIGdldCBhcGkgYWZ0ZXIgZmxhZyBjaGFuZ2UiLCBWQUxfSVRTX0dFVCwgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJJbmRleCBub3QgdXNlZCIsMCwwCit9LAoreworICJTZXR0aW5nIGZsYWcgdG8gemVybyBmb3IgdWlkIHNob3VsZCBmYWlsICIsIFZBTF9JVFNfU0VULCBQU0FfSVRTX0VSUk9SX1dSSVRFX09OQ0UKK30sCit7CisgIkNoZWNrIHRoYXQgdGhlIFdSSVRFX09OQ0UgZmxhZyBpcyBwcmVzZXJ2ZWQiLCBWQUxfSVRTX0dFVF9JTkZPLCBQU0FfSVRTX1NVQ0NFU1MKK30sCit7CisgIkluZGV4IG5vdCB1c2VkIGFzIGNoZWNrIGZvciBnZXQgaW5mbyBzaXplIiwwLDAKK30sCit7CisgIkluZGV4IG5vdCB1c2VkIGFzIGNoZWNrIGZvciBnZXQgaW5mbyBmbGFnIiwwLDAKK30sCit9OworI2VuZGlmIC8qIF9URVNUX1MwMDFfSVRTX0RBVEFfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAyL3Rlc3RfcHNfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDIvdGVzdF9wc19kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGY0Y2U4MwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAyL3Rlc3RfcHNfZGF0YS5oCkBAIC0wLDAgKzEsMTMyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgcHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX1MwMDJfUFNfREFUQV9URVNUU19IXworI2RlZmluZSBfVEVTVF9TMDAyX1BTX0RBVEFfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9wcm90ZWN0ZWRfc3RvcmFnZS5oIgorCisjZGVmaW5lIFNTVF9GVU5DVElPTiB2YWwtPnBzX2Z1bmN0aW9uCisjZGVmaW5lIFBTQV9TU1RfRkxBR19XUklURV9PTkNFIFBTQV9QU19GTEFHX1dSSVRFX09OQ0UKKyNkZWZpbmUgcHNhX3NzdF91aWRfdCBwc2FfcHNfdWlkX3QKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzEwMF07CisgICAgZW51bSBwc19mdW5jdGlvbl9jb2RlICBhcGk7CisgICAgcHNhX3BzX3N0YXR1c190ICAgICAgICBzdGF0dXM7Cit9IHRlc3RfZGF0YTsKKworc3RhdGljIHN0cnVjdCBwc2FfcHNfaW5mb190IG9yaWdfaW5mbzsKK3N0YXRpYyBzdHJ1Y3QgcHNhX3BzX2luZm9fdCBuZXdfaW5mbzsKK3N0YXRpYyB0ZXN0X2RhdGEgczAwMl9kYXRhW10gPSB7Cit7CisgIlRoaXMgaXMgZHVtbXkgZm9yIGluZGV4MCIsIDAsIDAKK30sCit7CisgIkNyZWF0ZSBhIHZhbGlkIHN0b3JhZ2Ugd2l0aCBjcmVhdGUgZmxhZyB2YWx1ZSAwIiwgVkFMX1BTX1NFVCwgUFNBX1BTX1NVQ0NFU1MKK30sCit7CisgIkNhbGwgdGhlIGdldF9pbmZvIGFwaSB0byB2YWxpZGF0ZSB0aGUgYXR0cmlidXRlcyIsIFZBTF9QU19HRVRfSU5GTywgUFNBX1BTX1NVQ0NFU1MKK30sCit7CisgIkluZGV4IG5vdCB1c2VkIGFzIGNoZWNrIGZvciBnZXQgaW5mbyBzaXplIiwwLDAKK30sCit7CisgIkluZGV4IG5vdCB1c2VkIGFzIGNoZWNrIGZvciBnZXQgaW5mbyBmbGFnIiwwLDAKK30sCit7CisgInZhbGlkYXRlIHRoZSBkYXRhIHVzaW5nIGdldCBhcGkiLCBWQUxfUFNfR0VULCBQU0FfUFNfU1VDQ0VTUworfSwKK3sKKyAiSW5kZXggbm90IHVzZWQiLDAsMAorfSwKK3sKKyAiQ2hhbmdlIHRoZSBmbGFnIHRvIFdSSVRFX09OQ0UgdXNpbmcgc2V0IGFwaSIsIFZBTF9QU19TRVQsIFBTQV9QU19TVUNDRVNTCit9LAoreworICJDYWxsIHRoZSBnZXRfaW5mbyBhcGkgdG8gdmFsaWRhdGUgdGhlIGZsYWcgY2hhbmdlIiwgVkFMX1BTX0dFVF9JTkZPLCBQU0FfUFNfU1VDQ0VTUworfSwKK3sKKyAiSW5kZXggbm90IHVzZWQgYXMgY2hlY2sgZm9yIGdldCBpbmZvIHNpemUiLDAsMAorfSwKK3sKKyAiSW5kZXggbm90IHVzZWQgYXMgY2hlY2sgZm9yIGdldCBpbmZvIGZsYWciLDAsMAorfSwKK3sKKyAidmFsaWRhdGUgdGhlIGRhdGEgdXNpbmcgZ2V0IGFwaSBhZnRlciBmbGFnIGNoYW5nZSIsIFZBTF9QU19HRVQsIFBTQV9QU19TVUNDRVNTCit9LAoreworICJJbmRleCBub3QgdXNlZCIsMCwwCit9LAoreworICIgc3RvcmFnZSBzaG91bGQgbm90IGJlIHJlbW92ZWQgYWZ0ZXIgV1JJVEVfT05DRSBmbGFnIiwgVkFMX1BTX1JFTU9WRSwgUFNBX1BTX0VSUk9SX1dSSVRFX09OQ0UKK30sCit7CisgIkNyZWF0ZSBhIHZhbGlkIHN0b3JhZ2Ugd2l0aCBkaWZmZXJlbnQgdWlkIGFuZCBmbGFnIHZhbHVlIFdSSVRFX09OQ0UgIiwgVkFMX1BTX1NFVCwgUFNBX1BTX1NVQ0NFU1MKK30sCit7CisgInN0b3JhZ2Ugc2hvdWxkIG5vdCBiZSByZW1vdmVkIiwgVkFMX1BTX1JFTU9WRSwgUFNBX1BTX0VSUk9SX1dSSVRFX09OQ0UKK30sCit7CisgInZhbGlkYXRlIHRoZSBkYXRhIHVzaW5nIGdldCBhcGkgYWZ0ZXIgZmxhZyBjaGFuZ2UiLCBWQUxfUFNfR0VULCBQU0FfUFNfU1VDQ0VTUworfSwKK3sKKyAiSW5kZXggbm90IHVzZWQiLDAsMAorfSwKK3sKKyAiQ2FsbCB0aGUgZ2V0X2luZm8gYXBpIHRvIHZhbGlkYXRlIHRoZSBmbGFnIGNoYW5nZSIsIFZBTF9QU19HRVRfSU5GTywgUFNBX1BTX1NVQ0NFU1MKK30sCit7CisgIkluZGV4IG5vdCB1c2VkIGFzIGNoZWNrIGZvciBnZXQgaW5mbyBzaXplIiwwLDAKK30sCit7CisgIkluZGV4IG5vdCB1c2VkIGFzIGNoZWNrIGZvciBnZXQgaW5mbyBmbGFnIiwwLDAKK30sCit7CisgInRyeSB0byBzZXQgZGlmZmVyZW50IHNpemUgZm9yIHNhbWUgdWlkIGFuZCBmbGFnIHZhbHVlICIsIFZBTF9QU19TRVQsIFBTQV9QU19FUlJPUl9XUklURV9PTkNFCit9LAoreworICJzdG9yYWdlIHNob3VsZCBub3QgYmUgcmVtb3ZlZCIsIFZBTF9QU19SRU1PVkUsIFBTQV9QU19FUlJPUl9XUklURV9PTkNFCit9LAoreworICJDYWxsIHRoZSBnZXRfaW5mbyBhcGkgdG8gdmFsaWRhdGUgdGhlIGZsYWcgY2hhbmdlIiwgVkFMX1BTX0dFVF9JTkZPLCBQU0FfUFNfU1VDQ0VTUworfSwKK3sKKyAiSW5kZXggbm90IHVzZWQgYXMgY2hlY2sgZm9yIGdldCBpbmZvIHNpemUiLDAsMAorfSwKK3sKKyAiSW5kZXggbm90IHVzZWQgYXMgY2hlY2sgZm9yIGdldCBpbmZvIGZsYWciLDAsMAorfSwKK3sKKyAidmFsaWRhdGUgdGhlIGRhdGEgdXNpbmcgZ2V0IGFwaSBhZnRlciBmbGFnIGNoYW5nZSIsIFZBTF9QU19HRVQsIFBTQV9QU19TVUNDRVNTCit9LAoreworICJJbmRleCBub3QgdXNlZCIsMCwwCit9LAoreworICJTZXR0aW5nIGZsYWcgdG8gemVybyBmb3IgdWlkIHNob3VsZCBmYWlsICIsIFZBTF9QU19TRVQsIFBTQV9QU19FUlJPUl9XUklURV9PTkNFCit9LAoreworICJDaGVjayB0aGF0IHRoZSBXUklURV9PTkNFIGZsYWcgaXMgcHJlc2VydmVkIiwgVkFMX1BTX0dFVF9JTkZPLCBQU0FfUFNfU1VDQ0VTUworfSwKK3sKKyAiSW5kZXggbm90IHVzZWQgYXMgY2hlY2sgZm9yIGdldCBpbmZvIHNpemUiLDAsMAorfSwKK3sKKyAiSW5kZXggbm90IHVzZWQgYXMgY2hlY2sgZm9yIGdldCBpbmZvIGZsYWciLDAsMAorfSwKK307CisjZW5kaWYgLyogX1RFU1RfUzAwMV9QU19EQVRBX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMi90ZXN0X3MwMDIuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAyL3Rlc3RfczAwMi5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU0ZDgxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMi90ZXN0X3MwMDIuYwpAQCAtMCwwICsxLDE2MSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIHNzdCBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfczAwMi5oIgorI2lmZGVmIElUU19URVNUCisjaW5jbHVkZSAidGVzdF9pdHNfZGF0YS5oIgorI2VsaWYgUFNfVEVTVAorI2luY2x1ZGUgInRlc3RfcHNfZGF0YS5oIgorI2VuZGlmCisKKyNkZWZpbmUgVUlEX1dSSVRFX09OQ0VfMSBVSURfQkFTRV9WQUxVRSArIDE0CisjZGVmaW5lIFVJRF9XUklURV9PTkNFXzIgVUlEX0JBU0VfVkFMVUUgKyAxNQorI2RlZmluZSBURVNUX0JVRkZfU0laRSAxNgorCitjbGllbnRfdGVzdF90IHRlc3RfczAwMl9zc3RfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgcHNhX3NzdF91cGRhdGVfd3JpdGVfb25jZV9mbGFnX2FmdGVyX2NyZWF0ZSwKKyAgICBwc2Ffc3N0X2NyZWF0ZV93aXRoX3dyaXRlX29uY2VfZmxhZywKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBwc2Ffc3N0X3VwZGF0ZV93cml0ZV9vbmNlX2ZsYWdfYWZ0ZXJfY3JlYXRlKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIHVpbnQzMl90IHN0YXR1czsKKyAgICBwc2Ffc3N0X3VpZF90IHVpZCA9IFVJRF9XUklURV9PTkNFXzE7CisgICAgdWludDhfdCAgd3JpdGVfYnVmZltURVNUX0JVRkZfU0laRS8yXSAgICAgPSB7MHhERSwgMHhBRCwgMHhCRSwgMHhFRiwgMHhDQSwgMHhGRSwgMHhCQSwgMHhCRX07CisgICAgdWludDhfdCAgcmVhZF9idWZmW1RFU1RfQlVGRl9TSVpFLzJdICAgICAgPSB7MH07CisgICAgdWludDhfdCAgd3JpdGVfYnVmZl9uZXdbVEVTVF9CVUZGX1NJWkUvNF0gPSB7MHhGRiwgMHhGRiwgMHhGRiwgMHhGRn07CisKKyAgICAvKiBzZXQoKSBkYXRhIHdpdGhvdXQgYSBXUklURV9PTkNFIGZsYWcgKi8KKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwMl9kYXRhWzFdLmFwaSwgdWlkLCBURVNUX0JVRkZfU0laRS8yLCB3cml0ZV9idWZmLCAwKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDJfZGF0YVsxXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgLyogQ2hlY2sgdGhhdCBnZXRfaW5mbygpIHJldHVybnMgY29ycmVjdCBhdHRyaWJ1dGVzOyBhbHNvIHN0b3JlIGZvciByZWZlcmVuY2UgZm9yIGxhdGVyICovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDJfZGF0YVsyXS5hcGksIHVpZCwgJm9yaWdfaW5mbyk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDAyX2RhdGFbMl0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChvcmlnX2luZm8uc2l6ZSwgVEVTVF9CVUZGX1NJWkUvMiwgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwob3JpZ19pbmZvLmZsYWdzLCAwLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgIC8qIENoZWNrIGZvciBkYXRhIGNvbnNpc3RlbmN5IHVzaW5nIGdldCgpICovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDJfZGF0YVs1XS5hcGksIHVpZCwgMCwgVEVTVF9CVUZGX1NJWkUvMiwgcmVhZF9idWZmKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDJfZGF0YVs1XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworICAgIFRFU1RfQVNTRVJUX01FTUNNUCh3cml0ZV9idWZmLCByZWFkX2J1ZmYsIFRFU1RfQlVGRl9TSVpFLzIsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgLyogc2V0KCkgd2l0aCBXUklURV9PTkNFX0ZMQUcgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVXBkYXRlIHRoZSBmbGFnIG9mIFVJRCAlZCB3aXRoIFdSSVRFX09OQ0UgZmxhZ1xuIiwgdWlkKTsKKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwMl9kYXRhWzddLmFwaSwgdWlkLCBURVNUX0JVRkZfU0laRS80LCB3cml0ZV9idWZmX25ldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX1NTVF9GTEFHX1dSSVRFX09OQ0UpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwMl9kYXRhWzddLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAvKiBDaGVjayB0aGF0IGluZm8gaXMgdXBkYXRlZCwgYWZ0ZXIgbmV3IHNldCAqLworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDAyX2RhdGFbOF0uYXBpLCB1aWQsICZuZXdfaW5mbyk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDAyX2RhdGFbOF0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChuZXdfaW5mby5zaXplLCBuZXdfaW5mby5zaXplLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChuZXdfaW5mby5mbGFncywgbmV3X2luZm8uZmxhZ3MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKKworICAgIC8qIENoZWNrIHRoYXQgZGF0YSBjb250ZW50cyBhcmUgcHJlc2VydmVkIHdoaWNoIHdlcmUgd3JpdHRlbiB3aXRoIFdSSVRFX09OQ0VfRkxBRyBvcmlnaW5hbGx5ICovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDJfZGF0YVsxMV0uYXBpLCB1aWQsIDAsIFRFU1RfQlVGRl9TSVpFLzQsIHJlYWRfYnVmZik7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDAyX2RhdGFbMTFdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMSkpOworICAgIFRFU1RfQVNTRVJUX01FTUNNUCh3cml0ZV9idWZmX25ldywgcmVhZF9idWZmLCBURVNUX0JVRkZfU0laRS80LCBURVNUX0NIRUNLUE9JTlRfTlVNKDEyKSk7CisKKyAgICAvKiByZW1vdmUoKSB0aGUgVUlEICovCisgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDJdIFRyeSB0byByZW1vdmUgdGhlIHVpZCAlZCBoYXZpbmcgV1JJVEVfT05DRSBmbGFnXG4iLCB1aWQpOworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDAyX2RhdGFbMTNdLmFwaSwgdWlkKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDJfZGF0YVsxM10uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEzKSk7CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCisKK2ludDMyX3QgcHNhX3NzdF9jcmVhdGVfd2l0aF93cml0ZV9vbmNlX2ZsYWcoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgdWludDMyX3Qgc3RhdHVzOworICAgIHBzYV9zc3RfdWlkX3QgdWlkID0gVUlEX1dSSVRFX09OQ0VfMjsKKyAgICB1aW50OF90IHdyaXRlX2J1ZmZbVEVTVF9CVUZGX1NJWkVdID0gezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGfTsKKyAgICB1aW50OF90IHJlYWRfYnVmZltURVNUX0JVRkZfU0laRV0gID0gezB9OworICAgIHVpbnQ4X3Qgd3JpdGVfYnVmZl9uZXdbVEVTVF9CVUZGX1NJWkUgKyAxXSA9IHsweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGfTsKKworICAgIC8qIFNldCBkYXRhIGZvciBhIFVJRCB1c2luZyBXUklURV9PTkNFIGZsYWcgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgM10gQ3JlYXRlIGEgbmV3IFVJRCAlZCB3aXRoIFdSSVRFX09OQ0UgZmxhZ1xuIiwgdWlkKTsKKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwMl9kYXRhWzE0XS5hcGksIHVpZCwgVEVTVF9CVUZGX1NJWkUsIHdyaXRlX2J1ZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9TU1RfRkxBR19XUklURV9PTkNFKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDJfZGF0YVsxNF0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE0KSk7CisKKyAgICAvKiBDaGVjayB0aGF0IHJlbW92ZSgpIGZhaWxzIHdpdGggUFNBX1NTVF9FUlJPUl9XUklURV9PTkNFICovCisgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDRdIFRyeSB0byByZW1vdmUgdGhlIFVJRCAlZCBoYXZpbmcgV1JJVEVfT05DRSBmbGFnXG4iLCB1aWQpOworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDAyX2RhdGFbMTVdLmFwaSwgdWlkKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDJfZGF0YVsxNV0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE1KSk7CisKKyAgICAvKiBDaGVjayBkYXRhIGNvbnNpc3RlbmN5IHVzaW5nIGdldCgpKi8KKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwMl9kYXRhWzE2XS5hcGksIHVpZCwgMCwgVEVTVF9CVUZGX1NJWkUsIHJlYWRfYnVmZik7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDAyX2RhdGFbMTZdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgxNikpOworICAgIFRFU1RfQVNTRVJUX01FTUNNUCh3cml0ZV9idWZmLCByZWFkX2J1ZmYsIFRFU1RfQlVGRl9TSVpFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE3KSk7CisKKyAgICAvKiBDaGVjayB0aGF0IGluZm8gdmFsdWVzIGlzIGFzIGV4cGVjdGVkICovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDJfZGF0YVsxOF0uYXBpLCB1aWQsICZvcmlnX2luZm8pOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwMl9kYXRhWzE4XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTgpKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChvcmlnX2luZm8uc2l6ZSwgVEVTVF9CVUZGX1NJWkUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTkpKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChvcmlnX2luZm8uZmxhZ3MsIFBTQV9TU1RfRkxBR19XUklURV9PTkNFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIwKSk7CisKKyAgICAvKiBUcnkgdG8gb3ZlcndyaXRlIHVzaW5nIHNldCgpIHdpdGggc2FtZSBVSUQgYXMgdXNlZCBiZWZvcmUgd2l0aCBXUklURV9PTkNFX0ZMQUcgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgNV0gVHJ5IHRvIGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHdyaXRlX29uY2UgVUlEICVkXG4iLCB1aWQpOworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDAyX2RhdGFbMjFdLmFwaSwgdWlkLCAoVEVTVF9CVUZGX1NJWkUgKyAxKSwgd3JpdGVfYnVmZl9uZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9TU1RfRkxBR19XUklURV9PTkNFKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDJfZGF0YVsyMV0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIxKSk7CisKKyAgICAvKiBDaGVjayB0aGF0IHJlbW92ZSgpIHN0aWxsIGZhaWxzIHdpdGggUFNBX1NTVF9FUlJPUl9XUklURV9PTkNFICovCisgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDZdIENoZWNrIFVJRCByZW1vdmFsIHN0aWxsIGZhaWxzXG4iLCAwKTsKKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwMl9kYXRhWzIyXS5hcGksIHVpZCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDAyX2RhdGFbMjJdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgyMikpOworCisgICAgLyogQ2hlY2sgdGhhdCBpbmZvIGlzIHByZXNlcnZlZCAqLworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDAyX2RhdGFbMjNdLmFwaSwgdWlkLCAmbmV3X2luZm8pOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwMl9kYXRhWzIzXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjMpKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChuZXdfaW5mby5zaXplLCBvcmlnX2luZm8uc2l6ZSwgVEVTVF9DSEVDS1BPSU5UX05VTSgyNCkpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKG5ld19pbmZvLmZsYWdzLCBvcmlnX2luZm8uZmxhZ3MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjUpKTsKKworICAgIC8qIENoZWNrIHRoYXQgZGF0YSBjb250ZW50cyBhcmUgcHJlc2VydmVkIHdoaWNoIHdlcmUgd3JpdHRlbiB3aXRoIFdSSVRFX09OQ0VfRkxBRyBvcmlnaW5hbGx5ICovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDJfZGF0YVsyNl0uYXBpLCB1aWQsIDAsIFRFU1RfQlVGRl9TSVpFLCByZWFkX2J1ZmYpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwMl9kYXRhWzI2XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjYpKTsKKyAgICBURVNUX0FTU0VSVF9NRU1DTVAod3JpdGVfYnVmZiwgcmVhZF9idWZmLCBURVNUX0JVRkZfU0laRSwgVEVTVF9DSEVDS1BPSU5UX05VTSgyNykpOworCisgICAgLyogVHJ5IHRvIG92ZXJ3cml0ZSB1c2luZyBzZXQoKSB3aXRoIHNhbWUgVUlEIGFzIHVzZWQgYmVmb3JlIHdpdGhvdXQgV1JJVEVfT05DRV9GTEFHICovCisgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDddIFRyeSB0byBjaGFuZ2UgdGhlIFdSSVRFX09OQ0UgZmxhZyB0byBOb25lIGZvciBVSUQgJWRcbiIsIHVpZCk7CisgICAgbmV3X2luZm8uc2l6ZSA9IDA7CisgICAgbmV3X2luZm8uZmxhZ3MgPSAwOworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDAyX2RhdGFbMjhdLmFwaSwgdWlkLCAoVEVTVF9CVUZGX1NJWkUgLSAxKSwgd3JpdGVfYnVmZl9uZXcsIDApOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwMl9kYXRhWzI4XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjgpKTsKKworICAgIC8qIENoZWNrIHRoYXQgcmVtb3ZlKCkgc3RpbGwgZmFpbHMgd2l0aCBQU0FfU1NUX0VSUk9SX1dSSVRFX09OQ0UgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgOF0gQ2hlY2sgVUlEIHJlbW92YWwgc3RpbGwgZmFpbHNcbiIsIDApOworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDAyX2RhdGFbMjldLmFwaSwgdWlkKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDJfZGF0YVsyOV0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDI5KSk7CisKKyAgICAvKiBDaGVjayB0aGF0IGluZm8gaXMgcHJlc2VydmVkICovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDJfZGF0YVszMF0uYXBpLCB1aWQsICZuZXdfaW5mbyk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDAyX2RhdGFbMzBdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgzMCkpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKG5ld19pbmZvLnNpemUsIG9yaWdfaW5mby5zaXplLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMxKSk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwobmV3X2luZm8uZmxhZ3MsIG9yaWdfaW5mby5mbGFncywgVEVTVF9DSEVDS1BPSU5UX05VTSgzMikpOworCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAyL3Rlc3RfczAwMi5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDIvdGVzdF9zMDAyLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTFjN2FlZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAyL3Rlc3RfczAwMi5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX1MwMDJfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX1MwMDJfQ0xJRU5UX1RFU1RTX0hfCisKKyNpZmRlZiBJVFNfVEVTVAorI2RlZmluZSBWQUxfU1RPUkFHRV9CQVNFIFZBTF9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfQkFTRQorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XywgczAwMikKKyNlbGlmIFBTX1RFU1QKKyNkZWZpbmUgVkFMX1NUT1JBR0VfQkFTRSBWQUxfUFJPVEVDVEVEX1NUT1JBR0VfQkFTRQorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XywgcDAwMikKKyNlbmRpZgorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X3MwMDJfc3N0X2xpc3RbXTsKKworaW50MzJfdCBwc2Ffc3N0X3VwZGF0ZV93cml0ZV9vbmNlX2ZsYWdfYWZ0ZXJfY3JlYXRlKHNlY3VyaXR5X3QgY2FsbGVyKTsKK2ludDMyX3QgcHNhX3NzdF9jcmVhdGVfd2l0aF93cml0ZV9vbmNlX2ZsYWcoc2VjdXJpdHlfdCBjYWxsZXIpOworI2VuZGlmIC8qIF9URVNUX1MwMDJfQ0xJRU5UX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMy9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMy9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmFiMjc5NgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAzL3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X3MwMDMuYworQ0NfT1BUSU9OUyA9IC1ESVRTX1RFU1QKK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMy90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMy90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTY0OGRkNgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAzL3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUzIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9zMDAzLmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfU1RPUkFHRV9CQVNFLCAzKQorI2RlZmluZSBURVNUX0RFU0MgIkluc3VmZmljaWVudCBzcGFjZSBlcnJvciBjaGVja1xuIgorCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0hJR0hfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9zZWN1cmVfc3RvcmFnZV9saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9zMDAzX3NzdF9saXN0LCBGQUxTRSk7CisKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDMvdGVzdF9pdHNfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDMvdGVzdF9pdHNfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY3MWEyMGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMy90ZXN0X2l0c19kYXRhLmgKQEAgLTAsMCArMSw0MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfUzAwM19JVFNfREFUQV9URVNUU19IXworI2RlZmluZSBfVEVTVF9TMDAzX0lUU19EQVRBX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLmgiCisKKyNkZWZpbmUgU1NUX0ZVTkNUSU9OIHZhbC0+aXRzX2Z1bmN0aW9uCisjZGVmaW5lIFBTQV9TU1RfU1VDQ0VTUyAgUFNBX0lUU19TVUNDRVNTCisjZGVmaW5lIHBzYV9zc3RfdWlkX3QgcHNhX2l0c191aWRfdAorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzEwMF07CisgICAgZW51bSBpdHNfZnVuY3Rpb25fY29kZSAgYXBpOworICAgIHBzYV9pdHNfc3RhdHVzX3QgICAgICAgIHN0YXR1czsKK30gdGVzdF9kYXRhOworCitzdGF0aWMgdGVzdF9kYXRhIHMwMDNfZGF0YVtdID0geworeworICJUaGlzIGlzIGR1bW15IGZvciBpbmRleDAiLCAwLCAwCit9LAoreworICJDYWxsIHNldCBhcGkgdGlsbCBhbGwgdGhlIHN0b3JhZ2Ugc3BhY2UgaXMgZXhoYXVzdGVkIiwgVkFMX0lUU19TRVQsIFBTQV9JVFNfRVJST1JfSU5TVUZGSUNJRU5UX1NQQUNFCit9LAoreworICJSZW1vdmUgdGhlIHVpZCBjcmVhdGVkIiwgVkFMX0lUU19SRU1PVkUsIFBTQV9JVFNfU1VDQ0VTUworfSwKK307CisjZW5kaWYgLyogX1RFU1RfUzAwM19JVFNfREFUQV9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDMvdGVzdF9wc19kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMy90ZXN0X3BzX2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YzJjODJlCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDMvdGVzdF9wc19kYXRhLmgKQEAgLTAsMCArMSw0MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIHBzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9TMDAzX1BTX0RBVEFfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfUzAwM19QU19EQVRBX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfcHJvdGVjdGVkX3N0b3JhZ2UuaCIKKworI2RlZmluZSBTU1RfRlVOQ1RJT04gdmFsLT5wc19mdW5jdGlvbgorI2RlZmluZSBQU0FfU1NUX1NVQ0NFU1MgIFBTQV9QU19TVUNDRVNTCisjZGVmaW5lIHBzYV9zc3RfdWlkX3QgcHNhX3BzX3VpZF90CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1sxMDBdOworICAgIGVudW0gcHNfZnVuY3Rpb25fY29kZSAgYXBpOworICAgIHBzYV9wc19zdGF0dXNfdCAgICAgICAgc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyB0ZXN0X2RhdGEgczAwM19kYXRhW10gPSB7Cit7CisgIlRoaXMgaXMgZHVtbXkgZm9yIGluZGV4MCIsIDAsIDAKK30sCit7CisgIkNhbGwgc2V0IGFwaSB0aWxsIGFsbCB0aGUgc3RvcmFnZSBzcGFjZSBpcyBleGhhdXN0ZWQiLCBWQUxfUFNfU0VULCBQU0FfUFNfRVJST1JfSU5TVUZGSUNJRU5UX1NQQUNFCit9LAoreworICJSZW1vdmUgdGhlIHVpZCBjcmVhdGVkIiwgVkFMX1BTX1JFTU9WRSwgUFNBX1BTX1NVQ0NFU1MKK30sCit9OworI2VuZGlmIC8qIF9URVNUX1MwMDNfUFNfREFUQV9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDMvdGVzdF9zMDAzLmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMy90ZXN0X3MwMDMuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOGE1NjhmCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDMvdGVzdF9zMDAzLmMKQEAgLTAsMCArMSw4MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfczAwMy5oIgorI2lmIElUU19URVNUCisjaW5jbHVkZSAidGVzdF9pdHNfZGF0YS5oIgorI2VsaWYgUFNfVEVTVAorI2luY2x1ZGUgInRlc3RfcHNfZGF0YS5oIgorI2VuZGlmCisKKyNkZWZpbmUgVEVTVF9CVUZGX1NJWkUgMjU2CisjZGVmaW5lIE5VTV9JVEVSQVRJT05TIDUKKworY2xpZW50X3Rlc3RfdCB0ZXN0X3MwMDNfc3N0X2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHBzYV9zc3RfaW5zdWZmaWNpZW50X3NwYWNlLAorICAgIE5VTEwsCit9OworCitzdGF0aWMgdWludDhfdCB3cml0ZV9idWZmW1RFU1RfQlVGRl9TSVpFXTsKKworaW50MzJfdCBwc2Ffc3N0X2luc3VmZmljaWVudF9zcGFjZShzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICB1aW50MzJfdCBzdGF0dXMgPSBQU0FfU1NUX1NVQ0NFU1M7CisgICAgcHNhX3NzdF91aWRfdCB1aWQ7CisgICAgdWludDMyX3QgY291bnQgPSAwLCByZXN1bHRzW05VTV9JVEVSQVRJT05TXSA9IHswfTsKKyAgICBpbnQgaSA9IDA7CisKKyAgICAvKiBTYXR1cmF0ZSB0aGUgc3RvcmFnZSBmb3IgTlVNX0lURVJBVElPTiB0aW1lcywgYW5kIHJlbW92ZSB0aGVtIGFmdGVyICovCisgICAgZm9yIChpID0gMCA7IGkgPCBOVU1fSVRFUkFUSU9OUzsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBPdmVybG9hZCBzdG9yYWdlIHNwYWNlXG4iLCBpICsgMSApOworICAgICAgICBmb3IgKHVpZCA9IDE7IHN0YXR1cyA9PSBQU0FfU1NUX1NVQ0NFU1M7IHVpZCsrKQorICAgICAgICB7CisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0lORk8sICJTZXR0aW5nIDB4JXggYnl0ZXMgZm9yICIsIFRFU1RfQlVGRl9TSVpFKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfSU5GTywgIlVJRCAweCV4XG4iLCB1aWQpOworICAgICAgICAgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDNfZGF0YVsxXS5hcGksIHVpZCwgVEVTVF9CVUZGX1NJWkUsIHdyaXRlX2J1ZmYsIDApOworICAgICAgICB9CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwM19kYXRhWzFdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICAgICAgLyogU3RvcmUgbnVtYmVyIG9mIHNldCgpcyBpdCB0b29rIHRvIHNhdHVyYXRlIHRoZSBzdG9yYWdlICovCisgICAgICAgIGNvdW50ID0gdWlkOworICAgICAgICByZXN1bHRzW2ldID0gdWlkIC0gMTsKKworICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJSZW1vdmUgYWxsIHJlZ2lzdGVyZWQgVUlEc1xuIiwgMCk7CisgICAgICAgIGZvciAodWlkID0gMTsgdWlkIDwgY291bnQ7IHVpZCsrKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwM19kYXRhWzJdLmFwaSwgdWlkKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gUFNBX1NTVF9TVUNDRVNTKQorICAgICAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgICAgICB9CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwM19kYXRhWzJdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisgICAgfQorCisgICAgLyogQ2hlY2sgdGhhdCBpdCB0YWtlcyBlcXVhbCBudW1iZXIgb2YgVUlEcyB0byBmaWxsIHVwIHRoZSBzdG9yYWdlIGVhY2ggdGltZSAqLworICAgIGZvciAoaSA9IDA7IGkgPCAoTlVNX0lURVJBVElPTlMgLTEpOyBpKyspCisgICAgeworICAgICAgICBpZiAocmVzdWx0c1tpXSAhPSByZXN1bHRzW2krMV0pCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEVSUk9SIDogTWlzbWF0Y2ggYmV0d2VlbiBudW1iZXIgb2YgVUlEcyByZXF1aXJlZCB0b1xuIiwgMCk7CisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHQgZmlsbCB1cCB0aGUgc3RvcmFnZSBiZXR3ZWVuIGl0ZXJhdGlvbiAlZCIsIGkpOworICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIiBhbmQgaXRlcmF0aW9uICVkXG4iLCBpKzEpOworICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAzL3Rlc3RfczAwMy5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDMvdGVzdF9zMDAzLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWIyZDZhYQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAzL3Rlc3RfczAwMy5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX1MwMDNfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX1MwMDNfQ0xJRU5UX1RFU1RTX0hfCisKKyNpZmRlZiBJVFNfVEVTVAorI2RlZmluZSBWQUxfU1RPUkFHRV9CQVNFIFZBTF9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfQkFTRQorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XywgczAwMykKKyNlbGlmIFBTX1RFU1QKKyNkZWZpbmUgVkFMX1NUT1JBR0VfQkFTRSBWQUxfUFJPVEVDVEVEX1NUT1JBR0VfQkFTRQorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XywgcDAwMykKKyNlbmRpZgorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X3MwMDNfc3N0X2xpc3RbXTsKKworaW50MzJfdCBwc2Ffc3N0X2luc3VmZmljaWVudF9zcGFjZShzZWN1cml0eV90IGNhbGxlcik7CisjZW5kaWYgLyogX1RFU1RfUzAwM19DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA0L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA0L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YzI2NWM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDQvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfczAwNC5jCitDQ19PUFRJT05TID0gLURJVFNfVEVTVAorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA0L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA0L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMGQ1NjZiCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDQvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X3MwMDQuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9TVE9SQUdFX0JBU0UsIDQpCisjZGVmaW5lIFRFU1RfREVTQyAiSW52YWxpZCBvZmZzZXQgZXJyb3IgY2hlY2tcbiIKKworVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9ISUdIX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fc2VjdXJlX3N0b3JhZ2VfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfczAwNF9zc3RfbGlzdCwgRkFMU0UpOworCisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA0L3Rlc3RfaXRzX2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA0L3Rlc3RfaXRzX2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYjI5MjMyCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDQvdGVzdF9pdHNfZGF0YS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX1MwMDRfSVRTX0RBVEFfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfUzAwNF9JVFNfREFUQV9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS5oIgorCisjZGVmaW5lIFNTVF9GVU5DVElPTiB2YWwtPml0c19mdW5jdGlvbgorI2RlZmluZSBwc2Ffc3N0X3VpZF90IHBzYV9pdHNfdWlkX3QKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1sxMDBdOworICAgIGVudW0gaXRzX2Z1bmN0aW9uX2NvZGUgIGFwaTsKKyAgICBwc2FfaXRzX3N0YXR1c190ICAgICAgICBzdGF0dXM7Cit9IHRlc3RfZGF0YTsKKworc3RhdGljIHRlc3RfZGF0YSBzMDA0X2RhdGFbXSA9IHsKK3sKKyAiVGhpcyBpcyBkdW1teSBmb3IgaW5kZXgwIiwgMCwgMAorfSwKK3sKKyAiQ3JlYXRlIGEgdmFsaWQgc3RvcmFnZSBlbnRpdHkgIiwgVkFMX0lUU19TRVQsIFBTQV9JVFNfU1VDQ0VTUworfSwKK3sKKyAidmFsaWRhdGUgdGhlIGRhdGEgdXNpbmcgZ2V0IGFwaSBhZnRlciBzZXQgYXBpIGZhaWx1cmUiLCBWQUxfSVRTX0dFVCwgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJJbmRleCBub3QgdXNlZCIsMCwwCit9LAoreworICJGb3Igc2FtZSB1aWQgc2V0IHRoZSBsZW5ndGggYXMgaGFsZiBvZiBwcmV2aW91cyIsIFZBTF9JVFNfU0VULCBQU0FfSVRTX1NVQ0NFU1MKK30sCit7CisgIkNhbGwgZ2V0IHdpdGggaW5jb3JyZWN0IGxlbmd0aCIsIFZBTF9JVFNfR0VULCBQU0FfSVRTX0VSUk9SX0lOQ09SUkVDVF9TSVpFCit9LAoreworICJObyBkYXRhIHNob3VsZCBiZSByZXR1cm5lZCIsMCwwCit9LAoreworICJDYWxsIGdldCBhcGkgd2l0aCBjb3JyZWN0IGxlbmd0aCIsIFZBTF9JVFNfR0VULCBQU0FfSVRTX1NVQ0NFU1MKK30sCit7CisgIk5vIGRhdGEgc2hvdWxkIGJlIHJldHVybmVkIiwwLDAKK30sCit7CisgIkNoZWNrIHRoYXQgd2Ugc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgb2xkIGRhdGEiLDAsMAorfSwKK3sKKyAiUmVtb3ZlIHRoZSB2YWxpZCBzdG9yYWdlIGVudGl0eSAiLCBWQUxfSVRTX1JFTU9WRSwgUFNBX0lUU19TVUNDRVNTCit9LAorfTsKKyNlbmRpZiAvKiBfVEVTVF9TMDA0X0lUU19EQVRBX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNC90ZXN0X3BzX2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA0L3Rlc3RfcHNfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE3N2JiODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNC90ZXN0X3BzX2RhdGEuaApAQCAtMCwwICsxLDY2IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgcHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX1MwMDRfUFNfREFUQV9URVNUU19IXworI2RlZmluZSBfVEVTVF9TMDA0X1BTX0RBVEFfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9wcm90ZWN0ZWRfc3RvcmFnZS5oIgorCisjZGVmaW5lIFNTVF9GVU5DVElPTiB2YWwtPnBzX2Z1bmN0aW9uCisjZGVmaW5lIHBzYV9zc3RfdWlkX3QgcHNhX3BzX3VpZF90CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1sxMDBdOworICAgIGVudW0gcHNfZnVuY3Rpb25fY29kZSAgYXBpOworICAgIHBzYV9wc19zdGF0dXNfdCAgICAgICAgc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyB0ZXN0X2RhdGEgczAwNF9kYXRhW10gPSB7Cit7CisgIlRoaXMgaXMgZHVtbXkgZm9yIGluZGV4MCIsIDAsIDAKK30sCit7CisgIkNyZWF0ZSBhIHZhbGlkIHN0b3JhZ2UgZW50aXR5ICIsIFZBTF9QU19TRVQsIFBTQV9QU19TVUNDRVNTCit9LAoreworICJ2YWxpZGF0ZSB0aGUgZGF0YSB1c2luZyBnZXQgYXBpIGFmdGVyIHNldCBhcGkgZmFpbHVyZSIsIFZBTF9QU19HRVQsIFBTQV9QU19TVUNDRVNTCit9LAoreworICJJbmRleCBub3QgdXNlZCIsMCwwCit9LAoreworICJGb3Igc2FtZSB1aWQgc2V0IHRoZSBsZW5ndGggYXMgaGFsZiBvZiBwcmV2aW91cyIsIFZBTF9QU19TRVQsIFBTQV9QU19TVUNDRVNTCit9LAoreworICJDYWxsIGdldCB3aXRoIGluY29ycmVjdCBsZW5ndGgiLCBWQUxfUFNfR0VULCBQU0FfUFNfRVJST1JfSU5DT1JSRUNUX1NJWkUKK30sCit7CisgIk5vIGRhdGEgc2hvdWxkIGJlIHJldHVybmVkIiwwLDAKK30sCit7CisgIkNhbGwgZ2V0IGFwaSB3aXRoIGNvcnJlY3QgbGVuZ3RoIiwgVkFMX1BTX0dFVCwgUFNBX1BTX1NVQ0NFU1MKK30sCit7CisgIk5vIGRhdGEgc2hvdWxkIGJlIHJldHVybmVkIiwwLDAKK30sCit7CisgIkNoZWNrIHRoYXQgd2Ugc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgb2xkIGRhdGEiLDAsMAorfSwKK3sKKyAiUmVtb3ZlIHRoZSB2YWxpZCBzdG9yYWdlIGVudGl0eSAiLCBWQUxfUFNfUkVNT1ZFLCBQU0FfUFNfU1VDQ0VTUworfSwKK307CisjZW5kaWYgLyogX1RFU1RfUzAwNF9QU19EQVRBX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNC90ZXN0X3MwMDQuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA0L3Rlc3RfczAwNC5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFhZGY5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNC90ZXN0X3MwMDQuYwpAQCAtMCwwICsxLDg2IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9zMDA0LmgiCisjaWZkZWYgSVRTX1RFU1QKKyNpbmNsdWRlICJ0ZXN0X2l0c19kYXRhLmgiCisjZWxpZiBQU19URVNUCisjaW5jbHVkZSAidGVzdF9wc19kYXRhLmgiCisjZW5kaWYKKworI2RlZmluZSBURVNUX0JVRkZfU0laRSAyMAorCitjbGllbnRfdGVzdF90IHRlc3RfczAwNF9zc3RfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgcHNhX3NzdF9nZXRfZGF0YV9jaGVjaywKKyAgICBOVUxMLAorfTsKKworc3RhdGljIHBzYV9zc3RfdWlkX3QgdWlkID0gVUlEX0JBU0VfVkFMVUUgKyAxMDsKK3N0YXRpYyB1aW50OF90IHJlYWRfYnVmZltURVNUX0JVRkZfU0laRV0gPSB7MH07CitzdGF0aWMgdWludDhfdCB3cml0ZV9idWZmW1RFU1RfQlVGRl9TSVpFXSA9IHsweDk5LCAweDAxLCAweDMwLCAweDUwLCAweDA0LCAweDIzLCAweEY2LCAweDA3LCAweDA4LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRCwgMHg3MCwgMHhBMSwgMHhGRiwgMHhGRiwgMHgxNCwgMHg3MywgMHg0NiwgMHg5NywgMHhFOCwgMHhERH07CisKK2ludDMyX3QgcHNhX3NzdF9nZXRfZGF0YV9jaGVjayhzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICB1aW50MzJfdCBzdGF0dXMsajsKKworICAgIC8qIFNldCBkYXRhIGZvciB1aWQgKi8KKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwNF9kYXRhWzFdLmFwaSwgdWlkICsgMSwgVEVTVF9CVUZGX1NJWkUsIHdyaXRlX2J1ZmYsMCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA0X2RhdGFbMV0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKKworICAgIC8qIENhbGwgZ2V0IGZ1bmN0aW9uIGFuZCBjaGVjayB0aGUgZGF0YSBjb25zaXN0ZW5jeSAqLworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA0X2RhdGFbMl0uYXBpLCB1aWQgKyAxLCAwLCBURVNUX0JVRkZfU0laRSwgcmVhZF9idWZmKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDRfZGF0YVsyXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworICAgIFRFU1RfQVNTRVJUX01FTUNNUChyZWFkX2J1ZmYsIHdyaXRlX2J1ZmYsIFRFU1RfQlVGRl9TSVpFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgIC8qIENhbGwgdGhlIFNFVCBhZ2FpbiBmb3Igc2FtZSB1aWQgYW5kIHNldCB0aGUgbGVuZ3RoIGFzIGhhbGYgKi8KKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwNF9kYXRhWzRdLmFwaSwgdWlkLCBURVNUX0JVRkZfU0laRS8yLCB3cml0ZV9idWZmLCAwKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDRfZGF0YVs0XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgLyogQ2FsbCBnZXQgZnVuY3Rpb24gd2l0aCBpbmNvcnJlY3QgYnVmZmVyIGxlbmd0aCAgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gQnVmZmVyIHJldHVybmVkIGJ5IGdldCBhcGkgd2l0aCBpbmNvcnJlY3QgbGVuZ3RoIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgc2hvdWxkIGJlIGVtcHR5XG4iLCAwKTsKKyAgICBtZW1zZXQocmVhZF9idWZmLCAwLCBURVNUX0JVRkZfU0laRSk7CisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDRfZGF0YVs1XS5hcGksIHVpZCwgMCwgVEVTVF9CVUZGX1NJWkUsIHJlYWRfYnVmZik7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA0X2RhdGFbNV0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKyAgICBmb3IgKGogPSAwOyBqIDwgVEVTVF9CVUZGX1NJWkU7IGorKykKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHJlYWRfYnVmZltqXSwgMCwgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisgICAgfQorCisgICAgLyogQ2FsbCBnZXQgZnVuY3Rpb24gd2l0aCBDT1JSRUNUIGJ1ZmZlciBsZW5ndGggICovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDRfZGF0YVs3XS5hcGksIHVpZCwgMCwgVEVTVF9CVUZGX1NJWkUvMiwgcmVhZF9idWZmKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDRfZGF0YVs3XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworICAgIFRFU1RfQVNTRVJUX01FTUNNUChyZWFkX2J1ZmYsIHdyaXRlX2J1ZmYsIFRFU1RfQlVGRl9TSVpFLzIsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworCisgICAgLyogQ2hlY2sgd2Ugc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGFjY2VzcyBvbGQgc2V0IGRhdGEgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMl0gV2hlbiBnZXQgYXBpIGlzIGNhbGxlZCBmb3IgdWlkIHdob3NlIGxlbmd0aCBpbiByZWR1Y2VkLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGNoZWNrIG9sZCBkYXRhIGlzIGluYWNjZXNzaWJsZVxuIiwgMCk7CisgICAgZm9yIChqID0gVEVTVF9CVUZGX1NJWkUvMjsgaiA8IFRFU1RfQlVGRl9TSVpFOyBqKyspCisgICAgeworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChyZWFkX2J1ZmZbal0sIDAsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOworICAgIH0KKworICAgIC8qIFJlbW92ZSB0aGUgdWlkIHRvIGJlIHVzZWQgaW4gb3RoZXIgdGVzdCBjYXNlICovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDRfZGF0YVsxMF0uYXBpLCB1aWQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwNF9kYXRhWzEwXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNC90ZXN0X3MwMDQuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA0L3Rlc3RfczAwNC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1NTZmODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNC90ZXN0X3MwMDQuaApAQCAtMCwwICsxLDM1IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9TMDA0X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9TMDA0X0NMSUVOVF9URVNUU19IXworCisjaWZkZWYgSVRTX1RFU1QKKyNkZWZpbmUgVkFMX1NUT1JBR0VfQkFTRSBWQUxfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0JBU0UKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sIHMwMDQpCisjZWxpZiBQU19URVNUCisjZGVmaW5lIFZBTF9TVE9SQUdFX0JBU0UgVkFMX1BST1RFQ1RFRF9TVE9SQUdFX0JBU0UKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sIHAwMDQpCisjZW5kaWYKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9zMDA0X3NzdF9saXN0W107CisKK2ludDMyX3QgcHNhX3NzdF9nZXRfZGF0YV9jaGVjayhzZWN1cml0eV90IGNhbGxlcik7CisjZW5kaWYgLyogX1RFU1RfUzAwNF9DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA1L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA1L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jN2QwMGY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDUvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfczAwNS5jCitDQ19PUFRJT05TID0gLURJVFNfVEVTVAorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA1L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA1L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNmRjYmFhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDUvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X3MwMDUuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9TVE9SQUdFX0JBU0UsIDUpCisjZGVmaW5lIFRFU1RfREVTQyAiU3VjY2VzcyBzY2VuYXJpb3MgY2hlY2tcbiIKKworVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9ISUdIX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fc2VjdXJlX3N0b3JhZ2VfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfczAwNV9zc3RfbGlzdCwgRkFMU0UpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNS90ZXN0X2l0c19kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNS90ZXN0X2l0c19kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWM3NjkzZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA1L3Rlc3RfaXRzX2RhdGEuaApAQCAtMCwwICsxLDU5IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9TMDA1X0lUU19EQVRBX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX1MwMDVfSVRTX0RBVEFfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UuaCIKKworI2RlZmluZSBTU1RfRlVOQ1RJT04gICAgICAgICAgIHZhbC0+aXRzX2Z1bmN0aW9uCisjZGVmaW5lIHBzYV9zc3RfdWlkX3QgICAgICAgICAgcHNhX2l0c191aWRfdAorI2RlZmluZSBwc2Ffc3N0X2NyZWF0ZV9mbGFnc190IHBzYV9pdHNfY3JlYXRlX2ZsYWdzX3QKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1sxMDBdOworICAgIGVudW0gaXRzX2Z1bmN0aW9uX2NvZGUgIGFwaTsKKyAgICBwc2FfaXRzX3N0YXR1c190ICAgICAgICBzdGF0dXM7Cit9IHRlc3RfZGF0YTsKKworc3RhdGljIHN0cnVjdCBwc2FfaXRzX2luZm9fdCBpbmZvOworc3RhdGljIHRlc3RfZGF0YSBzMDA1X2RhdGFbXSA9IHsKK3sKKyAiVGhpcyBpcyBkdW1teSBmb3IgaW5kZXgwIiwgMCwgMAorfSwKK3sKKyAiQ3JlYXRlIGEgdmFsaWQgc3RvcmFnZSBlbnRpdHkgIiwgVkFMX0lUU19TRVQsIFBTQV9JVFNfU1VDQ0VTUworfSwKK3sKKyAidmFsaWRhdGUgdGhlIGRhdGEgdXNpbmcgZ2V0IGFwaSIsIFZBTF9JVFNfR0VULCBQU0FfSVRTX1NVQ0NFU1MKK30sCit7CisgIkluZGV4IG5vdCB1c2VkIiwwLDAKK30sCit7CisgInZhbGlkYXRlIHRoZSBkYXRhIGF0dHJpYnV0ZXMgZ2V0X2luZm8gYXBpIiwgVkFMX0lUU19HRVRfSU5GTywgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJJbmRleCBub3QgdXNlZCIsMCwwCit9LAoreworICJJbmRleCBub3QgdXNlZCIsMCwwCit9LAoreworICJSZW1vdmUgdGhlIHZhbGlkIHN0b3JhZ2UgZW50aXR5ICIsIFZBTF9JVFNfUkVNT1ZFLCBQU0FfSVRTX1NVQ0NFU1MKK30sCit9OworI2VuZGlmIC8qIF9URVNUX1MwMDRfSVRTX0RBVEFfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA1L3Rlc3RfcHNfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDUvdGVzdF9wc19kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTkyOGVkMQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA1L3Rlc3RfcHNfZGF0YS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBwcyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfUzAwNV9QU19EQVRBX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX1MwMDVfUFNfREFUQV9URVNUU19IXworCisjaW5jbHVkZSAidmFsX3Byb3RlY3RlZF9zdG9yYWdlLmgiCisKKyNkZWZpbmUgU1NUX0ZVTkNUSU9OICAgICAgICAgICB2YWwtPnBzX2Z1bmN0aW9uCisjZGVmaW5lIHBzYV9zc3RfdWlkX3QgICAgICAgICAgcHNhX3BzX3VpZF90CisjZGVmaW5lIHBzYV9zc3RfY3JlYXRlX2ZsYWdzX3QgcHNhX3BzX2NyZWF0ZV9mbGFnc190CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1sxMDBdOworICAgIGVudW0gcHNfZnVuY3Rpb25fY29kZSAgYXBpOworICAgIHBzYV9wc19zdGF0dXNfdCAgICAgICAgc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcHNhX3BzX2luZm9fdCBpbmZvOworc3RhdGljIHRlc3RfZGF0YSBzMDA1X2RhdGFbXSA9IHsKK3sKKyAiVGhpcyBpcyBkdW1teSBmb3IgaW5kZXgwIiwgMCwgMAorfSwKK3sKKyAiQ3JlYXRlIGEgdmFsaWQgc3RvcmFnZSBlbnRpdHkgIiwgVkFMX1BTX1NFVCwgUFNBX1BTX1NVQ0NFU1MKK30sCit7CisgInZhbGlkYXRlIHRoZSBkYXRhIHVzaW5nIGdldCBhcGkiLCBWQUxfUFNfR0VULCBQU0FfUFNfU1VDQ0VTUworfSwKK3sKKyAiSW5kZXggbm90IHVzZWQiLDAsMAorfSwKK3sKKyAidmFsaWRhdGUgdGhlIGRhdGEgYXR0cmlidXRlcyBnZXRfaW5mbyBhcGkiLCBWQUxfUFNfR0VUX0lORk8sIFBTQV9QU19TVUNDRVNTCit9LAoreworICJJbmRleCBub3QgdXNlZCIsMCwwCit9LAoreworICJJbmRleCBub3QgdXNlZCIsMCwwCit9LAoreworICJSZW1vdmUgdGhlIHZhbGlkIHN0b3JhZ2UgZW50aXR5ICIsIFZBTF9QU19SRU1PVkUsIFBTQV9QU19TVUNDRVNTCit9LAorfTsKKyNlbmRpZiAvKiBfVEVTVF9TMDA0X1BTX0RBVEFfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA1L3Rlc3RfczAwNS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDUvdGVzdF9zMDA1LmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmU4YjBiNAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA1L3Rlc3RfczAwNS5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X3MwMDUuaCIKKyNpZmRlZiBJVFNfVEVTVAorI2luY2x1ZGUgInRlc3RfaXRzX2RhdGEuaCIKKyNlbGlmIFBTX1RFU1QKKyNpbmNsdWRlICJ0ZXN0X3BzX2RhdGEuaCIKKyNlbmRpZgorCisjZGVmaW5lIFRFU1RfQlVGRl9TSVpFIDMwCisKK2NsaWVudF90ZXN0X3QgdGVzdF9zMDA1X3NzdF9saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBwc2Ffc3N0X2FwaXNfY2hlY2tfc3VjY2Vzc19jYXNlLAorICAgIE5VTEwsCit9OworCitzdGF0aWMgdWludDhfdCByZWFkX2J1ZmZbVEVTVF9CVUZGX1NJWkVdOworc3RhdGljIHVpbnQ4X3Qgd3JpdGVfYnVmZltURVNUX0JVRkZfU0laRV0gPSB7CisgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MjMsIDB4RjYsIDB4MDcsIDB4MDgsIDB4MEQsIDB4MEEsIDB4MUIsIDB4MEMsIDB4NUQsIDB4MEUsXAorICAweDcwLCAweEExLCAweEZGLCAweEZGLCAweDE0LCAweDczLCAweDQ2LCAweDk3LCAweEU4LCAweERELCAweENBLCAweDBCLCAweDNDLCAweDBELCAweDJFfTsKKworc3RhdGljIGludDMyX3QgcHNhX3NzdF9hcGlzX2NoZWNrKHBzYV9zc3RfdWlkX3QgdWlkLCB1aW50MzJfdCBkYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpkYXRhX2J1ZmYsIHBzYV9zc3RfY3JlYXRlX2ZsYWdzX3QgY3JlYXRlX2ZsYWcpCit7CisgICAgdWludDMyX3Qgc3RhdHVzOworCisgICAgLyogU2V0IHRoZSB1aWQgd2l0aCB0aGUgZGF0YV9sZW4gYW5kIGRhdGFfYnVmZiAqLworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA1X2RhdGFbMV0uYXBpLCB1aWQsIGRhdGFfbGVuLCBkYXRhX2J1ZmYsIGNyZWF0ZV9mbGFnKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDVfZGF0YVsxXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgLyogQ2FsbCB0aGUgR0VUIGZ1bmN0aW9uIHRvIGdldCB0aGUgZGF0YSBidWZmZXIgYW5kIG1hdGNoIHRoZSBidWZmZXIgKi8KKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwNV9kYXRhWzJdLmFwaSwgdWlkLCAwLCBkYXRhX2xlbiwgcmVhZF9idWZmKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDVfZGF0YVsyXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworICAgIFRFU1RfQVNTRVJUX01FTUNNUChyZWFkX2J1ZmYsIGRhdGFfYnVmZiwgZGF0YV9sZW4sIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgLyogQ2FsbCB0aGUgR0VUX0lORk8gZnVuY3Rpb24gYW5kIG1hdGNoIHRoZSBhdHRyaWJ1dGVzICovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDVfZGF0YVs0XS5hcGksIHVpZCwgJmluZm8pOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwNV9kYXRhWzRdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoaW5mby5zaXplLCBkYXRhX2xlbiwgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoaW5mby5mbGFncywgY3JlYXRlX2ZsYWcsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgLyogUmVtb3ZlIHRoZSB1aWQgICovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDVfZGF0YVs3XS5hcGksIHVpZCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA1X2RhdGFbN10uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3QgcHNhX3NzdF9hcGlzX2NoZWNrX3N1Y2Nlc3NfY2FzZShzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIHBzYV9zc3RfdWlkX3QgdWlkID0gVUlEX0JBU0VfVkFMVUUgKyAxMDsKKyAgIHVpbnQzMl90IGRhdGFfbGVuID0gMCwgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworICAgcHNhX3NzdF9jcmVhdGVfZmxhZ3NfdCBmbGFnPTA7CisKKyAgICAvKiBDYWxsaW5nIFNFVCBmdW5jdGlvbiB3aXRoIEJBU0UgIHVpZF92YWx1ZSAsIGRhdGFfbGVuIHplcm8gYW5kIHZhbGlkIGRhdGEgcG9pbnRlciAqLworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBTZXQgVUlEIHdpdGggZGF0YSBsZW5ndGggemVybyBhbmQgY2FsbCBzdG9yYWdlIGFwaXNcbiIsIDApOworICAgIGlmIChwc2Ffc3N0X2FwaXNfY2hlY2soVUlEX0JBU0VfVkFMVUUsIGRhdGFfbGVuLCB3cml0ZV9idWZmLCBmbGFnKSkKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJEYXRhIExlbiA9ICVkXG4iLCBkYXRhX2xlbik7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJDcmVhdGUgRmxhZyB2YWx1ZSA9ICAlZFxuIiwgZmxhZyk7CisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgIH0KKworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAyXSBDaGFuZ2UgZGF0YSBsZW5ndGggdG8gbm9uLXplcm8gYW5kIG1ha2UgYXBpcyBjYWxsXG4iLCAwKTsKKyAgICBpZiAocHNhX3NzdF9hcGlzX2NoZWNrKHVpZCwgVEVTVF9CVUZGX1NJWkUvMiwgd3JpdGVfYnVmZiwgZmxhZykpCisgICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJEYXRhIExlbiA9ICVkXG4iLCBkYXRhX2xlbik7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIkNyZWF0ZSBGbGFnIHZhbHVlID0gICVkXG4iLCBmbGFnKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDUvdGVzdF9zMDA1LmggYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNS90ZXN0X3MwMDUuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NGNiZjQzCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDUvdGVzdF9zMDA1LmgKQEAgLTAsMCArMSwzNiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfUzAwNV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfUzAwNV9DTElFTlRfVEVTVFNfSF8KKworI2lmZGVmIElUU19URVNUCisjZGVmaW5lIFZBTF9TVE9SQUdFX0JBU0UgVkFMX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9CQVNFCisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLCBzMDA1KQorI2VsaWYgUFNfVEVTVAorI2RlZmluZSBWQUxfU1RPUkFHRV9CQVNFIFZBTF9QUk9URUNURURfU1RPUkFHRV9CQVNFCisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLCBwMDA1KQorI2VuZGlmCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfczAwNV9zc3RfbGlzdFtdOworCitpbnQzMl90IHBzYV9zc3RfYXBpc19jaGVja19zdWNjZXNzX2Nhc2Uoc2VjdXJpdHlfdCBjYWxsZXIpOworCisjZW5kaWYgLyogX1RFU1RfUzAwNV9DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA2L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA2L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZGNlYmQyCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDYvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfczAwNi5jCitDQ19PUFRJT05TID0gLURJVFNfVEVTVAorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA2L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA2L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yY2NhODBmCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDYvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X3MwMDYuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9TVE9SQUdFX0JBU0UsIDYpCisjZGVmaW5lIFRFU1RfREVTQyAiRmxhZyBub3Qgc3VwcG9ydGVkIGVycm9yIGNoZWNrXG4iCisKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX3NlY3VyZV9zdG9yYWdlX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X3MwMDZfc3N0X2xpc3QsIEZBTFNFKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDYvdGVzdF9pdHNfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDYvdGVzdF9pdHNfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU2ZGRkMzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNi90ZXN0X2l0c19kYXRhLmgKQEAgLTAsMCArMSw1MSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfUzAwNl9JVFNfREFUQV9URVNUU19IXworI2RlZmluZSBfVEVTVF9TMDA2X0lUU19EQVRBX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLmgiCisKKyNkZWZpbmUgU1NUX0ZVTkNUSU9OICAgICAgICAgICAgdmFsLT5pdHNfZnVuY3Rpb24KKyNkZWZpbmUgUFNBX1NTVF9GTEFHX1dSSVRFX09OQ0UgUFNBX0lUU19GTEFHX1dSSVRFX09OQ0UKKyNkZWZpbmUgcHNhX3NzdF91aWRfdCAgICAgICAgICAgcHNhX2l0c191aWRfdAorI2RlZmluZSBwc2Ffc3N0X2NyZWF0ZV9mbGFnc190ICBwc2FfaXRzX2NyZWF0ZV9mbGFnc190CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbMTAwXTsKKyAgICBlbnVtIGl0c19mdW5jdGlvbl9jb2RlICBhcGk7CisgICAgcHNhX2l0c19zdGF0dXNfdCAgICAgICAgc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcHNhX2l0c19pbmZvX3QgaW5mbzsKK3N0YXRpYyB0ZXN0X2RhdGEgczAwNl9kYXRhW10gPSB7Cit7CisgIlRoaXMgaXMgZHVtbXkgZm9yIGluZGV4MCIsIDAsIDAKK30sCit7CisgIkNyZWF0ZSBhIHZhbGlkIHN0b3JhZ2UgZW50aXR5IHdpdGggZGlmZmVyZW50IGZsYWcgdmFsdWVzICIsIFZBTF9JVFNfU0VULCBQU0FfSVRTX1NVQ0NFU1MKK30sCit7CisgInZhbGlkYXRlIHRoZSBmbGFnIHZhbHVlIGdldF9pbmZvIGFwaSIsIFZBTF9JVFNfR0VUX0lORk8sIFBTQV9JVFNfU1VDQ0VTUworfSwKK3sKKyAiSW5kZXggbm90IHVzZWQiLDAsMAorfSwKK3sKKyAiUmVtb3ZlIHRoZSBzdG9yYWdlIGVudGl0eSAiLCBWQUxfSVRTX1JFTU9WRSwgUFNBX0lUU19TVUNDRVNTCit9LAorfTsKKyNlbmRpZiAvKiBfVEVTVF9TMDA2X0lUU19EQVRBX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNi90ZXN0X3BzX2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA2L3Rlc3RfcHNfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwMDcyM2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNi90ZXN0X3BzX2RhdGEuaApAQCAtMCwwICsxLDUxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgcHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX1MwMDZfUFNfREFUQV9URVNUU19IXworI2RlZmluZSBfVEVTVF9TMDA2X1BTX0RBVEFfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9wcm90ZWN0ZWRfc3RvcmFnZS5oIgorCisjZGVmaW5lIFNTVF9GVU5DVElPTiAgICAgICAgICAgIHZhbC0+cHNfZnVuY3Rpb24KKyNkZWZpbmUgUFNBX1NTVF9GTEFHX1dSSVRFX09OQ0UgUFNBX1BTX0ZMQUdfV1JJVEVfT05DRQorI2RlZmluZSBwc2Ffc3N0X3VpZF90ICAgICAgICAgICBwc2FfcHNfdWlkX3QKKyNkZWZpbmUgcHNhX3NzdF9jcmVhdGVfZmxhZ3NfdCAgcHNhX3BzX2NyZWF0ZV9mbGFnc190CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1sxMDBdOworICAgIGVudW0gcHNfZnVuY3Rpb25fY29kZSAgYXBpOworICAgIHBzYV9wc19zdGF0dXNfdCAgICAgICAgc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcHNhX3BzX2luZm9fdCBpbmZvOworc3RhdGljIHRlc3RfZGF0YSBzMDA2X2RhdGFbXSA9IHsKK3sKKyAiVGhpcyBpcyBkdW1teSBmb3IgaW5kZXgwIiwgMCwgMAorfSwKK3sKKyAiQ3JlYXRlIGEgdmFsaWQgc3RvcmFnZSBlbnRpdHkgd2l0aCBkaWZmZXJlbnQgZmxhZyB2YWx1ZXMgIiwgVkFMX1BTX1NFVCwgUFNBX1BTX1NVQ0NFU1MKK30sCit7CisgInZhbGlkYXRlIHRoZSBmbGFnIHZhbHVlIGdldF9pbmZvIGFwaSIsIFZBTF9QU19HRVRfSU5GTywgUFNBX1BTX1NVQ0NFU1MKK30sCit7CisgIkluZGV4IG5vdCB1c2VkIiwwLDAKK30sCit7CisgIlJlbW92ZSB0aGUgc3RvcmFnZSBlbnRpdHkgIiwgVkFMX1BTX1JFTU9WRSwgUFNBX1BTX1NVQ0NFU1MKK30sCit9OworI2VuZGlmIC8qIF9URVNUX1MwMDZfUFNfREFUQV9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDYvdGVzdF9zMDA2LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNi90ZXN0X3MwMDYuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MTA5YzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDYvdGVzdF9zMDA2LmMKQEAgLTAsMCArMSw5MCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfczAwNi5oIgorI2lmZGVmIElUU19URVNUCisjaW5jbHVkZSAidGVzdF9pdHNfZGF0YS5oIgorI2VsaWYgUFNfVEVTVAorI2luY2x1ZGUgInRlc3RfcHNfZGF0YS5oIgorI2VuZGlmCisKKyNkZWZpbmUgVEVTVF9CVUZGX1NJWkUgMzAKKworY2xpZW50X3Rlc3RfdCB0ZXN0X3MwMDZfc3N0X2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHBzYV9zc3RfZ2V0X2FwaXNfY2hlY2tfZm9yX2RpZmZlcmVudF9mbGFnc192YWx1ZSwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIHVpbnQ4X3Qgd3JpdGVfYnVmZltURVNUX0JVRkZfU0laRV0gPSB7CisgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MjMsIDB4RjYsIDB4MDcsIDB4MDgsIDB4MEQsIDB4MEEsIDB4MUIsIDB4MEMsIDB4NUQsIDB4MEUsXAorICAweDcwLCAweEExLCAweEZGLCAweEZGLCAweDE0LCAweDczLCAweDQ2LCAweDk3LCAweEU4LCAweERELCAweENBLCAweDBCLCAweDNDLCAweDBELCAweDJFfTsKKworc3RhdGljIGludDMyX3QgcHNhX3NzdF9zZXRfYXBpX3dpdGhfZmxhZ192YWx1ZShwc2Ffc3N0X3VpZF90IHVpZCwgdWludDMyX3QgZGF0YV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRhdGFfYnVmZiwgcHNhX3NzdF9jcmVhdGVfZmxhZ3NfdCBjcmVhdGVfZmxhZykKK3sKKyAgICB1aW50MzJfdCBzdGF0dXM7CisKKyAgICAvKiBTZXQgdGhlIHVpZCB3aXRoIHRoZSBkYXRhX2xlbiBhbmQgZGF0YV9idWZmICovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDZfZGF0YVsxXS5hcGksIHVpZCwgZGF0YV9sZW4sIGRhdGFfYnVmZiwgY3JlYXRlX2ZsYWcpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwNl9kYXRhWzFdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICAvKiBDYWxsIHRoZSBHRVRfSU5GTyBmdW5jdGlvbiBhbmQgbWF0Y2ggdGhlIGF0dHJpYnV0ZXMgKi8KKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwNl9kYXRhWzJdLmFwaSwgdWlkLCAmaW5mbyk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA2X2RhdGFbMl0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChpbmZvLmZsYWdzLCBjcmVhdGVfZmxhZywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICAvKiBSZW1vdmUgdGhlIHVpZCAgKi8KKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwNl9kYXRhWzRdLmFwaSwgdWlkKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDZfZGF0YVs0XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworaW50MzJfdCBwc2Ffc3N0X2dldF9hcGlzX2NoZWNrX2Zvcl9kaWZmZXJlbnRfZmxhZ3NfdmFsdWUoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBwc2Ffc3N0X2NyZWF0ZV9mbGFnc190IGZsYWcgPSAweDgwMDAwMDAwOworICAgdWludDMyX3Qgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAvKiBDYWxsaW5nIFNFVCBmdW5jdGlvbiB3aXRoIGRpZmZlcmVudCBjcmVhdGUgZmxhZyB2YWx1ZSAqLworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gU0VUIGFwaSBjYWxsIHdpdGggdmFsaWQgZmxhZyB2YWx1ZXNcbiIsIDApOworICAgd2hpbGUgKGZsYWcpCisgICB7CisgICAgICAgaWYgKHBzYV9zc3Rfc2V0X2FwaV93aXRoX2ZsYWdfdmFsdWUoVUlEX0JBU0VfVkFMVUUsIFRFU1RfQlVGRl9TSVpFLCB3cml0ZV9idWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWcgJiAoflBTQV9TU1RfRkxBR19XUklURV9PTkNFKSkpKQorICAgICAgIHsKKyAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIkZsYWcgdmFsdWUgPSAgJWRcbiIsIChmbGFnICYgKH5QU0FfU1NUX0ZMQUdfV1JJVEVfT05DRSkpKTsKKyAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgICAgfQorCisgICAgICAgaWYgKHBzYV9zc3Rfc2V0X2FwaV93aXRoX2ZsYWdfdmFsdWUoVUlEX0JBU0VfVkFMVUUsIFRFU1RfQlVGRl9TSVpFLCB3cml0ZV9idWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGZsYWctMSkgJiAoflBTQV9TU1RfRkxBR19XUklURV9PTkNFKSkpKQorICAgICAgIHsKKyAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIkZsYWcgdmFsdWUgPSAgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbGFnLTEpICYgKH5QU0FfU1NUX0ZMQUdfV1JJVEVfT05DRSkpOworCisgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgICAgIH0KKworICAgICAgIGZsYWcgPSBmbGFnID4+IDE7CisgICB9OworCisgICByZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDYvdGVzdF9zMDA2LmggYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNi90ZXN0X3MwMDYuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNzc5OTY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDYvdGVzdF9zMDA2LmgKQEAgLTAsMCArMSwzNiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfUzAwNl9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfUzAwNl9DTElFTlRfVEVTVFNfSF8KKworI2lmZGVmIElUU19URVNUCisjZGVmaW5lIFZBTF9TVE9SQUdFX0JBU0UgVkFMX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9CQVNFCisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLCBzMDA2KQorI2VsaWYgUFNfVEVTVAorI2RlZmluZSBWQUxfU1RPUkFHRV9CQVNFIFZBTF9QUk9URUNURURfU1RPUkFHRV9CQVNFCisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLCBwMDA2KQorI2VuZGlmCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfczAwNl9zc3RfbGlzdFtdOworCitpbnQzMl90IHBzYV9zc3RfZ2V0X2FwaXNfY2hlY2tfZm9yX2RpZmZlcmVudF9mbGFnc192YWx1ZShzZWN1cml0eV90IGNhbGxlcik7CisKKyNlbmRpZiAvKiBfVEVTVF9TMDA2X0NMSUVOVF9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDcvc291cmNlLm1rIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDcvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1N2IzOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNy9zb3VyY2UubWsKQEAgLTAsMCArMSwyMCBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9zMDA3LmMKK0NDX09QVElPTlMgPSAtRElUU19URVNUCitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDcvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDcvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkYmMxZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNy90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfczAwNy5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX1NUT1JBR0VfQkFTRSwgNykKKyNkZWZpbmUgVEVTVF9ERVNDICJGbGFnIHNldCBhZnRlciBjcmVhdGUgZXJyb3IgY2hlY2tcbiIKKworVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9ISUdIX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fc2VjdXJlX3N0b3JhZ2VfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfczAwN19zc3RfbGlzdCwgRkFMU0UpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNy90ZXN0X2l0c19kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNy90ZXN0X2l0c19kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTBjNDkzMQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA3L3Rlc3RfaXRzX2RhdGEuaApAQCAtMCwwICsxLDYxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9TMDA3X0lUU19EQVRBX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX1MwMDdfSVRTX0RBVEFfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UuaCIKKworI2RlZmluZSBTU1RfRlVOQ1RJT04gdmFsLT5pdHNfZnVuY3Rpb24KKyNkZWZpbmUgcHNhX3NzdF91aWRfdCBwc2FfaXRzX3VpZF90CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbMTAwXTsKKyAgICBlbnVtIGl0c19mdW5jdGlvbl9jb2RlICBhcGk7CisgICAgcHNhX2l0c19zdGF0dXNfdCAgICAgICAgc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyBwc2FfaXRzX2NyZWF0ZV9mbGFnc190IGZsYWc7CitzdGF0aWMgdGVzdF9kYXRhIHMwMDdfZGF0YVtdID0geworeworICJUaGlzIGlzIGR1bW15IGZvciBpbmRleDAiLCAwLCAwCit9LAoreworICJDcmVhdGUgYSB2YWxpZCBzdG9yYWdlIGVudGl0eSB3aXRoIG5vbi16ZXJvIGZsYWcgdmFsdWUiLCBWQUxfSVRTX1NFVCwgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJ0cnkgdG8gY2hhbmdlIHRoZSBmbGFnIHZhbHVlIHdpdGggYW5vdGhlciBub24temVybyB2YWx1ZSIsIFZBTF9JVFNfU0VULCBQU0FfSVRTX0VSUk9SX0ZMQUdTX1NFVF9BRlRFUl9DUkVBVEUKK30sCit7CisgInRyeSB0byBjaGFuZ2UgdGhlIGZsYWcgdmFsdWUgd2l0aCB6ZXJvIHZhbHVlIiwgVkFMX0lUU19TRVQsIFBTQV9JVFNfRVJST1JfRkxBR1NfU0VUX0FGVEVSX0NSRUFURQorfSwKK3sKKyAiUmVtb3ZlIHRoZSBzdG9yYWdlIGVudGl0eSAiLCBWQUxfSVRTX1JFTU9WRSwgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJDcmVhdGUgYSB2YWxpZCBzdG9yYWdlIGVudGl0eSB3aXRoIHplcm8gZmxhZyB2YWx1ZSIsIFZBTF9JVFNfU0VULCBQU0FfSVRTX1NVQ0NFU1MKK30sCit7CisgInRyeSB0byBjaGFuZ2UgdGhlIGZsYWcgdmFsdWUgd2l0aCAgbm9uLXplcm8gdmFsdWUiLCBWQUxfSVRTX1NFVCwgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJ0cnkgdG8gY2hhbmdlIHRoZSBmbGFnIGFnYWluIHRvIHplcm8gdmFsdWUiLCBWQUxfSVRTX1NFVCwgUFNBX0lUU19FUlJPUl9GTEFHU19TRVRfQUZURVJfQ1JFQVRFCit9LAoreworICJSZW1vdmUgdGhlIHN0b3JhZ2UgZW50aXR5ICIsIFZBTF9JVFNfUkVNT1ZFLCBQU0FfSVRTX1NVQ0NFU1MKK30sCit9OworI2VuZGlmIC8qIF9URVNUX1MwMDdfSVRTX0RBVEFfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA3L3Rlc3RfcHNfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDcvdGVzdF9wc19kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjc1N2M5YQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA3L3Rlc3RfcHNfZGF0YS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBwcyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfUzAwN19QU19EQVRBX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX1MwMDdfUFNfREFUQV9URVNUU19IXworCisjaW5jbHVkZSAidmFsX3Byb3RlY3RlZF9zdG9yYWdlLmgiCisKKyNkZWZpbmUgU1NUX0ZVTkNUSU9OIHZhbC0+cHNfZnVuY3Rpb24KKyNkZWZpbmUgcHNhX3NzdF91aWRfdCBwc2FfcHNfdWlkX3QKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1sxMDBdOworICAgIGVudW0gcHNfZnVuY3Rpb25fY29kZSAgYXBpOworICAgIHBzYV9wc19zdGF0dXNfdCAgICAgICAgc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyBwc2FfcHNfY3JlYXRlX2ZsYWdzX3QgZmxhZzsKK3N0YXRpYyB0ZXN0X2RhdGEgczAwN19kYXRhW10gPSB7Cit7CisgIlRoaXMgaXMgZHVtbXkgZm9yIGluZGV4MCIsIDAsIDAKK30sCit7CisgIkNyZWF0ZSBhIHZhbGlkIHN0b3JhZ2UgZW50aXR5IHdpdGggbm9uLXplcm8gZmxhZyB2YWx1ZSIsIFZBTF9QU19TRVQsIFBTQV9QU19TVUNDRVNTCit9LAoreworICJ0cnkgdG8gY2hhbmdlIHRoZSBmbGFnIHZhbHVlIHdpdGggYW5vdGhlciBub24temVybyB2YWx1ZSIsIFZBTF9QU19TRVQsIFBTQV9QU19FUlJPUl9GTEFHU19TRVRfQUZURVJfQ1JFQVRFCit9LAoreworICJ0cnkgdG8gY2hhbmdlIHRoZSBmbGFnIHZhbHVlIHdpdGggemVybyB2YWx1ZSIsIFZBTF9QU19TRVQsIFBTQV9QU19FUlJPUl9GTEFHU19TRVRfQUZURVJfQ1JFQVRFCit9LAoreworICJSZW1vdmUgdGhlIHN0b3JhZ2UgZW50aXR5ICIsIFZBTF9QU19SRU1PVkUsIFBTQV9QU19TVUNDRVNTCit9LAoreworICJDcmVhdGUgYSB2YWxpZCBzdG9yYWdlIGVudGl0eSB3aXRoIHplcm8gZmxhZyB2YWx1ZSIsIFZBTF9QU19TRVQsIFBTQV9QU19TVUNDRVNTCit9LAoreworICJ0cnkgdG8gY2hhbmdlIHRoZSBmbGFnIHZhbHVlIHdpdGggIG5vbi16ZXJvIHZhbHVlIiwgVkFMX1BTX1NFVCwgUFNBX1BTX1NVQ0NFU1MKK30sCit7CisgInRyeSB0byBjaGFuZ2UgdGhlIGZsYWcgYWdhaW4gdG8gemVybyB2YWx1ZSIsIFZBTF9QU19TRVQsIFBTQV9QU19FUlJPUl9GTEFHU19TRVRfQUZURVJfQ1JFQVRFCit9LAoreworICJSZW1vdmUgdGhlIHN0b3JhZ2UgZW50aXR5ICIsIFZBTF9QU19SRU1PVkUsIFBTQV9QU19TVUNDRVNTCit9LAorfTsKKyNlbmRpZiAvKiBfVEVTVF9TMDA3X1BTX0RBVEFfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA3L3Rlc3RfczAwNy5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDcvdGVzdF9zMDA3LmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTUyMDgzNwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA3L3Rlc3RfczAwNy5jCkBAIC0wLDAgKzEsNzggQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X3MwMDcuaCIKKyNpZmRlZiBJVFNfVEVTVAorI2luY2x1ZGUgInRlc3RfaXRzX2RhdGEuaCIKKyNlbGlmIFBTX1RFU1QKKyNpbmNsdWRlICJ0ZXN0X3BzX2RhdGEuaCIKKyNlbmRpZgorCisjZGVmaW5lIFRFU1RfQlVGRl9TSVpFIDMwCisKK2NsaWVudF90ZXN0X3QgdGVzdF9zMDA3X3NzdF9saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBwc2Ffc3N0X2FwaV9mbGFnX3NldF9hZnRlcl9jcmVhdGUsCisgICAgTlVMTCwKK307CisKK3N0YXRpYyB1aW50OF90IHdyaXRlX2J1ZmZbVEVTVF9CVUZGX1NJWkVdID0geworICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDIzLCAweEY2LCAweDA3LCAweDA4LCAweDBELCAweDBBLCAweDFCLCAweDBDLCAweDVELCAweDBFLFwKKyAgMHg3MCwgMHhBMSwgMHhGRiwgMHhGRiwgMHgxNCwgMHg3MywgMHg0NiwgMHg5NywgMHhFOCwgMHhERCwgMHhDQSwgMHgwQiwgMHgzQywgMHgwRCwgMHgyRX07CisKK2ludDMyX3QgcHNhX3NzdF9hcGlfZmxhZ19zZXRfYWZ0ZXJfY3JlYXRlKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIHBzYV9zc3RfdWlkX3QgdWlkID0gVUlEX0JBU0VfVkFMVUUgKyAxMDsKKyAgICB1aW50MzJfdCBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICBmbGFnID0gMHgwMDAwMTAwOworICAgIC8qIFNldCB0aGUgdWlkIHdpdGggdGhlIGRhdGFfbGVuIGFuZCBkYXRhX2J1ZmYgKi8KKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwN19kYXRhWzFdLmFwaSwgdWlkLCBURVNUX0JVRkZfU0laRS8yLCB3cml0ZV9idWZmLCBmbGFnKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDdfZGF0YVsxXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgLyogQ2FsbCBzZXQgZm9yIHNhbWUgdWlkIGFuZCBkaWZmZXJlbnQgbm9uLXplcm8gZmxhZyB2YWx1ZSAqLworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA3X2RhdGFbMl0uYXBpLCB1aWQsIFRFU1RfQlVGRl9TSVpFLCB3cml0ZV9idWZmLCBmbGFnPDwxKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDdfZGF0YVsyXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgLyogQ2FsbCBzZXQgZm9yIHNhbWUgdWlkIGFuZCBkaWZmZXJlbnQgbnplcm8gZmxhZyB2YWx1ZSAqLworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA3X2RhdGFbM10uYXBpLCB1aWQsIFRFU1RfQlVGRl9TSVpFLCB3cml0ZV9idWZmLCAwKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDdfZGF0YVszXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgLyogUmVtb3ZlIHRoZSB1aWQgICovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDdfZGF0YVs0XS5hcGksIHVpZCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA3X2RhdGFbNF0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgIC8qIFNldCB0aGUgdWlkIHdpdGggdGhlIGRhdGFfbGVuIGFuZCBkYXRhX2J1ZmYgKi8KKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwN19kYXRhWzVdLmFwaSwgdWlkLCBURVNUX0JVRkZfU0laRSwgd3JpdGVfYnVmZiwgMCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA3X2RhdGFbNV0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKworICAgIC8qIENhbGwgc2V0IGZvciBzYW1lIHVpZCBhbmQgZGlmZmVyZW50IG5vbi16ZXJvIGZsYWcgdmFsdWUgKi8KKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwN19kYXRhWzZdLmFwaSwgdWlkLCBURVNUX0JVRkZfU0laRSwgd3JpdGVfYnVmZiwgZmxhZyk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA3X2RhdGFbNl0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgIC8qIENhbGwgc2V0IGZvciBzYW1lIHVpZCBhbmQgZGlmZmVyZW50IHplcm8gZmxhZyB2YWx1ZSAqLworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA3X2RhdGFbN10uYXBpLCB1aWQsIFRFU1RfQlVGRl9TSVpFLCB3cml0ZV9idWZmLCBmbGFnKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDdfZGF0YVs3XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworCisgICAgLyogUmVtb3ZlIHRoZSB1aWQgICovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDdfZGF0YVs4XS5hcGksIHVpZCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA3X2RhdGFbOF0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKworICAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA3L3Rlc3RfczAwNy5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDcvdGVzdF9zMDA3LmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzc3NzViMAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA3L3Rlc3RfczAwNy5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX1MwMDdfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX1MwMDdfQ0xJRU5UX1RFU1RTX0hfCisKKyNpZmRlZiBJVFNfVEVTVAorI2RlZmluZSBWQUxfU1RPUkFHRV9CQVNFIFZBTF9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfQkFTRQorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XywgczAwNykKKyNlbGlmIFBTX1RFU1QKKyNkZWZpbmUgVkFMX1NUT1JBR0VfQkFTRSBWQUxfUFJPVEVDVEVEX1NUT1JBR0VfQkFTRQorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XywgcDAwNykKKyNlbmRpZgorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X3MwMDdfc3N0X2xpc3RbXTsKKworaW50MzJfdCBwc2Ffc3N0X2FwaV9mbGFnX3NldF9hZnRlcl9jcmVhdGUoc2VjdXJpdHlfdCBjYWxsZXIpOworCisjZW5kaWYgLyogX1RFU1RfUzAwN19DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA4L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA4L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mY2UwY2QwCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDgvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfczAwOC5jCitDQ19PUFRJT05TID0gLURJVFNfVEVTVAorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA4L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA4L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMGMxOWU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDgvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X3MwMDguaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9TVE9SQUdFX0JBU0UsIDgpCisjZGVmaW5lIFRFU1RfREVTQyAiVmFsaWQgb2Zmc2V0IHN1Y2Nlc3Mgc2NlbmFyaW9zIGNoZWNrXG4iCisKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX3NlY3VyZV9zdG9yYWdlX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X3MwMDhfaXRzX2xpc3QsIEZBTFNFKTsKKworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOC90ZXN0X2l0c19kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOC90ZXN0X2l0c19kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzA0M2ZiMgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA4L3Rlc3RfaXRzX2RhdGEuaApAQCAtMCwwICsxLDcyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9TMDA4X0lUU19EQVRBX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX1MwMDhfSVRTX0RBVEFfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UuaCIKKworI2RlZmluZSBTU1RfRlVOQ1RJT04gdmFsLT5pdHNfZnVuY3Rpb24KKyNkZWZpbmUgcHNhX3NzdF91aWRfdCBwc2FfaXRzX3VpZF90CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbMTAwXTsKKyAgICBlbnVtIGl0c19mdW5jdGlvbl9jb2RlICBhcGk7CisgICAgcHNhX2l0c19zdGF0dXNfdCAgICAgICAgc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyB0ZXN0X2RhdGEgczAwOF9kYXRhW10gPSB7Cit7CisgIlRoaXMgaXMgZHVtbXkgZm9yIGluZGV4MCIsIDAsIDAKK30sCit7CisgIkNyZWF0ZSBhIHZhbGlkIHN0b3JhZ2UgZW50aXR5IHdpdGggemVybyBmbGFnIHZhbHVlIiwgVkFMX0lUU19TRVQsIFBTQV9JVFNfU1VDQ0VTUworfSwKK3sKKyAiQ2FsbCBnZXQgYXBpIHdpdGggdmFsaWQgb2Zmc2V0IHZhbHVlcywgYW5kIG9mZnNldCArIGRhdGFfbGVuID0gdG90YWxfc2l6ZSIsIFZBTF9JVFNfR0VULCBQU0FfSVRTX1NVQ0NFU1MKK30sCit7CisgIlRoaXMgaXMgZHVtbXkgZm9yIGluZGV4MyIsIDAsIDAKK30sCit7CisgIkNhbGwgZ2V0IGFwaSB3aXRoIHZhbGlkIG9mZnNldCB2YWx1ZXMsIGFuZCBvZmZzZXQgKyBkYXRhX2xlbiA8IHRvdGFsX3NpemUiLCBWQUxfSVRTX0dFVCwgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJUaGlzIGlzIGR1bW15IGZvciBpbmRleDUiLCAwLCAwCit9LAoreworICJDYWxsIGdldCBhcGkgd2l0aCBpbnZhbGlkIG9mZnNldCAsIG9mZnNldCA9IHRvdGFsIGRhdGFfc2l6ZSArIDEiLCBWQUxfSVRTX0dFVCwgUFNBX0lUU19FUlJPUl9PRkZTRVRfSU5WQUxJRAorfSwKK3sKKyAiVGhpcyBpcyBkdW1teSBmb3IgaW5kZXg3IiwgMCwgMAorfSwKK3sKKyAiQ2FsbCBnZXQgYXBpIHdpdGggdmFsaWQgb2Zmc2V0ICwgYnV0IG9mZnNldCArIGRhdGFfbGVuID4gdG90YWwgZGF0YV9zaXplIiwgVkFMX0lUU19HRVQsIFBTQV9JVFNfRVJST1JfSU5DT1JSRUNUX1NJWkUKK30sCit7CisgIlRoaXMgaXMgZHVtbXkgZm9yIGluZGV4OSIsIDAsIDAKK30sCit7CisgIkNhbGwgZ2V0IGFwaSB3aXRoIGludmFsaWQgZGF0YSBsZW4gYW5kIG9mZnNldCB6ZXJvIiwgVkFMX0lUU19HRVQsIFBTQV9JVFNfRVJST1JfSU5DT1JSRUNUX1NJWkUKK30sCit7CisgIlRoaXMgaXMgZHVtbXkgZm9yIGluZGV4MTEiLCAwLCAwCit9LAoreworICJSZW1vdmUgdGhlIHN0b3JhZ2UgZW50aXR5ICIsIFZBTF9JVFNfUkVNT1ZFLCBQU0FfSVRTX1NVQ0NFU1MKK30sCit9OworI2VuZGlmIC8qIF9URVNUX1MwMDhfSVRTX0RBVEFfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA4L3Rlc3RfcHNfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDgvdGVzdF9wc19kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTBkNDc1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA4L3Rlc3RfcHNfZGF0YS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBwcyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfUzAwOF9QU19EQVRBX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX1MwMDhfUFNfREFUQV9URVNUU19IXworCisjaW5jbHVkZSAidmFsX3Byb3RlY3RlZF9zdG9yYWdlLmgiCisKKyNkZWZpbmUgU1NUX0ZVTkNUSU9OIHZhbC0+cHNfZnVuY3Rpb24KKyNkZWZpbmUgcHNhX3NzdF91aWRfdCBwc2FfcHNfdWlkX3QKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzEwMF07CisgICAgZW51bSBwc19mdW5jdGlvbl9jb2RlICBhcGk7CisgICAgcHNhX3BzX3N0YXR1c190ICAgICAgICBzdGF0dXM7Cit9IHRlc3RfZGF0YTsKKworc3RhdGljIHRlc3RfZGF0YSBzMDA4X2RhdGFbXSA9IHsKK3sKKyAiVGhpcyBpcyBkdW1teSBmb3IgaW5kZXgwIiwgMCwgMAorfSwKK3sKKyAiQ3JlYXRlIGEgdmFsaWQgc3RvcmFnZSBlbnRpdHkgd2l0aCB6ZXJvIGZsYWcgdmFsdWUiLCBWQUxfUFNfU0VULCBQU0FfUFNfU1VDQ0VTUworfSwKK3sKKyAiQ2FsbCBnZXQgYXBpIHdpdGggdmFsaWQgb2Zmc2V0IHZhbHVlcywgYW5kIG9mZnNldCArIGRhdGFfbGVuID0gdG90YWxfc2l6ZSIsIFZBTF9QU19HRVQsIFBTQV9QU19TVUNDRVNTCit9LAoreworICJUaGlzIGlzIGR1bW15IGZvciBpbmRleDMiLCAwLCAwCit9LAoreworICJDYWxsIGdldCBhcGkgd2l0aCB2YWxpZCBvZmZzZXQgdmFsdWVzLCBhbmQgb2Zmc2V0ICsgZGF0YV9sZW4gPCB0b3RhbF9zaXplIiwgVkFMX1BTX0dFVCwgUFNBX1BTX1NVQ0NFU1MKK30sCit7CisgIlRoaXMgaXMgZHVtbXkgZm9yIGluZGV4NSIsIDAsIDAKK30sCit7CisgIkNhbGwgZ2V0IGFwaSB3aXRoIGludmFsaWQgb2Zmc2V0ICwgb2Zmc2V0ID0gdG90YWwgZGF0YV9zaXplICsgMSIsIFZBTF9QU19HRVQsIFBTQV9QU19FUlJPUl9PRkZTRVRfSU5WQUxJRAorfSwKK3sKKyAiVGhpcyBpcyBkdW1teSBmb3IgaW5kZXg3IiwgMCwgMAorfSwKK3sKKyAiQ2FsbCBnZXQgYXBpIHdpdGggdmFsaWQgb2Zmc2V0ICwgYnV0IG9mZnNldCArIGRhdGFfbGVuID4gdG90YWwgZGF0YV9zaXplIiwgVkFMX1BTX0dFVCwgUFNBX1BTX0VSUk9SX0lOQ09SUkVDVF9TSVpFCit9LAoreworICJUaGlzIGlzIGR1bW15IGZvciBpbmRleDkiLCAwLCAwCit9LAoreworICJDYWxsIGdldCBhcGkgd2l0aCBpbnZhbGlkIGRhdGEgbGVuIGFuZCBvZmZzZXQgemVybyIsIFZBTF9QU19HRVQsIFBTQV9QU19FUlJPUl9JTkNPUlJFQ1RfU0laRQorfSwKK3sKKyAiVGhpcyBpcyBkdW1teSBmb3IgaW5kZXgxMSIsIDAsIDAKK30sCit7CisgIlJlbW92ZSB0aGUgc3RvcmFnZSBlbnRpdHkgIiwgVkFMX1BTX1JFTU9WRSwgUFNBX1BTX1NVQ0NFU1MKK30sCit9OworI2VuZGlmIC8qIF9URVNUX1MwMDhfUFNfREFUQV9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDgvdGVzdF9zMDA4LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOC90ZXN0X3MwMDguYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YTE2ZmIwCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDgvdGVzdF9zMDA4LmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X3MwMDguaCIKKyNpZmRlZiBJVFNfVEVTVAorI2luY2x1ZGUgInRlc3RfaXRzX2RhdGEuaCIKKyNlbGlmIFBTX1RFU1QKKyNpbmNsdWRlICJ0ZXN0X3BzX2RhdGEuaCIKKyNlbmRpZgorCisjZGVmaW5lIFRFU1RfQlVGRl9TSVpFIDIwCisKK2NsaWVudF90ZXN0X3QgdGVzdF9zMDA4X2l0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBwc2FfaXRzX25vbnplcm9fb2Zmc2V0X2NoZWNrX3N1Y2Nlc3MsCisgICAgcHNhX2l0c19ub256ZXJvX29mZnNldF9jaGVja19mYWlsdXJlLAorICAgIE5VTEwsCit9OworCitzdGF0aWMgcHNhX3NzdF91aWRfdCB1aWQgPSBVSURfQkFTRV9WQUxVRSArIDEwOworc3RhdGljIHVpbnQ4X3QgcmVhZF9idWZmW1RFU1RfQlVGRl9TSVpFXTsKK3N0YXRpYyB1aW50OF90IHdyaXRlX2J1ZmZbVEVTVF9CVUZGX1NJWkVdID0gezB4OTksIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MjMsIDB4RjYsIDB4MDcsIDB4MDgsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBELCAweDcwLCAweEExLCAweEZGLCAweEZGLCAweDE0LCAweDczLCAweDQ2LCAweDk3LCAweEU4LCAweEREfTsKKworaW50MzJfdCBwc2FfaXRzX25vbnplcm9fb2Zmc2V0X2NoZWNrX2ZhaWx1cmUoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgdWludDMyX3Qgc3RhdHVzLCBqOworCisgICAgLyogQ2FzZSB3aGVyZSBvZmZzZXQgPSBkYXRhX3NpemUgKzEgLCBkYXRhX2xlbiAwLiBBbHNvIGNoZWNrIG5vdGhpbmcgaXMgcmV0dXJuZWQgaW4gcmVhZCBidWZmKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMl0gVHJ5IHRvIGFjY2VzcyBkYXRhIHdpdGggdmFyeWluZyBpbnZhbGlkIG9mZnNldFxuIiwgMCk7CisgICAgbWVtc2V0KHJlYWRfYnVmZiwgMCwgVEVTVF9CVUZGX1NJWkUpOworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA4X2RhdGFbNl0uYXBpLCB1aWQsIFRFU1RfQlVGRl9TSVpFKzEsIDAsIHJlYWRfYnVmZik7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA4X2RhdGFbNl0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKyAgICBmb3IgKGogPSAwOyBqIDwgVEVTVF9CVUZGX1NJWkU7IGorKykKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHJlYWRfYnVmZltqXSwgMHgwMCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisgICAgfQorCisgICAgLyogQ2FzZSB3aGVyZSBvZmZzZXQgPSBkYXRhX3NpemUgICwgZGF0YV9sZW49IDEgIEFsc28gY2hlY2sgbm90aGluZyBpcyByZXR1cm5lZCBpbiByZWFkIGJ1ZmYqLworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA4X2RhdGFbOF0uYXBpLCB1aWQsIFRFU1RfQlVGRl9TSVpFLCAxLCByZWFkX2J1ZmYpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwOF9kYXRhWzhdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisgICAgZm9yIChqID0gMDsgaiA8IFRFU1RfQlVGRl9TSVpFOyBqKyspCisgICAgeworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChyZWFkX2J1ZmZbal0sIDB4MDAsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOworICAgIH0KKworICAgIC8qIENhc2Ugd2hlcmUgb2Zmc2V0ID0gMCAgLCBkYXRhX2xlbiA+IGRhdGFfc2l6ZSAgQWxzbyBjaGVjayBub3RoaW5nIGlzIHJldHVybmVkIGluIHJlYWQgYnVmZiovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDhfZGF0YVsxMF0uYXBpLCB1aWQsIDAsIFRFU1RfQlVGRl9TSVpFKzEsIHJlYWRfYnVmZik7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA4X2RhdGFbMTBdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOworICAgIGZvciAoaiA9IDA7IGogPCBURVNUX0JVRkZfU0laRTsgaisrKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwocmVhZF9idWZmW2pdLCAweDAwLCBURVNUX0NIRUNLUE9JTlRfTlVNKDExKSk7CisgICAgfQorCisgICAgLyogUmVtb3ZlIHRoZSB1aWQgdG8gYmUgdXNlZCBpbiBvdGhlciB0ZXN0IGNhc2UgKi8KKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwOF9kYXRhWzEyXS5hcGksIHVpZCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA4X2RhdGFbMTJdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMikpOworCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworaW50MzJfdCBwc2FfaXRzX25vbnplcm9fb2Zmc2V0X2NoZWNrX3N1Y2Nlc3Moc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgdWludDMyX3Qgc3RhdHVzLCBkYXRhX2xlbiwgb2Zmc2V0ID0gVEVTVF9CVUZGX1NJWkU7CisKKyAgICAvKiBTZXQgZGF0YSBmb3IgdWlkICovCisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDhfZGF0YVsxXS5hcGksIHVpZCwgVEVTVF9CVUZGX1NJWkUsIHdyaXRlX2J1ZmYsIDApOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwOF9kYXRhWzFdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICAvKiBDYXNlIHdoZXJlIG9mZnNldCArIGRhdGFsZW4gPSAgZGF0YV9zaXplICovCisgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRyeSB0byBhY2Nlc3MgZGF0YSB3aXRoIHZhcnlpbmcgdmFsaWQgb2Zmc2V0XG4iLCAwKTsKKyAgICB3aGlsZSAob2Zmc2V0ID4gMCkKKyAgICB7CisgICAgICAgICBkYXRhX2xlbiA9IFRFU1RfQlVGRl9TSVpFIC0gb2Zmc2V0OworICAgICAgICAgbWVtc2V0KHJlYWRfYnVmZiwgMCwgVEVTVF9CVUZGX1NJWkUpOworICAgICAgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDhfZGF0YVsyXS5hcGksIHVpZCwgb2Zmc2V0LCBkYXRhX2xlbiwgcmVhZF9idWZmKTsKKyAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwOF9kYXRhWzJdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisgICAgICAgICBURVNUX0FTU0VSVF9NRU1DTVAocmVhZF9idWZmLCB3cml0ZV9idWZmICsgb2Zmc2V0LCBkYXRhX2xlbiwgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisgICAgICAgICBvZmZzZXQgPj49IDE7CisgICAgIH0KKworICAgIG9mZnNldCA9IFRFU1RfQlVGRl9TSVpFIC0gMjsKKyAgICBkYXRhX2xlbiA9IDE7CisgICAgLyogQ2FzZSB3aGVyZSBvZmZzZXQgKyBkYXRhbGVuIDwgIGRhdGFfc2l6ZSAqLworICAgIHdoaWxlIChvZmZzZXQgPiAwKQorICAgIHsKKyAgICAgICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA4X2RhdGFbNF0uYXBpLCB1aWQsIG9mZnNldCwgZGF0YV9sZW4sIHJlYWRfYnVmZik7CisgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDhfZGF0YVs0XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworICAgICAgICAgVEVTVF9BU1NFUlRfTUVNQ01QKHJlYWRfYnVmZiwgd3JpdGVfYnVmZiArIG9mZnNldCwgZGF0YV9sZW4sIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworICAgICAgICAgb2Zmc2V0ID4+PSAxOworICAgICAgICAgZGF0YV9sZW4gPDw9IDE7CisgICAgIH0KKworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOC90ZXN0X3MwMDguaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA4L3Rlc3RfczAwOC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIzYWY0ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOC90ZXN0X3MwMDguaApAQCAtMCwwICsxLDM3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9TMDA4X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9TMDA4X0NMSUVOVF9URVNUU19IXworCisjaWZkZWYgSVRTX1RFU1QKKyNkZWZpbmUgVkFMX1NUT1JBR0VfQkFTRSBWQUxfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0JBU0UKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sIHMwMDgpCisjZWxpZiBQU19URVNUCisjZGVmaW5lIFZBTF9TVE9SQUdFX0JBU0UgVkFMX1BST1RFQ1RFRF9TVE9SQUdFX0JBU0UKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sIHAwMDgpCisjZW5kaWYKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9zMDA4X2l0c19saXN0W107CisKK2ludDMyX3QgcHNhX2l0c19ub256ZXJvX29mZnNldF9jaGVja19zdWNjZXNzKHNlY3VyaXR5X3QgY2FsbGVyKTsKK2ludDMyX3QgcHNhX2l0c19ub256ZXJvX29mZnNldF9jaGVja19mYWlsdXJlKHNlY3VyaXR5X3QgY2FsbGVyKTsKKworI2VuZGlmIC8qIF9URVNUX1MwMDhfQ0xJRU5UX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOS9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOS9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGZmMTgzMAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA5L3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X3MwMDkuYworQ0NfT1BUSU9OUyA9IC1ESVRTX1RFU1QKK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOS90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOS90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTQ3MWQ4NwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA5L3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUzIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9zMDA5LmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfU1RPUkFHRV9CQVNFLCA5KQorI2RlZmluZSBURVNUX0RFU0MgIkJhZCBwb2ludGVyIGVycm9yIGNoZWNrXG4iCisKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfSElHSF9USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX3NlY3VyZV9zdG9yYWdlX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X3MwMDlfc3N0X2xpc3QsIEZBTFNFKTsKKworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOS90ZXN0X2l0c19kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOS90ZXN0X2l0c19kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGZiNGRjMAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA5L3Rlc3RfaXRzX2RhdGEuaApAQCAtMCwwICsxLDY0IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9TMDA5X0lUU19EQVRBX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX1MwMDlfSVRTX0RBVEFfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UuaCIKKworI2RlZmluZSBTU1RfRlVOQ1RJT04gdmFsLT5pdHNfZnVuY3Rpb24KKyNkZWZpbmUgcHNhX3NzdF91aWRfdCBwc2FfaXRzX3VpZF90CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbMTAwXTsKKyAgICBlbnVtIGl0c19mdW5jdGlvbl9jb2RlICBhcGk7CisgICAgcHNhX2l0c19zdGF0dXNfdCAgICAgICAgc3RhdHVzOworfSB0ZXN0X2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcHNhX2l0c19pbmZvX3QgaW5mbzsKK3N0YXRpYyB0ZXN0X2RhdGEgczAwOV9kYXRhW10gPSB7Cit7CisgIlRoaXMgaXMgZHVtbXkgZm9yIGluZGV4MCIsIDAsIDAKK30sCit7CisgIkNhbGwgc2V0IGFwaSB3aXRoIDAgd3JpdGUgYnVmZmVyIiwgVkFMX0lUU19TRVQsIFBTQV9JVFNfRVJST1JfQkFEX1BPSU5URVIKK30sCit7CisgIkNhbGwgdG8gZ2V0X2luZm8gYXBpIHNob3VsZCBmYWlsIiwgVkFMX0lUU19HRVRfSU5GTywgUFNBX0lUU19FUlJPUl9LRVlfTk9UX0ZPVU5ECit9LAoreworICJDcmVhdGUgc3RvcmFnZSBvZiB6ZXJvIHNpemUiLCBWQUxfSVRTX1NFVCwgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJ0cnkgdG8gc2V0IDAgYnVmZmVyIGZvciBwcmV2aW91cyBjcmVhdGVkIHN0b3JhZ2UiLCBWQUxfSVRTX1NFVCwgUFNBX0lUU19FUlJPUl9CQURfUE9JTlRFUgorfSwKK3sKKyAiQ2FsbCBnZXRfaW5mbyBhcGkgdG8gY2hlY2sgZGF0YSBzaXplIiwgVkFMX0lUU19HRVRfSU5GTywgUFNBX0lUU19TVUNDRVNTCit9LAoreworICJUaGlzIGlzIGR1bW15IGZvciBpbmRleDYiLCAwLCAwCit9LAoreworICJDYWxsIGdldCBhcGkgd2l0aCAwIHJlYWQgYnVmZmVyIiwgVkFMX0lUU19HRVQsIFBTQV9JVFNfRVJST1JfQkFEX1BPSU5URVIKK30sCit7CisgIkNhbGwgZ2V0X2luZm8gYXBpIHdpdGggMCBpbmZvIGJ1ZmZlciIsIFZBTF9JVFNfR0VUX0lORk8sIFBTQV9JVFNfRVJST1JfQkFEX1BPSU5URVIKK30sCit7CisgIlJlbW92ZSB0aGUgc3RvcmFnZSBlbnRpdHkgIiwgVkFMX0lUU19SRU1PVkUsIFBTQV9JVFNfU1VDQ0VTUworfSwKK307CisjZW5kaWYgLyogX1RFU1RfUzAwOV9JVFNfREFUQV9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDkvdGVzdF9wc19kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOS90ZXN0X3BzX2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41M2YyMGU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDkvdGVzdF9wc19kYXRhLmgKQEAgLTAsMCArMSw2NCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIHBzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9TMDA5X1BTX0RBVEFfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfUzAwOV9QU19EQVRBX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfcHJvdGVjdGVkX3N0b3JhZ2UuaCIKKworI2RlZmluZSBTU1RfRlVOQ1RJT04gdmFsLT5wc19mdW5jdGlvbgorI2RlZmluZSBwc2Ffc3N0X3VpZF90IHBzYV9wc191aWRfdAorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICB0ZXN0X2Rlc2NbMTAwXTsKKyAgICBlbnVtIHBzX2Z1bmN0aW9uX2NvZGUgIGFwaTsKKyAgICBwc2FfcHNfc3RhdHVzX3QgICAgICAgIHN0YXR1czsKK30gdGVzdF9kYXRhOworCitzdGF0aWMgc3RydWN0IHBzYV9wc19pbmZvX3QgaW5mbzsKK3N0YXRpYyB0ZXN0X2RhdGEgczAwOV9kYXRhW10gPSB7Cit7CisgIlRoaXMgaXMgZHVtbXkgZm9yIGluZGV4MCIsIDAsIDAKK30sCit7CisgIkNhbGwgc2V0IGFwaSB3aXRoIDAgd3JpdGUgYnVmZmVyIiwgVkFMX1BTX1NFVCwgUFNBX1BTX0VSUk9SX0JBRF9QT0lOVEVSCit9LAoreworICJDYWxsIHRvIGdldF9pbmZvIGFwaSBzaG91bGQgZmFpbCIsIFZBTF9QU19HRVRfSU5GTywgUFNBX1BTX0VSUk9SX0tFWV9OT1RfRk9VTkQKK30sCit7CisgIkNyZWF0ZSBzdG9yYWdlIG9mIHplcm8gc2l6ZSIsIFZBTF9QU19TRVQsIFBTQV9QU19TVUNDRVNTCit9LAoreworICJ0cnkgdG8gc2V0IDAgYnVmZmVyIGZvciBwcmV2aW91cyBjcmVhdGVkIHN0b3JhZ2UiLCBWQUxfUFNfU0VULCBQU0FfUFNfRVJST1JfQkFEX1BPSU5URVIKK30sCit7CisgIkNhbGwgZ2V0X2luZm8gYXBpIHRvIGNoZWNrIGRhdGEgc2l6ZSIsIFZBTF9QU19HRVRfSU5GTywgUFNBX1BTX1NVQ0NFU1MKK30sCit7CisgIlRoaXMgaXMgZHVtbXkgZm9yIGluZGV4NiIsIDAsIDAKK30sCit7CisgIkNhbGwgZ2V0IGFwaSB3aXRoIDAgcmVhZCBidWZmZXIiLCBWQUxfUFNfR0VULCBQU0FfUFNfRVJST1JfQkFEX1BPSU5URVIKK30sCit7CisgIkNhbGwgZ2V0X2luZm8gYXBpIHdpdGggMCBpbmZvIGJ1ZmZlciIsIFZBTF9QU19HRVRfSU5GTywgUFNBX1BTX0VSUk9SX0JBRF9QT0lOVEVSCit9LAoreworICJSZW1vdmUgdGhlIHN0b3JhZ2UgZW50aXR5ICIsIFZBTF9QU19SRU1PVkUsIFBTQV9QU19TVUNDRVNTCit9LAorfTsKKyNlbmRpZiAvKiBfVEVTVF9TMDA5X1BTX0RBVEFfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA5L3Rlc3RfczAwOS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDkvdGVzdF9zMDA5LmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmNiMDg0YwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA5L3Rlc3RfczAwOS5jCkBAIC0wLDAgKzEsODIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X3MwMDkuaCIKKyNpZmRlZiBJVFNfVEVTVAorI2luY2x1ZGUgInRlc3RfaXRzX2RhdGEuaCIKKyNlbGlmIFBTX1RFU1QKKyNpbmNsdWRlICJ0ZXN0X3BzX2RhdGEuaCIKKyNlbmRpZgorCisjZGVmaW5lIFRFU1RfQlVGRl9TSVpFIDIwCisKK2NsaWVudF90ZXN0X3QgdGVzdF9zMDA5X3NzdF9saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBwc2Ffc3N0X3NldF9iYWRfcG9pbnRlcl9jaGVjaywKKyAgICBOVUxMLAorfTsKKworc3RhdGljIHBzYV9zc3RfdWlkX3QgdWlkID0gVUlEX0JBU0VfVkFMVUUgKyAxMDsKK3N0YXRpYyB1aW50OF90IHdyaXRlX2J1ZmZbVEVTVF9CVUZGX1NJWkVdID0gezB4OTksIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MjMsIDB4RjYsIDB4MDcsIDB4MDgsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBELCAweDcwLCAweEExLCAweEZGLCAweEZGLCAweDE0LCAweDczLCAweDQ2LCAweDk3LCAweEU4LCAweEREfTsKKworaW50MzJfdCBwc2Ffc3N0X3NldF9iYWRfcG9pbnRlcl9jaGVjayhzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICB1aW50MzJfdCBzdGF0dXM7CisKKyAgICAvKiBTZXQgZGF0YSBmb3IgdWlkIHdpdGggbGVuZ3RoIDAgYW5kIE5VTEwgcG9pbnRlciAqLworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBDYWxsIFNldCBhcGkgd2l0aCBOVUxMIHdyaXRlIGJ1ZmZlclxuIiwgMCk7CisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDlfZGF0YVsxXS5hcGksIHVpZCwgMCwgTlVMTCwgMCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA5X2RhdGFbMV0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKKworICAgIC8qIENhbGwgdGhlIEdFVF9JTkZPIGZ1bmN0aW9uIGFuZCBtYXRjaCB0aGUgYXR0cmlidXRlcyAqLworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA5X2RhdGFbMl0uYXBpLCB1aWQsICZpbmZvKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDlfZGF0YVsyXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgLyogU2V0IGRhdGEgZm9yIHVpZCB3aXRoIGxlbmd0aCAwIGFuZCB2YWxpZCB3cml0ZSBidWZmZXIgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMl0gQ3JlYXRlIFVJRCB3aXRoIHplcm8gZGF0YSBsZW5ndGhcbiIsIDApOworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA5X2RhdGFbM10uYXBpLCB1aWQsIDAsIHdyaXRlX2J1ZmYsIDApOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwOV9kYXRhWzNdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisKKyAgICAvKiBTZXQgZGF0YSBmb3IgdWlkIHdpdGggbGVuZ3RoIDAgYW5kIE5VTEwgcG9pbnRlciAqLworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAzXSBUcnkgdG8gc2V0IE5VTEwgYnVmZmVyIGZvciB1aWQgd2l0aCBkYXRhIGxlbmd0aFxuIiwgMCk7CisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDlfZGF0YVs0XS5hcGksIHVpZCwgMCwgTlVMTCwgMCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA5X2RhdGFbNF0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgIC8qIENhbGwgdGhlIEdFVF9JTkZPIGZ1bmN0aW9uIGFuZCBtYXRjaCB0aGUgYXR0cmlidXRlcyAqLworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA5X2RhdGFbNV0uYXBpLCB1aWQsICZpbmZvKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDlfZGF0YVs1XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKGluZm8uc2l6ZSwgMCwgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisKKyAgICAvKiBDYWxsIGdldCBhcGkgd2l0aCBOVUxMIHJlYWQgYnVmZmVyIGFuZCB2YWxpZCB1aWQgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgNF0gQ2FsbCBnZXQgYXBpIHdpdGggTlVMTCByZWFkIGJ1ZmZlclxuIiwgMCk7CisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDlfZGF0YVs3XS5hcGksIHVpZCwgMCwgMCwgTlVMTCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA5X2RhdGFbN10uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgIC8qIENhbGwgdGhlIEdFVF9JTkZPIGZ1bmN0aW9uIHdpdGggTlVMTCBpbmZvIHBvaW50ZXIgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgNV0gQ2FsbCBnZXRfaW5mbyBhcGkgd2l0aCBOVUxMIGluZm8gcG9pbnRlclxuIiwgMCk7CisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDlfZGF0YVs4XS5hcGksIHVpZCwgTlVMTCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA5X2RhdGFbOF0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKworICAgIC8qIFJlbW92ZSB0aGUgdWlkICAqLworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA5X2RhdGFbOV0uYXBpLCB1aWQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwOV9kYXRhWzldLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDkvdGVzdF9zMDA5LmggYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOS90ZXN0X3MwMDkuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kM2EwMGJiCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDkvdGVzdF9zMDA5LmgKQEAgLTAsMCArMSwzNiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfUzAwOV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfUzAwOV9DTElFTlRfVEVTVFNfSF8KKworI2lmZGVmIElUU19URVNUCisjZGVmaW5lIFZBTF9TVE9SQUdFX0JBU0UgVkFMX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9CQVNFCisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLCBzMDA5KQorI2VsaWYgUFNfVEVTVAorI2RlZmluZSBWQUxfU1RPUkFHRV9CQVNFIFZBTF9QUk9URUNURURfU1RPUkFHRV9CQVNFCisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLCBwMDA5KQorI2VuZGlmCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfczAwOV9zc3RfbGlzdFtdOworCitpbnQzMl90IHBzYV9zc3Rfc2V0X2JhZF9wb2ludGVyX2NoZWNrKHNlY3VyaXR5X3QgY2FsbGVyKTsKKworI2VuZGlmIC8qIF9URVNUX1MwMDlfQ0xJRU5UX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RzdWl0ZS5kYiBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdHN1aXRlLmRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNjNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RzdWl0ZS5kYgpAQCAtMCwwICsxLDMzIEBACisjLyoqIEBmaWxlCisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworCisjTGlzdCBvZiB0ZXN0cyB0byBiZSBjb21waWxlZCBhbmQgcnVuIGFzIHBhcnQgb2YgaW50ZXJuYWwgdHJ1c3RlZCBzdG9yYWdlIHN1aXRlCisKKyhTVEFSVCkKKwordGVzdF9zMDAxCit0ZXN0X3MwMDIKK3Rlc3RfczAwMwordGVzdF9zMDA0Cit0ZXN0X3MwMDUKK3Rlc3RfczAwNgordGVzdF9zMDA3Cit0ZXN0X3MwMDgKK3Rlc3RfczAwOQorCisoRU5EKQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL3Byb3RlY3RlZF9zdG9yYWdlL1JFQURNRS5tZCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9wcm90ZWN0ZWRfc3RvcmFnZS9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAzMjIxYQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9wcm90ZWN0ZWRfc3RvcmFnZS9SRUFETUUubWQKQEAgLTAsMCArMSwxMiBAQAorCisjIFByb3RlY3RlZCBTdG9yYWdlIFRlc3QgU3VpdGUKKworIyMgQ29tbW9uIHRlc3RzCitTaW5jZSBQcm90ZWN0ZWQgU3RvcmFnZShQUykgYW5kIEludGVybmFsIFRydXN0ZWQgU3RvcmFnZShJVFMpIEFQSXMgc2hhcmVzIHRoZSBzaW1pbGFyIEFQSSBwcm90b3R5cGVzIGFuZCByZXR1cm4gdmFsdWVzLCBzb21lIG9mIHRoZSBJVFMgdGVzdHMgYXJlIHJldXNlZCBmb3IgUFMgYWxzby4gVGhlIHJldXNlZCB0ZXN0cyBhcmUgYXZhaWxhYmxlIHdpdGggYGB0ZXN0X3NbeF1gYCAod2hlcmUsIHg9IHRlc3RfbnVtKSBkaXJlY3RvcnkgbmFtZSBzeW50YXggaW4gcHJvdGVjdGVkX3N0b3JhZ2UvLiBUaGUgc291cmNlIGNvZGUgb2YgdGhlc2UgdGVzdHMgYXJlIGxvY2F0ZWQgaW4gaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLyBkaXIgd2l0aCBzYW1lIHRlc3QgbmFtZS4KKworIyMgTGljZW5zZQorCitBcm0gUFNBIHRlc3Qgc3VpdGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgQXBhY2hlIHYyLjAgTGljZW5zZS4KKy0tLS0tLS0tLS0tLS0tCisKKypDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4qCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvcHJvdGVjdGVkX3N0b3JhZ2UvdGVzdF9zMDAxL3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9wcm90ZWN0ZWRfc3RvcmFnZS90ZXN0X3MwMDEvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjY2ZjYjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvcHJvdGVjdGVkX3N0b3JhZ2UvdGVzdF9zMDAxL3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X3MwMDEuYworQ0NfT1BUSU9OUyA9IC1EUFNfVEVTVAorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9wcm90ZWN0ZWRfc3RvcmFnZS90ZXN0X3MwMDIvc291cmNlLm1rIGIvYXBpLXRlc3RzL2Rldl9hcGlzL3Byb3RlY3RlZF9zdG9yYWdlL3Rlc3RfczAwMi9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYyNThmYwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9wcm90ZWN0ZWRfc3RvcmFnZS90ZXN0X3MwMDIvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfczAwMi5jCitDQ19PUFRJT05TID0gLURQU19URVNUCitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL3Byb3RlY3RlZF9zdG9yYWdlL3Rlc3RfczAwMy9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvcHJvdGVjdGVkX3N0b3JhZ2UvdGVzdF9zMDAzL3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjk2Yzc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL3Byb3RlY3RlZF9zdG9yYWdlL3Rlc3RfczAwMy9zb3VyY2UubWsKQEAgLTAsMCArMSwyMCBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9zMDAzLmMKK0NDX09QVElPTlMgPSAtRFBTX1RFU1QKK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvcHJvdGVjdGVkX3N0b3JhZ2UvdGVzdF9zMDA0L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9wcm90ZWN0ZWRfc3RvcmFnZS90ZXN0X3MwMDQvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYzBmNTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvcHJvdGVjdGVkX3N0b3JhZ2UvdGVzdF9zMDA0L3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X3MwMDQuYworQ0NfT1BUSU9OUyA9IC1EUFNfVEVTVAorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9wcm90ZWN0ZWRfc3RvcmFnZS90ZXN0X3MwMDUvc291cmNlLm1rIGIvYXBpLXRlc3RzL2Rldl9hcGlzL3Byb3RlY3RlZF9zdG9yYWdlL3Rlc3RfczAwNS9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyOTM4YgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9wcm90ZWN0ZWRfc3RvcmFnZS90ZXN0X3MwMDUvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfczAwNS5jCitDQ19PUFRJT05TID0gLURQU19URVNUCitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL3Byb3RlY3RlZF9zdG9yYWdlL3Rlc3RfczAwNi9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvcHJvdGVjdGVkX3N0b3JhZ2UvdGVzdF9zMDA2L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODRkNDI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL3Byb3RlY3RlZF9zdG9yYWdlL3Rlc3RfczAwNi9zb3VyY2UubWsKQEAgLTAsMCArMSwyMCBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9zMDA2LmMKK0NDX09QVElPTlMgPSAtRFBTX1RFU1QKK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvcHJvdGVjdGVkX3N0b3JhZ2UvdGVzdF9zMDA3L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9wcm90ZWN0ZWRfc3RvcmFnZS90ZXN0X3MwMDcvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZjY3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvcHJvdGVjdGVkX3N0b3JhZ2UvdGVzdF9zMDA3L3NvdXJjZS5tawpAQCAtMCwwICsxLDIwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X3MwMDcuYworQ0NfT1BUSU9OUyA9IC1EUFNfVEVTVAorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9wcm90ZWN0ZWRfc3RvcmFnZS90ZXN0X3MwMDgvc291cmNlLm1rIGIvYXBpLXRlc3RzL2Rldl9hcGlzL3Byb3RlY3RlZF9zdG9yYWdlL3Rlc3RfczAwOC9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg0MzQzNwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9wcm90ZWN0ZWRfc3RvcmFnZS90ZXN0X3MwMDgvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfczAwOC5jCitDQ19PUFRJT05TID0gLURQU19URVNUCitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL3Byb3RlY3RlZF9zdG9yYWdlL3Rlc3RfczAwOS9zb3VyY2UubWsgYi9hcGktdGVzdHMvZGV2X2FwaXMvcHJvdGVjdGVkX3N0b3JhZ2UvdGVzdF9zMDA5L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGVhZTk1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL3Byb3RlY3RlZF9zdG9yYWdlL3Rlc3RfczAwOS9zb3VyY2UubWsKQEAgLTAsMCArMSwyMCBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9zMDA5LmMKK0NDX09QVElPTlMgPSAtRFBTX1RFU1QKK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvcHJvdGVjdGVkX3N0b3JhZ2UvdGVzdHN1aXRlLmRiIGIvYXBpLXRlc3RzL2Rldl9hcGlzL3Byb3RlY3RlZF9zdG9yYWdlL3Rlc3RzdWl0ZS5kYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODZmYjA0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL3Byb3RlY3RlZF9zdG9yYWdlL3Rlc3RzdWl0ZS5kYgpAQCAtMCwwICsxLDMzIEBACisjLyoqIEBmaWxlCisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworCisjTGlzdCBvZiB0ZXN0cyB0byBiZSBjb21waWxlZCBhbmQgcnVuIGFzIHBhcnQgb2YgcHJvdGVjdGVkIHN0b3JhZ2Ugc3VpdGUKKworKFNUQVJUKQorCit0ZXN0X3MwMDEKK3Rlc3RfczAwMgordGVzdF9zMDAzCit0ZXN0X3MwMDQKK3Rlc3RfczAwNQordGVzdF9zMDA2Cit0ZXN0X3MwMDcKK3Rlc3RfczAwOAordGVzdF9zMDA5CisKKyhFTkQpCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvc2VjdXJlX3N0b3JhZ2UvZHVtbXkudHh0IGIvYXBpLXRlc3RzL2Rldl9hcGlzL3NlY3VyZV9zdG9yYWdlL2R1bW15LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMzYWEyYS4uMDAwMDAwMAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvc2VjdXJlX3N0b3JhZ2UvZHVtbXkudHh0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotVXNpbmcgZHVtbXkgZmlsZSB0byBhZGQgZW1wdHkgZGlyZWN0b3J5IHRvIHJlcG8uIEluIGZ1dHVyZSwgdGhpcyBmaWxlIHdpbGwgYmUgZGVsZXRlZCBhbmQgZGlyZWN0b3J5IHdpbGwgY29udGFpbiB0ZXN0cyBmb3Igc2VjdXJlIHN0b3JhZ2Ugc2VydmljZSBBUElzLgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2RvY3MvQXJtX1BTQV9BUElzX0FyY2hfVGVzdF9WYWxpZGF0aW9uX01ldGhvZG9sb2d5LnBkZiBiL2FwaS10ZXN0cy9kb2NzL0FybV9QU0FfQVBJc19BcmNoX1Rlc3RfVmFsaWRhdGlvbl9NZXRob2RvbG9neS5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVjNWI3OQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kb2NzL0FybV9QU0FfQVBJc19BcmNoX1Rlc3RfVmFsaWRhdGlvbl9NZXRob2RvbG9neS5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2RvY3MvQXJtX1BTQV9GRl9BcmNoX1Rlc3RfVmFsaWRhdGlvbl9NZXRob2RvbG9neS5wZGYgYi9hcGktdGVzdHMvZG9jcy9Bcm1fUFNBX0ZGX0FyY2hfVGVzdF9WYWxpZGF0aW9uX01ldGhvZG9sb2d5LnBkZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MyOWFjNy4uMDAwMDAwMAotLS0gYS9hcGktdGVzdHMvZG9jcy9Bcm1fUFNBX0ZGX0FyY2hfVGVzdF9WYWxpZGF0aW9uX01ldGhvZG9sb2d5LnBkZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kb2NzL3BvcnRpbmdfZ3VpZGUubWQgYi9hcGktdGVzdHMvZG9jcy9wb3J0aW5nX2d1aWRlLm1kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTYxZDczLi4wMDAwMDAwCi0tLSBhL2FwaS10ZXN0cy9kb2NzL3BvcnRpbmdfZ3VpZGUubWQKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0KLSMgUG9ydGluZyBHdWlkZSAtIFBTQSBBUElzIEFyY2hpdGVjdHVyZSBUZXN0IFN1aXRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jIyBJbnRyb2R1Y3Rpb24KLVRoZSBQU0EgQVBJcyBBcmNoaXRlY3R1cmUgdGVzdCBzdWl0ZSBjb250YWlucyBhIHBsYXRmb3JtIGFic3RyYWN0aW9uIGxheWVyIChQQUwpIHdoaWNoIGFic3RyYWN0cyBwbGF0Zm9ybSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB0ZXN0cy4KLSAtIFRoZSBQQUwgbGF5ZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGltcGxlbWVudGVkL3BvcnRlZCB0byB0aGUgdGFyZ2V0IHBsYXRmb3JtLgotIC0gVGhlIHRhcmdldCBjb25maWcgZmlsZSBtdXN0IGJlIGNyZWF0ZWQvdXBkYXRlZCB0byBtYXRjaCB0aGUgZGV0YWlscyBvZiB0aGUgdGFyZ2V0IHBsYXRmb3JtLgotCi1UaGlzIGRvY3VtZW50IHByb3ZpZGVzIGRldGFpbHMgb24gdGhlIHBvcnRpbmcgc3RlcHMgYW5kIHRoZSBQQUwgQVBJcy4KLQotIyMgUG9ydGluZyBzdGVwcwotCi0jIyMgVGFyZ2V0IGNvbmZpZ3VyYXRpb24KLQotICBZb3UgbXVzdCBwb3B1bGF0ZSB5b3VyIHN5c3RlbSBjb25maWd1cmF0aW9uIGFuZCBwcm92aWRlIGl0IGFzIGFuIGlucHV0IHRvIHRlc3Qgc3VpdGUuCi0KLVRoaXMgaXMgY2FwdHVyZWQgaW4gYSBzaW5nbGUgc3RhdGljIGlucHV0IGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IGlzIG5hbWVkIGFzIHRhcmdldC5jZmcuIFRoaXMgZmlsZSBpcyBhdmFpbGFibGUgYXQgYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvPHBsYXRmb3JtX25hbWU+Ly4gPGJyIC8+Ci0KLUFuIGV4YW1wbGUgb2YgdGhlIGlucHV0IGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBhcyBzaG93bi4KLQotICAgIC8vIFVBUlQgZGV2aWNlIGluZm8KLSAgICB1YXJ0Lm51bT0xOwotICAgIHVhcnQuMC5iYXNlID0gMHg0MDAwNDAwMDsKLSAgICB1YXJ0LjAuc2l6ZSA9IDB4RkZGOwotICAgIHVhcnQuMC5pbnRyX2lkID0gMHhGRjsKLSAgICB1YXJ0LjAucGVybWlzc2lvbiA9IFRZUEVfUkVBRF9XUklURTsKLQotICAgIC8vIFdhdGNoZG9nIGRldmljZSBpbmZvCi0gICAgd2F0Y2hkb2cubnVtID0gMTsKLSAgICB3YXRjaGRvZy4wLmJhc2UgPSAweDQwMDA4MDAwOwotICAgIHdhdGNoZG9nLjAuc2l6ZSA9IDB4RkZGOwotICAgIHdhdGNoZG9nLjAuaW50cl9pZCA9IDB4RkY7Ci0gICAgd2F0Y2hkb2cuMC5wZXJtaXNzaW9uID0gVFlQRV9SRUFEX1dSSVRFOwotCi0gIE1vcmUgZGV0YWlscyBvbiB0aGUgc3RydWN0dXJlIG9mIHRoZSBpbnB1dCBjYW4gYmUgb2J0YWluZWQgZnJvbSB2YWwvY29tbW9uL3ZhbF90YXJnZXQuaC4KLQotKipQcm9jZWR1cmUqKgotLS0tLS0tLS0tLS0tLS0tLQotCi0gIC0gQ3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBpbiBwbGF0Zm9ybS90YXJnZXRzLzxwbGF0Zm9ybV9uYW1lPi4gRm9yIHJlZmVyZW5jZSwgc2VlIHRoZSBleGlzdGluZyBwbGF0Zm9ybSBmdnBfbXBzMl9jbTRfbWJlZG9zIGRpcmVjdG9yeS4KLSAgLSBjcCAtcmYgcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zLyBwbGF0Zm9ybS90YXJnZXRzLzxwbGF0Zm9ybV9uYW1lPi8KLSAgLSBVcGRhdGUgcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vdGFyZ2V0LmNmZyB3aXRoIHlvdXIgcGxhdGZvcm0gZGV0YWlsLiBSZWZlciB2YWwvY29tbW9uL3ZhbF90YXJnZXQuaCBmb3Igc3RydWN0dXJlIGRldGFpbHMuCi0gIC0gVXBkYXRlIG1taW9fcmVnaW9ucyBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4gcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uIG1hbmlmZXN0IGZpbGUgd2l0aCB5b3VyIHBsYXRmb3JtIGluZm9ybWF0aW9uLiBtbWlvX3JlZ2lvbnMgZGV0YWlsIG11c3QgbWF0Y2ggd2l0aCBkZXZpY2UgZGV0YWlsIHByb3ZpZGVkIGluIHRoZSB0YXJnZXQuY2ZnIGZpbGUuCi0gIC0gVGhlIHRlc3Qgc3VpdGUgc3BlY2lmaWVkICJzaWQiIGFuZCBwYXJ0aXRpb24gImlkIiBhcmUgcHJvdmlkZWQgaW4gbWFuaWZlc3QgZmlsZXMgYXZhaWxhYmxlIGluIHBsYXRmb3JtL21hbmlmZXN0cy8gZGlyZWN0b3J5LiBZb3UgY2FuIHVwZGF0ZSB0aGVtIGlmIHRoZXkgYXJlIGNsYXNoaW5nIHdpdGggeW91ciBzeXN0ZW0gZGVmaW5lZCBzaWQgYW5kIHBhcnRpdGlvbi1pZCB2YWx1ZXMuIFlvdSBtYXkgbmVlZCB0byB1cGRhdGUgcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vbnNwZS9wYWxfc2lkLmggZmlsZSBmb3IgYW55IGNoYW5nZSBpbiB0ZXN0IHN1aXRlIHByb3ZpZGVkIFNJRCB2YWx1ZXMuCi0gIC0gVXBkYXRlIHBsYXRmb3JtL25zcGUvTWFrZWZpbGUgYXBwcm9wcmlhdGVseSB0byBzZWxlY3QgY29ycmVjdCBpbnN0YW5jZXMgb2YgUEFMIGZpbGVzIGZvciBjb21waWxhdGlvbi4gVGhpcyBtYWtlIGZpbGUgaXMgaW52b2tlZCBhcyBwYXJ0IG9mIHRlc3Qgc3VpdGUgYnVpbGQgdG9vbCguL3NldHVwLnNoKSBzdGVwIGFuZCBpdCBjcmVhdGVzIDxidWlsZF9kaXI+L0JVSUxEL3BsYXRmb3JtL3BhbF9uc3BlLmEgYXJjaGl2ZSBhbmQgcmVzcGVjdGl2ZSBvYmplY3QgZm9yIFNQRSBmaWxlcyBhdCA8YnVpbGRfZGlyPi9CVUlMRC9wbGF0Zm9ybS9zcGUvXCpcX2RyaXZlcl9zcC5vLiBMYXRlciwgdGhlc2UgU1BFIG9iamVjdHMgYXJlIHVzZWQgYnkgc3BidWlsZC5tayB0byBjcmVhdGUgYXBwcm9wcmlhdGUgU1BFIHBhcnRpdGlvbiBhcmNoaXZlIGZpbGUuCi0gIC0gUmVmZXIgIlBBTCBBUEkgbGlzdCIgc2VjdGlvbiB0byB2aWV3IGxpc3Qgb2YgUEFMIEFQSSB0aGF0IG11c3QgYmUgcG9ydGVkIGZvciB5b3VyIHRhcmdldCBwbGF0Zm9ybS4gVGhlc2UgQVBJcyBkZWZpbml0aW9ucyBhcmUgYXZhaWxhYmxlIGluIG5zcGUvcGFsX1wqXF9pbnRmLmMgYW5kIHNwZS9wYWxfXCpfaW50Zi5jIGZpbGVzLiBUaGVzZSBBUElzIGFyZSB3cml0dGVuIGZvciBmdnBfbXBzMl9jbTRfbWJlZG9zIHBsYXRmb3JtLiBZb3UgY2FuIHJldXNlIHRoZSBjb2RlIGlmIGl0IHdvcmtzIGZvciB5b3VyIHBsYXRmb3JtLiBPdGhlcndpc2UgeW91IG11c3QgcG9ydCB0aGVtIGZvciB5b3VyIHBsYXRmb3JtIHNwZWNpZmljIHBlcmlwaGVyYWxzLgotCi0qKk5vdGUqKjoKLSAgVGVzdCBzdWl0ZSBuZWVkcyBhY2Nlc3MgdG8gdGhlIGZvbGxvd2luZyBwZXJpcGhlcmFscy4gRm9yIElQQyB0ZXN0cywgdGhlIHNlcnZpY2VzIG9mIHRoZXNlIHBlcmlwaGVyYWxzIGFyZSBpbXBsZW1lbnRlZCBhcyBSb1Qgc2VydmljZXMgaW4gdGhlIGRyaXZlciBwYXJ0aXRpb24uIElmIHlvdSBhcmUgY29tcGlsaW5nIGNyeXB0byB0ZXN0cywgeW91IG11c3Qgc2V0IFBTQV9JUENfSU1QTEVNRU5URUQgdG8gMCBpbiB0aGUgcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vTWFrZWZpbGUuIFRoaXMgc2VsZWN0cyB0aGUgbm9uLXNlY3VyZSBQQUwgaW5zdGFuY2VzIGZvciB0aGUgZHJpdmVyIHNlcnZpY2VzIGFuZCBlbGltaW5hdGVzIElQQyBkZXBlbmRhbmN5IGZvciBjcnlwdG8gdGVzdHMuCi0gIC0gT25lIFVBUlQgdG8gcHJpbnQgbnNwZSBhbmQgc3BlIG1lc3NhZ2VzCi0gIC0gT25lIFdhdGNoZG9nIHRpbWVyIHRvIGhlbHAgcmVjb3ZlcnkgZnJvbSBhbnkgZmF0YWwgZXJyb3IgY29uZGl0aW9ucwotICAtIE5vbi12b2xhdGlsZSBtZW1vcnkgc3VwcG9ydCB0byBwcmVzZXJ2ZSB0ZXN0IHN0YXR1cyBvdmVyIHdhdGNoZG9nIHRpbWVyIHJlc2V0Ci0KLSMjIyBDcmVhdGUgYSBuZXcgdGFyZ2V0Ci0KLSAgU2luY2UgVGVzdCBzdWl0ZSBpcyBhZ25vc3RpYyB0byB2YXJpb3VzIHN5c3RlbSB0YXJnZXRzLCBiZWZvcmUgYnVpbGRpbmcgdGhlIHRlc3RzLCB5b3UgbXVzdCBwb3J0IHRoZSBmaWxlcyBtZW50aW9uZWQgaW4gdGhlIGZvbGxvd2luZyBzdGVwcy4KLSMjIFBBTCBBUEkgbGlzdAotICBUaGVzZSBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgdGFyZ2V0IHBsYXRmb3JtLiA8YnIgLz4KLQotLSBGb2xsb3dpbmcgYXJlIHRoZSBsaXN0IG9mIFBBTCBBUElzIHVzZWQgaW4gTlNQRTogPGJyIC8+Ci0KLXwgTm8gfCBQcm90b3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfC0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci18IDAxIHwgaW50IHBhbF9zcGlfcmVhZChhZGRyX3QgYWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgcGVyaXBoZXJhbHMgdXNpbmcgU1BJIGNvbW1hbmRzICAgICAgICAgICAgICAgICB8IGFkZHIgOiBhZGRyZXNzIG9mIHRoZSBwZXJpcGhlcmFsPGJyLz5kYXRhIDogcmVhZCBidWZmZXI8YnIvPmxlbiAgOiBsZW5ndGggb2YgdGhlIHJlYWQgYnVmZmVyIGluIGJ5dGVzPGJyLz4gICAgICAgICAgICAgICAgICAgIHwKLXwgMDIgfCB1aW50MzJfdCBwYWxfaXBjX2ZyYW1ld29ya192ZXJzaW9uKHZvaWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSZXRyaWV2ZSB0aGUgdmVyc2lvbiBvZiB0aGUgUFNBIEZyYW1ld29yayBBUEkgdGhhdCBpcyBpbXBsZW1lbnRlZC4gICAgIHwgdm9pZDxici8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAwMyB8IHVpbnQzMl90IHBhbF9pcGNfdmVyc2lvbih1aW50MzJfdCBzaWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJldHJpZXZlIHRoZSBtaW5vciB2ZXJzaW9uIG9mIGEgUm9vdCBvZiBUcnVzdCBTZXJ2aWNlIGJ5IGl0cyBTSUQuICAgICAgfCBzaWQgVGhlIFJvb3Qgb2YgVHJ1c3QgU2VydmljZSBJRDxici8+ICAgICAgICAgICAgICAgICAgICB8Ci18IDA0IHwgcHNhX2hhbmRsZV90IHBhbF9pcGNfY29ubmVjdCh1aW50MzJfdCBzaWQsIHVpbnQzMl90IG1pbm9yX3ZlcnNpb24pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29ubmVjdCB0byBnaXZlbiBzaWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNpZCA6IFJvVCBzZXJ2aWNlIGlkPGJyLz5taW5vcl92ZXJzaW9uIDogbWlub3JfdmVyc2lvbiBvZiBSb1Qgc2VydmljZTxici8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IDA1IHwgcHNhX3N0YXR1c190IHBhbF9pcGNfY2FsbChwc2FfaGFuZGxlX3QgaGFuZGxlLCBjb25zdCBwc2FfaW52ZWMgKmluX3ZlYywgc2l6ZV90IGluX2xlbiwgIHBzYV9vdXR2ZWMgKm91dF92ZWMsIHNpemVfdCBvdXRfbGVuKTt8IENhbGwgYSBjb25uZWN0ZWQgUm9vdCBvZiBUcnVzdCBTZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoYW5kbGU6ICAgSGFuZGxlIGZvciB0aGUgY29ubmVjdGlvbi48YnIvPmluX3ZlYzogICBBcnJheSBvZiBwc2FfaW52ZWMgc3RydWN0dXJlcy48YnIvPmluX2xlbjogICBOdW1iZXIgb2YgcHNhX2ludmVjIHN0cnVjdHVyZXMgaW4gaW5fdmVjLjxici8+b3V0X3ZlYzogIEFycmF5IG9mIHBzYV9vdXR2ZWMgc3RydWN0dXJlcyBmb3Igb3B0aW9uYWwgUm9vdCBvZiBUcnVzdCBTZXJ2aWNlIHJlc3BvbnNlLjxici8+b3V0X2xlbjogIE51bWJlciBvZiBwc2Ffb3V0dmVjIHN0cnVjdHVyZXMgaW4gb3V0X3ZlYy48YnIvPiAgICAgICAgICAgICAgICB8Ci18IDA2IHwgdm9pZCBwYWxfaXBjX2Nsb3NlKHBzYV9oYW5kbGVfdCBoYW5kbGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2xvc2UgYSBjb25uZWN0aW9uIHRvIGEgUm9vdCBvZiBUcnVzdCBTZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICB8IGhhbmRsZSBIYW5kbGUgZm9yIHRoZSBjb25uZWN0aW9uLjxici8+ICAgICAgICAgICAgICAgICAgIHwKLXwgMDcgfCBpbnQgcGFsX3VhcnRfaW5pdF9ucyh1aW50MzJfdCB1YXJ0X2Jhc2VfYWRkcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBVQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdWFydCBiYXNlIGFkZHI8YnIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAwOCB8IGludCBwYWxfcHJpbnRfbnMoY2hhciAqc3RyLCB1aW50MzJfdCBkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBpbnB1dCBzdHJpbmcgYW5kIHdyaXRlcyBieXRlcyBpbnRvIFVBUlQgVFggRklGT3wgc3RyICAgICAgOiBJbnB1dCBTdHJpbmc8YnIvPmRhdGEgICAgIDogVmFsdWUgZm9yIGZvcm1hdCBzcGVjaWZpZXI8YnIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAwOSB8IGludCBwYWxfd2RfdGltZXJfaW5pdF9ucyhhZGRyX3QgYmFzZV9hZGRyLCB1aW50MzJfdCB0aW1lX3VzLCB1aW50MzJfdCB0aW1lcl90aWNrX3VzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEluaXRpYWxpemVzIGFuIGhhcmR3YXJlIHdhdGNoZG9nIHRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYXNlX2FkZHIgICAgICAgOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHdhdGNoZG9nIG1vZHVsZTxici8+dGltZV91cyAgICAgICAgIDogVGltZSBpbiBtaWNybyBzZWNvbmRzPGJyLz50aW1lcl90aWNrX3VzICAgOiBOdW1iZXIgb2YgdGlja3MgcGVyIG1pY3JvIHNlY29uZDxici8+fAotfCAxMCB8IGludCBwYWxfd2RfdGltZXJfZW5hYmxlX25zKGFkZHJfdCBiYXNlX2FkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVuYWJsZXMgYSBoYXJkd2FyZSB3YXRjaGRvZyB0aW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYXNlX2FkZHIgICAgICAgOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHdhdGNoZG9nIG1vZHVsZTxici8+fAotfCAxMSB8IGludCBwYWxfd2RfdGltZXJfZGlzYWJsZV9ucyhhZGRyX3QgYmFzZV9hZGRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERpc2FibGVzIGEgaGFyZHdhcmUgd2F0Y2hkb2cgdGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYXNlX2FkZHIgIDogQmFzZSBhZGRyZXNzIG9mIHRoZSB3YXRjaGRvZyBtb2R1bGU8YnIvPiAgICB8Ci18IDEyIHwgaW50IHBhbF9udm1lbV9yZWFkX25zKGFkZHJfdCBiYXNlLCB1aW50MzJfdCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgaW50IHNpemUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUmVhZHMgZnJvbSBnaXZlbiBub24tdm9sYXRpbGUgYWRkcmVzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhc2UgICAgOiBCYXNlIGFkZHJlc3Mgb2YgbnZtZW08YnIvPm9mZnNldCAgOiBPZmZzZXQ8YnIvPmJ1ZmZlciAgOiBQb2ludGVyIHRvIHNvdXJjZSBhZGRyZXNzPGJyLz5zaXplICAgIDogTnVtYmVyIG9mIGJ5dGVzPGJyLz4gICAgICAgICAgICAgICAgICAgICB8Ci18IDEzIHwgaW50IHBhbF9udm1lbV93cml0ZV9ucyhhZGRyX3QgYmFzZSwgdWludDMyX3Qgb2Zmc2V0LCB2b2lkICpidWZmZXIsIGludCBzaXplKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgV3JpdGVzIGludG8gZ2l2ZW4gbm9uLXZvbGF0aWxlIGFkZHJlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhc2UgICAgOiBCYXNlIGFkZHJlc3Mgb2YgbnZtZW08YnIvPm9mZnNldCAgOiBPZmZzZXQ8YnIvPmJ1ZmZlciAgOiBQb2ludGVyIHRvIHNvdXJjZSBhZGRyZXNzPGJyLz5zaXplICAgIDogTnVtYmVyIG9mIGJ5dGVzPGJyLz4gICAgICAgICAgICAgICAgICAgICB8Ci18IDE0IHwgdWludDMyX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgY3J5cHRvIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUgICAgOiBmdW5jdGlvbiBjb2RlPGJyLz52YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdDxici8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0KLS0gRm9sbG93aW5nIGFyZSB0aGUgbGlzdCBvZiBQQUwgQVBJcyB1c2VkIGluIFNQRTogPGJyIC8+Ci0KLXwgTm8gfCBQcm90b3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18LS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAotfCAwMSB8IHZvaWQgcGFsX3VhcnRfaW5pdChhZGRyX3QgdWFydF9iYXNlX2FkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHVhcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVhcnRfYmFzZV9hZGRyIDogQmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUPGJyLz4gICAgICAgICAgIHwKLXwgMDIgfCB2b2lkIHBhbF9wcmludChjaGFyICpzdHIsIHVpbnQzMl90IGRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUgaW5wdXQgc3RyaW5nIGFuZCB3cml0ZXMgYnl0ZSBieSBieXRlIHRvIHByaW50ICAgICAgICAgICAgfCBzdHIgICAgICAgICAgICA6IElucHV0IFN0cmluZzxici8+ZGF0YSAgICAgICAgICAgOiBWYWx1ZSBmb3IgRm9ybWF0IHNwZWNpZmllcjxici8+ICAgICAgICAgICAgICAgICAgICAgICB8Ci18IDAzIHwgaW50ICBwYWxfd2RfdGltZXJfaW5pdChhZGRyX3QgYmFzZV9hZGRyLCB1aW50MzJfdCB0aW1lX3VzLCB1aW50MzJfdCB0aW1lcl90aWNrX3VzKTt8IEluaXRpYWxpemVzIGFuIGhhcmR3YXJlIHdhdGNoZG9nIHRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhc2VfYWRkciAgICAgICA6IEJhc2UgYWRkcmVzcyBvZiB0aGUgd2F0Y2hkb2cgbW9kdWxlPGJyLz50aW1lX3VzICAgICAgICAgOiBUaW1lIGluIG1pY3JvIHNlY29uZHM8YnIvPnRpbWVyX3RpY2tfdXMgICA6IE51bWJlciBvZiB0aWNrcyBwZXIgbWljcm8gc2Vjb25kPGJyLz58Ci18IDA0IHwgaW50ICBwYWxfd2RfdGltZXJfZW5hYmxlKGFkZHJfdCBiYXNlX2FkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW5hYmxlcyBhIGhhcmR3YXJlIHdhdGNoZG9nIHRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmFzZV9hZGRyICAgICA6IEJhc2UgYWRkcmVzcyBvZiB0aGUgd2F0Y2hkb2cgbW9kdWxlPGJyLz4gfAotfCAwNSB8IGludCAgcGFsX3dkX3RpbWVyX2Rpc2FibGUoYWRkcl90IGJhc2VfYWRkcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERpc2FibGVzIGEgaGFyZHdhcmUgd2F0Y2hkb2cgdGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhc2VfYWRkciAgICAgOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHdhdGNoZG9nIG1vZHVsZTxici8+IHwKLXwgMDYgfCBpbnQgIHBhbF93ZF90aW1lcl9pc19lbmFibGVkKGFkZHJfdCBiYXNlX2FkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDaGVja3Mgd2hldGhlciBoYXJkd2FyZSB3YXRjaGRvZyB0aW1lciBpcyBlbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYXNlX2FkZHIgICAgIDogQmFzZSBhZGRyZXNzIG9mIHRoZSB3YXRjaGRvZyBtb2R1bGU8YnIvPiB8Ci18IDA3IHwgaW50ICBwYWxfbnZtZW1fd3JpdGUoYWRkcl90IGJhc2UsIHVpbnQzMl90IG9mZnNldCwgdm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSk7ICAgICAgIHwgV3JpdGVzICdzaXplJyBieXRlcyBmcm9tIGJ1ZmZlciBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYXQgYSBnaXZlbiAnYmFzZSArIG9mZnNldCd8IGJhc2UgICAgICA6IEJhc2UgYWRkcmVzcyBvZiBOViBNRU08YnIvPm9mZnNldCAgICA6IE9mZnNldDxici8+YnVmZmVyICAgIDogUG9pbnRlciB0byBzb3VyY2UgYWRkcmVzczxici8+c2l6ZSAgICAgIDogTnVtYmVyIG9mIGJ5dGVzPGJyLz4gICAgICAgICAgICAgICAgICB8Ci18IDA4IHwgaW50ICBwYWxfbnZtZW1fcmVhZChhZGRyX3QgYmFzZSwgdWludDMyX3Qgb2Zmc2V0LCB2b2lkICpidWZmZXIsIGludCBzaXplKTsgICAgICAgfCBSZWFkcyAnc2l6ZScgYnl0ZXMgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5IGF0IGEgZ2l2ZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYXNlICAgICAgOiBCYXNlIGFkZHJlc3Mgb2YgTlYgTUVNPGJyLz5vZmZzZXQgICAgOiBPZmZzZXQ8YnIvPmJ1ZmZlciAgICA6IFBvaW50ZXIgdG8gc291cmNlIGFkZHJlc3M8YnIvPnNpemUgICAgICA6IE51bWJlciBvZiBieXRlczxici8+ICAgICAgICAgICAgICAgICAgfAotCi0jIyBMaWNlbnNlCi1Bcm0gUFNBIHRlc3Qgc3VpdGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgQXBhY2hlIHYyLjAgTGljZW5zZS4KLQotLS0tLS0tLS0tLS0tLS0KLQotKkNvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4qCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZG9jcy9wb3J0aW5nX2d1aWRlX2Rldl9hcGlzLm1kIGIvYXBpLXRlc3RzL2RvY3MvcG9ydGluZ19ndWlkZV9kZXZfYXBpcy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWUxNDkwCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2RvY3MvcG9ydGluZ19ndWlkZV9kZXZfYXBpcy5tZApAQCAtMCwwICsxLDc0IEBACisKKyMgUG9ydGluZyBHdWlkZSAtIERldmVsb3BlciBBUElzIEFyY2hpdGVjdHVyZSBUZXN0IFN1aXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIyBJbnRyb2R1Y3Rpb24KK1RoZSBBcmNoaXRlY3R1cmUgdGVzdCBzdWl0ZSBjb250YWlucyBhIHBsYXRmb3JtIGFic3RyYWN0aW9uIGxheWVyIChQQUwpIHdoaWNoIGFic3RyYWN0cyBwbGF0Zm9ybSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB0ZXN0cy4KKyAtIFRoZSBQQUwgbGF5ZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGltcGxlbWVudGVkL3BvcnRlZCB0byB0aGUgdGFyZ2V0IHBsYXRmb3JtLgorIC0gVGhlIHRhcmdldCBjb25maWcgZmlsZSBtdXN0IGJlIGNyZWF0ZWQvdXBkYXRlZCB0byBtYXRjaCB0aGUgZGV0YWlscyBvZiB0aGUgdGFyZ2V0IHBsYXRmb3JtLgorCitUaGlzIGRvY3VtZW50IHByb3ZpZGVzIGRldGFpbHMgb24gdGhlIHBvcnRpbmcgc3RlcHMgYW5kIHRoZSBQQUwgQVBJcy4KKworIyMgUG9ydGluZyBzdGVwcworCisjIyMgVGFyZ2V0IGNvbmZpZ3VyYXRpb24KKworWW91IG11c3QgcG9wdWxhdGUgeW91ciBzeXN0ZW0gY29uZmlndXJhdGlvbiBhbmQgcHJvdmlkZSBpdCBhcyBhbiBpbnB1dCB0byB0ZXN0IHN1aXRlLiBUaGlzIGlzIGNhcHR1cmVkIGluIGEgc2luZ2xlIHN0YXRpYyBpbnB1dCBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBpcyBuYW1lZCBhcyB0YXJnZXQuY2ZnLiBUaGlzIGZpbGUgaXMgYXZhaWxhYmxlIGF0IGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzLzxwbGF0Zm9ybV9uYW1lPi8uIDxiciAvPgorCitBbiBleGFtcGxlIG9mIHRoZSBpbnB1dCBjb25maWd1cmF0aW9uIGZpbGUgaXMgYXMgc2hvd24uCisKKyAgICAvLyBVQVJUIGRldmljZSBpbmZvCisgICAgdWFydC5udW09MTsKKyAgICB1YXJ0LjAuYmFzZSA9IDB4NDAwMDQwMDA7CisgICAgdWFydC4wLnNpemUgPSAweEZGRjsKKyAgICB1YXJ0LjAuaW50cl9pZCA9IDB4RkY7CisgICAgdWFydC4wLnBlcm1pc3Npb24gPSBUWVBFX1JFQURfV1JJVEU7CisKKyAgICAvLyBXYXRjaGRvZyBkZXZpY2UgaW5mbworICAgIHdhdGNoZG9nLm51bSA9IDE7CisgICAgd2F0Y2hkb2cuMC5iYXNlID0gMHg0MDAwODAwMDsKKyAgICB3YXRjaGRvZy4wLnNpemUgPSAweEZGRjsKKyAgICB3YXRjaGRvZy4wLmludHJfaWQgPSAweEZGOworICAgIHdhdGNoZG9nLjAucGVybWlzc2lvbiA9IFRZUEVfUkVBRF9XUklURTsKKworICBNb3JlIGRldGFpbHMgb24gdGhlIHN0cnVjdHVyZSBvZiB0aGUgaW5wdXQgY2FuIGJlIG9idGFpbmVkIGZyb20gdmFsL2NvbW1vbi92YWxfdGFyZ2V0LmguCisKKyMjIyBBZGRpbmcgYSBuZXcgdGFyZ2V0CisKKyAgLSBDcmVhdGUgYSBuZXcgZGlyZWN0b3J5IGluIHBsYXRmb3JtL3RhcmdldHMvPHBsYXRmb3JtX25hbWU+LiBGb3IgcmVmZXJlbmNlLCBzZWUgdGhlIGV4aXN0aW5nIHBsYXRmb3JtIHRndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQgZGlyZWN0b3J5LgorICAtIGNwIC1yZiBwbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvIHBsYXRmb3JtL3RhcmdldHMvPHBsYXRmb3JtX25hbWU+LworICAtIFVwZGF0ZSBwbGF0Zm9ybS90YXJnZXRzLzxwbGF0Zm9ybV9uYW1lPi90YXJnZXQuY2ZnIHdpdGggeW91ciBwbGF0Zm9ybSBkZXRhaWwuIFJlZmVyIHZhbC9jb21tb24vdmFsX3RhcmdldC5oIGZvciBzdHJ1Y3R1cmUgZGV0YWlscy4KKyAgLSBVcGRhdGUgcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vTWFrZWZpbGUgYXBwcm9wcmlhdGVseSB0byBzZWxlY3QgY29ycmVjdCBpbnN0YW5jZXMgb2YgUEFMIGZpbGVzIGZvciBjb21waWxhdGlvbi4gVG8gY29tcGlsZSBkZXZfYXBpcyBzdWl0ZXMsIHlvdSBtdXN0IHNldCBQU0FfSVBDX0lNUExFTUVOVEVEIHRvIDAuIFRoaXMgc2VsZWN0cyB0aGUgbm9uLXNlY3VyZSBQQUwgaW5zdGFuY2VzIGZvciB0aGUgZHJpdmVyIHNlcnZpY2VzIGFuZCBlbGltaW5hdGVzIElQQyBkZXBlbmRhbmN5IGZvciBkZXZfYXBpcyB0ZXN0cy4KKyAgLSBSZWZlciAiUEFMIEFQSSBsaXN0IiBzZWN0aW9uIHRvIHZpZXcgbGlzdCBvZiBQQUwgQVBJcyB0aGF0IG11c3QgYmUgcG9ydGVkIGZvciB5b3VyIHRhcmdldCBwbGF0Zm9ybS4gVGhlc2UgQVBJcyBkZWZpbml0aW9ucyBhcmUgYXZhaWxhYmxlIGluIG5zcGUvcGFsX1wqXF9pbnRmLmMuIFRoZXNlIEFQSXMgYXJlIHdyaXR0ZW4gZm9yIHRndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQgcGxhdGZvcm0uIFlvdSBjYW4gcmV1c2UgdGhlIGNvZGUgaWYgaXQgd29ya3MgZm9yIHlvdXIgcGxhdGZvcm0uIE90aGVyd2lzZSB5b3UgbXVzdCBwb3J0IHRoZW0gZm9yIHlvdXIgcGxhdGZvcm0gc3BlY2lmaWMgcGVyaXBoZXJhbHMuCisgIC0gIFRoZSBwbGF0Zm9ybSBtYWtlIGZpbGUgaXMgaW52b2tlZCBhcyBwYXJ0IG9mIHRlc3Qgc3VpdGUgYnVpbGQgdG9vbCguL3NldHVwLnNoKSBzdGVwIGFuZCBpdCBjcmVhdGVzIDxidWlsZF9kaXI+L0JVSUxEL3BsYXRmb3JtL3BhbF9uc3BlLmEgYXJjaGl2ZS4KKworKipOb3RlKio6CitUZXN0IHN1aXRlIG5lZWRzIGFjY2VzcyB0byB0aGUgZm9sbG93aW5nIHBlcmlwaGVyYWxzOjxiciBcPgorICAtIE9uZSBVQVJUIHRvIHByaW50IG5zcGUgYW5kIHNwZSBtZXNzYWdlcworICAtIE9uZSBXYXRjaGRvZyB0aW1lciB0byBoZWxwIHJlY292ZXJ5IGZyb20gYW55IGZhdGFsIGVycm9yIGNvbmRpdGlvbnMKKyAgLSBOb24tdm9sYXRpbGUgbWVtb3J5IHN1cHBvcnQgdG8gcHJlc2VydmUgdGVzdCBzdGF0dXMgb3ZlciB3YXRjaGRvZyB0aW1lciByZXNldAorCisKKyMjIFBBTCBBUEkgbGlzdAorU2luY2UgdGVzdCBzdWl0ZSBpcyBhZ25vc3RpYyB0byB2YXJpb3VzIHN5c3RlbSB0YXJnZXRzLCBiZWZvcmUgYnVpbGRpbmcgdGhlIHRlc3RzLCB5b3UgbXVzdCBwb3J0IGJlbG93IFBBTCBOU1BFIEFQSXMuIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIHJlcXVpcmUgaW1wbGVtZW50YXRpb24gZm9yIHlvdXIgdGFyZ2V0IHBsYXRmb3JtLiA8YnIgLz4KKworfCBObyB8IFByb3RvdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8LS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKK3wgMDEgfCBpbnQgcGFsX3NwaV9yZWFkKGFkZHJfdCBhZGRyLCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBsZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCBwZXJpcGhlcmFscyB1c2luZyBTUEkgY29tbWFuZHMgICAgICAgICAgICAgICAgIHwgYWRkciA6IGFkZHJlc3Mgb2YgdGhlIHBlcmlwaGVyYWw8YnIvPmRhdGEgOiByZWFkIGJ1ZmZlcjxici8+bGVuICA6IGxlbmd0aCBvZiB0aGUgcmVhZCBidWZmZXIgaW4gYnl0ZXM8YnIvPiAgICAgICAgICAgICAgICAgICAgfAorfCAwMiB8IGludCBwYWxfdWFydF9pbml0X25zKHVpbnQzMl90IHVhcnRfYmFzZV9hZGRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIFVBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1YXJ0IGJhc2UgYWRkcjxici8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDAzIHwgaW50IHBhbF9wcmludF9ucyhjaGFyICpzdHIsIHVpbnQzMl90IGRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIGlucHV0IHN0cmluZyBhbmQgd3JpdGVzIGJ5dGVzIGludG8gVUFSVCBUWCBGSUZPfCBzdHIgICAgICA6IElucHV0IFN0cmluZzxici8+ZGF0YSAgICAgOiBWYWx1ZSBmb3IgZm9ybWF0IHNwZWNpZmllcjxici8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDA0IHwgaW50IHBhbF93ZF90aW1lcl9pbml0X25zKGFkZHJfdCBiYXNlX2FkZHIsIHVpbnQzMl90IHRpbWVfdXMsIHVpbnQzMl90IHRpbWVyX3RpY2tfdXMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW5pdGlhbGl6ZXMgYW4gaGFyZHdhcmUgd2F0Y2hkb2cgdGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhc2VfYWRkciAgICAgICA6IEJhc2UgYWRkcmVzcyBvZiB0aGUgd2F0Y2hkb2cgbW9kdWxlPGJyLz50aW1lX3VzICAgICAgICAgOiBUaW1lIGluIG1pY3JvIHNlY29uZHM8YnIvPnRpbWVyX3RpY2tfdXMgICA6IE51bWJlciBvZiB0aWNrcyBwZXIgbWljcm8gc2Vjb25kPGJyLz58Cit8IDA1IHwgaW50IHBhbF93ZF90aW1lcl9lbmFibGVfbnMoYWRkcl90IGJhc2VfYWRkcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW5hYmxlcyBhIGhhcmR3YXJlIHdhdGNoZG9nIHRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhc2VfYWRkciAgICAgICA6IEJhc2UgYWRkcmVzcyBvZiB0aGUgd2F0Y2hkb2cgbW9kdWxlPGJyLz58Cit8IDA2IHwgaW50IHBhbF93ZF90aW1lcl9kaXNhYmxlX25zKGFkZHJfdCBiYXNlX2FkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGlzYWJsZXMgYSBoYXJkd2FyZSB3YXRjaGRvZyB0aW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhc2VfYWRkciAgOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHdhdGNoZG9nIG1vZHVsZTxici8+ICAgIHwKK3wgMDcgfCBpbnQgcGFsX252bWVtX3JlYWRfbnMoYWRkcl90IGJhc2UsIHVpbnQzMl90IG9mZnNldCwgdm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSZWFkcyBmcm9tIGdpdmVuIG5vbi12b2xhdGlsZSBhZGRyZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmFzZSAgICA6IEJhc2UgYWRkcmVzcyBvZiBudm1lbTxici8+b2Zmc2V0ICA6IE9mZnNldDxici8+YnVmZmVyICA6IFBvaW50ZXIgdG8gc291cmNlIGFkZHJlc3M8YnIvPnNpemUgICAgOiBOdW1iZXIgb2YgYnl0ZXM8YnIvPiAgICAgICAgICAgICAgICAgICAgIHwKK3wgMDggfCBpbnQgcGFsX252bWVtX3dyaXRlX25zKGFkZHJfdCBiYXNlLCB1aW50MzJfdCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgaW50IHNpemUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBXcml0ZXMgaW50byBnaXZlbiBub24tdm9sYXRpbGUgYWRkcmVzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmFzZSAgICA6IEJhc2UgYWRkcmVzcyBvZiBudm1lbTxici8+b2Zmc2V0ICA6IE9mZnNldDxici8+YnVmZmVyICA6IFBvaW50ZXIgdG8gc291cmNlIGFkZHJlc3M8YnIvPnNpemUgICAgOiBOdW1iZXIgb2YgYnl0ZXM8YnIvPiAgICAgICAgICAgICAgICAgICAgIHwKK3wgMDkgfCBpbnQzMl90IHBhbF9jcnlwdG9fZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGNyeXB0byBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgfCB0eXBlICAgIDogZnVuY3Rpb24gY29kZTxici8+dmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3Q8YnIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxMCB8IHVpbnQzMl90IHBhbF9pdHNfZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGludGVybmFsIHRydXN0ZWQgc3RvcmFnZSAgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgIHwgdHlwZSAgICA6IGZ1bmN0aW9uIGNvZGU8YnIvPnZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0PGJyLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTEgfCB1aW50MzJfdCBwYWxfcHNfZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIHByb3RlY3RlZCBzdG9yYWdlICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgfCB0eXBlICAgIDogZnVuY3Rpb24gY29kZTxici8+dmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3Q8YnIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCisjIyBMaWNlbnNlCitBcm0gUFNBIHRlc3Qgc3VpdGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgQXBhY2hlIHYyLjAgTGljZW5zZS4KKworLS0tLS0tLS0tLS0tLS0KKworKkNvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4qCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZG9jcy9wb3J0aW5nX2d1aWRlX2ZmLm1kIGIvYXBpLXRlc3RzL2RvY3MvcG9ydGluZ19ndWlkZV9mZi5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzI5YzY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2RvY3MvcG9ydGluZ19ndWlkZV9mZi5tZApAQCAtMCwwICsxLDgwIEBACisKKyMgUG9ydGluZyBHdWlkZSAtIFBTQS1GRiBBcmNoaXRlY3R1cmUgVGVzdCBTdWl0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyMgSW50cm9kdWN0aW9uCitUaGUgQXJjaGl0ZWN0dXJlIHRlc3Qgc3VpdGUgY29udGFpbnMgYSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBsYXllciAoUEFMKSB3aGljaCBhYnN0cmFjdHMgcGxhdGZvcm0gc3BlY2lmaWMgaW5mb3JtYXRpb24gZnJvbSB0aGUgdGVzdHMuCisgLSBUaGUgUEFMIGxheWVyIGludGVyZmFjZSBmdW5jdGlvbnMgbmVlZCB0byBiZSBpbXBsZW1lbnRlZC9wb3J0ZWQgdG8gdGhlIHRhcmdldCBwbGF0Zm9ybS4KKyAtIFRoZSB0YXJnZXQgY29uZmlnIGZpbGUgbXVzdCBiZSBjcmVhdGVkL3VwZGF0ZWQgdG8gbWF0Y2ggdGhlIGRldGFpbHMgb2YgdGhlIHRhcmdldCBwbGF0Zm9ybS4KKworVGhpcyBkb2N1bWVudCBwcm92aWRlcyBkZXRhaWxzIG9uIHRoZSBwb3J0aW5nIHN0ZXBzIGFuZCB0aGUgUEFMIEFQSXMuCisKKyMjIFBvcnRpbmcgc3RlcHMKKworIyMjIFRhcmdldCBjb25maWd1cmF0aW9uCisKK1lvdSBtdXN0IHBvcHVsYXRlIHlvdXIgc3lzdGVtIGNvbmZpZ3VyYXRpb24gYW5kIHByb3ZpZGUgaXQgYXMgYW4gaW5wdXQgdG8gdGVzdCBzdWl0ZS4gVGhpcyBpcyBjYXB0dXJlZCBpbiBhIHNpbmdsZSBzdGF0aWMgaW5wdXQgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgaXMgbmFtZWQgYXMgdGFyZ2V0LmNmZy4gVGhpcyBmaWxlIGlzIGF2YWlsYWJsZSBhdCBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vLiA8YnIgLz4KKworQW4gZXhhbXBsZSBvZiB0aGUgaW5wdXQgY29uZmlndXJhdGlvbiBmaWxlIGlzIGFzIHNob3duLgorCisgICAgLy8gVUFSVCBkZXZpY2UgaW5mbworICAgIHVhcnQubnVtPTE7CisgICAgdWFydC4wLmJhc2UgPSAweDQwMDA0MDAwOworICAgIHVhcnQuMC5zaXplID0gMHhGRkY7CisgICAgdWFydC4wLmludHJfaWQgPSAweEZGOworICAgIHVhcnQuMC5wZXJtaXNzaW9uID0gVFlQRV9SRUFEX1dSSVRFOworCisgICAgLy8gV2F0Y2hkb2cgZGV2aWNlIGluZm8KKyAgICB3YXRjaGRvZy5udW0gPSAxOworICAgIHdhdGNoZG9nLjAuYmFzZSA9IDB4NDAwMDgwMDA7CisgICAgd2F0Y2hkb2cuMC5zaXplID0gMHhGRkY7CisgICAgd2F0Y2hkb2cuMC5pbnRyX2lkID0gMHhGRjsKKyAgICB3YXRjaGRvZy4wLnBlcm1pc3Npb24gPSBUWVBFX1JFQURfV1JJVEU7CisKKyAgTW9yZSBkZXRhaWxzIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGlucHV0IGNhbiBiZSBvYnRhaW5lZCBmcm9tIHZhbC9jb21tb24vdmFsX3RhcmdldC5oLgorCisjIyMgQWRkaW5nIGEgbmV3IHRhcmdldAorCisgIC0gQ3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBpbiBwbGF0Zm9ybS90YXJnZXRzLzxwbGF0Zm9ybV9uYW1lPi4gRm9yIHJlZmVyZW5jZSwgc2VlIHRoZSBleGlzdGluZyBwbGF0Zm9ybSB0Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200IGRpcmVjdG9yeS4KKyAgLSBjcCAtcmYgcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200LyBwbGF0Zm9ybS90YXJnZXRzLzxwbGF0Zm9ybV9uYW1lPi8KKyAgLSBVcGRhdGUgcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vdGFyZ2V0LmNmZyB3aXRoIHlvdXIgcGxhdGZvcm0gZGV0YWlsLiBSZWZlciB2YWwvY29tbW9uL3ZhbF90YXJnZXQuaCBmb3Igc3RydWN0dXJlIGRldGFpbHMuCisgIC0gVXBkYXRlIHRoZSBwbGF0Zm9ybSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4gbWFuaWZlc3QgZmlsZXMgbG9jYXRlZCBpbiAgcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vbWFuaWZlc3RzLyBkaXJlY3Rvcnkgd2l0aCB5b3VyIHBsYXRmb3JtIGluZm9ybWF0aW9uLiBUaGUgcGxhdGZvcm0gZGV0YWlsIG11c3QgbWF0Y2ggd2l0aCBkZXZpY2UgZGV0YWlsIHByb3ZpZGVkIGluIHRoZSB0YXJnZXQuY2ZnIGZpbGUuCisgIC0gVXBkYXRlIHBsYXRmb3JtL25zcGUvTWFrZWZpbGUgYXBwcm9wcmlhdGVseSB0byBzZWxlY3QgY29ycmVjdCBpbnN0YW5jZXMgb2YgUEFMIGZpbGVzIGZvciBjb21waWxhdGlvbi4gVG8gY29tcGlsZSBJUEMgdGVzdHMsIHlvdSBtdXN0IHNldCBQU0FfSVBDX0lNUExFTUVOVEVEIHRvIDEgYW5kIHJlbWFpbmluZyBEZXZlbG9wZXIgQVBJcyByZWxhdGVkIHZhcmlhYmxlcyB0byAwLiBUaGlzIHNlbGVjdHMgdGhlIHNlY3VyZSBQQUwgaW5zdGFuY2VzIGZvciB0aGUgZHJpdmVyIHNlcnZpY2VzIGFuZCBlbGltaW5hdGVzIGRldl9hcGlzIGRlcGVuZGFuY3kgZm9yIElQQyB0ZXN0cy4KKyAgLSBSZWZlciAiUEFMIEFQSSBsaXN0IiBzZWN0aW9uIHRvIHZpZXcgbGlzdCBvZiBQQUwgQVBJcyB0aGF0IG11c3QgYmUgcG9ydGVkIGZvciB5b3VyIHRhcmdldCBwbGF0Zm9ybS4gVGhlc2UgQVBJcyBkZWZpbml0aW9ucyBhcmUgYXZhaWxhYmxlIGluIG5zcGUvcGFsX1wqXF9pbnRmLmMgYW5kIHNwZS9wYWxfXCpfaW50Zi5jIGZpbGVzLiBUaGVzZSBBUElzIGFyZSB3cml0dGVuIGZvciB0Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200IHBsYXRmb3JtLiBZb3UgY2FuIHJldXNlIHRoZSBjb2RlIGlmIGl0IHdvcmtzIGZvciB5b3VyIHBsYXRmb3JtLiBPdGhlcndpc2UgeW91IG11c3QgcG9ydCB0aGVtIGZvciB5b3VyIHBsYXRmb3JtIHNwZWNpZmljIHBlcmlwaGVyYWxzLgorICAtIFRoZSBwbGF0Zm9ybSBtYWtlIGZpbGUgaXMgaW52b2tlZCBhcyBwYXJ0IG9mIHRlc3Qgc3VpdGUgYnVpbGQgdG9vbCguL3NldHVwLnNoKSBzdGVwIGFuZCBpdCBjcmVhdGVzIDxidWlsZF9kaXI+L0JVSUxEL3BsYXRmb3JtL3BhbF9uc3BlLmEgYXJjaGl2ZSBmb3IgTlBTRSBmaWxlcyBhbmQgcmVzcGVjdGl2ZSBvYmplY3QgZm9yIFNQRSBmaWxlcyBhdCA8YnVpbGRfZGlyPi9CVUlMRC9wbGF0Zm9ybS9zcGUvXCpcX2RyaXZlcl9zcC5vLiBMYXRlciwgdGhlc2UgU1BFIG9iamVjdHMgYXJlIHVzZWQgYnkgc3BidWlsZC5tayB0byBjcmVhdGUgYXBwcm9wcmlhdGUgU1BFIHBhcnRpdGlvbiBhcmNoaXZlIGZpbGUuCisKKyoqTm90ZSoqOgorICBUZXN0IHN1aXRlIG5lZWRzIGFjY2VzcyB0byB0aGUgZm9sbG93aW5nIHBlcmlwaGVyYWxzLiBXaGVuIFBTQV9JUENfSU1QTEVNRU5URUQgaXMgc2V0IHRvIDEsIGRyaXZlciBmdW5jdGlvbmFsaXRpZXMgYXJlIGltcGxlbWVudGVkIGFzIFJvVC1zZXJ2aWNlcyBpbiBkcml2ZXIgcGFydGl0aW9uLiBPdGhlciBTZWN1cmUgcGFydGl0aW9ucyBhbmQgbm9uLXNlY3VyZSBjb2RlIGNhbGxzIHRvIHRoZXNlIFJvVC1zZXJ2aWNlcyB0byBnZXQgYXBwcm9wcmlhdGUgZHJpdmVyIHNlcnZpY2VzLgorICAtIE9uZSBVQVJUIHRvIHByaW50IG5zcGUgYW5kIHNwZSBtZXNzYWdlcworICAtIE9uZSBXYXRjaGRvZyB0aW1lciB0byBoZWxwIHJlY292ZXJ5IGZyb20gYW55IGZhdGFsIGVycm9yIGNvbmRpdGlvbnMKKyAgLSBOb24tdm9sYXRpbGUgbWVtb3J5IHN1cHBvcnQgdG8gcHJlc2VydmUgdGVzdCBzdGF0dXMgb3ZlciB3YXRjaGRvZyB0aW1lciByZXNldAorCisKKyMjIFBBTCBBUEkgbGlzdAorU2luY2UgVGVzdCBzdWl0ZSBpcyBhZ25vc3RpYyB0byB2YXJpb3VzIHN5c3RlbSB0YXJnZXRzLCBiZWZvcmUgYnVpbGRpbmcgdGhlIHRlc3RzLCB5b3UgbXVzdCBwb3J0IGJlbG93IFBBTCBBUElzLiBUaGVzZSBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGltcGxlbWVudGF0aW9uIGZvciB5b3VyIHRhcmdldCBwbGF0Zm9ybS4gPGJyIC8+CisKKy0gRm9sbG93aW5nIGFyZSB0aGUgbGlzdCBvZiBQQUwgQVBJcyB1c2VkIGluIE5TUEU6IDxiciAvPgorCit8IE5vIHwgUHJvdG90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wtLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorfCAwMSB8IGludCBwYWxfc3BpX3JlYWQoYWRkcl90IGFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IGxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIHBlcmlwaGVyYWxzIHVzaW5nIFNQSSBjb21tYW5kcyAgICAgICAgICAgICAgICAgfCBhZGRyIDogYWRkcmVzcyBvZiB0aGUgcGVyaXBoZXJhbDxici8+ZGF0YSA6IHJlYWQgYnVmZmVyPGJyLz5sZW4gIDogbGVuZ3RoIG9mIHRoZSByZWFkIGJ1ZmZlciBpbiBieXRlczxici8+ICAgICAgICAgICAgICAgICAgICB8CisKKy0gRm9sbG93aW5nIGFyZSB0aGUgbGlzdCBvZiBQQUwgQVBJcyB1c2VkIGluIFNQRTogPGJyIC8+CisKK3wgTm8gfCBQcm90b3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8LS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorfCAwMSB8IHZvaWQgcGFsX3VhcnRfaW5pdChhZGRyX3QgdWFydF9iYXNlX2FkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHVhcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVhcnRfYmFzZV9hZGRyIDogQmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUPGJyLz4gICAgICAgICAgIHwKK3wgMDIgfCB2b2lkIHBhbF9wcmludChjaGFyICpzdHIsIHVpbnQzMl90IGRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUgaW5wdXQgc3RyaW5nIGFuZCB3cml0ZXMgYnl0ZSBieSBieXRlIHRvIHByaW50ICAgICAgICAgICAgfCBzdHIgICAgICAgICAgICA6IElucHV0IFN0cmluZzxici8+ZGF0YSAgICAgICAgICAgOiBWYWx1ZSBmb3IgRm9ybWF0IHNwZWNpZmllcjxici8+ICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDAzIHwgaW50ICBwYWxfd2RfdGltZXJfaW5pdChhZGRyX3QgYmFzZV9hZGRyLCB1aW50MzJfdCB0aW1lX3VzLCB1aW50MzJfdCB0aW1lcl90aWNrX3VzKTt8IEluaXRpYWxpemVzIGFuIGhhcmR3YXJlIHdhdGNoZG9nIHRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhc2VfYWRkciAgICAgICA6IEJhc2UgYWRkcmVzcyBvZiB0aGUgd2F0Y2hkb2cgbW9kdWxlPGJyLz50aW1lX3VzICAgICAgICAgOiBUaW1lIGluIG1pY3JvIHNlY29uZHM8YnIvPnRpbWVyX3RpY2tfdXMgICA6IE51bWJlciBvZiB0aWNrcyBwZXIgbWljcm8gc2Vjb25kPGJyLz58Cit8IDA0IHwgaW50ICBwYWxfd2RfdGltZXJfZW5hYmxlKGFkZHJfdCBiYXNlX2FkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW5hYmxlcyBhIGhhcmR3YXJlIHdhdGNoZG9nIHRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmFzZV9hZGRyICAgICA6IEJhc2UgYWRkcmVzcyBvZiB0aGUgd2F0Y2hkb2cgbW9kdWxlPGJyLz4gfAorfCAwNSB8IGludCAgcGFsX3dkX3RpbWVyX2Rpc2FibGUoYWRkcl90IGJhc2VfYWRkcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERpc2FibGVzIGEgaGFyZHdhcmUgd2F0Y2hkb2cgdGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhc2VfYWRkciAgICAgOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHdhdGNoZG9nIG1vZHVsZTxici8+IHwKK3wgMDYgfCBpbnQgIHBhbF93ZF90aW1lcl9pc19lbmFibGVkKGFkZHJfdCBiYXNlX2FkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDaGVja3Mgd2hldGhlciBoYXJkd2FyZSB3YXRjaGRvZyB0aW1lciBpcyBlbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYXNlX2FkZHIgICAgIDogQmFzZSBhZGRyZXNzIG9mIHRoZSB3YXRjaGRvZyBtb2R1bGU8YnIvPiB8Cit8IDA3IHwgaW50ICBwYWxfbnZtZW1fd3JpdGUoYWRkcl90IGJhc2UsIHVpbnQzMl90IG9mZnNldCwgdm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSk7ICAgICAgIHwgV3JpdGVzICdzaXplJyBieXRlcyBmcm9tIGJ1ZmZlciBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYXQgYSBnaXZlbiAnYmFzZSArIG9mZnNldCd8IGJhc2UgICAgICA6IEJhc2UgYWRkcmVzcyBvZiBOViBNRU08YnIvPm9mZnNldCAgICA6IE9mZnNldDxici8+YnVmZmVyICAgIDogUG9pbnRlciB0byBzb3VyY2UgYWRkcmVzczxici8+c2l6ZSAgICAgIDogTnVtYmVyIG9mIGJ5dGVzPGJyLz4gICAgICAgICAgICAgICAgICB8Cit8IDA4IHwgaW50ICBwYWxfbnZtZW1fcmVhZChhZGRyX3QgYmFzZSwgdWludDMyX3Qgb2Zmc2V0LCB2b2lkICpidWZmZXIsIGludCBzaXplKTsgICAgICAgfCBSZWFkcyAnc2l6ZScgYnl0ZXMgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5IGF0IGEgZ2l2ZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYXNlICAgICAgOiBCYXNlIGFkZHJlc3Mgb2YgTlYgTUVNPGJyLz5vZmZzZXQgICAgOiBPZmZzZXQ8YnIvPmJ1ZmZlciAgICA6IFBvaW50ZXIgdG8gc291cmNlIGFkZHJlc3M8YnIvPnNpemUgICAgICA6IE51bWJlciBvZiBieXRlczxici8+ICAgICAgICAgICAgICAgICAgfAorCisjIyBMaWNlbnNlCitBcm0gUFNBIHRlc3Qgc3VpdGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgQXBhY2hlIHYyLjAgTGljZW5zZS4KKworLS0tLS0tLS0tLS0tLS0KKworKkNvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4qCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZG9jcy9wc2FfY3J5cHRvX3Rlc3RsaXN0Lm1kIGIvYXBpLXRlc3RzL2RvY3MvcHNhX2NyeXB0b190ZXN0bGlzdC5tZAppbmRleCBiYzYxOTdlLi4xMmRlZjk5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZG9jcy9wc2FfY3J5cHRvX3Rlc3RsaXN0Lm1kCisrKyBiL2FwaS10ZXN0cy9kb2NzL3BzYV9jcnlwdG9fdGVzdGxpc3QubWQKQEAgLTIsNjIgKzIsNTczIEBACiAKIAogCi18ICoqR3JvdXAqKiAgICB8ICoqVGVzdCoqIHwgKipGdW5jdGlvbioqICB8ICoqU2NlbmFyaW8qKiAgICAgfCAqKlJldHVybiBWYWx1ZSoqIHwgKipTdGVwcyoqICAgfCAqKlRlc3QgQ2FzZSoqICAgIHwKLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci18ICoqQmFzaWMqKiAgICB8IHRlc3RfYzAwMSB8IHBzYV9jcnlwdG9faW5pdCAgICAgfCBMaWJyYXJ5IGluaXRpYWxpemF0aW9uIHwgUFNBX1NVQ0NFU1MgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gU1VDQ0VTUyAgICAgfCAgICB8Ci18ICAgICB8IHwgfCBBcHBsaWNhdGlvbnMgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGNhbGxpbmcgYW55IG90aGVyIGZ1bmN0aW9uIGluIHRoaXMgbW9kdWxlLiAgfCBQU0FfU1VDQ0VTUyAgfCBUcnkgY2FsbGluZyBjcnlwdG8gb3BlcmF0aW9ucyBkb2luZyBhIGNyeXB0b19pbml0IHNob3VsZCBiZSBzdWNjZXNzZnVsKGNhbiBiZSBjb3ZlcmVkIGFzIHBhcnQgb2Ygb3RoZXIgdGVzdGNhc2UpIHwgICAgfAotfCAgICAgfCB8IHwgQXBwbGljYXRpb25zIG1heSBjYWxsIHRoaXMgZnVuY3Rpb24gbW9yZSB0aGFuIG9uY2UuIE9uY2UgYSBjYWxsIHN1Y2NlZWRzLCBzdWJzZXF1ZW50IGNhbGxzIGFyZSBndWFyYW50ZWVkIHRvIHN1Y2NlZWQuIHwgUFNBX1NVQ0NFU1MgIHwgVHJ5IGNhbGxpbmcgbXVsdGlwbGUgY3J5cHRvIGluaXQgYW5kIHNob3VsZCByZXR1cm4gU1VDQ0VTUyAgICAgfCAgICB8Ci18ICAgICB8IHwgfCBBcHBsaWNhdGlvbnMgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGNhbGxpbmcgYW55IG90aGVyIGZ1bmN0aW9uIGluIHRoaXMgbW9kdWxlLiAgfCBQU0FfRVJST1JfQkFEX1NUQVRFICAgIHwgVHJ5IGNhbGxpbmcgY3J5cHRvIG9wZXJhdGlvbnMgd2l0aG91dCBkb2luZyBhIGNyeXB0b19pbml0IHNob3VsZCByZXR1cm4gRkFJTFVSRSAgICB8ICAgIHwKLXwgICAgIHwgfCB8ICAgIHwgICAgfCAgICB8ICAgIHwKLXwgKipLZXkgTWFuYWdlbWVudCoqICAgICB8IHRlc3RfYzAwMiB8IHBzYV9pbXBvcnRfa2V5IHwgSW1wb3J0IGEga2V5IGluIGJpbmFyeSBmb3JtYXQuICAgfCBQU0FfU1VDQ0VTUyAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgIDxiciAvPiAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwgdXNhZ2Ugb2YgdGhlIGtleSAgPGJyIC8+IDMuIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgPGJyIC8+IDQuICBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICA8YnIgLz4gNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgPGJyIC8+IDYuIEdldCBiYXNpYyBtZXRhZGF0YSBhYm91dCBhIGtleSAgPGJyIC8+IDcuIEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICA8YnIgLz4gOC4gQ2hlY2sgaWYgb3JpZ2luYWwga2V5IGRhdGEgbWF0Y2hlcyB3aXRoIHRoZSBleHBvcnRlZCBkYXRhIHwgMS4gMTYgQnl0ZSBBRVMgIDxiciAvPiAyLiAyNCBCeXRlIEFFUyAgPGJyIC8+IDMuIDMyIEJ5dGUgQUVTICA8YnIgLz4gNC4gMjA0OCBSU0EgcHVibGljIGtleSAgPGJyIC8+IDUuIDIwNDggUlNBIGtleXBhaXIgIDxiciAvPiA2LiBERVMgNjQgYml0IGtleSAgPGJyIC8+IDcuIFRyaXBsZSBERVMgMi1LZXkgIDxiciAvPiA4LiBUcmlwbGUgREVTIDMtS2V5ICA8YnIgLz4gOS4gRUMgUHVibGljIGtleSAgPGJyIC8+IDEwLiBFQyBrZXlwYWlyIHwKLXwgICAgIHwgfCB8ICAgIHwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW5jb3JyZWN0IGtleSB0eXBlICAgfCBJbmNvcnJlY3Qga2V5IHR5cGUgICAgIHwKLXwgICAgIHwgfCB8ICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBwYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgIHwgMS4gS2V5IGRhdGEgZ3JlYXRlciB0aGFuIHRoZSBhbGdvcml0aG0gc2l6ZSAgPGJyIC8+IDIuIEluY29ycmVjdCBrZXkgZGF0YSBzaXplICA8YnIgLz4gMy4gSW52YWxpZCBrZXkgc2xvdCAgPGJyIC8+IDQuIFplcm8ga2V5IHNsb3QgfAotfCAgICAgfCB8IHwgICAgfCBQU0FfRVJST1JfT0NDVVBJRURfU0xPVCAgICAgfCBQYXNzIHRoZSBrZXkgc2xvdCB0byBzdG9yZSBkYXRhIHdoaWNoIGlzIGFscmVhZHkgb2NjdXBpZWQgfCBBbHJlYWR5IG9jY3VwaWVkIGtleSBzbG90ICAgfAotfCAgICAgfCB0ZXN0X2MwMDMgfCBwc2FfZXhwb3J0X2tleSB8IEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICAgIHwgUFNBX1NVQ0NFU1MgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICA8YnIgLz4gMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsIHVzYWdlIG9mIHRoZSBrZXkgIDxiciAvPiAzLiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgIDxiciAvPiA0LiAgU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgPGJyIC8+IDUuIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgIDxiciAvPiA2LiBHZXQgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYSBrZXkgIDxiciAvPiA3LiBFeHBvcnQgYSBrZXkgaW4gYmluYXJ5IGZvcm1hdCAgPGJyIC8+IDguIENoZWNrIGlmIG9yaWdpbmFsIGtleSBkYXRhIG1hdGNoZXMgd2l0aCB0aGUgZXhwb3J0ZWQgZGF0YSB8IDEuIDE2IEJ5dGUgQUVTICA8YnIgLz4gMi4gMjQgQnl0ZSBBRVMgIDxiciAvPiAzLiAzMiBCeXRlIEFFUyAgPGJyIC8+IDQuIDIwNDggUlNBIHB1YmxpYyBrZXkgIDxiciAvPiA1LiAyMDQ4IFJTQSBrZXlwYWlyICA8YnIgLz4gNi4gREVTIDY0IGJpdCBrZXkgIDxiciAvPiA3LiBUcmlwbGUgREVTIDItS2V5ICA8YnIgLz4gOC4gVHJpcGxlIERFUyAzLUtleSAgPGJyIC8+IDkuIEVDIFB1YmxpYyBrZXkgIDxiciAvPiAxMC4gRUMga2V5cGFpciB8Ci18ICAgICB8IHwgfCAgICB8IFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGJ1ZmZlciBzaXplIGxlc3MgdGhhbiByZXF1aXJlZCB8IExlc3MgYnVmZmVyIHNpemUgIHwKLXwgICAgIHwgfCB8ICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBwYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgIHwgMS4gWmVybyBrZXkgc2xvdCAgIDxiciAvPiAyLiBJbnZhbGlkIGtleSBzbG90IHwKLXwgICAgIHwgfCB8ICAgIHwgUFNBX0VSUk9SX0JBRF9TVEFURSAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGtleSBwb2xpY3kgdGhhdCBjYW5ub3QgYmUgZXhwb3J0ZWQgIHwgSW52YWxpZCBrZXkgcG9saWN5IHVzYWdlICAgIHwKLXwgICAgIHwgfCB8ICAgIHwgUFNBX0VSUk9SX0VNUFRZX1NMT1QgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGVtcHR5IGtleSBzbG90ICB8IEVtcHR5IGtleSBzbG90ICAgIHwKLXwgICAgIHwgdGVzdF9jMDA0IHwgcHNhX2V4cG9ydF9wdWJsaWNfa2V5ICAgIHwgRXhwb3J0IGEgcHVibGljIGtleSBvciB0aGUgcHVibGljIHBhcnQgb2YgYSBrZXkgcGFpciBpbiBiaW5hcnkgICBmb3JtYXQuIHwgUFNBX1NVQ0NFU1MgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICA8YnIgLz4gMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsIHVzYWdlIG9mIHRoZSBrZXkgIDxiciAvPiAzLiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgIDxiciAvPiA0LiAgU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgPGJyIC8+IDUuIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgIDxiciAvPiA2LiBHZXQgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYSBrZXkgIDxiciAvPiA3LiBFeHBvcnQgYSBrZXkgaW4gYmluYXJ5IGZvcm1hdCAgPGJyIC8+IDguIENoZWNrIGlmIG9yaWdpbmFsIGtleSBkYXRhIG1hdGNoZXMgd2l0aCB0aGUgZXhwb3J0ZWQgZGF0YSB8IDEuIDIwNDggUlNBIHB1YmxpYyBrZXkgIDxiciAvPiAyLiAyMDQ4IFJTQSBrZXlwYWlyICA8YnIgLz4gMy4gRUMgUHVibGljIGtleSAgPGJyIC8+IDQuIEVDIGtleXBhaXIgICAgIHwKLXwgICAgIHwgfCB8ICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICA8YnIgLz4gMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsIHVzYWdlIG9mIHRoZSBrZXkgIDxiciAvPiAzLiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgIDxiciAvPiA0LiAgU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgPGJyIC8+IDUuIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgIDxiciAvPiA2LiBHZXQgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYSBrZXkgIDxiciAvPiA3LiBFeHBvcnQgYSBrZXkgaW4gYmluYXJ5IGZvcm1hdCAgPGJyIC8+IDguIENoZWNrIGlmIG9yaWdpbmFsIGtleSBkYXRhIG1hdGNoZXMgd2l0aCB0aGUgZXhwb3J0ZWQgZGF0YSB8IDEuIDE2IEJ5dGUgQUVTICA8YnIgLz4gMi4gMjQgQnl0ZSBBRVMgIDxiciAvPiAzLiAzMiBCeXRlIEFFUyAgPGJyIC8+IDQuIERFUyA2NCBiaXQga2V5ICA8YnIgLz4gNS4gVHJpcGxlIERFUyAyLUtleSAgPGJyIC8+IDYuIFRyaXBsZSBERVMgMy1LZXkgfAotfCAgICAgfCB8IHwgICAgfCBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTCAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBidWZmZXIgc2l6ZSBsZXNzIHRoYW4gcmVxdWlyZWQgfCBMZXNzIGJ1ZmZlciBzaXplICB8Ci18ICAgICB8IHwgfCAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGludmFsaWQgcGFyYW1ldGVyIHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICB8IDEuIFplcm8ga2V5IHNsb3QgICA8YnIgLz4gMi4gSW52YWxpZCBrZXkgc2xvdCB8Ci18ICAgICB8IHwgfCAgICB8IFBTQV9FUlJPUl9CQURfU1RBVEUgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBrZXkgcG9saWN5IHRoYXQgY2Fubm90IGJlIGV4cG9ydGVkICB8IEludmFsaWQga2V5IHBvbGljeSB1c2FnZSAgICB8Ci18ICAgICB8IHRlc3RfYzAwNSB8IHBzYV9kZXN0cm95X2tleSAgICAgfCBEZXN0cm95IGEga2V5IGFuZCByZXN0b3JlIHRoZSBzbG90IHRvIGl0cyBkZWZhdWx0IHN0YXRlLiAgfCBQU0FfU1VDQ0VTUyAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgIDxiciAvPiAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwgdXNhZ2Ugb2YgdGhlIGtleSAgPGJyIC8+IDMuIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgPGJyIC8+IDQuICBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICA8YnIgLz4gNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgPGJyIC8+IDYuIEdldCBiYXNpYyBtZXRhZGF0YSBhYm91dCBhIGtleSAgPGJyIC8+IDcuIERlc3Ryb3kgYSBrZXkgYW5kIHJlc3RvcmUgdGhlIHNsb3QgdG8gaXRzIGRlZmF1bHQgc3RhdGUgIDxiciAvPiA4LiBDaGVjayB0aGF0IGlmIHRoZSBrZXkgbWV0YWRhdGEgYXJlIGRlc3Ryb3llZCAgIHwgMS4gMTYgQnl0ZSBBRVMgIDxiciAvPiAyLiAyNCBCeXRlIEFFUyAgPGJyIC8+IDMuIDMyIEJ5dGUgQUVTICA8YnIgLz4gNC4gMjA0OCBSU0EgcHVibGljIGtleSAgPGJyIC8+IDUuIDIwNDggUlNBIGtleXBhaXIgIDxiciAvPiA2LiBERVMgNjQgYml0IGtleSAgPGJyIC8+IDcuIFRyaXBsZSBERVMgMi1LZXkgIDxiciAvPiA4LiBUcmlwbGUgREVTIDMtS2V5ICA8YnIgLz4gOS4gRUMgUHVibGljIGtleSAgPGJyIC8+IDEwLiBFQyBrZXlwYWlyIHwKLXwgICAgIHwgfCB8ICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBwYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgIHwgMS4gSW52YWxpZCBrZXkgc2xvdCAgPGJyIC8+IDIuIFplcm8ga2V5IHNsb3QgIDxiciAvPiAzLiBFbXB0eSBrZXkgc2xvdCAgICB8Ci18ICAgICB8IHRlc3RfYzAwNiB8IHBzYV9nZXRfa2V5X2luZm9ybWF0aW9uICB8IEdldCBiYXNpYyBtZXRhZGF0YSBhYm91dCBhIGtleS4gIHwgUFNBX1NVQ0NFU1MgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICA8YnIgLz4gMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsIHVzYWdlIG9mIHRoZSBrZXkgIDxiciAvPiAzLiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgIDxiciAvPiA0LiAgU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgPGJyIC8+IDUuIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgIDxiciAvPiA2LiBHZXQgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYSBrZXkgICAgIHwgMS4gMTYgQnl0ZSBBRVMgIDxiciAvPiAyLiAyNCBCeXRlIEFFUyAgPGJyIC8+IDMuIDMyIEJ5dGUgQUVTICA8YnIgLz4gNC4gMjA0OCBSU0EgcHVibGljIGtleSAgPGJyIC8+IDUuIDIwNDggUlNBIGtleXBhaXIgIDxiciAvPiA2LiBERVMgNjQgYml0IGtleSAgPGJyIC8+IDcuIFRyaXBsZSBERVMgMi1LZXkgIDxiciAvPiA4LiBUcmlwbGUgREVTIDMtS2V5ICA8YnIgLz4gOS4gRUMgUHVibGljIGtleSAgPGJyIC8+IDEwLiBFQyBrZXlwYWlyIHwKLXwgICAgIHwgfCB8ICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBwYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgIHwgMS4gWmVybyBrZXkgc2xvdCAgIDxiciAvPiAyLiBJbnZhbGlkIGtleSBzbG90IHwKLXwgICAgIHwgfCB8ICAgIHwgUFNBX0VSUk9SX0VNUFRZX1NMT1QgICB8IFBhc3MgdGhlIGtleSBzbG90IG51bWJlciB3aGljaCBoYXMgdGhlIGtleSB0eXBlIGFzIG5vbmUgICB8ICBFbXB0eSBrZXkgc2xvdCAgIHwKLXwgICAgIHwgTk8gVEVTVCAgIHwgcHNhX2tleV9wb2xpY3lfc2V0X3VzYWdlIHwgU2V0IHRoZSAgIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUuICAgICB8IHZvaWQgICAgfCBWb2lkIGZ1bmN0aW9uLiBDb3ZlcmVkIGFzIHBhcnQgb2Ygb3RoZXIgY2FzZXMgICB8ICAgIHwKLXwgICAgIHwgfCB8ICAgIHwgICAgfCAgICB8ICAgIHwKLXwgKipLZXkgUG9saWNpZXMqKiAgfCB0ZXN0X2MwMDcgfCBwc2Ffc2V0X2tleV9wb2xpY3kgIHwgU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdC4gICB8IFBTQV9TVUNDRVNTICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgPGJyIC8+IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbCB1c2FnZSBvZiB0aGUga2V5ICA8YnIgLz4gMy4gU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICA8YnIgLz4gNC4gIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgIDxiciAvPiA1LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICA8YnIgLz4gNi4gR2V0IHRoZSB1c2FnZSBwb2xpY3kgZm9yIGEga2V5IHNsb3QgIDxiciAvPiA3LiBDaGVjayBpZiB0aGUgcG9saWN5IG1hdGNoZXMgdGhlIG9yaWdpbmFsIGlucHV0ICAgICB8IDEuIDE2IEJ5dGUgQUVTICA8YnIgLz4gMi4gMjQgQnl0ZSBBRVMgIDxiciAvPiAzLiAzMiBCeXRlIEFFUyAgPGJyIC8+IDQuIDIwNDggUlNBIHB1YmxpYyBrZXkgIDxiciAvPiA1LiAyMDQ4IFJTQSBrZXlwYWlyICA8YnIgLz4gNi4gREVTIDY0IGJpdCBrZXkgIDxiciAvPiA3LiBUcmlwbGUgREVTIDItS2V5ICA8YnIgLz4gOC4gVHJpcGxlIERFUyAzLUtleSAgPGJyIC8+IDkuIEVDIFB1YmxpYyBrZXkgIDxiciAvPiAxMC4gRUMga2V5cGFpciB8Ci18ICAgICB8IHwgfCAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGludmFsaWQgcGFyYW1ldGVyIHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICB8IDEuIEludmFsaWQga2V5IHBvbGljeSAgPGJyIC8+IDIuIFplcm8ga2V5IHNsb3QgIDxiciAvPiAzLiBJbnZhbGlkIGtleSBzbG90ICAgICB8Ci18ICAgICB8IHwgfCAgICB8IFBTQV9FUlJPUl9PQ0NVUElFRF9TTE9UICAgICB8IFBhc3MgdGhlIGtleSBzbG90IHRvIHN0b3JlIGRhdGEgd2hpY2ggaXMgYWxyZWFkeSBvY2N1cGllZCB8IEFscmVhZHkgb2NjdXBpZWQga2V5IHNsb3QgICB8Ci18ICAgICB8IHRlc3RfYzAwOCB8IHBzYV9nZXRfa2V5X3BvbGljeSAgfCBHZXQgdGhlIHVzYWdlIHBvbGljeSBmb3IgYSBrZXkgc2xvdCAgIHwgUFNBX1NVQ0NFU1MgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICA8YnIgLz4gMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsIHVzYWdlIG9mIHRoZSBrZXkgIDxiciAvPiAzLiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgIDxiciAvPiA0LiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICA8YnIgLz4gNS4gQ2hhbmdlIHRoZSBsaWZldGltZSBvZiBhIGtleSBzbG90ICA8YnIgLz4gNi4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgPGJyIC8+IDcuIEdldCB0aGUgdXNhZ2UgcG9saWN5IGZvciBhIGtleSBzbG90ICA8YnIgLz4gOC4gUmV0cmlldmUgdGhlIHVzYWdlIGZpZWxkIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgPGJyIC8+IDkuIFJldHJpZXZlIHRoZSBhbGdvcml0aG0gZmllbGQgb2YgYSBwb2xpY3kgc3RydWN0dXJlICA8YnIgLz4gMTAuIE1ha2Ugc3VyZSB0aGV5IG1hdGNoIHRoZSBvcmlnaW5hbCB2YWx1ZSB8IDEuIDE2IEJ5dGUgQUVTICA8YnIgLz4gMi4gMjQgQnl0ZSBBRVMgIDxiciAvPiAzLiAzMiBCeXRlIEFFUyAgPGJyIC8+IDQuIDIwNDggUlNBIHB1YmxpYyBrZXkgIDxiciAvPiA1LiAyMDQ4IFJTQSBrZXlwYWlyICA8YnIgLz4gNi4gREVTIDY0IGJpdCBrZXkgIDxiciAvPiA3LiBUcmlwbGUgREVTIDItS2V5ICA8YnIgLz4gOC4gVHJpcGxlIERFUyAzLUtleSAgPGJyIC8+IDkuIEVDIFB1YmxpYyBrZXkgIDxiciAvPiAxMC4gRUMga2V5cGFpciB8Ci18ICAgICB8IHwgfCAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGludmFsaWQgcGFyYW1ldGVyIHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICB8IDEuIFplcm8ga2V5IHNsb3QgICA8YnIgLz4gMi4gSW52YWxpZCBrZXkgc2xvdCB8Ci18ICAgICB8IHRlc3RfYzAwOSB8IHBzYV9zZXRfa2V5X2xpZmV0aW1lICAgICB8IENoYW5nZSB0aGUgbGlmZXRpbWUgb2YgYSBrZXkgc2xvdC4gICAgfCBQU0FfU1VDQ0VTUyAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgIDxiciAvPiAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwgdXNhZ2Ugb2YgdGhlIGtleSAgPGJyIC8+IDMuIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgPGJyIC8+IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgIDxiciAvPiA1LiBDaGFuZ2UgdGhlIGxpZmV0aW1lIG9mIGEga2V5IHNsb3QgIDxiciAvPiA2LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICA8YnIgLz4gNy4gUmVzZXQgdGhlIHN5c3RlbSAgPGJyIC8+IDguIEFmdGVyIHJlYm9vdCBjaGVjayBpZiB0aGUgY29udGVudHMgb2YgcGVyc2lzdGVudCBhbmQgd3JpdGUgb25jZSBrZXkgZGF0YSBhcmUgcHJlc2VydmVkICAgfCAxLiBWb2xhdGlsZSBrZXlzICA8YnIgLz4gMi4gUGVyc2lzdGVudCBrZXlzICA8YnIgLz4gMy4gV3JpdGUgb25jZSBrZXlzICAgIHwKLXwgICAgIHwgfCB8ICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW5jb3JyZWN0IGFyZ3VtZW50IHNob3VsZCByZXR1cm4gZmFpbHVyZSB8IDEuIFplcm8ga2V5IHNsb3QgIDxiciAvPiAyLiBJbnZhbGlkIGtleSBzbG90ICA8YnIgLz4gMy4gSW52YWxpZCBrZXkgbGlmZXRpbWUgICB8Ci18ICAgICB8IHwgfCAgICB8IFBTQV9FUlJPUl9PQ0NVUElFRF9TTE9UICAgICB8IElmIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN1cHBvcnRzIGNoYW5naW5nIHRoZSBsaWZldGltZSBvZiBwcmVvY2N1cGllZCBzbG90LCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBhbHJlYWR5IG9jY3VwaWVkIHNsb3Qgc2hvdWxkIHJldHVybiBmYWlsdXJlKEltcGRlZikgfCBQcmUgb2NjdXBpZWQga2V5IHNsb3QgIHwKLXwgICAgIHwgdGVzdF9jMDEwIHwgcHNhX2dldF9rZXlfbGlmZXRpbWUgICAgIHwgUmV0cmlldmUgICB0aGUgbGlmZXRpbWUgb2YgYSBrZXkgc2xvdC4gICAgIHwgUFNBX1NVQ0NFU1MgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICA8YnIgLz4gMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsIHVzYWdlIG9mIHRoZSBrZXkgIDxiciAvPiAzLiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgIDxiciAvPiA0LiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICA8YnIgLz4gNS4gQ2hhbmdlIHRoZSBsaWZldGltZSBvZiBhIGtleSBzbG90ICA8YnIgLz4gNi4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgPGJyIC8+IDcuIEdldCB0aGUgbGlmZXRpbWUgb2YgYSBrZXkgc2xvdCAgICB8IFRlc3Rpbmcgb25seSB2b2xhdGlsZSBrZXlzIGFzIG90aGVyIGtleSB0eXBlcyBhcmUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgICAgIHwKLXwgICAgIHwgfCB8ICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBwYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgIHwgMS4gSW52YWxpZCBrZXkgcG9saWN5ICA8YnIgLz4gMi4gWmVybyBrZXkgc2xvdCAgPGJyIC8+IDMuIEludmFsaWQga2V5IHNsb3QgIDxiciAvPiA0LiBFbXB0eSBrZXkgc2xvdCAgfAotfCAgICAgfCB8IHwgICAgfCAgICB8ICAgIHwgICAgfAotfCAqKk1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZXMqKiB8IHRlc3RfYzAxMSB8IHBzYV9oYXNoX3N0YXJ0IHwgU3RhcnQgYSBtdWx0aXBhcnQgaGFzaCBvcGVyYXRpb24uICAgICB8IFBTQV9TVUNDRVNTICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgPGJyIC8+IDIuIFN0YXJ0IGEgbXVsdGlwYXJ0IGhhc2ggb3BlcmF0aW9uIHwgMS4gTUQyICA8YnIgLz4gMi4gTUQ0ICA8YnIgLz4gMy4gTUQ1ICA8YnIgLz4gNC4gUklQRU1EMTYwICA8YnIgLz4gNS4gU0hBMSAgPGJyIC8+IDYuIFNIQTIyNCAgPGJyIC8+IDcuIFNIQTI1NiAgPGJyIC8+IDguIFNIQTUxMiAgPGJyIC8+IDkuIFNIQTUxMl8yMjQgIDxiciAvPiAxMC4gU0hBNTEyXzI1NiAgPGJyIC8+IDExLiBTSEEzXzIyNCAxIDxiciAvPiAyLiBTSEEzXzI1NiAxIDxiciAvPiAzLiBTSEEzXzM4NCAxIDxiciAvPiA0LiBTSEEzXzUxMiB8Ci18ICAgICB8IHwgfCAgICB8IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIHVuc3VwcG9ydGVkIGFsZ29yaXRobSBzaG91bGQgcmV0dXJuIGVycm9yICAgICB8IEludmFsaWQgaGFzaCBhbGdvcml0aG0gfAotfCAgICAgfCB0ZXN0X2MwMTIgfCBwc2FfaGFzaF91cGRhdGUgICAgIHwgQWRkIGEgbWVzc2FnZSBmcmFnbWVudCB0byBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbi4gICAgIHwgUFNBX1NVQ0NFU1MgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICA8YnIgLz4gMi4gU3RhcnQgYSBtdWx0aXBhcnQgaGFzaCBvcGVyYXRpb24gIDxiciAvPiAzLiBBZGQgYSBtZXNzYWdlIGZyYWdtZW50IHRvIGEgbXVsdGlwYXJ0IGhhc2ggb3BlcmF0aW9uICAgICB8IDEuIE1EMiAgPGJyIC8+IDIuIE1ENCAgPGJyIC8+IDMuIE1ENSAgPGJyIC8+IDQuIFJJUEVNRDE2MCAgPGJyIC8+IDUuIFNIQTEgIDxiciAvPiA2LiBTSEEyMjQgIDxiciAvPiA3LiBTSEEyNTYgIDxiciAvPiA4LiBTSEEzODQgIDxiciAvPiA5LiBTSEE1MTIgIHwKLXwgICAgIHwgfCB8ICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgY2FsbGluZyB0aGUgcHNhX2hhc2hfc3RhcnQoKSBzaG91bGQgcmV0dXJuIGVycm9yICAgICB8IEluYWN0aXZlIG9wZXJhdGlvbiBoYW5kbGUgICB8Ci18ICAgICB8IHwgfCAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGNvbXBsZXRlZCBvcGVyYXRpb24gaGFuZGxlIHNob3VsZCByZXR1cm4gZXJyb3IgICAgIHwgQ29tcGxldGVkIG9wZXJhdGlvbiBoYW5kbGUgIHwKLXwgICAgIHwgdGVzdF9jMDEzIHwgcHNhX2hhc2hfdmVyaWZ5ICAgICB8IEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGhhc2ggb2YgYSBtZXNzYWdlIGFuZCBjb21wYXJlIGl0IHdpdGggYW4gZXhwZWN0ZWQgdmFsdWUuICB8IFBTQV9TVUNDRVNTICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgPGJyIC8+IDIuIFN0YXJ0IGEgbXVsdGlwYXJ0IGhhc2ggb3BlcmF0aW9uICA8YnIgLz4gMy4gQWRkIGEgbWVzc2FnZSBmcmFnbWVudCB0byBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbiAgPGJyIC8+IDQuIEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGhhc2ggb2YgYSBtZXNzYWdlIGFuZCBjb21wYXJlIGl0IHdpdGggYW4gZXhwZWN0ZWQgdmFsdWUgfCAxLiBNRDIgIDxiciAvPiAyLiBNRDQgIDxiciAvPiAzLiBNRDUgIDxiciAvPiA0LiBSSVBFTUQxNjAgIDxiciAvPiA1LiBTSEExICA8YnIgLz4gNi4gU0hBMjI0ICA8YnIgLz4gNy4gU0hBMjU2ICA8YnIgLz4gOC4gU0hBMzg0ICA8YnIgLz4gOS4gU0hBNTEyICB8Ci18ICAgICB8IHwgfCAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGluYWN0aXZlIG9wZXJhdGlvbiBoYW5kbGUgc2hvdWxkIHJldHVybiBlcnJvciB8IEluYWN0aXZlIG9wZXJhdGlvbiBoYW5kbGUgICB8Ci18ICAgICB8IHwgfCAgICB8IFBTQV9FUlJPUl9JTlZBTElEX1NJR05BVFVSRSB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGluY29ycmVjdCBleHBlY3RlZCB2YWx1ZSBzaG91bGQgcmV0dXJuIGVycm9yICB8IDEuIEluY29ycmVjdCBleHBlY3RlZCBoYXNoIHZhbHVlICA8YnIgLz4gMi4gSW5jb3JyZWN0IGV4cGVjdGVkIGhhc2ggbGVuZ3RoICB8Ci18ICAgICB8IHRlc3RfYzAxNCB8IHBzYV9oYXNoX2ZpbmlzaCAgICAgfCBGaW5pc2ggdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBoYXNoIG9mIGEgbWVzc2FnZS4gICAgIHwgUFNBX1NVQ0NFU1MgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICA8YnIgLz4gMi4gU3RhcnQgYSBtdWx0aXBhcnQgaGFzaCBvcGVyYXRpb24gIDxiciAvPiAzLiBBZGQgYSBtZXNzYWdlIGZyYWdtZW50IHRvIGEgbXVsdGlwYXJ0IGhhc2ggb3BlcmF0aW9uICA8YnIgLz4gNC4gRmluaXNoIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgaGFzaCBvZiBhIG1lc3NhZ2UgIDxiciAvPiA1LiBDb21wYXJlIGl0IHdpdGggdGhlIGV4cGVjdGVkIHZhbHVlIHwgMS4gTUQyICA8YnIgLz4gMi4gTUQ0ICA8YnIgLz4gMy4gTUQ1ICA8YnIgLz4gNC4gUklQRU1EMTYwICA8YnIgLz4gNS4gU0hBMSAgPGJyIC8+IDYuIFNIQTIyNCAgPGJyIC8+IDcuIFNIQTI1NiAgPGJyIC8+IDguIFNIQTM4NCAgPGJyIC8+IDkuIFNIQTUxMiAgfAotfCAgICAgfCB8IHwgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBhbiBpbmFjdGl2ZSBvcGVyYXRpb24gaGFuZGxlIHNob3VsZCByZXR1cm4gZXJyb3IgICB8IEluYWN0aXZlIG9wZXJhdGlvbiBoYW5kbGUgICB8Ci18ICAgICB8IHwgfCAgICB8IFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGEgaGFzaCBidWZmZXIgd2hvc2Ugc2l6ZSBpcyBsZXNzIHRoYW4gdGhlIGFsZ29yaXRobSBvdXRwdXQgc2hvdWxkIHJldHVybiBlcnJvciAgIHwgQnVmZmVyIHNpemUgbGVzcyB0aGFuIHJlcXVpcmVkICAgfAotfCAgICAgfCB0ZXN0X2MwMTUgfCBwc2FfaGFzaF9hYm9ydCB8IEFib3J0IGEgaGFzaCBvcGVyYXRpb24uICAgICB8IFBTQV9TVUNDRVNTICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgPGJyIC8+IDIuIFN0YXJ0IGEgbXVsdGlwYXJ0IGhhc2ggb3BlcmF0aW9uICA8YnIgLz4gMy4gQWJvcnQgYSBoYXNoIG9wZXJhdGlvbiAgICAgfCAxLiBNRDIgIDxiciAvPiAyLiBNRDQgIDxiciAvPiAzLiBNRDUgIDxiciAvPiA0LiBSSVBFTUQxNjAgIDxiciAvPiA1LiBTSEExICA8YnIgLz4gNi4gU0hBMjI0ICA8YnIgLz4gNy4gU0hBMjU2ICA8YnIgLz4gOC4gU0hBMzg0ICA8YnIgLz4gOS4gU0hBNTEyICB8Ci18ICAgICB8IHwgfCAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICB8IENhbGxpbmcgcHNhX2hhc2hfZmluaXNoIGFmdGVyIGNhbGxpbmcgcHNhX2hhc2hfYWJvcnQgc2hvdWxkIHJldHVybiBlcnJvciB8ICAgIHwKK3wgR3JvdXAgICAgICAgICAgICAgICAgICAgICAgICB8IFRlc3QgICAgICB8IEZ1bmN0aW9uICAgICAgICAgICAgICAgICAgIHwgU2NlbmFyaW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUmV0dXJuIFZhbHVlICAgICAgICAgICAgICAgICAgICB8IFN0ZXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUZXN0IENhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Cit8IEJhc2ljICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMDEgfCBwc2FfY3J5cHRvX2luaXQgICAgICAgICAgICB8IExpYnJhcnkgaW5pdGlhbGl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBTVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQXBwbGljYXRpb25zIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBjYWxsaW5nIGFueSBvdGhlciBmdW5jdGlvbiBpbiB0aGlzIG1vZHVsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IFRyeSBjYWxsaW5nIGNyeXB0byBvcGVyYXRpb25zIGRvaW5nIGEgY3J5cHRvX2luaXQgc2hvdWxkIGJlIHN1Y2Nlc3NmdWwoY2FuIGJlIGNvdmVyZWQgYXMgcGFydCBvZiBvdGhlciB0ZXN0Y2FzZSkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBcHBsaWNhdGlvbnMgbWF5IGNhbGwgdGhpcyBmdW5jdGlvbiBtb3JlIHRoYW4gb25jZS4gT25jZSBhIGNhbGwgc3VjY2VlZHMsIHN1YnNlcXVlbnQgY2FsbHMgYXJlIGd1YXJhbnRlZWQgdG8gc3VjY2VlZC4gfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgVHJ5IGNhbGxpbmcgbXVsdGlwbGUgY3J5cHRvIGluaXQgYW5kIHNob3VsZCByZXR1cm4gU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFwcGxpY2F0aW9ucyBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgY2FsbGluZyBhbnkgb3RoZXIgZnVuY3Rpb24gaW4gdGhpcyBtb2R1bGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9CQURfU1RBVEUgICAgICAgICAgICAgfCBUcnkgY2FsbGluZyBjcnlwdG8gb3BlcmF0aW9ucyB3aXRob3V0IGRvaW5nIGEgY3J5cHRvX2luaXQgc2hvdWxkIHJldHVybiBGQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBLZXkgTWFuYWdlbWVudCAgICAgICAgICAgICAgIHwgdGVzdF9jMDAyIHwgcHNhX2ltcG9ydF9rZXkgICAgICAgICAgICAgfCBJbXBvcnQgYSBrZXkgaW4gYmluYXJ5IGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIDE2IEJ5dGUgQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwgdXNhZ2Ugb2YgdGhlIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gMjQgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAzLiAzMiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIDIwNDggUlNBIHB1YmxpYyBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gMjA0OCBSU0Ega2V5cGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIEdldCBiYXNpYyBtZXRhZGF0YSBhYm91dCBhIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBERVMgNjQgYml0IGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gRXhwb3J0IGEga2V5IGluIGJpbmFyeSBmb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIFRyaXBsZSBERVMgMi1LZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiBDaGVjayBpZiBvcmlnaW5hbCBrZXkgZGF0YSBtYXRjaGVzIHdpdGggdGhlIGV4cG9ydGVkIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gVHJpcGxlIERFUyAzLUtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBFQyBQdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLiBFQyBrZXlwYWlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBpbmNvcnJlY3Qga2V5IHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW5jb3JyZWN0IGtleSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGludmFsaWQgcGFyYW1ldGVyIHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBLZXkgZGF0YSBncmVhdGVyIHRoYW4gdGhlIGFsZ29yaXRobSBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluY29ycmVjdCBrZXkgZGF0YSBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBrZXkgaGFuZGxlIHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEludmFsaWQga2V5IHNsb3QgPC9icj4gMi4gWmVybyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9PQ0NVUElFRF9TTE9UICAgICAgICAgfCBQYXNzIHRoZSBrZXkgc2xvdCB0byBzdG9yZSBkYXRhIHdoaWNoIGlzIGFscmVhZHkgb2NjdXBpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQWxyZWFkeSBvY2N1cGllZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAwMyB8IHBzYV9leHBvcnRfa2V5ICAgICAgICAgICAgIHwgRXhwb3J0IGEga2V5IGluIGJpbmFyeSBmb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAxNiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsIHVzYWdlIG9mIHRoZSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIDI0IEJ5dGUgQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAzLiAzMiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIDIwNDggUlNBIHB1YmxpYyBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gMjA0OCBSU0Ega2V5cGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIEdldCBiYXNpYyBtZXRhZGF0YSBhYm91dCBhIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBERVMgNjQgYml0IGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gRXhwb3J0IGEga2V5IGluIGJpbmFyeSBmb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIFRyaXBsZSBERVMgMi1LZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiBDaGVjayBpZiBvcmlnaW5hbCBrZXkgZGF0YSBtYXRjaGVzIHdpdGggdGhlIGV4cG9ydGVkIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gVHJpcGxlIERFUyAzLUtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBFQyBQdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLiBFQyBrZXlwYWlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBidWZmZXIgc2l6ZSBsZXNzIHRoYW4gcmVxdWlyZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTGVzcyBidWZmZXIgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGludmFsaWQgcGFyYW1ldGVyIHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBaZXJvIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEludmFsaWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9CQURfU1RBVEUgICAgICAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBrZXkgcG9saWN5IHRoYXQgY2Fubm90IGJlIGV4cG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW52YWxpZCBrZXkgcG9saWN5IHVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0VNUFRZX1NMT1QgICAgICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGVtcHR5IGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbXB0eSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDA0IHwgcHNhX2V4cG9ydF9wdWJsaWNfa2V5ICAgICAgfCBFeHBvcnQgYSBwdWJsaWMga2V5IG9yIHRoZSBwdWJsaWMgcGFydCBvZiBhIGtleSBwYWlyIGluIGJpbmFyeSBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIDIwNDggUlNBIHB1YmxpYyBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwgdXNhZ2Ugb2YgdGhlIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gMjA0OCBSU0Ega2V5cGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAzLiBFQyBQdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIEVDIGtleXBhaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIEdldCBiYXNpYyBtZXRhZGF0YSBhYm91dCBhIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gRXhwb3J0IGEga2V5IGluIGJpbmFyeSBmb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiBDaGVjayBpZiBvcmlnaW5hbCBrZXkgZGF0YSBtYXRjaGVzIHdpdGggdGhlIGV4cG9ydGVkIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAxNiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsIHVzYWdlIG9mIHRoZSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIDI0IEJ5dGUgQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gMzIgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBERVMgNjQgYml0IGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIFRyaXBsZSBERVMgMi1LZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBHZXQgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gVHJpcGxlIERFUyAzLUtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gQ2hlY2sgaWYgb3JpZ2luYWwga2V5IGRhdGEgbWF0Y2hlcyB3aXRoIHRoZSBleHBvcnRlZCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBidWZmZXIgc2l6ZSBsZXNzIHRoYW4gcmVxdWlyZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTGVzcyBidWZmZXIgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGludmFsaWQgcGFyYW1ldGVyIHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBaZXJvIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEludmFsaWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9CQURfU1RBVEUgICAgICAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBrZXkgcG9saWN5IHRoYXQgY2Fubm90IGJlIGV4cG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW52YWxpZCBrZXkgcG9saWN5IHVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAwNSB8IHBzYV9kZXN0cm95X2tleSAgICAgICAgICAgIHwgRGVzdHJveSBhIGtleSBhbmQgcmVzdG9yZSB0aGUgc2xvdCB0byBpdHMgZGVmYXVsdCBzdGF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAxNiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsIHVzYWdlIG9mIHRoZSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIDI0IEJ5dGUgQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gMzIgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiAyMDQ4IFJTQSBwdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIDIwNDggUlNBIGtleXBhaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBHZXQgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gREVTIDY0IGJpdCBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIERlc3Ryb3kgYSBrZXkgYW5kIHJlc3RvcmUgdGhlIHNsb3QgdG8gaXRzIGRlZmF1bHQgc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBUcmlwbGUgREVTIDItS2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gQ2hlY2sgdGhhdCBpZiB0aGUga2V5IG1ldGFkYXRhIGFyZSBkZXN0cm95ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDguIFRyaXBsZSBERVMgMy1LZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOS4gRUMgUHVibGljIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMC4gRUMga2V5cGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBwYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEludmFsaWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gWmVybyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBFbXB0eSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDA2IHwgcHNhX2dldF9rZXlfaW5mb3JtYXRpb24gICAgfCBHZXQgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYSBrZXkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIDE2IEJ5dGUgQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwgdXNhZ2Ugb2YgdGhlIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gMjQgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAzLiAzMiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIDIwNDggUlNBIHB1YmxpYyBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gMjA0OCBSU0Ega2V5cGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIEdldCBiYXNpYyBtZXRhZGF0YSBhYm91dCBhIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBERVMgNjQgYml0IGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIFRyaXBsZSBERVMgMi1LZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gVHJpcGxlIERFUyAzLUtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBFQyBQdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLiBFQyBrZXlwYWlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBpbnZhbGlkIHBhcmFtZXRlciBzaG91bGQgcmV0dXJuIHRoaXMgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gWmVybyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbnZhbGlkIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfRU1QVFlfU0xPVCAgICAgICAgICAgIHwgUGFzcyB0aGUga2V5IHNsb3QgbnVtYmVyIHdoaWNoIGhhcyB0aGUga2V5IHR5cGUgYXMgbm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVtcHR5IGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOTyBURVNUICAgfCBwc2Ffa2V5X3BvbGljeV9zZXRfdXNhZ2UgICB8IFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBWb2lkIGZ1bmN0aW9uLiBDb3ZlcmVkIGFzIHBhcnQgb2Ygb3RoZXIgY2FzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBLZXkgUG9saWNpZXMgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDA3IHwgcHNhX3NldF9rZXlfcG9saWN5ICAgICAgICAgfCBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIDE2IEJ5dGUgQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwgdXNhZ2Ugb2YgdGhlIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gMjQgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAzLiAzMiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIDIwNDggUlNBIHB1YmxpYyBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gMjA0OCBSU0Ega2V5cGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIEdldCB0aGUgdXNhZ2UgcG9saWN5IGZvciBhIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBERVMgNjQgYml0IGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gQ2hlY2sgaWYgdGhlIHBvbGljeSBtYXRjaGVzIHRoZSBvcmlnaW5hbCBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIFRyaXBsZSBERVMgMi1LZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gVHJpcGxlIERFUyAzLUtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBFQyBQdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLiBFQyBrZXlwYWlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBpbnZhbGlkIHBhcmFtZXRlciBzaG91bGQgcmV0dXJuIHRoaXMgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW52YWxpZCBrZXkgcG9saWN5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBaZXJvIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEludmFsaWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9PQ0NVUElFRF9TTE9UICAgICAgICAgfCBQYXNzIHRoZSBrZXkgc2xvdCB0byBzdG9yZSBkYXRhIHdoaWNoIGlzIGFscmVhZHkgb2NjdXBpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQWxyZWFkeSBvY2N1cGllZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAwOCB8IHBzYV9nZXRfa2V5X3BvbGljeSAgICAgICAgIHwgR2V0IHRoZSB1c2FnZSBwb2xpY3kgZm9yIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAxNiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsIHVzYWdlIG9mIHRoZSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIDI0IEJ5dGUgQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gMzIgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiAyMDQ4IFJTQSBwdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gQ2hhbmdlIHRoZSBsaWZldGltZSBvZiBhIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIDIwNDggUlNBIGtleXBhaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gREVTIDY0IGJpdCBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIEdldCB0aGUgdXNhZ2UgcG9saWN5IGZvciBhIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBUcmlwbGUgREVTIDItS2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gUmV0cmlldmUgdGhlIHVzYWdlIGZpZWxkIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDguIFRyaXBsZSBERVMgMy1LZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBSZXRyaWV2ZSB0aGUgYWxnb3JpdGhtIGZpZWxkIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOS4gRUMgUHVibGljIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLiBNYWtlIHN1cmUgdGhleSBtYXRjaCB0aGUgb3JpZ2luYWwgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMC4gRUMga2V5cGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBwYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIFplcm8ga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW52YWxpZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAwOSB8IHBzYV9hbGxvY2F0ZV9rZXkgICAgICAgICAgIHwgQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBWb2xhdGlsZSBrZXlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsIHVzYWdlIG9mIHRoZSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBtdWx0aXBsZSB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMTAgfCBwc2FfZ2V0X2tleV9saWZldGltZSAgICAgICB8IFJldHJpZXZlIHRoZSBsaWZldGltZSBvZiBhIGtleSBzbG90LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGVzdGluZyBvbmx5IHZvbGF0aWxlIGtleXMgYXMgb3RoZXIga2V5IHR5cGVzIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbCB1c2FnZSBvZiB0aGUga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIENoYW5nZSB0aGUgbGlmZXRpbWUgb2YgYSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBHZXQgdGhlIGxpZmV0aW1lIG9mIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBaZXJvIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEludmFsaWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gRW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbnZhbGlkIGtleSBwb2xpY3kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGVzIHwgdGVzdF9jMDExIHwgcHNhX2hhc2hfc3RhcnQgICAgICAgICAgICAgfCBTdGFydCBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIE1EMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBTdGFydCBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gTUQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBNRDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFJJUEVNRDE2MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gU0hBMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBTSEEyMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIFNIQTI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gU0hBNTEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBTSEE1MTJfMjI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLiBTSEE1MTJfMjU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEuIFNIQTNfMjI0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBTSEEzXzI1NiAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIFNIQTNfMzg0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU0hBM181MTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIHVuc3VwcG9ydGVkIGFsZ29yaXRobSBzaG91bGQgcmV0dXJuIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnZhbGlkIGhhc2ggYWxnb3JpdGhtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDEyIHwgcHNhX2hhc2hfdXBkYXRlICAgICAgICAgICAgfCBBZGQgYSBtZXNzYWdlIGZyYWdtZW50IHRvIGEgbXVsdGlwYXJ0IGhhc2ggb3BlcmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIE1EMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBTdGFydCBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gTUQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFkZCBhIG1lc3NhZ2UgZnJhZ21lbnQgdG8gYSBtdWx0aXBhcnQgaGFzaCBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBNRDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFJJUEVNRDE2MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gU0hBMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBTSEEyMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIFNIQTI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gU0hBMzg0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBTSEE1MTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgY2FsbGluZyB0aGUgcHNhX2hhc2hfc3RhcnQoKSBzaG91bGQgcmV0dXJuIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEluYWN0aXZlIG9wZXJhdGlvbiBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBjb21wbGV0ZWQgb3BlcmF0aW9uIGhhbmRsZSBzaG91bGQgcmV0dXJuIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29tcGxldGVkIG9wZXJhdGlvbiBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAxMyB8IHBzYV9oYXNoX3ZlcmlmeSAgICAgICAgICAgIHwgRmluaXNoIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgaGFzaCBvZiBhIG1lc3NhZ2UgYW5kIGNvbXBhcmUgaXQgd2l0aCBhbiBleHBlY3RlZCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBNRDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gU3RhcnQgYSBtdWx0aXBhcnQgaGFzaCBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIE1ENCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBZGQgYSBtZXNzYWdlIGZyYWdtZW50IHRvIGEgbXVsdGlwYXJ0IGhhc2ggb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gTUQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGhhc2ggb2YgYSBtZXNzYWdlIGFuZCBjb21wYXJlIGl0IHdpdGggYW4gZXhwZWN0ZWQgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBSSVBFTUQxNjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIFNIQTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gU0hBMjI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBTSEEyNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDguIFNIQTM4NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOS4gU0hBNTEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGluYWN0aXZlIG9wZXJhdGlvbiBoYW5kbGUgc2hvdWxkIHJldHVybiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbmFjdGl2ZSBvcGVyYXRpb24gaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9TSUdOQVRVUkUgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW5jb3JyZWN0IGV4cGVjdGVkIHZhbHVlIHNob3VsZCByZXR1cm4gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEluY29ycmVjdCBleHBlY3RlZCBoYXNoIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5jb3JyZWN0IGV4cGVjdGVkIGhhc2ggbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAxNCB8IHBzYV9oYXNoX2ZpbmlzaCAgICAgICAgICAgIHwgRmluaXNoIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgaGFzaCBvZiBhIG1lc3NhZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBNRDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gU3RhcnQgYSBtdWx0aXBhcnQgaGFzaCBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIE1ENCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBZGQgYSBtZXNzYWdlIGZyYWdtZW50IHRvIGEgbXVsdGlwYXJ0IGhhc2ggb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gTUQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGhhc2ggb2YgYSBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBSSVBFTUQxNjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gQ29tcGFyZSBpdCB3aXRoIHRoZSBleHBlY3RlZCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIFNIQTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gU0hBMjI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBTSEEyNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDguIFNIQTM4NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOS4gU0hBNTEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGFuIGluYWN0aXZlIG9wZXJhdGlvbiBoYW5kbGUgc2hvdWxkIHJldHVybiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbmFjdGl2ZSBvcGVyYXRpb24gaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTCAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggYSBoYXNoIGJ1ZmZlciB3aG9zZSBzaXplIGlzIGxlc3MgdGhhbiB0aGUgYWxnb3JpdGhtIG91dHB1dCBzaG91bGQgcmV0dXJuIGVycm9yICAgICAgICB8IEJ1ZmZlciBzaXplIGxlc3MgdGhhbiByZXF1aXJlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMTUgfCBwc2FfaGFzaF9hYm9ydCAgICAgICAgICAgICB8IEFib3J0IGEgaGFzaCBvcGVyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gTUQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFN0YXJ0IGEgbXVsdGlwYXJ0IGhhc2ggb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBNRDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWJvcnQgYSBoYXNoIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIE1ENSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gUklQRU1EMTYwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBTSEExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIFNIQTIyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gU0hBMjU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiBTSEEzODQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDkuIFNIQTUxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICAgICAgfCBDYWxsaW5nIHBzYV9oYXNoX2ZpbmlzaCBhZnRlciBjYWxsaW5nIHBzYV9oYXNoX2Fib3J0IHNob3VsZCByZXR1cm4gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgR2VuZXJhdG9yICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAxNiB8IHBzYV9nZW5lcmF0ZV9rZXkgICAgICAgICAgIHwgR2VuZXJhdGUgYSBrZXkgb3Iga2V5IHBhaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIERFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gRUNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBSU0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gR2VuZXJhdGUgYSBrZXkgb3Iga2V5IHBhaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBHZXQgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIENoZWNrIGlmIGtleSB0eXBlIGFuZCBrZXkgbGVuZ3RoIG1hdGNoZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gRXhwb3J0IGEga2V5IGluIGJpbmFyeSBmb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBDaGVjayBpZiB0aGUgbWV0YWRhdGEgbWF0Y2hlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGludmFsaWQga2V5IHNsb3Qgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnZhbGlkIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggemVybyBhcyBrZXkgc2xvdCBzaG91bGQgcmV0dXJuIHRoaXMgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFplcm8gYXMga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBOdWxsIGV4dHJhIGFuZCBOb24tWmVybyBleHRyYSBzaXplIHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTnVsbCBleHRyYSBhbmQgTm9uLVplcm8gZXh0cmEgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX09DQ1VQSUVEX1NMT1QgICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIHByZS1vY2N1cGllZCBrZXkgc2xvdCBzaG91bGQgcmV0dXJuIHRoaXMgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQcmUtb2NjdXBpZWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCAgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIG9ubHkgcHVibGljIGtleSBzaG91bGQgcmV0dXJuIHRoaXMgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtleSB0eXBlIGFzIHB1YmxpYyBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMTcgfCBwc2FfZ2VuZXJhdGVfcmFuZG9tICAgICAgICB8IEdlbmVyYXRlIHJhbmRvbSBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gMTYgQnl0ZSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEdlbmVyYXRlIHJhbmRvbSBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiAyNCBCeXRlIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQ2hlY2sgdGhhdCBpZiBnZW5lcmF0ZWQgZGF0YSBhcmUgTm9uLVplcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIDMyIEJ5dGUgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gNjQgQnl0ZSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiAxMjggQnl0ZSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIDI1NiBCeXRlIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gNTEyIEJ5dGUgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiAxMDAwIEJ5dGUgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDkuIDEwMjQgQnl0ZSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMTggfCBwc2FfZ2VuZXJhdG9yX3JlYWQgICAgICAgICB8IFJlYWQgc29tZSBkYXRhIGZyb20gYSBnZW5lcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gMTYgQnl0ZSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiAzMiBCeXRlIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8IDMuIDggQnl0ZSBLZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU0hBIDI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBTSEEgNTEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gU2V0IHVwIGEga2V5IGRlcml2YXRpb24gb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIFNIQSAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBHZW5lcmF0ZSByYW5kb20gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gT3V0cHV0IHNpemUgbGVzcyB0aGFuIGdlbmVyYXRvciBjYXBhY2l0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDguIENoZWNrIHRoYXQgaWYgZ2VuZXJhdGVkIGRhdGEgYXJlIG5vbi16ZXJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiBPdXRwdXQgc2l6ZSBlcXVhbCB0byBnZW5lcmF0b3IgY2FwYWNpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOS4gR2VuZXJhdGUgcmFuZG9tIGJ5dGVzIGZvciByZW1haW5pbmcgY2FwYWNpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDkuIFJlcXVlc3QgbWF4aW11bSBjYXBhY2l0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMC4gQ2hlY2sgdGhhdCBpZiBnZW5lcmF0ZWQgZGF0YSBhcmUgbm9uLXplcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExLiBHZW5lcmF0ZSByYW5kb20gYnl0ZXMgYW5kIGNoZWNrIHRoYXQgaXQgZmFpbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX0NBUEFDSVRZIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggb3V0cHV0IHNpemUgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGNhcGFjaXR5IHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICB8IG91dHB1dCBzaXplIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBjYXBhY2l0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfQ0FQQUNJVFkgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBjYXBhY2l0eSBncmVhdGVyIHRoYW4gdGhlIGFsbG93ZWQgY2FwYWNpdHkgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgIHwgcmVxdWVzdCBtYXhpbXVtIGNhcGFjaXR5ICsxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAxOSB8IHBzYV9nZW5lcmF0b3JfZ2V0X2NhcGFjaXR5IHwgUmV0cmlldmUgdGhlIGN1cnJlbnQgY2FwYWNpdHkgb2YgYSBnZW5lcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBPdXRwdXQgc2l6ZSBsZXNzIHRoYW4gZ2VuZXJhdG9yIGNhcGFjaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIE91dHB1dCBzaXplIGVxdWFsIHRvIGdlbmVyYXRvciBjYXBhY2l0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBTZXQgdXAgYSBrZXkgZGVyaXZhdGlvbiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIFJldHJpZXZlIHRoZSBjdXJyZW50IGNhcGFjaXR5IG9mIGEgZ2VuZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gQ2hlY2sgdGhhdCBpdCBpcyBlcXVhbCB0byB0aGUgaW5wdXQgY2FwYWNpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBHZW5lcmF0ZSByYW5kb20gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLiBSZXRyaWV2ZSB0aGUgY3VycmVudCBjYXBhY2l0eSBvZiBhIGdlbmVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEuIENoZWNrIHRoYXQgaXQgaXMgZXF1YWwgdG8gdGhlIHJlbWFpbmluZyBjYXBhY2l0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMjAgfCBwc2FfZ2VuZXJhdG9yX2ltcG9ydF9rZXkgICB8IENyZWF0ZSBhIHN5bW1ldHJpYyBrZXkgZnJvbSBkYXRhIHJlYWQgZnJvbSBhIGdlbmVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gMTYgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiAzMiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gU2V0IHVwIGEga2V5IGRlcml2YXRpb24gb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgZm9yIG5ldyBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDguIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOS4gU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBuZXcga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMC4gQ3JlYXRlIGEgc3ltbWV0cmljIGtleSBmcm9tIGRhdGEgcmVhZCBmcm9tIGEgZ2VuZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExLiBFeHBvcnQgYSBrZXkgaW4gYmluYXJ5IGZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIuIENoZWNrIHRoYXQgbGVuZ3RoIG9mIHRoZSBrZXkgbWF0Y2hlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMy4gQ2hlY2sgdGhhdCB0aGUga2V5IGlzIG5vbi16ZXJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0LiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgZm9yIG5ldyBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUuIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNi4gU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBuZXcga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE3LiBDcmVhdGUgYSBzeW1tZXRyaWMga2V5IGZyb20gZGF0YSByZWFkIGZyb20gYSBnZW5lcmF0b3IgZm9yIHRoZSByZW1haW5pbmcgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTguIEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxOS4gQ2hlY2sgdGhhdCBsZW5ndGggb2YgdGhlIGtleSBtYXRjaGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIwLiBDaGVjayB0aGF0IHRoZSBrZXkgaXMgbm9uLXplcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjEuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSBmb3IgbmV3IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMi4gU2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIzLiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIG5ldyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjQuIENyZWF0ZSBhIHN5bW1ldHJpYyBrZXkgZnJvbSBkYXRhIHJlYWQgZnJvbSBhIGdlbmVyYXRvciBmb3IgdGhlIHNvbWUgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDaGVjayB0aGF0IGl0IGZhaWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9DQVBBQ0lUWSB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIG91dHB1dCBncmVhdGVyIHRoYW4gY2FwYWNpdHkgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPdXRwdXQgZ3JlYXRlciB0aGFuIGNhcGFjaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggcHVibGljIGtleSBhbGdvcml0aG0gc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIFJTQSBwdWJsaWMga2V5IDwvYnI+Mi5JbnZhbGlkIGtleSBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBpbnZhbGlkIGFyZ3VtZW50cyBzaG91bGQgcmV0dXJuIHRoaXMgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW52YWxpZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBaZXJvIGFzIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9PQ0NVUElFRF9TTE9UICAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBhbHJlYWR5IG9jY3VwaWVkIGtleSBzbG90IHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUHJlLW9jY3VwaWVkIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAyMSB8IHBzYV9nZW5lcmF0b3JfYWJvcnQgICAgICAgIHwgQWJvcnQgYSBnZW5lcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBBYm9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIE11bHRpcGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gQ2FsbGluZyBnZW5lcmF0b3IgZnVuY3Rpb25zIGFmdGVyIGFib3J0IHNob3VsZCBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBTZXQgdGhlIGtleSBmb3IgYSBtdWx0aXBhcnQgc3ltbWV0cmljIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIEFib3J0IGEgY2lwaGVyIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gTXVsdGlwbGUgYWJvcnQgY2lwaGVyIG9wZXJhdGlvbiBzaG91bGQgcmV0dXJuIHN1Y2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IEtleSBkZXJpdmF0aW9uICAgICAgICAgICAgICAgfCB0ZXN0X2MwMjIgfCBwc2Ffa2V5X2Rlcml2YXRpb24gICAgICAgICB8IFNldCB1cCBhIGtleSBkZXJpdmF0aW9uIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gMTYgQnl0ZSBkYXRhIHdpdGggU0hBLTI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiAzMiBieXRlIGRhdGEgd2l0aCBTSEEtNTEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8IDMuIDMyIEJ5dGUgZGF0YSB3aXRoIE1ELTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU2FsdCBhbmQgbGFiZWwgcHJvdmlkZWQgYXMgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIFNldCB1cCBhIGtleSBkZXJpdmF0aW9uIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gUmV0cmlldmUgdGhlIGN1cnJlbnQgY2FwYWNpdHkgb2YgYSBnZW5lcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBNYWtlIHN1cmUgdGhhdCB0aGUgY2FwYWNpdHkgaXMgc2FtZSBhcyBpbnB1dCBjYXBhY2l0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0lOVkFMSURfQVJHVU1FTlQgICAgICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGludmFsaWQgYXJndW1lbnQgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbnZhbGlkIGFsZ29yaXRobSAyLiBVbnN1cHBvcnRlZCBnZW5lcmF0b3IgY2FwYWNpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIFVuc3VwcG9ydGVkIGtleSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3RvaW4gd2loIGluY29ycmVjdCBrZXkgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW52YWxpZCBrZXkgaGFuZGxlIDwvYnI+Mi4gWmVybyBhcyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0VNUFRZX1NMT1QgICAgICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGVtcHR5IGtleSBzbG90IHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbXB0eSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBLZXkgcG9saWNpZXMgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDIzIHwgcHNhX2tleV9wb2xpY3lfZ2V0X3VzYWdlICAgfCBSZXRyaWV2ZSB0aGUgdXNhZ2UgZmllbGQgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEVuY3J5cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gRGVjcnlwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAzLiBFeHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gUmV0cmlldmUgdGhlIHVzYWdlIGZpZWxkIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBDaGVjayB0aGF0IHVzYWdlIGlzIHNhbWUgYXMgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gVmVyaWZ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBEZXJpdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBBRUFEICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDI0IHwgcHNhX2FlYWRfZW5jcnlwdCAgICAgICAgICAgfCBQcm9jZXNzIGFuIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENDTSAtIDE2QiBBRVMgLSBOb3VuY2UgYW5kIGFkZGl0aW9uYWwgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gR0NNIC0gMTZCIEFFUyAtIE5VTEwgTm91bmNlICYgYWRkaSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAzLiBHQ00gLTE2QiBBRVMgLSAxMkIgTm91bmNlICYgMTJCIGFkZGkgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIENDTSAtIDE2QiBBRVMgLSAxM0IgTm91bmNlICYgOEIgYWRkaSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIENhbGwgYWVhZCBlbmNyeXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gQ2hlY2sgaWYgdGhlIHN0YXR1cyBpcyBleHBlY3RlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiBDaGVjayBpZiB0aGUgY2lwaGVyIHRleHQgaXMgZXhwZWN0ZWQgbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBERVMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFVuc3VwcG9ydGVkIGFsZ29yaXRobSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9FTVBUWV9TTE9UICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBaZXJvIGFzIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEludmFsaWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gU21hbGwgb3V0cHV0IGJ1ZmZlciBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbnZhbGlkIGtleSB1c2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDI1IHwgcHNhX2FlYWRfZGVjcnlwdCAgICAgICAgICAgfCBQcm9jZXNzIGFuIGF1dGhlbnRpY2F0ZWQgZGVjcnlwdGlvbiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENDTSAtIDE2QiBBRVMgLSBOb3VuY2UgYW5kIGFkZGl0aW9uYWwgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gR0NNIC0gMTZCIEFFUyAtIE5VTEwgTm91bmNlICYgYWRkaSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAzLiBHQ00gLTE2QiBBRVMgLSAxMkIgTm91bmNlICYgMTJCIGFkZGkgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIENDTSAtIDE2QiBBRVMgLSAxM0IgTm91bmNlICYgOEIgYWRkaSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIENhbGwgYWVhZCBkZWNyeXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gQ2hlY2sgaWYgdGhlIHN0YXR1cyBpcyBleHBlY3RlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiBDaGVjayBpZiB0aGUgcGxhaW4gdGV4dCBpcyBleHBlY3RlZCBsZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBERVMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFVuc3VwcG9ydGVkIGFsZ29yaXRobSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9FTVBUWV9TTE9UICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBaZXJvIGFzIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEludmFsaWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gU21hbGwgb3V0cHV0IGJ1ZmZlciBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbnZhbGlkIGtleSB1c2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGVzIHwgdGVzdF9jMDI2IHwgcHNhX21hY19zaWduX3NldHVwICAgICAgICAgfCBTdGFydCBhIG11bHRpcGFydCBNQUMgY2FsY3VsYXRpb24gb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIDY0IEJ5dGUgSE1BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gMTYgQnl0ZSBBRVMgLSBDTUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIFN0YXJ0IGEgbXVsdGlwYXJ0IE1BQyBjYWxjdWxhdGlvbiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIDE2IEJ5dGUgQUVTIC0gR01BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5jb21wYXRpYmxlIEhNQUMgZm9yIENNQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBCYWQgYWxnb3JpdGhtICh1bmtub3duIE1BQyBhbGdvcml0aG0pPGJyIC88ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludmFsaWQgdXNhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9FTVBUWV9TTE9UICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbnZhbGlkIGtleSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFRydW5jYXRlZCBNQUMgdG9vIGxhcmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAyNyB8IHBzYV9tYWNfdXBkYXRlICAgICAgICAgICAgIHwgQWRkIGEgbWVzc2FnZSBmcmFnbWVudCB0byBhIG11bHRpcGFydCBNQUMgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLjY0IEJ5dGUgSE1BQyBTSEEyNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIDE2IEJ5dGUgQUVTIC0gQ01BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gMzIgQnl0ZSBITUFDIFNIQTUxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBTdGFydCBhIG11bHRpcGFydCBNQUMgY2FsY3VsYXRpb24gb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIEFkZCBhIG1lc3NhZ2UgZnJhZ21lbnQgdG8gYSBtdWx0aXBhcnQgTUFDIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gQ2hlY2sgZm9yIHRoZSBleHBlY3RlZCBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBJZiBzdWNjZXNzLCBGaW5pc2ggdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBNQUMgb2YgYSBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLiBBZGQgYSBtZXNzYWdlIGZyYWdtZW50IHRvIHRoZSBzYW1lIG11bHRpcGFydCBNQUMgb3BlcmF0aW9uIHNob3VsZCBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfQkFEX1NUQVRFICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENvbXBsZXRlZCBvcGVyYXRpb24gYXMgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gVW5pbml0aWFsaXplZCBvcGVyYXRpb24gYXMgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAyOCB8IHBzYV9tYWNfc2lnbl9maW5pc2ggICAgICAgIHwgRmluaXNoIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgTUFDIG9mIGEgbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBITUFDIFNIQSAyMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEhNQUMgU0hBIDI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gSE1BQyBTSEEgNTEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBITUFDIFNIQSAyMjQgKHRydW5jYXRlZCB0byA4IEJ5dGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIENNQUMgQUVTIDEyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBTdGFydCBhIG11bHRpcGFydCBNQUMgY2FsY3VsYXRpb24gb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIEFkZCBhIG1lc3NhZ2UgZnJhZ21lbnQgdG8gYSBtdWx0aXBhcnQgTUFDIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gRmluaXNoIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgTUFDIG9mIGEgbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBDaGVjayBmb3IgdGhlIGV4cGVjdGVkIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLiBJZiBzdWNjZXNzLCBDaGVjayBpZiB0aGUgTUFDIGxlbmd0aCBtYXRjaGVzIHdpdGggdGhlIGV4cGVjdGVkIGxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEuIENoZWNrIGlmIHRoZSBNQUMgZGF0YSBtYXRjaGVzIHdpdGggdGhlIGV4cGVjdGVkIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMi4gRmluaXNoIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgTUFDIG9mIGEgbWVzc2FnZSB1c2luZyBzYW1lIG9wZXJhdGlvbiBzaG91bGQgcmV0dXJuIGVycm9yICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTbWFsbCBzaXplIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfQkFEX1NUQVRFICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludmFsaWQgb3BlcmF0aW9uIGFzIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMjkgfCBwc2FfbWFjX3ZlcmlmeV9zZXR1cCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gNjQgQnl0ZSBITUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiAxNiBCeXRlIEFFUyAtIENNQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gU3RhcnQgYSBtdWx0aXBhcnQgTUFDIHZlcmlmaWNhdGlvbiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBDaGVjayBmb3IgdGhlIGV4cGVjdGVkIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAxNiBCeXRlIEFFUyAtIEdNQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluY29tcGF0aWJsZSBITUFDIGZvciBDTUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQmFkIGFsZ29yaXRobSAodW5rbm93biBNQUMgYWxnb3JpdGhtKTxiciAvPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnZhbGlkIHVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfRU1QVFlfU0xPVCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVtcHR5IHNsb3QgYXMgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW52YWxpZCBrZXkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBUcnVuY2F0ZWQgTUFDIHRvbyBsYXJnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDMwIHwgcHNhX21hY192ZXJpZnlfZmluaXNoICAgICAgfCBGaW5pc2ggdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBNQUMgb2YgYSBtZXNzYWdlIGFuZCBjb21wYXJlIGl0IHdpdGggYW4gZXhwZWN0ZWQgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEhNQUMgU0hBIDIyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSE1BQyBTSEEgMjU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgfCAzLiBITUFDIFNIQSA1MTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIEhNQUMgU0hBIDIyNCAodHJ1bmNhdGVkIHRvIDggQnl0ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gQ01BQyBBRVMgMTI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIFN0YXJ0IGEgbXVsdGlwYXJ0IE1BQyBjYWxjdWxhdGlvbiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gQWRkIGEgbWVzc2FnZSBmcmFnbWVudCB0byBhIG11bHRpcGFydCBNQUMgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiBGaW5pc2ggdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBNQUMgb2YgYSBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDkuIENoZWNrIGZvciB0aGUgZXhwZWN0ZWQgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAuIEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIE1BQyBvZiBhIG1lc3NhZ2UgdXNpbmcgc2FtZSBvcGVyYXRpb24gc2hvdWxkIHJldHVybiBlcnJvciAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX1NJR05BVFVSRSAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gU21hbGwgc2l6ZSBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbmNvcnJlY3QgZXhwZWN0ZWQgaGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfQkFEX1NUQVRFICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludmFsaWQgb3BlcmF0aW9uIGFzIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMzEgfCBwc2FfbWFjX2Fib3J0ICAgICAgICAgICAgICB8IEFib3J0IGEgTUFDIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gSE1BQyBTSEEgMjI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBITUFDIFNIQSAyNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8IDMuIEhNQUMgU0hBIDUxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gQ01BQyBBRVMgMTI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBITUFDIHRydW5jYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gU3RhcnQgYSBtdWx0aXBhcnQgTUFDIGNhbGN1bGF0aW9uIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIE11bHRpcGxlIGFib3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBBYm9ydCB0aGUgTUFDIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gcHNhX21hY19maW5pc2ggYWZ0ZXIgcHNhX21hY19hYm9ydCBzaG91bGQgcmV0dXJuIGZhaWx1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgU3ltbWV0cmljIENpcGhlcnMgICAgICAgICAgICB8IHRlc3RfYzAzMiB8IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAgIHwgU2V0IHRoZSBrZXkgZm9yIGEgbXVsdGlwYXJ0IHN5bW1ldHJpYyBlbmNyeXB0aW9uIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAxNiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIDI0IEJ5dGUgQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gMzIgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBERVMgNjQgYml0IGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIFRyaXBsZSBERVMgMi1LZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBTZXQgdGhlIGtleSBmb3IgYSBtdWx0aXBhcnQgc3ltbWV0cmljIGVuY3J5cHRpb24gb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gVHJpcGxlIERFUyAzLUtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAxNiBCeXRlIHJhdyBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFVua25vd24gY2lwaGVyIGFsZ29yaXRobSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gSW5jb21wYXRpYmxlIGtleSBBUkM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBOb3QgYSBjaXBoZXIgYWxnb3JpdGhtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEludmFsaWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gWmVybyBhcyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBSU0EgcHVibGljIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIFJTQSBrZXlwYWlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gRUMgUHVibGljIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBFQyBrZXlwYWlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfRU1QVFlfU0xPVCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVtcHR5IGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW5jb3JyZWN0IHVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAzMyB8IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCAgIHwgU2V0IHRoZSBrZXkgZm9yIGEgbXVsdGlwYXJ0IHN5bW1ldHJpYyBkZWNyeXB0aW9uIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBITUFDIFNIQSAyMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEhNQUMgU0hBIDI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gSE1BQyBTSEEgNTEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBDTUFDIEFFUyAxMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIEhNQUMgdHJ1bmNhdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBTZXQgdGhlIGtleSBmb3IgYSBtdWx0aXBhcnQgc3ltbWV0cmljIGRlY3J5cHRpb24gb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gTXVsdGlwbGUgYWJvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBwc2FfbWFjX2ZpbmlzaCBhZnRlciBwc2FfbWFjX2Fib3J0IHNob3VsZCByZXR1cm4gZmFpbHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIDE2IEJ5dGUgcmF3IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gVW5rbm93biBjaXBoZXIgYWxnb3JpdGhtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBJbmNvbXBhdGlibGUga2V5IEFSQzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIE5vdCBhIGNpcGhlciBhbGdvcml0aG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW52YWxpZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBaZXJvIGFzIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFJTQSBwdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gUlNBIGtleXBhaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBFQyBQdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIEVDIGtleXBhaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9FTVBUWV9TTE9UICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnZhbGlkIHVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDM0IHwgcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdiAgICAgfCBHZW5lcmF0ZSBhbiBJViBmb3IgYSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIDE2IEJ5dGUgQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gMjQgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAzLiAzMiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIERFUyA2NCBiaXQga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gVHJpcGxlIERFUyAyLUtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIFNldCB0aGUga2V5IGZvciBhIG11bHRpcGFydCBzeW1tZXRyaWMgZW5jcnlwdGlvbiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBUcmlwbGUgREVTIDMtS2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gR2VuZXJhdGUgYW4gSVYgZm9yIGEgc3ltbWV0cmljIGVuY3J5cHRpb24gb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIEFFUyAtIGxhcmdlIGl2IGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiBDaGVjayB0aGF0IGlmIGdlbmVyYXRlZCBpdiBsZW5ndGggbWF0Y2ggdGhlIGV4cGVjdGVkIGxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gREVTIC0gbGFyZ2UgaXYgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDkuIENoZWNrIHRoYXQgaWYgZ2VuZXJhdGVkIGl2IGFyZSB6ZXJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAuIEdlbmVyYXRpbmcgYW4gSVYgZm9yIGEgc3ltbWV0cmljIGVuY3J5cHRpb24gb3BlcmF0aW9uIHVzaW5nIHRoZSBzYW1lIG9wZXJhdG9yIHNob3VsZCBmYWlsICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gQUVTIC0gc21hbGwgaXYgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBERVMgLSBzbWFsbCBpdiBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDM1IHwgcHNhX2NpcGhlcl9zZXRfaXYgICAgICAgICAgfCBTZXQgdGhlIElWIGZvciBhIHN5bW1ldHJpYyBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIDE2IEJ5dGUgQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gMjQgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAzLiAzMiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIERFUyA2NCBiaXQga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gVHJpcGxlIERFUyAyLUtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIFNldCB0aGUga2V5IGZvciBhIG11bHRpcGFydCBzeW1tZXRyaWMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBUcmlwbGUgREVTIDMtS2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gU2V0IGFuIElWIGZvciBhIHN5bW1ldHJpYyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiBDaGVjayB0aGF0IGlmIGdlbmVyYXRlZCBpdiBsZW5ndGggbWF0Y2ggdGhlIGV4cGVjdGVkIGxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDkuIENoZWNrIHRoYXQgaWYgZ2VuZXJhdGVkIGl2IGFyZSB6ZXJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAuIFNldHRpbmcgYW4gSVYgZm9yIGEgc3ltbWV0cmljIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBvcGVyYXRpb24gdXNpbmcgdGhlIHNhbWUgb3BlcmF0b3Igc2hvdWxkIGZhaWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gQUVTIC0gc21hbGwgaXYgYnVmZmVyIDIuIERFUyAtIHNtYWxsIGl2IGJ1ZmZlciAzLiBBRVMgLSBsYXJnZSBpdiBidWZmZXIgNC4gREVTIC0gbGFyZ2UgaXYgYnVmZmVyIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAzNiB8IHBzYV9jaXBoZXJfdXBkYXRlICAgICAgICAgIHwgRW5jcnlwdCBvciBkZWNyeXB0IGEgbWVzc2FnZSBmcmFnbWVudCBpbiBhbiBhY3RpdmUgY2lwaGVyIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBBRVMgQ0JDX05PX1BBRERJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEFFUyBDQkNfTk9fUEFERElORyAoU2hvcnQgaW5wdXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gQUVTIENCQ19QS0NTNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBBRVMgQ0JDX1BLQ1M3IChTaG9ydCBpbnB1dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIEFFUyBDVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBTZXQgdGhlIGtleSBmb3IgYSBtdWx0aXBhcnQgc3ltbWV0cmljIGVuY3J5cHRpb24gb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gREVTIENCQyAobm9wYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIFNldCBhbiBJViBmb3IgYSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiAyLWtleSAzREUgLUNCQyAobm9wYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gRW5jcnlwdCBvciBkZWNyeXB0IGEgbWVzc2FnZSBmcmFnbWVudCBpbiBhbiBhY3RpdmUgY2lwaGVyIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDguIDMta2V5IDNERSAtQ0JDIChub3BhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBDaGVjayBpZiB0aGUgb3V0cHV0IGxlbmd0aCBtYXRjaGVzIHRoZSBleHBlY3RlZCBsZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLiBDaGVjayBpZiB0aGUgb3V0cHV0IGRhdGEgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEuIEVuY3J5cHQgb3IgZGVjcnlwdCBhIG1lc3NhZ2UgZnJhZ21lbnQgaW4gYW4gaW52YWxpZCBjaXBoZXIgb3BlcmF0aW9uIHNob3VsZCBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9CQURfU1RBVEUgICAgICAgICAgICAgfCBFbmNyeXB0IG9yIGRlY3J5cHQgYSBtZXNzYWdlIGZyYWdtZW50IGluIGFuIGludmFsaWQgY2lwaGVyIG9wZXJhdGlvbiBzaG91bGQgZmFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW52YWxpZCBvcGVyYXRpb24gYXMgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAzNyB8IHBzYV9jaXBoZXJfZmluaXNoICAgICAgICAgIHwgRmluaXNoIGVuY3J5cHRpbmcgb3IgZGVjcnlwdGluZyBhIG1lc3NhZ2UgaW4gYSBjaXBoZXIgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBBRVMgQ0JDX05PX1BBRERJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEFFUyBDQkNfTk9fUEFERElORyAoU2hvcnQgaW5wdXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gQUVTIENCQ19QS0NTNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBBRVMgQ0JDX1BLQ1M3IChTaG9ydCBpbnB1dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIEFFUyBDVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBTZXQgdGhlIGtleSBmb3IgYSBtdWx0aXBhcnQgc3ltbWV0cmljIGVuY3J5cHRpb24gb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gREVTIENCQyAobm9wYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIFNldCBhbiBJViBmb3IgYSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiAyLWtleSAzREUgLUNCQyAobm9wYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gRW5jcnlwdCBvciBkZWNyeXB0IGEgbWVzc2FnZSBmcmFnbWVudCBpbiBhbiBhY3RpdmUgY2lwaGVyIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDguIDMta2V5IDNERSAtQ0JDIChub3BhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBGaW5pc2ggZW5jcnlwdGluZyBvciBkZWNyeXB0aW5nIGEgbWVzc2FnZSBpbiBhIGNpcGhlciBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLiBDaGVjayBpZiB0aGUgb3V0cHV0IGxlbmd0aCBtYXRjaGVzIHRoZSBleHBlY3RlZCBsZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEuIENoZWNrIGlmIHRoZSBvdXRwdXQgZGF0YSBtYXRjaGVzIHRoZSBleHBlY3RlZCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMi4gRmluaXNoIGVuY3J5cHRpbmcgb3IgZGVjcnlwdGluZyBhIG1lc3NhZ2UgdXNpbmcgYW4gaW52YWxpZCBvcGVyYXRpb24gc2hvdWxkIGZhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0JBRF9TVEFURSAgICAgICAgICAgICB8IEVuY3J5cHQgb3IgZGVjcnlwdCBhIG1lc3NhZ2UgZnJhZ21lbnQgaW4gYW4gaW52YWxpZCBjaXBoZXIgb3BlcmF0aW9uIHNob3VsZCBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnZhbGlkIG9wZXJhdGlvbiBhcyBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDM4IHwgcHNhX2NpcGhlcl9hYm9ydCAgICAgICAgICAgfCBBYm9ydCBhIGNpcGhlciBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEVuY3J5cHQgLSBBRVMgQ0JDX05PX1BBRERJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gRW5jcnlwdCAtIEFFUyBDQkNfUEtDUzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAzLiBFbmNyeXB0IC0gQUVTIENUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIEVuY3J5cHQgLSBERVMgQ0JDIChub3BhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gRW5jcnlwdCAtIDIta2V5IDNERSAtQ0JDIChub3BhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIFNldCB0aGUga2V5IGZvciBhIG11bHRpcGFydCBzeW1tZXRyaWMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBFbmNyeXB0IC0gMy1rZXkgM0RFIC1DQkMgKG5vcGFkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gQWJvcnQgYSBjaXBoZXIgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIERlY3J5cHQgLSBBRVMgQ0JDX05PX1BBRERJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiBNdWx0aXBsZSBhYm9ydCBjaXBoZXIgb3BlcmF0aW9uIHNob3VsZCByZXR1cm4gc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gRGVjcnlwdCAtIEFFUyBDQkNfUEtDUzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBEZWNyeXB0IC0gQUVTIENUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLiBEZWNyeXB0IC0gREVTIENCQyAobm9wYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEuIERlY3J5cHQgLSAyLWtleSAzREUgLUNCQyAobm9wYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMi4gRGVjcnlwdCAtIDMta2V5IDNERSAtQ0JDIChub3BhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEzLiBwc2FfY2lwaGVyX3VwZGF0ZSBhZnRlciBwc2FfY2lwaGVyX2Fib3J0IHNob3VsZCBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IEFzeW1tZXRyaWMgQ3J5cHRvZ3JhcGh5ICAgICAgfCB0ZXN0X2MwMzkgfCBwc2FfYXN5bW1ldHJpY19lbmNyeXB0ICAgICB8IEVuY3J5cHQgYSBzaG9ydCBtZXNzYWdlIHdpdGggYSBwdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gUlNBIFBLQ1MxVjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBSU0EgT0FFUCBTSEEyNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8IDMuIFJTQSBPQUVQIFNIQTI1NiB3aXRoIGxhYmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gUlNBIEtFWVBBSVIgUEtDUzFWMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gRW5jcnlwdCBhIHNob3J0IG1lc3NhZ2Ugd2l0aCBhIHB1YmxpYyBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBDaGVjayBpZiB0aGUgb3V0cHV0IGxlbmd0aCBtYXRjaGVzIHdpdGggdGhlIGV4cGVjdGVkIG91dHB1dCBsZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDguIERlY3J5cHQgdGhlIGNpcGhlciB0ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOS4gQ2hlY2sgaWYgdGhlIG91dHB1dCBsZW5ndGggbWF0Y2hlcyB3aXRoIHRoZSBpbnB1dCBsZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMC4gQ2hlY2sgaWYgdGhlIG91dHB1dCBtYXRjaGVzIHdpdGggdGhlIGdpdmVuIGlucHV0IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBTbWFsbCBvdXRwdXQgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEludmFsaWQgYWxnb3JpdGhtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gSW52YWxpZCBrZXkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbnZhbGlkIGtleSBzbG90IDwvYnI+Mi4gWmVybyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludmFsaWQgdXNhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9FTVBUWV9TTE9UICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzA0MCB8IHBzYV9hc3ltbWV0cmljX2RlY3J5cHQgICAgIHwgRGVjcnlwdCBhIHNob3J0IG1lc3NhZ2Ugd2l0aCBhIHByaXZhdGUga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBSU0EgS0VZUEFJUiBQS0NTMVYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFJTQSBLRVlQQUlSIE9BRVAgU0hBMjU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gUlNBIEtFWVBBSVIgT0FFUCBTSEEyNTYgd2l0aCBsYWJlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBEZWNyeXB0IGEgc2hvcnQgbWVzc2FnZSB3aXRoIGEgcHJpdmF0ZSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIENoZWNrIGlmIHRoZSBvdXRwdXQgbGVuZ3RoIG1hdGNoZXMgd2l0aCB0aGUgZXhwZWN0ZWQgbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gQ2hlY2sgaWYgdGhlIG91dHB1dCBtYXRjaGVzIHdpdGggdGhlIGV4cGVjdGVkIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW52YWxpZCBrZXkgdHlwZSAoUlNBIHB1YmxpYyBrZXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbnZhbGlkIGFsZ29yaXRobSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEludmFsaWQga2V5IHR5cGUgKEFFUyBLZXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9FTVBUWV9TTE9UICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnZhbGlkIHVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEludmFsaWQga2V5IHNsb3QgPC9icj4yLiBaZXJvIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU21hbGwgb3V0cHV0IGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzA0MSB8IHBzYV9hc3ltbWV0cmljX3NpZ24gICAgICAgIHwgU2lnbiBhIGhhc2ggb3Igc2hvcnQgbWVzc2FnZSB3aXRoIGEgcHJpdmF0ZSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBSU0EgS0VZUEFJUiBQS0NTMVYxNSBSQVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFJTQSBLRVlQQUlSIFBLQ1MxVjE1IFNIQS0yNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gRUNEU0EgS0VZUEFJUiBTRUNQMjU2UjEgU0hBLTI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBTaWduIGEgaGFzaCBvciBzaG9ydCBtZXNzYWdlIHdpdGggYSBwcml2YXRlIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIENoZWNrIGlmIHRoZSBvdXRwdXQgbGVuZ3RoIG1hdGNoZXMgd2l0aCB0aGUgZXhwZWN0ZWQgbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gQ2hlY2sgaWYgdGhlIG91dHB1dCBtYXRjaGVzIHdpdGggdGhlIGV4cGVjdGVkIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW52YWxpZCBrZXkgdHlwZSAoUlNBIHB1YmxpYyBrZXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbnZhbGlkIGFsZ29yaXRobSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEludmFsaWQga2V5IHR5cGUgKEFFUyBLZXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gV3JvbmcgaGFzaCBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbnZhbGlkIGtleSBzbG90IDwvYnI+Mi4gWmVybyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfRU1QVFlfU0xPVCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVtcHR5IGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW52YWxpZCB1c2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTbWFsbCBvdXRwdXQgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDQyIHwgcHNhX2FzeW1tZXRyaWNfdmVyaWZ5ICAgICAgfCBWZXJpZnkgdGhlIHNpZ25hdHVyZSBhIGhhc2ggb3Igc2hvcnQgbWVzc2FnZSB1c2luZyBhIHB1YmxpYyBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIFJTQSBLRVlQQUlSIFBLQ1MxVjE1IFJBVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gUlNBIEtFWVBBSVIgUEtDUzFWMTUgU0hBLTI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAzLiBFQ0RTQSBLRVlQQUlSIFNFQ1AyNTZSMSBTSEEtMjU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gU2V0IHRoZSBrZXkgZGF0YSBiYXNlZCBvbiBrZXkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFJTQSBwdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gRUMgcHVibGljIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gVmVyaWZ5IHRoZSBzaWduYXR1cmUgYSBoYXNoIG9yIHNob3J0IG1lc3NhZ2UgdXNpbmcgYSBwdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW52YWxpZCBhbGdvcml0aG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBXcm9uZyBoYXNoIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEludmFsaWQga2V5IHNsb3QgPC9icj4yLiBaZXJvIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX1NJR05BVFVSRSAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgV3Jvbmcgc2lnbmF0dXJlIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBXcm9uZyBzaWduYXR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfRU1QVFlfU0xPVCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVtcHR5IGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW52YWxpZCB1c2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnZhbGlkIGtleSB0eXBlIChBRVMgS2V5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNtYWxsIG91dHB1dCBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAKLSMgTGljZW5zZQorIyMgTGljZW5zZQogQXJtIFBTQSB0ZXN0IHN1aXRlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIEFwYWNoZSB2Mi4wIExpY2Vuc2UuCiAKIC0tLS0tLS0tLS0tLS0tCiAKLSpDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuKgorKkNvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLioKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kb2NzL3BzYV9pcGNfdGVzdGxpc3QubWQgYi9hcGktdGVzdHMvZG9jcy9wc2FfaXBjX3Rlc3RsaXN0Lm1kCmluZGV4IDU2M2EzNzEuLmZkMzI0MjUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kb2NzL3BzYV9pcGNfdGVzdGxpc3QubWQKKysrIGIvYXBpLXRlc3RzL2RvY3MvcHNhX2lwY190ZXN0bGlzdC5tZApAQCAtMSwxMDkgKzEsMTEwIEBACiAjIFBTQSBGRiBJUEMgVGVzdGNhc2UgY2hlY2tsaXN0IAogCi18IFRlc3RzICAgICAgICAgICAgfCBTY2VuYXJpbyBydWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENsaWVudC0gU2VydmVyIFRlc3QgRnVuY3Rpb25zIFBhaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRlc3QgQWxnb3JpdGhtL0NvbW1lbnRzLyBUZXN0IGxpbWl0YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQSBBUEkgY3Jvc3NlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvdmVyZWQgIG9yIHRvIGJlIGNvdmVyZWQgaW4gcmVsZWFzZSB8Ci18LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci18IHRlc3RfaTAwMSAgICAgICAgfCAxLiBwc2FfZnJhbWV3b3JrX3ZlcnNpb24oKTogUmV0cmlldmUgdGhlIHZlcnNpb24gb2YgdGhlIFBTQSBGcmFtZXdvcmsgQVBJIHRoYXQgaXMgaW1wbGVtZW50ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9mcmFtZXdvcmtfdmVyc2lvbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgdGhlIHBzYV9mcmFtZXdvcmtfdmVyc2lvbigpIEFQSSBhdCBib3RoIHNpZGUgU1BFIGFuZCBOU1BFIGFuZCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9mcmFtZXdvcmtfdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFscGhhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgfCAxLiBwc2FfdmVyc2lvbigpIHJldHVybnMgUFNBX1ZFUlNJT05fTk9ORSB3aGVuIHRoZSBSb1QgU2VydmljZSBpcyBub3QgaW1wbGVtZW50ZWQsIG9yIHRoZSBjYWxsZXIgaXMgbm90IHBlcm1pdHRlZCB0byBhY2Nlc3MgdGhlIHNlcnZpY2UgT1IgcmV0dXJuID4gMCB3aXRoIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBpbXBsZW1lbnRlZCBSb1QgU2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV92ZXJzaW9uKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIFBhc3MgdW4taW1wbGVtZW50ZWQgU0lEIGFuZCBleHBlY3RzIFBTQV9WRVJTSU9OX05PTkUgYXMgcmV0dXJuIHZhbHVlLiA8YnIgLz4yLiBDYWxsIHRvIEFQSSBmcm9tIE5TUEUgd2l0aCBhIFNJRCB3aG8gZG9lc24ndCBwcm92aWRlIHNlcnZpY2UgdG8gTlNQRSBhbmQgZXhwZWN0cyBQU0FfVkVSU0lPTl9OT05FIGFzIHJldHVybiB2YWx1ZS4gPGJyIC8+My4gUGFzcyBTSUQgd2hvIGlzIGltcGxlbWVudGVkIGFuZCBwcm92aWRlcyBzZXJ2aWNlIHRvIE5TUEUgYW5kIGV4cGVjdCAgbWlub3IgbnVtYmVyKD4wKSBvZiBnaXZlbiBSb1Qgc2VydmljZSBhcyByZXR1cm4uIDxiciAvPlBlcmZvcm0gYWxsIGFib3ZlIGNoZWNrcyBmcm9tIFNQRSB0b28uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV92ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFscGhhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTAwMiAgICAgICAgfCAxLiBwc2FfY29ubmVjdCgpIHJldHVybnMgdGhlIFBTQV9DT05ORUNUSU9OX0JVU1kgd2hlbiBSb1QgU2VydmljZSBjYW5ub3QgbWFrZSB0aGUgY29ubmVjdGlvbiBhdCB0aGUgbW9tZW50ICh0cmFuc2llbnQgZXJyb3IpLiA8YnIgLz4yLiBwc2FfY29ubmVjdCgpIHJldHVybnMgdGhlIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQgd2hlbiBSb1QgU2VydmljZSBoYXMgcmVmdXNlZCB0aGUgY29ubmVjdGlvbiA8YnIgLz4zLiBwc2Ffd2FpdCgpIHJldHVybnMgdGhlIFNlY3VyZSBQYXJ0aXRpb24gaW50ZXJydXB0IHNpZ25hbHMgdGhhdCBoYXZlIGJlZW4gYXNzZXJ0ZWQgZnJvbSBhIHN1YnNldCBvZiBzaWduYWxzIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuIFJldHVybnMgPiAwIHdoZW4gYXQgbGVhc3Qgb25lIHNpZ25hbCBpcyBhc3NlcnRlZCA8YnIgLz40LiBwc2FfZ2V0KCk6R2V0IHRoZSBtZXNzYWdlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGEgZ2l2ZW4gUm9UIFNlcnZpY2Ugc2lnbmFsIGFuZCByZW1vdmUgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgcXVldWUuICA8YnIgLz41LiBwc2FfZ2V0KCkgcmV0dXJucyBQU0FfU1VDQ0VTUyB3aGVuICptc2cgd2lsbCBjb250YWluIHRoZSBkZWxpdmVyZWQgbWVzc2FnZS4gPGJyIC8+Ni4gVGhlIHR5cGUgbWVtYmVyIG9mIHRoZSBwc2FfbXNnX3Qgb2JqZWN0IHNob3VsZCByZXR1cm4gUFNBX0lQQ19DT05ORUNUIGZvciBhIG5ldyBjb25uZWN0aW9uIHJlcXVlc3QgZm9sbG93aW5nIGEgcHNhX2dldCgpIGNhbGwgdG8gcHNhX2Nvbm5lY3QoKSBhbmQgbXNnLmhhbmRsZSBtdXN0IGJlIHBvc2l0aXZlLiA8YnIgLz43LiBwc2FfcmVwbHkoKTogIElmIHRoZSBtZXNzYWdlIHR5cGUgaXMgUFNBX0lQQ19DT05ORUNUIHRoZW4gc2VydmVyIGNhbiByZWplY3QgdGhlIGNvbm5lY3Rpb24gYnkgc2VuZGluZyBQU0FfQ09OTkVDVElPTl9SRUZVU0VEIChwZXJtYW5lbnQgZXJyb3IpIG9yIFBTQV9DT05ORUNUSU9OX0JVU1kgKHRyYW5zaWVudCBlcnJvcikgc3RhdHVzIGNvZGUuIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X2Nvbm5lY3Rpb25fYnVzeV9hbmRfcmVqZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENsaWVudCB0cmllcyB0byBjb25uZWN0IHRvIFJPVCBzZXJ2aWNlIHVzaW5nIHBzYV9jb25uZWN0KCkgPGJyIC8+Mi4gUm9UIHNlcnZpY2UgY2hlY2tzIHRoZSBkZWxpdmVyeSBvZiAgUFNBX0lQQ19DT05ORUNUIG1lc3NhZ2UgdHlwZSBhbmQgcG9zaXRpdmUgaGFuZGxlIHZhbHVlIHJldHVybmVkIGJ5IHBzYV9nZXQoKSAgPGJyIC8+My4gUm9UIHNlcnZpY2UgcmVqZWN0cyB0aGUgY29ubmVjdGlvbiBieSBleGVjdXRpbmcgcHNhX3JlcGx5KGhhbmRsZSxQU0FfQ09OTkVDVElPTl9CVVNZKSA8YnIgLz40LiBDbGllbnQgdHJpZXMgdG8gY29ubmVjdCB0byBzYW1lIFJPVCBzZXJ2aWNlIHVzaW5nIHBzYV9jb25uZWN0KCkgYWdhaW4gPGJyIC8+NS4gVGhpcyB0aW1lLCBSb1Qgc2VydmljZSByZWplY3RzIHRoZSBjb25uZWN0aW9uIGJ5IGV4ZWN1dGluZyBwc2FfcmVwbHkoaGFuZGxlLFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpIDxiciAvPlBlcmZvcm0gYWxsIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jb25uZWN0LHBzYV93YWl0LHBzYV9nZXQscHNhX3JlcGx5ICAgICAgICAgICB8IEFscGhhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgfCAxLiBwc2FfY29ubmVjdCgpOiBXaGVuIFNJRCBpcyBpbXBsZW1lbnRlZCBhbmQgY2xpZW50IGlzIHBlcm1pdHRlZCB0byBhY2Nlc3MgdGhlIHNlcnZpY2UsIFNQTSBkZWxpdmVycyBhIFBTQV9JUENfQ09OTkVDVCBtZXNzYWdlIGZyb20gdGhlIGNsaWVudCB0byB0aGUgU2VjdXJlIFBhcnRpdGlvbiB0aGF0IGltcGxlbWVudHMgdGhlIFJvVCBTZXJ2aWNlIGFuZCBwb3NpdGl2ZSBoYW5kbGUgaXMgcmV0dXJuZWQgdG8gY2xpZW50LiA8YnIgLz4yLiBwc2FfZ2V0KCk6R2V0IHRoZSBtZXNzYWdlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGEgZ2l2ZW4gUm9UIFNlcnZpY2Ugc2lnbmFsIGFuZCByZW1vdmUgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgcXVldWUuIDxiciAvPjMuIHBzYV9nZXQoKSByZXR1cm5zIFBTQV9TVUNDRVNTIHdoZW4gKm1zZyB3aWxsIGNvbnRhaW4gdGhlIGRlbGl2ZXJlZCBtZXNzYWdlIDxiciAvPjQuIHBzYV9nZXQoKTpUaGUgdHlwZSBtZW1iZXIgb2YgdGhlIHBzYV9tc2dfdCBvYmplY3Qgc2hvdWxkIHJldHVybiBQU0FfSVBDX0NPTk5FQ1QgZm9yIGEgbmV3IGNvbm5lY3Rpb24gcmVxdWVzdCBmb2xsb3dpbmcgYSBwc2FfZ2V0KCkgY2FsbCB0byBwc2FfY29ubmVjdCgpIGFuZCBtc2cuaGFuZGxlIG11c3QgYmUgcG9zaXRpdmUuIDxiciAvPjUuIHBzYV9nZXQoKTogVGhlIHR5cGUgbWVtYmVyIG9mIHRoZSBwc2FfbXNnX3Qgb2JqZWN0IHNob3VsZCByZXR1cm4gUFNBX0lQQ19ESVNDT05ORUNUIGZvciBhIG5ldyBjb25uZWN0aW9uIHJlcXVlc3QgZm9sbG93aW5nIGEgcHNhX2dldCgpIGNhbGwgdG8gcHNhX2Nsb3NlKCkgYW5kIG1zZy5oYW5kbGUgbXVzdCBiZSBwb3NpdGl2ZS4gPGJyIC8+Ni4gcHNhX3JlcGx5KCk6ICBJZiB0aGUgbWVzc2FnZSB0eXBlIGlzIFBTQV9JUENfQ09OTkVDVCB0aGVuIHNlcnZlciBjYW4gYWNjZXB0IHRoZSBjb25uZWN0aW9uIGJ5IHNlbmRpbmcgUFNBX1NVQ0NFU1Mgc3RhdHVzIGNvZGUuIElmIHRoZSBtZXNzYWdlIHR5cGUgaXMgUFNBX0lQQ19ESVNDT05ORUNUIHRoZW4gdGhlIHN0YXR1cyBjb2RlIGlzIGlnbm9yZWQuIDxiciAvPjcuIHBzYV9jbG9zZSgpOiBDbG9zZXMgYSBjb25uZWN0aW9uIHRvIGEgUm9UIFNlcnZpY2UuIFNlbmRzIHRoZSBQU0FfSVBDX0RJU0NPTk5FQ1QgbWVzc2FnZSB0byB0aGUgUm9UIFNlcnZpY2UuICBUaGlzIGZ1bmN0aW9uIHdpbGwgaGF2ZSBubyBlZmZlY3QgaWYgY2FsbGVkIHdpdGggdGhlIG51bGwgaGFuZGxlLiA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X2FjY2VwdF9hbmRfY2xvc2VfY29ubmVjdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuQ2xpZW50IHRyaWVzIHRvIGNvbm5lY3QgdG8gUk9UIHNlcnZpY2UgPGJyIC8+IDIuIFJvVCBzZXJ2aWNlIGNoZWNrcyB0aGUgZGVsaXZlcnkgb2YgIFBTQV9JUENfQ09OTkVDVCBtZXNzYWdlIHR5cGUgYW5kIHBvc2l0aXZlIGhhbmRsZSB2YWx1ZSByZXR1cm4gYnkgcHNhX2dldCgpIDxiciAvPjMuIFJvVCBzZXJ2aWNlICBhY2NlcHRzIHRoZSBjb25uZWN0aW9uIGJ5IGV4ZWN1dGluZyBwc2FfcmVwbHkoLi4sIFBTQV9DT05ORUNUSU9OX0FDQ0VQVEVEKS4gIDxiciAvPjQuIENsaWVudCBjYWxscyB0aGUgcHNhX2Nsb3NlIHdpdGggUFNBX05VTExfSEFORExFIGFuZCBsYXRlciBpdCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gdXNpbmcgcHNhX2Nsb3NlKCkgd2l0aCBhY3R1YWwgaGFuZGxlIHZhbHVlIDxiciAvPjUuIFJvVCBzZXJ2aWNlIGNoZWNrcyB0aGUgZGVsaXZlcnkgb2YgIFBTQV9JUENfRElTQ09OTkVDVCBtZXNzYWdlIHR5cGUsIGNoZWNrcyBoYW5kbGUgdmFsdWUgZXFhdWwgdG8gTlVMTCByZXR1cm5lZCBieSBwc2FfZ2V0KCkgYW5kIGNvbXBsZXRlcyB0aGUgUFNBX0lQQ19ESVNDT05ORUNUIGJ5IGV4ZWN1dGluZyBwc2FfcmVwbHkoKSAuIDxiciAvPlBlcmZvcm0gYWxsIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jb25uZWN0LHBzYV93YWl0LHBzYV9nZXQscHNhX3JlcGx5LHBzYV9jbG9zZSB8IEFscGhhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgfCBGb2xsb3dpbmcgYXJlIGFsbG93ZWQgbWlub3IgdmVyc2lvbiBjb25kaXRpb24gdG8gcHNhX2Nvbm5lY3QoKTogPGJyIC8+ICAxLiBWZXJzaW9uIHBvbGljeSBpcyBub3QgbWVudGlvbmVkIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBpcyAxIHdoaWNoIGlzIGRlZmF1bHQgbWluaW11bSB2ZXJzaW9uICA8YnIgLz4yLiBWZXJzaW9uIHBvbGljeSBpcyBTVFJJQ1QgYW5kIHJlcXVlc3RlZCB2ZXJzaW9uIGVxdWFscyBtaW5pbXVtIHZlcnNpb24gIDxiciAvPjMuIFZlcnNpb24gcG9saWN5IGlzIHJlbGF4ZWQgYW5kIHJlcXVlc3RlZCB2ZXJzaW9uIGlzIHNtYWxsZXIgdGhhbiB0aGUgbWluaW11bSB2ZXJzaW9uICA8YnIgLz4gNC4gVmVyc2lvbiBwb2xpY3kgaXMgcmVsYXhlZCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gaXMgZXVxYWwgdG8gdGhlIG1pbmltdW0gdmVyc2lvbiAgPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X2Nvbm5lY3Rfd2l0aF9hbGxvd2VkX21pbm9yX3ZlcnNpb25fcG9saWN5KCkgICAgICAgICAgICAgICAgICB8IENsaWVudCB0cmllcyBjb25uZWN0aW5nIFJPVCBzZXJ2aWNlIG9mIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFuZCBleHBlY3RzIGNvbm5lY3Rpb24gdG8gZXN0YWJsaXNoOiA8YnIgLz4gICAtIFZlcnNpb24gcG9saWN5IGlzIG5vdCBtZW50aW9uZWQgYW5kIHJlcXVlc3RlZCB2ZXJzaW9uIGlzIDEgd2hpY2ggaXMgZGVmYXVsdCBtaW5pbXVtIHZlcnNpb24gIDxiciAvPiAgIC0gVmVyc2lvbiBwb2xpY3kgaXMgU1RSSUNUIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBlcXVhbHMgbWluaW11bSB2ZXJzaW9uICA8YnIgLz4gICAtIFZlcnNpb24gcG9saWN5IGlzIHJlbGF4ZWQgYW5kIHJlcXVlc3RlZCB2ZXJzaW9uIGlzIHNtYWxsZXIgdGhhbiB0aGUgbWluaW11bSB2ZXJzaW9uICA8YnIgLz4gIC0gVmVyc2lvbiBwb2xpY3kgaXMgcmVsYXhlZCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gaXMgZXF1YWwgdG8gdGhlIG1pbmltdW0gdmVyc2lvbiAgPGJyIC8+UGVyZm9ybSBhbGwgYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jb25uZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFscGhhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgfCAxLiBwc2FfY2FsbCgpOiBUaGUgdmFsaWQgcHNhX2NhbGwsIG1ha2UgU1BNIHRvIHNlbmQgUFNBX0lQQ19DQUxMIG1zZy50eXBlIHRvIHRoZSBSb1Qgc2VydmljZWUgcGFydGl0aW9uIGFuZCB0aGUgc3VjY2Vzc2Z1bCBjYWxsIHNob3VsZCByZXR1cm4gPj0wIGhhbmRsZSB2YWx1ZS4gIDxiciAvPjIuIHBzYV9jYWxsKCkgcmVjZWl2ZXMgcmV0dXJuIHZhbHVlID49IDAgZm9yIFJvVC1zcGVjaWZpYyByZXR1cm4gY29kZSA8YnIgLz4zLiBwc2FfY2FsbCgpIHJlY2VpdmUgcmV0dXJuIHZhbHVlICA8IDAgZm9yIFJvVC1zcGVjaWZpYyBlcnJvciBjb2RlIDxiciAvPjQuIHBzYV9yZXBseSgpOiAgSWYgdGhlIG1lc3NhZ2UgdHlwZSBpcyBQU0FfSVBDX0NBTEwgIGFuZCBST1Qgc2VydmljZSB3YW50IHRvIGVuZCBjYWxsIHdpdGggc3VjY2VzcyB0aGVuIHRoZSByZXR1cm4gY29kZSBtdXN0IGJlIFBTQV9TVUNDRVNTIG9yIGFuZCBwb3NpdGl2ZSBpbnRlZ2VycyBhcmUgdXNlZCB0byBpbmRpY2F0ZSBSb1QgU2VydmljZSBzcGVjaWZpYyByZXN1bHQgdmFsdWVzKHRoaXMgbXVzdCBiZSByZXBvcnRlZCB0byBjbGllbnQpLiBBbGwgb3RoZXIgcmV0dXJuIGNvZGVzIChJTlQzMl9NSU4rMTI4IHRvIC0xKSBhcmUgcmVwb3J0ZWQgdG8gdGhlIGNsaWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jYWxsX3dpdGhfYWxsb3dlZF9zdGF0dXNfY29kZSgpICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENsaWVudCBjb25uZWN0cyB0byBSb1Qgc2VydmljZSA8YnIgLz4yLiBDbGllbnQgc2VuZHMgbWVzc2FnZSB1c2luZyBwc2FfY2FsbCgpIDxiciAvPjMuICBSb1Qgc2VydmljZSBjaGVja3MgdGhlIGRlbGl2ZXJ5IG9mICBQU0FfSVBDX0NBTEwgbWVzc2FnZSB0eXBlIGFuZCBwb3NpdGl2ZSBoYW5kbGUgdmFsdWUgIHJldHVybiBieSBwc2FfZ2V0KCkgIDxiciAvPjQuIFJvVCBzZXJ2aWNlIGVuZHMgdGhlIGNhbGwgdXNpbmcgcHNhX3JlcGx5KHN0YXR1c19jb2RlKSA8YnIgLz41LiBDbGllbnQgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgcHNhX2NhbGwoKSBhbmQgQ2xpZW50IGNsb3NlcyB0aGUgY29ubmVjdGlvblJlcGVhdCAoMSkgdG8gKDUpIGZvciBkaWZmZXJlbnQgc3RhdHVzIGNvZGUsIFNVQ0NFU1MsICt2ZSwgLXZlLi4gPGJyIC8+UGVyZm9ybSBhbGwgYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jYWxsLHBzYV9yZXBseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFscGhhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgfCAxLiBBIG1zZy5jbGllbnRfaWQgdGhhdCBoYXMgYSBwb3NpdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgY2xpZW50IGlzIGluIHRoZSBTUEUgYW5kIHRoaXMgdGhlIFNlY3VyZSBQYXJ0aXRpb24gSUQgb2YgdGhlIGNsaWVudC4gQSBuZWdhdGl2ZSBjbGllbnRfaWQgaW5kaWNhdGVzIHRoYXQgdGhlIGNsaWVudCBpcyBpbiB0aGUgTlNQRS4gIDxiciAvPjIuIENsaWVudF9pZCBpcyB2YWxpZCBkdXJpbmcgUFNBX0lQQ19DT05ORUNULCBQU0FfSVBDX0NBTEwgYW5kIFBTQV9JUENfRElTQ09OTkVDVCBtc2cgdHlwZS4gPGJyIC8+My4gTWFuaWZlc3QgUGFyYW1ldGVyLSAgbmFtZSAocmVxdWlyZWQsIHVuaXF1ZSkgPGJyIC8+QSBQYXJ0aXRpb24gbXVzdCBoYXZlIGFuIGFscGhhbnVtZXJpYyBuYW1lIGZvciBzb3VyY2UgY29kZSB0byBkaXJlY3RseSByZWZlciB0byBhIHNwZWNpZmljIFBhcnRpdGlvbi4gVGhlIGZvcm1hdCBvZiB0aGUgbmFtZSBtdXN0IGZvbGxvdyB0aGUgcnVsZXMgb2YgYSBDIG1hY3JvLiAgPGJyIC8+NC4gTWFuaWZlc3QgUGFyYW1ldGVyIC0gaWQgKHJlcXVpcmVkLCB1bmlxdWUpIDxiciAvPkl0IG11c3QgYmUgcmVwcmVzZW50ZWQgYnkgYSBoZXhhZGVjaW1hbCBzdHJpbmcuIFRoZSBTZWN1cmUgUGFydGl0aW9uIElEIGNhbiBiZSByZWZlcmVuY2VkIGluIFNlY3VyZSBQYXJ0aXRpb24gc291cmNlIGNvZGUgdmlhIHRoZSBzeW1ib2xpYyBuYW1lIHNwZWNpZmllZCBhcyBuYW1lIGF0dHJpYnV0ZS4gVGhlIHN5bWJvbCBtdXN0IGhhdmUgdGhlIHZhbHVlIG9mIHRoZSBTZWN1cmUgUGFydGl0aW9uIElELiA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X2lkZW50aXR5KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC0gQ2hlY2sgdGhlIHZhbHVlIHJldHVybmVkIGJ5IG1zZy5jbGllbnRfaWQgZHVyaW5nIFBTQV9JUENfQ09OTkVDVCwgUFNBX0lQQ19DQUxMIGFuZCBQU0FfSVBDX0RJU0NPTk5FQ1QuIEZvciBOU1BFIGNvbm5lY3Rpb24sIGNsaWVudF9pZCBzaG91bGQgYmUgPDAgYW5kIGZvciBTUEUsIGl0IHNob3VsZCBiZSA+MC4gIDxiciAvPlBlcmZvcm0gYWxsIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguIDxiciAvPi0gQWNjZXNzIHRoZSBQYXJ0aXRpb24gSUQgb2YgY2xpZW50IHBhcnRpdGlvbiBhbmQgY29tcGFyZSB0aGUgdmFsdWUgd2l0aCBleHBlY3RlZCBJRCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9nZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFscGhhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgfCAxLiBwc2FfY29ubmVjdCgpIHdpbGwgcmV0dXJuIHRoZSBQU0FfQ09OTkVDVElPTl9SRUZVU0VEICBPUiBQU0FfQ09OTkVDVElPTl9CVVNZIHdoZW4gdGhlIFNQTSBoYXMgcmVhY2hlZCB0aGUgbGltaXQgb2YgY29uY3VycmVudCBjb25uZWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3NwbV9jb25jdXJyZW50X2Nvbm5lY3RfbGltaXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEV4ZWN1dGUgcHNhX2Nvbm5lY3QoKSBBUEkgaW4gYSBsb29wIHVudGlsIGl0IHJldHVybnMgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCBvciBQU0FfQ09OTkVDVElPTl9CVVNZIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcCBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jb25uZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFscGhhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgfCAxLiBwc2Ffd2FpdCgpOiBXaGVuIE1PREUoUFNBX0JMT0NLKSBpcyBvbmUsIHRoZSBmdW5jdGlvbiB3aWxsIGJsb2NrIHRoZSBjYWxsZXIgdW50aWwgb25lIG9mIHRoZSByZXF1ZXN0ZWQgc2lnbmFscyBpcyBhc3NlcnRlZC4gICA8YnIgLz4yLiAgcHNhX3dhaXQoKTogQ2FsbGVycyBtdXN0IHNldCBSRVMgdG8gemVybywgaW1wbGVtZW50YXRpb25zIG11c3QgaWdub3JlIHRoZSB2YWx1ZSBvZiBSRVMuIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9ibG9ja19iZWhhdmUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENsaWVudCBjb25uZWN0cyB0byBhIFJvVCBzZXJ2aWNlIG11dGlscGUgdGltZXMuICA8YnIgLz4yLiBSb1Qgc2VydmljZSBwc2Ffd2FpdChQU0FfQkxPQ0t8KE5vbi16ZXJvIHZhbHVlIGZvciB0aW1lb3V0WzMwOjBdKSkgQVBJIGlzIGV4ZWN1dGVkIHdpdGhvdXQgd2hpbGUoMSkgbG9vcC4gIDxiciAvPjMuICBSb1Qgc2VydmljZSBzZXJ2ZXMgdGhlIGNvbm5lY3Rpb25zIGJ5IHJlamVjdGluZyB0aGVtLiAgIDxiciAvPlRoaXMgaXMgYSBzYW5pdHkgY2hlY2ssIGEgc3VjY2Vzc2Z1bCBoYW5kc2hha2luZyBiZXR3ZWVuIGNsaWVudCBhbmQgc2VydmVyIGZvciByZXF1ZXN0ZWQgY29ubmVjdGlvbiAgcmVwcmVzZW50cyBjaGVjayBwYXNzLiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV93YWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFscGhhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgfCAxLiBwc2Ffd2FpdCgpOiBXaGVuIE1PREUgaXMgemVybywgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IHdpdGggdGhlIGN1cnJlbnQgc2lnbmFsIHN0YXRlLCB3aGljaCBjYW4gYmUgemVybyBpZiBubyBzaWduYWxzIGFyZSBhY3RpdmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3BvbGxfYmVoYXZlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gQ2xpZW50IGNvbm5lY3RzIHRvIGEgUm9UIHNlcnZpY2UgbXV0aWxwZSB0aW1lcy4gIDxiciAvPjIuIFJvVCBzZXJ2aWNlIGV4ZWN1dGVzIHBzYV93YWl0KFBTQV9QT0xMKSAgaW4gYSB3aGlsZSBsb29wIGFuZCBjaGVja3MgdGhlIEFQSSdzIHBvbGxpbmcgYmVoYXZpb3VyLiAgPGJyIC8+My4gQ2FsbCBwc2Ffd2FpdChQU0FfUE9MTCkgd2hlbiBubyByZXF1ZXN0IGlzIG1hZGUgYnkgY2xpZW50IGFuZCBjaGVja3MgdGhlIHJldHVybiB2YWx1ZS4gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwcyBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd2FpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgMS4gcHNhX3dhaXQoKSByZXR1cm5zIHRoZSBTZWN1cmUgUGFydGl0aW9uIGludGVycnVwdCBzaWduYWxzIHRoYXQgaGF2ZSBiZWVuIGFzc2VydGVkIGZyb20gdGhlIHN1YnNldCBvZiBzaWduYWxzIGluZGljYXRlZCBpbiB0aGUgYml0bWFzayBwcm92aWRlZC4gVGhlIG1hc2sgbXVzdCBjb250YWluIHRoZSBzZXQgb2Ygc2lnbmFscyB0aGUgY2FsbGVyIGlzIGludGVyZXN0ZWQgaW4gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffd2FpdF9iaXRtYXNrX2JlaGF2ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDbGllbnQgY29ubmVjdHMgdG8gYSBSb1Qgc2VydmljZSBtdXRpbHBlIHRpbWVzIHdpdGggZGlmZmVyZW50IFNJRCA8YnIgLz4yLiBSb1Qgc2VydmljZSBleGVjdXRlcyBwc2Ffd2FpdCB3aXRoIG5lY2Vzc2FyeSBzaWduYWxfbWFzayAgPGJyIC8+My4gUm9UIHNlcnZpY2UgY2hlY2tzIHRoYXQgcmV0dXJuZWQgc2lnbmFsIHZhbHVlIGlzIHN1YnNldCBvZiBzaWduYWxzIGluZGljYXRlZCBpbiB0aGUgc2lnbmFsX21hc2sgPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwcyBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd2FpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMDMgICAgICAgIHwgMS4gVGhlIHJldmVyc2UgaGFuZGxlIGZvciBhIGNvbm5lY3Rpb24gaXMgTlVMTCB1bnRpbCBwc2Ffc2V0X3JoYW5kbGUoKSBpcyB1c2VkLiAgcHNhX3NldF9yaGFuZGxlKCkgY2FuIGJlIHVzZWQgdG8gYXNzb2NpYXRlIHNvbWUgY2FsbGVyLXByb3ZpZGVkIHByaXZhdGUgZGF0YSB3aXRoIGEgc3BlY2lmaWVkIGNsaWVudCBjb25uZWN0aW9uLiBBbmQgU1BNIG11c3QgcHJvdmlkZSBzYW1lIHJoYW5kbGUgZm9yIG1zZy5yaGFuZGxlIHdpdGggYWxsIHN1YnNlcXVlbnQgbWVzc2FnZXMgZGVsaXZlcmVkIG9uIHRoaXMgY29ubmVjdGlvbi4gT24gc3VjY2VzcyB0aGUgcmhhbmRsZSBpcyByZXRhaW5lZCBieSB0aGUgaW1wbGVtZW50YXRpb24gYW5kIHByb3ZpZGVkIGluIGFsbCBmdXR1cmUgbWVzc2FnZXMgb24gdGhhdCBjb25uZWN0aW9uIGFzIHBhcnQgb2YgdGhlIHBzYV9tc2dfdCBzdHJ1Y3R1cmUuICA8YnIgLz4yLiBTZXR0aW5nIHRoZSByaGFuZGxlIGZvciBhIGNvbm5lY3Rpb24gZHVyaW5nIGRpc2Nvbm5lY3Rpb24gaGFzIG5vIG9ic2VydmFibGUgZWZmZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2V0X3JoYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDbGllbnQgY29ubmVjdHMgdG8gUm9UIHNlcnZpY2UgYW5kIFJvVCBzZXJ2aWNlIGNoZWNrcyB0aGUgdmFsdWUgb2YgbXNnLnJoYW5sZGUgdmFsdWUgZHVpbmcgUFNBX0lQQ19DT05ORUNUMi4gQ2xpZW50IHNlbmQgY2FsbCBtc2cgdG8gUm9UIHNlcnZpY2UgYW5kIFJvVCBzZXJ2aWNlIGNoZWNrcyB0aGUgdmFsdWUgb2YgbXNnLnJoYW5sZGUgdmFsdWUgZHVpbmcgUFNBX0lQQ19DT05ORUNUIDxiciAvPjMuIFJPVCBzZXJ2aWNlIHNldHMgdGhlIHJoYW5kbGUgd2l0aCBrbm93biB2YWx1ZS4gPGJyIC8+NC4gQ2xpZW50IHNlbmQgY2FsbCBtc2cgdG8gUm9UIHNlcnZpY2UgYW5kIFJvVCBzZXJ2aWNlIG5vdyBjb21wYXJlIHRoZSB2YWx1ZSBvZiBtc2cucmhhbm5kbGUgIHdpdGggcHJldmlvdXNseSBzZXQgdmFsdWUgPGJyIC8+NS4gUk9UIHNlcnZpY2Ugc2V0cyB0aGUgcmhhbmRsZSB3aXRoIGtub3duIHZhbHVlIG90aGVyIHRoYW4gcHJldmlvdXNseSBzZXQgdmFsdWUgPGJyIC8+Ni4gQ2xpZW50IHNlbmQgY2FsbCBtc2cgdG8gUm9UIHNlcnZpY2UgYW5kIFJvVCBzZXJ2aWNlIG5vdyBjb21wYXJlIHRoZSB2YWx1ZSBvZiBtc2cucmhhbm5kbGUgd2l0aCBsYXN0IHNldCB2YWx1ZSA8YnIgLz43LiBUaGUgcmV2ZXJzZSBoYW5kbGUgZm9yIGEgY29ubmVjdGlvbiBpcyBOVUxMIHVudGlsIHBzYV9zZXRfcmhhbmRsZSgpIGlzIHVzZWQgPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwcyBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffc2V0X3JoYW5kbGUscHNhX2dldCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgMS4gcHNhX2NhbGwoKTpUaGUgY2FsbGVyIGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgb25lIG9yIG1vcmUgYnVmZmVycyB0byByZWNlaXZlIGEgcmVzcG9uc2UgKG91dF92ZWMpLiA8YnIgLz4yLiBwc2FfZ2V0KCk6IFRoZSBhcnJheSBpbl9zaXplIHByb3ZpZGVzIHRoZSBzaXplIG9mIGVhY2ggY2xpZW50IGlucHV0IHZlY3RvciBpbiBieXRlcy4gVGhlIGFycmF5IG91dF9zaXplIHByb3ZpZGVzIHRoZSBzaXplIG9mIGVhY2ggY2xpZW50IG91dHB1dCB2ZWN0b3IgaW4gYnl0ZXMuIDxiciAvPjMuIHBzYV9yZWFkKCk6IHBhcmFtZXRlciBmcm9tIHRoZSBjbGllbnQgaW5wdXQgdmVjdG9yLiBTdHJlYW1zIHVwIHRvIHRoZSBuZXh0IG51bV9ieXRlcyBieXRlcyBvZiBjbGllbnQgaW5wdXQgdmVjdG9yIGludmVjX2lkeCBpbiB0aGUgbWVzc2FnZSBpZGVudGlmaWVkIGJ5IG1zZ19oYW5kbGUgdG8gdGhlIFNlY3VyZSBQYXJ0aXRpb24gYnVmZmVyLiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLiA8YnIgLz40LiBwc2FfcmVhZCgpOiBJZiBudW1fYnl0ZXMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBhdmFpbGFibGUgZGF0YSBpbiB0aGUgaW5wdXQgdmVjdG9yIHRoZW4gbnVtX2J5dGVzIGFyZSBjb3BpZWQgdG8gYnVmZmVyLCBhbmQgdGhlIHJlbWFpbmluZyBkYXRhIGluIHRoZSBpbnB1dCB2ZWN0b3IgY2FuIGJlIHJlYWQgYnkgc3Vic2VxdWVudCBjYWxscyB0byBwc2FfcmVhZCgpIHdpdGggdGhlIHNhbWUgbXNnX2hhbmRsZSBhbmQgaW52ZWNfaWR4LiA8YnIgLz41LiBwc2FfcmVhZCgpOiBSb1QgU2VydmljZXMgY2FuIGRldGVybWluZSBob3cgbXVjaCBkYXRhIGlzIGF2YWlsYWJsZSB0byByZWFkIGZyb20gdGhlIG1lc3NhZ2UgYmFzZWQgb24gdGhlIGluX3NpemVbXSBhdHRyaWJ1dGUgb2YgdGhlIHBzYV9tc2dfdCBtZXNzYWdlIHJldHVybmVkIGZyb20gcHNhX2dldCgpLiBJZiBhbiBpbnB1dCB2ZWN0b3IgaGFzIG5vdCBiZWVuIHBhc3NlZCBieSB0aGUgY2xpZW50IHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgaW5fc2l6ZVtdIGZvciB0aGF0IHZlY3RvciBpcyB6ZXJvLiA8YnIgLz42LiBwc2FfcmVhZCgpOiBJZiBudW1fYnl0ZXMgaXMgZ3JlYXRlciB0aGFuIHRoZSByZW1haW5pbmcgZGF0YSBpbiB0aGUgaW5wdXQgdmVjdG9yIHRoZW4gdGhlIHJlbWFpbmluZyBpbnB1dCBieXRlcyBhcmUgY29waWVkIHRvIGJ1ZmZlciBhbmQgdGhlIGNhbGwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4gQW55IHNwYWNlIGFmdGVyIHRoaXMgaW4gYnVmZmVyIGlzIG5vdCBtb2RpZmllZC4gU3Vic2VxdWVudCBjYWxscyBvZiBwc2FfcmVhZCgpIG9yIHBzYV9za2lwKCkgd2l0aCB0aGUgc2FtZSBtZXNzYWdlIGlucHV0IHZlY3RvciB3aWxsIHJlcG9ydCB0aGF0IHRoZXJlIGlzIG5vIG1vcmUgZGF0YSBpbiB0aGUgdmVjdG9yLiA8YnIgLz43LiBwc2Ffc2tpcCgpOiBTa2lwIG92ZXIgcGFydCBvZiBhIGNsaWVudCBpbnB1dCB2ZWN0b3IuIEFkdmFuY2VzIHRoZSBjdXJyZW50IHJlYWQgb2Zmc2V0IGJ5IHNraXBwaW5nIHVwIHRvIG51bV9ieXRlcyBieXRlcyBmb3IgaW5wdXQgdmVjdG9yIGludmVjX2lkeCBpbiB0aGUgbWVzc2FnZSBpZGVudGlmaWVkIGJ5IG1zZ19oYW5kbGUuIHBzYV9za2lwKCk6IFdoZW4gcHNhX3NraXAgcmV0dXJucywgaXQgcmV0dXJucyB3aXRoIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2tpcHBlZCAgPGJyIC8+OC4gcHNhX3NraXAoKTogSWYgVGhlcmUgd2FzIG5vIHJlbWFpbmluZyBkYXRhIGluIHRoaXMgaW5wdXQgdmVjdG9yLCByZXR1cm4gemVybyA8YnIgLz45LnBzYV9za2lwKCk6IElmIG51bV9ieXRlcyBpcyBncmVhdGVyIHRoYW4gdGhlIHJlbWFpbmluZyBzaXplIG9mIHRoZSBpbnB1dCB2ZWN0b3IgdGhlbiB0aGUgcmVtYWluaW5nIHNpemUgb2YgdGhlIGlucHV0IHZlY3RvciBpcyByZXR1cm5lZC4gU3Vic2VxdWVudCBjYWxscyBvZiBwc2FfcmVhZCgpIG9yIHBzYV9za2lwKCkgd2l0aCB0aGUgc2FtZSBtZXNzYWdlIGlucHV0IHZlY3RvciB3aWxsIHJlcG9ydCB0aGF0IHRoZXJlIGlzIG5vIG1vcmUgZGF0YSBpbiB0aGUgdmVjdG9yLiA8YnIgLz4gfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9jYWxsX3JlYWRfYW5kX3NraXAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLkNsaWVudCBjb25uZWN0cyB0byBSb1Qgc2VydmljZSA8YnIgLz4yLkNsaWVudCBzZW5kcyBmb3VyIGlucHV0IHZlY3RvcnMgdG8gUm9UIHNlcnZpY2UgdXNpbmcgcHNhX2NhbGwgPGJyIC8+My4gUm9UIHNlcnZpY2UgY2hlY2tzIGZvbGxvd2luZzogPGJyIC8+ICAgIC0gUmVwb3J0aW5nIG9mIGlucHV0IHZlY3RvcnMgc2l6ZSB0aHJvdWdoIG1zZy5pbl9zaXplIDxiciAvPiAgICAtIElucHV0IHZlY3RvcnMgY29udGVudCByZWFkaW5nIHRocm91Z2ggcHNhX3JlYWQgPGJyIC8+ICAgIC1JbmJvdW5kIC9PdXRib3VuZCBvZmZzZXQgcmVhZGluZyA8YnIgLz4gICAgLUluYm91bmQvT3V0Ym91bmQgIG9mZnNldCBza2lwcGluZyA8YnIgLz4gICAgLVplcm8gYnl0ZSByZWFkIGFuZCBza2lwIDxiciAvPiAgICAtb3V0X2xlbj0wIGNoZWNrIDxiciAvPjQuIENsaWVudCByZWNpZXZlcyB0aGUgc3RhdHVzIG9mICBSb1Qgc2VydmljZSBjaGVja3MgYW5kIGNsb3NlcyB0aGUgY29ubmVjdGlvbiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2FsbCxwc2FfcmVhZCxwc2Ffc2tpcCxwc2FfZ2V0LCAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgMS4gcHNhX2NhbGwoKTogVGhlIGNhbGxlciBjYW4gb3B0aW9uYWxseSBwcm92aWRlIG9uZSBvciBtb3JlIGJ1ZmZlcnMgdG8gcmVjZWl2ZSBhIHJlc3BvbnNlIChvdXRfdmVjKS4gT24gcmV0dXJuIGZyb20gcHNhX2NhbGwoKSB0aGUgbGVuIHZhbHVlIHdpbGwgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gaW5kaWNhdGUgdGhlIG51bWJlciBvZiBieXRlcyBvZiBkYXRhIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlciBieSB0aGUgUm9UIFNlcnZpY2UuIDxiciAvPjIuIHBzYV93cml0ZSgpOiBBcHBlbmRzIG51bV9ieXRlcyBvZiBkYXRhIGZyb20gYnVmZmVyIHRvIHRoZSBjbGllbnQgb3V0cHV0IHZlY3RvciBvdXR2ZWNfaWR4IGluIHRoZSBtZXNzYWdlIGlkZW50aWZpZWQgYnkgbXNnX2hhbmRsZS4gU2VxdWVudGlhbCBjYWxscyB1c2luZyB0aGUgc2FtZSBtc2dfaGFuZGxlIGFuZCBvdXR2ZWNfaWR4IHdpbGwgYmUgY29uY2F0ZW5hdGVkIGluIHRoZSBvdXRwdXQgdmVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9jYWxsX2FuZF93cml0ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDbGllbnQgY29ubmVjdHMgdG8gUm9UIHNlcnZpY2UgPGJyIC8+Mi4gQ2xpZW50IHNlbmRzIGZvdXIgb3V0cHV0IHZlY3RvcnMgdG8gUm9UIHNlcnZpY2UgdXNpbmcgcHNhX2NhbGwgPGJyIC8+My4gUm9UIHNlcnZpY2UgY2hlY2tzIGZvbGxvd2luZzogPGJyIC8+ICAtIFJlcG9ydGluZyBvZiBvdXRwdXQgdmVjdG9ycyBzaXplIHRocm91Z2ggbXNnLm91dF9zaXplIDxiciAvPiAgLSBpbl9sZW49MCBjaGVjayA8YnIgLz4gIC0gemVybyBieXRlIHdyaXRlIDxiciAvPiAgLSBPdXQgdmVjdG9yIHdyaXRlcyB1c2luZyBwc2Ffd3JpdGUgPGJyIC8+ICAgLSAgVmVjdG9yIHdyaXRlIGNvbmNhdGVuYXRpb24gPGJyIC8+NC4gQ2xpZW50IHJlY2lldmVzIHRoZSBzdGF0dXMgb2YgUm9UIHNlcnZpY2UgY2hlY2tzLCBjcm9zcyBjaGVjayB0aGUgY29udGVudCBvZiBvdXQgdmVjdG9ycyBhbmQgY2xvc2VzIHRoZSBjb25uZWN0aW9uIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2FsbCxwc2FfZ2V0LHBzYV93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgMS4gIHBzYV9jYWxsKCk6ICBBbnkgSS9PIHZlY3RvciBvZiBsZW5ndGggemVybyBpcyBwZXJtaXR0ZWQgYW5kIHdpbGwgYmUgdHJlYXRlZCBhcyBhbiBlbXB0eSBvciBub24tZXhpc3RlbnQgdmVjdG9yIGJ5IHRoZSBmcmFtZXdvcmsuIFdoZW4gbGVzcyB0aGFuIGZvdXIgdmVjdG9ycyBhcmUgcHJvdmlkZWQgdG8gcHNhX2NhbGwoKSBmb3IgZWl0aGVyIGlucHV0IG9yIG91dHB1dCwgdGhlbiB0aGUgcmVtYWluaW5nIHZlY3RvcnMgaGF2ZSB6ZXJvIGxlbmd0aCBhbmQgdGhlIGluX3NpemUgYW5kIG91dF9zaXplIGVsZW1lbnRzIGZvciB0aGVzZSB2ZWN0b3JzIHdpbGwgYmUgemVyby4gPGJyIC8+Mi4gcHNhX2NhbGwoKTogSWYgaW5fbGVuIGlzIHplcm8gdGhlbiBpbl92ZWMgaXMgaWdub3JlZCAgPGJyIC8+My4gc2FfY2FsbCgpOiBJZiBvdXRfbGVuIGlzIHplcm8gdGhlbiBvdXRfdmVjIGlzIGlnbm9yZWQgIDxiciAvPjQuIHBzYV9nZXQoKTogSWYgYW4gaW5wdXQgYW5kIG91dHB1dCB2ZWN0b3IgaGFzIG5vdCBiZWVuIHBhc3NlZCBieSB0aGUgY2xpZW50IHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgaW5fc2l6ZVtdIGFuZCBvdXRfc2l6ZVtdIGZvciB0aGF0IHZlY3RvciBpcyB6ZXJvLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF96ZXJvX2xlbmd0aF9pbnZlYygpW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfemVyb19sZW5ndGhfb3V0dmVjKCkgfCBUZXN0IHplcm8gbGVudGggaW5wdXQgdmVjdG9yOiA8YnIgLz4xLiBDbGllbnQgY29ubmVjdHMgdG8gUm9UIHNlcnZpY2UgPGJyIC8+Mi4gQ2xpZW50IHNlbmRzIHRocmVlIGlucHV0IGFuZCBvbmUgb3V0dmVjIHZlY3RvcnMgdG8gUm9UIHNlcnZpY2UgdXNpbmcgcHNhX2NhbGwgLSBpbnZlYyAwIGFzIHplcm8gbGVuZ3RoIHZlY3RvciwgaW52ZWMgMSBhcyBOVUxMIGFuZCBpbnZlYyAyIGFuZCBvdXR2ZWMgMCBhcyBub24temVybyBsZW5ndGggdmVjdG9yIDxiciAvPjMuIFJvVCBzZXJ2aWNlIGNoZWNrcyBzaXplIG9mIGVhY2ggdmVjdG9ycyByZXBvcnRlZCB0aHJvdWdoIG1zZy5pbl9zaXplIGFuZCBtc2cub3V0X3NpemUgPGJyIC8+NC4gQ2xpZW50IHJlY2lldmVzIHRoZSBzdGF0dXMgb2YgY2hlY2tzIGFuZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gPGJyIC8+VGVzdCB6ZXJvIGxlbnRoIG91dHB1dCB2ZWN0b3I6IDxiciAvPjEuIENsaWVudCBjb25uZWN0cyB0byBSb1Qgc2VydmljZSA8YnIgLz4yLiBDbGllbnQgc2VuZHMgb25lICBpbnB1dCBhbmQgdGhyZWUgb3V0dmVjIHZlY3RvcnN0byBSb1Qgc2VydmljZSB1c2luZyBwc2FfY2FsbCAtIG91dHZlYyAwIGFzIHplcm8gbGVuZ3RoIHZlY3Rvciwgb3V0dmVjIDAgYXMgTlVMTCBhbmQgaW52ZWMgMCBhbmQgb3V0dmVjIDIgYXMgbm9uLXplcm8gbGVuZ3RoIHZlY3RvciA8YnIgLz4zLiBSb1Qgc2VydmljZSBjaGVja3Mgc2l6ZSBvZiBlYWNoIHZlY3RvcnMgcmVwb3J0ZWQgdGhyb3VnaCBtc2cuaW5fc2l6ZSBhbmQgbXNnLm91dF9zaXplIDxiciAvPjQuIENsaWVudCByZWNpZXZlcyB0aGUgc3RhdHVzIG9mIGNoZWNrcyBhbmQgY2xvc2VzIHRoZSBjb25uZWN0aW9uIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gfCBwc2FfY2FsbCxwc2FfZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgMS4gV2hlbiBjbGllbnQgcHJvdmlkZXMgYW4gaW5wdXQgYW5kIG91dHB1dCB2ZWN0b3JzIHdoaWNoIGFyZSByZWZlcmVuY2luZyB0byBzYW1lIG1lbW9yeSBsb2NhdGlvbiwgYSBwc2FfcmVhZCBhZnRlciBwc2Ffd3JpdGUgdG8gdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9uIGNhbiByZXR1cm4gb3JpZ2luYWwgb3IgbW9kaWZpZWQgdmFsdWUuICA8YnIgLz4yLiBXaGVuIGNsaWVudCBwcm92aWRlcyBhbiBpbnB1dCBhbmQgb3V0cHV0IHZlY3RvcnMgd2hpY2ggYXJlIHJlZmVyZW5jaW5nIHRvIHNhbWUgbWVtb3J5IGxvY2F0aW9uLCBhIHBzYV93cml0ZShzKSB0byBib3RoIG1lbW9yeSB2ZWN0b3JzIGNhbiByZXR1cm4gZWl0aGVyIHRoZSAxc3Qgb3IgdGhlIDJuZCB2YWx1ZSB3cml0dGVuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9vdmVybGFwcGluZ192ZWN0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDbGllbnQgcHJvdmlkZXMgb25lIGlucHV0IGFuZCAyIG91dHB1dCB2ZWN0b3JzIHdoaWNoIGFyZSBwb2ludGluZyB0byBzYW1lIGxvY2F0aW9uLiAgPGJyIC8+Mi4gUm9UIHNlcnZpY2UgcGVyZm9ybXMgcmVhZCBhZnRlciB3cml0ZSBvcGVyYXRpb24gb24gdG8gb3V0dmVjLTAgYW5kIGV4cGVjdHMgcmV0dXJuIHZhbHVlIGVpdGhlciBtb2RpZmllZCBvbmUgb3IgdGhlIG9yaWdpbmFsICA8YnIgLz4zLiBSb1Qgc2VydmljZSBwZXJmb3JtcyB3cml0ZSBvcGVyYXRpb24gdG8gb3V0dmVjLTEgYW5kIHVuYmxvY2sgdGhlIGNvbm5lY3Rpb24uIFRoZSB3cml0ZSBwZXJmb3JtZWQgaXMgdG8gbWltaWMgd3JpdGUgYWZ0ZXIgd3JpdGUgb3BlcmF0aW8gdG8gdGhlIG92ZXJsYXBwaW5nIHZlY3Rvci4gPGJyIC8+NC4gQ2xpZW50IGNoZWNrIHRoZSB2YWx1ZSBvZiBvdXR2ZWMuIFRoZSB2YWx1ZSBzaG91bGQgYmUgZWl0aGVyIHRoZSB2YWx1ZSB3cml0dGVuIGJ5IGZpcnN0IHBzYV93cml0ZSBvciB0aGUgc2Vjb25kIHBzYV93cml0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2FsbCxwc2Ffd3JpdGUscHNhX3JlYWQgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMDQgICAgICAgIHwgcHNhX2Nvbm5lY3QoKSBkb2VzIG5vdCByZXR1cm4gaWYgUm9UIFNlcnZpY2UgZG9lcyBub3QgZXhpc3Qgb24gcGxhdGZvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9zaWRfZG9lc19ub3RfZXhpc3RzKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdoaWNoIGRvZXMgbm90IGV4aXN0IG9uIGEgcGxhdGZvcm0gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMDUgICAgICAgIHwgcHNhX2Nvbm5lY3QoKSBkb2VzIG5vdCByZXR1cm4gaWYgVmVyc2lvbiBwb2xpY3kgaXMgU1RSSUNUIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBpcyBISUdIRVIgdGhhbiBtaW5pbXVtIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9zdHJpY3RfcG9saWN5X2hpZ2hlcl9taW5vcl92ZXJzaW9uKCkgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdob3NlIFZlcnNpb24gcG9saWN5IGlzIFNUUklDVCBhbmQgcmVxdWVzdGVkIG1pbm9yIHZlcnNpb24gaXMgSElHSEVSIHRoYW4gbWluaW11bSB2ZXJzaW9uLiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMDYgICAgICAgIHwgcHNhX2Nvbm5lY3QoKSBkb2VzIG5vdCByZXR1cm4gaWYgVmVyc2lvbiBwb2xpY3kgaXMgU1RSSUNUIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBsb3dlciB0aGFuIG1pbmltdW0gdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9zdHJpY3RfcG9saWN5X2xvd2VyX21pbm9yX3ZlcnNpb24oKSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdob3NlIFZlcnNpb24gcG9saWN5IGlzIFNUUklDVCBhbmQgcmVxdWVzdGVkIG1pbm9yIHZlcnNpb24gaXMgTG93ZXIgdGhhbiBtaW5pbXVtIHZlcnNpb24uIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcCBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMDcgICAgICAgIHwgcHNhX2Nvbm5lY3QoKSBkb2VzIG5vdCByZXR1cm4gaWYgVmVyc2lvbiBwb2xpY3kgaXMgUkVMQVhFRCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gaXMgYmlnZ2VyIHRoYW4gbWluaW11bSB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9yZWxheF9wb2xpY3lfaGlnaGVyX21pbm9yX3ZlcnNpb24oKSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdob3NlIFZlcnNpb24gcG9saWN5IGlzIFJFTEFYRUQgYW5kIHJlcXVlc3RlZCBtaW5vciB2ZXJzaW9uIGlzIEhJR0hFUiB0aGFuIG1pbmltdW0gdmVyc2lvbi4gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMDggICAgICAgIHwgMS4gcHNhX2Nvbm5lY3QoKSBkb2VzIG5vdCByZXR1cm4gaWYgU2VydmljZSB0byBub25fc2VjdXJlX2NsaWVudCBpcyBub3QgYXZhaWxhYmxlIDxiciAvPjIuIE1hbmlmZXN0IHBhcmFtZXRlciAtIFRoZSBub25fc2VjdXJlX2NsaWVudHMgZmllbGQgY29udGFpbnMgYSBib29sZWFuIHRvIGluZGljYXRlIGlmIGl0IGlzIGFjY2Vzc2libGUgdG8gTlNQRSBjbGllbnRzLiBSb1QgU2VydmljZXMgYXJlIGFsd2F5cyBhY2Nlc3NpYmxlIHRvIFNQRSBjbGllbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9zZWN1cmVfYWNjZXNzX29ubHlfY29ubmVjdGlvbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdoaWNoIGFsbG93IHNlY3VyZSBvbmx5IGNvbm5lY3Rpb24uICA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMDkgICAgICAgIHwgMS4gcHNhX2Nvbm5lY3QoKSBkb2VzIG5vdCByZXR1cm4gaWYgU0lEIGlzIG5vdCBtZW50aW9uZWQgaW4gZGVwZW5kZW5jaWVzIGZpZWxkLiA8YnIgLz4yLiBNYW5pZmVzdCBwYXJhbWV0ZXItIGRlcGVuZGVuY2llcyAob3B0aW9uYWwpIDxiciAvPklmIGFjY2VzcyBiZXR3ZWVuIGEgU2VjdXJlIFBhcnRpdGlvbiAoYWN0aW5nIGFzIGNsaWVudCkgYW5kIGEgUm9UIFNlcnZpY2UgKGFjdGluZyBhcyBzZXJ2ZXIpIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0LCB0aGVuIHRoZSBjbGllbnQgaXMgbm90IHBlcm1pdHRlZCB0byBjb25uZWN0IHRvIHRoZSBSb1QgU2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF91bmV4dGVybl9zaWRfY29ubmVjdGlvbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdoaWNoIGlzIG5vdCBtZW50aW9uZWQgYXMgZXh0ZXJuYWwgU0lEIGluIG1hbmlmZXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMTAgICAgICAgIHwgSXQgaXMgbm90IHJlcXVpcmVkIGZvciB0aGUgbWlub3JfdmVyc2lvbiBvciBtaW5vcl9wb2xpY3kgYXR0cmlidXRlcyB0byBiZSBzcGVjaWZpZWQuIElmIHRoZXkgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0LCB0aGUgUm9UIFNlcnZpY2Ugd2lsbCBoYXZlIGRlZmF1bHQgYXR0cmlidXRlcyBvZiBtaW5vcl92ZXJzaW9uPTEgYW5kIG1pbm9yX3BvbGljeT0iU1RSSUNUIi4gcHNhX2Nvbm5lY3QoKSBkb2VzIG5vdCByZXR1cm4gaWYgcmVxdWVzdGVkIHZlcnNpb24gaGlnaGVyIHRoYW4gbWluaW11bSB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF91bnNwZWNpZmllZF9wb2xpY3lfd2l0aF9oaWdoZXJfbWlub3JfdmVyKCkgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdob3NlIFZlcnNpb24gcG9saWN5IGlzIG5vdCBtZW50aW9uZWQgYW5kIHJlcXVlc3RlZCBtaW5vciB2ZXJzaW9uIGlzIEhJR0hFUiB0aGFuIG1pbmltdW0gdmVyc2lvbi4gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMTEgICAgICAgIHwgSXQgaXMgbm90IHJlcXVpcmVkIGZvciB0aGUgbWlub3JfdmVyc2lvbiBvciBtaW5vcl9wb2xpY3kgYXR0cmlidXRlcyB0byBiZSBzcGVjaWZpZWQuIElmIHRoZXkgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0LCB0aGUgUm9UIFNlcnZpY2Ugd2lsbCBoYXZlIGRlZmF1bHQgYXR0cmlidXRlcyBvZiBtaW5vcl92ZXJzaW9uPTEgYW5kIG1pbm9yX3BvbGljeT0iU1RSSUNUIi4gIHBzYV9jb25uZWN0KCkgZG9lcyBub3QgcmV0dXJuIGlmIHJlcXVlc3RlZCB2ZXJzaW9uIGxvd2VyIHRoYW4gbWluaW11bSB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF91bnNwZWNpZmllZF9wb2xpY3lfd2l0aF9sb3dlcl9taW5vcl92ZXIoKSAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdob3NlIFZlcnNpb24gcG9saWN5IGlzIG5vdCBtZW50aW9uZWQgYW5kIHJlcXVlc3RlZCBtaW5vciB2ZXJzaW9uIGlzIGxvd2VyIHRoYW4gbWluaW11bSB2ZXJzaW9uLiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMTIgICAgICAgIHwgcHNhX2Nsb3NlKCkgZG9lcyBub3QgcmV0dXJuIGlmIGFuIGludmFsaWQgaGFuZGxlIHdhcyBwcm92aWRlZCB0aGF0IGlzIG5vdCB0aGUgbnVsbCBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfY2xvc2Vfd2l0aF9pbnZhbGlkX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jbG9zZSB3aXRoIElOVkFMSURfSEFORExFIHdoaWNoIGlzIG5vdCBOVUxMLiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2xvc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMTMgICAgICAgIHwgcHNhX2dldCgpIGRvZXMgbm90IHJldHVybiBpZiBzaWduYWwgaGFzIG1vcmUgdGhhbiBhIHNpbmdsZSBiaXQgc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfZ2V0X3dpdGhfbW9yZV90aGFuX29uZV9zaWduYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9nZXQgd2l0aCBhIHNpZ25hbCB3aG8gaGFzIG1vcmUgdGhhbiBhIHNpbmdsZSBiaXQgc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMTQgICAgICAgIHwgQWZ0ZXIgYSBSb1QgU2VydmljZSBtZXNzYWdlIGlzIHNpZ25hbGVkLCBwc2FfZ2V0KCkgZnVuY3Rpb24gaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgbWVzc2FnZSBkZXRhaWxzLiBFYWNoIG1lc3NhZ2UgY2FuIG9ubHkgYmUgcmV0cmlldmVkIG9uY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfZ2V0X2NhbGxlZF90d2ljZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9nZXQgd2l0aCBhIHZhbGlkIHNpZ25hbCBiYWNrIHRvIGJhY2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMTUgICAgICAgIHwgcHNhX2dldCgpIGRvZXMgbm90IHJldHVybiBpZiBzaWduYWwgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIFJvVCBTZXJ2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfZ2V0X3dpdGhfbm9uX3JvdF9zaWduYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9nZXQgd2l0aCBET09SQkVMTCBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMTYgICAgICAgIHwgcHNhX2dldCgpIGRvZXMgbm90IHJldHVybiBpZiBUaGUgUm9UIFNlcnZpY2Ugc2lnbmFsIGlzIG5vdCBjdXJyZW50bHkgYXNzZXJ0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfZ2V0X3dpdGhfdW5hc3NlcnRlZF9zaWduYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9nZXQgd2l0aCBzaW5nYWwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCBhc3NlcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMTcgICAgICAgIHwgRWFjaCBSb1QgU2VydmljZSBsaXN0ZWQgY3JlYXRlcyBhIGRlcGVuZGVuY3kgZnJvbSB0aGUgY2xpZW50IFBhcnRpdGlvbiB0byBhIHNlcnZlciBQYXJ0aXRpb24uIFdpdGhpbiB0aGUgcmVzdWx0aW5nIG5ldHdvcmsgb2YgZGVwZW5kZW5jaWVzLCB0aGVyZSBtdXN0IGJlIG5vIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBiZXR3ZWVuIFNlY3VyZSBQYXJ0aXRpb25zLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBkZWFkbG9jayBiZWNhdXNlIHRoZSBTZXJ2aWNlIHJlcXVlc3RzIGFyZSBhbHdheXMgc3luY2hyb25vdXMuRm9yIHRoZSBzYW1lIHJlYXNvbiwgYSBTZWN1cmUgUGFydGl0aW9uIG11c3Qgbm90IHVzZSBhIFJvVCBTZXJ2aWNlIHRoYXQgaXMgZGVmaW5lZCB3aXRoaW4gaXRzZWxmLiBEaXJlY3QgZnVuY3Rpb24gY2FsbHMgbXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgSVBDIHdoZXJlIHRoZXJlIGlzIGEgZGVwZW5kZW5jeSBiZXR3ZWVuIFJvVCBTZXJ2aWNlcyB3aXRoaW4gYSBzaW5nbGUgU2VjdXJlIFBhcnRpdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wYXJ0aXRpb25fY2FsbGluZ19pdHNfb3duX3JvdF9zZXJ2aWNlKCkgICAgICAgICAgICAgICAgICAgICAgfCBQYXJ0aXRpb24gY2FsbGluZyBpdHMgb3duIFJPVCBzZXJ2aWNlIHVzaW5nIHBzYV9jb25uZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMTggICAgICAgIHwgcHNhX3NldF9yaGFuZGxlKCkgZG9lcyBub3QgcmV0dXJuICBpZiBhbiBpbnZhbGlkIG1lc3NhZ2UgaGFuZGxlIHdhcyBwcm92aWRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2V0X3JoYW5kbGVfd2l0aF9pbnZhbGlkX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9zZXRfcmhhbmxkZSB3aXRoIGFuIElOVkFMSURfSEFORExFIHdoaWNoIGlzIG5vdCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffc2V0X3JoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMTkgICAgICAgIHwgcHNhX3NldF9yaGFuZGxlKCkgZG9lcyBub3QgcmV0dXJuIGlmIE51bGwgaGFuZGxlIHdhcyBwYXNzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2V0X3JoYW5kbGVfd2l0aF9udWxsX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9zZXRfcmhhbmxkZSB3aXRoIE5VTEwgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffc2V0X3JoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMjAgICAgICAgIHwgSWYgbWVzc2dhZSB0eXBlIGlmIGlzIFBTQV9JUENfQ09OTkVDVCB0aGVuIHVzZSBvZiBzdGF0dXMgdmFsdWVzIGluIHBzYV9yZXBseSgpIG90aGVyIHRoYW4gUFNBX1NVQ0NFU1Mgb3IgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCBpcyBhIGZhdGFsIHByb2dyYW1taW5nIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVwbHlfd2l0aF9pbnZhbGlkX2Nvbm5lY3Rfc3RhdHVzX2NvZGUoKSAgICAgICAgICAgICAgICAgfCBDYWxsIHRvIHBzYV9yZXBseSBkdXJpbmcgUFNBX0lQQ19DT05ORUNUIHdpdGggc3RhdHVzIGNvZGUgb3RoZXIgdGhhbiBQU0FfU1VDQ0VTUyBhbmQgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMjEgICAgICAgIHwgSWYgbWVzc2FnZSB0eXBlIGlmIFBTQV9JUENfQ0FMTCAsIHRoZSB1c2Ugb2Ygb3RoZXIgcmVzZXJ2ZWQgc3RhdHVzIGNvZGVzIGluIHRoZSByYW5nZSBJTlQzMl9NSU4rMSB0byBJTlQzMl9NSU4rMTI3IGZvciBwc2FfcmVwbHkoKSBpcyBhIGZhdGFsIHByb2dyYW1taW5nIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVwbHlfd2l0aF9pbnZhbGlkX2NhbGxfc3RhdHVzX2NvZGUoKSAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHRvIHBzYV9yZXBseSBkdXJpbmcgUFNBX0lQQ19DQUxMIHdpdGggc3RhdHVzIGNvZGUgb3RoZXIgdGhhbiBhbGxvd2VkIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMjIgICAgICAgIHwgcHNhX3JlcGx5KCkgZG9lcyBub3QgcmV0dXJuIGlmIHRoZSBtZXNzYWdlIGhhbmRsZSBpcyBpbnZhbGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVwbHlfd2l0aF9pbnZhbGlkX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZXBseSB3aXRoIGFuIElOVkFMSURfSEFORExFIHdoaWNoIGlzIG5vdCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMjMgICAgICAgIHwgcHNhX3JlcGx5KCkgZG9lcyBub3QgcmV0dXJuIGlmIHRoZSBtZXNzYWdlIGhhbmRsZSBpcyAgTnVsbCBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVwbHlfd2l0aF9udWxsX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZXBseSB3aXRoIGEgTlVMTCBIQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMjQgICAgICAgIHwgcHNhX2NhbGwoKSBkb2VzIG5vdCByZXR1cm4gaWYgYW4gaW52YWxpZCBoYW5kbGUgd2FzIHBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jYWxsIHdpdGggYW4gSU5WQUxJRF9IQU5ETEUgd2hpY2ggaXMgbm90IE5VTEwuUGVyZm9ybSB0aGlzIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMjUgICAgICAgIHwgcHNhX2NhbGwoKSBkb2VzIG5vdCByZXR1cm4gaWYgYW4gbnVsbCBoYW5kbGUgd2FzIHBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfY2FsbF93aXRoX251bGxfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jYWxsIHdpdGggYSBOVUxMIEhBTkRMRS4gPGJyIC8+UGVyZm9ybSB0aGlzIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMjYgICAgICAgIHwgcHNhX2NhbGwoKSBkb2VzIG5vdCByZXR1cm4gaWYgIGluX2xlbiArIG91dF9sZW4gPiBQU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfY2FsbF93aXRoX2lvdmVjX21vcmVfdGhhbl9tYXhfbGltaXQoKSAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jYWxsIHdpdGggbW9yZSB0aGFuIGZvdXIgSU9WRUNzLiA8YnIgLz5QZXJmb3JtIHRoaXMgc3RlcCBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMjcgICAgICAgIHwgMS4gcHNhX2NhbGwoKSByZXR1cm5zICBQU0FfRFJPUF9DT05ORUNUSU9OIHdoZW4gdGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gZHJvcHBlZCBieSB0aGUgUm9UIFNlcnZpY2UuIFRoaXMgaW5kaWNhdGVzIHRoYXQgZWl0aGVyIHRoaXMgb3IgYSBwcmV2aW91cyBtZXNzYWdlIHdhcyBpbnZhbGlkKFRoZSBTUE0gd2lsbCBpbXBsZW1lbnQgb25lIG9mIHRoZSBmb2xsb3dpbmcgYmVoYXZpb3JzIGluIHRoaXMgc2l0dWF0aW9uOr8gdGhpcyBpcyBhIGNsaWVudCBmYXRhbCBlcnJvciBhbmQgcHNhX2NhbGwoKSB3aWxsIG5vdCByZXR1cm6/IHBzYV9jYWxsKCkgcmV0dXJuaW5nIFBTQV9EUk9QX0NPTk5FQ1RJT04uIEluIHRoaXMgY2FzZSwgYWxsIHN1YnNlcXVlbnQgY2FsbHMgdG8gcHNhX2NhbGwoKSBvbiB0aGlzIGNvbm5lY3Rpb24gd2lsbCBpbW1lZGlhdGVseSByZXR1cm4gUFNBX0RST1BfQ09OTkVDVElPTiBhbmQgdGhlIGNvbm5lY3Rpb24gbXVzdCBiZSBjbG9zZWQpIDxiciAvPjIuIHBzYV9yZXBseSgpOiBJZiB0aGUgbWVzc2FnZSB0eXBlIGlzIFBTQV9JUENfQ0FMTCBhbmQgdGhlIGNsaWVudCBoYXMgbWFkZSBhbiBpbnZhbGlkIHJlcXVlc3QsIHRoZW4gdGhlIFJvVCBTZXJ2aWNlIGNhbiByZXF1ZXN0IGZvciB0aGUgY29ubmVjdGlvbiB0byBiZSB0ZXJtaW5hdGVkIGJ5IGNhbGxpbmcgcHNhX3JlcGx5KCkgd2l0aCByZXR1cm4gdmFsdWUgUFNBX0RST1BfQ09OTkVDVElPTi4gQWZ0ZXIgdGhpcywgdGhlIFJvVCBTZXJ2aWNlIHdpbGwgcmVjZWl2ZSBubyBmdXJ0aGVyIFBTQV9JUENfQ0FMTCBtZXNzYWdlcyBvbiB0aGF0IGNvbm5lY3Rpb24uIFRoZSBTUE0gd2lsbCBkZWxpdmVyIGEgUFNBX0lQQ19ESVNDT05ORUNUIHRvIHRoZSBSb1QgU2VydmljZSB0byByZWxlYXNlIGFueSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgY29ubmVjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfZHJvcF9jb25uZWN0aW9uKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSb1Qgc2VydmljZSBleGVjdXRlcyBwc2FfcmVwbHkgd2l0aCBzdGF0dXMgY29kZSBlcWF1bCB0byBQU0FfRFJPUF9DT05ORUNUSU9OIGR1cmluZyBQU0FfSVBDX0NBTEwuQ2xpZW50IGV4cGVjdHMgZWl0aGVyIFBTQV9EUk9QX0NPTk5FQ1RJT04gYXMgcmV0dXJuZWQgc3RhdHVzIGNvZGUgIG9yIGRvZXMgbm90IHJldHVybiBjb25kaXRpb24gZm9yIHBzYV9jYWxsLiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMjggICAgICAgIHwgcHNhX3JlYWQoKSBkb2VzIG5vdCByZXR1cm4gaWYgIG1zZ19oYW5kbGUgZG9lcyBub3QgcmVmZXIgdG8gYSBQU0FfSVBDX0NBTEwgbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVhZF9hdF9pcGNfY29ubmVjdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZWFkIGR1cmluZyBQU0FfSVBDX0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMjkgICAgICAgIHwgcHNhX3JlYWQoKSBkb2VzIG5vdCByZXR1cm4gaWYgICBtc2dfaGFuZGxlIGRvZXMgbm90IHJlZmVyIHRvIGEgUFNBX0lQQ19DQUxMIG1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVhZF9hdF9pcGNfZGlzY29ubmVjdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZWFkIGR1cmluZyBQU0FfSVBDX0RJU0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMzAgICAgICAgIHwgcHNhX3JlYWQoKSBkb2VzIG5vdCByZXR1cm4gaWYgTnVsbCBoYW5kbGUgd2FzIHBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVhZF93aXRoX251bGxfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZWFkIHdpdGggTlVMTCBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMzEgICAgICAgIHwgcHNhX3JlYWQoKSBkb2VzIG5vdCByZXR1cm4gaWYgIEludmFsaWQgaGFuZGxlIHdhcyBwYXNzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVhZF93aXRoX2ludmFsaWRfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsbCBwc2FfcmVhZCB3aXRoIElOVkFMSURfSEFORExFIHdoaWNoIGlzIG5vdCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMzIgICAgICAgIHwgcHNhX3JlYWQoKSBkb2VzIG5vdCByZXR1cm4gaWYgaW52ZWNfaWR4IGlzIGVxdWFsIHRvIFBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVhZF93aXRoX2ludmVjX2VxdWFsX3RvX21heF9pb3ZlYygpICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZWFkIHdpdGggaW52ZWNfaWR4PVBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMzMgICAgICAgIHwgcHNhX3JlYWQoKSBkb2VzIG5vdCByZXR1cm4gaWYgIGludmVjX2lkeCBpcyBncmVhdGVyIHRoYW4gUFNBX01BWF9JT1ZFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVhZF93aXRoX2ludmVjX2dyZWF0ZXJfdGhhbl9tYXhfaW92ZWMoKSAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZWFkIHdpdGggaW52ZWNfaWR4PlBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMzQgICAgICAgIHwgcHNhX3NraXAoKSBkb2VzIG5vdCByZXR1cm4gaWYgIG1zZ19oYW5kbGUgZG9lcyBub3QgcmVmZXIgdG8gYSBQU0FfSVBDX0NBTEwgbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2tpcF9hdF9pcGNfY29ubmVjdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9za2lwIGR1cmluZyBQU0FfSVBDX0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffc2tpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMzUgICAgICAgIHwgcHNhX3NraXAoKSBkb2VzIG5vdCByZXR1cm4gaWYgIG1zZ19oYW5kbGUgZG9lcyBub3QgcmVmZXIgdG8gYSBQU0FfSVBDX0NBTEwgbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2tpcF9hdF9pcGNfZGlzY29ubmVjdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9za2lwIGR1cmluZyBQU0FfSVBDX0RJU0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffc2tpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMzYgICAgICAgIHwgcHNhX3NraXAoKSBkb2VzIG5vdCByZXR1cm4gaWYgICBOdWxsIGhhbmRsZSB3YXMgcGFzc2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2tpcF93aXRoX251bGxfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9za2lwd2l0aCBOVUxMIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffc2tpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMzcgICAgICAgIHwgcHNhX3NraXAoKSBkb2VzIG5vdCByZXR1cm4gaWYgIEludmFsaWQgaGFuZGxlIHdhcyBwYXNzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2tpcF93aXRoX2ludmFsaWRfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsbCBwc2Ffc2tpcCB3aXRoIElOVkFMSURfSEFORExFIHdoaWNoIGlzIG5vdCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffc2tpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMzggICAgICAgIHwgcHNhX3NraXAoKSBkb2VzIG5vdCByZXR1cm4gaWYgIGludmVjX2lkeCBpcyBlcXVhbCB0byBQU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2tpcF93aXRoX2ludmVjX2VxdWFsX3RvX21heF9pb3ZlYygpICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9za2lwIHdpdGggaW52ZWNfaWR4PVBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffc2tpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMzkgICAgICAgIHwgcHNhX3NraXAoKSBkb2VzIG5vdCByZXR1cm4gaWYgIGludmVjX2lkeCBpcyBncmVhdGVyIHRoYW4gUFNBX01BWF9JT1ZFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2tpcF93aXRoX2ludmVjX2dyZWF0ZXJfdGhhbl9tYXhfaW92ZWMoKSAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9za2lwIHdpdGggaW52ZWNfaWR4PlBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffc2tpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNDAgICAgICAgIHwgcHNhX3dyaXRlKCkgZG9lcyBub3QgcmV0dXJuIGlmICAgbXNnX2hhbmRsZSBkb2VzIG5vdCByZWZlciB0byBhIFBTQV9JUENfQ0FMTCBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffd3JpdGVfYXRfaXBjX2Nvbm5lY3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV93cml0ZSBkdXJpbmcgUFNBX0lQQ19DT05ORUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNDEgICAgICAgIHwgcHNhX3dyaXRlKCkgZG9lcyBub3QgcmV0dXJuIGlmICBtc2dfaGFuZGxlIGRvZXMgbm90IHJlZmVyIHRvIGEgUFNBX0lQQ19DQUxMIG1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffd3JpdGVfYXRfaXBjX2Rpc2Nvbm5lY3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV93cml0ZSBkdXJpbmcgUFNBX0lQQ19ESVNDT05ORUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNDIgICAgICAgIHwgcHNhX3dyaXRlKCkgZG9lcyBub3QgcmV0dXJuIGlmICAgTnVsbCBoYW5kbGUgd2FzIHBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffd3JpdGVfd2l0aF9udWxsX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV93cml0ZSB3aXRoIE5VTEwgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNDMgICAgICAgIHwgcHNhX3dyaXRlKCkgZG9lcyBub3QgcmV0dXJuIGlmICBJbnZhbGlkIGhhbmRsZSB3YXMgcGFzc2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffd3JpdGVfd2l0aF9pbnZhbGlkX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsbCBwc2Ffd3JpdGUgd2l0aCBJTlZBTElEX0hBTkRMRSB3aGljaCBpcyBub3QgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNDQgICAgICAgIHwgcHNhX3dyaXRlKCkgZG9lcyBub3QgcmV0dXJuIGlmICBpbnZlY19pZHggaXMgZXF1YWwgdG8gUFNBX01BWF9JT1ZFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffd3JpdGVfd2l0aF9pbnZlY19lcXVhbF90b19tYXhfaW92ZWMoKSAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV93cml0ZSB3aXRoIGludmVjX2lkeD1QU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNDUgICAgICAgIHwgcHNhX3dyaXRlKCkgZG9lcyBub3QgcmV0dXJuIGlmICBpbnZlY19pZHggaXMgZ3JlYXRlciB0aGFuIFBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffd3JpdGVfd2l0aF9pbnZlY19ncmVhdGVyX3RoYW5fbWF4X2lvdmVjKCkgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV93cml0ZSB3aXRoIGludmVjX2lkeD5QU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNDYgICAgICAgIHwgcHNhX3dyaXRlKCkgZG9lcyBub3QgcmV0dXJuIGlmICB0aGUgY2FsbCBhdHRlbXB0cyB0byB3cml0ZSBkYXRhIHBhc3QgdGhlIGVuZCBvZiB0aGUgY2xpZW50IG91dHB1dCB2ZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffd3JpdGVfd2l0aF9zaXplX292ZXJmbG93KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV93cml0ZSB3aXRoIGEgc2l6ZSBpbnB1dCBvbmUgYnl0ZSBiaWdnZXIgdGhhbiBhbGxvd2VkIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX2dldCBkb2VzIG5vdCByZXR1cm4gaWYgIFRoZSBtc2cgcG9pbnRlciBwcm92aWRlZCBpcyBub3QgYSB2YWxpZCBtZW1vcnkgcmVmZXJlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgZG9lcyBub3QgcmV0dXJuIGlmIGFkZHJlc3Mgb2YgaW5fdmVjIGlzIGludmFsaWQgZm9yIGNsaWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgZG9lcyBub3QgcmV0dXJuIGlmICBhZGRyZXNzIG9mIG91dF92ZWMgaXMgaW52YWxpZCBmb3IgY2xpZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgZG9lcyBub3QgcmV0dXJuIGlmIHBzYV9pbnZlYy5iYXNlIGFkZHJlc3MgaXMgaW52YWxpZCBmb3IgY2xpZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgZG9lcyBub3QgcmV0dXJuIGlmIHBzYV9vdXR2ZWMuYmFzZSBhZGRyZXNzIGlzIGludmFsaWQgZm9yIGNsaWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgZG9lcyBub3QgcmV0dXJuIGlmIHBzYV9pbnZlYy5iYXNlIGFkZHIgaXMgdmFsaWQgYnV0ICBwc2FfaW52ZWMuYmFzZStzaXplIGFkZHJlc3MgaXMgaW52YWxpZCBmb3IgY2xpZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgZG9lcyBub3QgcmV0dXJuIGlmIHBzYV9vdXR2ZWMuYmFzZSBhZGRyIGlzIHZhbGlkIGJ1dCAgcHNhX2ludmVjLmJhc2Urc2l6ZWFkZHJlc3MgaXMgaW52YWxpZCBmb3IgY2xpZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX2dldCgpIHJldHVybnMgUFNBX0VSUl9OT01TRyBpZiB0aGUgU1BNIGNhbm5vdCBkZWxpdmVyIGEgbWVzc2FnZSB0byB0aGUgU2VjdXJlIFBhcnRpdGlvbiBmb2xsb3dpbmcgdGhlIGFzc2VydGlvbiBvZiB0aGUgUm9UIFNlcnZpY2Ugc2lnbmFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX2Nsb3NlICBkb2Vzbm90IHJldHVybiBpZiAgVGhlIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBoYW5kbGluZyBhIHJlcXVlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgZG9lc25vdCByZXR1cm4gaWYgIFRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHkgaGFuZGxpbmcgYSByZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX3JlYWQgZG9lcyBub3QgcmV0dXJuIGlmICB0aGUgbWVtb3J5IHJlZmVyZW5jZSBmb3IgYnVmZmVyIGlzIGludmFsaWQgb3Igbm90IHdyaXRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX3dyaXRlIGRvZXMgbm90IHJldHVybiBpZiB0aGUgbWVtb3J5IHJlZmVyZW5jZSBmb3IgYnVmZmVyIGlzIGludmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX25vdGlmeSBkb2VzIG5vdCByZXR1cm4gaWYgUGFydGl0aW9uIElEIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBTZWN1cmUgUGFydGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX2NsZWFyIGRvZXMgbm90IHJldHVybiBpZiBUaGUgU2VjdXJlIFBhcnRpdGlvbr9zIGRvb3JiZWxsIHNpZ25hbCBpcyBub3QgY3VycmVudGx5IGFzc2VydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgMS4gcHNhX25vdGlmeSgpOiBTZW5kcyBhIFBTQV9ET09SQkVMTCBzaWduYWwgdG8gYSBzcGVjaWZpYyBTZWN1cmUgUGFydGl0aW9uLiBUaGUgcmVjZWl2aW5nIHBhcnRpdGlvbiBzaG91bGQgYmUgZXhwZWN0aW5nIHRoZSBhc3NlcnRpb24gb2YgdGhlaXIgUFNBX0RPT1JCRUxMIHNpZ25hbCB1c2luZyBwc2Ffd2FpdCgpLiA8YnIgLz4yLiBwc2FfY2xlYXIoKSBjbGVhcnMgdGhlIFBTQV9ET09SQkVMTCBzaWduYWwuICA8YnIgLz4zLiBwc2FfY2xlYXIoKTogVGhlIHRhcmdldCBQYXJ0aXRpb24gZG9vcmJlbGwgd2lsbCByZW1haW4gYXNzZXJ0ZWQgdW50aWwgaXQgY2FsbHMgcHNhX2NsZWFyKCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffbm90aWZ5LHBzYV93YWl0LHBzYV9jbGVhciAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgMS4gcHNhX3dhaXQoKSByZXR1cm5zIHRoZSBTZWN1cmUgUGFydGl0aW9uIGludGVycnVwdCBzaWduYWxzIHRoYXQgaGF2ZSBiZWVuIGFzc2VydGVkIGZyb20gdGhlIHN1YnNldCBvZiBzaWduYWxzIGluZGljYXRlZCBpbiB0aGUgYml0bWFzayBwcm92aWRlZC4gICAgICAgICAgPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuIHBzYV9lb2koKTpJbmZvcm1zIHRoZSBTUE0gdGhhdCBhbiBpbnRlcnJ1cHQgaGFzIGJlZW4gaGFuZGxlZCAoZW5kIG9mIGludGVycnVwdCkuIFRoaXMgd2lsbCByZS1lbmFibGUgdGhlIGludGVycnVwdCBsaW5lLiA8YnIgLz4zLnBzYV9lb2koKTogQSBzaWduYWwgcmVtYWlucyBhY3RpdmUgdW50aWwgaXQgaXMgcHJvY2Vzc2VkIGJ5IHBzYV9lb2kgPGJyIC8+NC4gTWFuaWZlc3QtIGlycXMgKG9wdGlvbmFsLCB1bmlxdWUpVGhpcyBhdHRyaWJ1dGUgaXMgYSBsaXN0IG9mIElSUSBsaW5lcyB3aGljaCBhcmUgYXNzaWduZWQgdG8gdGhlIFNlY3VyZSBQYXJ0aXRpb24uQSBTZWN1cmUgUGFydGl0aW9uIGFsd2F5cyBoYXMgZXhjbHVzaXZlIGFjY2VzcyB0byBhbiBhc3NpZ25lZCBJUlEuIFNlY3VyZSBQYXJ0aXRpb25zIGFyZSBub3QgYWxsb3dlZCB0byBzaGFyZSBJUlFzIHdpdGggb3RoZXIgU2VjdXJlIFBhcnRpdGlvbnMuRWFjaCBJUlEgc3BlY2lmaWVkIG11c3QgcHJvdmlkZSBhIHNpZ25hbCBmaWVsZC4gVGhpcyBmaWVsZCBjb250YWlucyBhIHN5bWJvbGljIG5hbWUgZm9yIHRoZSBzaWduYWwsIHVzZWQgYnkgdGhlIFNQTSB0byBpbmRpY2F0ZSB3aGVuIHRoZSBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBzaWduYWxzIHNlZSBTaWduYWxzIG9uIHBhZ2UgMjMuRWFjaCBJUlEgbGluZSBpcyBkZWNsYXJlZCBhcyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZzq/IGxpbmVfbnVtOiBBIHZhbGlkIElSUSBudW1iZXIgZm9yIHRoZSBwbGF0Zm9ybS6/IGxpbmVfbmFtZTogQSBuYW1lZCBJUlEsIHJlcHJlc2VudGVkIGJ5IGEgc3RyaW5nIGlkZW50aWZpZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd2FpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX3dhaXQoKSAtIFNpZ25hbHMgdGhhdCBhcmUgbm90IGluIHNpZ25hbF9tYXNrIHNob3VsZCBiZSBpZ25vcmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd2FpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX3dhaXQoKSBkb2VzIG5vdCByZXR1cm4gc2lnbmFsX21hc2sgZG9lcyBub3QgaW5jbHVkZSBhbnkgYXNzaWduZWQgc2lnbmFscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd2FpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX2VvaSBkb2VzIG5vdCByZXR1cm4gaWYgaXJxX3NpZ25hbCBpcyBub3QgYW4gaW50ZXJydXB0IHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX2VvaSBkb2VzIG5vdCByZXR1cm4gaWYgaXJxX3NpZ25hbCBpbmRpY2F0ZXMgbW9yZSB0aGFuIG9uZSBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgcHNhX2VvaSBkb2VzIG5vdCByZXR1cm4gaWYgaXJxX3NpZ25hbCBpcyBub3QgY3VycmVudGx5IGFzc2VydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCBObyBleHBsaWNpdCB0ZXN0IHwgVGhlIFNQTSBtdXN0IGV2ZW50dWFsbHkgZGVsaXZlciBhbGwgc2lnbmFscyBhbmQgSVBDIG1lc3NhZ2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyBleHBsaWNpdCB0ZXN0IHdyaXR0ZW4gdG8gY292ZXIgdGhpcyBydWxlLiBBbGwgUFNBIHRlc3RzIGFyZSB3cml0dGVuIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgdGhlIFNQTSBkZWxpdmVycyBhbGwgcmVxdWVzdGVkIHNpZ25hbHMgYW5kIElQQyBtZXNzYWdlIGluIGEgdGltZWx5IGZhc2hpb24uIEZhaWx1cmUgdG8gcHJvdmlkZSB0aGlzIHdpbGwgcmVzdWx0IGluIHNpbXVsYXRpb24gdGltZSBvdXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgQSBTZWN1cmUgUGFydGl0aW9uIGlzIGd1YXJhbnRlZWQgdG8gYmUgYWJsZSB0byAgZXhlY3V0ZSBhbmQgcmVhZCBpdHMgb3duIGNvZGUgcmVnaW9ucywgIHJlYWQgaXRzIG93biByZWFkLW9ubHkgZGF0YSByZWdpb25zYW5kIHJlYWQgYW5kIHdyaXRlIGl0cyBwcml2YXRlIHN0YWNrLCBkYXRhLCBhbmQgaGVhcCByZWdpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgSXNvbGF0aW9uIExldmVsLTEgcnVsZXMgLSBUaGUgU1BNIG11c3QgZW5zdXJlIHRoYXQgbm8gcnVudGltZSBzdGF0ZSwgZGF0YSBvciBkZXZpY2VzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIFNQRSBjYW4gYmUgYWNjZXNzZWQgKHJlYWQgb3Igd3JpdHRlbikgYnkgZmlybXdhcmUgb3IgaGFyZHdhcmUgaW4gdGhlIE5TUEUuIDxiciAvPkFzc2V0cyBjb25zaWRlcmVkIGZvciB2ZXJpZnlpbmcgaXNvbGF0aW9uIHJ1bGVzOiA8YnIgLz4tIExvY2FsIHN0YXRpYyBkYXRhIChzdGF0aWMgdmFyaWFibGUgZGVjbGFyZWQgaW5zaWRlIGZ1bmN0aW9uKSA8YnIgLz4tIEdsb2JhbCBkYXRhIGFuZCB2YXJpYWJsZXMgIDxiciAvPi0gSGVhcCBkYXRhIGFuZCBTdGFjayBkYXRhIDxiciAvPi0gTU1JTyByZWdpb25zIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBGcm9tIG5vbi1zZWN1cmUgYXBwbGljYXRpb24sIGFjY2VzcyhyZWFkL3dyaXRlKSBhYm92ZSBhc3NldHMgb2YgQXBwbGljYXRpb24gUm9UIGFuZCBQU0EgUm9UIGFuZCBleHBlY3QgdHJhbnNhY3Rpb24gZmFpbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgSXNvbGF0aW9uIExldmVsLTIgcnVsZXMtIEluIGFkZGl0aW9uIHRvIHRoZSBMZXZlbCAxIHJlcXVpcmVtZW50cywgTGV2ZWwgMiBmaXJtd2FyZSBpc29sYXRpb24gcmVxdWlyZXMgLSBTUE0gbXVzdCBlbnN1cmUgdGhhdCBubyBydW50aW1lIHN0YXRlLCBkYXRhIG9yIGRldmljZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgUFNBIFJvb3Qgb2YgVHJ1c3QgY2FuIGJlIGFjY2Vzc2VkIChyZWFkIG9yIHdyaXR0ZW4pIGJ5IGZpcm13YXJlIG9yIGhhcmR3YXJlIGluIHRoZSBBcHBsaWNhdGlvbiBSb290IG9mIFRydXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbiBBZGRpdGlvbiB0byBsZXZlbC0xIHRlc3RzLCBwZXJmb3JtIGZvbGxvd2luZyBjaGVja3M6IDxiciAvPkZyb20gQXBwbGljYXRpb24gUm9UIHBhcnRpdGlvbiwgYWNjZXNzKHJlYWQvd3JpdGUpIFBTQSBSb1QgKFNQTSBhbmQgUFNBIFJvVCBQYXJ0aXRpb24pIGFzc2V0cyAgYW5kIGV4cGVjdCB0cmFuc2FjdGlvbiBmYWlsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgSXNvbGF0aW9uIExldmVsLTMgcnVsZXMgLSBJbiBhZGRpdGlvbiB0byB0aGUgTGV2ZWwgMSByZXF1aXJlbWVudHMsIExldmVsIDMgZmlybXdhcmUgaXNvbGF0aW9uIHJlcXVpcmVzOiA8YnIgLz6/IFRoZSBTUE0gbXVzdCBlbnN1cmUgdGhhdCBubyBydW50aW1lIHN0YXRlLCBkYXRhIG9yIGRldmljZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgU1BNIGNhbiBiZSBhY2Nlc3NlZCAocmVhZCBvciB3cml0dGVuKSBieSBmaXJtd2FyZSBvciBoYXJkd2FyZSBpbiBhbnkgU2VjdXJlIFBhcnRpdGlvbi4gPGJyIC8+vyBUaGUgU1BNIG11c3QgZW5zdXJlIHRoYXQgbm8gcnVudGltZSBzdGF0ZSwgZGF0YSBvciBkZXZpY2VzIHRoYXQgYXJlIHBhcnQgb2YgYSBTZWN1cmUgUGFydGl0aW9uIGNhbiBiZSBhY2Nlc3NlZCAocmVhZCBvciB3cml0dGVuKSBieSBmaXJtd2FyZSBvciBoYXJkd2FyZSBpbiBhbnkgb3RoZXIgU2VjdXJlIFBhcnRpdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbiBBZGRpdGlvbiB0byBsZXZlbC0xIGFuZCBsZXZlbCAyIHRlc3RzLCBwZXJmb3JtIGZvbGxvd2luZyBjaGVja3M6IDxiciAvPkZyb20gQXBwbGljYXRpb24gc2VjdXJlIHBhcnRpdGlvbiwgYWNjZXNzKHJlYWQvd3JpdGUpIG90aGVyICBBcHBsaWNhdGlvbiBzZWN1cmUgcGFydGl0aW9uIGFzc2VydHMgYW5kIGV4cGVjdCB0cmFuc2FjdGlvbiBmYWlsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCBObyBleHBsaWNpdCB0ZXN0IHwgTWFuaWZlc3QgUGFyYW1ldGVyIC0gaWQgKHJlcXVpcmVkLCB1bmlxdWUpQSBTZWN1cmUgUGFydGl0aW9uIElEIG11c3QgYmUgYSBub24temVybyBwb3NpdGl2ZSAzMi1iaXQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0EgSVBDIHRlc3RzIHBhcnRpdGlvbiBmaWxlcyB3aWxsIGJlIHByb3ZpZGVkIHdpdGggdW5pcXVlIFBhcnRpdGlvbiBJRCB3aGljaCBpcyBub24temVybyBwb3NpdGl2ZSBhbmQgbmFtZSBmaWVsZCBjb21wbGlhbnQgdG8gbWFuaWZlc3QgcnVsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCBPdXQgb2Ygc2NvcGUgICAgIHwgU2VjdXJlIFBhcnRpdGlvbiBJRHMgbXVzdCBiZSBmaXhlZCBhY3Jvc3MgdXBkYXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDaGVja2luZyBmb3IgUGFydGl0aW9uIElEcyBhY3Jvc3MgU1BNIHVwZGF0ZXMgaXMgb3V0IG9mIHNjb3BlIGZvciBQU0EgSVBDIHRlc3RzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgTWFuaWZlc3QgUGFyYW1ldGVyLSAgdHlwZSAocmVxdWlyZWQpIDxiciAvPldoZXRoZXIgdGhlIFBhcnRpdGlvbiBpcyBhIHBhcnQgb2YgdGhlIFBTQSBSb290IG9mIFRydXN0IFNlcnZpY2VzIG9yIGlzIHBhcnQgb2YgdGhlIEFwcGxpY2F0aW9uIFJvb3Qgb2YgVHJ1c3QgU2VydmljZXMuVHlwZSBtdXN0IGJlIGFzc2lnbmVkIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczotIEFQUExJQ0FUSU9OLVJPVC0gUFNBLVJPVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0EgSVBDIHRlc3RzIHBhcnRpdGlvbiBmaWxlcyB3aWxsIGJlIHByb3ZpZGVkIHdpdGggdGhlc2UgZmllbGQuIEFjY2VzcyBwZXJtaXNzaW9uIHJlbGF0ZWQgdG8gdGhlc2UgZmllbGRzIHdpbGwgYmUgdmVyaWZpZWQgYXMgcGFydCBvZiB0ZXN0cyBjb3ZlcmluZyBpc29sYXRpb24gbGV2ZWwgcnVsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCBObyBleHBsaWNpdCB0ZXN0IHwgTWFuaWZlc3QgUGFyYW1ldGVyIC0gZGVzY3JpcHRpb24gKG9wdGlvbmFsKSA8YnIgLz5UaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIGFuZCBjb21tZW50cyBmb3IgdGhlIFNlY3VyZSBQYXJ0aXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0EgSVBDIHRlc3RzIHBhcnRpdGlvbiBmaWxlcyB3aWxsIGJlIHByb3ZpZGVkIHdpdGggdGhlc2UgZmllbGQgd2l0aCBhZGhlcmUgdG8gbWFuaWZlc3QgcnVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCBPdXQgb2Ygc2NvcGUgICAgIHwgTWFuaWZlc3QgUGFyYW1ldGVyIC0gcHJpb3JpdHkgKHJlcXVpcmVkKSA8YnIgLz5QYXJ0aXRpb25zIG11c3QgYmUgYXNzaWduZWQgb25lIG9mIHRoZSBmb2xsb3dpbmcgcHJpb3JpdHkgZ3JvdXBzOr8gSElHSL8gTk9STUFMvyBMT1dMT1cgaXMgdGhlIGxvd2VzdCBwcmlvcml0eS4gUHJpb3JpdHkgaXMgaWdub3JlZCBieSBTUE1zIHRoYXQgZG8gbm90IGltcGxlbWVudCBhbnkgcHJpb3JpdHktYmFzZWQgc2NoZWR1bGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0EgSVBDIHRlc3RzIHBhcnRpdGlvbiBmaWxlcyBhcmUgcHJvdmlkZWQgd2l0aCBwcmlvcml0eSBmaWVsZCBlcXVhbCB0byBMT1cuIFVzZSBvZiB0aGVzZSBmaWVsZHMgYXJlIGhpZ2x5IGRlcGVuZGVudCBvbiB0eXBlIG9mIFNQTSBzY2hlZHVsaW5nIHBvbGljeSBhbmQgdmVyaWZ5aW5nIHNjaGVkdWxpbmcgcG9saWN5IGlzIG91dCBvZiBzY29wZSBmb3IgSVBDIHRlc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCBObyBleHBsaWNpdCB0ZXN0IHwgTWFuaWZlc3QgUGFyYW1ldGVyIC1lbnRyeV9wb2ludCAocmVxdWlyZWQsIHVuaXF1ZSkgPGJyIC8+VGhlIFBhcnRpdGlvbiBlbnRyeSBwb2ludCBpbiB0aGUgZm9ybSBvZiBhbiBDIGZ1bmN0aW9uIHN5bWJvbC4gQSBzaW5nbGUgZW50cnkgcG9pbnQgbXVzdCBiZSBwcm92aWRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyBleHBsaWNpdCB0ZXN0IHdyaXR0ZW4gdG8gY292ZXIgdGhpcyBydWxlLiBQU0EgSVBDIHRlc3RzIG1hbmlmZXN0cyBhcmUgcHJvdmlkZWQgd2l0aCB0ZXN0cyBwYXJ0aXRpb24gZW50cnlfcG9pbnQuICBBIHN1Y2Nlc3NmdWwgbHVhbmNoIGFuZCBydW4gb2YgdGVzdHMgcGFydGl0aW9uIGNvZGUgaW5kaXJlY3RseSB2ZXJpZnkgdGhpcyBmaWVsZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCBObyBleHBsaWNpdCB0ZXN0IHwgTWFuaWZlc3QgUGFyYW1ldGVyLSBzdGFja19zaXplIChyZXF1aXJlZCkgPGJyIC8+UGFydGl0aW9uJ3Mgc3RhY2sgc2l6ZSBpbiBieXRlcy5UaGUgc2l6ZSB2YWx1ZSBtdXN0IGJlIHJlcHJlc2VudGVkIGVpdGhlciBhcyBhIHBvc2l0aXZlIGludGVnZXIgb3IgYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyBleHBsaWNpdCB0ZXN0IHdyaXR0ZW4gdG8gY292ZXIgdGhpcyBydWxlLiBQU0EgSVBDIHRlc3RzIG1hbmlmZXN0cyBhcmUgcHJvdmlkZWQgd2l0aCB0ZXN0cyBwYXJ0aXRpb24gcmVxdWlyZWQgc3RhY2tfc2l6ZS4gIEEgc3VjY2Vzc2Z1bCBydW4gb2YgdGVzdHMgcGFydGl0aW9uIGNvZGUgaW5kaXJlY3RseSB2ZXJpZnkgdGhpcyBmaWVsZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgTWFuaWZlc3QgUGFyYW1ldGVyLSBoZWFwX3NpemUgKG9wdGlvbmFsKSA8YnIgLz5QYXJ0aXRpb24ncyBoZWFwIHNpemUgaW4gYnl0ZXMuIFRoZSBzaXplIHZhbHVlIG11c3QgYmUgcmVwcmVzZW50ZWQgZWl0aGVyIGFzIGEgcG9zaXRpdmUgaW50ZWdlciBvciBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy4gSWYgdGhpcyBmaWVsZCBpcyBub3Qgc3BlY2lmaWVkIHRoZW4gdGhlIGhlYXAgc2l6ZSBtdXN0IGJlIHNldCB0byAwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCBObyBleHBsaWNpdCB0ZXN0IHwgTWFuaWZlc3QgUGFyYW1ldGVyLSBsaW5rZXJfcGF0dGVybihSZXF1aXJlZCkgPGJyIC8+VGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgdGhlIG1pbmltdW0gaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gbGluayBhIFNlY3VyZSBQYXJ0aXRpb26/cyBjb21waWxlZCBzdGF0aWMgb2JqZWN0cy4gSXQgY29udGFpbnMgYSBtYW5kYXRvcnkgc3ViIGF0dHJpYnV0ZSBjYWxsZWQgb2JqZWN0X2xpc3QuVGhlIG9iamVjdF9saXN0IGlzIGFuIGV4cGxpY2l0IGxpc3Qgb2YgdGhlIGV4cGVjdGVkIGJpbmFyeSBvYmplY3RzIG9mIGEgU2VjdXJlIFBhcnRpdGlvbiBvbmNlIGl0IGlzIGNvbXBpbGVkLiBGb3IgZXhhbXBsZSwgdGhpcyBsaXN0IG1heSBjb250YWluIHRoZSBuYW1lcyBvZiB0aGUgbWFpbiBlbnRyeS1wb2ludCBiaW5hcnkgYW5kIGFueSBvdGhlciBzdGF0aWMgbGlicmFyeSBvYmplY3RzIHRoYXQgdGhlIFNlY3VyZSBQYXJ0aXRpb24gY29udGFpbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyBleHBsaWNpdCB0ZXN0IHdyaXR0ZW4gdG8gY292ZXIgdGhpcyBydWxlLiBQU0EgSVBDIHRlc3RzIG1hbmlmZXN0cyBhcmUgcHJvdmlkZWQgd2l0aCBsaW5rZXJfcGF0dGVybiBmaWxsZWQgd2l0aCByZXF1aXJlZCB0ZXN0cyBwYXJ0aXRpb24gb2JqZWN0IGFyY2hpdmVzLiBBIHN1Y2Nlc3NmdWwgY29tcGlsYXRpb24gYW5kIHJ1biBvZiB0ZXN0cyBwYXJ0aXRpb24gY29kZSBpbmRpcmVjdGx5IHZlcmlmeSB0aGlzIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCBObyBleHBsaWNpdCB0ZXN0IHwgTWFuaWZlc3QgUGFyYW1ldGVyLSAgUm9UIFNlcnZpY2VzIChvcHRpb25hbCwgdW5pcXVlKSA8YnIgLz5BIFBhcnRpdGlvbiBtdXN0IGRlY2xhcmUgYWxsIG9mIHRoZSBSb1QgU2VydmljZXMgdGhhdCBpdCBpbXBsZW1lbnRzLiBUaGlzIGluY2x1ZGVzIGF0IGxlYXN0IGZvdXIgaWRlbnRpZnlpbmcgcGllY2VzIG9mIGluZm9ybWF0aW9uOr8gVGhlIHNpZCBmaWVsZCBjb250YWlucyB0aGUgU0lEIHZhbHVlLr8gVGhlIHNpZ25hbCBmaWVsZCBjb250YWlucyBhbiBhbHBoYW51bWVyaWMgc3RyaW5nIGZvciB1c2Ugd2l0aCBwc2FfZ2V0KCkuvyBUaGUgbmFtZSBmaWVsZCBjb250YWlucyBhbiBhbHBoYW51bWVyaWMgc3RyaW5nIGZvciB1c2Ugd2l0aCBwc2FfY29ubmVjdCgpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0EgSVBDIHRlc3RzIG1hbmlmZXN0cyBhcmUgcHJvdmlkZWQgd2l0aCB0aGVzZSBmaWVsZHMuIEEgc3VjY2Vzc2Z1bCBjb21waWxhdGlvbiBhbmQgcnVuIG9mIHRlc3RzIHBhcnRpdGlvbiBjb2RlIGluZGlyZWN0bHkgdmVyaWZ5IHRoaXMgZmllbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCBObyBleHBsaWNpdCB0ZXN0IHwgbW1pb19yZWdpb25zIChvcHRpb25hbCwgdW5pcXVlKSA8YnIgLz5MaXN0IG9mIG1lbW9yeS1tYXBwZWQgSS9PIHJlZ2lvbiBvYmplY3RzIHdoaWNoIHRoZSBTZWN1cmUgUGFydGl0aW9uIG5lZWRzIGFjY2VzcyB0by4gQSBTZWN1cmUgUGFydGl0aW9uIGFsd2F5cyBoYXMgZXhjbHVzaXZlIGFjY2VzcyB0byBhbiBNTUlPIHJlZ2lvbi4gU2VjdXJlIFBhcnRpdGlvbnMgYXJlIG5vdCBwZXJtaXR0ZWQgdG8gc2hhcmUgTU1JTyByZWdpb25zIHdpdGggb3RoZXIgU2VjdXJlIFBhcnRpdGlvbnMuQW4gTU1JTyByZWdpb24gY2FuIGJlIGRlZmluZWQgZWl0aGVyIGFzIGE6vyBudW1iZXJlZF9yZWdpb26/IG5hbWVkX3JlZ2lvbkEgbnVtYmVyZWQgcmVnaW9uIGNvbnNpc3RzIG9mIGEgYmFzZSBhZGRyZXNzIGFuZCBhIHNpemUuIFRoZSBzaXplIG11c3QgYmUgcmVwcmVzZW50ZWQgZWl0aGVyIGFzIGEgcG9zaXRpdmUgaW50ZWdlciBvciBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy4gVGhlIGJhc2UgYWRkcmVzcyBtdXN0IGJlIHJlcHJlc2VudGVkIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nLkFuIE1NSU8gcmVnaW9uIG11c3QgaW5jbHVkZSBhIHBlcm1pc3Npb24gYXR0cmlidXRlLiBUaGUgZm9sbG93aW5nIHBlcm1pc3Npb25zIGFyZSBhdmFpbGFibGU6vyBSRUFELU9OTFm/IFJFQUQtV1JJVEVNTUlPIHJlZ2lvbnMgbXVzdCBub3Qgb3ZlcmxhcC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0EgSVBDIHRlc3RzIGRldmljZSBkcml2ZXIgcGFydGl0aW9uIG1hbmlmZXN0cyBhcmUgcHJvdmlkZWQgd2l0aCB0aGVzZSBmaWVsZHMuIEEgc3VjY2Vzc2Z1bCBjb21waWxhdGlvbiBhbmQgcnVuIG9mIGRldmljZSBkcml2ZXIgcGFydGl0aW9uIGNvZGUgaW5kaXJlY3RseSB2ZXJpZnkgdGhpcyBmaWVsZC4gUnVsZXMgYXJvdW5kIHNoYXJpbmcgb2YgTU1JTyByZWdpb25zIGNhbid0IGJlIHRlc3QgYXMgc2hhcmluZyBvZiBNTUlPIHJlZ2lvbnMgYmV0d2VlbiBzZWN1cmUgcGFydGl0aW9uIHdpbGwgcmVzdWx0IGludG8gY29tcGlsYXRpb24gZmFpbC5QU0EgdGVzdHMgcGFydGl0aW9uIHJlbGllcyBvbiBudW1iZXJlZF9yZWdpb24gb25seSBhcyBuYW1lZF9yZWdpb24gaXMgc3ViamVjdCB0byByZXNvbHZlZCBpbiBJbXBsZW1lbnRhdGlvbiBkZWZpbmVkIG1hbm5lci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUbyBiZSBjb3ZlcmVkIGluIEJldGEgICAgICAgICAgICAgICAgfAotfCBObyBleHBsaWNpdCB0ZXN0IHwgTWFuaWZlc3QgSW5wdXQgLSBwc2FfZnJhbWV3b3JrX3ZlcnNpb24gLSBWZXJzaW9uIG9mIHRoZSBQU0EgRmlybXdhcmUgRnJhbWV3b3JrIHNwZWNpZmljYXRpb24gdGhpcyBtYW5pZmVzdCBjb25mb3JtcyB0by4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0EgSVBDIHRlc3RzIG1hbmlmZXN0cyBhcmUgcHJvdmlkZWQgd2l0aCB0aGlzIGZpZWxkLiBBIHN1Y2Nlc3NmdWwgY29tcGlsYXRpb24gYW5kIHJ1biBvZiB0ZXN0cyBwYXJ0aXRpb24gY29kZSBpbmRpcmVjdGx5IHZlcmlmeSB0aGlzIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBUZXN0cyAgICAgICAgICAgIHwgU2NlbmFyaW8gUnVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDbGllbnQtIFNlcnZlciBUZXN0IEZ1bmN0aW9ucyBQYWlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUZXN0IEFsZ29yaXRobS9Db21tZW50cy9UZXN0IExpbWl0YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0EgQVBJIENyb3NzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJcyBzY2VuYXJpbyBpbXBsZW1lbnRlZCBpbiB0aGlzIHJlbGVhc2U/IHwKK3wtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Cit8IHRlc3RfaTAwMSAgICAgICAgfCAxLiBwc2FfZnJhbWV3b3JrX3ZlcnNpb24oKTogUmV0cmlldmUgdGhlIHZlcnNpb24gb2YgdGhlIFBTQSBGcmFtZXdvcmsgQVBJIHRoYXQgaXMgaW1wbGVtZW50ZWQuIE1hbmlmZXN0IGZpZWxkLSBwc2FfZnJhbWV3b3JrX3ZlcnNpb246IFZlcnNpb24gb2YgdGhlIFBTQSBGaXJtd2FyZSBGcmFtZXdvcmsgc3BlY2lmaWNhdGlvbiB0aGlzIG1hbmlmZXN0IGNvbmZvcm1zIHRvLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9mcmFtZXdvcmtfdmVyc2lvbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgdGhlIHBzYV9mcmFtZXdvcmtfdmVyc2lvbigpIEFQSSBhdCBib3RoIHNpZGUgU1BFIGFuZCBOU1BFIGFuZCBjb21wYXJlIHRoZSByZXR1cm4gdmFsdWUgd2l0aCBQU0FfRlJBTUVXT1JLX1ZFUlNJT04uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9mcmFtZXdvcmtfdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgIHwgMS4gcHNhX3ZlcnNpb24oKSByZXR1cm5zIFBTQV9WRVJTSU9OX05PTkUgd2hlbiB0aGUgUm9UIFNlcnZpY2UgaXMgbm90IGltcGxlbWVudGVkLCBvciB0aGUgY2FsbGVyIGlzIG5vdCBwZXJtaXR0ZWQgdG8gYWNjZXNzIHRoZSBzZXJ2aWNlIE9SIHJldHVybiA+IDAgd2l0aCB0aGUgbWlub3IgdmVyc2lvbiBvZiB0aGUgaW1wbGVtZW50ZWQgUm9UIFNlcnZpY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfdmVyc2lvbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBQYXNzIHVuLWltcGxlbWVudGVkIFNJRCBhbmQgZXhwZWN0cyBQU0FfVkVSU0lPTl9OT05FIGFzIHJldHVybiB2YWx1ZS4gPGJyIC8+Mi4gQ2FsbCB0byBBUEkgZnJvbSBOU1BFIHdpdGggYSBTSUQgd2hvIGRvZXNuJ3QgcHJvdmlkZSBzZXJ2aWNlIHRvIE5TUEUgYW5kIGV4cGVjdHMgUFNBX1ZFUlNJT05fTk9ORSBhcyByZXR1cm4gdmFsdWUuIDxiciAvPjMuIFBhc3MgU0lEIHdobyBpcyBpbXBsZW1lbnRlZCBhbmQgcHJvdmlkZXMgc2VydmljZSB0byBOU1BFIGFuZCBleHBlY3QgIG1pbm9yIG51bWJlcig+MCkgb2YgZ2l2ZW4gUm9UIHNlcnZpY2UgYXMgcmV0dXJuLiA8YnIgLz5QZXJmb3JtIGFsbCBhYm92ZSBjaGVja3MgZnJvbSBTUEUgdG9vLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDAyICAgICAgICB8IDEuIHBzYV9jb25uZWN0KCkgcmV0dXJucyB0aGUgUFNBX0NPTk5FQ1RJT05fQlVTWSB3aGVuIFJvVCBTZXJ2aWNlIGNhbm5vdCBtYWtlIHRoZSBjb25uZWN0aW9uIGF0IHRoZSBtb21lbnQgKHRyYW5zaWVudCBlcnJvcikuIDxiciAvPjIuIHBzYV9jb25uZWN0KCkgcmV0dXJucyB0aGUgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCB3aGVuIFJvVCBTZXJ2aWNlIGhhcyByZWZ1c2VkIHRoZSBjb25uZWN0aW9uIDxiciAvPjMuIHBzYV93YWl0KCkgcmV0dXJucyB0aGUgU2VjdXJlIFBhcnRpdGlvbiBpbnRlcnJ1cHQgc2lnbmFscyB0aGF0IGhhdmUgYmVlbiBhc3NlcnRlZCBmcm9tIGEgc3Vic2V0IG9mIHNpZ25hbHMgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4gUmV0dXJucyA+IDAgd2hlbiBhdCBsZWFzdCBvbmUgc2lnbmFsIGlzIGFzc2VydGVkIDxiciAvPjQuIHBzYV9nZXQoKTpHZXQgdGhlIG1lc3NhZ2Ugd2hpY2ggY29ycmVzcG9uZHMgdG8gYSBnaXZlbiBSb1QgU2VydmljZSBzaWduYWwgYW5kIHJlbW92ZSB0aGUgbWVzc2FnZSBmcm9tIHRoZSBxdWV1ZS4gIDxiciAvPjUuIHBzYV9nZXQoKSByZXR1cm5zIFBTQV9TVUNDRVNTIHdoZW4gKm1zZyB3aWxsIGNvbnRhaW4gdGhlIGRlbGl2ZXJlZCBtZXNzYWdlLiA8YnIgLz42LiBUaGUgdHlwZSBtZW1iZXIgb2YgdGhlIHBzYV9tc2dfdCBvYmplY3Qgc2hvdWxkIHJldHVybiBQU0FfSVBDX0NPTk5FQ1QgZm9yIGEgbmV3IGNvbm5lY3Rpb24gcmVxdWVzdCBmb2xsb3dpbmcgYSBwc2FfZ2V0KCkgY2FsbCB0byBwc2FfY29ubmVjdCgpIGFuZCBtc2cuaGFuZGxlIG11c3QgYmUgcG9zaXRpdmUuIDxiciAvPjcuIHBzYV9yZXBseSgpOiAgSWYgdGhlIG1lc3NhZ2UgdHlwZSBpcyBQU0FfSVBDX0NPTk5FQ1QgdGhlbiBzZXJ2ZXIgY2FuIHJlamVjdCB0aGUgY29ubmVjdGlvbiBieSBzZW5kaW5nIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQgKHBlcm1hbmVudCBlcnJvcikgb3IgUFNBX0NPTk5FQ1RJT05fQlVTWSAodHJhbnNpZW50IGVycm9yKSBzdGF0dXMgY29kZS4gPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfY29ubmVjdGlvbl9idXN5X2FuZF9yZWplY3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gQ2xpZW50IHRyaWVzIHRvIGNvbm5lY3QgdG8gUk9UIHNlcnZpY2UgdXNpbmcgcHNhX2Nvbm5lY3QoKSA8YnIgLz4yLiBSb1Qgc2VydmljZSBjaGVja3MgdGhlIGRlbGl2ZXJ5IG9mICBQU0FfSVBDX0NPTk5FQ1QgbWVzc2FnZSB0eXBlIGFuZCBwb3NpdGl2ZSBoYW5kbGUgdmFsdWUgcmV0dXJuZWQgYnkgcHNhX2dldCgpICA8YnIgLz4zLiBSb1Qgc2VydmljZSByZWplY3RzIHRoZSBjb25uZWN0aW9uIGJ5IGV4ZWN1dGluZyBwc2FfcmVwbHkoaGFuZGxlLFBTQV9DT05ORUNUSU9OX0JVU1kpIDxiciAvPjQuIENsaWVudCB0cmllcyB0byBjb25uZWN0IHRvIHNhbWUgUk9UIHNlcnZpY2UgdXNpbmcgcHNhX2Nvbm5lY3QoKSBhZ2FpbiA8YnIgLz41LiBUaGlzIHRpbWUsIFJvVCBzZXJ2aWNlIHJlamVjdHMgdGhlIGNvbm5lY3Rpb24gYnkgZXhlY3V0aW5nIHBzYV9yZXBseShoYW5kbGUsUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCkgPGJyIC8+UGVyZm9ybSBhbGwgYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2Nvbm5lY3QscHNhX3dhaXQscHNhX2dldCxwc2FfcmVwbHkgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgfCAxLiBwc2FfY29ubmVjdCgpOiBXaGVuIFNJRCBpcyBpbXBsZW1lbnRlZCBhbmQgY2xpZW50IGlzIHBlcm1pdHRlZCB0byBhY2Nlc3MgdGhlIHNlcnZpY2UsIFNQTSBkZWxpdmVycyBhIFBTQV9JUENfQ09OTkVDVCBtZXNzYWdlIGZyb20gdGhlIGNsaWVudCB0byB0aGUgU2VjdXJlIFBhcnRpdGlvbiB0aGF0IGltcGxlbWVudHMgdGhlIFJvVCBTZXJ2aWNlIGFuZCBwb3NpdGl2ZSBoYW5kbGUgaXMgcmV0dXJuZWQgdG8gY2xpZW50LiA8YnIgLz4yLiBwc2FfZ2V0KCk6R2V0IHRoZSBtZXNzYWdlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGEgZ2l2ZW4gUm9UIFNlcnZpY2Ugc2lnbmFsIGFuZCByZW1vdmUgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgcXVldWUuIDxiciAvPjMuIHBzYV9nZXQoKSByZXR1cm5zIFBTQV9TVUNDRVNTIHdoZW4gKm1zZyB3aWxsIGNvbnRhaW4gdGhlIGRlbGl2ZXJlZCBtZXNzYWdlIDxiciAvPjQuIHBzYV9nZXQoKTpUaGUgdHlwZSBtZW1iZXIgb2YgdGhlIHBzYV9tc2dfdCBvYmplY3Qgc2hvdWxkIHJldHVybiBQU0FfSVBDX0NPTk5FQ1QgZm9yIGEgbmV3IGNvbm5lY3Rpb24gcmVxdWVzdCBmb2xsb3dpbmcgYSBwc2FfZ2V0KCkgY2FsbCB0byBwc2FfY29ubmVjdCgpIGFuZCBtc2cuaGFuZGxlIG11c3QgYmUgcG9zaXRpdmUuIDxiciAvPjUuIHBzYV9nZXQoKTogVGhlIHR5cGUgbWVtYmVyIG9mIHRoZSBwc2FfbXNnX3Qgb2JqZWN0IHNob3VsZCByZXR1cm4gUFNBX0lQQ19ESVNDT05ORUNUIGZvciBhIG5ldyBjb25uZWN0aW9uIHJlcXVlc3QgZm9sbG93aW5nIGEgcHNhX2dldCgpIGNhbGwgdG8gcHNhX2Nsb3NlKCkgYW5kIG1zZy5oYW5kbGUgbXVzdCBiZSBwb3NpdGl2ZS4gPGJyIC8+Ni4gcHNhX3JlcGx5KCk6ICBJZiB0aGUgbWVzc2FnZSB0eXBlIGlzIFBTQV9JUENfQ09OTkVDVCB0aGVuIHNlcnZlciBjYW4gYWNjZXB0IHRoZSBjb25uZWN0aW9uIGJ5IHNlbmRpbmcgUFNBX1NVQ0NFU1Mgc3RhdHVzIGNvZGUuIElmIHRoZSBtZXNzYWdlIHR5cGUgaXMgUFNBX0lQQ19ESVNDT05ORUNUIHRoZW4gdGhlIHN0YXR1cyBjb2RlIGlzIGlnbm9yZWQuIDxiciAvPjcuIHBzYV9jbG9zZSgpOiBDbG9zZXMgYSBjb25uZWN0aW9uIHRvIGEgUm9UIFNlcnZpY2UuIFNlbmRzIHRoZSBQU0FfSVBDX0RJU0NPTk5FQ1QgbWVzc2FnZSB0byB0aGUgUm9UIFNlcnZpY2UuICBUaGlzIGZ1bmN0aW9uIHdpbGwgaGF2ZSBubyBlZmZlY3QgaWYgY2FsbGVkIHdpdGggdGhlIG51bGwgaGFuZGxlLiA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X2FjY2VwdF9hbmRfY2xvc2VfY29ubmVjdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuQ2xpZW50IHRyaWVzIHRvIGNvbm5lY3QgdG8gUk9UIHNlcnZpY2UgPGJyIC8+IDIuIFJvVCBzZXJ2aWNlIGNoZWNrcyB0aGUgZGVsaXZlcnkgb2YgIFBTQV9JUENfQ09OTkVDVCBtZXNzYWdlIHR5cGUgYW5kIHBvc2l0aXZlIGhhbmRsZSB2YWx1ZSByZXR1cm4gYnkgcHNhX2dldCgpIDxiciAvPjMuIFJvVCBzZXJ2aWNlICBhY2NlcHRzIHRoZSBjb25uZWN0aW9uIGJ5IGV4ZWN1dGluZyBwc2FfcmVwbHkoLi4sIFBTQV9DT05ORUNUSU9OX0FDQ0VQVEVEKS4gIDxiciAvPjQuIENsaWVudCBjYWxscyB0aGUgcHNhX2Nsb3NlIHdpdGggUFNBX05VTExfSEFORExFIGFuZCBsYXRlciBpdCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gdXNpbmcgcHNhX2Nsb3NlKCkgd2l0aCBhY3R1YWwgaGFuZGxlIHZhbHVlIDxiciAvPjUuIFJvVCBzZXJ2aWNlIGNoZWNrcyB0aGUgZGVsaXZlcnkgb2YgIFBTQV9JUENfRElTQ09OTkVDVCBtZXNzYWdlIHR5cGUsIGNoZWNrcyBoYW5kbGUgdmFsdWUgZXFhdWwgdG8gTlVMTCByZXR1cm5lZCBieSBwc2FfZ2V0KCkgYW5kIGNvbXBsZXRlcyB0aGUgUFNBX0lQQ19ESVNDT05ORUNUIGJ5IGV4ZWN1dGluZyBwc2FfcmVwbHkoKSAuIDxiciAvPlBlcmZvcm0gYWxsIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jb25uZWN0LHBzYV93YWl0LHBzYV9nZXQscHNhX3JlcGx5LHBzYV9jbG9zZSB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgIHwgRm9sbG93aW5nIGFyZSBhbGxvd2VkIG1pbm9yIHZlcnNpb24gY29uZGl0aW9uIHRvIHBzYV9jb25uZWN0KCk6IDxiciAvPiAgMS4gVmVyc2lvbiBwb2xpY3kgaXMgbm90IG1lbnRpb25lZCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gaXMgMSB3aGljaCBpcyBkZWZhdWx0IG1pbmltdW0gdmVyc2lvbiAgPGJyIC8+Mi4gVmVyc2lvbiBwb2xpY3kgaXMgU1RSSUNUIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBlcXVhbHMgbWluaW11bSB2ZXJzaW9uICA8YnIgLz4zLiBWZXJzaW9uIHBvbGljeSBpcyByZWxheGVkIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBpcyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gdmVyc2lvbiAgPGJyIC8+IDQuIFZlcnNpb24gcG9saWN5IGlzIHJlbGF4ZWQgYW5kIHJlcXVlc3RlZCB2ZXJzaW9uIGlzIGV1cWFsIHRvIHRoZSBtaW5pbXVtIHZlcnNpb24gIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9jb25uZWN0X3dpdGhfYWxsb3dlZF9taW5vcl92ZXJzaW9uX3BvbGljeSgpICAgICAgICAgICAgICAgICAgfCBDbGllbnQgdHJpZXMgY29ubmVjdGluZyBST1Qgc2VydmljZSBvZiBmb2xsb3dpbmcgcHJvcGVydGllcyBhbmQgZXhwZWN0cyBjb25uZWN0aW9uIHRvIGVzdGFibGlzaDogPGJyIC8+ICAgLSBWZXJzaW9uIHBvbGljeSBpcyBub3QgbWVudGlvbmVkIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBpcyAxIHdoaWNoIGlzIGRlZmF1bHQgbWluaW11bSB2ZXJzaW9uICA8YnIgLz4gICAtIFZlcnNpb24gcG9saWN5IGlzIFNUUklDVCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gZXF1YWxzIG1pbmltdW0gdmVyc2lvbiAgPGJyIC8+ICAgLSBWZXJzaW9uIHBvbGljeSBpcyByZWxheGVkIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBpcyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gdmVyc2lvbiAgPGJyIC8+ICAtIFZlcnNpb24gcG9saWN5IGlzIHJlbGF4ZWQgYW5kIHJlcXVlc3RlZCB2ZXJzaW9uIGlzIGVxdWFsIHRvIHRoZSBtaW5pbXVtIHZlcnNpb24gIDxiciAvPlBlcmZvcm0gYWxsIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICB8IDEuIHBzYV9jYWxsKCk6IFRoZSB2YWxpZCBwc2FfY2FsbCwgbWFrZSBTUE0gdG8gc2VuZCBQU0FfSVBDX0NBTEwgbXNnLnR5cGUgdG8gdGhlIFJvVCBzZXJ2aWNlZSBwYXJ0aXRpb24gYW5kIHRoZSBzdWNjZXNzZnVsIGNhbGwgc2hvdWxkIHJldHVybiA+PTAgaGFuZGxlIHZhbHVlLiAgPGJyIC8+Mi4gcHNhX2NhbGwoKSByZWNlaXZlcyByZXR1cm4gdmFsdWUgPj0gMCBmb3IgUm9ULXNwZWNpZmljIHJldHVybiBjb2RlIDxiciAvPjMuIHBzYV9jYWxsKCkgcmVjZWl2ZSByZXR1cm4gdmFsdWUgIDwgMCBmb3IgUm9ULXNwZWNpZmljIGVycm9yIGNvZGUgPGJyIC8+NC4gcHNhX3JlcGx5KCk6ICBJZiB0aGUgbWVzc2FnZSB0eXBlIGlzIFBTQV9JUENfQ0FMTCAgYW5kIFJPVCBzZXJ2aWNlIHdhbnQgdG8gZW5kIGNhbGwgd2l0aCBzdWNjZXNzIHRoZW4gdGhlIHJldHVybiBjb2RlIG11c3QgYmUgUFNBX1NVQ0NFU1Mgb3IgYW5kIHBvc2l0aXZlIGludGVnZXJzIGFyZSB1c2VkIHRvIGluZGljYXRlIFJvVCBTZXJ2aWNlIHNwZWNpZmljIHJlc3VsdCB2YWx1ZXModGhpcyBtdXN0IGJlIHJlcG9ydGVkIHRvIGNsaWVudCkuIEFsbCBvdGhlciByZXR1cm4gY29kZXMgKElOVDMyX01JTisxMjggdG8gLTEpIGFyZSByZXBvcnRlZCB0byB0aGUgY2xpZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2NhbGxfd2l0aF9hbGxvd2VkX3N0YXR1c19jb2RlKCkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gQ2xpZW50IGNvbm5lY3RzIHRvIFJvVCBzZXJ2aWNlIDxiciAvPjIuIENsaWVudCBzZW5kcyBtZXNzYWdlIHVzaW5nIHBzYV9jYWxsKCkgPGJyIC8+My4gIFJvVCBzZXJ2aWNlIGNoZWNrcyB0aGUgZGVsaXZlcnkgb2YgIFBTQV9JUENfQ0FMTCBtZXNzYWdlIHR5cGUgYW5kIHBvc2l0aXZlIGhhbmRsZSB2YWx1ZSAgcmV0dXJuIGJ5IHBzYV9nZXQoKSAgPGJyIC8+NC4gUm9UIHNlcnZpY2UgZW5kcyB0aGUgY2FsbCB1c2luZyBwc2FfcmVwbHkoc3RhdHVzX2NvZGUpIDxiciAvPjUuIENsaWVudCBjaGVja3MgdGhlIHJldHVybiB2YWx1ZSBvZiBwc2FfY2FsbCgpIGFuZCBDbGllbnQgY2xvc2VzIHRoZSBjb25uZWN0aW9uUmVwZWF0ICgxKSB0byAoNSkgZm9yIGRpZmZlcmVudCBzdGF0dXMgY29kZSwgU1VDQ0VTUywgK3ZlLCAtdmUuLiA8YnIgLz5QZXJmb3JtIGFsbCBhYm92ZSBzdGVwcyBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwscHNhX3JlcGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgfCAxLiBBIG1zZy5jbGllbnRfaWQgdGhhdCBoYXMgYSBwb3NpdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgY2xpZW50IGlzIGluIHRoZSBTUEUgYW5kIHRoaXMgdGhlIFNlY3VyZSBQYXJ0aXRpb24gSUQgb2YgdGhlIGNsaWVudC4gQSBuZWdhdGl2ZSBjbGllbnRfaWQgaW5kaWNhdGVzIHRoYXQgdGhlIGNsaWVudCBpcyBpbiB0aGUgTlNQRS4gIDxiciAvPjIuIENsaWVudF9pZCBpcyB2YWxpZCBkdXJpbmcgUFNBX0lQQ19DT05ORUNULCBQU0FfSVBDX0NBTEwgYW5kIFBTQV9JUENfRElTQ09OTkVDVCBtc2cgdHlwZS4gPGJyIC8+My4gTWFuaWZlc3QgUGFyYW1ldGVyLSAgbmFtZSAocmVxdWlyZWQsIHVuaXF1ZSkgPGJyIC8+QSBQYXJ0aXRpb24gbXVzdCBoYXZlIGFuIGFscGhhbnVtZXJpYyBuYW1lIGZvciBzb3VyY2UgY29kZSB0byBkaXJlY3RseSByZWZlciB0byBhIHNwZWNpZmljIFBhcnRpdGlvbi4gVGhlIGZvcm1hdCBvZiB0aGUgbmFtZSBtdXN0IGZvbGxvdyB0aGUgcnVsZXMgb2YgYSBDIG1hY3JvLiAgPGJyIC8+NC4gTWFuaWZlc3QgUGFyYW1ldGVyIC0gaWQgKHJlcXVpcmVkLCB1bmlxdWUpIDxiciAvPkl0IG11c3QgYmUgcmVwcmVzZW50ZWQgYnkgYSBoZXhhZGVjaW1hbCBzdHJpbmcuIFRoZSBTZWN1cmUgUGFydGl0aW9uIElEIGNhbiBiZSByZWZlcmVuY2VkIGluIFNlY3VyZSBQYXJ0aXRpb24gc291cmNlIGNvZGUgdmlhIHRoZSBzeW1ib2xpYyBuYW1lIHNwZWNpZmllZCBhcyBuYW1lIGF0dHJpYnV0ZS4gVGhlIHN5bWJvbCBtdXN0IGhhdmUgdGhlIHZhbHVlIG9mIHRoZSBTZWN1cmUgUGFydGl0aW9uIElELiA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X2lkZW50aXR5KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC0gQ2hlY2sgdGhlIHZhbHVlIHJldHVybmVkIGJ5IG1zZy5jbGllbnRfaWQgZHVyaW5nIFBTQV9JUENfQ09OTkVDVCwgUFNBX0lQQ19DQUxMIGFuZCBQU0FfSVBDX0RJU0NPTk5FQ1QuIEZvciBOU1BFIGNvbm5lY3Rpb24sIGNsaWVudF9pZCBzaG91bGQgYmUgPDAgYW5kIGZvciBTUEUsIGl0IHNob3VsZCBiZSA+MC4gIDxiciAvPlBlcmZvcm0gYWxsIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguIDxiciAvPi0gQWNjZXNzIHRoZSBQYXJ0aXRpb24gSUQgb2YgY2xpZW50IHBhcnRpdGlvbiBhbmQgY29tcGFyZSB0aGUgdmFsdWUgd2l0aCBleHBlY3RlZCBJRCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9nZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgIHwgMS4gcHNhX2Nvbm5lY3QoKSB3aWxsIHJldHVybiB0aGUgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCAgT1IgUFNBX0NPTk5FQ1RJT05fQlVTWSB3aGVuIHRoZSBTUE0gaGFzIHJlYWNoZWQgdGhlIGxpbWl0IG9mIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9zcG1fY29uY3VycmVudF9jb25uZWN0X2xpbWl0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFeGVjdXRlIHBzYV9jb25uZWN0KCkgQVBJIGluIGEgbG9vcCB1bnRpbCBpdCByZXR1cm5zIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQgb3IgUFNBX0NPTk5FQ1RJT05fQlVTWSA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICB8IDEuIHBzYV93YWl0KCk6IFdoZW4gTU9ERShQU0FfQkxPQ0spIGlzIG9uZSwgdGhlIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdGhlIGNhbGxlciB1bnRpbCBvbmUgb2YgdGhlIHJlcXVlc3RlZCBzaWduYWxzIGlzIGFzc2VydGVkLiAgIDxiciAvPjIuICBwc2Ffd2FpdCgpOiBDYWxsZXJzIG11c3Qgc2V0IFJFUyB0byB6ZXJvLCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBpZ25vcmUgdGhlIHZhbHVlIG9mIFJFUy4gPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2Jsb2NrX2JlaGF2ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gQ2xpZW50IGNvbm5lY3RzIHRvIGEgUm9UIHNlcnZpY2UgbXV0aWxwZSB0aW1lcy4gIDxiciAvPjIuIFJvVCBzZXJ2aWNlIHBzYV93YWl0KFBTQV9CTE9DS3woTm9uLXplcm8gdmFsdWUgZm9yIHRpbWVvdXRbMzA6MF0pKSBBUEkgaXMgZXhlY3V0ZWQgd2l0aG91dCB3aGlsZSgxKSBsb29wLiAgPGJyIC8+My4gIFJvVCBzZXJ2aWNlIHNlcnZlcyB0aGUgY29ubmVjdGlvbnMgYnkgcmVqZWN0aW5nIHRoZW0uICAgPGJyIC8+VGhpcyBpcyBhIHNhbml0eSBjaGVjaywgYSBzdWNjZXNzZnVsIGhhbmRzaGFraW5nIGJldHdlZW4gY2xpZW50IGFuZCBzZXJ2ZXIgZm9yIHJlcXVlc3RlZCBjb25uZWN0aW9uICByZXByZXNlbnRzIGNoZWNrIHBhc3MuIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3dhaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgfCAxLiBwc2Ffd2FpdCgpOiBXaGVuIE1PREUgaXMgemVybywgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IHdpdGggdGhlIGN1cnJlbnQgc2lnbmFsIHN0YXRlLCB3aGljaCBjYW4gYmUgemVybyBpZiBubyBzaWduYWxzIGFyZSBhY3RpdmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9wb2xsX2JlaGF2ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENsaWVudCBjb25uZWN0cyB0byBhIFJvVCBzZXJ2aWNlIG11dGlscGUgdGltZXMuICA8YnIgLz4yLiBSb1Qgc2VydmljZSBleGVjdXRlcyBwc2Ffd2FpdChQU0FfUE9MTCkgIGluIGEgd2hpbGUgbG9vcCBhbmQgY2hlY2tzIHRoZSBBUEkncyBwb2xsaW5nIGJlaGF2aW91ci4gIDxiciAvPjMuIENhbGwgcHNhX3dhaXQoUFNBX1BPTEwpIHdoZW4gbm8gcmVxdWVzdCBpcyBtYWRlIGJ5IGNsaWVudCBhbmQgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUuIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV93YWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMDMgICAgICAgIHwgMS4gVGhlIHJldmVyc2UgaGFuZGxlIGZvciBhIGNvbm5lY3Rpb24gaXMgTlVMTCB1bnRpbCBwc2Ffc2V0X3JoYW5kbGUoKSBpcyB1c2VkLiAgcHNhX3NldF9yaGFuZGxlKCkgY2FuIGJlIHVzZWQgdG8gYXNzb2NpYXRlIHNvbWUgY2FsbGVyLXByb3ZpZGVkIHByaXZhdGUgZGF0YSB3aXRoIGEgc3BlY2lmaWVkIGNsaWVudCBjb25uZWN0aW9uLiBBbmQgU1BNIG11c3QgcHJvdmlkZSBzYW1lIHJoYW5kbGUgZm9yIG1zZy5yaGFuZGxlIHdpdGggYWxsIHN1YnNlcXVlbnQgbWVzc2FnZXMgZGVsaXZlcmVkIG9uIHRoaXMgY29ubmVjdGlvbi4gT24gc3VjY2VzcyB0aGUgcmhhbmRsZSBpcyByZXRhaW5lZCBieSB0aGUgaW1wbGVtZW50YXRpb24gYW5kIHByb3ZpZGVkIGluIGFsbCBmdXR1cmUgbWVzc2FnZXMgb24gdGhhdCBjb25uZWN0aW9uIGFzIHBhcnQgb2YgdGhlIHBzYV9tc2dfdCBzdHJ1Y3R1cmUuICA8YnIgLz4yLiBTZXR0aW5nIHRoZSByaGFuZGxlIGZvciBhIGNvbm5lY3Rpb24gZHVyaW5nIGRpc2Nvbm5lY3Rpb24gaGFzIG5vIG9ic2VydmFibGUgZWZmZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2V0X3JoYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDbGllbnQgY29ubmVjdHMgdG8gUm9UIHNlcnZpY2UgYW5kIFJvVCBzZXJ2aWNlIGNoZWNrcyB0aGUgdmFsdWUgb2YgbXNnLnJoYW5sZGUgdmFsdWUgZHVpbmcgUFNBX0lQQ19DT05ORUNUMi4gQ2xpZW50IHNlbmQgY2FsbCBtc2cgdG8gUm9UIHNlcnZpY2UgYW5kIFJvVCBzZXJ2aWNlIGNoZWNrcyB0aGUgdmFsdWUgb2YgbXNnLnJoYW5sZGUgdmFsdWUgZHVpbmcgUFNBX0lQQ19DT05ORUNUIDxiciAvPjMuIFJPVCBzZXJ2aWNlIHNldHMgdGhlIHJoYW5kbGUgd2l0aCBrbm93biB2YWx1ZS4gPGJyIC8+NC4gQ2xpZW50IHNlbmQgY2FsbCBtc2cgdG8gUm9UIHNlcnZpY2UgYW5kIFJvVCBzZXJ2aWNlIG5vdyBjb21wYXJlIHRoZSB2YWx1ZSBvZiBtc2cucmhhbm5kbGUgIHdpdGggcHJldmlvdXNseSBzZXQgdmFsdWUgPGJyIC8+NS4gUk9UIHNlcnZpY2Ugc2V0cyB0aGUgcmhhbmRsZSB3aXRoIGtub3duIHZhbHVlIG90aGVyIHRoYW4gcHJldmlvdXNseSBzZXQgdmFsdWUgPGJyIC8+Ni4gQ2xpZW50IHNlbmQgY2FsbCBtc2cgdG8gUm9UIHNlcnZpY2UgYW5kIFJvVCBzZXJ2aWNlIG5vdyBjb21wYXJlIHRoZSB2YWx1ZSBvZiBtc2cucmhhbm5kbGUgd2l0aCBsYXN0IHNldCB2YWx1ZSA8YnIgLz43LiBUaGUgcmV2ZXJzZSBoYW5kbGUgZm9yIGEgY29ubmVjdGlvbiBpcyBOVUxMIHVudGlsIHBzYV9zZXRfcmhhbmRsZSgpIGlzIHVzZWQgPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwcyBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffc2V0X3JoYW5kbGUscHNhX2dldCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICB8IDEuIHBzYV9jYWxsKCk6VGhlIGNhbGxlciBjYW4gb3B0aW9uYWxseSBwcm92aWRlIG9uZSBvciBtb3JlIGJ1ZmZlcnMgdG8gcmVjZWl2ZSBhIHJlc3BvbnNlIChvdXRfdmVjKS4gPGJyIC8+Mi4gcHNhX2dldCgpOiBUaGUgYXJyYXkgaW5fc2l6ZSBwcm92aWRlcyB0aGUgc2l6ZSBvZiBlYWNoIGNsaWVudCBpbnB1dCB2ZWN0b3IgaW4gYnl0ZXMuIFRoZSBhcnJheSBvdXRfc2l6ZSBwcm92aWRlcyB0aGUgc2l6ZSBvZiBlYWNoIGNsaWVudCBvdXRwdXQgdmVjdG9yIGluIGJ5dGVzLiA8YnIgLz4zLiBwc2FfcmVhZCgpOiBwYXJhbWV0ZXIgZnJvbSB0aGUgY2xpZW50IGlucHV0IHZlY3Rvci4gU3RyZWFtcyB1cCB0byB0aGUgbmV4dCBudW1fYnl0ZXMgYnl0ZXMgb2YgY2xpZW50IGlucHV0IHZlY3RvciBpbnZlY19pZHggaW4gdGhlIG1lc3NhZ2UgaWRlbnRpZmllZCBieSBtc2dfaGFuZGxlIHRvIHRoZSBTZWN1cmUgUGFydGl0aW9uIGJ1ZmZlci4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4gPGJyIC8+NC4gcHNhX3JlYWQoKTogSWYgbnVtX2J5dGVzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYXZhaWxhYmxlIGRhdGEgaW4gdGhlIGlucHV0IHZlY3RvciB0aGVuIG51bV9ieXRlcyBhcmUgY29waWVkIHRvIGJ1ZmZlciwgYW5kIHRoZSByZW1haW5pbmcgZGF0YSBpbiB0aGUgaW5wdXQgdmVjdG9yIGNhbiBiZSByZWFkIGJ5IHN1YnNlcXVlbnQgY2FsbHMgdG8gcHNhX3JlYWQoKSB3aXRoIHRoZSBzYW1lIG1zZ19oYW5kbGUgYW5kIGludmVjX2lkeC4gPGJyIC8+NS4gcHNhX3JlYWQoKTogUm9UIFNlcnZpY2VzIGNhbiBkZXRlcm1pbmUgaG93IG11Y2ggZGF0YSBpcyBhdmFpbGFibGUgdG8gcmVhZCBmcm9tIHRoZSBtZXNzYWdlIGJhc2VkIG9uIHRoZSBpbl9zaXplW10gYXR0cmlidXRlIG9mIHRoZSBwc2FfbXNnX3QgbWVzc2FnZSByZXR1cm5lZCBmcm9tIHBzYV9nZXQoKS4gSWYgYW4gaW5wdXQgdmVjdG9yIGhhcyBub3QgYmVlbiBwYXNzZWQgYnkgdGhlIGNsaWVudCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIGluX3NpemVbXSBmb3IgdGhhdCB2ZWN0b3IgaXMgemVyby4gPGJyIC8+Ni4gcHNhX3JlYWQoKTogSWYgbnVtX2J5dGVzIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGlucHV0IHZlY3RvciB0aGVuIHRoZSByZW1haW5pbmcgaW5wdXQgYnl0ZXMgYXJlIGNvcGllZCB0byBidWZmZXIgYW5kIHRoZSBjYWxsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuIEFueSBzcGFjZSBhZnRlciB0aGlzIGluIGJ1ZmZlciBpcyBub3QgbW9kaWZpZWQuIFN1YnNlcXVlbnQgY2FsbHMgb2YgcHNhX3JlYWQoKSBvciBwc2Ffc2tpcCgpIHdpdGggdGhlIHNhbWUgbWVzc2FnZSBpbnB1dCB2ZWN0b3Igd2lsbCByZXBvcnQgdGhhdCB0aGVyZSBpcyBubyBtb3JlIGRhdGEgaW4gdGhlIHZlY3Rvci4gPGJyIC8+Ny4gcHNhX3NraXAoKTogU2tpcCBvdmVyIHBhcnQgb2YgYSBjbGllbnQgaW5wdXQgdmVjdG9yLiBBZHZhbmNlcyB0aGUgY3VycmVudCByZWFkIG9mZnNldCBieSBza2lwcGluZyB1cCB0byBudW1fYnl0ZXMgYnl0ZXMgZm9yIGlucHV0IHZlY3RvciBpbnZlY19pZHggaW4gdGhlIG1lc3NhZ2UgaWRlbnRpZmllZCBieSBtc2dfaGFuZGxlLiBwc2Ffc2tpcCgpOiBXaGVuIHBzYV9za2lwIHJldHVybnMsIGl0IHJldHVybnMgd2l0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNraXBwZWQgIDxiciAvPjguIHBzYV9za2lwKCk6IElmIFRoZXJlIHdhcyBubyByZW1haW5pbmcgZGF0YSBpbiB0aGlzIGlucHV0IHZlY3RvciwgcmV0dXJuIHplcm8gPGJyIC8+OS5wc2Ffc2tpcCgpOiBJZiBudW1fYnl0ZXMgaXMgZ3JlYXRlciB0aGFuIHRoZSByZW1haW5pbmcgc2l6ZSBvZiB0aGUgaW5wdXQgdmVjdG9yIHRoZW4gdGhlIHJlbWFpbmluZyBzaXplIG9mIHRoZSBpbnB1dCB2ZWN0b3IgaXMgcmV0dXJuZWQuIFN1YnNlcXVlbnQgY2FsbHMgb2YgcHNhX3JlYWQoKSBvciBwc2Ffc2tpcCgpIHdpdGggdGhlIHNhbWUgbWVzc2FnZSBpbnB1dCB2ZWN0b3Igd2lsbCByZXBvcnQgdGhhdCB0aGVyZSBpcyBubyBtb3JlIGRhdGEgaW4gdGhlIHZlY3Rvci4gPGJyIC8+IHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfY2FsbF9yZWFkX2FuZF9za2lwKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS5DbGllbnQgY29ubmVjdHMgdG8gUm9UIHNlcnZpY2UgPGJyIC8+Mi5DbGllbnQgc2VuZHMgZm91ciBpbnB1dCB2ZWN0b3JzIHRvIFJvVCBzZXJ2aWNlIHVzaW5nIHBzYV9jYWxsIDxiciAvPjMuIFJvVCBzZXJ2aWNlIGNoZWNrcyBmb2xsb3dpbmc6IDxiciAvPiAgICAtIFJlcG9ydGluZyBvZiBpbnB1dCB2ZWN0b3JzIHNpemUgdGhyb3VnaCBtc2cuaW5fc2l6ZSA8YnIgLz4gICAgLSBJbnB1dCB2ZWN0b3JzIGNvbnRlbnQgcmVhZGluZyB0aHJvdWdoIHBzYV9yZWFkIDxiciAvPiAgICAtSW5ib3VuZCAvT3V0Ym91bmQgb2Zmc2V0IHJlYWRpbmcgPGJyIC8+ICAgIC1JbmJvdW5kL091dGJvdW5kICBvZmZzZXQgc2tpcHBpbmcgPGJyIC8+ICAgIC1aZXJvIGJ5dGUgcmVhZCBhbmQgc2tpcCA8YnIgLz4gICAgLW91dF9sZW49MCBjaGVjayA8YnIgLz40LiBDbGllbnQgcmVjaWV2ZXMgdGhlIHN0YXR1cyBvZiAgUm9UIHNlcnZpY2UgY2hlY2tzIGFuZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwcyBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwscHNhX3JlYWQscHNhX3NraXAscHNhX2dldCwgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgfCAxLiBwc2FfY2FsbCgpOiBUaGUgY2FsbGVyIGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgb25lIG9yIG1vcmUgYnVmZmVycyB0byByZWNlaXZlIGEgcmVzcG9uc2UgKG91dF92ZWMpLiBPbiByZXR1cm4gZnJvbSBwc2FfY2FsbCgpIHRoZSBsZW4gdmFsdWUgd2lsbCBoYXZlIGJlZW4gdXBkYXRlZCB0byBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgd3JpdHRlbiB0byB0aGUgYnVmZmVyIGJ5IHRoZSBSb1QgU2VydmljZS4gPGJyIC8+Mi4gcHNhX3dyaXRlKCk6IEFwcGVuZHMgbnVtX2J5dGVzIG9mIGRhdGEgZnJvbSBidWZmZXIgdG8gdGhlIGNsaWVudCBvdXRwdXQgdmVjdG9yIG91dHZlY19pZHggaW4gdGhlIG1lc3NhZ2UgaWRlbnRpZmllZCBieSBtc2dfaGFuZGxlLiBTZXF1ZW50aWFsIGNhbGxzIHVzaW5nIHRoZSBzYW1lIG1zZ19oYW5kbGUgYW5kIG91dHZlY19pZHggd2lsbCBiZSBjb25jYXRlbmF0ZWQgaW4gdGhlIG91dHB1dCB2ZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X2NhbGxfYW5kX3dyaXRlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENsaWVudCBjb25uZWN0cyB0byBSb1Qgc2VydmljZSA8YnIgLz4yLiBDbGllbnQgc2VuZHMgZm91ciBvdXRwdXQgdmVjdG9ycyB0byBSb1Qgc2VydmljZSB1c2luZyBwc2FfY2FsbCA8YnIgLz4zLiBSb1Qgc2VydmljZSBjaGVja3MgZm9sbG93aW5nOiA8YnIgLz4gIC0gUmVwb3J0aW5nIG9mIG91dHB1dCB2ZWN0b3JzIHNpemUgdGhyb3VnaCBtc2cub3V0X3NpemUgPGJyIC8+ICAtIGluX2xlbj0wIGNoZWNrIDxiciAvPiAgLSB6ZXJvIGJ5dGUgd3JpdGUgPGJyIC8+ICAtIE91dCB2ZWN0b3Igd3JpdGVzIHVzaW5nIHBzYV93cml0ZSA8YnIgLz4gICAtICBWZWN0b3Igd3JpdGUgY29uY2F0ZW5hdGlvbiA8YnIgLz40LiBDbGllbnQgcmVjaWV2ZXMgdGhlIHN0YXR1cyBvZiBSb1Qgc2VydmljZSBjaGVja3MsIGNyb3NzIGNoZWNrIHRoZSBjb250ZW50IG9mIG91dCB2ZWN0b3JzIGFuZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwcyBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jYWxsLHBzYV9nZXQscHNhX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgIHwgMS4gIHBzYV9jYWxsKCk6ICBBbnkgSS9PIHZlY3RvciBvZiBsZW5ndGggemVybyBpcyBwZXJtaXR0ZWQgYW5kIHdpbGwgYmUgdHJlYXRlZCBhcyBhbiBlbXB0eSBvciBub24tZXhpc3RlbnQgdmVjdG9yIGJ5IHRoZSBmcmFtZXdvcmsuIFdoZW4gbGVzcyB0aGFuIGZvdXIgdmVjdG9ycyBhcmUgcHJvdmlkZWQgdG8gcHNhX2NhbGwoKSBmb3IgZWl0aGVyIGlucHV0IG9yIG91dHB1dCwgdGhlbiB0aGUgcmVtYWluaW5nIHZlY3RvcnMgaGF2ZSB6ZXJvIGxlbmd0aCBhbmQgdGhlIGluX3NpemUgYW5kIG91dF9zaXplIGVsZW1lbnRzIGZvciB0aGVzZSB2ZWN0b3JzIHdpbGwgYmUgemVyby5BIG1lbW9yeSByZWZlcmVuY2UgY29udGFpbnMgYSBzdGFydCBhZGRyZXNzIGFuZCBhbiBhc3NvY2lhdGVkIGxlbmd0aC4gQSB6ZXJvLWxlbmd0aCBtZW1vcnkgcmVmZXJlbmNlIGlzIG9uZSB3aGVyZSB0aGUgbGVuZ3RoIGlzIHplcm8uIFRoZSBzdGFydCBhZGRyZXNzIG9mIGEgemVyby1sZW5ndGggbWVtb3J5IHJlZmVyZW5jZSBjYW4gc2FmZWx5IHRha2UgYW55IHZhbHVlIGFuZCBtdXN0IGJlIGlnbm9yZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uLiA8YnIgLz4yLiBwc2FfY2FsbCgpOiBJZiBpbl9sZW4gaXMgemVybyB0aGVuIGluX3ZlYyBpcyBpZ25vcmVkICA8YnIgLz4zLiBzYV9jYWxsKCk6IElmIG91dF9sZW4gaXMgemVybyB0aGVuIG91dF92ZWMgaXMgaWdub3JlZCAgPGJyIC8+NC4gcHNhX2dldCgpOiBJZiBhbiBpbnB1dCBhbmQgb3V0cHV0IHZlY3RvciBoYXMgbm90IGJlZW4gcGFzc2VkIGJ5IHRoZSBjbGllbnQgdGhlbiB0aGUgY29ycmVzcG9uZGluZyBpbl9zaXplW10gYW5kIG91dF9zaXplW10gZm9yIHRoYXQgdmVjdG9yIGlzIHplcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF96ZXJvX2xlbmd0aF9pbnZlYygpW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfemVyb19sZW5ndGhfb3V0dmVjKCkgfCBUZXN0IHplcm8gbGVudGggaW5wdXQgdmVjdG9yOiA8YnIgLz4xLiBDbGllbnQgY29ubmVjdHMgdG8gUm9UIHNlcnZpY2UgPGJyIC8+Mi4gQ2xpZW50IHNlbmRzIHRocmVlIGlucHV0IGFuZCBvbmUgb3V0dmVjIHZlY3RvcnMgdG8gUm9UIHNlcnZpY2UgdXNpbmcgcHNhX2NhbGwgLSBpbnZlYyAwIGFzIHplcm8gbGVuZ3RoIHZlY3RvciwgaW52ZWMgMSBhcyBOVUxMIGFuZCBpbnZlYyAyIGFuZCBvdXR2ZWMgMCBhcyBub24temVybyBsZW5ndGggdmVjdG9yIDxiciAvPjMuIFJvVCBzZXJ2aWNlIGNoZWNrcyBzaXplIG9mIGVhY2ggdmVjdG9ycyByZXBvcnRlZCB0aHJvdWdoIG1zZy5pbl9zaXplIGFuZCBtc2cub3V0X3NpemUgPGJyIC8+NC4gQ2xpZW50IHJlY2lldmVzIHRoZSBzdGF0dXMgb2YgY2hlY2tzIGFuZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gPGJyIC8+VGVzdCB6ZXJvIGxlbnRoIG91dHB1dCB2ZWN0b3I6IDxiciAvPjEuIENsaWVudCBjb25uZWN0cyB0byBSb1Qgc2VydmljZSA8YnIgLz4yLiBDbGllbnQgc2VuZHMgb25lICBpbnB1dCBhbmQgdGhyZWUgb3V0dmVjIHZlY3RvcnN0byBSb1Qgc2VydmljZSB1c2luZyBwc2FfY2FsbCAtIG91dHZlYyAwIGFzIHplcm8gbGVuZ3RoIHZlY3Rvciwgb3V0dmVjIDAgYXMgTlVMTCBhbmQgaW52ZWMgMCBhbmQgb3V0dmVjIDIgYXMgbm9uLXplcm8gbGVuZ3RoIHZlY3RvciA8YnIgLz4zLiBSb1Qgc2VydmljZSBjaGVja3Mgc2l6ZSBvZiBlYWNoIHZlY3RvcnMgcmVwb3J0ZWQgdGhyb3VnaCBtc2cuaW5fc2l6ZSBhbmQgbXNnLm91dF9zaXplIDxiciAvPjQuIENsaWVudCByZWNpZXZlcyB0aGUgc3RhdHVzIG9mIGNoZWNrcyBhbmQgY2xvc2VzIHRoZSBjb25uZWN0aW9uIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gfCBwc2FfY2FsbCxwc2FfZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICB8IDEuIFdoZW4gY2xpZW50IHByb3ZpZGVzIGFuIGlucHV0IGFuZCBvdXRwdXQgdmVjdG9ycyB3aGljaCBhcmUgcmVmZXJlbmNpbmcgdG8gc2FtZSBtZW1vcnkgbG9jYXRpb24sIGEgcHNhX3JlYWQgYWZ0ZXIgcHNhX3dyaXRlIHRvIHRoZSBzYW1lIG1lbW9yeSBsb2NhdGlvbiBjYW4gcmV0dXJuIG9yaWdpbmFsIG9yIG1vZGlmaWVkIHZhbHVlLiAgPGJyIC8+Mi4gV2hlbiBjbGllbnQgcHJvdmlkZXMgYW4gaW5wdXQgYW5kIG91dHB1dCB2ZWN0b3JzIHdoaWNoIGFyZSByZWZlcmVuY2luZyB0byBzYW1lIG1lbW9yeSBsb2NhdGlvbiwgYSBwc2Ffd3JpdGUocykgdG8gYm90aCBtZW1vcnkgdmVjdG9ycyBjYW4gcmV0dXJuIGVpdGhlciB0aGUgMXN0IG9yIHRoZSAybmQgdmFsdWUgd3JpdHRlbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3Rfb3ZlcmxhcHBpbmdfdmVjdG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gQ2xpZW50IHByb3ZpZGVzIG9uZSBpbnB1dCBhbmQgMiBvdXRwdXQgdmVjdG9ycyB3aGljaCBhcmUgcG9pbnRpbmcgdG8gc2FtZSBsb2NhdGlvbi4gIDxiciAvPjIuIFJvVCBzZXJ2aWNlIHBlcmZvcm1zIHJlYWQgYWZ0ZXIgd3JpdGUgb3BlcmF0aW9uIG9uIHRvIG91dHZlYy0wIGFuZCBleHBlY3RzIHJldHVybiB2YWx1ZSBlaXRoZXIgbW9kaWZpZWQgb25lIG9yIHRoZSBvcmlnaW5hbCAgPGJyIC8+My4gUm9UIHNlcnZpY2UgcGVyZm9ybXMgd3JpdGUgb3BlcmF0aW9uIHRvIG91dHZlYy0xIGFuZCB1bmJsb2NrIHRoZSBjb25uZWN0aW9uLiBUaGUgd3JpdGUgcGVyZm9ybWVkIGlzIHRvIG1pbWljIHdyaXRlIGFmdGVyIHdyaXRlIG9wZXJhdGlvIHRvIHRoZSBvdmVybGFwcGluZyB2ZWN0b3IuIDxiciAvPjQuIENsaWVudCBjaGVjayB0aGUgdmFsdWUgb2Ygb3V0dmVjLiBUaGUgdmFsdWUgc2hvdWxkIGJlIGVpdGhlciB0aGUgdmFsdWUgd3JpdHRlbiBieSBmaXJzdCBwc2Ffd3JpdGUgb3IgdGhlIHNlY29uZCBwc2Ffd3JpdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwscHNhX3dyaXRlLHBzYV9yZWFkICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAwNCAgICAgICAgfCBwc2FfY29ubmVjdCgpIGRvZXMgbm90IHJldHVybiBpZiBSb1QgU2VydmljZSBkb2VzIG5vdCBleGlzdCBvbiBwbGF0Zm9ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3NpZF9kb2VzX25vdF9leGlzdHMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2Nvbm5lY3Qgd2l0aCBTSUQgd2hpY2ggZG9lcyBub3QgZXhpc3Qgb24gYSBwbGF0Zm9ybSA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jb25uZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMDUgICAgICAgIHwgcHNhX2Nvbm5lY3QoKSBkb2VzIG5vdCByZXR1cm4gaWYgVmVyc2lvbiBwb2xpY3kgaXMgU1RSSUNUIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBpcyBISUdIRVIgdGhhbiBtaW5pbXVtIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9zdHJpY3RfcG9saWN5X2hpZ2hlcl9taW5vcl92ZXJzaW9uKCkgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdob3NlIFZlcnNpb24gcG9saWN5IGlzIFNUUklDVCBhbmQgcmVxdWVzdGVkIG1pbm9yIHZlcnNpb24gaXMgSElHSEVSIHRoYW4gbWluaW11bSB2ZXJzaW9uLiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDA2ICAgICAgICB8IHBzYV9jb25uZWN0KCkgZG9lcyBub3QgcmV0dXJuIGlmIFZlcnNpb24gcG9saWN5IGlzIFNUUklDVCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gbG93ZXIgdGhhbiBtaW5pbXVtIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3Rfc3RyaWN0X3BvbGljeV9sb3dlcl9taW5vcl92ZXJzaW9uKCkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FsbCBwc2FfY29ubmVjdCB3aXRoIFNJRCB3aG9zZSBWZXJzaW9uIHBvbGljeSBpcyBTVFJJQ1QgYW5kIHJlcXVlc3RlZCBtaW5vciB2ZXJzaW9uIGlzIExvd2VyIHRoYW4gbWluaW11bSB2ZXJzaW9uLiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2Nvbm5lY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAwNyAgICAgICAgfCBwc2FfY29ubmVjdCgpIGRvZXMgbm90IHJldHVybiBpZiBWZXJzaW9uIHBvbGljeSBpcyBSRUxBWEVEIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBpcyBiaWdnZXIgdGhhbiBtaW5pbXVtIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3JlbGF4X3BvbGljeV9oaWdoZXJfbWlub3JfdmVyc2lvbigpICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbGwgcHNhX2Nvbm5lY3Qgd2l0aCBTSUQgd2hvc2UgVmVyc2lvbiBwb2xpY3kgaXMgUkVMQVhFRCBhbmQgcmVxdWVzdGVkIG1pbm9yIHZlcnNpb24gaXMgSElHSEVSIHRoYW4gbWluaW11bSB2ZXJzaW9uLiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jb25uZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMDggICAgICAgIHwgMS4gcHNhX2Nvbm5lY3QoKSBkb2VzIG5vdCByZXR1cm4gaWYgU2VydmljZSB0byBub25fc2VjdXJlX2NsaWVudCBpcyBub3QgYXZhaWxhYmxlIDxiciAvPjIuIE1hbmlmZXN0IHBhcmFtZXRlciAtIFRoZSBub25fc2VjdXJlX2NsaWVudHMgZmllbGQgY29udGFpbnMgYSBib29sZWFuIHRvIGluZGljYXRlIGlmIGl0IGlzIGFjY2Vzc2libGUgdG8gTlNQRSBjbGllbnRzLiBSb1QgU2VydmljZXMgYXJlIGFsd2F5cyBhY2Nlc3NpYmxlIHRvIFNQRSBjbGllbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9zZWN1cmVfYWNjZXNzX29ubHlfY29ubmVjdGlvbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdoaWNoIGFsbG93IHNlY3VyZSBvbmx5IGNvbm5lY3Rpb24uICA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDA5ICAgICAgICB8IDEuIHBzYV9jb25uZWN0KCkgZG9lcyBub3QgcmV0dXJuIGlmIFNJRCBpcyBub3QgbWVudGlvbmVkIGluIGRlcGVuZGVuY2llcyBmaWVsZC4gPGJyIC8+Mi4gTWFuaWZlc3QgcGFyYW1ldGVyLSBkZXBlbmRlbmNpZXMgKG9wdGlvbmFsKSA8YnIgLz5JZiBhY2Nlc3MgYmV0d2VlbiBhIFNlY3VyZSBQYXJ0aXRpb24gKGFjdGluZyBhcyBjbGllbnQpIGFuZCBhIFJvVCBTZXJ2aWNlIChhY3RpbmcgYXMgc2VydmVyKSBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBtYW5pZmVzdCwgdGhlbiB0aGUgY2xpZW50IGlzIG5vdCBwZXJtaXR0ZWQgdG8gY29ubmVjdCB0byB0aGUgUm9UIFNlcnZpY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfdW5leHRlcm5fc2lkX2Nvbm5lY3Rpb24oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY29ubmVjdCB3aXRoIFNJRCB3aGljaCBpcyBub3QgbWVudGlvbmVkIGFzIGV4dGVybmFsIFNJRCBpbiBtYW5pZmVzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2Nvbm5lY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAxMCAgICAgICAgfCBJdCBpcyBub3QgcmVxdWlyZWQgZm9yIHRoZSBtaW5vcl92ZXJzaW9uIG9yIG1pbm9yX3BvbGljeSBhdHRyaWJ1dGVzIHRvIGJlIHNwZWNpZmllZC4gSWYgdGhleSBhcmUgbm90IHNwZWNpZmllZCBpbiB0aGUgbWFuaWZlc3QsIHRoZSBSb1QgU2VydmljZSB3aWxsIGhhdmUgZGVmYXVsdCBhdHRyaWJ1dGVzIG9mIG1pbm9yX3ZlcnNpb249MSBhbmQgbWlub3JfcG9saWN5PSJTVFJJQ1QiLiBwc2FfY29ubmVjdCgpIGRvZXMgbm90IHJldHVybiBpZiByZXF1ZXN0ZWQgdmVyc2lvbiBoaWdoZXIgdGhhbiBtaW5pbXVtIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3Vuc3BlY2lmaWVkX3BvbGljeV93aXRoX2hpZ2hlcl9taW5vcl92ZXIoKSAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2Nvbm5lY3Qgd2l0aCBTSUQgd2hvc2UgVmVyc2lvbiBwb2xpY3kgaXMgbm90IG1lbnRpb25lZCBhbmQgcmVxdWVzdGVkIG1pbm9yIHZlcnNpb24gaXMgSElHSEVSIHRoYW4gbWluaW11bSB2ZXJzaW9uLiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jb25uZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMTEgICAgICAgIHwgSXQgaXMgbm90IHJlcXVpcmVkIGZvciB0aGUgbWlub3JfdmVyc2lvbiBvciBtaW5vcl9wb2xpY3kgYXR0cmlidXRlcyB0byBiZSBzcGVjaWZpZWQuIElmIHRoZXkgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0LCB0aGUgUm9UIFNlcnZpY2Ugd2lsbCBoYXZlIGRlZmF1bHQgYXR0cmlidXRlcyBvZiBtaW5vcl92ZXJzaW9uPTEgYW5kIG1pbm9yX3BvbGljeT0iU1RSSUNUIi4gIHBzYV9jb25uZWN0KCkgZG9lcyBub3QgcmV0dXJuIGlmIHJlcXVlc3RlZCB2ZXJzaW9uIGxvd2VyIHRoYW4gbWluaW11bSB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF91bnNwZWNpZmllZF9wb2xpY3lfd2l0aF9sb3dlcl9taW5vcl92ZXIoKSAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdob3NlIFZlcnNpb24gcG9saWN5IGlzIG5vdCBtZW50aW9uZWQgYW5kIHJlcXVlc3RlZCBtaW5vciB2ZXJzaW9uIGlzIGxvd2VyIHRoYW4gbWluaW11bSB2ZXJzaW9uLiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDEyICAgICAgICB8IHBzYV9jbG9zZSgpIGRvZXMgbm90IHJldHVybiBpZiBhbiBpbnZhbGlkIGhhbmRsZSB3YXMgcHJvdmlkZWQgdGhhdCBpcyBub3QgdGhlIG51bGwgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2Nsb3NlX3dpdGhfaW52YWxpZF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY2xvc2Ugd2l0aCBJTlZBTElEX0hBTkRMRSB3aGljaCBpcyBub3QgTlVMTC4gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2Nsb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAxMyAgICAgICAgfCBwc2FfZ2V0KCkgZG9lcyBub3QgcmV0dXJuIGlmIHNpZ25hbCBoYXMgbW9yZSB0aGFuIGEgc2luZ2xlIGJpdCBzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9nZXRfd2l0aF9tb3JlX3RoYW5fb25lX3NpZ25hbCgpICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2dldCB3aXRoIGEgc2lnbmFsIHdobyBoYXMgbW9yZSB0aGFuIGEgc2luZ2xlIGJpdCBzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9nZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMTQgICAgICAgIHwgQWZ0ZXIgYSBSb1QgU2VydmljZSBtZXNzYWdlIGlzIHNpZ25hbGVkLCBwc2FfZ2V0KCkgZnVuY3Rpb24gaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgbWVzc2FnZSBkZXRhaWxzLiBFYWNoIG1lc3NhZ2UgY2FuIG9ubHkgYmUgcmV0cmlldmVkIG9uY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfZ2V0X2NhbGxlZF90d2ljZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9nZXQgd2l0aCBhIHZhbGlkIHNpZ25hbCBiYWNrIHRvIGJhY2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDE1ICAgICAgICB8IHBzYV9nZXQoKSBkb2VzIG5vdCByZXR1cm4gaWYgc2lnbmFsIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBSb1QgU2VydmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2dldF93aXRoX25vbl9yb3Rfc2lnbmFsKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfZ2V0IHdpdGggRE9PUkJFTEwgc2lnbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2dldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAxNiAgICAgICAgfCBwc2FfZ2V0KCkgZG9lcyBub3QgcmV0dXJuIGlmIFRoZSBSb1QgU2VydmljZSBzaWduYWwgaXMgbm90IGN1cnJlbnRseSBhc3NlcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9nZXRfd2l0aF91bmFzc2VydGVkX3NpZ25hbCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2dldCB3aXRoIHNpbmdhbCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGFzc2VydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9nZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMTcgICAgICAgIHwgRWFjaCBSb1QgU2VydmljZSBsaXN0ZWQgY3JlYXRlcyBhIGRlcGVuZGVuY3kgZnJvbSB0aGUgY2xpZW50IFBhcnRpdGlvbiB0byBhIHNlcnZlciBQYXJ0aXRpb24uIFdpdGhpbiB0aGUgcmVzdWx0aW5nIG5ldHdvcmsgb2YgZGVwZW5kZW5jaWVzLCB0aGVyZSBtdXN0IGJlIG5vIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBiZXR3ZWVuIFNlY3VyZSBQYXJ0aXRpb25zLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBkZWFkbG9jayBiZWNhdXNlIHRoZSBTZXJ2aWNlIHJlcXVlc3RzIGFyZSBhbHdheXMgc3luY2hyb25vdXMuRm9yIHRoZSBzYW1lIHJlYXNvbiwgYSBTZWN1cmUgUGFydGl0aW9uIG11c3Qgbm90IHVzZSBhIFJvVCBTZXJ2aWNlIHRoYXQgaXMgZGVmaW5lZCB3aXRoaW4gaXRzZWxmLiBEaXJlY3QgZnVuY3Rpb24gY2FsbHMgbXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgSVBDIHdoZXJlIHRoZXJlIGlzIGEgZGVwZW5kZW5jeSBiZXR3ZWVuIFJvVCBTZXJ2aWNlcyB3aXRoaW4gYSBzaW5nbGUgU2VjdXJlIFBhcnRpdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wYXJ0aXRpb25fY2FsbGluZ19pdHNfb3duX3JvdF9zZXJ2aWNlKCkgICAgICAgICAgICAgICAgICAgICAgfCBQYXJ0aXRpb24gY2FsbGluZyBpdHMgb3duIFJPVCBzZXJ2aWNlIHVzaW5nIHBzYV9jb25uZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDE4ICAgICAgICB8IHBzYV9zZXRfcmhhbmRsZSgpIGRvZXMgbm90IHJldHVybiAgaWYgYW4gaW52YWxpZCBtZXNzYWdlIGhhbmRsZSB3YXMgcHJvdmlkZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3NldF9yaGFuZGxlX3dpdGhfaW52YWxpZF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffc2V0X3JoYW5sZGUgd2l0aCBhbiBJTlZBTElEX0hBTkRMRSB3aGljaCBpcyBub3QgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3NldF9yaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAxOSAgICAgICAgfCBwc2Ffc2V0X3JoYW5kbGUoKSBkb2VzIG5vdCByZXR1cm4gaWYgTnVsbCBoYW5kbGUgd2FzIHBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9zZXRfcmhhbmRsZV93aXRoX251bGxfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3NldF9yaGFubGRlIHdpdGggTlVMTCBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9zZXRfcmhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMjAgICAgICAgIHwgSWYgbWVzc2dhZSB0eXBlIGlmIGlzIFBTQV9JUENfQ09OTkVDVCB0aGVuIHVzZSBvZiBzdGF0dXMgdmFsdWVzIGluIHBzYV9yZXBseSgpIG90aGVyIHRoYW4gUFNBX1NVQ0NFU1Mgb3IgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCBpcyBhIGZhdGFsIHByb2dyYW1taW5nIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVwbHlfd2l0aF9pbnZhbGlkX2Nvbm5lY3Rfc3RhdHVzX2NvZGUoKSAgICAgICAgICAgICAgICAgfCBDYWxsIHRvIHBzYV9yZXBseSBkdXJpbmcgUFNBX0lQQ19DT05ORUNUIHdpdGggc3RhdHVzIGNvZGUgb3RoZXIgdGhhbiBQU0FfU1VDQ0VTUyBhbmQgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDIxICAgICAgICB8IElmIG1lc3NhZ2UgdHlwZSBpZiBQU0FfSVBDX0NBTEwgLCB0aGUgdXNlIG9mIG90aGVyIHJlc2VydmVkIHN0YXR1cyBjb2RlcyBpbiB0aGUgcmFuZ2UgSU5UMzJfTUlOKzEgdG8gSU5UMzJfTUlOKzEyNyBmb3IgcHNhX3JlcGx5KCkgaXMgYSBmYXRhbCBwcm9ncmFtbWluZyBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3JlcGx5X3dpdGhfaW52YWxpZF9jYWxsX3N0YXR1c19jb2RlKCkgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCB0byBwc2FfcmVwbHkgZHVyaW5nIFBTQV9JUENfQ0FMTCB3aXRoIHN0YXR1cyBjb2RlIG90aGVyIHRoYW4gYWxsb3dlZCBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3JlcGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAyMiAgICAgICAgfCBwc2FfcmVwbHkoKSBkb2VzIG5vdCByZXR1cm4gaWYgdGhlIG1lc3NhZ2UgaGFuZGxlIGlzIGludmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9yZXBseV93aXRoX2ludmFsaWRfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3JlcGx5IHdpdGggYW4gSU5WQUxJRF9IQU5ETEUgd2hpY2ggaXMgbm90IE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9yZXBseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMjMgICAgICAgIHwgcHNhX3JlcGx5KCkgZG9lcyBub3QgcmV0dXJuIGlmIHRoZSBtZXNzYWdlIGhhbmRsZSBpcyAgTnVsbCBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVwbHlfd2l0aF9udWxsX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZXBseSB3aXRoIGEgTlVMTCBIQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDI0ICAgICAgICB8IHBzYV9jYWxsKCkgZG9lcyBub3QgcmV0dXJuIGlmIGFuIGludmFsaWQgaGFuZGxlIHdhcyBwYXNzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY2FsbCB3aXRoIGFuIElOVkFMSURfSEFORExFIHdoaWNoIGlzIG5vdCBOVUxMLlBlcmZvcm0gdGhpcyBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAyNSAgICAgICAgfCBwc2FfY2FsbCgpIGRvZXMgbm90IHJldHVybiBpZiBhbiBudWxsIGhhbmRsZSB3YXMgcGFzc2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jYWxsX3dpdGhfbnVsbF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2NhbGwgd2l0aCBhIE5VTEwgSEFORExFLiA8YnIgLz5QZXJmb3JtIHRoaXMgc3RlcCBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMjYgICAgICAgIHwgcHNhX2NhbGwoKSBkb2VzIG5vdCByZXR1cm4gaWYgIGluX2xlbiArIG91dF9sZW4gPiBQU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfY2FsbF93aXRoX2lvdmVjX21vcmVfdGhhbl9tYXhfbGltaXQoKSAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jYWxsIHdpdGggbW9yZSB0aGFuIGZvdXIgSU9WRUNzLiA8YnIgLz5QZXJmb3JtIHRoaXMgc3RlcCBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDI3ICAgICAgICB8IDEuIHBzYV9jYWxsKCkgcmV0dXJucyAgUFNBX0RST1BfQ09OTkVDVElPTiB3aGVuIHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGRyb3BwZWQgYnkgdGhlIFJvVCBTZXJ2aWNlLiBUaGlzIGluZGljYXRlcyB0aGF0IGVpdGhlciB0aGlzIG9yIGEgcHJldmlvdXMgbWVzc2FnZSB3YXMgaW52YWxpZChUaGUgU1BNIHdpbGwgaW1wbGVtZW50IG9uZSBvZiB0aGUgZm9sbG93aW5nIGJlaGF2aW9ycyBpbiB0aGlzIHNpdHVhdGlvbjq/IHRoaXMgaXMgYSBjbGllbnQgZmF0YWwgZXJyb3IgYW5kIHBzYV9jYWxsKCkgd2lsbCBub3QgcmV0dXJuvyBwc2FfY2FsbCgpIHJldHVybmluZyBQU0FfRFJPUF9DT05ORUNUSU9OLiBJbiB0aGlzIGNhc2UsIGFsbCBzdWJzZXF1ZW50IGNhbGxzIHRvIHBzYV9jYWxsKCkgb24gdGhpcyBjb25uZWN0aW9uIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIFBTQV9EUk9QX0NPTk5FQ1RJT04gYW5kIHRoZSBjb25uZWN0aW9uIG11c3QgYmUgY2xvc2VkKSA8YnIgLz4yLiBwc2FfcmVwbHkoKTogSWYgdGhlIG1lc3NhZ2UgdHlwZSBpcyBQU0FfSVBDX0NBTEwgYW5kIHRoZSBjbGllbnQgaGFzIG1hZGUgYW4gaW52YWxpZCByZXF1ZXN0LCB0aGVuIHRoZSBSb1QgU2VydmljZSBjYW4gcmVxdWVzdCBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gYmUgdGVybWluYXRlZCBieSBjYWxsaW5nIHBzYV9yZXBseSgpIHdpdGggcmV0dXJuIHZhbHVlIFBTQV9EUk9QX0NPTk5FQ1RJT04uIEFmdGVyIHRoaXMsIHRoZSBSb1QgU2VydmljZSB3aWxsIHJlY2VpdmUgbm8gZnVydGhlciBQU0FfSVBDX0NBTEwgbWVzc2FnZXMgb24gdGhhdCBjb25uZWN0aW9uLiBUaGUgU1BNIHdpbGwgZGVsaXZlciBhIFBTQV9JUENfRElTQ09OTkVDVCB0byB0aGUgUm9UIFNlcnZpY2UgdG8gcmVsZWFzZSBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGNvbm5lY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2Ryb3BfY29ubmVjdGlvbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUm9UIHNlcnZpY2UgZXhlY3V0ZXMgcHNhX3JlcGx5IHdpdGggc3RhdHVzIGNvZGUgZXFhdWwgdG8gUFNBX0RST1BfQ09OTkVDVElPTiBkdXJpbmcgUFNBX0lQQ19DQUxMLkNsaWVudCBleHBlY3RzIGVpdGhlciBQU0FfRFJPUF9DT05ORUNUSU9OIGFzIHJldHVybmVkIHN0YXR1cyBjb2RlICBvciBkb2VzIG5vdCByZXR1cm4gY29uZGl0aW9uIGZvciBwc2FfY2FsbC4gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwcyBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAyOCAgICAgICAgfCBwc2FfcmVhZCgpIGRvZXMgbm90IHJldHVybiBpZiAgbXNnX2hhbmRsZSBkb2VzIG5vdCByZWZlciB0byBhIFBTQV9JUENfQ0FMTCBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9yZWFkX2F0X2lwY19jb25uZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3JlYWQgZHVyaW5nIFBTQV9JUENfQ09OTkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9yZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMjkgICAgICAgIHwgcHNhX3JlYWQoKSBkb2VzIG5vdCByZXR1cm4gaWYgICBtc2dfaGFuZGxlIGRvZXMgbm90IHJlZmVyIHRvIGEgUFNBX0lQQ19DQUxMIG1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVhZF9hdF9pcGNfZGlzY29ubmVjdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZWFkIGR1cmluZyBQU0FfSVBDX0RJU0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDMwICAgICAgICB8IHBzYV9yZWFkKCkgZG9lcyBub3QgcmV0dXJuIGlmIE51bGwgaGFuZGxlIHdhcyBwYXNzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3JlYWRfd2l0aF9udWxsX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfcmVhZCB3aXRoIE5VTEwgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3JlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAzMSAgICAgICAgfCBwc2FfcmVhZCgpIGRvZXMgbm90IHJldHVybiBpZiAgSW52YWxpZCBoYW5kbGUgd2FzIHBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9yZWFkX3dpdGhfaW52YWxpZF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGxsIHBzYV9yZWFkIHdpdGggSU5WQUxJRF9IQU5ETEUgd2hpY2ggaXMgbm90IE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9yZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMzIgICAgICAgIHwgcHNhX3JlYWQoKSBkb2VzIG5vdCByZXR1cm4gaWYgaW52ZWNfaWR4IGlzIGVxdWFsIHRvIFBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVhZF93aXRoX2ludmVjX2VxdWFsX3RvX21heF9pb3ZlYygpICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZWFkIHdpdGggaW52ZWNfaWR4PVBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDMzICAgICAgICB8IHBzYV9yZWFkKCkgZG9lcyBub3QgcmV0dXJuIGlmICBpbnZlY19pZHggaXMgZ3JlYXRlciB0aGFuIFBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3JlYWRfd2l0aF9pbnZlY19ncmVhdGVyX3RoYW5fbWF4X2lvdmVjKCkgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfcmVhZCB3aXRoIGludmVjX2lkeD5QU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3JlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAzNCAgICAgICAgfCBwc2Ffc2tpcCgpIGRvZXMgbm90IHJldHVybiBpZiAgbXNnX2hhbmRsZSBkb2VzIG5vdCByZWZlciB0byBhIFBTQV9JUENfQ0FMTCBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9za2lwX2F0X2lwY19jb25uZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3NraXAgZHVyaW5nIFBTQV9JUENfQ09OTkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9za2lwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMzUgICAgICAgIHwgcHNhX3NraXAoKSBkb2VzIG5vdCByZXR1cm4gaWYgIG1zZ19oYW5kbGUgZG9lcyBub3QgcmVmZXIgdG8gYSBQU0FfSVBDX0NBTEwgbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2tpcF9hdF9pcGNfZGlzY29ubmVjdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9za2lwIGR1cmluZyBQU0FfSVBDX0RJU0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffc2tpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDM2ICAgICAgICB8IHBzYV9za2lwKCkgZG9lcyBub3QgcmV0dXJuIGlmICAgTnVsbCBoYW5kbGUgd2FzIHBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3NraXBfd2l0aF9udWxsX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffc2tpcHdpdGggTlVMTCBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3NraXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAzNyAgICAgICAgfCBwc2Ffc2tpcCgpIGRvZXMgbm90IHJldHVybiBpZiAgSW52YWxpZCBoYW5kbGUgd2FzIHBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9za2lwX3dpdGhfaW52YWxpZF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGxsIHBzYV9za2lwIHdpdGggSU5WQUxJRF9IQU5ETEUgd2hpY2ggaXMgbm90IE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9za2lwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMzggICAgICAgIHwgcHNhX3NraXAoKSBkb2VzIG5vdCByZXR1cm4gaWYgIGludmVjX2lkeCBpcyBlcXVhbCB0byBQU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2tpcF93aXRoX2ludmVjX2VxdWFsX3RvX21heF9pb3ZlYygpICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9za2lwIHdpdGggaW52ZWNfaWR4PVBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffc2tpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDM5ICAgICAgICB8IHBzYV9za2lwKCkgZG9lcyBub3QgcmV0dXJuIGlmICBpbnZlY19pZHggaXMgZ3JlYXRlciB0aGFuIFBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3NraXBfd2l0aF9pbnZlY19ncmVhdGVyX3RoYW5fbWF4X2lvdmVjKCkgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffc2tpcCB3aXRoIGludmVjX2lkeD5QU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3NraXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA0MCAgICAgICAgfCBwc2Ffd3JpdGUoKSBkb2VzIG5vdCByZXR1cm4gaWYgICBtc2dfaGFuZGxlIGRvZXMgbm90IHJlZmVyIHRvIGEgUFNBX0lQQ19DQUxMIG1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV93cml0ZV9hdF9pcGNfY29ubmVjdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3dyaXRlIGR1cmluZyBQU0FfSVBDX0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNDEgICAgICAgIHwgcHNhX3dyaXRlKCkgZG9lcyBub3QgcmV0dXJuIGlmICBtc2dfaGFuZGxlIGRvZXMgbm90IHJlZmVyIHRvIGEgUFNBX0lQQ19DQUxMIG1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffd3JpdGVfYXRfaXBjX2Rpc2Nvbm5lY3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV93cml0ZSBkdXJpbmcgUFNBX0lQQ19ESVNDT05ORUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDQyICAgICAgICB8IHBzYV93cml0ZSgpIGRvZXMgbm90IHJldHVybiBpZiBOdWxsIGhhbmRsZSB3YXMgcGFzc2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3dyaXRlX3dpdGhfbnVsbF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffd3JpdGUgd2l0aCBOVUxMIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA0MyAgICAgICAgfCBwc2Ffd3JpdGUoKSBkb2VzIG5vdCByZXR1cm4gaWYgIEludmFsaWQgaGFuZGxlIHdhcyBwYXNzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV93cml0ZV93aXRoX2ludmFsaWRfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGxsIHBzYV93cml0ZSB3aXRoIElOVkFMSURfSEFORExFIHdoaWNoIGlzIG5vdCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNDQgICAgICAgIHwgcHNhX3dyaXRlKCkgZG9lcyBub3QgcmV0dXJuIGlmICBpbnZlY19pZHggaXMgZXF1YWwgdG8gUFNBX01BWF9JT1ZFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffd3JpdGVfd2l0aF9pbnZlY19lcXVhbF90b19tYXhfaW92ZWMoKSAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV93cml0ZSB3aXRoIGludmVjX2lkeD1QU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDQ1ICAgICAgICB8IHBzYV93cml0ZSgpIGRvZXMgbm90IHJldHVybiBpZiAgaW52ZWNfaWR4IGlzIGdyZWF0ZXIgdGhhbiBQU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3dyaXRlX3dpdGhfaW52ZWNfZ3JlYXRlcl90aGFuX21heF9pb3ZlYygpICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffd3JpdGUgd2l0aCBpbnZlY19pZHg+UFNBX01BWF9JT1ZFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA0NiAgICAgICAgfCBwc2Ffd3JpdGUoKSBkb2VzIG5vdCByZXR1cm4gaWYgIHRoZSBjYWxsIGF0dGVtcHRzIHRvIHdyaXRlIGRhdGEgcGFzdCB0aGUgZW5kIG9mIHRoZSBjbGllbnQgb3V0cHV0IHZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV93cml0ZV93aXRoX3NpemVfb3ZlcmZsb3coKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3dyaXRlIHdpdGggYSBzaXplIGlucHV0IG9uZSBieXRlIGJpZ2dlciB0aGFuIGFsbG93ZWQgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNDcgICAgICAgIHwgcHNhX2dldCBkb2VzIG5vdCByZXR1cm4gaWYgIFRoZSBtc2cgcG9pbnRlciBwcm92aWRlZCBpcyBub3QgYSB2YWxpZCBtZW1vcnkgcmVmZXJlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfZ2V0X3dpdGhfaW52YWxpZF9tc2dfcG9pbnRlcigpICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9nZXQgd2l0aCBpbnZhbGlkIG1zZyBwb2ludGVyLiA8YnIgLz4gU2VsZWN0aW9uIG9mIGludmFsaWQgcG9pbnRlciBpcyBhcyBiZWxvdzo8YnIgLz5pZiAoSVNPTEFUSU9OX0xFVkVMID4gMSk8YnIgLz4gICAgIC8vIFBTQSBSb1QgUG9pbnRlciA8YnIgLz4gICAgICBwc2FfZ2V0KG1zZ19wb2ludGVyID0gZHJpdmVyX21taW9fYmFzZSk7PGJyIC8+ZWxzZTxiciAvPiAgICAgIHBzYV9nZXQobXNnX3BvaW50ZXIgPSBOVUxMKTs8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDQ4ICAgICAgICB8IHBzYV9jYWxsIGRvZXMgbm90IHJldHVybiBpZiBhZGRyZXNzIG9mIGluX3ZlYyBpcyBpbnZhbGlkIGZvciBjbGllbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX2ludmVjX3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY2FsbCB3aXRoIGludmFsaWQgYWRkcmVzcyBmb3IgaW52ZWM8YnIgLz4gU2VsZWN0aW9uIG9mIGludmFsaWQgaW52ZWMgcG9pbnRlciBpcyBhcyBiZWxvdzo8YnIgLz4gICAgIGlmIGNhbGxlciA9PSBOT05TRUNVUkU8YnIgLz4gICAgICAgIC8vIFBTQSBSb1QgcG9pbnRlcjxiciAvPiAgICAgICAgaW52ZWNfcG9pbnRlciA9IGRyaXZlcl9tbWlvX2Jhc2U7PGJyIC8+PGJyIC8+ICAgICBlbHNlPGJyIC8+PGJyIC8+ICAgICAgICBpZiAoSVNPTEFUSU9OX0xFVkVMID4gMSk8YnIgLz4gICAgICAgICAgIGludmVjX3BvaW50ZXIgPSBkcml2ZXJfbW1pb19iYXNlOzxiciAvPiAgICAgICAgZWxzZTxiciAvPiAgICAgICAgICAgaW52ZWNfcG9pbnRlciA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA0OSAgICAgICAgfCBwc2FfY2FsbCBkb2VzIG5vdCByZXR1cm4gaWYgIGFkZHJlc3Mgb2Ygb3V0X3ZlYyBpcyBpbnZhbGlkIGZvciBjbGllbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9vdXR2ZWNfcG9pbnRlcigpICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2NhbGwgd2l0aCBpbnZhbGlkIGFkZHJlc3MgZm9yIG91dHZlYzxiciAvPiBTZWxlY3Rpb24gb2YgaW52YWxpZCBvdXR2ZWMgcG9pbnRlciBpcyBhcyBiZWxvdzo8YnIgLz4gICAgIGlmIGNhbGxlciA9PSBOT05TRUNVUkU8YnIgLz4gICAgICAgIC8vIFBTQSBSb1QgcG9pbnRlcjxiciAvPiAgICAgICAgb3V0dmVjX3BvaW50ZXIgPSBkcml2ZXJfbW1pb19iYXNlOzxiciAvPjxiciAvPiAgICAgZWxzZTxiciAvPjxiciAvPiAgICAgICAgaWYgKElTT0xBVElPTl9MRVZFTCA+IDEpPGJyIC8+ICAgICAgICAgICBvdXR2ZWNfcG9pbnRlciA9IGRyaXZlcl9tbWlvX2Jhc2U7PGJyIC8+ICAgICAgICBlbHNlPGJyIC8+ICAgICAgICAgICBvdXR2ZWNfcG9pbnRlciA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNTAgICAgICAgIHwgcHNhX2NhbGwgZG9lcyBub3QgcmV0dXJuIGlmIHBzYV9pbnZlYy5iYXNlIGFkZHJlc3MgaXMgaW52YWxpZCBmb3IgY2xpZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaW52ZWNfYmFzZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jYWxsIHdpdGggaW52YWxpZCBhZGRyZXNzIGZvciBwc2FfaW52ZWMuYmFzZTxiciAvPiBTZWxlY3Rpb24gb2YgaW52YWxpZCBiYXNlIGlzIGFzIGJlbG93OjxiciAvPiAgICAgaWYgY2FsbGVyID09IE5PTlNFQ1VSRTxiciAvPiAgICAgICAgLy8gUFNBIFJvVCBwb2ludGVyPGJyIC8+ICAgICAgICBpbnZhbGlkX2Jhc2UgPSBkcml2ZXJfbW1pb19iYXNlOzxiciAvPjxiciAvPiAgICAgZWxzZTxiciAvPjxiciAvPiAgICAgICAgaWYgKElTT0xBVElPTl9MRVZFTCA+IDEpPGJyIC8+ICAgICAgICAgICBpbnZhbGlkX2Jhc2UgPSBkcml2ZXJfbW1pb19iYXNlOzxiciAvPiAgICAgICAgZWxzZTxiciAvPiAgICAgICAgICAgaW52YWxpZF9iYXNlID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDUxICAgICAgICB8IHBzYV9jYWxsIGRvZXMgbm90IHJldHVybiBpZiBwc2Ffb3V0dmVjLmJhc2UgYWRkcmVzcyBpcyBpbnZhbGlkIGZvciBjbGllbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX291dHZlY19iYXNlKCkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY2FsbCB3aXRoIGludmFsaWQgYWRkcmVzcyBmb3IgcHNhX291dHZlYy5iYXNlPGJyIC8+IFNlbGVjdGlvbiBvZiBpbnZhbGlkIGJhc2UgaXMgYXMgYmVsb3c6PGJyIC8+ICAgICBpZiBjYWxsZXIgPT0gTk9OU0VDVVJFPGJyIC8+ICAgICAgICAvLyBQU0EgUm9UIHBvaW50ZXI8YnIgLz4gICAgICAgIGludmFsaWRfYmFzZSA9IGRyaXZlcl9tbWlvX2Jhc2U7PGJyIC8+PGJyIC8+ICAgICBlbHNlPGJyIC8+PGJyIC8+ICAgICAgICBpZiAoSVNPTEFUSU9OX0xFVkVMID4gMSk8YnIgLz4gICAgICAgICAgIGludmFsaWRfYmFzZSA9IGRyaXZlcl9tbWlvX2Jhc2U7PGJyIC8+ICAgICAgICBlbHNlPGJyIC8+ICAgICAgICAgICBpbnZhbGlkX2Jhc2UgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA1MiAgICAgICAgfCBwc2FfY2FsbCBkb2VzIG5vdCByZXR1cm4gaWYgcHNhX2ludmVjLmJhc2UgYWRkciBpcyB2YWxpZCBidXQgIHBzYV9pbnZlYy5iYXNlK3NpemUgYWRkcmVzcyBpcyBpbnZhbGlkIGZvciBjbGllbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9pbnZlY19lbmRfYWRkcigpICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2NhbGwgd2l0aCB2YWxpZCBhZGRyZXNzIGZvciBwc2FfaW52ZWMuYmFzZSBidXQgKHBzYV9pbnZlYy5iYXNlICsgcHNhX2ludmVjLnNpemUpIHBvaW50aW5nIHRvIGludmFsaWQgYWRkcmVzczxiciAvPiBTZWxlY3Rpb24gb2YgYmFzZSBhbmQgc2l6ZSBhcmUgYXMgYmVsb3c6PGJyIC8+ICAgICBpZiBjYWxsZXIgPT0gTk9OU0VDVVJFPGJyIC8+ICAgICAgICAgIHZhbGlkX2Jhc2UgPSBuc3BlX21taW9fcmVnaW9uX2Jhc2U7PGJyIC8+ICAgICAgICAgIGludmFsaWRfc2l6ZSA9IChkcml2ZXJfbW1pb19yZWdpb25fYmFzZSAtIG5zcGVfbW1pb19yZWdpb25fYmFzZSArIDEpOzxiciAvPjxiciAvPiAgICAgZWxzZTxiciAvPjxiciAvPiAgICAgICAgaWYgKElTT0xBVElPTl9MRVZFTCA+IDEpPGJyIC8+ICAgICAgICAgIHZhbGlkX2Jhc2UgPSBjbGllbnRfbW1pb19yZWdpb25fYmFzZTs8YnIgLz4gICAgICAgICAgaW52YWxpZF9zaXplID0gKGRyaXZlcl9tbWlvX3JlZ2lvbl9iYXNlIC0gY2xpZW50X21taW9fcmVnaW9uX2Jhc2UgKyAxKTs8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNTMgICAgICAgIHwgcHNhX2NhbGwgZG9lcyBub3QgcmV0dXJuIGlmIHBzYV9vdXR2ZWMuYmFzZSBhZGRyIGlzIHZhbGlkIGJ1dCAgcHNhX2ludmVjLmJhc2Urc2l6ZWFkZHJlc3MgaXMgaW52YWxpZCBmb3IgY2xpZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfb3V0dmVjX2VuZF9hZGRyKCkgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jYWxsIHdpdGggdmFsaWQgYWRkcmVzcyBmb3IgcHNhX291dHZlYy5iYXNlIGJ1dCAocHNhX291dHZlYy5iYXNlICsgcHNhX291dHZlYy5zaXplKSBwb2ludGluZyB0byBpbnZhbGlkIGFkZHJlc3M8YnIgLz4gU2VsZWN0aW9uIG9mIGJhc2UgYW5kIHNpemUgYXJlIGFzIGJlbG93OjxiciAvPiAgICAgaWYgY2FsbGVyID09IE5PTlNFQ1VSRTxiciAvPiAgICAgICAgICB2YWxpZF9iYXNlID0gbnNwZV9tbWlvX3JlZ2lvbl9iYXNlOzxiciAvPiAgICAgICAgICBpbnZhbGlkX3NpemUgPSAoZHJpdmVyX21taW9fcmVnaW9uX2Jhc2UgLSBuc3BlX21taW9fcmVnaW9uX2Jhc2UgKyAxKTs8YnIgLz48YnIgLz4gICAgIGVsc2U8YnIgLz48YnIgLz4gICAgICAgIGlmIChJU09MQVRJT05fTEVWRUwgPiAxKTxiciAvPiAgICAgICAgICB2YWxpZF9iYXNlID0gY2xpZW50X21taW9fcmVnaW9uX2Jhc2U7PGJyIC8+ICAgICAgICAgIGludmFsaWRfc2l6ZSA9IChkcml2ZXJfbW1pb19yZWdpb25fYmFzZSAtIGNsaWVudF9tbWlvX3JlZ2lvbl9iYXNlICsgMSk7PGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDU0ICAgICAgICB8IHBzYV9jYWxsIGRvZXMgbm90IHJldHVybiBpZiBwc2Ffb3V0dmVjLmJhc2UgaXMgbm90IHdyaXRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2NhbGxfd2l0aF9ub3Rfd3JpdGFibGVfb3V0dmVjX2Jhc2UoKSAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY2FsbCB3aXRoIG5vdCB3cml0YWJsZSAoZnVuY3Rpb24gYWRkcmVzcyAtIGNvZGUgbWVtb3J5KSBwc2Ffb3V0dmVjLmJhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA1NSAgICAgICAgfCBwc2FfcmVhZCBkb2VzIG5vdCByZXR1cm4gaWYgIHRoZSBtZW1vcnkgcmVmZXJlbmNlIGZvciBidWZmZXIgaXMgaW52YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9yZWFkX3dpdGhfaW52YWxpZF9idWZmZXJfYWRkcigpICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3JlYWQgd2l0aCBpbnZhbGlkIGJ1ZmZlciBhZGRyLjxiciAvPlNlbGVjdGlvbiBvZiBidWZmZXIgYWRkcmVzcyBpcyBhcyBiZWxvdzo8YnIgLz5pZiAoSVNPTEFUSU9OX0xFVkVMID4gMSk8YnIgLz4gICAgICAgICAgYnVmZmVyID0gZHJpdmVyX21taW9fcmVnaW9uX2Jhc2U7PGJyIC8+ZWxzZSA8YnIgLz4gICAgICAgICBidWZmZXIgPSBOVUxMOyA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9yZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNTYgICAgICAgIHwgcHNhX3JlYWQgZG9lcyBub3QgcmV0dXJuIGlmICB0aGUgbWVtb3J5IHJlZmVyZW5jZSBmb3IgYnVmZmVyIGlzIG5vdCB3cml0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVhZF93aXRoX25vdF93cml0YWJsZV9idWZmZXJfYWRkcigpICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZWFkIHdpdGggbm90IHdyaXRhYmxlIChmdW5jdGlvbiBhZGRyZXNzLSBjb2RlIG1lbW9yeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDU3ICAgICAgICB8IHBzYV93cml0ZSBkb2VzIG5vdCByZXR1cm4gaWYgdGhlIG1lbW9yeSByZWZlcmVuY2UgZm9yIGJ1ZmZlciBpcyBpbnZhbGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3dyaXRlX3dpdGhfaW52YWxpZF9idWZmZXJfYWRkcigpICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffd3JpdGUgd2l0aCBpbnZhbGlkIGJ1ZmZlciBhZGRyLjxiciAvPiBTZWxlY3Rpb24gb2YgYnVmZmVyIGFkZHJlc3MgaXMgYXMgYmVsb3c6PGJyIC8+aWYgKElTT0xBVElPTl9MRVZFTCA+IDEpPGJyIC8+ICAgICAgICAgIGJ1ZmZlciA9IGRyaXZlcl9tbWlvX3JlZ2lvbl9iYXNlOzxiciAvPmVsc2UgPGJyIC8+ICAgICAgICAgYnVmZmVyID0gTlVMTDsgPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA1OCAgICAgICAgfCAxLiBwc2Ffbm90aWZ5KCkgaXMgdXNlZCB0byBhc3luY2hyb25vdXNseSB3YWtlIHVwIGFub3RoZXIgU2VjdXJlIFBhcnRpdGlvbi4gVGhlIHJlY2VpdmluZyBwYXJ0aXRpb24gdXNlcyBwc2Ffd2FpdCgpIHRvIGRldGVjdCwgb3Igd2FpdCBmb3IsIGFzc2VydGlvbiBvZiBpdHMgUFNBX0RPT1JCRUxMIHNpZ25hbC4gVGhlIHZhbHVlIG9mIHBhcnRpdGlvbl9pZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFzIHRoZSB0YXJnZXQgb2Ygbm90aWZpY2F0aW9uIG11c3QgYmUgYSBTZWN1cmUgUGFydGl0aW9uLiA8YnIgLz4yLiBwc2FfY2xlYXIoKSBjbGVhcnMgdGhlIFBTQV9ET09SQkVMTCBzaWduYWwuICA8YnIgLz4zLiBwc2FfY2xlYXIoKTogVGhlIHRhcmdldCBQYXJ0aXRpb24gZG9vcmJlbGwgd2lsbCByZW1haW4gYXNzZXJ0ZWQgdW50aWwgaXQgY2FsbHMgcHNhX2NsZWFyKCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9kb29yYmVsbF9zaWduYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENsaWVudCBjb25uZWN0cyB0byBSb1Qgc2VydmljZS4gPGJyIC8+Mi4gUm9UIHNlcnZpY2VzIGV4ZWN1dGVzIGFzc2VydHMgUFNBX0RPT1JCRUxMIHNpbmdhbCBiYWNrIHRvIGNsaWVudCBhZnRlciBhY2NlcHRpbmcgdGhlIGNvbm5lY3Rpb24uPGJyIC8+My4gQ2xpZW50IGNoZWNrcyB0aGUgZGVsaXZlcnkgb2YgUFNBX0RPT1JCRUxMIHNpbmdhbCB1c2luZyBwc2Ffd2FpdCgpLjxiciAvPjQuIENsaWVudCBjbGVhcnMgdGhlIGRvb3JiZWxsIGFuZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24uIDxiciAvPjUuIFJvVCBzZXJ2aWNlIHJlY2VpdmVzIHRoZSBjbG9zaW5nIGNvbm5lY3Rpb24gcmVxdWVzdC48YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9ub3RpZnkscHNhX3dhaXQscHNhX2NsZWFyICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNTkgICAgICAgIHwgcHNhX25vdGlmeSBkb2VzIG5vdCByZXR1cm4gaWYgUGFydGl0aW9uIElEIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBTZWN1cmUgUGFydGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffbm90aWZ5X3dpdGhfbmVnX3BhcnRfaWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9ub3RpZnkgd2l0aCBuZWdhdGl2ZSBwYXJ0aXRpb24gaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffbm90aWZ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDYwICAgICAgICB8IHBzYV9ub3RpZnkgZG9lcyBub3QgcmV0dXJuIGlmIFBhcnRpdGlvbiBJRCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgU2VjdXJlIFBhcnRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX25vdGlmeV93aXRoX2ludmFsaWRfcG9zX3BhcnRfaWQoKSAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffbm90aWZ5IHdpdGggcG9zaXRpdmUgcGFydGl0aW9uIGlkIHdoaWNoIGRvZXMgbm90IGV4aXN0IGluIHRoZSBwbGF0Zm9ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX25vdGlmeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA2MSAgICAgICAgfCBwc2FfY2xlYXIgZG9lcyBub3QgcmV0dXJuIGlmIFRoZSBTZWN1cmUgUGFydGl0aW9uv3MgZG9vcmJlbGwgc2lnbmFsIGlzIG5vdCBjdXJyZW50bHkgYXNzZXJ0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jbGVhcl9hdF91bmFzc2VydGVkX2Rvb3JiZWxsX3NpZygpICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2NsZWFyIHdoZW4gZG9vcmJlbGwgc2lnbmFsIGlzIG5vdCBhc3NlcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jbGVhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNjIgICAgICAgIHwgcHNhX3dhaXQoKSBkb2VzIG5vdCByZXR1cm4gc2lnbmFsX21hc2sgZG9lcyBub3QgaW5jbHVkZSBhbnkgYXNzaWduZWQgc2lnbmFscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl90ZXN0X3BzYV93YWl0X3dpdGhfdW5hc3NpZ25lZF9zaWduYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV93YWl0IHdpdGggc2lnbmFsIG1hc2sgdGhhdCBkb2Vzbid0IGluY2x1ZGUgYW55IGFzc2lnbmVkIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd2FpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDYzICAgICAgICB8IHBzYV93YWl0KCkgcmV0dXJucyB0aGUgU2VjdXJlIFBhcnRpdGlvbiBpbnRlcnJ1cHQgc2lnbmFscyB0aGF0IGhhdmUgYmVlbiBhc3NlcnRlZCBmcm9tIHRoZSBzdWJzZXQgb2Ygc2lnbmFscyBpbmRpY2F0ZWQgaW4gdGhlIGJpdG1hc2sgcHJvdmlkZWQuIFRoZSBtYXNrIG11c3QgY29udGFpbiB0aGUgc2V0IG9mIHNpZ25hbHMgdGhlIGNhbGxlciBpcyBpbnRlcmVzdGVkIGluIGhhbmRsaW5nLiBTaWduYWxzIHRoYXQgYXJlIG5vdCBpbiBzaWduYWxfbWFzayBzaG91bGQgYmUgaWdub3JlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3dhaXRfc2lnbmFsX21hc2soKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gU2VsZWN0IHNpZ25hbF9tYXNrID0gICAoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcgfCBTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUcpOyA8YnIgLz4yLiBTZXJ2ZXIgcGFydGl0aW9uIHJlcXVlc3RzIHRoZSBjbGllbnQgcGFydGl0aW9uIHRvIG1ha2UgY29ubmVjdGlvbiB1c2luZyAgc2lkPVNFUlZFUl9TRUNVUkVfQ09OTkVDVF9PTkxZX1NJRC4gIFRoaXMgY29ubmVjdGlvbiByZXF1ZXN0IGFjdCBhcyBpcnJpdGF0b3IgdG8gcHNhX3dhaXQoc2lnbmFsX21hc2spIGNhbGwgYW5kIGl0IGlzIHVzZWQgdG8gY292ZXIgdGhlIHJ1bGUgLSBTaWduYWxzIHRoYXQgYXJlIG5vdCBpbiBzaWduYWxfbWFzayBzaG91bGQgYmUgaWdub3JlZCBieSBwc2Ffd2FpdC48YnIgLz4zLiBOU1BFIGNsaWVudCBjb25uZWN0cyB0byBhIHNlcnZlciBwYXJ0aXRpb24gdXNpbmcgU0lEIHdob3NlIHNpZ25hbCBhcmUgcGFydCBvZiBzaWduYWxfbWFzazxiciAvPjQuIFNlcnZlciBwYXJ0aXRpb24gZXhlY3V0ZXMgcHNhX3dhaXQgd2l0aCBuZWNlc3Nhcnkgc2lnbmFsX21hc2suIFJvVCBzZXJ2aWNlIGNoZWNrcyB0aGF0IHJldHVybmVkIHNpZ25hbCB2YWx1ZSBpcyBzdWJzZXQgb2Ygc2lnbmFscyBpbmRpY2F0ZWQgaW4gdGhlIHNpZ25hbF9tYXNrIDxiciAvPiA1LiBBdCB0aGUgZW5kLCBzZXJ2ZXIgcGFydGl0aW9uIGNvbXBsZXRlcyB0aGUgc3RhcnZlZCAoaXJyaXRhdG9yKSBjb25uZWN0aW9uIHJlcXVlc3Qgb2YgU0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lELiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3dhaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA2NCAgICAgICAgfCBwc2FfZW9pIGRvZXMgbm90IHJldHVybiBpZiBpcnFfc2lnbmFsIGlzIG5vdCBhbiBpbnRlcnJ1cHQgc2lnbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRyaXZlcl90ZXN0X3BzYV9lb2lfd2l0aF9ub25faW50cl9zaWduYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgdG8gcHNhX2VvaSB3aXRoIG5vbi1pbnRlcnJ1cHQgc2lnbmFsKFBTQV9ET09SQkVMTCkuPGJyIC8+IE5vdGU6IFRoZSBpbnRlcnJ1cHQgcmVsYXRlZCB0ZXN0IGNoZWNrIGlzIGNhcHR1cmVkIGluIGRyaXZlcl9wYXJ0aXRpb24uYyBhcyB0aGlzIGlzIHRoZSBvbmx5IHBhcnRpdGlvbiBpbiB0ZXN0IHN1aXRlIHRoYXQgaG9sZHMgdGhlIGludGVycnVwdCBsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9lb2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNjUgICAgICAgIHwgcHNhX2VvaSBkb2VzIG5vdCByZXR1cm4gaWYgaXJxX3NpZ25hbCBpcyBub3QgY3VycmVudGx5IGFzc2VydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkcml2ZXJfdGVzdF9wc2FfZW9pX3dpdGhfdW5hc3NlcnRlZF9zaWduYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHRvIHBzYV9lb2kgd2l0aCBpbnRlcnJ1cHQgc2lnbmFsIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgYXNzZXJ0ZWQuPGJyIC8+IE5vdGU6IFRoZSBpbnRlcnJ1cHQgcmVsYXRlZCB0ZXN0IGNoZWNrIGlzIGNhcHR1cmVkIGluIGRyaXZlcl9wYXJ0aXRpb24uYyBhcyB0aGlzIGlzIHRoZSBvbmx5IHBhcnRpdGlvbiBpbiB0ZXN0IHN1aXRlIHRoYXQgaG9sZHMgdGhlIGludGVycnVwdCBsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfZW9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDY2ICAgICAgICB8IHBzYV9lb2kgZG9lcyBub3QgcmV0dXJuIGlmIGlycV9zaWduYWwgaW5kaWNhdGVzIG1vcmUgdGhhbiBvbmUgc2lnbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZHJpdmVyX3Rlc3RfcHNhX2VvaV93aXRoX211bHRpcGxlX3NpZ25hbHMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCB0byBwc2FfZW9pIHdpdGggaXJxX3NpZ25hbCBwcm92aWRlZCB3aXRoIG11bHRpcGxlIHNpZ25hbHMuPGJyIC8+IE5vdGU6IFRoZSBpbnRlcnJ1cHQgcmVsYXRlZCB0ZXN0IGNoZWNrIGlzIGNhcHR1cmVkIGluIGRyaXZlcl9wYXJ0aXRpb24uYyBhcyB0aGlzIGlzIHRoZSBvbmx5IHBhcnRpdGlvbiBpbiB0ZXN0IHN1aXRlIHRoYXQgaG9sZHMgdGhlIGludGVycnVwdCBsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2VvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgfCAxLiBwc2Ffd2FpdCgpIHJldHVybnMgdGhlIFNlY3VyZSBQYXJ0aXRpb24gaW50ZXJydXB0IHNpZ25hbHMgdGhhdCBoYXZlIGJlZW4gYXNzZXJ0ZWQgZnJvbSB0aGUgc3Vic2V0IG9mIHNpZ25hbHMgaW5kaWNhdGVkIGluIHRoZSBiaXRtYXNrIHByb3ZpZGVkLiAocHNhX3dhaXQgQVBJIHRvIHJlY2lldmUgaW50ZXJydXB0IHNpZ25hbCkgPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuIHBzYV9lb2koKTpJbmZvcm1zIHRoZSBTUE0gdGhhdCBhbiBpbnRlcnJ1cHQgaGFzIGJlZW4gaGFuZGxlZCAoZW5kIG9mIGludGVycnVwdCkuIFRoaXMgd2lsbCByZS1lbmFibGUgdGhlIGludGVycnVwdCBsaW5lLiA8YnIgLz4zLnBzYV9lb2koKTogQSBzaWduYWwgcmVtYWlucyBhY3RpdmUgdW50aWwgaXQgaXMgcHJvY2Vzc2VkIGJ5IHBzYV9lb2kgPGJyIC8+NC4gTWFuaWZlc3QtIGlycXMgKG9wdGlvbmFsLCB1bmlxdWUpVGhpcyBhdHRyaWJ1dGUgaXMgYSBsaXN0IG9mIElSUSBsaW5lcyB3aGljaCBhcmUgYXNzaWduZWQgdG8gdGhlIFNlY3VyZSBQYXJ0aXRpb24uQSBTZWN1cmUgUGFydGl0aW9uIGFsd2F5cyBoYXMgZXhjbHVzaXZlIGFjY2VzcyB0byBhbiBhc3NpZ25lZCBJUlEuIFNlY3VyZSBQYXJ0aXRpb25zIGFyZSBub3QgYWxsb3dlZCB0byBzaGFyZSBJUlFzIHdpdGggb3RoZXIgU2VjdXJlIFBhcnRpdGlvbnMuRWFjaCBJUlEgc3BlY2lmaWVkIG11c3QgcHJvdmlkZSBhIHNpZ25hbCBmaWVsZC4gVGhpcyBmaWVsZCBjb250YWlucyBhIHN5bWJvbGljIG5hbWUgZm9yIHRoZSBzaWduYWwsIHVzZWQgYnkgdGhlIFNQTSB0byBpbmRpY2F0ZSB3aGVuIHRoZSBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuIEVhY2ggSVJRIGxpbmUgaXMgZGVjbGFyZWQgYXMgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmc6vyBsaW5lX251bTogQSB2YWxpZCBJUlEgbnVtYmVyIGZvciB0aGUgcGxhdGZvcm0uvyBsaW5lX25hbWU6IEEgbmFtZWQgSVJRLCByZXByZXNlbnRlZCBieSBhIHN0cmluZyBpZGVudGlmaWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoZSB0ZXN0IGZvciB0aGlzIHNjZW5hcmlvIHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gZnV0dXJlIHJlbGVhc2UgZm9yIFBTQSBUZXN0IHN1aXRlLiBUZXN0IExpbWl0YXRpb246PGJyIC8+MS4gUnVsZXMgYXJvdW5kIHNoYXJpbmcgb2YgaXJxIGxpbmVzIGNhbid0IGJlIHRlc3RlZCBhcyBzcGVjaWZpeWluZyBpdCBjYW4gcmVzdWx0IGludG8gYnVpbGQgZXJyb3IuPGJyIC8+Mi4gVGVzdCBzdWl0ZSBwYXJ0aXRpb24gbWFuaWZlc3RzIGFyZSByZWx5IG9uIG9ubHkgbGluZV9udW0gZm9yIHNwZWNpZnlpbmcgaXJxIGxpbmUgbnVtYmVyIGFzIGxpbmVfbmFtZSBpcyBzdWJqZWN0IHRvIHJlc29sdmVkIGluIEltcGxlbWVudGF0aW9uIGRlZmluZWQgbWFubmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV93YWl0LHBzYV9lb2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgIHwgT25seSBDb2RlIGlzIGV4ZWN1dGFibGUgaW4gc2VjdXJlIHBhcnRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGUgdGVzdCBmb3IgdGhpcyBzY2VuYXJpbyB3aWxsIGJlIGltcGxlbWVudGVkIGluIGZ1dHVyZSByZWxlYXNlIGZvciBQU0EgVGVzdCBzdWl0ZS4gQ2hlY2tzOjxiciAvPjEuIEV4ZWN1dGUgaW5zdHJ1Y3Rpb24gZnJvbSB3cml0YWJsZSBtZW1vcnk8YnIgLz4yLiBFeGVjdXRlIGluc3RydWN0aW9uIGZyb20gcmVhZC1vbmx5IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICB8IE9ubHkgUHJpdmF0ZSBkYXRhIGlzIHdyaXRhYmxlIGluIHNlY3VyZSBwYXJ0aXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhlIHRlc3QgZm9yIHRoaXMgc2NlbmFyaW8gd2lsbCBiZSBpbXBsZW1lbnRlZCBpbiBmdXR1cmUgcmVsZWFzZSBmb3IgUFNBIFRlc3Qgc3VpdGUuIENoZWNrczo8YnIgLz4xLiBXcml0ZSB0byBjb2RlIHNwYWNlPGJyIC8+Mi4gV3JpdGUgdG8gY29uc3RhbnQgZGF0YSBzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgfCBJc29sYXRpb24gTGV2ZWwtMSBydWxlczo8YnIgLz5JMzogSWYgZG9tYWluIEEgbmVlZHMgcHJvdGVjdGlvbiBmcm9tIGRvbWFpbiBCLCB0aGVuIFByaXZhdGUgZGF0YSBpbiBkb21haW4gQSBjYW5ub3QgYmUgYWNjZXNzZWQgYnkgZG9tYWluIEIuIEZyb20gQiBhY2Nlc3MgYmVsb3cgYXNzZXJ0cyBvZiBBOjxiciAvPi0gVmFyaWFibGVzPGJyIC8+LSBFeGVjdXRpb24gc3RhY2tzPGJyIC8+LSBBbGxvY2F0aW9uIGhlYXA8YnIgLz4tIE1lbW9yeS1tYXBwZWQgSS9PIHJlZ2lvbnM8YnIgLz48YnIgLz5XaGVyZSwgQSAmIEIgY29tYmluYXRpb24gYXJlOjxiciAvPkE9QXBwbGljYXRpb24gUm9UICYgQj1OU1BFPGJyIC8+QT1QU0EgUm9UICYgQj1OU1BFPGJyIC8+QT1TUE0gJiBCPU5TUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoZSB0ZXN0IGZvciB0aGlzIHNjZW5hcmlvIHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gZnV0dXJlIHJlbGVhc2UgZm9yIFBTQSBUZXN0IHN1aXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgIHwgSXNvbGF0aW9uIExldmVsLTIgcnVsZXMtIEluIGFkZGl0aW9uIHRvIHRoZSBMZXZlbCAxIHJlcXVpcmVtZW50cywgTGV2ZWwgMiBmaXJtd2FyZSBpc29sYXRpb24gbXVzdCBmb2xsb3cgYmVsb3cgcnVsZTo8YnIgLz5JMzogSWYgZG9tYWluIEEgbmVlZHMgcHJvdGVjdGlvbiBmcm9tIGRvbWFpbiBCLCB0aGVuIFByaXZhdGUgZGF0YSBpbiBkb21haW4gQSBjYW5ub3QgYmUgYWNjZXNzZWQgYnkgZG9tYWluIEIuIEZyb20gQiBhY2Nlc3MgYmVsb3cgYXNzZXJ0cyBvZiBBOjxiciAvPi0gVmFyaWFibGVzPGJyIC8+LSBFeGVjdXRpb24gc3RhY2tzPGJyIC8+LSBBbGxvY2F0aW9uIGhlYXA8YnIgLz4tIE1lbW9yeS1tYXBwZWQgSS9PIHJlZ2lvbnM8YnIgLz48YnIgLz5XaGVyZSwgQSAmIEIgY29tYmluYXRpb24gYXJlOjxiciAvPkE9UFNBIFJvVCBwYXJ0aXRpb24gJiBCPUFwcGxpY2F0aW9uIFJvVCBwYXJ0aXRpb248YnIgLz5BPVNQTSAmIEI9QXBwbGljYXRpb24gUm9UIHBhcnRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGUgdGVzdCBmb3IgdGhpcyBzY2VuYXJpbyB3aWxsIGJlIGltcGxlbWVudGVkIGluIGZ1dHVyZSByZWxlYXNlIGZvciBQU0EgVGVzdCBzdWl0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICB8IElzb2xhdGlvbiBMZXZlbC0zIHJ1bGVzLSBJbiBhZGRpdGlvbiB0byB0aGUgTGV2ZWwgMiByZXF1aXJlbWVudHMsIExldmVsIDMgZmlybXdhcmUgaXNvbGF0aW9uIG11c3QgZm9sbG93IGJlbG93IHJ1bGU6PGJyIC8+STM6IElmIGRvbWFpbiBBIG5lZWRzIHByb3RlY3Rpb24gZnJvbSBkb21haW4gQiwgdGhlbiBQcml2YXRlIGRhdGEgaW4gZG9tYWluIEEgY2Fubm90IGJlIGFjY2Vzc2VkIGJ5IGRvbWFpbiBCLiBGcm9tIEIgYWNjZXNzIGJlbG93IGFzc2VydHMgb2YgQTo8YnIgLz4tIFZhcmlhYmxlczxiciAvPi0gRXhlY3V0aW9uIHN0YWNrczxiciAvPi0gQWxsb2NhdGlvbiBoZWFwPGJyIC8+LSBNZW1vcnktbWFwcGVkIEkvTyByZWdpb25zPGJyIC8+PGJyIC8+V2hlcmUsIEEgJiBCIGNvbWJpbmF0aW9uIGFyZTo8YnIgLz5BPVNlY3VyZSBQYXJ0aXRpb24gJiBCPSBPdGhlciBTZWN1cmUgUGFydGl0aW9uPGJyIC8+QT1TUE0gJiBCPVNlY3VyZSBQYXJ0aXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhlIHRlc3QgZm9yIHRoaXMgc2NlbmFyaW8gd2lsbCBiZSBpbXBsZW1lbnRlZCBpbiBmdXR1cmUgcmVsZWFzZSBmb3IgUFNBIFRlc3Qgc3VpdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgfCBBIFNlY3VyZSBQYXJ0aXRpb24gaXMgZ3VhcmFudGVlZCB0byBiZSBhYmxlIHRvIHJlYWQgYW5kIHdyaXRlIGl0cyBwcml2YXRlIGhlYXAgcmVnaW9ucy48YnIgLz5NYW5pZmVzdCBQYXJhbWV0ZXItIGhlYXBfc2l6ZS4gUHJvcGVydGllczogT3B0aW9uYWwuVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSBTZWN1cmUgUGFydGl0aW9uv3MgaGVhcCBzaXplIGluIGJ5dGVzLlRoZSBzaXplIHZhbHVlIGlzIHJlcHJlc2VudGVkIGVpdGhlciBhcyBhIHBvc2l0aXZlIGludGVnZXIgb3IgYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmcuSWYgdGhpcyBmaWVsZCBpcyBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0IHRoZW4gdGhlIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuIElmIHRoaXMgZmllbGQgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgbWFuaWZlc3QgdGhlbiB0aGUgU1BNIGNhbiBhc3N1bWUgdGhlIHNpemUgaXMgMC5JZiB0aGUgZnJhbWV3b3JrIGRvZXMgbm90IGltcGxlbWVudCB0aGUgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiBBUEksIHRoZW4gYSBtYW5pZmVzdCB3aGljaCBzcGVjaWZpZXMgYSBoZWFwX3NpemUgbXVzdCBwcm9kdWNlIGEgYnVpbGQgZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoZSB0ZXN0IGZvciB0aGlzIHNjZW5hcmlvIHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gZnV0dXJlIHJlbGVhc2UgZm9yIFBTQSBUZXN0IHN1aXRlLiBDaGVjayB0aGF0IHNwZWNpZmllZCBoZWFwIG1lbW9yeSAgaXMgd3JpdGFibGUgdXNpbmcgbWFsbG9jIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBOT19FWFBMSUNJVF9URVNUIHwgQSBTZWN1cmUgUGFydGl0aW9uIGlzIGd1YXJhbnRlZWQgdG8gYmUgYWJsZSB0byAgcmVhZCBhbmQgd3JpdGUgaXRzIHByaXZhdGUgc3RhY2suIDxiciAvPk1hbmlmZXN0IFBhcmFtZXRlci0gc3RhY2tfc2l6ZSAocmVxdWlyZWQpIDxiciAvPlBhcnRpdGlvbidzIHN0YWNrIHNpemUgaW4gYnl0ZXMuIFRoZSBzaXplIHZhbHVlIG11c3QgYmUgcmVwcmVzZW50ZWQgZWl0aGVyIGFzIGEgcG9zaXRpdmUgaW50ZWdlciBvciBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyBleHBsaWNpdCB0ZXN0IHdyaXR0ZW4gdG8gY292ZXIgdGhpcyBydWxlLiBQU0EgSVBDIHRlc3RzIG1hbmlmZXN0cyBhcmUgcHJvdmlkZWQgd2l0aCB0ZXN0cyBwYXJ0aXRpb24gcmVxdWlyZWQgc3RhY2tfc2l6ZS4gIEEgc3VjY2Vzc2Z1bCBleGVjdXRpb24gb2YgdGVzdHMgcGFydGl0aW9uIGNvZGUgd2l0aG91dCBzdGFjayBhY2Nlc3MgcmVsYXRlZCBmYXVsdHMsIGluZGlyZWN0bHkgdmVyaWZ5IHRoaXMgZmllbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgTk9fRVhQTElDSVRfVEVTVCB8IG1taW9fcmVnaW9ucyAob3B0aW9uYWwsIHVuaXF1ZSk6IDxiciAvPkxpc3Qgb2YgbWVtb3J5LW1hcHBlZCBJL08gcmVnaW9uIG9iamVjdHMgd2hpY2ggdGhlIFNlY3VyZSBQYXJ0aXRpb24gbmVlZHMgYWNjZXNzIHRvLiAgQSBTZWN1cmUgUGFydGl0aW9uIGFsd2F5cyBoYXMgZXhjbHVzaXZlIGFjY2VzcyB0byBhbiBNTUlPIHJlZ2lvbi4gU2VjdXJlIFBhcnRpdGlvbnMgYXJlIG5vdCBwZXJtaXR0ZWQgdG8gc2hhcmUgTU1JTyByZWdpb25zIHdpdGggb3RoZXIgU2VjdXJlIFBhcnRpdGlvbnMuPGJyIC8+QW4gTU1JTyByZWdpb24gY2FuIGJlIGRlZmluZWQgZWl0aGVyIGFzIGE6PGJyIC8+bnVtYmVyZWRfcmVnaW9uPGJyIC8+bmFtZWRfcmVnaW9uPGJyIC8+QSBudW1iZXJlZCByZWdpb24gY29uc2lzdHMgb2YgYSBiYXNlIGFkZHJlc3MgYW5kIGEgc2l6ZS4gVGhlIHNpemUgbXVzdCBiZSByZXByZXNlbnRlZCBlaXRoZXIgYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nLiBUaGUgYmFzZSBhZGRyZXNzIG11c3QgYmUgcmVwcmVzZW50ZWQgYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmcuPGJyIC8+TU1JTyByZWdpb25zIG11c3Qgbm90IG92ZXJsYXAuPGJyIC8+QW4gTU1JTyByZWdpb24gbXVzdCBpbmNsdWRlIGEgcGVybWlzc2lvbiBhdHRyaWJ1dGUuIFRoZSBmb2xsb3dpbmcgcGVybWlzc2lvbnMgYXJlIGF2YWlsYWJsZTo8YnIgLz5SRUFELU9OTFk8YnIgLz5SRUFELVdSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29tbWVudHM6PGJyIC8+MS4gUFNBIElQQyB0ZXN0cyBkZXZpY2UgZHJpdmVyIHBhcnRpdGlvbiBtYW5pZmVzdHMgYXJlIHByb3ZpZGVkIHdpdGggdGhlc2UgZmllbGRzLiBBIHN1Y2Nlc3NmdWwgY29tcGlsYXRpb24gYW5kIHJ1biBvZiBkZXZpY2UgZHJpdmVyIHBhcnRpdGlvbiBjb2RlIGluZGlyZWN0bHkgdmVyaWZ5IHRoaXMgZmllbGQuIDxiciAgLz4yLiBSdWxlcyBhcm91bmQgc2hhcmluZyBvZiBNTUlPIHJlZ2lvbnMgaXMgY292ZXJlZCBhcyBwYXJ0IG9mIGlzb2xhdGlvbiB0ZXN0cy48YnIgIC8+My4gUnVsZXMgYXJvdW5kIG92ZXJsYXBwaW5nIG9mIE1NSU8gcmVnaW9ucyBjYW4ndCBiZSB0ZXN0ZWQgYXMgc3BlY2lmeWluZyB0aGF0IGludG8gbWFuaWZlc3QgcmVzdWx0cyBpbnRvIGNvbXBpbGF0aW9uIGZhaWwuIDxiciAvPjQuIFRlc3Qgc3VpdGUgcGFydGl0aW9uIG1hbmlmZXN0cyBhcmUgcmVseSBvbiBudW1iZXJlZF9yZWdpb24gb25seSBhcyBuYW1lZF9yZWdpb24gaXMgc3ViamVjdCB0byByZXNvbHZlZCBpbiBJbXBsZW1lbnRhdGlvbiBkZWZpbmVkIG1hbm5lci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IE5PX0VYUExJQ0lUX1RFU1QgfCBNYW5pZmVzdCBQYXJhbWV0ZXIgLSBpZCAocmVxdWlyZWQsIHVuaXF1ZSk6QSBTZWN1cmUgUGFydGl0aW9uIElEIG11c3QgYmUgYSBub24temVybyBwb3NpdGl2ZSAzMi1iaXQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQSBJUEMgdGVzdHMgcGFydGl0aW9ucyBhcmUgcHJvdmlkZWQgd2l0aCB1bmlxdWUgUGFydGl0aW9uIElEICh3aGljaCBpcyBub24temVybyBwb3NpdGl2ZSkgYW5kIG5hbWUgZmllbGQgY29tcGxpYW50IHRvIG1hbmlmZXN0IHJ1bGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBOT19FWFBMSUNJVF9URVNUIHwgTWFuaWZlc3QgUGFyYW1ldGVyLSAgdHlwZSAocmVxdWlyZWQpIDxiciAvPldoZXRoZXIgdGhlIFBhcnRpdGlvbiBpcyBhIHBhcnQgb2YgdGhlIFBTQSBSb290IG9mIFRydXN0IFNlcnZpY2VzIG9yIGlzIHBhcnQgb2YgdGhlIEFwcGxpY2F0aW9uIFJvb3Qgb2YgVHJ1c3QgU2VydmljZXMuVHlwZSBtdXN0IGJlIGFzc2lnbmVkIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczotIEFQUExJQ0FUSU9OLVJPVC0gUFNBLVJPVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0EgSVBDIHRlc3RzIHBhcnRpdGlvbiBmaWxlcyBhcmUgcHJvdmlkZWQgd2l0aCB0aGVzZSBmaWVsZHMuIEFjY2VzcyBwZXJtaXNzaW9uIGJlaGF2aW91ciByZWxhdGVkIHRvIHRoZXNlIGZpZWxkcyB3aWxsIGJlIHZlcmlmaWVkIGFzIHBhcnQgb2YgdGVzdHMgY292ZXJpbmcgaXNvbGF0aW9uIGxldmVsIHJ1bGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgTk9fRVhQTElDSVRfVEVTVCB8IE1hbmlmZXN0IFBhcmFtZXRlciAtIGRlc2NyaXB0aW9uIChvcHRpb25hbCkgPGJyIC8+VGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgYSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBhbmQgY29tbWVudHMgZm9yIHRoZSBTZWN1cmUgUGFydGl0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGVzdCBzdWl0ZSBtYW5pZmVzdHMgYXJlIHByb3ZpZGVkIHdpdGggdGhlc2UgZmllbGQgd2l0aCBhZGhlcmUgdG8gbWFuaWZlc3QgcnVsZXMuIE1hbmlmZXN0IGJ1aWxkIHRvb2wgcGFyc2VyIG11c3QgcGFyc2UgdGhpcyBmaWVsZCB3aXRob3V0IGFueSBjb21waWxhdGlvbiBmYWlsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IE5PX0VYUExJQ0lUX1RFU1QgfCBNYW5pZmVzdCBQYXJhbWV0ZXIgLWVudHJ5X3BvaW50IChyZXF1aXJlZCwgdW5pcXVlKSA8YnIgLz5UaGUgUGFydGl0aW9uIGVudHJ5IHBvaW50IGluIHRoZSBmb3JtIG9mIGFuIEMgZnVuY3Rpb24gc3ltYm9sLiBBIHNpbmdsZSBlbnRyeSBwb2ludCBtdXN0IGJlIHByb3ZpZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vIGV4cGxpY2l0IHRlc3Qgd3JpdHRlbiB0byBjb3ZlciB0aGlzIHJ1bGUuIFRlc3Qgc3VpdGUgbWFuaWZlc3RzIGFyZSBwcm92aWRlZCB3aXRoIHRlc3RzIHBhcnRpdGlvbiBlbnRyeV9wb2ludC4gIEEgc3VjY2Vzc2Z1bCBsYXVuY2ggYW5kIHJ1biBvZiB0ZXN0cyBwYXJ0aXRpb24gY29kZSBpbmRpcmVjdGx5IHZlcmlmeSB0aGlzIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBOT19FWFBMSUNJVF9URVNUIHwgTWFuaWZlc3QgUGFyYW1ldGVyLSBsaW5rZXJfcGF0dGVybihSZXF1aXJlZCkgPGJyIC8+VGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgdGhlIG1pbmltdW0gaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gbGluayBhIFNlY3VyZSBQYXJ0aXRpb26/cyBjb21waWxlZCBzdGF0aWMgb2JqZWN0cy4gSXQgY29udGFpbnMgYSBtYW5kYXRvcnkgc3ViIGF0dHJpYnV0ZSBjYWxsZWQgb2JqZWN0X2xpc3QuVGhlIG9iamVjdF9saXN0IGlzIGFuIGV4cGxpY2l0IGxpc3Qgb2YgdGhlIGV4cGVjdGVkIGJpbmFyeSBvYmplY3RzIG9mIGEgU2VjdXJlIFBhcnRpdGlvbiBvbmNlIGl0IGlzIGNvbXBpbGVkLiBGb3IgZXhhbXBsZSwgdGhpcyBsaXN0IG1heSBjb250YWluIHRoZSBuYW1lcyBvZiB0aGUgbWFpbiBlbnRyeS1wb2ludCBiaW5hcnkgYW5kIGFueSBvdGhlciBzdGF0aWMgbGlicmFyeSBvYmplY3RzIHRoYXQgdGhlIFNlY3VyZSBQYXJ0aXRpb24gY29udGFpbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyBleHBsaWNpdCB0ZXN0IHdyaXR0ZW4gdG8gY292ZXIgdGhpcyBydWxlLiBUZXN0IHN1aXRlIG1hbmlmZXN0cyBhcmUgcHJvdmlkZWQgd2l0aCBsaW5rZXJfcGF0dGVybiBmaWxsZWQgd2l0aCByZXF1aXJlZCB0ZXN0cyBwYXJ0aXRpb24gb2JqZWN0IGFyY2hpdmVzLiBBIHN1Y2Nlc3NmdWwgdXNlIG9mIHRoaXMgZmllbGQgdG8gbGF1bmNoIHRoZSBwYXJ0aXRpb25zIGFuZCBmdWxsZmlsbGluZyB0aGUgUFNBIGRlZmluZWQgaXNvbGF0aW9uIHJlcXVpcmVtZW50IHdoaWNoIGFyZSBhbHNvIGJlaW5nIHZlcmlmaWVkIGluIGlzb2xhdGlvbiB0ZXN0cywgIGluZGlyZWN0bHkgdmVyaWZ5IHRoaXMgZmllbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgTk9fRVhQTElDSVRfVEVTVCB8IFRoZSBTUE0gbXVzdCBldmVudHVhbGx5IGRlbGl2ZXIgYWxsIHNpZ25hbHMgYW5kIElQQyBtZXNzYWdlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm8gZXhwbGljaXQgdGVzdCB3cml0dGVuIHRvIGNvdmVyIHRoaXMgcnVsZS4gSG93ZXZlciBhbGwgUFNBIElQQyB0ZXN0cyBhcmUgd3JpdHRlbiB3aXRoIHRoZSBleHBlY3RhdGlvbiB0aGF0IHRoZSBTUE0gZGVsaXZlcnMgYWxsIHJlcXVlc3RlZCBzaWduYWxzIGFuZCBJUEMgbWVzc2FnZSBpbiBhIHRpbWVseSBmYXNoaW9uLiBGYWlsdXJlIHRvIHByb3ZpZGUgdGhpcyB3aWxsIHJlc3VsdCBpbiBzaW11bGF0aW9uIHRpbWUgb3V0LiAgPGJyIC8+VGhpcyBydWxlIGlzIHVuYm91bmRlZCBhbmQgY2Fubm90IGhhdmUgZnVsbCBjb3ZlcmFnZS4gSXQgaXMgZ29vZCB0byB0aGF0IHRoaW5ncyBhcmUgZGVsaXZlcmVkIGluIGEgdGltZWx5IG1hbm5lciwgaG93ZXZlciBmYWlsdXJlIHdpbGwgbm90IGJyZWFrIGNvbXBsaWFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IE5PX0VYUExJQ0lUX1RFU1QgfCBBIFNlY3VyZSBQYXJ0aXRpb24gaXMgZ3VhcmFudGVlZCB0byBiZSBhYmxlIHRvICBleGVjdXRlIGFuZCByZWFkIGl0cyBvd24gY29kZSByZWdpb25zIGFuZCByZWFkIGl0cyBvd24gcmVhZC1vbmx5IGRhdGEgcmVnaW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vIGV4cGxpY2l0IHRlc3Qgd3JpdHRlbiB0byBjb3ZlciB0aGlzIHJ1bGUuIFRoaXMgaXMgYSBtaW5pbXVtIHJlcXVpcmVtZW50IHRvIGFibGUgdG8gbGF1bmNoIGFuZCBydW4gc2VjdXJlIHBhcnRpdGlvbi4gRmFpbGluZyB0byBwcm92aWRlIHRoaXMsIHdpbGwgbm90IGJlIGFibGUgdG8gcnVuIElQQyB0ZXN0IHN1aXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBOT1RfQ09WRVJFRCAgICAgIHwgcHNhX2dldCByZXR1cm5zIFBTQV9FUlJfTk9NU0cgaWYgdGhlIFNQTSBjYW5ub3QgZGVsaXZlciBhIG1lc3NhZ2UgdG8gdGhlIFNlY3VyZSBQYXJ0aXRpb24gZm9sbG93aW5nIHRoZSBhc3NlcnRpb24gb2YgdGhlIFJvVCBTZXJ2aWNlIHNpZ25hbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGlzIHNjZW5hcmlvIGNhbm5vdCBiZSBzaW11bGF0ZWQgYXMgdGVzdCBjYW4ndCBnZW5lcmF0ZSBzdGltdWx1cyB3aGVyZSBwc2FfZ2V0KCkgQVBJIHJldHVybnMgUFNBX0VSUl9OT01TRy4gSG93ZXZlciBldmVyeSBpbnN0YW5jZXMgb2YgcHNhX2dldCgpIEFQSSBjYWxsIGluIHRlc3Qgc3VpdGUgY2hlY2tzIHRoZSBBUEkgcmV0dXJuIHZhbHVlIGFuZCByZS13YWl0cyBmb3Igc2lnbmFsIGRlbGl2ZXJ5IGlmIHJldHVybiB2YWx1ZSBpcyBQU0FfRVJSX05PTVNHLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgTk9UX0NPVkVSRUQgICAgICB8IHBzYV9jYWxsICBkb2VzIG5vdCByZXR1cm4gaWYgdGhlIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBoYW5kbGluZyBhIHJlcXVlc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhpcyBydWxlIGlzIG5vdCB2ZXJpZmllZCBiZWFjdXNlIG9mIGZvbGxvd2luZyByZWFzb25zOiA8YnIgLz4tIFRoZXJlIGlzIG5vIGNvbW1vbiBpbmZyYXN0cnVjdHVyZSB0byB0ZXN0IHRoaXMgcnVsZSBhcyB0aGlzIG5lZWRzIHR3byBPUyBzcGVjaWZpYyB0YXNrcyB3aGVyZSBvbmUgdGFzayBpbnRlcnJ1cHRlZCBkdXJpbmcgZXhlY3V0aW9uIG9mIHBzYV9jYWxsIG9yIHBzYV9jbG9zZSAgYW5kIHNlY29uZCB0YXNrIHNjaGVkdWxlZCB0byBleGVjdXRlIHBzYV9jYWxsIHVzaW5nIHNhbWUgaGFuZGxlLjxiciAvPi0gSXQgaXMgaGFyZCB0byB3cml0ZSB0ZXN0IHN0aW11bHVzIHdoZXJlIHRoaXMgcnVsZSBpcyBhbHdheXMgaGl0IGFzIGl0IGlzIGhpZ2hseSBkZXBlbmRlbnQgb2YgcGxhdGZvcm0gc29mdHdhcmUgc2NoZWR1bGluZyBwb2xpY3kuIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IE5PVF9DT1ZFUkVEICAgICAgfCBwc2FfY2xvc2UgZG9lcyBub3QgcmV0dXJuIGlmIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHkgaGFuZGxpbmcgYSByZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoaXMgcnVsZSBpcyBub3QgdmVyaWZpZWQgYmVhY3VzZSBvZiBmb2xsb3dpbmcgcmVhc29uczogPGJyIC8+LSBUaGVyZSBpcyBubyBjb21tb24gaW5mcmFzdHJ1Y3R1cmUgdG8gdGVzdCB0aGlzIHJ1bGUgYXMgdGhpcyBuZWVkcyB0d28gT1Mgc3BlY2lmaWMgdGFza3Mgd2hlcmUgb25lIHRhc2sgaW50ZXJydXB0ZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZiBwc2FfY2FsbCBvciBwc2FfY2xvc2UgIGFuZCBzZWNvbmQgdGFzayBzY2hlZHVsZWQgdG8gZXhlY3V0ZSBwc2FfY2xvc2UgdXNpbmcgc2FtZSBoYW5kbGUuPGJyIC8+LSBJdCBpcyBoYXJkIHRvIHdyaXRlIHRlc3Qgc3RpbXVsdXMgd2hlcmUgdGhpcyBydWxlIGlzIGFsd2F5cyBoaXQgYXMgaXQgaXMgaGlnaGx5IGRlcGVuZGVudCBvZiBwbGF0Zm9ybSBzb2Z0d2FyZSBzY2hlZHVsaW5nIHBvbGljeS4gPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jbG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBOT1RfQ09WRVJFRCAgICAgIHwgTWFuaWZlc3QgUGFyYW1ldGVyIC0gcHJpb3JpdHkgKHJlcXVpcmVkKSA8YnIgLz5QYXJ0aXRpb25zIG11c3QgYmUgYXNzaWduZWQgb25lIG9mIHRoZSBmb2xsb3dpbmcgcHJpb3JpdHkgZ3JvdXBzOr8gSElHSL8gTk9STUFMvyBMT1dMT1cgaXMgdGhlIGxvd2VzdCBwcmlvcml0eS4gUHJpb3JpdHkgaXMgaWdub3JlZCBieSBTUE1zIHRoYXQgZG8gbm90IGltcGxlbWVudCBhbnkgcHJpb3JpdHktYmFzZWQgc2NoZWR1bGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVc2Ugb2YgdGhlc2UgZmllbGRzIGFyZSBoaWdobHkgZGVwZW5kZW50IG9uIHR5cGUgb2YgU1BNIHNjaGVkdWxpbmcgcG9saWN5LCBoZW5jZSBjYW4ndCB0ZXN0IHRoZSBiZWhhdmlvdXMgb2YgdGhpcyBmaWVsZC4gQW5kIHRlc3Qgc3VpdGUgcGFydGl0aW9uIG1hbmlmZXN0cyBhcmUgcHJvdmlkZWQgd2l0aCBwcmlvcml0eSBmaWVsZCBlcXVhbCB0byBMT1cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgTk9UX0NPVkVSRUQgICAgICB8IFNlY3VyZSBQYXJ0aXRpb24gSURzIG11c3QgYmUgZml4ZWQgYWNyb3NzIHVwZGF0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2hlY2tpbmcgZm9yIFBhcnRpdGlvbiBJRHMgYWNyb3NzIFNQTSB1cGRhdGVzIGlzIG91dCBvZiBzY29wZSBmb3IgUFNBIElQQyB0ZXN0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAKLQotIyBMaWNlbnNlCisjIyBMaWNlbnNlCiBBcm0gUFNBIHRlc3Qgc3VpdGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgQXBhY2hlIHYyLjAgTGljZW5zZS4KIAogLS0tLS0tLS0tLS0tLS0KIAotKkNvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4qCisqQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuKgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2RvY3MvcHNhX2l0c190ZXN0bGlzdC5tZCBiL2FwaS10ZXN0cy9kb2NzL3BzYV9pdHNfdGVzdGxpc3QubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwYzNhNQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kb2NzL3BzYV9pdHNfdGVzdGxpc3QubWQKQEAgLTAsMCArMSwyMyBAQAorIyBQU0EgSW50ZXJuYWwgVHJ1c3RlZCBTdG9yYWdlIFRlc3RjYXNlIGNoZWNrbGlzdAorCisKKworfCBUZXN0ICAgICAgfCBSZXR1cm4gVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgfCBBUEkgVmVyaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGVzdCBBbGdvcml0aG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIFVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKK3wgdGVzdF9zMDAxIHwgUFNBX0lUU19FUlJPUl9LRVlfTk9UX0ZPVU5EICAgICAgICAgIHwgcHNhX2l0c19nZXQ8YnIgLz5wc2FfaXRzX2dldF9pbmZvIDxiciAvPnBzYV9pdHNfcmVtb3ZlPGJyIC8+ICAgICAgICAgICAgICAgICB8IDEuIENhbGwgZ2V0IEFQSSB3aXRoIFVJRCBmb3Igd2hpY2ggbm8gVUlEL0RhdGEgcGFpciBpcyBjcmVhdGVkPGJyIC8+Mi4gQ2FsbCBnZXRfaW5mbyBBUEkgZm9yIHdoaWNoIG5vIFVJRC9EYXRhIHBhaXIgaXMgY3JlYXRlZDxiciAvPjMuIENhbGwgcmVtb3ZlIEFQSSBmb3Igd2hpY2ggbm8gVUlEL0RhdGEgcGFpciBpcyBjcmVhdGVkPGJyIC8+NC4gU2V0IHZhbGlkICBVSUQvRGF0YSBwYWlyIHdpdGggdWlkMTxiciAvPjUuIFNldCBvbmUgbW9yZSBzZXQgb2YgVUlEL0RhdGEgcGFpciwgd2l0aCBkaWZmZXJlbnQgdWlkLCB0aGFuIHByZXZpb3VzPGJyIC8+Ni4gUmVtb3ZlIHRoZSB1aWQgb2Ygc3RlcCA0LjxiciAvPjcuIENhbGwgZ2V0IEFQSSBmb3IgIHJlbW92ZWQgVUlEL2RhdGEgcGFpcjxiciAvPjguIENhbGwgZ2V0X2luZm8gQVBJIGZvciAgcmVtb3ZlZCBVSUQvRGF0YSBwYWlyPGJyIC8+OS4gQ2FsbCByZW1vdmUgQVBJIGZvciAgcmVtb3ZlZCBVSUQvRGF0YSBwYWlyPGJyIC8+MTAuIFNldCB2YWxpZCBVSUQvRGF0YSBwYWlyPGJyIC8+MTEuIENhbGwgZ2V0IEFQSSBmb3IgZGlmZmVyZW50IHVpZCAsIHRoZW4gY3JlYXRlZDxiciAvPjEyLiBDYWxsIGdldF9pbmZvIEFQSSBmb3IgZGlmZmVyZW50IHVpZCwgdGhlbiBjcmVhdGVkPGJyIC8+MTMuIENhbGwgcmVtb3ZlIEFQSSBmb3IgZGlmZmVyZW50IHVpZCwgdGhlbiBjcmVhdGVkPGJyIC8+MTQuIFJlbW92ZSB0aGUgY3JlYXRlZCBVSUQvRGF0YSBwYWlyLjxiciAvPjE1LiByZW1vdmUgdGhlIHN0cmF5IHVpZC48YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVJRCB2YWx1ZSB1c2VkIGFyZSAxMCwxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9zMDAyIHwgUFNBX0lUU19FUlJPUl9XUklURV9PTkNFICAgICAgICAgICAgIHwgcHNhX2l0c19zZXQ8YnIgLz5wc2FfaXRzX3JlbW92ZTxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuICBTZXQgdmFsaWQgVUlEL2RhdGEgdmFsdWUgcGFpciAsIHdpdGggY3JlYXRlIGZsYWcgdmFsdWUgbm9uZS4yLiBDYWxsIGdldCBhbmQgZ2V0X2luZm8gQVBJIHRvIHZhbGlkYXRlIHRoZSBkYXRhLCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBkYXRhPGJyIC8+My4gQ2FsbCBzZXQgQVBJIGFnYWluIHdpdGggc2FtZSB1aWQgYW5kIGNyZWF0ZSBmbGFnICBQU0FfUFNfV1JJVEVfT05DRV9GTEFHPGJyIC8+NC4gQ2FsbCBnZXQgYW5kIGdldF9pbmZvIEFQSSB0byB2YWxpZGF0ZSB0aGUgZGF0YSwgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggZGF0YSBpcyBub3QgY2hhbmdlZCBhZnRlciBzZWNvbmQgc2V0IG9wZXJhdGlvbjxiciAvPjUuIHRyeSB0byByZW1vdmUgdGhlIFVJRC9kYXRhIHBhaXIuPGJyIC8+Ni4gQ3JlYXRlIG5ldyBVSUQvZGF0YSB2YWx1ZSBwYWlyLCB3aXRoIGNyZWF0ZSBmbGFnIFBTQV9QU19XUklURV9PTkNFX0ZMQUc8YnIgLz43LiBUcnkgdG8gcmVtb3ZlIHRoZSBjcmVhdGVkIFVJRC48YnIgLz44LiBDYWxsIGdldCBhbmQgZ2V0X2luZm8gQVBJIHRvIHZhbGlkYXRlIHRoZSBkYXRhLCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBkYXRhPGJyIC8+OS4gQWdhaW4gY2FsbCBTRVQgd2l0aCBzYW1lIFVJRCAsIGNyZWF0ZSBmbGFnIFBTQV9QU19XUklURV9PTkNFX0ZMQUcgYnV0IGRpZmZlcmVudCBkYXRhIGxlbmd0aDxiciAvPjEwLiBUcnkgdG8gcmVtb3ZlIHRoZSBVSUQsIFBTQV9JVFNfRVJST1JfV1JJVEVfT05DRSBlcnJvciBzaG91bGQgYmUgcmV0dXJuZWQ8YnIgLz4xMS4gQ2FsbCBnZXQgYW5kIGdldF9pbmZvIEFQSSB0byB2YWxpZGF0ZSB0aGUgZGF0YSwgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggZGF0YTxiciAvPiB8IFVJRCB2YWx1ZSB1c2VkIGFyZSAxNCBhbmQgMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfczAwMyB8IFBTQV9JVFNfRVJST1JfSU5TVUZGSUNJRU5UX1NQQUNFICAgICB8IHBzYV9pdHNfc2V0PGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDcmVhdGUgVUlEL2RhdGEgcGFpcnMsIHdpdGggZGF0YV9sZW4gMjU2IGJ5dGVzLiBEbyB0aGlzIHdpdGggaW5jcmVtZW50aW5nIHVpZCB2YWx1ZXMgdGlsbCB3ZSBoYXZlIElOU1VGRklDRU5UX1NQQUNFLjxiciAvPjIuIFJlbW92ZSBhbGwgdGhlIFVJRC9kYXRhIHBhaXJzIGNyZWF0ZWQuPGJyIC8+My4gcmVwZWF0IHRoZSBzdGVwcyA1IHRpbWVzLCB0byBjaGVjayBzYW1lIG51bWJlciBvZiB1aWQgPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgc3RhcnRzIGZyb20gMSBhbmQga2VlcCBvbiBpbmNyZW1lbnRpbmcgdGlsbCBhbGwgc3BhY2UgaXMgZXhoYXVzdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfczAwNCB8IFBTQV9JVFNfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9pdHNfc2V0PGJyIC8+cHNhX2l0c19nZXQ8YnIgLz5wc2FfaXRzX2dldF9pbmZvPGJyIC8+cHNhX2l0c19yZW1vdmU8YnIgLz4gfCAxLiBTZXQgYSB2YWxpZCB1aWQvZGF0YSBwYWlyPGJyIC8+Mi4gVmFsaWRhdGUgdGhlIGRhdGEgdXNpbmcgZ2V0IGFwaTxiciAvPjMuIENoYW5nZSB0aGUgZGF0YSBsZW5ndGggdG8gaGFsZiBvZiBwcmV2aW91cy48YnIgLz40LiBDYWxsIEdFVCBhcGkgd2l0aCBvcmlnaW5hbCBkYXRhIGxlbmd0aCAsIGVycm9yIHNob3VsZCBiZSByZXR1cm5lZCBhbmQgYWxzbyB0aGUgcmV0dXJuIGJ1ZmZlciBzaG91bGQgYmUgZW1wdHk8YnIgLz41LiBDYWxsIEdFVCBhcGkgd2l0aCBjb3JyZWN0IGRhdGFfbGVuIGFuZCB2YWxpZGF0ZSB0aGUgZGF0YSByZWNlaXZlZC48YnIgLz42LiBDaGVjayBvbGQgZGF0YSBjYW5ub3QgYmUgYWNjZXNzZWQuPGJyIC8+Ny4gQ2FsbCBSRU1PVkUgYXBpIHRvIGRlbGV0ZSB0aGUgVUlEL2RhdGEgcGFpcjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBpcyAxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfczAwNSB8IFBTQV9JVFNfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9pdHNfc2V0PGJyIC8+cHNhX2l0c19nZXQ8YnIgLz5wc2FfaXRzX2dldF9pbmZvPGJyIC8+cHNhX2l0c19yZW1vdmU8YnIgLz4gfCAxLiBTZXQgdmFsaWQgVUlEL2RhdGEgcGFpciB3aXRoIHZhcnlpbmcgdWlkIGFuZCBkYXRhX2xlbiA8YnIgLz4yLiBDYWxsIEdFVCBhcGkgYW5kIHZhbGlkYXRlIHRoZSBzZXQgZGF0YTxiciAvPjMuIENhbGwgR0VUIGluZm8gYXBpIGFuZCB2YWxpZGF0ZSB0aGUgZGF0YSBhdHRyaWJ1dGVzPGJyIC8+NC4gQ2FsbCBSRU1PVkUgYXBpIHRvIGRlbGV0ZSB0aGUgVUlEL2RhdGEgcGFpcjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBhcmUgMCBhbmQgMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfczAwNiB8IFBTQV9JVFNfRVJST1JfRkxBR1NfTk9UX1NVUFBPUlRFRCAgICB8IHBzYV9pdHNfc2V0PGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAgQ2FsbCB0aGUgU0VUX0lORk8gd2l0aCBtaW5pbXVtIGZsYWcgdmFsdWUgdG8gbWF4IGZsYWcgdmFsdWUgPGJyIC8+Mi4gQ2FsbCBHRVRfSU5GTyBhcGkgYW5kIHZhbGlkYWUgdGhlIGZsYWcgdmFsdWU8YnIgLz4zLiByZW1vdmUgdGhlIHVpZC9kYXRhIHBhaXI8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBpcyAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X3MwMDcgfCBQU0FfSVRTX0VSUk9SX0ZMQUdTX1NFVF9BRlRFUl9DUkVBVEUgfCBwc2FfaXRzX3NldDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gQ3JlYXRlIHZhbGlkIHVpZC9kYXRhIHBhaXIgd2l0aCBub24temVybyB2YWx1ZS4gPGJyIC8+Mi4gQWdhaW4gY2FsbCB0aGUgc2V0IGFwaSBmb3Igc2FtZSB1aWQgdG8gY2hhbmdlIGZsYWcgdG8gc29tZSBkaWZmZXJlbnQgbm9uLXplcm8gdmFsdWUuPGJyIC8+My4gVHJ5IHRvIHNldCBmbGFnIHRvIG5vdyBDUkVBVEVfRkxBR19WQUxVRV9OT05FLjxiciAvPjQuIHJlbW92ZSB0aGUgdWlkLjxiciAvPjUuIENyZWF0ZSBhIG5ldyBVSUQvZGF0YSBwYWlyIHdpdGggemVybyBjcmVhdGUgZmxhZy48YnIgLz42LiB0cnkgdG8gY2hhbmdlIHRoZSBmbGFnIHZhbHVlIHRvIG5vbi16ZXJvLjxiciAvPjcuIHJlbW92ZSB0aGUgdWlkPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9zMDA4IHwgUFNBX0lUU19FUlJPUl9PRkZTRVRfSU5WQUxJRCAgICAgICAgIHwgcHNhX2l0c19nZXQ8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIFNldCB2YWxpZCBVSUQvZGF0YSBwYWlyPGJyIC8+Mi4gQ2FsbCBHRVQgYXBpIHdpdGggdmFsaWQgb2Zmc2V0IGFuZCBvZmZzZXQgKyBkYXRhX2xlbiBlcXVhbCB0byBzdG9yZWQgZGF0YSBzaXplLjxiciAvPjMuIENhbGwgR0VUIGFwaSB3aXRoIHZhbGlkIG9mZnNldCBhbmQgb2Zmc2V0ICsgZGF0YV9sZW4gbGVzcyB0aGFuIHN0b3JlZCBkYXRhIHNpemUuPGJyIC8+NC4gQ2FsbCBnZXQgYXBpIHdpdGggaW52YWxpZCBvZmZzZXQuPGJyIC8+NS4gQ2FsbCBnZXQgYXBpIHdpdGggemVybyBvZmZzZXQgLCBidXQgZGF0YSBsZW4gZ3JlYXRlciB0aGFuIGRhdGEgc2l6ZS48YnIgLz42LiBSZW1vdmUgdGhlIHVpZC48YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVJRCB2YWx1ZSB1c2VkIGlzICAxMSB8Cit8IHRlc3RfczAwOSB8IFBTQV9JVFNfRVJST1JfQkFEX1BPSU5URVIgICAgICAgICAgICB8IHBzYV9pdHNfZ2V0PGJyIC8+cHNhX2l0c19zZXQ8YnIgLz5wc2FfaXRzX2dldF9pbmZvPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgfCAxLiBDYWxsIHRoZSBTRVQgQVBJIHdpdGggTlVMTCBwb2ludGVyIGFuZCBkYXRhX2xlbiB6ZXJvIDxiciAvPjIuIFZhbGlkYXRlIHVzaW5nIGdldF9pbmZvIGFwaSBzdG9yYWdlIHNob3VsZCBub3QgYmUgcHJlc2VudC48YnIgLz4zLiBTZXQgc3RvcmFnZSBlbnRpdHkgd2l0aCB2YWxpZCB3cml0ZV9idWZmZXIgLCBidXQgbGVuZ3RoIHplcm8uPGJyIC8+NC4gQWdhaW4gdHJ5IHRvIHNldCBmb3Igc2FtZSB1aWQgd2l0aCBOVUxMIHdyaXRlX2J1ZmZlci48YnIgLz41LiBDYWxsIGdldCBhbmQgZ2V0X2luZm8gYXBpIHdpdGggTlVMTCBwb2ludGVyIGFuZCB2YWxpZCB1aWQuPGJyIC8+Ni4gcmVtb3ZlIHRoZSB1aWQ8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBpcyAxMSA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKKworIyMgTGljZW5zZQorQXJtIFBTQSB0ZXN0IHN1aXRlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIEFwYWNoZSB2Mi4wIExpY2Vuc2UuCisKKy0tLS0tLS0tLS0tLS0tCisKKypDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuKgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2RvY3MvcHNhX3BzX3Rlc3RsaXN0Lm1kIGIvYXBpLXRlc3RzL2RvY3MvcHNhX3BzX3Rlc3RsaXN0Lm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZjY5ODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZG9jcy9wc2FfcHNfdGVzdGxpc3QubWQKQEAgLTAsMCArMSwyMyBAQAorIyBQU0EgUHJvdGVjdGVkIFN0b3JhZ2UgVGVzdGNhc2UgY2hlY2tsaXN0CisKKworCit8IFRlc3QgICAgICB8IFJldHVybiBWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICB8IEFQSSBWZXJpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUZXN0IEFsZ29yaXRobSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgVXNhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorfCB0ZXN0X3MwMDEgfCBQU0FfUFNfRVJST1JfS0VZX05PVF9GT1VORCAgICAgICAgICB8IHBzYV9wc19nZXQ8YnIgLz5wc2FfcHNfZ2V0X2luZm8gPGJyIC8+cHNhX3BzX3JlbW92ZTxiciAvPiAgICAgICAgICAgICAgICAgfCAxLiBDYWxsIGdldCBBUEkgd2l0aCBVSUQgZm9yIHdoaWNoIG5vIFVJRC9EYXRhIHBhaXIgaXMgY3JlYXRlZDxiciAvPjIuIENhbGwgZ2V0X2luZm8gQVBJIGZvciB3aGljaCBubyBVSUQvRGF0YSBwYWlyIGlzIGNyZWF0ZWQ8YnIgLz4zLiBDYWxsIHJlbW92ZSBBUEkgZm9yIHdoaWNoIG5vIFVJRC9EYXRhIHBhaXIgaXMgY3JlYXRlZDxiciAvPjQuIFNldCB2YWxpZCAgVUlEL0RhdGEgcGFpciB3aXRoIHVpZDE8YnIgLz41LiBTZXQgb25lIG1vcmUgc2V0IG9mIFVJRC9EYXRhIHBhaXIsIHdpdGggZGlmZmVyZW50IHVpZCwgdGhhbiBwcmV2aW91czxiciAvPjYuIFJlbW92ZSB0aGUgdWlkIG9mIHN0ZXAgNC48YnIgLz43LiBDYWxsIGdldCBBUEkgZm9yICByZW1vdmVkIFVJRC9kYXRhIHBhaXI8YnIgLz44LiBDYWxsIGdldF9pbmZvIEFQSSBmb3IgIHJlbW92ZWQgVUlEL0RhdGEgcGFpcjxiciAvPjkuIENhbGwgcmVtb3ZlIEFQSSBmb3IgIHJlbW92ZWQgVUlEL0RhdGEgcGFpcjxiciAvPjEwLiBTZXQgdmFsaWQgVUlEL0RhdGEgcGFpcjxiciAvPjExLiBDYWxsIGdldCBBUEkgZm9yIGRpZmZlcmVudCB1aWQgLCB0aGVuIGNyZWF0ZWQ8YnIgLz4xMi4gQ2FsbCBnZXRfaW5mbyBBUEkgZm9yIGRpZmZlcmVudCB1aWQsIHRoZW4gY3JlYXRlZDxiciAvPjEzLiBDYWxsIHJlbW92ZSBBUEkgZm9yIGRpZmZlcmVudCB1aWQsIHRoZW4gY3JlYXRlZDxiciAvPjE0LiBSZW1vdmUgdGhlIGNyZWF0ZWQgVUlEL0RhdGEgcGFpci48YnIgLz4xNS4gcmVtb3ZlIHRoZSBzdHJheSB1aWQuPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBhcmUgMTAsMTEsOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9zMDAyIHwgUFNBX1BTX0VSUk9SX1dSSVRFX09OQ0UgICAgICAgICAgICAgfCBwc2FfcHNfc2V0PGJyIC8+cHNhX3BzX3JlbW92ZTxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuICBTZXQgdmFsaWQgVUlEL2RhdGEgdmFsdWUgcGFpciAsIHdpdGggY3JlYXRlIGZsYWcgdmFsdWUgbm9uZS4yLiBDYWxsIGdldCBhbmQgZ2V0X2luZm8gQVBJIHRvIHZhbGlkYXRlIHRoZSBkYXRhLCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBkYXRhPGJyIC8+My4gQ2FsbCBzZXQgQVBJIGFnYWluIHdpdGggc2FtZSB1aWQgYW5kIGNyZWF0ZSBmbGFnICBQU0FfUFNfV1JJVEVfT05DRV9GTEFHPGJyIC8+NC4gQ2FsbCBnZXQgYW5kIGdldF9pbmZvIEFQSSB0byB2YWxpZGF0ZSB0aGUgZGF0YSwgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggZGF0YSBpcyBub3QgY2hhbmdlZCBhZnRlciBzZWNvbmQgc2V0IG9wZXJhdGlvbjxiciAvPjUuIHRyeSB0byByZW1vdmUgdGhlIFVJRC9kYXRhIHBhaXIuPGJyIC8+Ni4gQ3JlYXRlIG5ldyBVSUQvZGF0YSB2YWx1ZSBwYWlyLCB3aXRoIGNyZWF0ZSBmbGFnIFBTQV9QU19XUklURV9PTkNFX0ZMQUc8YnIgLz43LiBUcnkgdG8gcmVtb3ZlIHRoZSBjcmVhdGVkIFVJRC48YnIgLz44LiBDYWxsIGdldCBhbmQgZ2V0X2luZm8gQVBJIHRvIHZhbGlkYXRlIHRoZSBkYXRhLCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBkYXRhPGJyIC8+OS4gQWdhaW4gY2FsbCBTRVQgd2l0aCBzYW1lIFVJRCAsIGNyZWF0ZSBmbGFnIFBTQV9QU19XUklURV9PTkNFX0ZMQUcgYnV0IGRpZmZlcmVudCBkYXRhIGxlbmd0aDxiciAvPjEwLiBUcnkgdG8gcmVtb3ZlIHRoZSBVSUQsIFBTQV9QU19FUlJPUl9XUklURV9PTkNFIGVycm9yIHNob3VsZCBiZSByZXR1cm5lZDxiciAvPjExLiBDYWxsIGdldCBhbmQgZ2V0X2luZm8gQVBJIHRvIHZhbGlkYXRlIHRoZSBkYXRhLCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBkYXRhPGJyIC8+IHwgVUlEIHZhbHVlIHVzZWQgYXJlIDIwIGFuZCAyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9zMDAzIHwgUFNBX1BTX0VSUk9SX0lOU1VGRklDSUVOVF9TUEFDRSAgICAgfCBwc2FfcHNfc2V0PGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDcmVhdGUgVUlEL2RhdGEgcGFpcnMsIHdpdGggZGF0YV9sZW4gMjU2IGJ5dGVzLiBEbyB0aGlzIHdpdGggaW5jcmVtZW50aW5nIHVpZCB2YWx1ZXMgdGlsbCB3ZSBoYXZlIElOU1VGRklDRU5UX1NQQUNFLjxiciAvPjIuIFJlbW92ZSBhbGwgdGhlIFVJRC9kYXRhIHBhaXJzIGNyZWF0ZWQuPGJyIC8+My4gcmVwZWF0IHRoZSBzdGVwcyA1IHRpbWVzLCB0byBjaGVjayBzYW1lIG51bWJlciBvZiB1aWQgPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgc3RhcnRzIGZyb20gMSBhbmQga2VlcCBvbiBpbmNyZW1lbnRpbmcgdGlsbCBhbGwgc3BhY2UgaXMgZXhoYXVzdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfczAwNCB8IFBTQV9QU19TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3BzX3NldDxiciAvPnBzYV9wc19nZXQ8YnIgLz5wc2FfcHNfZ2V0X2luZm88YnIgLz5wc2FfcHNfcmVtb3ZlPGJyIC8+IHwgMS4gU2V0IGEgdmFsaWQgdWlkL2RhdGEgcGFpcjxiciAvPjIuIFZhbGlkYXRlIHRoZSBkYXRhIHVzaW5nIGdldCBhcGk8YnIgLz4zLiBDaGFuZ2UgdGhlIGRhdGEgbGVuZ3RoIHRvIGhhbGYgb2YgcHJldmlvdXMuPGJyIC8+NC4gQ2FsbCBHRVQgYXBpIHdpdGggb3JpZ2luYWwgZGF0YSBsZW5ndGggLCBlcnJvciBzaG91bGQgYmUgcmV0dXJuZWQgYW5kIGFsc28gdGhlIHJldHVybiBidWZmZXIgc2hvdWxkIGJlIGVtcHR5PGJyIC8+NS4gQ2FsbCBHRVQgYXBpIHdpdGggY29ycmVjdCBkYXRhX2xlbiBhbmQgdmFsaWRhdGUgdGhlIGRhdGEgcmVjZWl2ZWQuPGJyIC8+Ni4gQ2hlY2sgb2xkIGRhdGEgY2Fubm90IGJlIGFjY2Vzc2VkLjxiciAvPjcuIENhbGwgUkVNT1ZFIGFwaSB0byBkZWxldGUgdGhlIFVJRC9kYXRhIHBhaXI8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X3MwMDUgfCBQU0FfUFNfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9wc19zZXQ8YnIgLz5wc2FfcHNfZ2V0PGJyIC8+cHNhX3BzX2dldF9pbmZvPGJyIC8+cHNhX3BzX3JlbW92ZTxiciAvPiB8IDEuIFNldCB2YWxpZCBVSUQvZGF0YSBwYWlyIHdpdGggdmFyeWluZyB1aWQgYW5kIGRhdGFfbGVuIDxiciAvPjIuIENhbGwgR0VUIGFwaSBhbmQgdmFsaWRhdGUgdGhlIHNldCBkYXRhPGJyIC8+My4gQ2FsbCBHRVQgaW5mbyBhcGkgYW5kIHZhbGlkYXRlIHRoZSBkYXRhIGF0dHJpYnV0ZXM8YnIgLz40LiBDYWxsIFJFTU9WRSBhcGkgdG8gZGVsZXRlIHRoZSBVSUQvZGF0YSBwYWlyPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVJRCB2YWx1ZSB1c2VkIGFyZSAwIGFuZCAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9zMDA2IHwgUFNBX1BTX0VSUk9SX0ZMQUdTX05PVF9TVVBQT1JURUQgICAgfCBwc2FfcHNfc2V0PGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAgQ2FsbCB0aGUgU0VUX0lORk8gd2l0aCBtaW5pbXVtIGZsYWcgdmFsdWUgdG8gbWF4IGZsYWcgdmFsdWUgPGJyIC8+Mi4gQ2FsbCBHRVRfSU5GTyBhcGkgYW5kIHZhbGlkYWUgdGhlIGZsYWcgdmFsdWU8YnIgLz4zLiByZW1vdmUgdGhlIHVpZC9kYXRhIHBhaXI8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBpcyAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X3MwMDcgfCBQU0FfUFNfRVJST1JfRkxBR1NfU0VUX0FGVEVSX0NSRUFURSB8IHBzYV9wc19zZXQ8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENyZWF0ZSB2YWxpZCB1aWQvZGF0YSBwYWlyIHdpdGggbm9uLXplcm8gdmFsdWUuIDxiciAvPjIuIEFnYWluIGNhbGwgdGhlIHNldCBhcGkgZm9yIHNhbWUgdWlkIHRvIGNoYW5nZSBmbGFnIHRvIHNvbWUgZGlmZmVyZW50IG5vbi16ZXJvIHZhbHVlLjxiciAvPjMuIFRyeSB0byBzZXQgZmxhZyB0byBub3cgQ1JFQVRFX0ZMQUdfVkFMVUVfTk9ORS48YnIgLz40LiByZW1vdmUgdGhlIHVpZC48YnIgLz41LiBDcmVhdGUgYSBuZXcgVUlEL2RhdGEgcGFpciB3aXRoIHplcm8gY3JlYXRlIGZsYWcuPGJyIC8+Ni4gdHJ5IHRvIGNoYW5nZSB0aGUgZmxhZyB2YWx1ZSB0byBub24temVyby48YnIgLz43LiByZW1vdmUgdGhlIHVpZDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVJRCB2YWx1ZSB1c2VkIGlzIDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfczAwOCB8IFBTQV9QU19FUlJPUl9PRkZTRVRfSU5WQUxJRCAgICAgICAgIHwgcHNhX3BzX2dldDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gU2V0IHZhbGlkIFVJRC9kYXRhIHBhaXI8YnIgLz4yLiBDYWxsIEdFVCBhcGkgd2l0aCB2YWxpZCBvZmZzZXQgYW5kIG9mZnNldCArIGRhdGFfbGVuIGVxdWFsIHRvIHN0b3JlZCBkYXRhIHNpemUuPGJyIC8+My4gQ2FsbCBHRVQgYXBpIHdpdGggdmFsaWQgb2Zmc2V0IGFuZCBvZmZzZXQgKyBkYXRhX2xlbiBsZXNzIHRoYW4gc3RvcmVkIGRhdGEgc2l6ZS48YnIgLz40LiBDYWxsIGdldCBhcGkgd2l0aCBpbnZhbGlkIG9mZnNldC48YnIgLz41LiBDYWxsIGdldCBhcGkgd2l0aCB6ZXJvIG9mZnNldCAsIGJ1dCBkYXRhIGxlbiBncmVhdGVyIHRoYW4gZGF0YSBzaXplLjxiciAvPjYuIFJlbW92ZSB0aGUgdWlkLjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgIDExIHwKK3wgdGVzdF9zMDA5IHwgUFNBX1BTX0VSUk9SX0JBRF9QT0lOVEVSICAgICAgICAgICAgfCBwc2FfcHNfZ2V0PGJyIC8+cHNhX3BzX3NldDxiciAvPnBzYV9wc19nZXRfaW5mbzxiciAvPiAgICAgICAgICAgICAgICAgICAgIHwgMS4gQ2FsbCB0aGUgU0VUIEFQSSB3aXRoIE5VTEwgcG9pbnRlciBhbmQgZGF0YV9sZW4gemVybyA8YnIgLz4yLiBWYWxpZGF0ZSB1c2luZyBnZXRfaW5mbyBhcGkgc3RvcmFnZSBzaG91bGQgbm90IGJlIHByZXNlbnQuPGJyIC8+My4gU2V0IHN0b3JhZ2UgZW50aXR5IHdpdGggdmFsaWQgd3JpdGVfYnVmZmVyICwgYnV0IGxlbmd0aCB6ZXJvLjxiciAvPjQuIEFnYWluIHRyeSB0byBzZXQgZm9yIHNhbWUgdWlkIHdpdGggTlVMTCB3cml0ZV9idWZmZXIuPGJyIC8+NS4gQ2FsbCBnZXQgYW5kIGdldF9pbmZvIGFwaSB3aXRoIE5VTEwgcG9pbnRlciBhbmQgdmFsaWQgdWlkLjxiciAvPjYuIHJlbW92ZSB0aGUgdWlkPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgMTEgPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCisKKyMjIExpY2Vuc2UKK0FybSBQU0EgdGVzdCBzdWl0ZSBpcyBkaXN0cmlidXRlZCB1bmRlciBBcGFjaGUgdjIuMCBMaWNlbnNlLgorCistLS0tLS0tLS0tLS0tLQorCisqQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLioKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kb2NzL3N3X3JlcXVpcmVtZW50cy5tZCBiL2FwaS10ZXN0cy9kb2NzL3N3X3JlcXVpcmVtZW50cy5tZAppbmRleCA0ODU2ODFmLi43ZjJjMTQyIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZG9jcy9zd19yZXF1aXJlbWVudHMubWQKKysrIGIvYXBpLXRlc3RzL2RvY3Mvc3dfcmVxdWlyZW1lbnRzLm1kCkBAIC02LDcgKzYsMTAgQEAKIAogLSBIb3N0IE9wZXJhdGluZyBTeXN0ZW0gICAgIDogVWJ1bnR1IDE2LjA0CiAtIFNjcmlwdGluZyB0b29scyAgICAgICAgICAgOiBQZXJsIDUuMTIuMwotLSBPdGhlciBvcGVuLXNvdXJjZSB0b29scyAgIDogR05VIEFybSBFbWJlZGRlZCBUb29sY2hhaW4gNi4zLjEKKy0gQ29tcGlsZXIgdG9vbGNoYWluICAgICAgICA6IEdOVSBBcm0gRW1iZWRkZWQgVG9vbGNoYWluIDYuMy4xLCBBcm0gQ29tcGlsZXIgdjYuNworCisqTm90ZSo6IFRvIGNvbXBpbGUgVGVzdCBTdWl0ZSBjb2RlLCBhdCBsZWFzdCBvbmUgb2YgdGhlIGFib3ZlIHN1cHBvcnRlZCBjb21waWxlciB0b29sY2hhaW5zCisgICAgICAgIGhhdmUgdG8gYmUgYXZhaWxhYmxlIGluIHRoZSBidWlsZCBlbnZpcm9ubWVudC4KIAogIyMjIFNldHVwIGEgc2hlbGwgdG8gZW5hYmxlIGNvbXBpbGVyIHRvb2xjaGFpbiBhZnRlciBpbnN0YWxsYXRpb24KIApAQCAtMTUsNiArMTgsMTEgQEAKIGV4cG9ydCBQQVRIPTxHTlVfQVJNX1BBVEg+L2JpbjokUEFUSAogfn5+CiAKK1RvIGltcG9ydCBBcm0gQ29tcGlsZXIgaW4geW91ciBiYXNoIHNoZWxsIGNvbnNvbGU6Cit+fn4KK2V4cG9ydCBQQVRIPTxBUk1fQ09NUElMRVJfUEFUSD4vYmluOiRQQVRICit+fn4KKwogIyMgRG93bmxvYWQgc291cmNlCiAKIFRvIGRvd25sb2FkIHRoZSBtYXN0ZXIgYnJhbmNoIG9mIHRoZSByZXBvc2l0b3J5LCB0eXBlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPGJyIC8+CkBAIC0yNyw0ICszNSw0IEBACiAKIC0tLS0tLS0tLS0tLS0tCiAKLSpDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuKgorKkNvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLioKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9SRUFETUUubWQgYi9hcGktdGVzdHMvZmYvUkVBRE1FLm1kCmluZGV4IDljZDVjOWQuLmQyNGJlZjMgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9SRUFETUUubWQKKysrIGIvYXBpLXRlc3RzL2ZmL1JFQURNRS5tZApAQCAtMjIsMTYgKzIyLDkgQEAKIAogVGhlIEFyY2hpdGVjdHVyZSBUZXN0IFN1aXRlIGNvbnRhaW5zIHRoZSB0ZXN0cyB0aGF0IGFyZSBzZWxmLWNoZWNraW5nLCBwb3J0YWJsZSBDLWJhc2VkIHRlc3RzIHdpdGggZGlyZWN0ZWQgc3RpbXVsdXMuCiAKLVRoZSB0ZXN0cyBhcmUgYXZhaWxhYmxlIGFzIG9wZW4gc291cmNlLiBUaGUgdGVzdHMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGFic3RyYWN0aW9uIGxheWVycyBhcmUgYXZhaWxhYmxlIHdpdGggYW4gQXBhY2hlIHYyLjAgbGljZW5zZSBhbGxvd2luZyBmb3IgZXh0ZXJuYWwgY29udHJpYnV0aW9uLgorVGhlIHRlc3RzIGFyZSBhdmFpbGFibGUgYXMgb3BlbiBzb3VyY2UuIFRoZSB0ZXN0cyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYWJzdHJhY3Rpb24gbGF5ZXJzIGFyZSBhdmFpbGFibGUgd2l0aCBhbiBBcGFjaGUgdjIuMCBsaWNlbnNlIGFsbG93aW5nIGZvciBleHRlcm5hbCBjb250cmlidXRpb24uIFRoaXMgdGVzdCBzdWl0ZSBpcyBub3QgYSBzdWJzdGl0dXRlIGZvciBkZXNpZ24gdmVyaWZpY2F0aW9uLiBUbyByZXZpZXcgdGhlIHRlc3QgbG9ncywgQXJtIGxpY2Vuc2VlcyBjYW4gY29udGFjdCBBcm0gZGlyZWN0bHkgdGhyb3VnaCB0aGVpciBwYXJ0bmVyIG1hbmFnZXJzLgogCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBBcmNoaXRlY3R1cmUgVGVzdCBTdWl0ZSBzcGVjaWZpY2F0aW9uLCByZWZlciB0aGUgW1ZhbGlkYXRpb24gTWV0aG9kb2xvZ3ldKC4uL2RvY3MvQXJtX1BTQV9GRl9BcmNoX1Rlc3RfVmFsaWRhdGlvbl9NZXRob2RvbG9neS5wZGYpIGRvY3VtZW50LgotCi0jIyBSZWxlYXNlIFVwZGF0ZQotIC0gUmVsZWFzZSBWZXJzaW9uIC0gMC41Ci0gLSBDb2RlIFF1YWxpdHkgLSBBbHBoYS4gVGhpcyBpbmRpY2F0ZXMgdGhlIHN1aXRlIGlzIGluIGRldmVsb3BtZW50IGFuZCBpdCBjb250YWlucyB0ZXN0cyB3aGljaCBoYXZlIG5vdCBiZWVuIHZhbGlkYXRlZCBvbiBhbnkgcGxhdGZvcm0uIFBsZWFzZSB1c2UgdGhpcyBvcHBvcnR1bml0eSB0byBzdWdnZXN0IGVuaGFuY2VtZW50cyBhbmQgcG9pbnQgb3V0IGVycm9ycy4KLSAtIEN1cnJlbnQgcmVsZWFzZSBjb250YWlucyAqKklQQyB0ZXN0cyoqIHRoYXQgYXJlIHdyaXR0ZW4gZm9yIHZlcnNpb24gMS4wLUJldGEtMCBvZiB0aGUgUFNBIEZGIHNwZWNpZmljYXRpb24uCi0gLSBUaGlzIHRlc3Qgc3VpdGUgaXMgbm90IGEgc3Vic3RpdHV0ZSBmb3IgZGVzaWduIHZlcmlmaWNhdGlvbi4KLSAtIFRvIHJldmlldyB0aGUgdGVzdCBsb2dzLCBBcm0gbGljZW5zZWVzIGNhbiBjb250YWN0IEFybSBkaXJlY3RseSB0aHJvdWdoIHRoZWlyIHBhcnRuZXIgbWFuYWdlcnMuCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBBcmNoaXRlY3R1cmUgVGVzdCBTdWl0ZSBzcGVjaWZpY2F0aW9uLCByZWZlciB0aGUgW1ZhbGlkYXRpb24gTWV0aG9kb2xvZ3ldKC4uL2RvY3MvQXJtX1BTQV9BUElzX0FyY2hfVGVzdF9WYWxpZGF0aW9uX01ldGhvZG9sb2d5LnBkZikgZG9jdW1lbnQuCiAKICMjIFRlc3RzIFNjZW5hcmlvcwogCkBAIC00OCw3ICs0MSw3IEBACiAKICMjIyBQb3J0aW5nIHN0ZXBzCiAKLVJlZmVyIHRvIHRoZSBbUG9ydGluZyBHdWlkZV0oLi4vZG9jcy9wb3J0aW5nX2d1aWRlLm1kKSBkb2N1bWVudCBmb3IgcG9ydGluZyBzdGVwcy4KK1JlZmVyIHRvIHRoZSBbUFNBLUZGIFRlc3QgU3VpdGUgUG9ydGluZyBHdWlkZV0oLi4vZG9jcy9wb3J0aW5nX2d1aWRlX2ZmLm1kKSBkb2N1bWVudCBmb3IgcG9ydGluZyBzdGVwcy4KIAogIyMjIEJ1aWxkIHN0ZXBzCiAKQEAgLTcxLDE1ICs2NCwxNSBAQAogLSAgIDxwbGF0Zm9ybV9uYW1lPiBpcyB0aGUgc2FtZSBhcyB0aGUgbmFtZSBvZiB0aGUgdGFyZ2V0IHNwZWNpZmljIGRpcmVjdG9yeSBjcmVhdGVkIGluIHRoZSBwbGF0Zm9ybS90YXJnZXRzLyBkaXJlY3RvcnkuICA8YnIgLz4KIC0gICA8Y3B1X2FyY2hpdGVjdHVyZV92ZXJzaW9uPiBpcyB0aGUgQXJtIEFyY2hpdGVjdHVyZSB2ZXJzaW9uIG5hbWUgZm9yIHdoaWNoIHRlc3QgYmluYXJpZXMgc2hvdWxkIGJlIGNvbXBpbGVkLiBGb3IgZXhhbXBsZSwgQXJtdjdNLCBBcm12OE0tQmFzZWxpbmUgYW5kIEFybXY4TS1NYWlubGluZSBBcmNoaXRlY3R1cmUuICA8YnIgLz4KIC0gICA8c3VpdGVfbmFtZT4gaXMgdGhlIHN1aXRlIG5hbWUgYW5kIGl0IGlzIHNhbWUgYXMgdGhlIHN1aXRlIG5hbWUgYXZhaWxhYmxlIGluIHRlc3Rfc3VpdGVzLyBkaXJlY3RvcnkuIDxiciAvPgotLSAgIDxpbmNsdWRlX3BhdGg+IGlzIGFuIGFkZGl0aW9uYWwgZGlyZWN0b3J5IHRvIGJlIGluY2x1ZGVkIGludG8gY29tcGlsZXIgc2VhcmNoIHBhdGguIE5vdGUtIFRvIGNvbXBpbGUgaXBjIHRlc3RzLCBpbmNsdWRlIHBhdGggbXVzdCBwb2ludCB0byBwYXRoIHdoZXJlICJwc2EvY2xpZW50LmgiLCAicHNhL3NlcnZpY2UuaCIgYW5kIHRlc3QgcGFydGl0aW9uIG1hbmlmZXN0IG91dHB1dCBmaWxlcygicHNhX21hbmlmZXN0L3NpZC5oIiBhbmQgInBzYV9tYW5pZmVzdC88bWFuaWZlc3RmaWxlbmFtZT4uaCIpIGFyZSBsb2NhdGVkIGluIHlvdXIgYnVpbGQgc3lzdGVtLjxiciAvPgorLSAgIDxpbmNsdWRlX3BhdGg+IGlzIGFuIGFkZGl0aW9uYWwgZGlyZWN0b3J5IHRvIGJlIGluY2x1ZGVkIGludG8gY29tcGlsZXIgc2VhcmNoIHBhdGguIE5vdGUtIFRvIGNvbXBpbGUgaXBjIHRlc3RzLCBpbmNsdWRlIHBhdGggbXVzdCBwb2ludCB0byBwYXRoIHdoZXJlICJwc2EvY2xpZW50LmgiLCAicHNhL3NlcnZpY2UuaCIgYW5kIHRlc3QgcGFydGl0aW9uIG1hbmlmZXN0IG91dHB1dCBmaWxlcyhgYCJwc2FfbWFuaWZlc3Qvc2lkLmgiIGFuZCAicHNhX21hbmlmZXN0LzxtYW5pZmVzdGZpbGVuYW1lPi5oImBgKSBhcmUgbG9jYXRlZCBpbiB5b3VyIGJ1aWxkIHN5c3RlbS48YnIgLz4KIC0gICA8YnVpbGRfZGlyPiBpcyBhbiBvdXRwdXQgZGlyZWN0b3J5IHRvIGtlZXAgYnVpbGQgZmlsZXMuCiAKIFJlZmVyIC4vdG9vbHMvc2NyaXB0cy9zZXR1cC5zaCAtLWhlbHAgdG8ga25vdyBtb3JlIGFib3V0IG9wdGlvbnMuCiAKLSpUbyBjb21waWxlIGlwYyB0ZXN0cyBmb3IgZnZwX21wczJfY200X21iZWRvcyBwbGF0Zm9ybSoKKypUbyBjb21waWxlIGlwYyB0ZXN0cyBmb3IgdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNCBwbGF0Zm9ybSoKIGBgYAogY2QgYXBpLXRlc3RzCi0uL3Rvb2xzL3NjcmlwdHMvc2V0dXAuc2ggLS10YXJnZXQgZnZwX21wczJfY200X21iZWRvcyAtLWNwdV9hcmNoIGFybXY3bSAtLXN1aXRlIGlwYyAtLWJ1aWxkIEJVSUxEX0lQQyAtLWluY2x1ZGUgPGluY2x1ZGVfcGF0aDE+IC0taW5jbHVkZSA8aW5jbHVkZV9wYXRoMj4KKy4vdG9vbHMvc2NyaXB0cy9zZXR1cC5zaCAtLXRhcmdldCB0Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200IC0tY3B1X2FyY2ggYXJtdjdtIC0tc3VpdGUgaXBjIC0tYnVpbGQgQlVJTERfSVBDIC0taW5jbHVkZSA8aW5jbHVkZV9wYXRoMT4gLS1pbmNsdWRlIDxpbmNsdWRlX3BhdGgyPgogYGBgCiAKICMjIyBCdWlsZCBvdXRwdXQKQEAgLTEyNCw1ICsxMTcsNSBAQAogCiAtLS0tLS0tLS0tLS0tLQogCi0qQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLioKKypDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4qCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAxL3Rlc3RfaTAwMS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDEvdGVzdF9pMDAxLmMKaW5kZXggZGQ1NDA3Ny4uZDFlY2M0NyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDEvdGVzdF9pMDAxLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDEvdGVzdF9pMDAxLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDAxLmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwMS90ZXN0X2kwMDEuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAxL3Rlc3RfaTAwMS5oCmluZGV4IDAzM2YxOTQuLmE0MmZkOTcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAxL3Rlc3RfaTAwMS5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAxL3Rlc3RfaTAwMS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDAwMV9DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwMDFfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwMDFfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwMDFfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDIvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDIvdGVzdF9lbnRyeS5jCmluZGV4IDhkMjNiZDIuLjYwMDM2NjkgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAyL3Rlc3RfZW50cnkuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwMi90ZXN0X2VudHJ5LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTM0LDcgKzM0LDcgQEAKICAgICBwc2EgPSBwc2FfYXBpOwogCiAgICAgLyogdGVzdCBpbml0ICovCi0gICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfTE9XX1RJTUVPVVQpKTsKKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9ISUdIX1RJTUVPVVQpKTsKICAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQogICAgIHsKICAgICAgICAgZ290byB0ZXN0X2V4aXQ7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwMi90ZXN0X2kwMDIuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAyL3Rlc3RfaTAwMi5jCmluZGV4IDhkYzUzZTQuLjcwNWVlMmIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAyL3Rlc3RfaTAwMi5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAyL3Rlc3RfaTAwMi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAwMi5oIgpAQCAtMzUsNyArMzUsNiBAQAogICAgIGNsaWVudF90ZXN0X3NwbV9jb25jdXJyZW50X2Nvbm5lY3RfbGltaXQsCiAgICAgY2xpZW50X3Rlc3RfcHNhX2Jsb2NrX2JlaGF2ZSwKICAgICBjbGllbnRfdGVzdF9wc2FfcG9sbF9iZWhhdmUsCi0gICAgY2xpZW50X3Rlc3RfcHNhX3dhaXRfYml0bWFzaywKICAgICBOVUxMLAogfTsKIApAQCAtMjg1LDI4ICsyODQsMyBAQAogICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrOF0gVGVzdCBQU0FfUE9MTFxuIiwgMCk7CiAgICByZXR1cm4gKGNsaWVudF90ZXN0X3BzYV93YWl0KCkpOwogfQotCi1pbnQzMl90IGNsaWVudF90ZXN0X3BzYV93YWl0X2JpdG1hc2soc2VjdXJpdHlfdCBjYWxsZXIpCi17Ci0gICBwc2FfaGFuZGxlX3QgICAgIGhhbmRsZSA9IDA7Ci0KLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazldIFRlc3QgcHNhX3dhaXQgYml0bWFza1xuIiwgMCk7Ci0KLSAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7Ci0KLSAgIGlmIChoYW5kbGUgIT0gUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCkKLSAgIHsKLSAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAicHNhX2Nvbm5lY3QgZmFpbGVkIC0xXG4iLCAwKTsKLSAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKLSAgIH0KLQotICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRCwgMSk7Ci0KLSAgIGlmIChoYW5kbGUgIT0gUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCkKLSAgIHsKLSAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAicHNhX2Nvbm5lY3QgZmFpbGVkIC0yXG4iLCAwKTsKLSAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKLSAgIH0KLQotICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKLX0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAyL3Rlc3RfaTAwMi5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDIvdGVzdF9pMDAyLmgKaW5kZXggZDYxZmMxYy4uYzRlYjIwNSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDIvdGVzdF9pMDAyLmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDIvdGVzdF9pMDAyLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE0LDggKzE0LDggQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCi0jaWZuZGVmIF9URVNUMDAyX0NMSUVOVF9URVNUU19IXwotI2RlZmluZSBfVEVTVDAwMl9DTElFTlRfVEVTVFNfSF8KKyNpZm5kZWYgX1RFU1RfSTAwMl9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTAwMl9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogCkBAIC00NCw1ICs0NCw0IEBACiBpbnQzMl90IGNsaWVudF90ZXN0X3NwbV9jb25jdXJyZW50X2Nvbm5lY3RfbGltaXQoc2VjdXJpdHlfdCk7CiBpbnQzMl90IGNsaWVudF90ZXN0X3BzYV9ibG9ja19iZWhhdmUoc2VjdXJpdHlfdCk7CiBpbnQzMl90IGNsaWVudF90ZXN0X3BzYV9wb2xsX2JlaGF2ZShzZWN1cml0eV90KTsKLWludDMyX3QgY2xpZW50X3Rlc3RfcHNhX3dhaXRfYml0bWFzayhzZWN1cml0eV90KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDIvdGVzdF9zdXBwX2kwMDIuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAyL3Rlc3Rfc3VwcF9pMDAyLmMKaW5kZXggYzIzYjZmMy4uNDM1OGUyNCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDIvdGVzdF9zdXBwX2kwMDIuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwMi90ZXN0X3N1cHBfaTAwMi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yOCw3ICsyOCw2IEBACiBpbnQzMl90IHNlcnZlcl90ZXN0X3NwbV9jb25jdXJyZW50X2Nvbm5lY3RfbGltaXQodm9pZCk7CiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9ibG9ja19iZWhhdmUodm9pZCk7CiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9wb2xsX2JlaGF2ZSh2b2lkKTsKLWludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX3dhaXRfYml0bWFzayh2b2lkKTsKIAogc2VydmVyX3Rlc3RfdCB0ZXN0X2kwMDJfc2VydmVyX3Rlc3RzX2xpc3RbXSA9IHsKICAgICBOVUxMLApAQCAtNDAsNyArMzksNiBAQAogICAgIHNlcnZlcl90ZXN0X3NwbV9jb25jdXJyZW50X2Nvbm5lY3RfbGltaXQsCiAgICAgc2VydmVyX3Rlc3RfcHNhX2Jsb2NrX2JlaGF2ZSwKICAgICBzZXJ2ZXJfdGVzdF9wc2FfcG9sbF9iZWhhdmUsCi0gICAgc2VydmVyX3Rlc3RfcHNhX3dhaXRfYml0bWFzaywKICAgICBOVUxMLAogfTsKIApAQCAtNzAsNyArNjgsNyBAQAogICAgIH0KIAogICAgIC8qIFJlamVjdGluZyBjb25uZWN0aW9uIHRvIGNoZWNrIGJlaGF2aW91ciBvZiBQU0FfQ09OTkVDVElPTl9SRUZVU0VEICovCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX0JVU1kpOworICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQogCkBAIC0zNjYsNTEgKzM2NCwzIEBACiAgICAgfQogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CiB9Ci0KLWludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX3dhaXRfYml0bWFzayh2b2lkKQotewotICAgIHBzYV9zaWduYWxfdCAgICBzaWduYWxzID0gMDsKLSAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OwotICAgIGludCAgICAgICAgICAgICBsb29wX2NudCA9IDI7Ci0gICAgcHNhX3NpZ25hbF90ICAgIHNpZ25hbF9tYXNrID0gKFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHIHwgU0VSVkVSX1JFTEFYX01JTk9SX1ZFUlNJT05fU0lHKTsKLQotICAgIC8qIERlYnVnIHByaW50ICovCi0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMTcpLCBWQUxfU1RBVFVTX1NVQ0NFU1MpOwotCi13YWl0MToKLSAgICBzaWduYWxzID0gcHNhX3dhaXQoc2lnbmFsX21hc2ssIFBTQV9CTE9DSyk7Ci0KLSAgICAvKiBSZXR1cm5lZCBzaWduYWxzIHZhbHVlIG11c3QgYmUgc3Vic2V0IHNpZ25hbHMgaW5kaWNhdGVkIGluIHRoZSBzaWduYWxfbWFzayAqLwotICAgIGlmICgoKHNpZ25hbHMgJiBzaWduYWxfbWFzaykgPT0gMCkgJiYKLSAgICAgICAgKChzaWduYWxzIHwgc2lnbmFsX21hc2spICE9IHNpZ25hbF9tYXNrKSkKLSAgICB7Ci0gICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwKLSAgICAgICAgICAgICAgICAicHNhX3dhaXQgcmV0dXJuZWQgd2l0aCBpbnZhbGlkIHNpZ25hbCB2YWx1ZSA9IDB4JXhcbiIsIHNpZ25hbHMpOwotICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2lnbmFscyAmIFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHKQotICAgIHsKLSAgICAgICAgaWYgKHBzYV9nZXQoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpICE9IFBTQV9TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICBnb3RvIHdhaXQxOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9vcF9jbnQtLTsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOwotICAgIH0KLSAgICBlbHNlIGlmIChzaWduYWxzICYgU0VSVkVSX1JFTEFYX01JTk9SX1ZFUlNJT05fU0lHKQotICAgIHsKLSAgICAgICAgaWYgKHBzYV9nZXQoU0VSVkVSX1JFTEFYX01JTk9SX1ZFUlNJT05fU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKLSAgICAgICAgewotICAgICAgICAgICAgZ290byB3YWl0MTsKLSAgICAgICAgfQotCi0gICAgICAgIGxvb3BfY250LS07Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKLSAgICB9Ci0KLSAgICBpZiAobG9vcF9jbnQgIT0gMCkKLSAgICAgICAgZ290byB3YWl0MTsKLQotICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Ci19CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwMy90ZXN0X2kwMDMuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAzL3Rlc3RfaTAwMy5jCmluZGV4IDExNGY2NzMuLjE3YjFiZGIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAzL3Rlc3RfaTAwMy5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAzL3Rlc3RfaTAwMy5jCkBAIC0yMCw4ICsyMCw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAwMy5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDMvdGVzdF9pMDAzLmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwMy90ZXN0X2kwMDMuaAppbmRleCA4OGRiOGVjLi5iODNiMjE5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwMy90ZXN0X2kwMDMuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwMy90ZXN0X2kwMDMuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTQsOCArMTQsOCBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KLSNpZm5kZWYgX1RFU1QwMDNfQ0xJRU5UX1RFU1RTX0hfCi0jZGVmaW5lIF9URVNUMDAzX0NMSUVOVF9URVNUU19IXworI2lmbmRlZiBfVEVTVF9JMDAzX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDAzX0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA0L3Rlc3RfaTAwNC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDQvdGVzdF9pMDA0LmMKaW5kZXggMWU5NGQ0Ny4uNzkwZTkxYiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDQvdGVzdF9pMDA0LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDQvdGVzdF9pMDA0LmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDA0LmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNC90ZXN0X2kwMDQuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA0L3Rlc3RfaTAwNC5oCmluZGV4IDAyNDU2YTQuLmZlMDdjMTAgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA0L3Rlc3RfaTAwNC5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA0L3Rlc3RfaTAwNC5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDAwNF9DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwMDRfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwMDRfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwMDRfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDUvdGVzdF9pMDA1LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNS90ZXN0X2kwMDUuYwppbmRleCAzOGI4NTM2Li44ZTAyZTIxIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNS90ZXN0X2kwMDUuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNS90ZXN0X2kwMDUuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMDUuaCIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA1L3Rlc3RfaTAwNS5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDUvdGVzdF9pMDA1LmgKaW5kZXggMTUxMjhiZC4uNTkzMTA0OSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDUvdGVzdF9pMDA1LmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDUvdGVzdF9pMDA1LmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE0LDggKzE0LDggQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCi0jaWZuZGVmIF9URVNUMDA1X0NMSUVOVF9URVNUU19IXwotI2RlZmluZSBfVEVTVDAwNV9DTElFTlRfVEVTVFNfSF8KKyNpZm5kZWYgX1RFU1RfSTAwNV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTAwNV9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNi90ZXN0X2kwMDYuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA2L3Rlc3RfaTAwNi5jCmluZGV4IDNjODk2YTkuLjYzNTZiOWMgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA2L3Rlc3RfaTAwNi5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA2L3Rlc3RfaTAwNi5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAwNi5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDYvdGVzdF9pMDA2LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNi90ZXN0X2kwMDYuaAppbmRleCAzZjM4NzhlLi42MmQ1YTRjIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNi90ZXN0X2kwMDYuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNi90ZXN0X2kwMDYuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTQsOCArMTQsOCBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KLSNpZm5kZWYgX1RFU1QwMDZfQ0xJRU5UX1RFU1RTX0hfCi0jZGVmaW5lIF9URVNUMDA2X0NMSUVOVF9URVNUU19IXworI2lmbmRlZiBfVEVTVF9JMDA2X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDA2X0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA3L3Rlc3RfaTAwNy5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDcvdGVzdF9pMDA3LmMKaW5kZXggZGZlYTE0Yy4uNTE4YzEzYiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDcvdGVzdF9pMDA3LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDcvdGVzdF9pMDA3LmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDA3LmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNy90ZXN0X2kwMDcuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA3L3Rlc3RfaTAwNy5oCmluZGV4IGQ0YjkzYTguLjI2OTA4ZmIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA3L3Rlc3RfaTAwNy5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA3L3Rlc3RfaTAwNy5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDAwN19DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwMDdfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwMDdfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwMDdfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDgvdGVzdF9pMDA4LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwOC90ZXN0X2kwMDguYwppbmRleCBkZWNkZjM4Li4xODkwNzU0IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwOC90ZXN0X2kwMDguYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwOC90ZXN0X2kwMDguYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMDguaCIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA4L3Rlc3RfaTAwOC5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDgvdGVzdF9pMDA4LmgKaW5kZXggMTQ3YTg0My4uYmU2Y2M5ZiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDgvdGVzdF9pMDA4LmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDgvdGVzdF9pMDA4LmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE0LDggKzE0LDggQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCi0jaWZuZGVmIF9URVNUMDA4X0NMSUVOVF9URVNUU19IXwotI2RlZmluZSBfVEVTVDAwOF9DTElFTlRfVEVTVFNfSF8KKyNpZm5kZWYgX1RFU1RfSTAwOF9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTAwOF9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwOS90ZXN0X2kwMDkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA5L3Rlc3RfaTAwOS5jCmluZGV4IGZkZThjZjMuLmFhMDVhNzkgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA5L3Rlc3RfaTAwOS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA5L3Rlc3RfaTAwOS5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAwOS5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDkvdGVzdF9pMDA5LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwOS90ZXN0X2kwMDkuaAppbmRleCA4Y2M0ZTVjLi5iOGNiYzUzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwOS90ZXN0X2kwMDkuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwOS90ZXN0X2kwMDkuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTQsOCArMTQsOCBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KLSNpZm5kZWYgX1RFU1QwMDlfQ0xJRU5UX1RFU1RTX0hfCi0jZGVmaW5lIF9URVNUMDA5X0NMSUVOVF9URVNUU19IXworI2lmbmRlZiBfVEVTVF9JMDA5X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDA5X0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEwL3Rlc3RfaTAxMC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTAvdGVzdF9pMDEwLmMKaW5kZXggOWEzMjQxZi4uOTU5OTQ4NSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTAvdGVzdF9pMDEwLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTAvdGVzdF9pMDEwLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDEwLmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMC90ZXN0X2kwMTAuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEwL3Rlc3RfaTAxMC5oCmluZGV4IDgzZWFiNWQuLjdlMGViMDIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEwL3Rlc3RfaTAxMC5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEwL3Rlc3RfaTAxMC5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDAxMF9DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwMTBfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwMTBfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwMTBfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTEvdGVzdF9pMDExLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMS90ZXN0X2kwMTEuYwppbmRleCBlMTVkODY5Li42OTY1ZGFhIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMS90ZXN0X2kwMTEuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMS90ZXN0X2kwMTEuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMTEuaCIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDExL3Rlc3RfaTAxMS5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTEvdGVzdF9pMDExLmgKaW5kZXggZWUzNmMxZC4uOGI2ZjczMiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTEvdGVzdF9pMDExLmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTEvdGVzdF9pMDExLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE0LDggKzE0LDggQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCi0jaWZuZGVmIF9URVNUMDExX0NMSUVOVF9URVNUU19IXwotI2RlZmluZSBfVEVTVDAxMV9DTElFTlRfVEVTVFNfSF8KKyNpZm5kZWYgX1RFU1RfSTAxMV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTAxMV9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMi90ZXN0X2kwMTIuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEyL3Rlc3RfaTAxMi5jCmluZGV4IDdmZTZhODMuLjE2MjNkNzcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEyL3Rlc3RfaTAxMi5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEyL3Rlc3RfaTAxMi5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAxMi5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTIvdGVzdF9pMDEyLmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMi90ZXN0X2kwMTIuaAppbmRleCA3OWY3ZjExLi5kN2EyNzc2IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMi90ZXN0X2kwMTIuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMi90ZXN0X2kwMTIuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTQsOCArMTQsOCBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KLSNpZm5kZWYgX1RFU1QwMTJfQ0xJRU5UX1RFU1RTX0hfCi0jZGVmaW5lIF9URVNUMDEyX0NMSUVOVF9URVNUU19IXworI2lmbmRlZiBfVEVTVF9JMDEyX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDEyX0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEzL3Rlc3RfaTAxMy5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTMvdGVzdF9pMDEzLmMKaW5kZXggYWM5NzUyYS4uZjAwODhhOCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTMvdGVzdF9pMDEzLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTMvdGVzdF9pMDEzLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDEzLmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMy90ZXN0X2kwMTMuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEzL3Rlc3RfaTAxMy5oCmluZGV4IGFkMDgyMjQuLjg3MjE1OTQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEzL3Rlc3RfaTAxMy5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEzL3Rlc3RfaTAxMy5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDAxM19DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwMTNfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwMTNfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwMTNfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTQvdGVzdF9pMDE0LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNC90ZXN0X2kwMTQuYwppbmRleCBjMTFhOGFiLi4yZmRlM2UyIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNC90ZXN0X2kwMTQuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNC90ZXN0X2kwMTQuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMTQuaCIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE0L3Rlc3RfaTAxNC5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTQvdGVzdF9pMDE0LmgKaW5kZXggM2QxMDYwZC4uOTM5ZGM0ZCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTQvdGVzdF9pMDE0LmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTQvdGVzdF9pMDE0LmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE0LDggKzE0LDggQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCi0jaWZuZGVmIF9URVNUMDE0X0NMSUVOVF9URVNUU19IXwotI2RlZmluZSBfVEVTVDAxNF9DTElFTlRfVEVTVFNfSF8KKyNpZm5kZWYgX1RFU1RfSTAxNF9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTAxNF9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNS90ZXN0X2kwMTUuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE1L3Rlc3RfaTAxNS5jCmluZGV4IDcxNWE5NDcuLjQ0YTA4ODcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE1L3Rlc3RfaTAxNS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE1L3Rlc3RfaTAxNS5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAxNS5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTUvdGVzdF9pMDE1LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNS90ZXN0X2kwMTUuaAppbmRleCAxZmQyM2IyLi5mMWQ0YmZiIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNS90ZXN0X2kwMTUuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNS90ZXN0X2kwMTUuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTQsOCArMTQsOCBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KLSNpZm5kZWYgX1RFU1QwMTVfQ0xJRU5UX1RFU1RTX0hfCi0jZGVmaW5lIF9URVNUMDE1X0NMSUVOVF9URVNUU19IXworI2lmbmRlZiBfVEVTVF9JMDE1X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDE1X0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE2L3Rlc3RfaTAxNi5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTYvdGVzdF9pMDE2LmMKaW5kZXggNmVkYmJlOS4uYTk5ZmEzZiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTYvdGVzdF9pMDE2LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTYvdGVzdF9pMDE2LmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDE2LmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNi90ZXN0X2kwMTYuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE2L3Rlc3RfaTAxNi5oCmluZGV4IDQyNjZkNDcuLmZmYjc4ZTEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE2L3Rlc3RfaTAxNi5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE2L3Rlc3RfaTAxNi5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDAxNV9DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwMTVfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwMTVfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwMTVfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTcvdGVzdF9pMDE3LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNy90ZXN0X2kwMTcuYwppbmRleCA0N2M1NGQ3Li41YTA1OTBkIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNy90ZXN0X2kwMTcuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNy90ZXN0X2kwMTcuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMTcuaCIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE3L3Rlc3RfaTAxNy5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTcvdGVzdF9pMDE3LmgKaW5kZXggZjc4MDFkYS4uNjBlNGU4NyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTcvdGVzdF9pMDE3LmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTcvdGVzdF9pMDE3LmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE0LDggKzE0LDggQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCi0jaWZuZGVmIF9URVNUMDE3X0NMSUVOVF9URVNUU19IXwotI2RlZmluZSBfVEVTVDAxN19DTElFTlRfVEVTVFNfSF8KKyNpZm5kZWYgX1RFU1RfSTAxN19DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTAxN19DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxOC90ZXN0X2kwMTguYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE4L3Rlc3RfaTAxOC5jCmluZGV4IDcyNmMyYjkuLmQyM2JjYzkgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE4L3Rlc3RfaTAxOC5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE4L3Rlc3RfaTAxOC5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAxOC5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTgvdGVzdF9pMDE4LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxOC90ZXN0X2kwMTguaAppbmRleCA3NzA4NjI5Li5mOGVlZDBkIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxOC90ZXN0X2kwMTguaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxOC90ZXN0X2kwMTguaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTQsOCArMTQsOCBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KLSNpZm5kZWYgX1RFU1QwMThfQ0xJRU5UX1RFU1RTX0hfCi0jZGVmaW5lIF9URVNUMDE4X0NMSUVOVF9URVNUU19IXworI2lmbmRlZiBfVEVTVF9JMDE4X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDE4X0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE5L3Rlc3RfaTAxOS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTkvdGVzdF9pMDE5LmMKaW5kZXggM2U4MWU0OS4uMzA1MGJhNyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTkvdGVzdF9pMDE5LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTkvdGVzdF9pMDE5LmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDE5LmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxOS90ZXN0X2kwMTkuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE5L3Rlc3RfaTAxOS5oCmluZGV4IDBlMWZmNzMuLjM5YzAwNjUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE5L3Rlc3RfaTAxOS5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE5L3Rlc3RfaTAxOS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDAxOV9DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwMTlfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwMTlfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwMTlfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjAvdGVzdF9pMDIwLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMC90ZXN0X2kwMjAuYwppbmRleCA2MmY1ODhkLi4zMWYzYjUwIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMC90ZXN0X2kwMjAuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMC90ZXN0X2kwMjAuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMjAuaCIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIwL3Rlc3RfaTAyMC5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjAvdGVzdF9pMDIwLmgKaW5kZXggNzdiNDQxMy4uN2I5YzFlYiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjAvdGVzdF9pMDIwLmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjAvdGVzdF9pMDIwLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE0LDggKzE0LDggQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCi0jaWZuZGVmIF9URVNUMDIwX0NMSUVOVF9URVNUU19IXwotI2RlZmluZSBfVEVTVDAyMF9DTElFTlRfVEVTVFNfSF8KKyNpZm5kZWYgX1RFU1RfSTAyMF9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTAyMF9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMS90ZXN0X2kwMjEuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIxL3Rlc3RfaTAyMS5jCmluZGV4IDE3MmZiMzAuLjQyYjYxMWUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIxL3Rlc3RfaTAyMS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIxL3Rlc3RfaTAyMS5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAyMS5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjEvdGVzdF9pMDIxLmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMS90ZXN0X2kwMjEuaAppbmRleCAxZDAzMzY3Li40MDAyNTYzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMS90ZXN0X2kwMjEuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMS90ZXN0X2kwMjEuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTQsOCArMTQsOCBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KLSNpZm5kZWYgX1RFU1QwMjFfQ0xJRU5UX1RFU1RTX0hfCi0jZGVmaW5lIF9URVNUMDIxX0NMSUVOVF9URVNUU19IXworI2lmbmRlZiBfVEVTVF9JMDIxX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDIxX0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIyL3Rlc3RfaTAyMi5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjIvdGVzdF9pMDIyLmMKaW5kZXggMTA4NWNiMC4uNmZjNWFjNSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjIvdGVzdF9pMDIyLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjIvdGVzdF9pMDIyLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDIyLmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMi90ZXN0X2kwMjIuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIyL3Rlc3RfaTAyMi5oCmluZGV4IGI1OTI4YTkuLmI2NzA4MWYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIyL3Rlc3RfaTAyMi5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIyL3Rlc3RfaTAyMi5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDAyMl9DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwMjJfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwMjJfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwMjJfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjMvdGVzdF9pMDIzLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMy90ZXN0X2kwMjMuYwppbmRleCAwODI3NTQ0Li4xNjQ1NTJhIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMy90ZXN0X2kwMjMuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMy90ZXN0X2kwMjMuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMjMuaCIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIzL3Rlc3RfaTAyMy5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjMvdGVzdF9pMDIzLmgKaW5kZXggODEyMzc5Zi4uYjAzOTRmMSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjMvdGVzdF9pMDIzLmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjMvdGVzdF9pMDIzLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE0LDggKzE0LDggQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCi0jaWZuZGVmIF9URVNUMDIzX0NMSUVOVF9URVNUU19IXwotI2RlZmluZSBfVEVTVDAyM19DTElFTlRfVEVTVFNfSF8KKyNpZm5kZWYgX1RFU1RfSTAyM19DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTAyM19DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNC90ZXN0X2kwMjQuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI0L3Rlc3RfaTAyNC5jCmluZGV4IGQ2YTg1NTEuLmI4ZmZhYWIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI0L3Rlc3RfaTAyNC5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI0L3Rlc3RfaTAyNC5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAyNC5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjQvdGVzdF9pMDI0LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNC90ZXN0X2kwMjQuaAppbmRleCAzMTgxYWZhLi4xMDliYTg2IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNC90ZXN0X2kwMjQuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNC90ZXN0X2kwMjQuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTQsOCArMTQsOCBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KLSNpZm5kZWYgX1RFU1QwMjRfQ0xJRU5UX1RFU1RTX0hfCi0jZGVmaW5lIF9URVNUMDI0X0NMSUVOVF9URVNUU19IXworI2lmbmRlZiBfVEVTVF9JMDI0X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDI0X0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI1L3Rlc3RfaTAyNS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjUvdGVzdF9pMDI1LmMKaW5kZXggYThjZDcyNi4uNDk1MjQ3ZiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjUvdGVzdF9pMDI1LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjUvdGVzdF9pMDI1LmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDI1LmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNS90ZXN0X2kwMjUuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI1L3Rlc3RfaTAyNS5oCmluZGV4IGNkMzY4YmUuLjJjYzU4ZWUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI1L3Rlc3RfaTAyNS5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI1L3Rlc3RfaTAyNS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDAyNV9DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwMjVfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwMjVfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwMjVfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjYvdGVzdF9pMDI2LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNi90ZXN0X2kwMjYuYwppbmRleCAyYzQxZDE4Li5jZWRjNGQ2IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNi90ZXN0X2kwMjYuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNi90ZXN0X2kwMjYuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMjYuaCIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI2L3Rlc3RfaTAyNi5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjYvdGVzdF9pMDI2LmgKaW5kZXggOTRlMGE4OC4uNDFkMTRkYiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjYvdGVzdF9pMDI2LmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjYvdGVzdF9pMDI2LmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE0LDggKzE0LDggQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCi0jaWZuZGVmIF9URVNUMDI2X0NMSUVOVF9URVNUU19IXwotI2RlZmluZSBfVEVTVDAyNl9DTElFTlRfVEVTVFNfSF8KKyNpZm5kZWYgX1RFU1RfSTAyNl9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTAyNl9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNy90ZXN0X2kwMjcuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI3L3Rlc3RfaTAyNy5jCmluZGV4IDI4NTcxMzIuLjJjNjlmNzkgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI3L3Rlc3RfaTAyNy5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI3L3Rlc3RfaTAyNy5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAyNy5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjcvdGVzdF9pMDI3LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNy90ZXN0X2kwMjcuaAppbmRleCAwZTg3NDY1Li4yOTk2MTY3IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNy90ZXN0X2kwMjcuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNy90ZXN0X2kwMjcuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTQsOCArMTQsOCBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KLSNpZm5kZWYgX1RFU1QwMjdfQ0xJRU5UX1RFU1RTX0hfCi0jZGVmaW5lIF9URVNUMDI3X0NMSUVOVF9URVNUU19IXworI2lmbmRlZiBfVEVTVF9JMDI3X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDI3X0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI4L3Rlc3RfaTAyOC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjgvdGVzdF9pMDI4LmMKaW5kZXggNGQ2MzczMi4uMGUzNTM5ZiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjgvdGVzdF9pMDI4LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjgvdGVzdF9pMDI4LmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDI4LmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyOC90ZXN0X2kwMjguaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI4L3Rlc3RfaTAyOC5oCmluZGV4IGQ4YWRmZTkuLjgzNjhmYTEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI4L3Rlc3RfaTAyOC5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI4L3Rlc3RfaTAyOC5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDAyOF9DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwMjhfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwMjhfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwMjhfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjkvdGVzdF9pMDI5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyOS90ZXN0X2kwMjkuYwppbmRleCBiODY3ZWI3Li42OWYzYzUxIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyOS90ZXN0X2kwMjkuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyOS90ZXN0X2kwMjkuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMjkuaCIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI5L3Rlc3RfaTAyOS5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjkvdGVzdF9pMDI5LmgKaW5kZXggMDFjYzdiZi4uMTQxMTliYyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjkvdGVzdF9pMDI5LmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjkvdGVzdF9pMDI5LmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE0LDggKzE0LDggQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCi0jaWZuZGVmIF9URVNUMDI5X0NMSUVOVF9URVNUU19IXwotI2RlZmluZSBfVEVTVDAyOV9DTElFTlRfVEVTVFNfSF8KKyNpZm5kZWYgX1RFU1RfSTAyOV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTAyOV9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMC90ZXN0X2kwMzAuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMwL3Rlc3RfaTAzMC5jCmluZGV4IDZiMzgzZWQuLjNhNGE3NjcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMwL3Rlc3RfaTAzMC5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMwL3Rlc3RfaTAzMC5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAzMC5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzAvdGVzdF9pMDMwLmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMC90ZXN0X2kwMzAuaAppbmRleCA2NDExOTViLi5mYWZiMmE4IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMC90ZXN0X2kwMzAuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMC90ZXN0X2kwMzAuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTQsOCArMTQsOCBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KLSNpZm5kZWYgX1RFU1QwMzBfQ0xJRU5UX1RFU1RTX0hfCi0jZGVmaW5lIF9URVNUMDMwX0NMSUVOVF9URVNUU19IXworI2lmbmRlZiBfVEVTVF9JMDMwX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDMwX0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMxL3Rlc3RfaTAzMS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzEvdGVzdF9pMDMxLmMKaW5kZXggZDgwMmQxOC4uZmZhNWE3YyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzEvdGVzdF9pMDMxLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzEvdGVzdF9pMDMxLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDMxLmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMS90ZXN0X2kwMzEuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMxL3Rlc3RfaTAzMS5oCmluZGV4IDYzMjI4OGQuLmNlYjE2ZjggMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMxL3Rlc3RfaTAzMS5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMxL3Rlc3RfaTAzMS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDAzMV9DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwMzFfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwMzFfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwMzFfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzIvdGVzdF9pMDMyLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMi90ZXN0X2kwMzIuYwppbmRleCBmOGI3YWRjLi43MTIyNTRiIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMi90ZXN0X2kwMzIuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMi90ZXN0X2kwMzIuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMzIuaCIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMyL3Rlc3RfaTAzMi5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzIvdGVzdF9pMDMyLmgKaW5kZXggNDc0Y2VlZS4uOGVhOGJkNCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzIvdGVzdF9pMDMyLmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzIvdGVzdF9pMDMyLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE0LDggKzE0LDggQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCi0jaWZuZGVmIF9URVNUMDMyX0NMSUVOVF9URVNUU19IXwotI2RlZmluZSBfVEVTVDAzMl9DTElFTlRfVEVTVFNfSF8KKyNpZm5kZWYgX1RFU1RfSTAzMl9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTAzMl9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMy90ZXN0X2kwMzMuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMzL3Rlc3RfaTAzMy5jCmluZGV4IDRlZWQ2NTMuLjY4ZTM1YmMgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMzL3Rlc3RfaTAzMy5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMzL3Rlc3RfaTAzMy5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAzMy5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzMvdGVzdF9pMDMzLmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMy90ZXN0X2kwMzMuaAppbmRleCBhMGVhMWU4Li4yYzY1MjczIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMy90ZXN0X2kwMzMuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMy90ZXN0X2kwMzMuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTQsOCArMTQsOCBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KLSNpZm5kZWYgX1RFU1QwMzNfQ0xJRU5UX1RFU1RTX0hfCi0jZGVmaW5lIF9URVNUMDMzX0NMSUVOVF9URVNUU19IXworI2lmbmRlZiBfVEVTVF9JMDMzX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDMzX0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM0L3Rlc3RfaTAzNC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzQvdGVzdF9pMDM0LmMKaW5kZXggNGZhMWJiZS4uZDU3MDU3YiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzQvdGVzdF9pMDM0LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzQvdGVzdF9pMDM0LmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDM0LmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzNC90ZXN0X2kwMzQuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM0L3Rlc3RfaTAzNC5oCmluZGV4IDgzNzI4OGQuLjJhN2JlNjIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM0L3Rlc3RfaTAzNC5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM0L3Rlc3RfaTAzNC5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDAzNF9DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwMzRfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwMzRfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwMzRfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzUvdGVzdF9pMDM1LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzNS90ZXN0X2kwMzUuYwppbmRleCAxMWM1OGRlLi40MDFkMjkyIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzNS90ZXN0X2kwMzUuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzNS90ZXN0X2kwMzUuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMzUuaCIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM1L3Rlc3RfaTAzNS5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzUvdGVzdF9pMDM1LmgKaW5kZXggYWY3NzFjZi4uNDg2NjQ2MyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzUvdGVzdF9pMDM1LmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzUvdGVzdF9pMDM1LmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE0LDggKzE0LDggQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCi0jaWZuZGVmIF9URVNUMDM1X0NMSUVOVF9URVNUU19IXwotI2RlZmluZSBfVEVTVDAzNV9DTElFTlRfVEVTVFNfSF8KKyNpZm5kZWYgX1RFU1RfSTAzNV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTAzNV9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzNi90ZXN0X2kwMzYuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM2L3Rlc3RfaTAzNi5jCmluZGV4IDk5NDUxNjEuLjBkYWY2MzUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM2L3Rlc3RfaTAzNi5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM2L3Rlc3RfaTAzNi5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAzNi5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzYvdGVzdF9pMDM2LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzNi90ZXN0X2kwMzYuaAppbmRleCA5YjRlZjY0Li42YzE4ZTYwIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzNi90ZXN0X2kwMzYuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzNi90ZXN0X2kwMzYuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTQsOCArMTQsOCBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KLSNpZm5kZWYgX1RFU1QwMzZfQ0xJRU5UX1RFU1RTX0hfCi0jZGVmaW5lIF9URVNUMDM2X0NMSUVOVF9URVNUU19IXworI2lmbmRlZiBfVEVTVF9JMDM2X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDM2X0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM3L3Rlc3RfaTAzNy5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzcvdGVzdF9pMDM3LmMKaW5kZXggNTM3ZTUyNS4uOGEwZDgyMSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzcvdGVzdF9pMDM3LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzcvdGVzdF9pMDM3LmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDM3LmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzNy90ZXN0X2kwMzcuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM3L3Rlc3RfaTAzNy5oCmluZGV4IDBjZWQ5MDcuLjRkZGU4NzIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM3L3Rlc3RfaTAzNy5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM3L3Rlc3RfaTAzNy5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDAzN19DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwMzdfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwMzdfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwMzdfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzgvdGVzdF9pMDM4LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzOC90ZXN0X2kwMzguYwppbmRleCA0NjhkMTA2Li45OGRkNGEwIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzOC90ZXN0X2kwMzguYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzOC90ZXN0X2kwMzguYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMzguaCIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM4L3Rlc3RfaTAzOC5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzgvdGVzdF9pMDM4LmgKaW5kZXggYThiOTllMy4uMzU3OTgwMyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzgvdGVzdF9pMDM4LmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzgvdGVzdF9pMDM4LmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE0LDggKzE0LDggQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCi0jaWZuZGVmIF9URVNUMDM4X0NMSUVOVF9URVNUU19IXwotI2RlZmluZSBfVEVTVDAzOF9DTElFTlRfVEVTVFNfSF8KKyNpZm5kZWYgX1RFU1RfSTAzOF9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTAzOF9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzOS90ZXN0X2kwMzkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM5L3Rlc3RfaTAzOS5jCmluZGV4IGIyZjRkZTQuLjJkYjM5YWUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM5L3Rlc3RfaTAzOS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM5L3Rlc3RfaTAzOS5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAzOS5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzkvdGVzdF9pMDM5LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzOS90ZXN0X2kwMzkuaAppbmRleCA1YTg3YjJlLi44NTNhMTFhIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzOS90ZXN0X2kwMzkuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzOS90ZXN0X2kwMzkuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTQsOCArMTQsOCBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KLSNpZm5kZWYgX1RFU1QwMzlfQ0xJRU5UX1RFU1RTX0hfCi0jZGVmaW5lIF9URVNUMDM5X0NMSUVOVF9URVNUU19IXworI2lmbmRlZiBfVEVTVF9JMDM5X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDM5X0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQwL3Rlc3RfaTA0MC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDAvdGVzdF9pMDQwLmMKaW5kZXggMDU5MjIwMC4uZWMwMjA2NyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDAvdGVzdF9pMDQwLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDAvdGVzdF9pMDQwLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDQwLmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0MC90ZXN0X2kwNDAuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQwL3Rlc3RfaTA0MC5oCmluZGV4IDJlNDcyYWMuLjZhMzQxYTQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQwL3Rlc3RfaTA0MC5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQwL3Rlc3RfaTA0MC5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDA0MF9DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwNDBfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwNDBfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwNDBfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDEvdGVzdF9pMDQxLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0MS90ZXN0X2kwNDEuYwppbmRleCAyODlmYmY2Li5hNDI3NWE5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0MS90ZXN0X2kwNDEuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0MS90ZXN0X2kwNDEuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwNDEuaCIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQxL3Rlc3RfaTA0MS5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDEvdGVzdF9pMDQxLmgKaW5kZXggN2FlMjM4NC4uMmRiZDE1ZiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDEvdGVzdF9pMDQxLmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDEvdGVzdF9pMDQxLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE0LDggKzE0LDggQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCi0jaWZuZGVmIF9URVNUMDQxX0NMSUVOVF9URVNUU19IXwotI2RlZmluZSBfVEVTVDA0MV9DTElFTlRfVEVTVFNfSF8KKyNpZm5kZWYgX1RFU1RfSTA0MV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA0MV9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Mi90ZXN0X2kwNDIuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQyL3Rlc3RfaTA0Mi5jCmluZGV4IGZmNTZhNjMuLjRjNzY1MmUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQyL3Rlc3RfaTA0Mi5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQyL3Rlc3RfaTA0Mi5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTA0Mi5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDIvdGVzdF9pMDQyLmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Mi90ZXN0X2kwNDIuaAppbmRleCA2OTc0MzRhLi5jYmJmZmM0IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Mi90ZXN0X2kwNDIuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Mi90ZXN0X2kwNDIuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTQsOCArMTQsOCBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KLSNpZm5kZWYgX1RFU1QwNDJfQ0xJRU5UX1RFU1RTX0hfCi0jZGVmaW5lIF9URVNUMDQyX0NMSUVOVF9URVNUU19IXworI2lmbmRlZiBfVEVTVF9JMDQyX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDQyX0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQzL3Rlc3RfaTA0My5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDMvdGVzdF9pMDQzLmMKaW5kZXggMjRlZTA1OC4uNmJlYmZlMyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDMvdGVzdF9pMDQzLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDMvdGVzdF9pMDQzLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDQzLmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0My90ZXN0X2kwNDMuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQzL3Rlc3RfaTA0My5oCmluZGV4IGQ1OGI5MDYuLmVmYTA1MWUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQzL3Rlc3RfaTA0My5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQzL3Rlc3RfaTA0My5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDA0M19DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwNDNfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwNDNfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwNDNfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDQvdGVzdF9pMDQ0LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0NC90ZXN0X2kwNDQuYwppbmRleCBmZjM5NjJhLi4xNzI4OWUxIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0NC90ZXN0X2kwNDQuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0NC90ZXN0X2kwNDQuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwNDQuaCIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ0L3Rlc3RfaTA0NC5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDQvdGVzdF9pMDQ0LmgKaW5kZXggMWZhY2YxNC4uYWYzMDg1MiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDQvdGVzdF9pMDQ0LmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDQvdGVzdF9pMDQ0LmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE0LDggKzE0LDggQEAKICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCi0jaWZuZGVmIF9URVNUMDQ0X0NMSUVOVF9URVNUU19IXwotI2RlZmluZSBfVEVTVDA0NF9DTElFTlRfVEVTVFNfSF8KKyNpZm5kZWYgX1RFU1RfSTA0NF9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA0NF9DTElFTlRfVEVTVFNfSF8KIAogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0NS90ZXN0X2kwNDUuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ1L3Rlc3RfaTA0NS5jCmluZGV4IGJhNmEzMWMuLjNiMTVmOTYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ1L3Rlc3RfaTA0NS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ1L3Rlc3RfaTA0NS5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTA0NS5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDUvdGVzdF9pMDQ1LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0NS90ZXN0X2kwNDUuaAppbmRleCA4MDk3MjFjLi40NTJhYjIwIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0NS90ZXN0X2kwNDUuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0NS90ZXN0X2kwNDUuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTQsOCArMTQsOCBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KLSNpZm5kZWYgX1RFU1QwNDVfQ0xJRU5UX1RFU1RTX0hfCi0jZGVmaW5lIF9URVNUMDQ1X0NMSUVOVF9URVNUU19IXworI2lmbmRlZiBfVEVTVF9JMDQ1X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDQ1X0NMSUVOVF9URVNUU19IXwogCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ2L3Rlc3RfaTA0Ni5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDYvdGVzdF9pMDQ2LmMKaW5kZXggMjNjMTkyZi4uMDYxMzk2OSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDYvdGVzdF9pMDQ2LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDYvdGVzdF9pMDQ2LmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDQ2LmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Ni90ZXN0X2kwNDYuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ2L3Rlc3RfaTA0Ni5oCmluZGV4IDQ2NDYxMzcuLjg3NGJlOTcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ2L3Rlc3RfaTA0Ni5oCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ2L3Rlc3RfaTA0Ni5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwotI2lmbmRlZiBfVEVTVDA0Nl9DTElFTlRfVEVTVFNfSF8KLSNkZWZpbmUgX1RFU1QwNDZfQ0xJRU5UX1RFU1RTX0hfCisjaWZuZGVmIF9URVNUX0kwNDZfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwNDZfQ0xJRU5UX1RFU1RTX0hfCiAKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDcvc291cmNlLm1rIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDcvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzQ5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Ny9zb3VyY2UubWsKQEAgLTAsMCArMSwyNSBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9pMDQ3LmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KKworQ0NfU09VUkNFX1NQRSAgPSB0ZXN0X2kwNDcuYyB0ZXN0X3N1cHBfaTA0Ny5jCitDQ19PUFRJT05TX1NQRSA9CitBU19TT1VSQ0VfU1BFICA9CitBU19PUFRJT05TX1NQRSA9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDcvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDcvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMjQ1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Ny90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA0Ny5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDQ3KQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgcHNhX2dldCB3aXRoIGludmFsaWQgbXNnIHBvaW50ZXJcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfTE9XX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2kwNDdfY2xpZW50X3Rlc3RzX2xpc3QsIFRSVUUpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Ny90ZXN0X2kwNDcuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ3L3Rlc3RfaTA0Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OWM2YjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Ny90ZXN0X2kwNDcuYwpAQCAtMCwwICsxLDUyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDQ3LmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDQ3X2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9wc2FfZ2V0X3dpdGhfaW52YWxpZF9tc2dfcG9pbnRlciwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfZ2V0X3dpdGhfaW52YWxpZF9tc2dfcG9pbnRlcihzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIHBzYV9oYW5kbGVfdCAgICAgICBoYW5kbGUgPSAwOworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsCisgICAgICAgICAgICAiW0NoZWNrMV0gVGVzdCBwc2FfZ2V0IHdpdGggaW52YWxpZCBtc2cgcG9pbnRlclxuIiwgMCk7CisKKyAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CisgICBpZiAoaGFuZGxlID4gMCkKKyAgIHsKKyAgICAgICBwc2EtPmNsb3NlKGhhbmRsZSk7CisgICB9CisKKyAgIC8qIEV4cGVjdGF0aW9uIGlzIHNlcnZlciB0ZXN0IHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX2Nvbm5lY3Qgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKworICAgKHZvaWQpKGhhbmRsZSk7CisgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDcvdGVzdF9pMDQ3LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Ny90ZXN0X2kwNDcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDYyZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDcvdGVzdF9pMDQ3LmgKQEAgLTAsMCArMSwzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA0N19DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA0N19DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA0NykKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNDdfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfZ2V0X3dpdGhfaW52YWxpZF9tc2dfcG9pbnRlcihzZWN1cml0eV90KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDcvdGVzdF9zdXBwX2kwNDcuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ3L3Rlc3Rfc3VwcF9pMDQ3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQxYWE5NwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ3L3Rlc3Rfc3VwcF9pMDQ3LmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKworCitpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9nZXRfd2l0aF9pbnZhbGlkX21zZ19wb2ludGVyKHZvaWQpOworCitzZXJ2ZXJfdGVzdF90IHRlc3RfaTA0N19zZXJ2ZXJfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgc2VydmVyX3Rlc3RfcHNhX2dldF93aXRoX2ludmFsaWRfbXNnX3BvaW50ZXIsCisgICAgTlVMTCwKK307CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2dldF93aXRoX2ludmFsaWRfbXNnX3BvaW50ZXIodm9pZCkKK3sKKyAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgIHBzYV9zaWduYWxfdCAgICAgICAgICAgIHNpZ25hbHMgPSAwOworICAgcHNhX21zZ190ICAgICAgICAgICAgICAgKmludmFsaWRfbXNnID0gTlVMTDsKKyAgIG1pc2NlbGxhbmVvdXNfZGVzY190ICAgICptaXNjX2Rlc2M7CisgICBtZW1vcnlfZGVzY190ICAgICAgICAgICAqbWVtb3J5X2Rlc2M7CisKKyAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQorICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAorICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKKyAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KKyAgICAqCisgICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKi8KKworICAgIHNpZ25hbHMgPSBwc2Ffd2FpdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgUFNBX0JMT0NLKTsKKyAgICBpZiAoKHNpZ25hbHMgJiBTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRykgPT0gMCkKKyAgICB7CisgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLAorICAgICAgICAgICAgICAgICJwc2Ffd2FpdCByZXR1cm5lZCB3aXRoIGludmFsaWQgc2lnbmFsIHZhbHVlID0gMHgleFxuIiwgc2lnbmFscyk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgfQorCisgICAgLyogU2VsZWN0aW9uIG9mIGludmFsaWQgbXNnIHBvaW50ZXI6CisgICAgICogIGlmIChJU09MQVRJT05fTEVWRUwgPiAxKQorICAgICAqICAgICAgIG1zZ19wb2ludGVyID0gZHJpdmVyX21taW9fcmVnaW9uX2Jhc2U7CisgICAgICogIGVsc2UKKyAgICAgKiAgICAgICBtc2dfcG9pbnRlciA9IE5VTEw7CisgICAgICovCisKKyAgICBzdGF0dXMgPSB2YWxfdGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUlTQ0VMTEFORU9VUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlTQ0VMTEFORU9VU19EVVQsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICoqKSZtaXNjX2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopc2l6ZW9mKG1pc2NlbGxhbmVvdXNfZGVzY190KSk7CisgICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgaWYgKG1pc2NfZGVzYy0+aW1wbGVtZW50ZWRfcHNhX2Zpcm13YXJlX2lzb2xhdGlvbl9sZXZlbCA+IExFVkVMMSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IHZhbF90YXJnZXRfZ2V0X2NvbmZpZyhUQVJHRVRfQ09ORklHX0NSRUFURV9JRChHUk9VUF9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTU9SWV9EUklWRVJfUEFSVElUSU9OX01NSU8sIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKikmbWVtb3J5X2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKXNpemVvZihtZW1vcnlfZGVzY190KSk7CisgICAgICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKworICAgICAgICBpbnZhbGlkX21zZyA9IChwc2FfbXNnX3QgKikgbWVtb3J5X2Rlc2MtPnN0YXJ0OworICAgIH0KKworICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLworICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKSkKKyAgICB7CisgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgfQorCisgICAgLyogcHNhX2dldCB3aXRoIGludmFsaWQgbXNnIHBvaW50ZXIgKi8KKyAgICBwc2FfZ2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCBpbnZhbGlkX21zZyk7CisKKyAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgICAgIlx0cHNhX2dldCB3aXRoIGludmFsaWQgbXNnIHBvaW50ZXIgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKworICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgIHsKKyAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgfQorCisgICAgLyogUmVqZWN0IHRoZSBjb25uZWN0aW9uICovCisgICAgcHNhX3JlcGx5KGludmFsaWRfbXNnLT5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0OC9zb3VyY2UubWsgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0OC9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0YjQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ4L3NvdXJjZS5tawpAQCAtMCwwICsxLDI1IEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2kwNDguYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQorCitDQ19TT1VSQ0VfU1BFICA9IHRlc3RfaTA0OC5jIHRlc3Rfc3VwcF9pMDQ4LmMKK0NDX09QVElPTlNfU1BFID0KK0FTX1NPVVJDRV9TUEUgID0KK0FTX09QVElPTlNfU1BFID0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0OC90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0OC90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVjYmFhYQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ4L3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDU5IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9pMDQ4LmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfRkZfQkFTRSwgNDgpCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBwc2FfY2FsbCB3aXRoIGludmFsaWQgYWRkcmVzcyBmb3IgaW5fdmVjXG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0xPV19USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NsaWVudF90ZXN0c19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9pMDQ4X2NsaWVudF90ZXN0c19saXN0LCBUUlVFKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBTd2l0Y2ggdG8gc2VjdXJlIHNpZGUgKGNsaWVudF9wYXJ0aXRpb24uYykgYW5kIGV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4KKyAgICB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBTZWN1cmUgc2lkZSAqLworICAgIHN0YXR1cyA9IHZhbC0+c3dpdGNoX3RvX3NlY3VyZV9jbGllbnQoVEVTVF9OVU0pOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0OC90ZXN0X2kwNDguYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ4L3Rlc3RfaTA0OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxODIzNmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0OC90ZXN0X2kwNDguYwpAQCAtMCwwICsxLDEzMiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjZWxzZQorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInRlc3RfaTA0OC5oIgorCitjbGllbnRfdGVzdF90IHRlc3RfaTA0OF9jbGllbnRfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgY2xpZW50X3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX2ludmVjX3BvaW50ZXIsCisgICAgTlVMTCwKK307CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX2ludmVjX3BvaW50ZXIoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICBwc2FfaGFuZGxlX3QgICAgICAgICAgICBoYW5kbGUgPSAwOworICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgc3RhdHVzX29mX2NhbGw7CisgICBib290X3N0YXRlX3QgICAgICAgICAgICBib290X3N0YXRlOworICAgbWlzY2VsbGFuZW91c19kZXNjX3QgICAgKm1pc2NfZGVzYzsKKyAgIG1lbW9yeV9kZXNjX3QgICAgICAgICAgICptZW1vcnlfZGVzYzsKKyAgIHBzYV9pbnZlYyAgICAgICAgICAgICAgICppbnZhbGlkX2ludmVjID0gTlVMTDsKKworICAgdmFsLT5wcmludChQUklOVF9URVNULAorICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX2NhbGwgd2l0aCBpbnZhbGlkIGFkZHJlc3MgZm9yIGluX3ZlY1xuIiwgMCk7CisKKyAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQorICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAorICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKKyAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KKyAgICAqCisgICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKi8KKworICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKKworICAgaWYgKGhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisgICAvKiBTZWxlY3Rpb24gb2YgaW52YWxpZCBpbnZlYyBwb2ludGVyOgorICAgICogaWYgY2FsbGVyID09IE5PTlNFQ1VSRQorICAgICogICAgLy8gUFNBIFJvVCBwb2ludGVyCisgICAgKiAgICBpbnZlY19wb2ludGVyID0gZHJpdmVyX21taW9fcmVnaW9uX2Jhc2U7CisgICAgKiBlbHNlCisgICAgKiAgICBpZiAoSVNPTEFUSU9OX0xFVkVMID4gMSkKKyAgICAqICAgICAgIGludmVjX3BvaW50ZXIgPSBkcml2ZXJfbW1pb19yZWdpb25fYmFzZTsKKyAgICAqICAgIGVsc2UKKyAgICAqICAgICAgIGludmVjX3BvaW50ZXIgPSBOVUxMOworICAgICovCisKKyAgIHN0YXR1cyA9IHZhbC0+dGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTU9SWV9EUklWRVJfUEFSVElUSU9OX01NSU8sIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICoqKSZtZW1vcnlfZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QgKilzaXplb2YobWVtb3J5X2Rlc2NfdCkpOworICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDEwMSksIHN0YXR1cykpCisgICB7CisgICAgICAgcHNhLT5jbG9zZShoYW5kbGUpOworICAgICAgIHJldHVybiBzdGF0dXM7CisgICB9CisKKyAgIGlmIChjYWxsZXIgPT0gTk9OU0VDVVJFKQorICAgICAgIGludmFsaWRfaW52ZWMgPSAocHNhX2ludmVjICopIG1lbW9yeV9kZXNjLT5zdGFydDsKKyAgIGVsc2UKKyAgIHsKKyAgICAgICBzdGF0dXMgPSB2YWwtPnRhcmdldF9nZXRfY29uZmlnKFRBUkdFVF9DT05GSUdfQ1JFQVRFX0lEKEdST1VQX01JU0NFTExBTkVPVVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JU0NFTExBTkVPVVNfRFVULCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKikmbWlzY19kZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKXNpemVvZihtaXNjZWxsYW5lb3VzX2Rlc2NfdCkpOworCisgICAgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDEwMiksIHN0YXR1cykpCisgICAgICAgeworICAgICAgICAgICBwc2EtPmNsb3NlKGhhbmRsZSk7CisgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgfQorCisgICAgICAgaWYgKG1pc2NfZGVzYy0+aW1wbGVtZW50ZWRfcHNhX2Zpcm13YXJlX2lzb2xhdGlvbl9sZXZlbCA+IExFVkVMMSkKKyAgICAgICAgICAgaW52YWxpZF9pbnZlYyA9IChwc2FfaW52ZWMgKikgbWVtb3J5X2Rlc2MtPnN0YXJ0OworICAgfQorCisgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgIGJvb3Rfc3RhdGUgPSAoY2FsbGVyID09IE5PTlNFQ1VSRSkgPyBCT09UX0VYUEVDVEVEX05TIDogQk9PVF9FWFBFQ1RFRF9TOworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhib290X3N0YXRlKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgICAvKiBUZXN0IGNoZWNrLSBwc2FfY2FsbCB3aXRoIGludmFsaWQgYWRkcmVzcyBmb3IgaW5fdmVjICovCisgICBzdGF0dXNfb2ZfY2FsbCA9ICBwc2EtPmNhbGwoaGFuZGxlLCBpbnZhbGlkX2ludmVjLCAxLCBOVUxMLCAwKTsKKworICAgLyogRXhwZWN0YXRpb24gaXMgcHNhX2NhbGwgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworCisgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICh2b2lkKShzdGF0dXNfb2ZfY2FsbCk7CisgICByZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDgvdGVzdF9pMDQ4LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0OC90ZXN0X2kwNDguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTM4ZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDgvdGVzdF9pMDQ4LmgKQEAgLTAsMCArMSwzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA0OF9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA0OF9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA0OCkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNDhfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaW52ZWNfcG9pbnRlcihzZWN1cml0eV90KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDgvdGVzdF9zdXBwX2kwNDguYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ4L3Rlc3Rfc3VwcF9pMDQ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM4NDk5MAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ4L3Rlc3Rfc3VwcF9pMDQ4LmMKQEAgLTAsMCArMSw1MiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorCitpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9pbnZlY19wb2ludGVyKHZvaWQpOworCitzZXJ2ZXJfdGVzdF90IHRlc3RfaTA0OF9zZXJ2ZXJfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgc2VydmVyX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX2ludmVjX3BvaW50ZXIsCisgICAgTlVMTCwKK307CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX2ludmVjX3BvaW50ZXIodm9pZCkKK3sKKyAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CisKKyAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgeworICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKworICAgIHZhbF9wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisKKyAgICAvKiBDb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLworICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0Q29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmVcbiIsIDApOworICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisKKyAgICB2YWxfcHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ5L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ5L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDZhM2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDkvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA0OS5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDQ5LmMgdGVzdF9zdXBwX2kwNDkuYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ5L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ5L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzIyNTg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDkvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2kwNDkuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9GRl9CQVNFLCA0OSkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIHBzYV9jYWxsIHdpdGggaW52YWxpZCBhZGRyZXNzIGZvciBvdXR2ZWNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfTE9XX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2kwNDlfY2xpZW50X3Rlc3RzX2xpc3QsIFRSVUUpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIFN3aXRjaCB0byBzZWN1cmUgc2lkZSAoY2xpZW50X3BhcnRpdGlvbi5jKSBhbmQgZXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbgorICAgIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIFNlY3VyZSBzaWRlICovCisgICAgc3RhdHVzID0gdmFsLT5zd2l0Y2hfdG9fc2VjdXJlX2NsaWVudChURVNUX05VTSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ5L3Rlc3RfaTA0OS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDkvdGVzdF9pMDQ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE5OTlkZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ5L3Rlc3RfaTA0OS5jCkBAIC0wLDAgKzEsMTMyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDQ5LmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDQ5X2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfb3V0dmVjX3BvaW50ZXIsCisgICAgTlVMTCwKK307CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX291dHZlY19wb2ludGVyKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgaW50MzJfdCAgICAgICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworICAgcHNhX2hhbmRsZV90ICAgICAgICAgICAgaGFuZGxlID0gMDsKKyAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIHN0YXR1c19vZl9jYWxsOworICAgYm9vdF9zdGF0ZV90ICAgICAgICAgICAgYm9vdF9zdGF0ZTsKKyAgIG1pc2NlbGxhbmVvdXNfZGVzY190ICAgICptaXNjX2Rlc2M7CisgICBtZW1vcnlfZGVzY190ICAgICAgICAgICAqbWVtb3J5X2Rlc2M7CisgICBwc2Ffb3V0dmVjICAgICAgICAgICAgICAgKmludmFsaWRfb3V0dmVjID0gTlVMTDsKKworICAgdmFsLT5wcmludChQUklOVF9URVNULAorICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX2NhbGwgd2l0aCBpbnZhbGlkIGFkZHJlc3MgZm9yIG91dHZlY1xuIiwgMCk7CisKKyAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQorICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAorICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKKyAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KKyAgICAqCisgICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKi8KKworICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKKworICAgaWYgKGhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisgICAvKiBTZWxlY3Rpb24gb2YgaW52YWxpZCBvdXR2ZWMgcG9pbnRlcjoKKyAgICAqIGlmIGNhbGxlciA9PSBOT05TRUNVUkUKKyAgICAqICAgIC8vIFBTQSBSb1QgcG9pbnRlcgorICAgICogICAgb3V0dmVjX3BvaW50ZXIgPSBkcml2ZXJfbW1pb19yZWdpb25fYmFzZTsKKyAgICAqIGVsc2UKKyAgICAqICAgIGlmIChJU09MQVRJT05fTEVWRUwgPiAxKQorICAgICogICAgICAgb3V0dmVjX3BvaW50ZXIgPSBkcml2ZXJfbW1pb19yZWdpb25fYmFzZTsKKyAgICAqICAgIGVsc2UKKyAgICAqICAgICAgIG91dHZlY19wb2ludGVyID0gTlVMTDsKKyAgICAqLworCisgICBzdGF0dXMgPSB2YWwtPnRhcmdldF9nZXRfY29uZmlnKFRBUkdFVF9DT05GSUdfQ1JFQVRFX0lEKEdST1VQX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1PUllfRFJJVkVSX1BBUlRJVElPTl9NTUlPLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKikmbWVtb3J5X2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopc2l6ZW9mKG1lbW9yeV9kZXNjX3QpKTsKKyAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgxMDEpLCBzdGF0dXMpKQorICAgeworICAgICAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICAgICByZXR1cm4gc3RhdHVzOworICAgfQorCisgICBpZiAoY2FsbGVyID09IE5PTlNFQ1VSRSkKKyAgICAgICBpbnZhbGlkX291dHZlYyA9IChwc2Ffb3V0dmVjICopIG1lbW9yeV9kZXNjLT5zdGFydDsKKyAgIGVsc2UKKyAgIHsKKyAgICAgICBzdGF0dXMgPSB2YWwtPnRhcmdldF9nZXRfY29uZmlnKFRBUkdFVF9DT05GSUdfQ1JFQVRFX0lEKEdST1VQX01JU0NFTExBTkVPVVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JU0NFTExBTkVPVVNfRFVULCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKikmbWlzY19kZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKXNpemVvZihtaXNjZWxsYW5lb3VzX2Rlc2NfdCkpOworCisgICAgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDEwMiksIHN0YXR1cykpCisgICAgICAgeworICAgICAgICAgICBwc2EtPmNsb3NlKGhhbmRsZSk7CisgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgfQorCisgICAgICAgaWYgKG1pc2NfZGVzYy0+aW1wbGVtZW50ZWRfcHNhX2Zpcm13YXJlX2lzb2xhdGlvbl9sZXZlbCA+IExFVkVMMSkKKyAgICAgICAgICAgaW52YWxpZF9vdXR2ZWMgPSAocHNhX291dHZlYyAqKSBtZW1vcnlfZGVzYy0+c3RhcnQ7CisgICB9CisKKyAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLworICAgYm9vdF9zdGF0ZSA9IChjYWxsZXIgPT0gTk9OU0VDVVJFKSA/IEJPT1RfRVhQRUNURURfTlMgOiBCT09UX0VYUEVDVEVEX1M7CisgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKGJvb3Rfc3RhdGUpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIC8qIFRlc3QgY2hlY2stIHBzYV9jYWxsIHdpdGggaW52YWxpZCBhZGRyZXNzIGZvciBvdXR2ZWMgKi8KKyAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChoYW5kbGUsIE5VTEwsIDAsIGludmFsaWRfb3V0dmVjLCAxKTsKKworICAgLyogRXhwZWN0YXRpb24gaXMgcHNhX2NhbGwgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworCisgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICh2b2lkKShzdGF0dXNfb2ZfY2FsbCk7CisgICByZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDkvdGVzdF9pMDQ5LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0OS90ZXN0X2kwNDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTFlOGQwCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDkvdGVzdF9pMDQ5LmgKQEAgLTAsMCArMSwzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA0OV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA0OV9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA0OSkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNDlfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfb3V0dmVjX3BvaW50ZXIoc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ5L3Rlc3Rfc3VwcF9pMDQ5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0OS90ZXN0X3N1cHBfaTA0OS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZTVkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0OS90ZXN0X3N1cHBfaTA0OS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfb3V0dmVjX3BvaW50ZXIodm9pZCk7CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDQ5X3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfb3V0dmVjX3BvaW50ZXIsCisgICAgTlVMTCwKK307CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX291dHZlY19wb2ludGVyKHZvaWQpCit7CisgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworCisgICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisKKyAgICB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworCisgICAgLyogQ29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KKyAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdENvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlXG4iLCAwKTsKKyAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTIpOworCisgICAgdmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MC9zb3VyY2UubWsgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MC9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkwYzFjYwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUwL3NvdXJjZS5tawpAQCAtMCwwICsxLDI1IEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2kwNTAuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQorCitDQ19TT1VSQ0VfU1BFICA9IHRlc3RfaTA1MC5jIHRlc3Rfc3VwcF9pMDUwLmMKK0NDX09QVElPTlNfU1BFID0KK0FTX1NPVVJDRV9TUEUgID0KK0FTX09QVElPTlNfU1BFID0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MC90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MC90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcxYjU3NQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUwL3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDU5IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9pMDUwLmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfRkZfQkFTRSwgNTApCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBwc2FfY2FsbCB3aXRoIGludmFsaWQgcHNhX2ludmVjLmJhc2VcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfTE9XX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2kwNTBfY2xpZW50X3Rlc3RzX2xpc3QsIFRSVUUpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIFN3aXRjaCB0byBzZWN1cmUgc2lkZSAoY2xpZW50X3BhcnRpdGlvbi5jKSBhbmQgZXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbgorICAgIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIFNlY3VyZSBzaWRlICovCisgICAgc3RhdHVzID0gdmFsLT5zd2l0Y2hfdG9fc2VjdXJlX2NsaWVudChURVNUX05VTSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUwL3Rlc3RfaTA1MC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTAvdGVzdF9pMDUwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1ZmQyMQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUwL3Rlc3RfaTA1MC5jCkBAIC0wLDAgKzEsMTM0IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDUwLmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDUwX2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaW52ZWNfYmFzZSwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaW52ZWNfYmFzZShzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgIHBzYV9oYW5kbGVfdCAgICAgICAgICAgIGhhbmRsZSA9IDA7CisgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBzdGF0dXNfb2ZfY2FsbDsKKyAgIGJvb3Rfc3RhdGVfdCAgICAgICAgICAgIGJvb3Rfc3RhdGU7CisgICBtaXNjZWxsYW5lb3VzX2Rlc2NfdCAgICAqbWlzY19kZXNjOworICAgbWVtb3J5X2Rlc2NfdCAgICAgICAgICAgKm1lbW9yeV9kZXNjOworICAgYWRkcl90ICAgICAgICAgICAgICAgICAgKmludmFsaWRfYmFzZSA9IE5VTEw7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKKyAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IHBzYV9jYWxsIHdpdGggaW52YWxpZCBwc2FfaW52ZWMuYmFzZVxuIiwgMCk7CisKKyAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQorICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAorICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKKyAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KKyAgICAqCisgICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKi8KKworICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKKworICAgaWYgKGhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisgICAvKiBTZWxlY3Rpb24gb2YgaW52YWxpZCBpbnZlYyBwb2ludGVyOgorICAgICogaWYgY2FsbGVyID09IE5PTlNFQ1VSRQorICAgICogICAgLy8gUFNBIFJvVCBwb2ludGVyCisgICAgKiAgICBpbnZhbGlkX2Jhc2UgPSBkcml2ZXJfbW1pb19yZWdpb25fYmFzZTsKKyAgICAqIGVsc2UKKyAgICAqICAgIGlmIChJU09MQVRJT05fTEVWRUwgPiAxKQorICAgICogICAgICAgaW52YWxpZF9iYXNlID0gZHJpdmVyX21taW9fcmVnaW9uX2Jhc2U7CisgICAgKiAgICBlbHNlCisgICAgKiAgICAgICBpbnZhbGlkX2Jhc2UgPSBOVUxMOworICAgICovCisKKyAgIHN0YXR1cyA9IHZhbC0+dGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTU9SWV9EUklWRVJfUEFSVElUSU9OX01NSU8sIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICoqKSZtZW1vcnlfZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QgKilzaXplb2YobWVtb3J5X2Rlc2NfdCkpOworICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDEwMSksIHN0YXR1cykpCisgICB7CisgICAgICAgcHNhLT5jbG9zZShoYW5kbGUpOworICAgICAgIHJldHVybiBzdGF0dXM7CisgICB9CisKKyAgIGlmIChjYWxsZXIgPT0gTk9OU0VDVVJFKQorICAgICAgIGludmFsaWRfYmFzZSA9IChhZGRyX3QgKikgbWVtb3J5X2Rlc2MtPnN0YXJ0OworICAgZWxzZQorICAgeworICAgICAgIHN0YXR1cyA9IHZhbC0+dGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUlTQ0VMTEFORU9VUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlTQ0VMTEFORU9VU19EVVQsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICoqKSZtaXNjX2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopc2l6ZW9mKG1pc2NlbGxhbmVvdXNfZGVzY190KSk7CisKKyAgICAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTAyKSwgc3RhdHVzKSkKKyAgICAgICB7CisgICAgICAgICAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICB9CisKKyAgICAgICBpZiAobWlzY19kZXNjLT5pbXBsZW1lbnRlZF9wc2FfZmlybXdhcmVfaXNvbGF0aW9uX2xldmVsID4gTEVWRUwxKQorICAgICAgICAgICBpbnZhbGlkX2Jhc2UgPSAoYWRkcl90ICopIG1lbW9yeV9kZXNjLT5zdGFydDsKKyAgIH0KKworICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICBib290X3N0YXRlID0gKGNhbGxlciA9PSBOT05TRUNVUkUpID8gQk9PVF9FWFBFQ1RFRF9OUyA6IEJPT1RfRVhQRUNURURfUzsKKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoYm9vdF9zdGF0ZSkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgcHNhX2ludmVjIGludmVjWzFdID0ge3tpbnZhbGlkX2Jhc2UsIHNpemVvZihhZGRyX3QpfX07CisKKyAgIC8qIFRlc3QgY2hlY2stIHBzYV9jYWxsIHdpdGggaW52YWxpZCBhZGRyZXNzIGZvciBwc2FfaW52ZWMuYmFzZSAqLworICAgc3RhdHVzX29mX2NhbGwgPSAgcHNhLT5jYWxsKGhhbmRsZSwgaW52ZWMsIDEsIE5VTEwsIDApOworCisgICAvKiBFeHBlY3RhdGlvbiBpcyBwc2FfY2FsbCBzaG91bGQgaGFuZyBhbmQgY29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdHBzYV9jYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisKKyAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworICAgcHNhLT5jbG9zZShoYW5kbGUpOworICAgKHZvaWQpKHN0YXR1c19vZl9jYWxsKTsKKyAgIHJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MC90ZXN0X2kwNTAuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUwL3Rlc3RfaTA1MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMWEzNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MC90ZXN0X2kwNTAuaApAQCAtMCwwICsxLDM3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9JMDUwX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDUwX0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxpMDUwKQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorI2Vsc2UKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX2NsaWVudF9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKKyNlbmRpZgorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfaTA1MF9jbGllbnRfdGVzdHNfbGlzdFtdOworCitpbnQzMl90IGNsaWVudF90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9pbnZlY19iYXNlKHNlY3VyaXR5X3QpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MC90ZXN0X3N1cHBfaTA1MC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTAvdGVzdF9zdXBwX2kwNTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWIyOTc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTAvdGVzdF9zdXBwX2kwNTAuYwpAQCAtMCwwICsxLDUyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX2ludmVjX2Jhc2Uodm9pZCk7CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDUwX3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaW52ZWNfYmFzZSwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaW52ZWNfYmFzZSh2b2lkKQoreworICAgIGludDMyX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKKworICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworCisgICAgdmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKworICAgIC8qIENvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCisgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRDb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZVxuIiwgMCk7CisgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKworICAgIHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTEvc291cmNlLm1rIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTEvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZDExNGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MS9zb3VyY2UubWsKQEAgLTAsMCArMSwyNSBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9pMDUxLmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KKworQ0NfU09VUkNFX1NQRSAgPSB0ZXN0X2kwNTEuYyB0ZXN0X3N1cHBfaTA1MS5jCitDQ19PUFRJT05TX1NQRSA9CitBU19TT1VSQ0VfU1BFICA9CitBU19PUFRJT05TX1NQRSA9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTEvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTEvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMjk4N2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MS90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1OSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA1MS5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDUxKQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgcHNhX2NhbGwgd2l0aCBpbnZhbGlkIHBzYV9vdXR2ZWMuYmFzZVxuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfaTA1MV9jbGllbnRfdGVzdHNfbGlzdCwgVFJVRSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogU3dpdGNoIHRvIHNlY3VyZSBzaWRlIChjbGllbnRfcGFydGl0aW9uLmMpIGFuZCBleGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluCisgICAgdGVzdFtudW1dX2NsaWVudF90ZXN0c19saXN0IGZyb20gU2VjdXJlIHNpZGUgKi8KKyAgICBzdGF0dXMgPSB2YWwtPnN3aXRjaF90b19zZWN1cmVfY2xpZW50KFRFU1RfTlVNKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTEvdGVzdF9pMDUxLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MS90ZXN0X2kwNTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjRhNzI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTEvdGVzdF9pMDUxLmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2Vsc2UKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwNTEuaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNTFfY2xpZW50X3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIGNsaWVudF90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9vdXR2ZWNfYmFzZSwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfb3V0dmVjX2Jhc2Uoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICBwc2FfaGFuZGxlX3QgICAgICAgICAgICBoYW5kbGUgPSAwOworICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgc3RhdHVzX29mX2NhbGw7CisgICBib290X3N0YXRlX3QgICAgICAgICAgICBib290X3N0YXRlOworICAgbWlzY2VsbGFuZW91c19kZXNjX3QgICAgKm1pc2NfZGVzYzsKKyAgIG1lbW9yeV9kZXNjX3QgICAgICAgICAgICptZW1vcnlfZGVzYzsKKyAgIGFkZHJfdCAgICAgICAgICAgICAgICAgICppbnZhbGlkX2Jhc2UgPSBOVUxMOworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsCisgICAgICAgICAgICAiW0NoZWNrMV0gVGVzdCBwc2FfY2FsbCB3aXRoIGludmFsaWQgcHNhX291dHZlYy5iYXNlXG4iLCAwKTsKKworICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCisgICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCisgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQorICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgorICAgICoKKyAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqLworCisgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOworCisgICBpZiAoaGFuZGxlIDwgMCkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb25uZWN0aW9uIGZhaWxlZFxuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRF9IQU5ETEU7CisgICB9CisKKyAgIC8qIFNlbGVjdGlvbiBvZiBpbnZhbGlkIG91dHZlYyBwb2ludGVyOgorICAgICogaWYgY2FsbGVyID09IE5PTlNFQ1VSRQorICAgICogICAgLy8gUFNBIFJvVCBwb2ludGVyCisgICAgKiAgICBpbnZhbGlkX2Jhc2UgPSBkcml2ZXJfbW1pb19yZWdpb25fYmFzZTsKKyAgICAqIGVsc2UKKyAgICAqICAgIGlmIChJU09MQVRJT05fTEVWRUwgPiAxKQorICAgICogICAgICAgaW52YWxpZF9iYXNlID0gZHJpdmVyX21taW9fcmVnaW9uX2Jhc2U7CisgICAgKiAgICBlbHNlCisgICAgKiAgICAgICBpbnZhbGlkX2Jhc2UgPSBOVUxMOworICAgICovCisKKyAgIHN0YXR1cyA9IHZhbC0+dGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTU9SWV9EUklWRVJfUEFSVElUSU9OX01NSU8sIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICoqKSZtZW1vcnlfZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QgKilzaXplb2YobWVtb3J5X2Rlc2NfdCkpOworICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDEwMSksIHN0YXR1cykpCisgICB7CisgICAgICAgcHNhLT5jbG9zZShoYW5kbGUpOworICAgICAgIHJldHVybiBzdGF0dXM7CisgICB9CisKKyAgIGlmIChjYWxsZXIgPT0gTk9OU0VDVVJFKQorICAgICAgIGludmFsaWRfYmFzZSA9IChhZGRyX3QgKikgbWVtb3J5X2Rlc2MtPnN0YXJ0OworICAgZWxzZQorICAgeworICAgICAgIHN0YXR1cyA9IHZhbC0+dGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUlTQ0VMTEFORU9VUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlTQ0VMTEFORU9VU19EVVQsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICoqKSZtaXNjX2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopc2l6ZW9mKG1pc2NlbGxhbmVvdXNfZGVzY190KSk7CisKKyAgICAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTAyKSwgc3RhdHVzKSkKKyAgICAgICB7CisgICAgICAgICAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICB9CisKKyAgICAgICBpZiAobWlzY19kZXNjLT5pbXBsZW1lbnRlZF9wc2FfZmlybXdhcmVfaXNvbGF0aW9uX2xldmVsID4gTEVWRUwxKQorICAgICAgICAgICBpbnZhbGlkX2Jhc2UgPSAoYWRkcl90ICopIG1lbW9yeV9kZXNjLT5zdGFydDsKKyAgIH0KKworICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICBib290X3N0YXRlID0gKGNhbGxlciA9PSBOT05TRUNVUkUpID8gQk9PVF9FWFBFQ1RFRF9OUyA6IEJPT1RfRVhQRUNURURfUzsKKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoYm9vdF9zdGF0ZSkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgcHNhX291dHZlYyBvdXR2ZWNbMV0gPSB7e2ludmFsaWRfYmFzZSwgc2l6ZW9mKGFkZHJfdCl9fTsKKworICAgLyogVGVzdCBjaGVjay0gcHNhX2NhbGwgd2l0aCBpbnZhbGlkIGFkZHJlc3MgZm9yIHBzYV9vdXR2ZWMuYmFzZSAqLworICAgc3RhdHVzX29mX2NhbGwgPSAgcHNhLT5jYWxsKGhhbmRsZSwgTlVMTCwgMCwgb3V0dmVjLCAwKTsKKworICAgLyogRXhwZWN0YXRpb24gaXMgcHNhX2NhbGwgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworCisgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICh2b2lkKShzdGF0dXNfb2ZfY2FsbCk7CisgICByZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTEvdGVzdF9pMDUxLmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MS90ZXN0X2kwNTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGNiZGQwCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTEvdGVzdF9pMDUxLmgKQEAgLTAsMCArMSwzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA1MV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA1MV9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA1MSkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNTFfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfb3V0dmVjX2Jhc2Uoc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUxL3Rlc3Rfc3VwcF9pMDUxLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MS90ZXN0X3N1cHBfaTA1MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhY2IzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MS90ZXN0X3N1cHBfaTA1MS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfb3V0dmVjX2Jhc2Uodm9pZCk7CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDUxX3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfb3V0dmVjX2Jhc2UsCisgICAgTlVMTCwKK307CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX291dHZlY19iYXNlKHZvaWQpCit7CisgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworCisgICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisKKyAgICB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworCisgICAgLyogQ29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KKyAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdENvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlXG4iLCAwKTsKKyAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTIpOworCisgICAgdmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Mi9zb3VyY2UubWsgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Mi9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyNjhjNgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUyL3NvdXJjZS5tawpAQCAtMCwwICsxLDI1IEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2kwNTIuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQorCitDQ19TT1VSQ0VfU1BFICA9IHRlc3RfaTA1Mi5jIHRlc3Rfc3VwcF9pMDUyLmMKK0NDX09QVElPTlNfU1BFID0KK0FTX1NPVVJDRV9TUEUgID0KK0FTX09QVElPTlNfU1BFID0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Mi90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Mi90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiYzE0OQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUyL3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDcyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9pMDUyLmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfRkZfQkFTRSwgNTIpCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBwc2FfY2FsbCB3aXRoIGludmFsaWQgZW5kX2FkZHIgZm9yIHBzYV9pbnZlY1xuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICAgICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworICAgbWlzY2VsbGFuZW91c19kZXNjX3QgICAgKm1pc2NfZGVzYzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0xPV19USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NsaWVudF90ZXN0c19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9pMDUyX2NsaWVudF90ZXN0c19saXN0LCBUUlVFKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICBzdGF0dXMgPSB2YWwtPnRhcmdldF9nZXRfY29uZmlnKFRBUkdFVF9DT05GSUdfQ1JFQVRFX0lEKEdST1VQX01JU0NFTExBTkVPVVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlTQ0VMTEFORU9VU19EVVQsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKiopJm1pc2NfZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKXNpemVvZihtaXNjZWxsYW5lb3VzX2Rlc2NfdCkpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIGlmIChtaXNjX2Rlc2MtPmltcGxlbWVudGVkX3BzYV9maXJtd2FyZV9pc29sYXRpb25fbGV2ZWwgPiBMRVZFTDEpCisgICAgeworICAgICAgICAvKiBTd2l0Y2ggdG8gc2VjdXJlIHNpZGUgKGNsaWVudF9wYXJ0aXRpb24uYykgYW5kIGV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4KKyAgICAgICAgdGVzdFtudW1dX2NsaWVudF90ZXN0c19saXN0IGZyb20gU2VjdXJlIHNpZGUgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5zd2l0Y2hfdG9fc2VjdXJlX2NsaWVudChURVNUX05VTSk7CisgICAgICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgICAgIH0KKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTIvdGVzdF9pMDUyLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Mi90ZXN0X2kwNTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjY3ZjdmCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTIvdGVzdF9pMDUyLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2Vsc2UKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwNTIuaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNTJfY2xpZW50X3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIGNsaWVudF90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9pbnZlY19lbmRfYWRkciwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaW52ZWNfZW5kX2FkZHIoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICBwc2FfaGFuZGxlX3QgICAgICAgICAgICBoYW5kbGUgPSAwOworICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgc3RhdHVzX29mX2NhbGw7CisgICBib290X3N0YXRlX3QgICAgICAgICAgICBib290X3N0YXRlOworICAgbWVtb3J5X2Rlc2NfdCAgICAgICAgICAgKm1lbW9yeV9kZXNjX2RyaXZlciwgKm1lbW9yeV9kZXNjOworICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgaW52YWxpZF9zaXplOworICAgbWVtb3J5X2NmZ19pZF90ICAgICAgICAgbWVtb3J5X2NmZ19pZDsKKyAgIGFkZHJfdCAgICAgICAgICAgICAgICAgICp2YWxpZF9iYXNlID0gTlVMTDsKKworICAgdmFsLT5wcmludChQUklOVF9URVNULAorICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX2NhbGwgd2l0aCBpbnZhbGlkIGVuZF9hZGRyIGZvciBwc2FfaW52ZWNcbiIsIDApOworCisgICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKKyAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKKyAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCisgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCisgICAgKgorICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICovCisKKyAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CisKKyAgIGlmIChoYW5kbGUgPCAwKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gZmFpbGVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgIH0KKworICAgLyogU2VsZWN0aW9uIG9mIGludmFsaWQgc2l6ZSBmb3IgcHNhX2ludmVjOgorICAgICogaWYgY2FsbGVyID09IE5PTlNFQ1VSRQorICAgICogICAgdmFsaWRfYmFzZSA9IG5zcGVfbW1pb19yZWdpb25fYmFzZTsKKyAgICAqICAgIGludmFsaWRfc2l6ZSA9IChkcml2ZXJfbW1pb19yZWdpb25fYmFzZSAtIG5zcGVfbW1pb19yZWdpb25fYmFzZSArIDEpOworICAgICogZWxzZQorICAgICogICAgaWYgKElTT0xBVElPTl9MRVZFTCA+IDEpCisgICAgKiAgICAgICB2YWxpZF9iYXNlID0gY2xpZW50X21taW9fcmVnaW9uX2Jhc2U7CisgICAgKiAgICAgICBpbnZhbGlkX3NpemUgPSAoZHJpdmVyX21taW9fcmVnaW9uX2Jhc2UgLSBjbGllbnRfbW1pb19yZWdpb25fYmFzZSArIDEpOworICAgICovCisKKyAgIHN0YXR1cyA9IHZhbC0+dGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTU9SWV9EUklWRVJfUEFSVElUSU9OX01NSU8sIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICoqKSZtZW1vcnlfZGVzY19kcml2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopc2l6ZW9mKG1lbW9yeV9kZXNjX3QpKTsKKyAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgxMDEpLCBzdGF0dXMpKQorICAgeworICAgICAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICAgICByZXR1cm4gc3RhdHVzOworICAgfQorCisgICBpZiAoY2FsbGVyID09IE5PTlNFQ1VSRSkKKyAgICAgICBtZW1vcnlfY2ZnX2lkID0gTUVNT1JZX05TUEVfTU1JTzsKKyAgIGVsc2UKKyAgICAgICBtZW1vcnlfY2ZnX2lkID0gTUVNT1JZX0NMSUVOVF9QQVJUSVRJT05fTU1JTzsKKworICAgc3RhdHVzID0gdmFsLT50YXJnZXRfZ2V0X2NvbmZpZyhUQVJHRVRfQ09ORklHX0NSRUFURV9JRChHUk9VUF9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5X2NmZ19pZCwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKiopJm1lbW9yeV9kZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKXNpemVvZihtZW1vcnlfZGVzY190KSk7CisgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTAyKSwgc3RhdHVzKSkKKyAgIHsKKyAgICAgICBwc2EtPmNsb3NlKGhhbmRsZSk7CisgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgIH0KKworICAgdmFsaWRfYmFzZSA9IChhZGRyX3QgKikgbWVtb3J5X2Rlc2MtPnN0YXJ0OworICAgaW52YWxpZF9zaXplID0gKG1lbW9yeV9kZXNjX2RyaXZlci0+c3RhcnQgLSBtZW1vcnlfZGVzYy0+c3RhcnQgKyAxKTsKKworICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICBib290X3N0YXRlID0gKGNhbGxlciA9PSBOT05TRUNVUkUpID8gQk9PVF9FWFBFQ1RFRF9OUyA6IEJPT1RfRVhQRUNURURfUzsKKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoYm9vdF9zdGF0ZSkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgcHNhX2ludmVjIGludmVjWzFdID0ge3t2YWxpZF9iYXNlLCBpbnZhbGlkX3NpemV9fTsKKworICAgLyogVGVzdCBjaGVjay0gcHNhX2NhbGwgd2l0aCBpbnZhbGlkIGVuZF9hZGRyIGZvciBwc2FfaW52ZWMgKi8KKyAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChoYW5kbGUsIGludmVjLCAxLCBOVUxMLCAwKTsKKworICAgLyogRXhwZWN0YXRpb24gaXMgcHNhX2NhbGwgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworCisgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICh2b2lkKShzdGF0dXNfb2ZfY2FsbCk7CisgICByZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTIvdGVzdF9pMDUyLmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Mi90ZXN0X2kwNTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmFjYmI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTIvdGVzdF9pMDUyLmgKQEAgLTAsMCArMSwzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA1Ml9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA1Ml9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA1MikKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNTJfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaW52ZWNfZW5kX2FkZHIoc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUyL3Rlc3Rfc3VwcF9pMDUyLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Mi90ZXN0X3N1cHBfaTA1Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZWFmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Mi90ZXN0X3N1cHBfaTA1Mi5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaW52ZWNfZW5kX2FkZHIodm9pZCk7CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDUyX3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaW52ZWNfZW5kX2FkZHIsCisgICAgTlVMTCwKK307CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX2ludmVjX2VuZF9hZGRyKHZvaWQpCit7CisgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworCisgICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisKKyAgICB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworCisgICAgLyogQ29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KKyAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdENvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlXG4iLCAwKTsKKyAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTIpOworCisgICAgdmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1My9zb3VyY2UubWsgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1My9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM0ZDYyMgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUzL3NvdXJjZS5tawpAQCAtMCwwICsxLDI1IEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2kwNTMuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQorCitDQ19TT1VSQ0VfU1BFICA9IHRlc3RfaTA1My5jIHRlc3Rfc3VwcF9pMDUzLmMKK0NDX09QVElPTlNfU1BFID0KK0FTX1NPVVJDRV9TUEUgID0KK0FTX09QVElPTlNfU1BFID0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1My90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1My90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0ZGZhZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUzL3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDcyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9pMDUzLmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfRkZfQkFTRSwgNTMpCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBwc2FfY2FsbCB3aXRoIGludmFsaWQgZW5kX2FkZHIgZm9yIHBzYV9vdXR2ZWNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgIG1pc2NlbGxhbmVvdXNfZGVzY190ICAgICptaXNjX2Rlc2M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfaTA1M19jbGllbnRfdGVzdHNfbGlzdCwgVFJVRSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgc3RhdHVzID0gdmFsLT50YXJnZXRfZ2V0X2NvbmZpZyhUQVJHRVRfQ09ORklHX0NSRUFURV9JRChHUk9VUF9NSVNDRUxMQU5FT1VTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JU0NFTExBTkVPVVNfRFVULCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICoqKSZtaXNjX2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QgKilzaXplb2YobWlzY2VsbGFuZW91c19kZXNjX3QpKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICBpZiAobWlzY19kZXNjLT5pbXBsZW1lbnRlZF9wc2FfZmlybXdhcmVfaXNvbGF0aW9uX2xldmVsID4gTEVWRUwxKQorICAgIHsKKyAgICAgICAgLyogU3dpdGNoIHRvIHNlY3VyZSBzaWRlIChjbGllbnRfcGFydGl0aW9uLmMpIGFuZCBleGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluCisgICAgICAgIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIFNlY3VyZSBzaWRlICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+c3dpdGNoX3RvX3NlY3VyZV9jbGllbnQoVEVTVF9OVU0pOworICAgICAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgICAgICB9CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUzL3Rlc3RfaTA1My5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTMvdGVzdF9pMDUzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQyMGJhMQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUzL3Rlc3RfaTA1My5jCkBAIC0wLDAgKzEsMTMzIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDUzLmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDUzX2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfb3V0dmVjX2VuZF9hZGRyLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IGNsaWVudF90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9vdXR2ZWNfZW5kX2FkZHIoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICBwc2FfaGFuZGxlX3QgICAgICAgICAgICBoYW5kbGUgPSAwOworICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgc3RhdHVzX29mX2NhbGw7CisgICBib290X3N0YXRlX3QgICAgICAgICAgICBib290X3N0YXRlOworICAgbWVtb3J5X2Rlc2NfdCAgICAgICAgICAgKm1lbW9yeV9kZXNjX2RyaXZlciwgKm1lbW9yeV9kZXNjOworICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgaW52YWxpZF9zaXplOworICAgbWVtb3J5X2NmZ19pZF90ICAgICAgICAgbWVtb3J5X2NmZ19pZDsKKyAgIGFkZHJfdCAgICAgICAgICAgICAgICAgICp2YWxpZF9iYXNlID0gTlVMTDsKKworICAgdmFsLT5wcmludChQUklOVF9URVNULAorICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX2NhbGwgd2l0aCBpbnZhbGlkIGVuZF9hZGRyIGZvciBwc2Ffb3V0dmVjXG4iLCAwKTsKKworICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCisgICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCisgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQorICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgorICAgICoKKyAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqLworCisgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOworCisgICBpZiAoaGFuZGxlIDwgMCkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb25uZWN0aW9uIGZhaWxlZFxuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRF9IQU5ETEU7CisgICB9CisKKyAgIC8qIFNlbGVjdGlvbiBvZiBpbnZhbGlkIHNpemUgZm9yIHBzYV9vdXR2ZWM6CisgICAgKiBpZiBjYWxsZXIgPT0gTk9OU0VDVVJFCisgICAgKiAgICB2YWxpZF9iYXNlID0gbnNwZV9tbWlvX3JlZ2lvbl9iYXNlOworICAgICogICAgaW52YWxpZF9zaXplID0gKGRyaXZlcl9tbWlvX3JlZ2lvbl9iYXNlIC0gbnNwZV9tbWlvX3JlZ2lvbl9iYXNlICsgMSk7CisgICAgKiBlbHNlCisgICAgKiAgICBpZiAoSVNPTEFUSU9OX0xFVkVMID4gMSkKKyAgICAqICAgICAgIHZhbGlkX2Jhc2UgPSBjbGllbnRfbW1pb19yZWdpb25fYmFzZTsKKyAgICAqICAgICAgIGludmFsaWRfc2l6ZSA9IChkcml2ZXJfbW1pb19yZWdpb25fYmFzZSAtIGNsaWVudF9tbWlvX3JlZ2lvbl9iYXNlICsgMSk7CisgICAgKi8KKworICAgc3RhdHVzID0gdmFsLT50YXJnZXRfZ2V0X2NvbmZpZyhUQVJHRVRfQ09ORklHX0NSRUFURV9JRChHUk9VUF9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNT1JZX0RSSVZFUl9QQVJUSVRJT05fTU1JTywgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKiopJm1lbW9yeV9kZXNjX2RyaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QgKilzaXplb2YobWVtb3J5X2Rlc2NfdCkpOworICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDEwMSksIHN0YXR1cykpCisgICB7CisgICAgICAgcHNhLT5jbG9zZShoYW5kbGUpOworICAgICAgIHJldHVybiBzdGF0dXM7CisgICB9CisKKyAgIGlmIChjYWxsZXIgPT0gTk9OU0VDVVJFKQorICAgICAgIG1lbW9yeV9jZmdfaWQgPSBNRU1PUllfTlNQRV9NTUlPOworICAgZWxzZQorICAgICAgIG1lbW9yeV9jZmdfaWQgPSBNRU1PUllfQ0xJRU5UX1BBUlRJVElPTl9NTUlPOworCisgICBzdGF0dXMgPSB2YWwtPnRhcmdldF9nZXRfY29uZmlnKFRBUkdFVF9DT05GSUdfQ1JFQVRFX0lEKEdST1VQX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfY2ZnX2lkLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKikmbWVtb3J5X2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopc2l6ZW9mKG1lbW9yeV9kZXNjX3QpKTsKKyAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgxMDIpLCBzdGF0dXMpKQorICAgeworICAgICAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICAgICByZXR1cm4gc3RhdHVzOworICAgfQorCisgICB2YWxpZF9iYXNlID0gKGFkZHJfdCAqKSBtZW1vcnlfZGVzYy0+c3RhcnQ7CisgICBpbnZhbGlkX3NpemUgPSAobWVtb3J5X2Rlc2NfZHJpdmVyLT5zdGFydCAtIG1lbW9yeV9kZXNjLT5zdGFydCArIDEpOworCisgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgIGJvb3Rfc3RhdGUgPSAoY2FsbGVyID09IE5PTlNFQ1VSRSkgPyBCT09UX0VYUEVDVEVEX05TIDogQk9PVF9FWFBFQ1RFRF9TOworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhib290X3N0YXRlKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgICBwc2Ffb3V0dmVjIG91dHZlY1sxXSA9IHt7dmFsaWRfYmFzZSwgaW52YWxpZF9zaXplfX07CisKKyAgIC8qIFRlc3QgY2hlY2stIHBzYV9jYWxsIHdpdGggaW52YWxpZCBlbmRfYWRkciBmb3IgcHNhX291dHZlYyAqLworICAgc3RhdHVzX29mX2NhbGwgPSAgcHNhLT5jYWxsKGhhbmRsZSwgTlVMTCwgMCwgb3V0dmVjLCAxKTsKKworICAgLyogRXhwZWN0YXRpb24gaXMgcHNhX2NhbGwgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworCisgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICh2b2lkKShzdGF0dXNfb2ZfY2FsbCk7CisgICByZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTMvdGVzdF9pMDUzLmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1My90ZXN0X2kwNTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWJmY2NjCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTMvdGVzdF9pMDUzLmgKQEAgLTAsMCArMSwzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA1M19DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA1M19DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA1MykKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNTNfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfb3V0dmVjX2VuZF9hZGRyKHNlY3VyaXR5X3QpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1My90ZXN0X3N1cHBfaTA1My5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTMvdGVzdF9zdXBwX2kwNTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmQ4NTNiCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTMvdGVzdF9zdXBwX2kwNTMuYwpAQCAtMCwwICsxLDUyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX291dHZlY19lbmRfYWRkcih2b2lkKTsKKworc2VydmVyX3Rlc3RfdCB0ZXN0X2kwNTNfc2VydmVyX3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHNlcnZlcl90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9vdXR2ZWNfZW5kX2FkZHIsCisgICAgTlVMTCwKK307CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX291dHZlY19lbmRfYWRkcih2b2lkKQoreworICAgIGludDMyX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKKworICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworCisgICAgdmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKworICAgIC8qIENvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCisgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRDb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZVxuIiwgMCk7CisgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKworICAgIHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTQvc291cmNlLm1rIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTQvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZDIyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NC9zb3VyY2UubWsKQEAgLTAsMCArMSwyNSBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9pMDU0LmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KKworQ0NfU09VUkNFX1NQRSAgPSB0ZXN0X2kwNTQuYyB0ZXN0X3N1cHBfaTA1NC5jCitDQ19PUFRJT05TX1NQRSA9CitBU19TT1VSQ0VfU1BFICA9CitBU19PUFRJT05TX1NQRSA9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTQvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTQvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTkzNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NC90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1OSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA1NC5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDU0KQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgcHNhX2NhbGwgd2l0aCBub3Qgd3JpdGFibGUgcHNhX291dHZlYy5iYXNlXG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0xPV19USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NsaWVudF90ZXN0c19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9pMDU0X2NsaWVudF90ZXN0c19saXN0LCBUUlVFKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBTd2l0Y2ggdG8gc2VjdXJlIHNpZGUgKGNsaWVudF9wYXJ0aXRpb24uYykgYW5kIGV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4KKyAgICB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBTZWN1cmUgc2lkZSAqLworICAgIHN0YXR1cyA9IHZhbC0+c3dpdGNoX3RvX3NlY3VyZV9jbGllbnQoVEVTVF9OVU0pOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NC90ZXN0X2kwNTQuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU0L3Rlc3RfaTA1NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NGNiODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NC90ZXN0X2kwNTQuYwpAQCAtMCwwICsxLDkxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDU0LmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDU0X2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9wc2FfY2FsbF93aXRoX25vdF93cml0YWJsZV9vdXR2ZWNfYmFzZSwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfY2FsbF93aXRoX25vdF93cml0YWJsZV9vdXR2ZWNfYmFzZShzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgIHBzYV9oYW5kbGVfdCAgICAgICAgICAgIGhhbmRsZSA9IDA7CisgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBzdGF0dXNfb2ZfY2FsbDsKKyAgIGJvb3Rfc3RhdGVfdCAgICAgICAgICAgIGJvb3Rfc3RhdGU7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKKyAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IHBzYV9jYWxsIHdpdGggbm90IHdyaXRhYmxlIHBzYV9vdXR2ZWMuYmFzZVxuIiwgMCk7CisKKyAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQorICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAorICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKKyAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KKyAgICAqCisgICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKi8KKworICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKKyAgIGlmIChoYW5kbGUgPCAwKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gZmFpbGVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgIH0KKworICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICBib290X3N0YXRlID0gKGNhbGxlciA9PSBOT05TRUNVUkUpID8gQk9PVF9FWFBFQ1RFRF9OUyA6IEJPT1RfRVhQRUNURURfUzsKKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoYm9vdF9zdGF0ZSkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgLyogVXNpbmcgZnVuY3Rpb24gYWRkcmVzcyAoY29kZSkgYXMgbm90IHdyaXRhYmxlIGFkZHJlc3MgKi8KKyAgIHBzYV9vdXR2ZWMgb3V0dmVjWzFdID0ge3smY2xpZW50X3Rlc3RfcHNhX2NhbGxfd2l0aF9ub3Rfd3JpdGFibGVfb3V0dmVjX2Jhc2UsIHNpemVvZihjaGFyKX19OworCisgICAvKiBUZXN0IGNoZWNrLSBwc2FfY2FsbCB3aXRoIG5vdCB3cml0YWJsZSBwc2Ffb3V0dmVjLmJhc2UgKi8KKyAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChoYW5kbGUsIE5VTEwsIDAsIG91dHZlYywgMCk7CisKKyAgIC8qIEV4cGVjdGF0aW9uIGlzIHBzYV9jYWxsIHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX2NhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKworICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CisgICBwc2EtPmNsb3NlKGhhbmRsZSk7CisgICAodm9pZCkoc3RhdHVzX29mX2NhbGwpOworICAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU0L3Rlc3RfaTA1NC5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTQvdGVzdF9pMDU0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg2ZDU2YQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU0L3Rlc3RfaTA1NC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX0kwNTRfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwNTRfQ0xJRU5UX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGkwNTQpCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisjZWxzZQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfY2xpZW50X3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfY2xpZW50X3NwKQorI2VuZGlmCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKKworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9pMDU0X2NsaWVudF90ZXN0c19saXN0W107CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfcHNhX2NhbGxfd2l0aF9ub3Rfd3JpdGFibGVfb3V0dmVjX2Jhc2Uoc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU0L3Rlc3Rfc3VwcF9pMDU0LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NC90ZXN0X3N1cHBfaTA1NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYWFlNTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NC90ZXN0X3N1cHBfaTA1NC5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfY2FsbF93aXRoX25vdF93cml0YWJsZV9vdXR2ZWNfYmFzZSh2b2lkKTsKKworc2VydmVyX3Rlc3RfdCB0ZXN0X2kwNTRfc2VydmVyX3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHNlcnZlcl90ZXN0X3BzYV9jYWxsX3dpdGhfbm90X3dyaXRhYmxlX291dHZlY19iYXNlLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9jYWxsX3dpdGhfbm90X3dyaXRhYmxlX291dHZlY19iYXNlKHZvaWQpCit7CisgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworCisgICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisKKyAgICB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworCisgICAgLyogQ29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KKyAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdENvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlXG4iLCAwKTsKKyAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTIpOworCisgICAgdmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NS9zb3VyY2UubWsgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NS9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQyZDJjZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU1L3NvdXJjZS5tawpAQCAtMCwwICsxLDI1IEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2kwNTUuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQorCitDQ19TT1VSQ0VfU1BFICA9IHRlc3RfaTA1NS5jIHRlc3Rfc3VwcF9pMDU1LmMKK0NDX09QVElPTlNfU1BFID0KK0FTX1NPVVJDRV9TUEUgID0KK0FTX09QVElPTlNfU1BFID0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NS90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NS90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FjMjJhMAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU1L3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9pMDU1LmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfRkZfQkFTRSwgNTUpCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBwc2FfcmVhZCB3aXRoIGludmFsaWQgYnVmZmVyIGFkZHJcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfTE9XX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2kwNTVfY2xpZW50X3Rlc3RzX2xpc3QsIFRSVUUpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NS90ZXN0X2kwNTUuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU1L3Rlc3RfaTA1NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NjE2YWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NS90ZXN0X2kwNTUuYwpAQCAtMCwwICsxLDYyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDU1LmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDU1X2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9wc2FfcmVhZF93aXRoX2ludmFsaWRfYnVmZmVyX2FkZHIsCisgICAgTlVMTCwKK307CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfcHNhX3JlYWRfd2l0aF9pbnZhbGlkX2J1ZmZlcl9hZGRyKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgaW50MzJfdCAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgIHVpbnQ4X3QgICAgICAgICAgICBkYXRhID0gMHgxMTsKKyAgIHBzYV9oYW5kbGVfdCAgICAgICBoYW5kbGUgPSAwOworICAgcHNhX3N0YXR1c190ICAgICAgIHN0YXR1c19vZl9jYWxsOworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsCisgICAgICAgICAgICAiW0NoZWNrMV0gVGVzdCBwc2FfcmVhZCB3aXRoIGludmFsaWQgYnVmZmVyIGFkZHJcbiIsIDApOworCisgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOworICAgaWYgKGhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisgICBwc2FfaW52ZWMgaW52ZWNbMV0gPSB7eyZkYXRhLCBzaXplb2YoZGF0YSl9fTsKKyAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChoYW5kbGUsIGludmVjLCAxLCBOVUxMLCAwKTsKKworICAgLyogRXhwZWN0YXRpb24gaXMgc2VydmVyIHRlc3Qgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisKKyAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKworICAgcHNhLT5jbG9zZShoYW5kbGUpOworICAgKHZvaWQpKHN0YXR1c19vZl9jYWxsKTsKKyAgIHJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NS90ZXN0X2kwNTUuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU1L3Rlc3RfaTA1NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNjM5NTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NS90ZXN0X2kwNTUuaApAQCAtMCwwICsxLDM3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9JMDU1X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDU1X0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxpMDU1KQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorI2Vsc2UKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX2NsaWVudF9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKKyNlbmRpZgorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfaTA1NV9jbGllbnRfdGVzdHNfbGlzdFtdOworCitpbnQzMl90IGNsaWVudF90ZXN0X3BzYV9yZWFkX3dpdGhfaW52YWxpZF9idWZmZXJfYWRkcihzZWN1cml0eV90KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTUvdGVzdF9zdXBwX2kwNTUuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU1L3Rlc3Rfc3VwcF9pMDU1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NjNDUwZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU1L3Rlc3Rfc3VwcF9pMDU1LmMKQEAgLTAsMCArMSwxMzIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfcmVhZF93aXRoX2ludmFsaWRfYnVmZmVyX2FkZHIodm9pZCk7CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDU1X3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9wc2FfcmVhZF93aXRoX2ludmFsaWRfYnVmZmVyX2FkZHIsCisgICAgTlVMTCwKK307CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX3JlYWRfd2l0aF9pbnZhbGlkX2J1ZmZlcl9hZGRyKHZvaWQpCit7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworICAgIHBzYV9tc2dfdCAgICAgICAgICAgICAgIG1zZyA9IHswfTsKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqYnVmZmVyID0gTlVMTDsKKyAgICBtaXNjZWxsYW5lb3VzX2Rlc2NfdCAgICAqbWlzY19kZXNjOworICAgIG1lbW9yeV9kZXNjX3QgICAgICAgICAgICptZW1vcnlfZGVzYzsKKworICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCisgICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCisgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQorICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgorICAgICoKKyAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqLworCisgICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworCisgICAgLyogU2VsZWN0aW9uIG9mIGludmFsaWQgYnVmZmVyIGFkZHI6CisgICAgICogIGlmIChJU09MQVRJT05fTEVWRUwgPiAxKQorICAgICAqICAgICAgIGJ1ZmZlciA9IGRyaXZlcl9tbWlvX3JlZ2lvbl9iYXNlOworICAgICAqICBlbHNlCisgICAgICogICAgICAgYnVmZmVyID0gTlVMTDsKKyAgICAgKi8KKworICAgIHN0YXR1cyA9IHZhbF90YXJnZXRfZ2V0X2NvbmZpZyhUQVJHRVRfQ09ORklHX0NSRUFURV9JRChHUk9VUF9NSVNDRUxMQU5FT1VTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSVNDRUxMQU5FT1VTX0RVVCwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKiopJm1pc2NfZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QgKilzaXplb2YobWlzY2VsbGFuZW91c19kZXNjX3QpKTsKKyAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIGlmIChtaXNjX2Rlc2MtPmltcGxlbWVudGVkX3BzYV9maXJtd2FyZV9pc29sYXRpb25fbGV2ZWwgPiBMRVZFTDEpCisgICAgeworICAgICAgICBzdGF0dXMgPSB2YWxfdGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1PUllfRFJJVkVSX1BBUlRJVElPTl9NTUlPLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKiopJm1lbW9yeV9kZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QgKilzaXplb2YobWVtb3J5X2Rlc2NfdCkpOworICAgICAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQorICAgICAgICB7CisgICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgYnVmZmVyID0gKHZvaWQgKikgbWVtb3J5X2Rlc2MtPnN0YXJ0OworICAgIH0KKworICAgIC8qIEFjY2VwdCB0aGUgY29ubmVjdGlvbiAqLworICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisKKyAgICAvKiBTZXJ2ZXIgcHNhX2NhbGwgKi8KKyAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNCksIHN0YXR1cykpCisgICAgeworICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7CisgICAgICAgIGlmKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA1KSwgc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0zKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRlc3QgY2hlY2stIHBzYV9yZWFkIHdpdGggaW52YWxpZCBidWZmZXIgYWRkciAqLworICAgICAgICAgICAgcHNhX3JlYWQobXNnLmhhbmRsZSwgMCwgKHZvaWQgKilidWZmZXIsIG1zZy5pbl9zaXplWzBdKTsKKworICAgICAgICAgICAgLyogc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCisgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgICAgICAgIlx0cHNhX3JlYWQgd2l0aCBpbnZhbGlkIGJ1ZmZlciBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworCisgICAgICAgICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgICAgICAgICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CisgICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTQpOworICAgICAgICB9CisgICAgfQorCisgICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDYpLCBzdGF0dXMpOworICAgIHN0YXR1cyA9ICgodmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKKyAgICAgICAgICAgICAgID8gVkFMX1NUQVRVU19FUlJPUiA6IHN0YXR1cyk7CisgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTYvc291cmNlLm1rIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTYvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNDczOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ni9zb3VyY2UubWsKQEAgLTAsMCArMSwyNSBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9pMDU2LmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KKworQ0NfU09VUkNFX1NQRSAgPSB0ZXN0X2kwNTYuYyB0ZXN0X3N1cHBfaTA1Ni5jCitDQ19PUFRJT05TX1NQRSA9CitBU19TT1VSQ0VfU1BFICA9CitBU19PUFRJT05TX1NQRSA9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTYvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTYvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NmVkMTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ni90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA1Ni5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDU2KQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgcHNhX3JlYWQgd2l0aCBub3Qgd3JpdGFibGUgYnVmZmVyIGFkZHJcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfTE9XX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2kwNTZfY2xpZW50X3Rlc3RzX2xpc3QsIFRSVUUpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ni90ZXN0X2kwNTYuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU2L3Rlc3RfaTA1Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNWE3YzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ni90ZXN0X2kwNTYuYwpAQCAtMCwwICsxLDYyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDU2LmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDU2X2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9wc2FfcmVhZF93aXRoX25vdF93cml0YWJsZV9idWZmZXJfYWRkciwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfcmVhZF93aXRoX25vdF93cml0YWJsZV9idWZmZXJfYWRkcihzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIGludDMyX3QgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICB1aW50OF90ICAgICAgICAgICAgZGF0YSA9IDB4MTE7CisgICBwc2FfaGFuZGxlX3QgICAgICAgaGFuZGxlID0gMDsKKyAgIHBzYV9zdGF0dXNfdCAgICAgICBzdGF0dXNfb2ZfY2FsbDsKKworICAgdmFsLT5wcmludChQUklOVF9URVNULAorICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX3JlYWQgd2l0aCBpbnZhbGlkIGJ1ZmZlciBhZGRyXG4iLCAwKTsKKworICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKKyAgIGlmIChoYW5kbGUgPCAwKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gZmFpbGVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgIH0KKworICAgcHNhX2ludmVjIGludmVjWzFdID0ge3smZGF0YSwgc2l6ZW9mKGRhdGEpfX07CisgICBzdGF0dXNfb2ZfY2FsbCA9ICBwc2EtPmNhbGwoaGFuZGxlLCBpbnZlYywgMSwgTlVMTCwgMCk7CisKKyAgIC8qIEV4cGVjdGF0aW9uIGlzIHNlcnZlciB0ZXN0IHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworCisgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CisKKyAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICh2b2lkKShzdGF0dXNfb2ZfY2FsbCk7CisgICByZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTYvdGVzdF9pMDU2LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ni90ZXN0X2kwNTYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2Y2ZWRjCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTYvdGVzdF9pMDU2LmgKQEAgLTAsMCArMSwzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA1Nl9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA1Nl9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA1NikKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNTZfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfcmVhZF93aXRoX25vdF93cml0YWJsZV9idWZmZXJfYWRkcihzZWN1cml0eV90KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTYvdGVzdF9zdXBwX2kwNTYuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU2L3Rlc3Rfc3VwcF9pMDU2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE0N2UzYgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU2L3Rlc3Rfc3VwcF9pMDU2LmMKQEAgLTAsMCArMSwxMDEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfcmVhZF93aXRoX25vdF93cml0YWJsZV9idWZmZXJfYWRkcih2b2lkKTsKKworc2VydmVyX3Rlc3RfdCB0ZXN0X2kwNTZfc2VydmVyX3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHNlcnZlcl90ZXN0X3BzYV9yZWFkX3dpdGhfbm90X3dyaXRhYmxlX2J1ZmZlcl9hZGRyLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9yZWFkX3dpdGhfbm90X3dyaXRhYmxlX2J1ZmZlcl9hZGRyKHZvaWQpCit7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworICAgIHBzYV9tc2dfdCAgICAgICAgICAgICAgIG1zZyA9IHswfTsKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqYnVmZmVyID0gTlVMTDsKKworICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCisgICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCisgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQorICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgorICAgICoKKyAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqLworCisgICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIEFjY2VwdCB0aGUgY29ubmVjdGlvbiAqLworICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisKKyAgICAvKiBTZXQgYnVmZmVyIHRvIHBvaW50IHRvIG5vdCB3cml0YWJsZSBsb2NhdGlvbiAoQ29kZSBtZW1vcnkpICovCisgICAgYnVmZmVyID0gKHZvaWQgKikgJnNlcnZlcl90ZXN0X3BzYV9yZWFkX3dpdGhfbm90X3dyaXRhYmxlX2J1ZmZlcl9hZGRyOworCisgICAgLyogU2VydmVyIHBzYV9jYWxsICovCisgICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOworICAgICAgICBpZih2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisKKyAgICAgICAgICAgIC8qIFRlc3QgY2hlY2stIHBzYV9yZWFkIHdpdGggbm90IHdyaXRhYmxlIGJ1ZmZlciBhZGRyICovCisgICAgICAgICAgICBwc2FfcmVhZChtc2cuaGFuZGxlLCAwLCAodm9pZCAqKWJ1ZmZlciwgbXNnLmluX3NpemVbMF0pOworCisgICAgICAgICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwKKyAgICAgICAgICAgICAgICAiXHRwc2FfcmVhZCB3aXRoIG5vdCB3cml0YWJsZSBidWZmZXIgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKworICAgICAgICAgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICAgICAgICAgICBpZiAodmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC00KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKTsKKyAgICBzdGF0dXMgPSAoKHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCisgICAgICAgICAgICAgICA/IFZBTF9TVEFUVVNfRVJST1IgOiBzdGF0dXMpOworICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU3L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU3L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWYyZTFiCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTcvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA1Ny5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDU3LmMgdGVzdF9zdXBwX2kwNTcuYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU3L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU3L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTMxYmZjCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTcvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2kwNTcuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9GRl9CQVNFLCA1NykKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIHBzYV93cml0ZSB3aXRoIGludmFsaWQgYnVmZmVyIGFkZHJcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfTE9XX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2kwNTdfY2xpZW50X3Rlc3RzX2xpc3QsIFRSVUUpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ny90ZXN0X2kwNTcuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU3L3Rlc3RfaTA1Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZWY2NzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ny90ZXN0X2kwNTcuYwpAQCAtMCwwICsxLDYyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDU3LmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDU3X2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9wc2Ffd3JpdGVfd2l0aF9pbnZhbGlkX2J1ZmZlcl9hZGRyLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IGNsaWVudF90ZXN0X3BzYV93cml0ZV93aXRoX2ludmFsaWRfYnVmZmVyX2FkZHIoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBpbnQzMl90ICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworICAgdWludDhfdCAgICAgICAgICAgIGRhdGEgPSAweDExOworICAgcHNhX2hhbmRsZV90ICAgICAgIGhhbmRsZSA9IDA7CisgICBwc2Ffc3RhdHVzX3QgICAgICAgc3RhdHVzX29mX2NhbGw7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKKyAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IHBzYV93cml0ZSB3aXRoIGludmFsaWQgYnVmZmVyIGFkZHJcbiIsIDApOworCisgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOworICAgaWYgKGhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisgICBwc2Ffb3V0dmVjIG91dHZlY1sxXSA9IHt7JmRhdGEsIHNpemVvZihkYXRhKX19OworICAgc3RhdHVzX29mX2NhbGwgPSAgcHNhLT5jYWxsKGhhbmRsZSwgTlVMTCwgMCwgb3V0dmVjLCAxKTsKKworICAgLyogRXhwZWN0YXRpb24gaXMgc2VydmVyIHRlc3Qgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisKKyAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKworICAgcHNhLT5jbG9zZShoYW5kbGUpOworICAgKHZvaWQpKHN0YXR1c19vZl9jYWxsKTsKKyAgIHJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ny90ZXN0X2kwNTcuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU3L3Rlc3RfaTA1Ny5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYmE5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ny90ZXN0X2kwNTcuaApAQCAtMCwwICsxLDM3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9JMDU3X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDU3X0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxpMDU3KQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorI2Vsc2UKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX2NsaWVudF9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKKyNlbmRpZgorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfaTA1N19jbGllbnRfdGVzdHNfbGlzdFtdOworCitpbnQzMl90IGNsaWVudF90ZXN0X3BzYV93cml0ZV93aXRoX2ludmFsaWRfYnVmZmVyX2FkZHIoc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU3L3Rlc3Rfc3VwcF9pMDU3LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ny90ZXN0X3N1cHBfaTA1Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZDZkYWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ny90ZXN0X3N1cHBfaTA1Ny5jCkBAIC0wLDAgKzEsMTMyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX3dyaXRlX3dpdGhfaW52YWxpZF9idWZmZXJfYWRkcih2b2lkKTsKKworc2VydmVyX3Rlc3RfdCB0ZXN0X2kwNTdfc2VydmVyX3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHNlcnZlcl90ZXN0X3BzYV93cml0ZV93aXRoX2ludmFsaWRfYnVmZmVyX2FkZHIsCisgICAgTlVMTCwKK307CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX3dyaXRlX3dpdGhfaW52YWxpZF9idWZmZXJfYWRkcih2b2lkKQoreworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgICBwc2FfbXNnX3QgICAgICAgICAgICAgICBtc2cgPSB7MH07CisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlciA9IE5VTEw7CisgICAgbWlzY2VsbGFuZW91c19kZXNjX3QgICAgKm1pc2NfZGVzYzsKKyAgICBtZW1vcnlfZGVzY190ICAgICAgICAgICAqbWVtb3J5X2Rlc2M7CisKKyAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQorICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAorICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKKyAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KKyAgICAqCisgICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKi8KKworICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKworICAgIC8qIFNlbGVjdGlvbiBvZiBpbnZhbGlkIGJ1ZmZlciBhZGRyOgorICAgICAqICBpZiAoSVNPTEFUSU9OX0xFVkVMID4gMSkKKyAgICAgKiAgICAgICBidWZmZXIgPSBkcml2ZXJfbW1pb19yZWdpb25fYmFzZTsKKyAgICAgKiAgZWxzZQorICAgICAqICAgICAgIGJ1ZmZlciA9IE5VTEw7CisgICAgICovCisKKyAgICBzdGF0dXMgPSB2YWxfdGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUlTQ0VMTEFORU9VUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlTQ0VMTEFORU9VU19EVVQsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICoqKSZtaXNjX2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopc2l6ZW9mKG1pc2NlbGxhbmVvdXNfZGVzY190KSk7CisgICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBpZiAobWlzY19kZXNjLT5pbXBsZW1lbnRlZF9wc2FfZmlybXdhcmVfaXNvbGF0aW9uX2xldmVsID4gTEVWRUwxKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gdmFsX3RhcmdldF9nZXRfY29uZmlnKFRBUkdFVF9DT05GSUdfQ1JFQVRFX0lEKEdST1VQX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNT1JZX0RSSVZFUl9QQVJUSVRJT05fTU1JTywgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICoqKSZtZW1vcnlfZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopc2l6ZW9mKG1lbW9yeV9kZXNjX3QpKTsKKyAgICAgICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorCisgICAgICAgIGJ1ZmZlciA9ICh2b2lkICopIG1lbW9yeV9kZXNjLT5zdGFydDsKKyAgICB9CisKKyAgICAvKiBBY2NlcHQgdGhlIGNvbm5lY3Rpb24gKi8KKyAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworCisgICAgLyogU2VydmVyIHBzYV9jYWxsICovCisgICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICAgICAgIHN0YXR1cyA9IHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOworICAgICAgICBpZih2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNSksIHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBUZXN0IGNoZWNrLSBwc2Ffd3JpdGUgd2l0aCBpbnZhbGlkIGJ1ZmZlciBhZGRyICovCisgICAgICAgICAgICBwc2Ffd3JpdGUobXNnLmhhbmRsZSwgMCwgKHZvaWQgKilidWZmZXIsIG1zZy5pbl9zaXplWzBdKTsKKworICAgICAgICAgICAgLyogc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCisgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgICAgICAgIlx0cHNhX3dyaXRlIHdpdGggaW52YWxpZCBidWZmZXIgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKworICAgICAgICAgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICAgICAgICAgICBpZiAodmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC00KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA2KSwgc3RhdHVzKTsKKyAgICBzdGF0dXMgPSAoKHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCisgICAgICAgICAgICAgICA/IFZBTF9TVEFUVVNfRVJST1IgOiBzdGF0dXMpOworICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU4L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU4L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGNiZjcyCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTgvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA1OC5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDU4LmMgdGVzdF9zdXBwX2kwNTguYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU4L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU4L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzZiNWI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTgvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2kwNTguaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9GRl9CQVNFLCA1OCkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIFBTQV9ET09SQkVMTCBzaWduYWxcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfTE9XX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogU3dpdGNoIHRvIHNlY3VyZSBzaWRlIChjbGllbnRfcGFydGl0aW9uLmMpIGFuZCBleGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluCisgICAgdGVzdFtudW1dX2NsaWVudF90ZXN0c19saXN0IGZyb20gU2VjdXJlIHNpZGUgKi8KKyAgICBzdGF0dXMgPSB2YWwtPnN3aXRjaF90b19zZWN1cmVfY2xpZW50KFRFU1RfTlVNKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTgvdGVzdF9pMDU4LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1OC90ZXN0X2kwNTguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWUyYTkyCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTgvdGVzdF9pMDU4LmMKQEAgLTAsMCArMSw4OSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjZWxzZQorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInRlc3RfaTA1OC5oIgorCitjbGllbnRfdGVzdF90IHRlc3RfaTA1OF9jbGllbnRfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgY2xpZW50X3Rlc3RfcHNhX2Rvb3JiZWxsX3NpZ25hbCwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfZG9vcmJlbGxfc2lnbmFsKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgaW50MzJfdCAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgIHBzYV9oYW5kbGVfdCAgICAgICBoYW5kbGUgPSAwOworI2lmbmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorICAgcHNhX3NpZ25hbF90ICAgICAgIHNpZ25hbHMgPSAwOworI2VuZGlmCisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKKyAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IFBTQV9ET09SQkVMTCBzaWduYWxcbiIsIDApOworCisgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOworICAgaWYgKGhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisjaWZuZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisgICAvKiBXYWl0IGZvciBkb29yYmFsbCBub3RpZmljYXRpb24gKi8KKyAgIHNpZ25hbHMgPSBwc2Ffd2FpdChQU0FfRE9PUkJFTEwsIFBTQV9CTE9DSyk7CisKKyAgIC8qIElzIHRoaXMgZG9vcmJlbGwgc2lnbmFsPyAqLworICAgaWYgKChzaWduYWxzICYgUFNBX0RPT1JCRUxMKSA9PSAwKQorICAgeworICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfSU5WQUxJRF9IQU5ETEU7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX3dhaXQgZGlkbid0IHJlY2VpdmUgZG9vcmJlbGwgc2lnbmFsXG4iLCAwKTsKKyAgIH0KKworICAgLyogV2FpdCBmb3IgZG9vcmJhbGwgbm90aWZpY2F0aW9uIGFnYWluIHRvIGNoZWNrIC0KKyAgICAqIERvb3JiZWxsIHNob3VsZCByZW1haW4gYXNzZXJ0ZWQgdW50aWwgcHNhX2NsZWFyIGlzIGNhbGxlZC4KKyAgICAqLworICAgc2lnbmFscyA9IHBzYV93YWl0KFBTQV9ET09SQkVMTCwgUFNBX0JMT0NLKTsKKworICAgLyogSXMgdGhpcyBkb29yYmVsbCBzaWduYWw/ICovCisgICBpZiAoKHNpZ25hbHMgJiBQU0FfRE9PUkJFTEwpID09IDApCisgICB7CisgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHREb29yYmVsbCBzaWduYWwgY2xlYXJlZCB3aXRob3V0IGNhbGxpbmcgcHNhX2NsZWFyXG4iLCAwKTsKKyAgIH0KKworICAgLyogQ2xlYXIgdGhlIGRvb3JiZWxsIHNpZ25hbCAqLworICAgcHNhX2NsZWFyKCk7CisKKyAgIC8qIElzIGRvb3JiZWxsIHNpbmdhbCBjbGVhcmVkPyAqLworICAgc2lnbmFscyA9IHBzYV93YWl0KFBTQV9ET09SQkVMTCwgUFNBX1BPTEwpOworICAgaWYgKChzaWduYWxzICYgUFNBX0RPT1JCRUxMKSAhPSAwKQorICAgeworICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfSU5WQUxJRF9IQU5ETEU7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX2NsZWFyIGRpZG4ndCBjbGVhciBkb29yYmVsbCBzaWduYWxcbiIsIDApOworICAgfQorI2VuZGlmCisKKyAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgIHJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1OC90ZXN0X2kwNTguaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU4L3Rlc3RfaTA1OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYmE3M2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1OC90ZXN0X2kwNTguaApAQCAtMCwwICsxLDM3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9JMDU4X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDU4X0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxpMDU4KQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorI2Vsc2UKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX2NsaWVudF9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKKyNlbmRpZgorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfaTA1OF9jbGllbnRfdGVzdHNfbGlzdFtdOworCitpbnQzMl90IGNsaWVudF90ZXN0X3BzYV9kb29yYmVsbF9zaWduYWwoc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU4L3Rlc3Rfc3VwcF9pMDU4LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1OC90ZXN0X3N1cHBfaTA1OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZWQzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1OC90ZXN0X3N1cHBfaTA1OC5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfZG9vcmJlbGxfc2lnbmFsKHZvaWQpOworCitzZXJ2ZXJfdGVzdF90IHRlc3RfaTA1OF9zZXJ2ZXJfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgc2VydmVyX3Rlc3RfcHNhX2Rvb3JiZWxsX3NpZ25hbCwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfZG9vcmJlbGxfc2lnbmFsKHZvaWQpCit7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworICAgIHBzYV9tc2dfdCAgICAgICAgICAgICAgIG1zZyA9IHswfTsKKworICAgIC8qIFNlcnZlIHBzYV9jb25uZWN0ICovCisgICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIEFjY2VwdCB0aGUgY29ubmVjdGlvbiAqLworICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisKKyAgICBpZiAobXNnLmNsaWVudF9pZCA+IDApCisgICAgeworICAgICAgICAvKiBEb29yYmVsbCBzaWduYWwgdG8gY2xpZW50IHBhcnRpdGl0b24gKi8KKyAgICAgICAgcHNhX25vdGlmeShtc2cuY2xpZW50X2lkKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJDYWxsZXIgaXMgZnJvbSBub24tc2VjdXJlXG4iLCAwKTsKKyAgICB9CisKKyAgICAvKiBTZXJ2ZSBwc2FfY2xvc2UgKi8KKyAgICBzdGF0dXMgPSAoKHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCisgICAgICAgICAgICAgICA/IFZBTF9TVEFUVVNfRVJST1IgOiBzdGF0dXMpOworICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKTsKKyAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU5L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU5L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQ5ZmE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTkvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA1OS5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDU5LmMgdGVzdF9zdXBwX2kwNTkuYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU5L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU5L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzgyZjk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTkvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2kwNTkuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9GRl9CQVNFLCA1OSkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIHBzYV9ub3RpZnkgd2l0aCBuZWcgcGFydGl0aW9uIGlkXG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0xPV19USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NsaWVudF90ZXN0c19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9pMDU5X2NsaWVudF90ZXN0c19saXN0LCBUUlVFKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTkvdGVzdF9pMDU5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1OS90ZXN0X2kwNTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWJlYmY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTkvdGVzdF9pMDU5LmMKQEAgLTAsMCArMSwzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjZWxzZQorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInRlc3RfaTA1OS5oIgorCitjbGllbnRfdGVzdF90IHRlc3RfaTA1OV9jbGllbnRfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgY2xpZW50X3Rlc3RfcHNhX25vdGlmeV93aXRoX25lZ19wYXJ0X2lkLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IGNsaWVudF90ZXN0X3BzYV9ub3RpZnlfd2l0aF9uZWdfcGFydF9pZChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1OS90ZXN0X2kwNTkuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU5L3Rlc3RfaTA1OS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMzA2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1OS90ZXN0X2kwNTkuaApAQCAtMCwwICsxLDM3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9JMDU5X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDU5X0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxpMDU5KQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorI2Vsc2UKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX2NsaWVudF9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKKyNlbmRpZgorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfaTA1OV9jbGllbnRfdGVzdHNfbGlzdFtdOworCitpbnQzMl90IGNsaWVudF90ZXN0X3BzYV9ub3RpZnlfd2l0aF9uZWdfcGFydF9pZChzZWN1cml0eV90KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTkvdGVzdF9zdXBwX2kwNTkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU5L3Rlc3Rfc3VwcF9pMDU5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRkNjI5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU5L3Rlc3Rfc3VwcF9pMDU5LmMKQEAgLTAsMCArMSw2OSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorCisjZGVmaW5lIE5FR19QQVJUX0lEIC0xMAorCitpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9ub3RpZnlfd2l0aF9uZWdfcGFydF9pZCh2b2lkKTsKKworc2VydmVyX3Rlc3RfdCB0ZXN0X2kwNTlfc2VydmVyX3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHNlcnZlcl90ZXN0X3BzYV9ub3RpZnlfd2l0aF9uZWdfcGFydF9pZCwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2Ffbm90aWZ5X3dpdGhfbmVnX3BhcnRfaWQodm9pZCkKK3sKKworICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCisgICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCisgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQorICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgorICAgICoKKyAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqLworCisgICAgdmFsX3ByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sxXSBUZXN0IHBzYV9ub3RpZnkgd2l0aCBuZWcgcGFydGl0aW9uIGlkXG4iLCAwKTsKKworICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLworICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKSkKKyAgICB7CisgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgfQorCisgICAgLyogcHNhX25vdGlmeV93aXRoX25lZ19wYXJ0X2lkICovCisgICAgcHNhX25vdGlmeShORUdfUEFSVF9JRCk7CisKKyAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdHBzYV9ub3RpZnkoLXZlX3BhcnRfaXApIGNoZWNrIGZhaWxlZFxuIiwgMCk7CisKKyAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgICBpZiAodmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICB7CisgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjAvc291cmNlLm1rIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjAvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiM2UxODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2MC9zb3VyY2UubWsKQEAgLTAsMCArMSwyNSBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9pMDYwLmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KKworQ0NfU09VUkNFX1NQRSAgPSB0ZXN0X2kwNjAuYyB0ZXN0X3N1cHBfaTA2MC5jCitDQ19PUFRJT05TX1NQRSA9CitBU19TT1VSQ0VfU1BFICA9CitBU19PUFRJT05TX1NQRSA9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjAvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjAvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMjQ0MTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2MC90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA2MC5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDYwKQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgcHNhX25vdGlmeSB3aXRoIGludmFsaWQgcG9zaXRpdmUgcGFydC1pZFxuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfaTA2MF9jbGllbnRfdGVzdHNfbGlzdCwgVFJVRSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYwL3Rlc3RfaTA2MC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjAvdGVzdF9pMDYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M2OWI0YwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYwL3Rlc3RfaTA2MC5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2Vsc2UKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwNjAuaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNjBfY2xpZW50X3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIGNsaWVudF90ZXN0X3BzYV9ub3RpZnlfd2l0aF9pbnZhbGlkX3Bvc19wYXJ0X2lkLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IGNsaWVudF90ZXN0X3BzYV9ub3RpZnlfd2l0aF9pbnZhbGlkX3Bvc19wYXJ0X2lkKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYwL3Rlc3RfaTA2MC5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjAvdGVzdF9pMDYwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkMWIxYgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYwL3Rlc3RfaTA2MC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX0kwNjBfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwNjBfQ0xJRU5UX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGkwNjApCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisjZWxzZQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfY2xpZW50X3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfY2xpZW50X3NwKQorI2VuZGlmCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKKworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9pMDYwX2NsaWVudF90ZXN0c19saXN0W107CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfcHNhX25vdGlmeV93aXRoX2ludmFsaWRfcG9zX3BhcnRfaWQoc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYwL3Rlc3Rfc3VwcF9pMDYwLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2MC90ZXN0X3N1cHBfaTA2MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZTc4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2MC90ZXN0X3N1cHBfaTA2MC5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKworI2RlZmluZSBJTlZBTElEX1BPU0lUSVZFX1BBUlRfSUQgMjAwCisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX25vdGlmeV93aXRoX2ludmFsaWRfcG9zX3BhcnRfaWQodm9pZCk7CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDYwX3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9wc2Ffbm90aWZ5X3dpdGhfaW52YWxpZF9wb3NfcGFydF9pZCwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2Ffbm90aWZ5X3dpdGhfaW52YWxpZF9wb3NfcGFydF9pZCh2b2lkKQoreworCisgICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKKyAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKKyAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCisgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCisgICAgKgorICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICovCisKKyAgICB2YWxfcHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgcHNhX25vdGlmeSB3aXRoIGludmFsaWQgcG9zaXRpdmUgcGFydC1pZFxuIiwgMCk7CisKKyAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgICBpZiAodmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUykpCisgICAgeworICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgIH0KKworICAgIC8qIHBzYV9ub3RpZnlfd2l0aF9pbnZhbGlkX3Bvc19wYXJ0X2lkICovCisgICAgcHNhX25vdGlmeShJTlZBTElEX1BPU0lUSVZFX1BBUlRfSUQpOworCisgICAgLyogc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCisgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2Ffbm90aWZ5KGludmFsaWRfK3ZlX19wYXJ0X2lwKSBjaGVjayBmYWlsZWRcbiIsIDApOworCisgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgeworICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYxL3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYxL3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWU0OWZjCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjEvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA2MS5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDYxLmMgdGVzdF9zdXBwX2kwNjEuYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYxL3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYxL3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWJmOGZlCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjEvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2kwNjEuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9GRl9CQVNFLCA2MSkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIHBzYV9jbGVhciBhdCB1bmFzc2VydGVkIGRvb3JiZWxsIHNpZ1xuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfaTA2MV9jbGllbnRfdGVzdHNfbGlzdCwgVFJVRSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYxL3Rlc3RfaTA2MS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjEvdGVzdF9pMDYxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5Y2Q0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYxL3Rlc3RfaTA2MS5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2Vsc2UKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwNjEuaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNjFfY2xpZW50X3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIGNsaWVudF90ZXN0X3BzYV9jbGVhcl9hdF91bmFzc2VydGVkX2Rvb3JiZWxsX3NpZywKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfY2xlYXJfYXRfdW5hc3NlcnRlZF9kb29yYmVsbF9zaWcoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjEvdGVzdF9pMDYxLmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2MS90ZXN0X2kwNjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2U1MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjEvdGVzdF9pMDYxLmgKQEAgLTAsMCArMSwzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA2MV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA2MV9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA2MSkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNjFfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfY2xlYXJfYXRfdW5hc3NlcnRlZF9kb29yYmVsbF9zaWcoc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYxL3Rlc3Rfc3VwcF9pMDYxLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2MS90ZXN0X3N1cHBfaTA2MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMDkwM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2MS90ZXN0X3N1cHBfaTA2MS5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfY2xlYXJfYXRfdW5hc3NlcnRlZF9kb29yYmVsbF9zaWcodm9pZCk7CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDYxX3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9wc2FfY2xlYXJfYXRfdW5hc3NlcnRlZF9kb29yYmVsbF9zaWcsCisgICAgTlVMTCwKK307CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2NsZWFyX2F0X3VuYXNzZXJ0ZWRfZG9vcmJlbGxfc2lnKHZvaWQpCit7CisKKyAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQorICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAorICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKKyAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KKyAgICAqCisgICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKi8KKworICAgIHZhbF9wcmludChQUklOVF9URVNULCAiW0NoZWNrMV0gVGVzdCBwc2FfY2xlYXIgYXQgdW5hc3NlcnRlZCBkb29yYmVsbCBzaWdcbiIsIDApOworCisgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpKQorICAgIHsKKyAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICB9CisKKyAgICAvKiBwc2FfY2xlYXIgd2hlbiB1bmFzc2VydGVkIGRvb3JiZWxsIHNpZyAqLworICAgIHBzYV9jbGVhcigpOworCisgICAgLyogc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCisgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY2xlYXIoKSBjaGVjayBmYWlsZWQgZm9yIHVuYXNzZXJ0ZWQgZG9vcmJlbCBzaWduYWxcbiIsIDApOworCisgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgeworICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYyL3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYyL3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGNmNWQzCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjIvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA2Mi5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDYyLmMgdGVzdF9zdXBwX2kwNjIuYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYyL3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYyL3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmE2N2NlCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjIvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2kwNjIuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9GRl9CQVNFLCA2MikKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIHBzYV93YWl0IHdpdGggdW5hc3NpZ25lZCBzaWduYWxcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfTE9XX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2kwNjJfY2xpZW50X3Rlc3RzX2xpc3QsIFRSVUUpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Mi90ZXN0X2kwNjIuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYyL3Rlc3RfaTA2Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMjhmZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Mi90ZXN0X2kwNjIuYwpAQCAtMCwwICsxLDM3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDYyLmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDYyX2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9wc2Ffd2FpdF93aXRoX3VuYXNzaWduZWRfc2lnbmFsLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IGNsaWVudF90ZXN0X3BzYV93YWl0X3dpdGhfdW5hc3NpZ25lZF9zaWduYWwoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjIvdGVzdF9pMDYyLmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Mi90ZXN0X2kwNjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGNlZGE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjIvdGVzdF9pMDYyLmgKQEAgLTAsMCArMSwzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA2Ml9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA2Ml9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA2MikKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNjJfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2Ffd2FpdF93aXRoX3VuYXNzaWduZWRfc2lnbmFsKHNlY3VyaXR5X3QpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Mi90ZXN0X3N1cHBfaTA2Mi5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjIvdGVzdF9zdXBwX2kwNjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDI5YzBhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjIvdGVzdF9zdXBwX2kwNjIuYwpAQCAtMCwwICsxLDcwIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisKKy8qIHNpZ25hbCBiaXQtMzEgc2hvdWxkIGJlIHVuYXNzaWduZWQgdG8gc2VydmVyIHBhcnRpdGlvbiAqLworI2RlZmluZSBJTlZBTElEX1NJR05BTF9NQVNLIDB4ODAwMDAwMDAKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2Ffd2FpdF93aXRoX3VuYXNzaWduZWRfc2lnbmFsKHZvaWQpOworCitzZXJ2ZXJfdGVzdF90IHRlc3RfaTA2Ml9zZXJ2ZXJfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgc2VydmVyX3Rlc3RfcHNhX3dhaXRfd2l0aF91bmFzc2lnbmVkX3NpZ25hbCwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2Ffd2FpdF93aXRoX3VuYXNzaWduZWRfc2lnbmFsKHZvaWQpCit7CisKKyAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQorICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAorICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKKyAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KKyAgICAqCisgICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKi8KKworICAgIHZhbF9wcmludChQUklOVF9URVNULCAiW0NoZWNrMV0gVGVzdCBwc2Ffd2FpdCB3aXRoIHVuYXNzaWduZWQgc2lnbmFsXG4iLCAwKTsKKworICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLworICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKSkKKyAgICB7CisgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgfQorCisgICAgLyogcHNhX3dhaXQgd2l0aCBzaWduYWwgbWFzayB0aGF0IGRvZXNuJ3QgaW5jbHVkZSBhbnkgYXNzaWduZWQgc2lnbmFsKi8KKyAgICBwc2Ffd2FpdChJTlZBTElEX1NJR05BTF9NQVNLLCBQU0FfUE9MTCk7CisKKyAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdHBzYV93YWl0KCkgY2hlY2sgZmFpbGVkIGZvciB1bmFzc2lnbmVkIHNpZ25hbFxuIiwgMCk7CisKKyAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgICBpZiAodmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICB7CisgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjMvc291cmNlLm1rIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjMvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZjBlNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2My9zb3VyY2UubWsKQEAgLTAsMCArMSwyNSBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9pMDYzLmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KKworQ0NfU09VUkNFX1NQRSAgPSB0ZXN0X2kwNjMuYyB0ZXN0X3N1cHBfaTA2My5jCitDQ19PUFRJT05TX1NQRSA9CitBU19TT1VSQ0VfU1BFICA9CitBU19PUFRJT05TX1NQRSA9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjMvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjMvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMGFjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2My90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA2My5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDYzKQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgcHNhX3dhaXQgc2lnbmFsIG1hc2tcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfTUVESVVNX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2kwNjNfY2xpZW50X3Rlc3RzX2xpc3QsIFRSVUUpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2My90ZXN0X2kwNjMuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYzL3Rlc3RfaTA2My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOGQ3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2My90ZXN0X2kwNjMuYwpAQCAtMCwwICsxLDU3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDYzLmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDYzX2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9wc2Ffd2FpdF9zaWduYWxfbWFzaywKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2Ffd2FpdF9zaWduYWxfbWFzayhzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIHBzYV9oYW5kbGVfdCAgICAgaGFuZGxlID0gMDsKKworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrMV0gVGVzdCBwc2Ffd2FpdCBzaWduYWwgbWFza1xuIiwgMCk7CisKKyAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CisKKyAgIGlmIChoYW5kbGUgIT0gUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAicHNhX2Nvbm5lY3QgZmFpbGVkIC0xXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgIH0KKworICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRCwgMSk7CisKKyAgIGlmIChoYW5kbGUgIT0gUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAicHNhX2Nvbm5lY3QgZmFpbGVkIC0yXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgIH0KKworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYzL3Rlc3RfaTA2My5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjMvdGVzdF9pMDYzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFmZTY4MgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYzL3Rlc3RfaTA2My5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX0kwNjNfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwNjNfQ0xJRU5UX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGkwNjMpCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisjZWxzZQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfY2xpZW50X3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfY2xpZW50X3NwKQorI2VuZGlmCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKKworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9pMDYzX2NsaWVudF90ZXN0c19saXN0W107CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfcHNhX3dhaXRfc2lnbmFsX21hc2soc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYzL3Rlc3Rfc3VwcF9pMDYzLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2My90ZXN0X3N1cHBfaTA2My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OTkwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2My90ZXN0X3N1cHBfaTA2My5jCkBAIC0wLDAgKzEsMTAxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX3dhaXRfc2lnbmFsX21hc2sodm9pZCk7CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDYzX3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9wc2Ffd2FpdF9zaWduYWxfbWFzaywKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2Ffd2FpdF9zaWduYWxfbWFzayh2b2lkKQoreworICAgIHBzYV9zaWduYWxfdCAgICBzaWduYWxzID0gMDsKKyAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworICAgIGludCAgICAgICAgICAgICBsb29wX2NudCA9IDI7CisgICAgcHNhX3NpZ25hbF90ICAgIHNpZ25hbF9tYXNrID0gKFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHIHwgU0VSVkVSX1JFTEFYX01JTk9SX1ZFUlNJT05fU0lHKTsKKworICAgIC8qIERlYnVnIHByaW50ICovCisgICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMTEpLCBWQUxfU1RBVFVTX1NVQ0NFU1MpOworCisgICAgLyogTm90aWZ5IGNsaWVudCBwYXJ0aXRpb24gdG8gbWFrZSBTRVJWRVJfU0VDVVJFX0NPTk5FQ1RfT05MWV9TSUQgY29ubmVjdGlvbiByZXF1ZXN0LgorICAgICAqIFRoaXMgY29ubmVjdGlvbiByZXF1ZXN0IGFjdCBhcyBpcnJpdGF0b3IgdG8gcHNhX3dhaXQoc2lnbmFsX21hc2spIGNhbGwgYW5kIGl0IGlzIHVzZWQKKyAgICAgKiB0byBjb3ZlciB0aGUgcnVsZSAtIFNpZ25hbHMgdGhhdCBhcmUgbm90IGluIHNpZ25hbF9tYXNrIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHBzYV93YWl0LgorICAgICAqIFRoaXMgbWVhbnMsIGR1cmluZyB0aGUgZm9sbG93aW5nIHdoaWxlIGxvb3AsIHJldHVybmVkIHNpZ25hbCB2YXVsZSBzaG91bGQgbm90IGJlCisgICAgICogU0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lHIGFzIHRoaXMgc2lnbmFsIGlzIG5vdCBwYXJ0IG9mIHNpZ25hbF9tYXNrLgorICAgICAqLworICAgIHBzYV9ub3RpZnkoQ0xJRU5UX1BBUlRJVElPTik7CisKKyAgICB3aGlsZSAobG9vcF9jbnQgIT0gMCkKKyAgICB7CisgICAgICAgICBzaWduYWxzID0gcHNhX3dhaXQoc2lnbmFsX21hc2ssIFBTQV9CTE9DSyk7CisKKyAgICAgICAgIC8qIFJ1bGUgLSBSZXR1cm5lZCBzaWduYWxzIHZhbHVlIG11c3QgYmUgc3Vic2V0IHNpZ25hbHMgaW5kaWNhdGVkIGluIHRoZSBzaWduYWxfbWFzay4KKyAgICAgICAgICAqCisgICAgICAgICAgKiBUaGlzIG1lYW4gc2lnbmFsIHZhbHVlIHNob3VsZCBiZSBlaXRoZXIgU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcKKyAgICAgICAgICAqIG9yIFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRy4KKyAgICAgICAgICAqLworICAgICAgICAgaWYgKCgoc2lnbmFscyAmIHNpZ25hbF9tYXNrKSA9PSAwKSAmJgorICAgICAgICAgICAgICgoc2lnbmFscyB8IHNpZ25hbF9tYXNrKSAhPSBzaWduYWxfbWFzaykpCisgICAgICAgICB7CisgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgInBzYV93YWl0LTEgcmV0dXJuZWQgd2l0aCBpbnZhbGlkIHNpZ25hbCB2YWx1ZSA9IDB4JXhcbiIsIHNpZ25hbHMpOworICAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgICAgICAgfQorICAgICAgICAgZWxzZSBpZiAoc2lnbmFscyAmIFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHKQorICAgICAgICAgeworICAgICAgICAgICAgIGlmIChwc2FfZ2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICBsb29wX2NudC0tOworICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2UgaWYgKHNpZ25hbHMgJiBTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUcpCisgICAgICAgICB7CisgICAgICAgICAgICAgaWYgKHBzYV9nZXQoU0VSVkVSX1JFTEFYX01JTk9SX1ZFUlNJT05fU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICBsb29wX2NudC0tOworICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBEZWJ1ZyBwcmludCAqLworICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjEyKSwgVkFMX1NUQVRVU19TVUNDRVNTKTsKKword2FpdDoKKyAgICAvKiBBdCB0aGUgZW5kLCBjb21wbGV0ZXMgdGhlIHN0YXJ2ZWQgY29ubmVjdGlvbgorICAgICAqIHJlcXVlc3Qgb2YgU0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lELgorICAgICAqLworICAgIHNpZ25hbHMgPSBwc2Ffd2FpdChTRVJWRVJfU0VDVVJFX0NPTk5FQ1RfT05MWV9TSUcsIFBTQV9CTE9DSyk7CisgICAgaWYgKChzaWduYWxzICYgU0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lHKSA9PSAwKQorICAgIHsKKyAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgICAgICAgInBzYV93YWl0LTIgcmV0dXJuZWQgd2l0aCBpbnZhbGlkIHNpZ25hbCB2YWx1ZSA9IDB4JXhcbiIsIHNpZ25hbHMpOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgIH0KKworICAgIGlmIChwc2FfZ2V0KFNFUlZFUl9TRUNVUkVfQ09OTkVDVF9PTkxZX1NJRywgJm1zZykgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIGdvdG8gd2FpdDsKKworICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjQvc291cmNlLm1rIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjQvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNWE0ODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NC9zb3VyY2UubWsKQEAgLTAsMCArMSwyNSBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9pMDY0LmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KKworQ0NfU09VUkNFX1NQRSAgPSB0ZXN0X2kwNjQuYyB0ZXN0X3N1cHBfaTA2NC5jCitDQ19PUFRJT05TX1NQRSA9CitBU19TT1VSQ0VfU1BFICA9CitBU19PUFRJT05TX1NQRSA9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjQvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjQvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZGY5N2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NC90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA2NC5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDY0KQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgcHNhX2VvaSB3aXRoIG5vbi1pbnRlcnJ1cHQgc2lnbmFsXG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0xPV19USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIEV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGVzdFtudW1dX2NsaWVudF90ZXN0c19saXN0IGZyb20gTm9uLXNlY3VyZSBzaWRlKi8KKyAgICBzdGF0dXMgPSB2YWwtPmV4ZWN1dGVfbm9uX3NlY3VyZV90ZXN0cyhURVNUX05VTSwgdGVzdF9pMDY0X2NsaWVudF90ZXN0c19saXN0LCBUUlVFKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjQvdGVzdF9pMDY0LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NC90ZXN0X2kwNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmZlM2M5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjQvdGVzdF9pMDY0LmMKQEAgLTAsMCArMSw2NCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjZWxzZQorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInRlc3RfaTA2NC5oIgorCitjbGllbnRfdGVzdF90IHRlc3RfaTA2NF9jbGllbnRfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgY2xpZW50X3Rlc3RfcHNhX2VvaV93aXRoX25vbl9pbnRyX3NpZ25hbCwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfZW9pX3dpdGhfbm9uX2ludHJfc2lnbmFsKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgcHNhX2hhbmRsZV90ICAgICAgICAgaGFuZGxlOworICAgdGVzdF9pbnRyX2ZuX2lkX3QgICAgdGVzdF9pbnRyX2ZuX2lkID0gVEVTVF9QU0FfRU9JX1dJVEhfTk9OX0lOVFJfU0lHTkFMOworCisgICAvKgorICAgICogVGhlIGludGVycnVwdCByZWxhdGVkIHRlc3QgY2hlY2sgaXMgY2FwdHVyZWQgaW4gZHJpdmVyX3BhcnRpdGlvbi5jIGFzIHRoaXMgaXMgdGhlCisgICAgKiBvbmx5IHBhcnRpdGlvbiBpbiB0ZXN0IHN1aXRlIHRoYXQgaG9sZHMgdGhlIGludGVycnVwdCBsaW5lLiBUaGUgaW50ZXJydXB0IHRlc3QgY2hlY2sKKyAgICAqIGlzIGludm9rZWQgYnkgY2xpZW50IGJ5IGNhbGxpbmcgdG8gVEVTVF9JTlRSX1NJRCBSb1Qgc2VydmljZSBvZiBkcml2ZXIgcGFydGl0aW9uIHRoYXQKKyAgICAqIGhvbGQgdGhlIHRlc3QgY2hlY2suCisgICAgKi8KKworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrMV0gVGVzdCBwc2FfZW9pIHdpdGggbm9uLWludGVycnVwdCBzaWduYWxcbiIsIDApOworCisgICAvKiBDb25uZWN0IHRvIFRFU1RfSU5UUl9TSUQgKi8KKyAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChURVNUX0lOVFJfU0lELCAxKTsKKyAgIGlmIChoYW5kbGUgPCAwKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdCBwc2FfY29ubmVjdCBmYWlsZWQuIGhhbmRsZT0weCV4XG4iLCBoYW5kbGUpOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CisgICB9CisKKyAgIC8qIEV4ZWN1dGUgZHJpdmVyIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gVEVTVF9QU0FfRU9JX1dJVEhfTk9OX0lOVFJfU0lHTkFMICovCisgICBwc2FfaW52ZWMgaW52ZWMgPSB7JnRlc3RfaW50cl9mbl9pZCwgc2l6ZW9mKHRlc3RfaW50cl9mbl9pZCl9OworICAgcHNhLT5jYWxsKGhhbmRsZSwgJmludmVjLCAxLCBOVUxMLCAwKTsKKworICAgcHNhLT5jbG9zZShoYW5kbGUpOworCisgICAvKiBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCBkcml2ZXIgcGFydGl0aW9uIGhhbmcgYW5kIGNvbnRyb2wgbmV2ZXIgcmVhY2hlcyBoZXJlLiAqLworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY0L3Rlc3RfaTA2NC5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjQvdGVzdF9pMDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5NjRmMQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY0L3Rlc3RfaTA2NC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX0kwNjRfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwNjRfQ0xJRU5UX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGkwNjQpCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisjZWxzZQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfY2xpZW50X3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfY2xpZW50X3NwKQorI2VuZGlmCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKKworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9pMDY0X2NsaWVudF90ZXN0c19saXN0W107CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfcHNhX2VvaV93aXRoX25vbl9pbnRyX3NpZ25hbChzZWN1cml0eV90KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjQvdGVzdF9zdXBwX2kwNjQuYwpzaW1pbGFyaXR5IGluZGV4IDYwJQpjb3B5IGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCmNvcHkgdG8gYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjQvdGVzdF9zdXBwX2kwNjQuYwppbmRleCAxNDY0OWU5Li41ZWIxMTQzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjQvdGVzdF9zdXBwX2kwNjQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDE3ICsxNSwxOCBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAorI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogCi0jaW5jbHVkZSAicGFsX2NvbW1vbi5oIgotI2luY2x1ZGUgInBhbF9jcnlwdG9faW50Zi5oIgoraW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfZW9pX3dpdGhfbm9uX2ludHJfc2lnbmFsKHZvaWQpOwogCi0vKioKLSAgICBAYnJpZWYgICAgLSBUaGlzIEFQSSB3aWxsIGNhbGwgdGhlIHJlcXVlc3RlZCBjcnlwdG8gZnVuY3Rpb24KLSAgICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQotICAgICAgICAgICAgICAgIHZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0Ci0gICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCi0qKi8KLXBzYV9zdGF0dXNfdCBwYWxfY3J5cHRvX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDY0X3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9wc2FfZW9pX3dpdGhfbm9uX2ludHJfc2lnbmFsLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9lb2lfd2l0aF9ub25faW50cl9zaWduYWwodm9pZCkKIHsKLSAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NS9zb3VyY2UubWsgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NS9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlNzFjZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY1L3NvdXJjZS5tawpAQCAtMCwwICsxLDI1IEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2kwNjUuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQorCitDQ19TT1VSQ0VfU1BFICA9IHRlc3RfaTA2NS5jIHRlc3Rfc3VwcF9pMDY1LmMKK0NDX09QVElPTlNfU1BFID0KK0FTX1NPVVJDRV9TUEUgID0KK0FTX09QVElPTlNfU1BFID0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NS90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NS90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1NDk0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY1L3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9pMDY1LmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfRkZfQkFTRSwgNjUpCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBwc2FfZW9pIHdpdGggdW5hc3NlcnRlZCBzaWduYWxcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfTE9XX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2kwNjVfY2xpZW50X3Rlc3RzX2xpc3QsIFRSVUUpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NS90ZXN0X2kwNjUuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY1L3Rlc3RfaTA2NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyY2RlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NS90ZXN0X2kwNjUuYwpAQCAtMCwwICsxLDY0IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDY1LmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDY1X2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9wc2FfZW9pX3dpdGhfdW5hc3NlcnRlZF9zaWduYWwsCisgICAgTlVMTCwKK307CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfcHNhX2VvaV93aXRoX3VuYXNzZXJ0ZWRfc2lnbmFsKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgcHNhX2hhbmRsZV90ICAgICAgICAgaGFuZGxlOworICAgdGVzdF9pbnRyX2ZuX2lkX3QgICAgdGVzdF9pbnRyX2ZuX2lkID0gVEVTVF9QU0FfRU9JX1dJVEhfVU5BU1NFUlRFRF9TSUdOQUw7CisKKyAgIC8qCisgICAgKiBUaGUgaW50ZXJydXB0IHJlbGF0ZWQgdGVzdCBjaGVjayBpcyBjYXB0dXJlZCBpbiBkcml2ZXJfcGFydGl0aW9uLmMgYXMgdGhpcyBpcyB0aGUKKyAgICAqIG9ubHkgcGFydGl0aW9uIGluIHRlc3Qgc3VpdGUgdGhhdCBob2xkcyB0aGUgaW50ZXJydXB0IGxpbmUuIFRoZSBpbnRlcnJ1cHQgdGVzdCBjaGVjaworICAgICogaXMgaW52b2tlZCBieSBjbGllbnQgYnkgY2FsbGluZyB0byBURVNUX0lOVFJfU0lEIFJvVCBzZXJ2aWNlIG9mIGRyaXZlciBwYXJ0aXRpb24gdGhhdAorICAgICogaG9sZCB0aGUgdGVzdCBjaGVjay4KKyAgICAqLworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sxXSBUZXN0IHBzYV9lb2kgd2l0aCBtdWx0aXBsZSBzaWduYWxcbiIsIDApOworCisgICAvKiBDb25uZWN0IHRvIFRFU1RfSU5UUl9TSUQgKi8KKyAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChURVNUX0lOVFJfU0lELCAxKTsKKyAgIGlmIChoYW5kbGUgPCAwKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdCBwc2FfY29ubmVjdCBmYWlsZWQuIGhhbmRsZT0weCV4XG4iLCBoYW5kbGUpOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CisgICB9CisKKyAgIC8qIEV4ZWN1dGUgZHJpdmVyIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gVEVTVF9QU0FfRU9JX1dJVEhfVU5BU1NFUlRFRF9TSUdOQUwgKi8KKyAgIHBzYV9pbnZlYyBpbnZlYyA9IHsmdGVzdF9pbnRyX2ZuX2lkLCBzaXplb2YodGVzdF9pbnRyX2ZuX2lkKX07CisgICBwc2EtPmNhbGwoaGFuZGxlLCAmaW52ZWMsIDEsIE5VTEwsIDApOworCisgICBwc2EtPmNsb3NlKGhhbmRsZSk7CisKKyAgIC8qIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IGRyaXZlciBwYXJ0aXRpb24gaGFuZyBhbmQgY29udHJvbCBuZXZlciByZWFjaGVzIGhlcmUuICovCisgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjUvdGVzdF9pMDY1LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NS90ZXN0X2kwNjUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDI4OWFjCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjUvdGVzdF9pMDY1LmgKQEAgLTAsMCArMSwzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA2NV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA2NV9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA2NSkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNjVfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfZW9pX3dpdGhfdW5hc3NlcnRlZF9zaWduYWwoc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY1L3Rlc3Rfc3VwcF9pMDY1LmMKc2ltaWxhcml0eSBpbmRleCA2MCUKY29weSBmcm9tIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYwpjb3B5IHRvIGFwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY1L3Rlc3Rfc3VwcF9pMDY1LmMKaW5kZXggMTQ2NDllOS4uMTM4ODg0MCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY1L3Rlc3Rfc3VwcF9pMDY1LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSwxNyArMTUsMTggQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKKyNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKIAotI2luY2x1ZGUgInBhbF9jb21tb24uaCIKLSNpbmNsdWRlICJwYWxfY3J5cHRvX2ludGYuaCIKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2VvaV93aXRoX25vbl9pbnRyX3NpZ25hbCh2b2lkKTsKIAotLyoqCi0gICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgY3J5cHRvIGZ1bmN0aW9uCi0gICAgQHBhcmFtICAgIC0gdHlwZSAgICA6IGZ1bmN0aW9uIGNvZGUKLSAgICAgICAgICAgICAgICB2YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdAotICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cwotKiovCi1wc2Ffc3RhdHVzX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCitzZXJ2ZXJfdGVzdF90IHRlc3RfaTA2NV9zZXJ2ZXJfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgc2VydmVyX3Rlc3RfcHNhX2VvaV93aXRoX25vbl9pbnRyX3NpZ25hbCwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfZW9pX3dpdGhfdW5hc3NlcnRlZF9zaWduYWwodm9pZCkKIHsKLSAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Ni9zb3VyY2UubWsgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Ni9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4ZmNjNQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY2L3NvdXJjZS5tawpAQCAtMCwwICsxLDI1IEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2kwNjYuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQorCitDQ19TT1VSQ0VfU1BFICA9IHRlc3RfaTA2Ni5jIHRlc3Rfc3VwcF9pMDY2LmMKK0NDX09QVElPTlNfU1BFID0KK0FTX1NPVVJDRV9TUEUgID0KK0FTX09QVElPTlNfU1BFID0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Ni90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Ni90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUwNTlmMwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY2L3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9pMDY2LmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfRkZfQkFTRSwgNjYpCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBwc2FfZW9pIHdpdGggbXVsdGlwbGUgc2lnbmFsc1xuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfaTA2Nl9jbGllbnRfdGVzdHNfbGlzdCwgVFJVRSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY2L3Rlc3RfaTA2Ni5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjYvdGVzdF9pMDY2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIxMTBkNgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY2L3Rlc3RfaTA2Ni5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2Vsc2UKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwNjYuaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNjZfY2xpZW50X3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIGNsaWVudF90ZXN0X3BzYV9lb2lfd2l0aF9tdWx0aXBsZV9zaWduYWxzLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IGNsaWVudF90ZXN0X3BzYV9lb2lfd2l0aF9tdWx0aXBsZV9zaWduYWxzKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgcHNhX2hhbmRsZV90ICAgICAgICAgaGFuZGxlOworICAgdGVzdF9pbnRyX2ZuX2lkX3QgICAgdGVzdF9pbnRyX2ZuX2lkID0gVEVTVF9QU0FfRU9JX1dJVEhfTVVMVElQTEVfU0lHTkFMUzsKKworICAgLyoKKyAgICAqIFRoZSBpbnRlcnJ1cHQgcmVsYXRlZCB0ZXN0IGNoZWNrIGlzIGNhcHR1cmVkIGluIGRyaXZlcl9wYXJ0aXRpb24uYyBhcyB0aGlzIGlzIHRoZQorICAgICogb25seSBwYXJ0aXRpb24gaW4gdGVzdCBzdWl0ZSB0aGF0IGhvbGRzIHRoZSBpbnRlcnJ1cHQgbGluZS4gVGhlIGludGVycnVwdCB0ZXN0IGNoZWNrCisgICAgKiBpcyBpbnZva2VkIGJ5IGNsaWVudCBieSBjYWxsaW5nIHRvIFRFU1RfSU5UUl9TSUQgUm9UIHNlcnZpY2Ugb2YgZHJpdmVyIHBhcnRpdGlvbiB0aGF0CisgICAgKiBob2xkIHRoZSB0ZXN0IGNoZWNrLgorICAgICovCisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgcHNhX2VvaSB3aXRoIG11bHRpcGxlIHNpZ25hbHNcbiIsIDApOworCisgICAvKiBDb25uZWN0IHRvIFRFU1RfSU5UUl9TSUQgKi8KKyAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChURVNUX0lOVFJfU0lELCAxKTsKKyAgIGlmIChoYW5kbGUgPCAwKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdCBwc2FfY29ubmVjdCBmYWlsZWQuIGhhbmRsZT0weCV4XG4iLCBoYW5kbGUpOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CisgICB9CisKKyAgIC8qIEV4ZWN1dGUgZHJpdmVyIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gVEVTVF9QU0FfRU9JX1dJVEhfTVVMVElQTEVfU0lHTkFMUyAqLworICAgcHNhX2ludmVjIGludmVjID0geyZ0ZXN0X2ludHJfZm5faWQsIHNpemVvZih0ZXN0X2ludHJfZm5faWQpfTsKKyAgIHBzYS0+Y2FsbChoYW5kbGUsICZpbnZlYywgMSwgTlVMTCwgMCk7CisKKyAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKworICAgLyogVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgZHJpdmVyIHBhcnRpdGlvbiBoYW5nIGFuZCBjb250cm9sIG5ldmVyIHJlYWNoZXMgaGVyZS4gKi8KKyAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Ni90ZXN0X2kwNjYuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY2L3Rlc3RfaTA2Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjM2I5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Ni90ZXN0X2kwNjYuaApAQCAtMCwwICsxLDM3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9JMDY2X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDY2X0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxpMDY2KQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorI2Vsc2UKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX2NsaWVudF9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKKyNlbmRpZgorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfaTA2Nl9jbGllbnRfdGVzdHNfbGlzdFtdOworCitpbnQzMl90IGNsaWVudF90ZXN0X3BzYV9lb2lfd2l0aF9tdWx0aXBsZV9zaWduYWxzKHNlY3VyaXR5X3QpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Ni90ZXN0X3N1cHBfaTA2Ni5jCnNpbWlsYXJpdHkgaW5kZXggNjAlCmNvcHkgZnJvbSBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKY29weSB0byBhcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Ni90ZXN0X3N1cHBfaTA2Ni5jCmluZGV4IDE0NjQ5ZTkuLjg3NDg5NTEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Ni90ZXN0X3N1cHBfaTA2Ni5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsMTcgKzE1LDE4IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCisjaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAKLSNpbmNsdWRlICJwYWxfY29tbW9uLmgiCi0jaW5jbHVkZSAicGFsX2NyeXB0b19pbnRmLmgiCitpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9lb2lfd2l0aF9ub25faW50cl9zaWduYWwodm9pZCk7CiAKLS8qKgotICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGNyeXB0byBmdW5jdGlvbgotICAgIEBwYXJhbSAgICAtIHR5cGUgICAgOiBmdW5jdGlvbiBjb2RlCi0gICAgICAgICAgICAgICAgdmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKLSAgICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKLSoqLwotcHNhX3N0YXR1c190IHBhbF9jcnlwdG9fZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KQorc2VydmVyX3Rlc3RfdCB0ZXN0X2kwNjZfc2VydmVyX3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHNlcnZlcl90ZXN0X3BzYV9lb2lfd2l0aF9ub25faW50cl9zaWduYWwsCisgICAgTlVMTCwKK307CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2VvaV93aXRoX211bHRpcGxlX3NpZ25hbHModm9pZCkKIHsKLSAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RzdWl0ZS5kYiBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdHN1aXRlLmRiCmluZGV4IGJhMDc2NTIuLjRiZmYxMGUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdHN1aXRlLmRiCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdHN1aXRlLmRiCkBAIC0xLDUgKzEsNSBAQAogIy8qKiBAZmlsZQotIyAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogIyAqCiAjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC02Niw1ICs2NiwyNSBAQAogdGVzdF9pMDQ0CiB0ZXN0X2kwNDUKIHRlc3RfaTA0NgordGVzdF9pMDQ3Cit0ZXN0X2kwNDgKK3Rlc3RfaTA0OQordGVzdF9pMDUwCit0ZXN0X2kwNTEKK3Rlc3RfaTA1MgordGVzdF9pMDUzCit0ZXN0X2kwNTQKK3Rlc3RfaTA1NQordGVzdF9pMDU2Cit0ZXN0X2kwNTcKK3Rlc3RfaTA1OAordGVzdF9pMDU5Cit0ZXN0X2kwNjAKK3Rlc3RfaTA2MQordGVzdF9pMDYyCit0ZXN0X2kwNjMKK3Rlc3RfaTA2NAordGVzdF9pMDY1Cit0ZXN0X2kwNjYKIAogKEVORCkKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9wYXJ0aXRpb24vY29tbW9uL2RyaXZlcl9wYXJ0aXRpb24uYyBiL2FwaS10ZXN0cy9mZi9wYXJ0aXRpb24vY29tbW9uL2RyaXZlcl9wYXJ0aXRpb24uYwppbmRleCA1MmMxNzA1Li42NTIzZmQ1IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvcGFydGl0aW9uL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uLmMKKysrIGIvYXBpLXRlc3RzL2ZmL3BhcnRpdGlvbi9jb21tb24vZHJpdmVyX3BhcnRpdGlvbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNywxNyArMTcsMjYgQEAKIAogI2luY2x1ZGUgInZhbC9zcGUvdmFsX2RyaXZlcl9zZXJ2aWNlX2FwaXMuaCIKIAoraW50MzJfdCBkcml2ZXJfdGVzdF9wc2FfZW9pX3dpdGhfbm9uX2ludHJfc2lnbmFsKHZvaWQpOworaW50MzJfdCBkcml2ZXJfdGVzdF9wc2FfZW9pX3dpdGhfdW5hc3NlcnRlZF9zaWduYWwodm9pZCk7CitpbnQzMl90IGRyaXZlcl90ZXN0X3BzYV9lb2lfd2l0aF9tdWx0aXBsZV9zaWduYWxzKHZvaWQpOworCiB2b2lkIGRyaXZlcl9tYWluKHZvaWQpCiB7Ci0gICAgcHNhX3NpZ25hbF90ICAgIHNpZ25hbHMgPSAwOwotICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07Ci0gICAgdWludDMyX3QgICAgICAgIGRhdGEgPSAwOwotICAgIHVhcnRfZm5fdHlwZV90ICB1YXJ0X2ZuOwotICAgIG52bWVtX3BhcmFtX3QgICBudm1lbV9wYXJhbTsKLSAgICBjaGFyICAgICAgICAgICAgc3RyaW5nWzI1Nl0gPSB7MH07Ci0gICAgdWludDhfdCAgICAgICAgIGJ1ZmZlclsyNTZdID0gezB9OwotICAgIHdkX3BhcmFtX3QgICAgICB3ZF9wYXJhbTsKLSAgICBhZGRyX3QgICAgICAgICAgdWFydF9iYXNlOworICAgIHBzYV9zaWduYWxfdCAgICAgICAgc2lnbmFscyA9IDA7CisgICAgcHNhX21zZ190ICAgICAgICAgICBtc2cgPSB7MH07CisgICAgdWludDMyX3QgICAgICAgICAgICBkYXRhID0gMDsKKyAgICB1YXJ0X2ZuX3R5cGVfdCAgICAgIHVhcnRfZm47CisgICAgbnZtZW1fcGFyYW1fdCAgICAgICBudm1lbV9wYXJhbTsKKyAgICB0ZXN0X2ludHJfZm5faWRfdCAgIHRlc3RfaW50cl9mbl9pZDsKKyAgICBjaGFyICAgICAgICAgICAgICAgIHN0cmluZ1syNTZdID0gezB9OworICAgIHVpbnQ4X3QgICAgICAgICAgICAgYnVmZmVyWzI1Nl0gPSB7MH07CisgICAgd2RfcGFyYW1fdCAgICAgICAgICB3ZF9wYXJhbTsKKyAgICBhZGRyX3QgICAgICAgICAgICAgIHVhcnRfYmFzZTsKKworICAgIC8qIEluaXRpYWxpc2VkIGRyaXZlciBtbWlvIHNwYWNlICovCisgICAgaWYgKHZhbF9pbml0X2RyaXZlcl9tZW1vcnkoKSkKKyAgICAgICAgVEVTVF9QQU5JQygpOwogCiAgICAgd2hpbGUgKDEpCiAgICAgewpAQCAtODYsNyArOTUsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLyogU2VydmljZSBXYXRjaGRvZyBmdW5jdGlvbmFsaXR5ICovCi0gICAgICAgIGlmIChzaWduYWxzICYgRFJJVkVSX1dBVENIRE9HX1NJRykKKyAgICAgICAgZWxzZSBpZiAoc2lnbmFscyAmIERSSVZFUl9XQVRDSERPR19TSUcpCiAgICAgICAgIHsKICAgICAgICAgICAgIHBzYV9nZXQoRFJJVkVSX1dBVENIRE9HX1NJRywgJm1zZyk7CiAgICAgICAgICAgICBzd2l0Y2ggKG1zZy50eXBlKQpAQCAtMTM5LDcgKzE0OCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAgLyogU2VydmljZSBOVk1FTSBmdW5jdGlvbmFsaXR5ICovCi0gICAgICAgIGlmIChzaWduYWxzICYgRFJJVkVSX05WTUVNX1NJRykKKyAgICAgICAgZWxzZSBpZiAoc2lnbmFscyAmIERSSVZFUl9OVk1FTV9TSUcpCiAgICAgICAgIHsKICAgICAgICAgICAgIHBzYV9nZXQoRFJJVkVSX05WTUVNX1NJRywgJm1zZyk7CiAgICAgICAgICAgICBzd2l0Y2ggKG1zZy50eXBlKQpAQCAtMTk3LDEyICsyMDYsMTI5IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNpZ25hbHMgPT0gMCkKKyAgICAgICAgLyogU0lEIHJlc2VydmVkIGZvciBpbnRlcnJ1cHQgdGVzdGluZyAqLworICAgICAgICBlbHNlIGlmIChzaWduYWxzICYgVEVTVF9JTlRSX1NJRykKICAgICAgICAgewotICAgICAgICAgICAgdmFsX3ByaW50X3NmKCJwc2Ffd2FpdCByZXR1cm5lZCB6ZXJvIGZvciBQU0FfQkxPQ0suIEVudGVyaW5nIGludG8gaW5maW5pdGUgbG9vcFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKLSAgICAgICAgICAgIHdoaWxlICgxKTsKKyAgICAgICAgICAgIHBzYV9nZXQoVEVTVF9JTlRSX1NJRywgJm1zZyk7CisgICAgICAgICAgICBzd2l0Y2ggKG1zZy50eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgUFNBX0lQQ19DQUxMOgorICAgICAgICAgICAgICAgICAgICBpZiAobXNnLmluX3NpemVbMF0gPiBzaXplb2YodGVzdF9pbnRyX2ZuX2lkX3QpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBidWZmZXIgb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBWQUxfU1RBVFVTX0VSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbF9wcmludF9zZigibXNnLmluX3NpemVbMF0gYnVmZmVyIG92ZXJmbG93XG4iLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcHNhX3JlYWQobXNnLmhhbmRsZSwgMCwgJnRlc3RfaW50cl9mbl9pZCwgbXNnLmluX3NpemVbMF0pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXN0X2ludHJfZm5faWQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVEVTVF9QU0FfRU9JX1dJVEhfTk9OX0lOVFJfU0lHTkFMOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJfdGVzdF9wc2FfZW9pX3dpdGhfbm9uX2ludHJfc2lnbmFsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBWQUxfU1RBVFVTX0VSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRFU1RfUFNBX0VPSV9XSVRIX1VOQVNTRVJURURfU0lHTkFMOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJfdGVzdF9wc2FfZW9pX3dpdGhfdW5hc3NlcnRlZF9zaWduYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFZBTF9TVEFUVVNfRVJST1IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVEVTVF9QU0FfRU9JX1dJVEhfTVVMVElQTEVfU0lHTkFMUzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyX3Rlc3RfcHNhX2VvaV93aXRoX211bHRpcGxlX3NpZ25hbHMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFZBTF9TVEFUVVNfRVJST1IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVEVTVF9JTlRSX1NFUlZJQ0U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUFNBX0lQQ19DT05ORUNUOgorICAgICAgICAgICAgICAgIGNhc2UgUFNBX0lQQ19ESVNDT05ORUNUOgorICAgICAgICAgICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhbF9wcmludF9zZigiVW5leHBlY3RlZCBzaWduYWwgdmFsdWU9MHgleC4gRW50ZXJpbmcgaW50byBpbmZpbml0ZSBsb29wXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbHMpOworICAgICAgICAgICAgVEVTVF9QQU5JQygpOwogICAgICAgICB9CiAgICAgfQogfQorCitpbnQzMl90IGRyaXZlcl90ZXN0X3BzYV9lb2lfd2l0aF9ub25faW50cl9zaWduYWwodm9pZCkKK3sKKyAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgICBpZiAodmFsX2RyaXZlcl9wcml2YXRlX3NldF9ib290X2ZsYWdfZm4oQk9PVF9FWFBFQ1RFRF9OUykpCisgICAgeworICAgICAgICB2YWxfcHJpbnRfc2YoIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgfQorCisgICAgLyogcHNhX2VvaSBzaG91bGQgbm90IHJldHVybiBhcyBzaWduYWwgaXMgbm9uLWludGVycnVwdCBzaWduYWwqLworICAgIHBzYV9lb2koUFNBX0RPT1JCRUxMKTsKKworICAgIC8qIENvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCisgICAgdmFsX3ByaW50X3NmKCJcdENoZWNrIGZvciBwc2FfZW9pKG5vbl9pbnRyX3NpZykgZmFpbGVkXG4iLCAwKTsKKworICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgIGlmICh2YWxfZHJpdmVyX3ByaXZhdGVfc2V0X2Jvb3RfZmxhZ19mbihCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgIHsKKyAgICAgICAgdmFsX3ByaW50X3NmKCJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKK30KKworaW50MzJfdCBkcml2ZXJfdGVzdF9wc2FfZW9pX3dpdGhfdW5hc3NlcnRlZF9zaWduYWwodm9pZCkKK3sKKyAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgICBpZiAodmFsX2RyaXZlcl9wcml2YXRlX3NldF9ib290X2ZsYWdfZm4oQk9PVF9FWFBFQ1RFRF9OUykpCisgICAgeworICAgICAgICB2YWxfcHJpbnRfc2YoIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgfQorCisgICAgLyogcHNhX2VvaSBzaG91bGQgbm90IHJldHVybiBhcyBEUklWRVJfVUFSVF9JTlRSX1NJRyBpcyB1bmFzc2VydGVkICovCisgICAgcHNhX2VvaShEUklWRVJfVUFSVF9JTlRSX1NJRyk7CisKKyAgICAvKiBDb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLworICAgIHZhbF9wcmludF9zZigiXHRDaGVjayBmb3IgcHNhX2VvaShtdWx0aXBsZV9zaWduYWxzKSBmYWlsZWRcbiIsIDApOworCisgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICAgaWYgKHZhbF9kcml2ZXJfcHJpdmF0ZV9zZXRfYm9vdF9mbGFnX2ZuKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgeworICAgICAgICB2YWxfcHJpbnRfc2YoIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworfQorCitpbnQzMl90IGRyaXZlcl90ZXN0X3BzYV9lb2lfd2l0aF9tdWx0aXBsZV9zaWduYWxzKHZvaWQpCit7CisgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICAgaWYgKHZhbF9kcml2ZXJfcHJpdmF0ZV9zZXRfYm9vdF9mbGFnX2ZuKEJPT1RfRVhQRUNURURfTlMpKQorICAgIHsKKyAgICAgICAgdmFsX3ByaW50X3NmKCJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgIH0KKworICAgIC8qIHBzYV9lb2kgc2hvdWxkIG5vdCByZXR1cm4gYXMgaXJxX3NpZ25hbCBpcyBwcm92aWRlZCB3aXRoIG11bHRpcGxlIHNpZ25hbHMgKi8KKyAgICBwc2FfZW9pKERSSVZFUl9VQVJUX0lOVFJfU0lHfFRFU1RfSU5UUl9TSUcpOworCisgICAgLyogQ29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgICB2YWxfcHJpbnRfc2YoIlx0Q2hlY2sgZm9yIHBzYV9lb2kobXVsdGlwbGVfc2lnbmFscykgZmFpbGVkXG4iLCAwKTsKKworICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgIGlmICh2YWxfZHJpdmVyX3ByaXZhdGVfc2V0X2Jvb3RfZmxhZ19mbihCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgIHsKKyAgICAgICAgdmFsX3ByaW50X3NmKCJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9wYXJ0aXRpb24vaXBjL2NsaWVudF9wYXJ0aXRpb24uYyBiL2FwaS10ZXN0cy9mZi9wYXJ0aXRpb24vaXBjL2NsaWVudF9wYXJ0aXRpb24uYwppbmRleCBmZTljOWQ1Li43OTRmNmQyIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvcGFydGl0aW9uL2lwYy9jbGllbnRfcGFydGl0aW9uLmMKKysrIGIvYXBpLXRlc3RzL2ZmL3BhcnRpdGlvbi9pcGMvY2xpZW50X3BhcnRpdGlvbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC04OCwxMyArODgsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiVW5leHBlY3RlZCBtZXNzYWdlIHR5cGUgJWQhIiwgKGludCkobXNnLnR5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpOworICAgICAgICAgICAgICAgICAgICBURVNUX1BBTklDKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgLyogU2VydmVyX3BhcnRpdGlvbiByZXF1ZXN0cyBjbGllbnQgdG8gY29ubmVjdCB0byBTRVJWRVJfU0VDVVJFX0NPTk5FQ1RfT05MWV9TSUQgKi8KKyAgICAgICAgZWxzZSBpZiAoc2lnbmFscyAmIFBTQV9ET09SQkVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHBzYV9jb25uZWN0KFNFUlZFUl9TRUNVUkVfQ09OTkVDVF9PTkxZX1NJRCwgMikgIT0gUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgInBzYV9jb25uZWN0IGZhaWxlZCBcbiIsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHNhX2NsZWFyKCk7CisgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJJbiBjbGllbnRfcGFydGl0aW9uLCBDb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoIGhlcmVcbiIsIDApOwotICAgICAgICAgICAgd2hpbGUgKDEpOworICAgICAgICAgICAgVEVTVF9QQU5JQygpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL3BhcnRpdGlvbi9pcGMvY2xpZW50X3BhcnRpdGlvbi5oIGIvYXBpLXRlc3RzL2ZmL3BhcnRpdGlvbi9pcGMvY2xpZW50X3BhcnRpdGlvbi5oCmluZGV4IDlmM2RiZDMuLjI1OTIyNDMgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9wYXJ0aXRpb24vaXBjL2NsaWVudF9wYXJ0aXRpb24uaAorKysgYi9hcGktdGVzdHMvZmYvcGFydGl0aW9uL2lwYy9jbGllbnRfcGFydGl0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE3LDggKzE3LDkgQEAKIAogI2lmbmRlZiBfQ0xJRU5UX1BBUlRfSF8KICNkZWZpbmUgX0NMSUVOVF9QQVJUX0hfCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgogCiB0eXBlZGVmIGNsaWVudF90ZXN0X3QgKCpjbGllbnRfdGVzdF9saXN0X3QpOwogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvcGFydGl0aW9uL2lwYy9zZXJ2ZXJfcGFydGl0aW9uLmMgYi9hcGktdGVzdHMvZmYvcGFydGl0aW9uL2lwYy9zZXJ2ZXJfcGFydGl0aW9uLmMKaW5kZXggNWQ4ZDQ0Ni4uMzVjMDY0MSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL3BhcnRpdGlvbi9pcGMvc2VydmVyX3BhcnRpdGlvbi5jCisrKyBiL2FwaS10ZXN0cy9mZi9wYXJ0aXRpb24vaXBjL3NlcnZlcl9wYXJ0aXRpb24uYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtOTEsMTMgKzkxLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlVuZXhwZWN0ZWQgbWVzc2FnZSB0eXBlICVkISIsIChpbnQpKG1zZy50eXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKTsKKyAgICAgICAgICAgICAgICAgICAgVEVTVF9QQU5JQygpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiSW4gc2VydmVyX3BhcnRpdGlvbiwgQ29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaCBoZXJlXG4iLCAwKTsKLSAgICAgICAgICAgIHdoaWxlICgxKTsKKyAgICAgICAgICAgIFRFU1RfUEFOSUMoKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9wYXJ0aXRpb24vaXBjL3NlcnZlcl9wYXJ0aXRpb24uaCBiL2FwaS10ZXN0cy9mZi9wYXJ0aXRpb24vaXBjL3NlcnZlcl9wYXJ0aXRpb24uaAppbmRleCA1NWQ0NWYzLi44ZmEwY2I5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvcGFydGl0aW9uL2lwYy9zZXJ2ZXJfcGFydGl0aW9uLmgKKysrIGIvYXBpLXRlc3RzL2ZmL3BhcnRpdGlvbi9pcGMvc2VydmVyX3BhcnRpdGlvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNyw4ICsxNyw4IEBACiAjaWZuZGVmIF9TRVJWRVJfUEFSVF9IXwogI2RlZmluZSBfU0VSVkVSX1BBUlRfSF8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCiAKIHR5cGVkZWYgc2VydmVyX3Rlc3RfdCAoKnNlcnZlcl90ZXN0X2xpc3RfdCk7CiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3VhcnQvY21zZGsvcGFsX3VhcnQuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3VhcnQvY21zZGsvcGFsX3VhcnQuYwppbmRleCA0ODUxNWMxLi41Y2NjNWZjIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vZHJpdmVycy91YXJ0L2Ntc2RrL3BhbF91YXJ0LmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL2RyaXZlcnMvdWFydC9jbXNkay9wYWxfdWFydC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC00MSw3ICs0MSw3IEBACiBzdGF0aWMgaW50IHBhbF91YXJ0X2Ntc2RrX2lzX3R4X2VtcHR5KHZvaWQpCiB7CiAgICAgLyogTm90ZTogQ2hlY2sgZm9yIGVtcHR5IFRYIEZJRk8gKi8KLSAgICByZXR1cm4gKCEoKHVhcnRfdCAqKSBnX3VhcnQpLT5TVEFURSAmIENNU0RLX1VBUlRfU1RBVEVfVFhCRl9Nc2spOworICAgIHJldHVybiAoISgoKHVhcnRfdCAqKSBnX3VhcnQpLT5TVEFURSAmIENNU0RLX1VBUlRfU1RBVEVfVFhCRl9Nc2spKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vZHJpdmVycy91YXJ0L211c2NhX2EvcGFsX3VhcnQuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3VhcnQvbXVzY2FfYS9wYWxfdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNjJiMDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vZHJpdmVycy91YXJ0L211c2NhX2EvcGFsX3VhcnQuYwpAQCAtMCwwICsxLDEyMCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInBhbF91YXJ0LmgiCisKK3ZvbGF0aWxlIHVpbnQzMl90IHVhcnQ7CisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIFVBUlQKKyAgICBAcGFyYW0gICAgLSB1YXJ0X2Jhc2VfYWRkcjogQmFzZSBhZGRyZXNzIG9mIFVBUlQKKyoqLwordm9pZCBwYWxfdWFydF9pbml0KHVpbnQzMl90IHVhcnRfYmFzZV9hZGRyKQoreworICAgIHVhcnQgPSB1YXJ0X2Jhc2VfYWRkcjsKK30KKworLyoqCisgICAgQGJyaWVmICAgIC0gVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIGVtcHR5IFRYIEZJRk8KKyoqLworc3RhdGljIGludCBwYWxfdWFydF9pc190eF9lbXB0eSh2b2lkKQoreworICAgIGlmICgoKCh1YXJ0X2d0ICopdWFydCktPnVhcnRjciAmIFVBUlRfUEwwMTFfVUFUUkNSX0VOX01BU0spICYmCisgICAgICAgIC8qIFVBUlQgaXMgZW5hYmxlZCAqLworICAgICAgICAoKCh1YXJ0X2d0ICopdWFydCktPnVhcnRjciAmIFVBUlRfUEwwMTFfVUFSVENSX1RYX0VOX01BU0spICYmCisgICAgICAgIC8qIFRyYW5zbWl0IGlzIGVuYWJsZWQgKi8KKyAgICAgICAgKCgoKHVhcnRfZ3QgKil1YXJ0KS0+dWFydGZyICYgVUFSVF9QTDAxMV9VQVJURlJfVFhfRklGT19GVUxMKSA9PSAwKSkKKyAgICB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisvKioKKyAgICBAYnJpZWYgICAgLSBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgZW1wdHkgVFggRklGTyBhbmQgd3JpdGVzIHRvIEZJRk8gcmVnaXN0ZXIKKyoqLworc3RhdGljIHZvaWQgcGFsX3VhcnRfcHV0Yyh1aW50OF90IGMpCit7CisgICAgY29uc3QgdWludDhfdCBwZGF0YSA9ICh1aW50OF90KWM7CisKKyAgICAvKiBlbnN1cmUgVFggYnVmZmVyIHRvIGJlIGVtcHR5ICovCisgICAgd2hpbGUoIXBhbF91YXJ0X2lzX3R4X2VtcHR5KCkpOworCisgICAgLyogd3JpdGUgdGhlIGRhdGEgKHVwcGVyIDI0IGJpdHMgYXJlIHJlc2VydmVkKSAqLworICAgICgodWFydF9ndCAqKXVhcnQpLT51YXJ0ZHIgPSBwZGF0YTsKK30KKworLyoqCisgICAgQGJyaWVmICAgIC0gVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIGlucHV0IHN0cmluZyBhbmQgd3JpdGVzIGJ5dGVzIGludG8gVUFSVCBUWCBGSUZPCisgICAgQHBhcmFtICAgIC0gc3RyICAgICAgOiBJbnB1dCBTdHJpbmcKKyAgICAgICAgICAgICAgLSBkYXRhICAgICA6IFZhbHVlIGZvciBmb3JtYXQgc3BlY2lmaWVyCisqKi8KK3ZvaWQgcGFsX3VhcnRfcHJpbnQoY2hhciAqc3RyLCB1aW50MzJfdCBkYXRhKQoreworICAgIHVpbnQ4X3QgaiwgYnVmZmVyWzE2XTsKKyAgICBpbnQ4X3QgIGkgPSAwOworCisgICAgZm9yICg7ICpzdHIgIT0gJ1wwJzsgKytzdHIpCisgICAgeworICAgICAgICBpZiAoKnN0ciA9PSAnJScpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrc3RyOworICAgICAgICAgICAgaWYgKCpzdHIgPT0gJ2QnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdoaWxlIChkYXRhICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBqICAgICAgICAgPSBkYXRhICUgMTA7CisgICAgICAgICAgICAgICAgICAgIGRhdGEgICAgICA9IGRhdGEgLzEwOworICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSBqICsgNDg7CisgICAgICAgICAgICAgICAgICAgIGkgICAgICAgICs9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoKnN0ciA9PSAneCcgfHwgKnN0ciA9PSAnWCcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGRhdGEgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGogICAgICAgICA9IGRhdGEgJiAweGY7CisgICAgICAgICAgICAgICAgICAgIGRhdGEgICAgPj49IDQ7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IGogKyAoKGogPiA5KSA/IDU1IDogNDgpOworICAgICAgICAgICAgICAgICAgICBpICAgICAgICArPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaSA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwYWxfdWFydF9wdXRjKGJ1ZmZlclstLWldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFsX3VhcnRfcHV0Yyg0OCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwYWxfdWFydF9wdXRjKCpzdHIpOworCisgICAgICAgICAgICBpZiAoKnN0ciA9PSAnXG4nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhbF91YXJ0X3B1dGMoJ1xyJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vZHJpdmVycy91YXJ0L211c2NhX2EvcGFsX3VhcnQuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3VhcnQvbXVzY2FfYS9wYWxfdWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMTI1NWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vZHJpdmVycy91YXJ0L211c2NhX2EvcGFsX3VhcnQuaApAQCAtMCwwICsxLDUzIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZuZGVmIF9QQUxfVUFSVF9DTVNES19IXworI2RlZmluZSBfUEFMX1VBUlRfQ01TREtfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisvKiB0eXBlZGVmJ3MgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdm9sYXRpbGUgdWludDMyX3QgdWFydGRyOyAgICAgICAgICAvKiBPZmZzZXQ6IDB4MDAwIChSL1cpIERhdGEgUmVnaXN0ZXIgKi8KKyAgICB1bmlvbiB7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IHVhcnRyc3I7ICAgICAvKiBPZmZzZXQ6IDB4MDA0IChSLyApIFJlY2VpdmUgc3RhdHVzIHJlZ2lzdGVyICovCisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IHVhcnRlY3I7ICAgICAvKiBPZmZzZXQ6IDB4MDA0ICggL1cpIEVycm9yIGNsZWFyIHJlZ2lzdGVyICovCisgICAgfTsKKyAgICB2b2xhdGlsZSB1aW50MzJfdCByZXNlcnZlZF8wWzRdOyAgIC8qIE9mZnNldDogMHgwMDgtMHgwMTQgUmVzZXJ2ZWQgKi8KKyAgICB2b2xhdGlsZSB1aW50MzJfdCB1YXJ0ZnI7ICAgICAgICAgIC8qIE9mZnNldDogMHgwMTggKFIvICkgRmxhZyByZWdpc3RlciAqLworICAgIHZvbGF0aWxlIHVpbnQzMl90IHJlc2VydmVkXzE7ICAgICAgLyogT2Zmc2V0OiAweDAxQyBSZXNlcnZlZCAqLworICAgIHZvbGF0aWxlIHVpbnQzMl90IHVhcnRpbHByOyAgICAgICAgLyogT2Zmc2V0OiAweDAyMCAoUi9XKSBJckRBIGxvdy1wb3dlciBjb3VudGVyIHJlZ2lzdGVyICovCisgICAgdm9sYXRpbGUgdWludDMyX3QgdWFydGlicmQ7ICAgICAgICAvKiBPZmZzZXQ6IDB4MDI0IChSL1cpIEludGVnZXIgYmF1ZCByYXRlIHJlZ2lzdGVyICovCisgICAgdm9sYXRpbGUgdWludDMyX3QgdWFydGZicmQ7ICAgICAgICAvKiBPZmZzZXQ6IDB4MDI4IChSL1cpIEZyYWN0aW9uYWwgYmF1ZCByYXRlIHJlZ2lzdGVyICovCisgICAgdm9sYXRpbGUgdWludDMyX3QgdWFydGxjcl9oOyAgICAgICAvKiBPZmZzZXQ6IDB4MDJDIChSL1cpIExpbmUgY29udHJvbCByZWdpc3RlciAqLworICAgIHZvbGF0aWxlIHVpbnQzMl90IHVhcnRjcjsgICAgICAgICAgLyogT2Zmc2V0OiAweDAzMCAoUi9XKSBDb250cm9sIHJlZ2lzdGVyICovCit9IHVhcnRfZ3Q7CisKKyNkZWZpbmUgVUFSVF9QTDAxMV9VQVJUQ1JfVUFSVEVOX09GRiAgICAgICAweDB1CisjZGVmaW5lIFVBUlRfUEwwMTFfVUFSVENSX1RYRV9PRkYgICAgICAgICAgMHg4dQorI2RlZmluZSBVQVJUX1BMMDExX1VBUlRGUl9UWF9GSUZPX0ZVTExfT0ZGIDB4NXUKKworI2RlZmluZSBVQVJUX1BMMDExX1VBVFJDUl9FTl9NQVNLICAgICAgICAgICgweDF1IDw8IFVBUlRfUEwwMTFfVUFSVENSX1VBUlRFTl9PRkYpCisjZGVmaW5lIFVBUlRfUEwwMTFfVUFSVENSX1RYX0VOX01BU0sgICAgICAgKDB4MXUgPDwgVUFSVF9QTDAxMV9VQVJUQ1JfVFhFX09GRikKKyNkZWZpbmUgVUFSVF9QTDAxMV9VQVJURlJfVFhfRklGT19GVUxMICAgICAoMHgxdSA8PCBVQVJUX1BMMDExX1VBUlRGUl9UWF9GSUZPX0ZVTExfT0ZGKQorCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCit2b2lkIHBhbF91YXJ0X2luaXQodWludDMyX3QgdWFydF9iYXNlX2FkZHIpOwordm9pZCBwYWxfdWFydF9wcmludChjaGFyICpzdHIsIHVpbnQzMl90IGRhdGEpOworCisjZW5kaWYgLyogX1BBTF9VQVJUX0NNU0RLX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vZHJpdmVycy93YXRjaGRvZy9jbXNkay9wYWxfd2RfY21zZGsuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3dhdGNoZG9nL2Ntc2RrL3BhbF93ZF9jbXNkay5jCmluZGV4IGU5ZDIwYmIuLmIyNzUxNmQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3dhdGNoZG9nL2Ntc2RrL3BhbF93ZF9jbXNkay5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3dhdGNoZG9nL2Ntc2RrL3BhbF93ZF9jbXNkay5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgLyogRGlzYWJsZSBUaW1lciAqLwogICAgICgod2RfdGltZXJfdCAqKWJhc2VfYWRkciktPkNUUkwgPSAweDA7CiAKLSAgICBpZiAodGltZV91cyA9PSAwICkKKyAgICBpZiAodGltZV91cyA9PSAwKQogICAgIHsKICAgICAgICAgKCh3ZF90aW1lcl90ICopYmFzZV9hZGRyKS0+TE9BRCA9IDA7CiAgICAgfQpAQCAtNDgsMTAgKzQ4LDggQEAKICoqLwogaW50IHBhbF93ZF9jbXNka19lbmFibGUoYWRkcl90IGJhc2VfYWRkcikKIHsKLSAgICAvKiBFbmFibGUgSW50ZXJydXB0ICovCi0gICAgKCh3ZF90aW1lcl90ICopYmFzZV9hZGRyKS0+Q1RSTCA9IFdhdGNoZG9nX0NUUkxfSU5URU5fTXNrOwotICAgIC8qIEVuYWJsZSBSZXNldCAqLwotICAgICgod2RfdGltZXJfdCAqKWJhc2VfYWRkciktPkNUUkwgfD0gV2F0Y2hkb2dfQ1RSTF9SRVNFTl9Nc2s7CisgICAgLyogRW5hYmxlIGNvdW50ZXIgYnkgZW5hYmxpbmcgaW50ciBhbmQgcmVzZXQgKi8KKyAgICAgKCh3ZF90aW1lcl90ICopYmFzZV9hZGRyKS0+Q1RSTCA9IChXYXRjaGRvZ19DVFJMX0lOVEVOX01zayB8IFdhdGNoZG9nX0NUUkxfUkVTRU5fTXNrKTsKIAogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jbGllbnRfYXBpX2ludGYuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY2xpZW50X2FwaV9pbnRmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYzc1ZDIuLjAwMDAwMDAKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jbGllbnRfYXBpX2ludGYuaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotKiovCi0KLSNpZm5kZWYgX1BBTF9DTElFTlRfQVBJX0hfCi0jZGVmaW5lIF9QQUxfQ0xJRU5UX0FQSV9IXwotCi0jaWYgUFNBX0lQQ19JTVBMRU1FTlRFRAotLyogcHNhL2NsaWVudC5oOiBDb250YWlucyB0aGUgQ2xpZW50IEFQSSBlbGVtZW50cy4gQWNjZXNzaWJsZSB0byBhbGwgYXBwbGljYXRpb25zICovCi0jaW5jbHVkZSAicHNhL2NsaWVudC5oIgotCi0vKiBwc2FfbWFuaWZlc3Qvc2lkLmg6ICBNYWNybyBkZWZpbml0aW9ucyBkZXJpdmVkIGZyb20gbWFuaWZlc3QgZmlsZXMgdGhhdCBtYXAgZnJvbSBSb1QgU2VydmljZQotICogbmFtZXMgdG8gU2VydmljZSBJRHMgKFNJRHMpLgotICogUGFydGl0aW9uIG1hbmlmZXN0IHBhcnNlIGJ1aWxkIHRvb2wgbXVzdCBwcm92aWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZpbGUuCi0qLwotI2luY2x1ZGUgInBzYV9tYW5pZmVzdC9zaWQuaCIKLQotI2Vsc2UKLSNpbmNsdWRlICJwYWxfY29tbW9uLmgiCi0KLSNkZWZpbmUgUFNBX1ZFUlNJT05fTk9ORSAgICAgICAgICAgICgwKQotI2RlZmluZSBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgKDApCi0jZGVmaW5lIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQgICAgICAoSU5UMzJfTUlOICsgMSkKLSNkZWZpbmUgUFNBX0NPTk5FQ1RJT05fQlVTWSAgICAgICAgIChJTlQzMl9NSU4gKyAyKQotI2RlZmluZSBQU0FfRFJPUF9DT05ORUNUSU9OICAgICAgICAgKElOVDMyX01JTikKLSNkZWZpbmUgUFNBX05VTExfSEFORExFICAgICAgICAgICAgICgocHNhX2hhbmRsZV90KTApCi0KLXR5cGVkZWYgaW50MzJfdCBwc2Ffc3RhdHVzX3Q7Ci10eXBlZGVmIGludDMyX3QgcHNhX2hhbmRsZV90OwotCi10eXBlZGVmIHN0cnVjdCBwc2FfaW52ZWMgewotICAgIGNvbnN0IHZvaWQgKmJhc2U7Ci0gICAgc2l6ZV90IGxlbjsKLX0gcHNhX2ludmVjOwotCi10eXBlZGVmIHN0cnVjdCBwc2Ffb3V0dmVjIHsKLSAgICB2b2lkICpiYXNlOwotICAgIHNpemVfdCBsZW47Ci19IHBzYV9vdXR2ZWM7Ci0KLXVpbnQzMl90IHBzYV9mcmFtZXdvcmtfdmVyc2lvbih2b2lkKTsKLXVpbnQzMl90IHBzYV92ZXJzaW9uKHVpbnQzMl90IHNpZCk7Ci1wc2FfaGFuZGxlX3QgcHNhX2Nvbm5lY3QodWludDMyX3Qgc2lkLCB1aW50MzJfdCBtaW5vcl92ZXJzaW9uKTsKLXBzYV9zdGF0dXNfdCBwc2FfY2FsbChwc2FfaGFuZGxlX3QgaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBzYV9pbnZlYyAqaW5fdmVjLAotICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgcHNhX291dHZlYyAqb3V0X3ZlYywKLSAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0X2xlbik7Ci12b2lkIHBzYV9jbG9zZShwc2FfaGFuZGxlX3QgaGFuZGxlKTsKLSNlbmRpZiAvKiBQU0FfSVBDX0lNUExFTUVOVEVEICovCi0KLXVpbnQzMl90IHBhbF9pcGNfZnJhbWV3b3JrX3ZlcnNpb24odm9pZCk7Ci11aW50MzJfdCBwYWxfaXBjX3ZlcnNpb24odWludDMyX3Qgc2lkKTsKLXBzYV9oYW5kbGVfdCBwYWxfaXBjX2Nvbm5lY3QodWludDMyX3Qgc2lkLCB1aW50MzJfdCBtaW5vcl92ZXJzaW9uKTsKLXBzYV9zdGF0dXNfdCBwYWxfaXBjX2NhbGwocHNhX2hhbmRsZV90IGhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwc2FfaW52ZWMgKmluX3ZlYywKLSAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5fbGVuLAotICAgICAgICAgICAgICAgICAgICAgIHBzYV9vdXR2ZWMgKm91dF92ZWMsCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG91dF9sZW4pOwotdm9pZCBwYWxfaXBjX2Nsb3NlKHBzYV9oYW5kbGVfdCBoYW5kbGUpOwotI2VuZGlmIC8qIF9QQUxfQ0xJRU5UX0FQSV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9faW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9faW50Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGFhMzYxLi4wMDAwMDAwCi0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2ludGYuYworKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSoqLwotCi0KLSNpbmNsdWRlICJwYWxfY3J5cHRvX2ludGYuaCIKLQotLyoqCi0gICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgY3J5cHRvIGZ1bmN0aW9uCi0gICAgQHBhcmFtICAgIC0gdHlwZSAgICA6IGZ1bmN0aW9uIGNvZGUKLSAgICAgICAgICAgICAgICB2YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdAotICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cwotKiovCi1wc2Ffc3RhdHVzX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCi17Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgc2l6ZSwgKmxlbmd0aCwgc2FsdF9sZW5ndGgsIGxhYmVsX2xlbmd0aCwgY2lwaGVydGV4dF9zaXplOwotICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICpidWZmZXIsICpjaXBoZXJ0ZXh0OwotICAgIGNvbnN0IHVpbnQ4X3QgICAgICAgICAgICpzYWx0LCAqbGFiZWwsICpub25jZSwgKmFkZGl0aW9uYWxfZGF0YSwgKnBsYWludGV4dDsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBzdGF0dXM7Ci0gICAgY29uc3Qgdm9pZCAgICAgICAgICAgICAgKmV4dHJhOwotICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGV4dHJhX3NpemUsIGNhcGFjaXR5LCAqZ2VuX2NhcCwgbm9uY2VfbGVuZ3RoLCBhZGRpdGlvbmFsX2RhdGFfbGVuZ3RoOwotICAgIHBzYV9rZXlfc2xvdF90ICAgICAgICAgIGtleV9zbG90OwotICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlLCAqa2V5X3R5cGVfb3V0OwotICAgIHBzYV9rZXlfcG9saWN5X3QgICAgICAgICpwb2xpY3k7Ci0gICAgcHNhX2tleV91c2FnZV90ICAgICAgICAgdXNhZ2UsICp1c2FnZV9vdXQ7Ci0gICAgcHNhX2tleV9saWZldGltZV90ICAgICAgbGlmZXRpbWUsICpsaWZldGltZV9vdXQ7Ci0gICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAgYWxnLCAqYWxnX291dDsKLSAgICBwc2FfaGFzaF9vcGVyYXRpb25fdCAgICAqaGFzaF9vcGVyYXRpb247Ci0gICAgcHNhX21hY19vcGVyYXRpb25fdCAgICAgKm1hY19vcGVyYXRpb247Ci0gICAgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCAgKmdlbmVyYXRvcjsKLQotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICAgIGNhc2UgUEFMX0NSWVBUT19JTklUOgotICAgICAgICAgICAgcmV0dXJuIHBzYV9jcnlwdG9faW5pdCgpOwotICAgICAgICBjYXNlIFBBTF9DUllQVE9fR0VORVJBVEVfUkFORE9NOgotICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOwotICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIGludCk7Ci0gICAgICAgICAgICByZXR1cm4gcHNhX2dlbmVyYXRlX3JhbmRvbShidWZmZXIsIHNpemUpOwotICAgICAgICBjYXNlIFBBTF9DUllQVE9fSU1QT1JUX0tFWToKLSAgICAgICAgICAgIGtleV9zbG90ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9zbG90X3QpOwotICAgICAgICAgICAga2V5X3R5cGUgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3R5cGVfdCk7Ci0gICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7Ci0gICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgaW50KTsKLSAgICAgICAgICAgIHN0YXR1cyA9IHBzYV9pbXBvcnRfa2V5KGtleV9zbG90LCBrZXlfdHlwZSwgYnVmZmVyLCBzaXplKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIGNhc2UgUEFMX0NSWVBUT19FWFBPUlRfS0VZOgotICAgICAgICAgICAga2V5X3Nsb3QgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3Nsb3RfdCk7Ci0gICAgICAgICAgICBidWZmZXIgPSAodWludDhfdCAqKSh2YV9hcmcodmFsaXN0LCB1aW50OF90KikpOwotICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIGludCk7Ci0gICAgICAgICAgICBsZW5ndGggPSAoc2l6ZV90ICopdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7Ci0gICAgICAgICAgICBzdGF0dXMgPSBwc2FfZXhwb3J0X2tleShrZXlfc2xvdCwgYnVmZmVyLCBzaXplLCBsZW5ndGgpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0VYUE9SVF9QVUJMSUNfS0VZOgotICAgICAgICAgICAga2V5X3Nsb3QgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3Nsb3RfdCk7Ci0gICAgICAgICAgICBidWZmZXIgPSAodWludDhfdCAqKSh2YV9hcmcodmFsaXN0LCB1aW50OF90KikpOwotICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIGludCk7Ci0gICAgICAgICAgICBsZW5ndGggPSAoc2l6ZV90ICopdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7Ci0gICAgICAgICAgICBzdGF0dXMgPSBwc2FfZXhwb3J0X3B1YmxpY19rZXkoa2V5X3Nsb3QsIGJ1ZmZlciwgc2l6ZSwgbGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIGNhc2UgUEFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQ6Ci0gICAgICAgICAgICBwb2xpY3kgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3BvbGljeV90Kik7Ci0gICAgICAgICAgICBwc2Ffa2V5X3BvbGljeV9pbml0KHBvbGljeSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFOgotICAgICAgICAgICAgcG9saWN5ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9wb2xpY3lfdCopOwotICAgICAgICAgICAgdXNhZ2UgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3VzYWdlX3QpOwotICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKLSAgICAgICAgICAgIHBzYV9rZXlfcG9saWN5X3NldF91c2FnZShwb2xpY3ksIHVzYWdlLCBhbGcpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgUEFMX0NSWVBUT19TRVRfS0VZX1BPTElDWToKLSAgICAgICAgICAgIGtleV9zbG90ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9zbG90X3QpOwotICAgICAgICAgICAgcG9saWN5ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9wb2xpY3lfdCopOwotICAgICAgICAgICAgcmV0dXJuIHBzYV9zZXRfa2V5X3BvbGljeShrZXlfc2xvdCwgcG9saWN5KTsKLSAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0RFU1RST1lfS0VZOgotICAgICAgICAgICAga2V5X3Nsb3QgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3Nsb3RfdCk7Ci0gICAgICAgICAgICBzdGF0dXMgPSBwc2FfZGVzdHJveV9rZXkoa2V5X3Nsb3QpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFVF9LRVlfSU5GT1JNQVRJT046Ci0gICAgICAgICAgICBrZXlfc2xvdCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfc2xvdF90KTsKLSAgICAgICAgICAgIGtleV90eXBlX291dCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfdHlwZV90Kik7Ci0gICAgICAgICAgICBsZW5ndGggPSAoc2l6ZV90ICopdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7Ci0gICAgICAgICAgICBzdGF0dXMgPSBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbihrZXlfc2xvdCwga2V5X3R5cGVfb3V0LCBsZW5ndGgpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFVF9LRVlfUE9MSUNZOgotICAgICAgICAgICAga2V5X3Nsb3QgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3Nsb3RfdCk7Ci0gICAgICAgICAgICBwb2xpY3kgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3BvbGljeV90Kik7Ci0gICAgICAgICAgICByZXR1cm4gcHNhX2dldF9rZXlfcG9saWN5KGtleV9zbG90LCBwb2xpY3kpOwotICAgICAgICBjYXNlIFBBTF9DUllQVE9fS0VZX1BPTElDWV9HRVRfVVNBR0U6Ci0gICAgICAgICAgICBwb2xpY3kgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3BvbGljeV90Kik7Ci0gICAgICAgICAgICB1c2FnZV9vdXQgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3VzYWdlX3QqKTsKLSAgICAgICAgICAgICp1c2FnZV9vdXQgPSBwc2Ffa2V5X3BvbGljeV9nZXRfdXNhZ2UocG9saWN5KTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIFBBTF9DUllQVE9fS0VZX1BPTElDWV9HRVRfQUxHT1JJVEhNOgotICAgICAgICAgICAgcG9saWN5ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9wb2xpY3lfdCopOwotICAgICAgICAgICAgYWxnX291dCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCopOwotICAgICAgICAgICAgKmFsZ19vdXQgPSBwc2Ffa2V5X3BvbGljeV9nZXRfYWxnb3JpdGhtKHBvbGljeSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFVF9LRVlfTElGRVRJTUU6Ci0gICAgICAgICAgICBrZXlfc2xvdCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfc2xvdF90KTsKLSAgICAgICAgICAgIGxpZmV0aW1lX291dCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfbGlmZXRpbWVfdCopOwotICAgICAgICAgICAgcmV0dXJuIHBzYV9nZXRfa2V5X2xpZmV0aW1lKGtleV9zbG90LCBsaWZldGltZV9vdXQpOwotICAgICAgICBjYXNlIFBBTF9DUllQVE9fU0VUX0tFWV9MSUZFVElNRToKLSAgICAgICAgICAgIGtleV9zbG90ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9zbG90X3QpOwotICAgICAgICAgICAgbGlmZXRpbWUgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X2xpZmV0aW1lX3QpOwotICAgICAgICAgICAgcmV0dXJuIHBzYV9zZXRfa2V5X2xpZmV0aW1lKGtleV9zbG90LCBsaWZldGltZSk7Ci0gICAgICAgIGNhc2UgUEFMX0NSWVBUT19IQVNIX1NFVFVQOgotICAgICAgICAgICAgaGFzaF9vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfaGFzaF9vcGVyYXRpb25fdCopOwotICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKLSAgICAgICAgICAgIHJldHVybiBwc2FfaGFzaF9zZXR1cChoYXNoX29wZXJhdGlvbiwgYWxnKTsKLSAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0hBU0hfVVBEQVRFOgotICAgICAgICAgICAgaGFzaF9vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfaGFzaF9vcGVyYXRpb25fdCopOwotICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOwotICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7Ci0gICAgICAgICAgICByZXR1cm4gcHNhX2hhc2hfdXBkYXRlKGhhc2hfb3BlcmF0aW9uLCBidWZmZXIsIHNpemUpOwotICAgICAgICBjYXNlIFBBTF9DUllQVE9fSEFTSF9WRVJJRlk6Ci0gICAgICAgICAgICBoYXNoX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9oYXNoX29wZXJhdGlvbl90Kik7Ci0gICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7Ci0gICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKLSAgICAgICAgICAgIHJldHVybiBwc2FfaGFzaF92ZXJpZnkoaGFzaF9vcGVyYXRpb24sIGJ1ZmZlciwgc2l6ZSk7Ci0gICAgICAgIGNhc2UgUEFMX0NSWVBUT19IQVNIX0ZJTklTSDoKLSAgICAgICAgICAgIGhhc2hfb3BlcmF0aW9uID0gdmFfYXJnKHZhbGlzdCwgcHNhX2hhc2hfb3BlcmF0aW9uX3QqKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKLSAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOwotICAgICAgICAgICAgbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7Ci0gICAgICAgICAgICByZXR1cm4gcHNhX2hhc2hfZmluaXNoKGhhc2hfb3BlcmF0aW9uLCBidWZmZXIsIHNpemUsIGxlbmd0aCk7Ci0gICAgICAgIGNhc2UgUEFMX0NSWVBUT19IQVNIX0FCT1JUOgotICAgICAgICAgICAgaGFzaF9vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfaGFzaF9vcGVyYXRpb25fdCopOwotICAgICAgICAgICAgcmV0dXJuIHBzYV9oYXNoX2Fib3J0KGhhc2hfb3BlcmF0aW9uKTsKLSAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFTkVSQVRFX0tFWToKLSAgICAgICAgICAgIGtleV9zbG90ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9zbG90X3QpOwotICAgICAgICAgICAga2V5X3R5cGUgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3R5cGVfdCk7Ci0gICAgICAgICAgICBzaXplICAgICA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7Ci0gICAgICAgICAgICBleHRyYSAgICA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHZvaWQqKTsKLSAgICAgICAgICAgIGV4dHJhX3NpemUgID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKLSAgICAgICAgICAgIHJldHVybiBwc2FfZ2VuZXJhdGVfa2V5KGtleV9zbG90LCBrZXlfdHlwZSwgc2l6ZSwgZXh0cmEsIGV4dHJhX3NpemUpOwotICAgICAgICBjYXNlIFBBTF9DUllQVE9fR0VORVJBVE9SX1JFQUQ6Ci0gICAgICAgICAgICBnZW5lcmF0b3IgPSB2YV9hcmcodmFsaXN0LCBwc2FfY3J5cHRvX2dlbmVyYXRvcl90Kik7Ci0gICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7Ci0gICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgaW50KTsKLSAgICAgICAgICAgIHJldHVybiBwc2FfZ2VuZXJhdG9yX3JlYWQoZ2VuZXJhdG9yLCBidWZmZXIsIHNpemUpOwotICAgICAgICBjYXNlIFBBTF9DUllQVE9fS0VZX0RFUklWQVRJT046Ci0gICAgICAgICAgICBnZW5lcmF0b3IgPSB2YV9hcmcodmFsaXN0LCBwc2FfY3J5cHRvX2dlbmVyYXRvcl90Kik7Ci0gICAgICAgICAgICBrZXlfc2xvdCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfc2xvdF90KTsKLSAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7Ci0gICAgICAgICAgICBzYWx0ID0gdmFfYXJnKHZhbGlzdCwgY29uc3QgdWludDhfdCAqKTsKLSAgICAgICAgICAgIHNhbHRfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKLSAgICAgICAgICAgIGxhYmVsID0gdmFfYXJnKHZhbGlzdCwgY29uc3QgdWludDhfdCAqKTsKLSAgICAgICAgICAgIGxhYmVsX2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7Ci0gICAgICAgICAgICBjYXBhY2l0eSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7Ci0gICAgICAgICAgICByZXR1cm4gcHNhX2tleV9kZXJpdmF0aW9uKGdlbmVyYXRvciwga2V5X3Nsb3QsIGFsZywgc2FsdCwgc2FsdF9sZW5ndGgsIGxhYmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxfbGVuZ3RoLCBjYXBhY2l0eSk7Ci0gICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRVRfR0VORVJBVE9SX0NBUEFDSVRZOgotICAgICAgICAgICAgZ2VuZXJhdG9yID0gdmFfYXJnKHZhbGlzdCwgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCopOwotICAgICAgICAgICAgZ2VuX2NhcCAgID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7Ci0gICAgICAgICAgICByZXR1cm4gcHNhX2dldF9nZW5lcmF0b3JfY2FwYWNpdHkoZ2VuZXJhdG9yLCBnZW5fY2FwKTsKLSAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFTkVSQVRPUl9JTVBPUlRfS0VZOgotICAgICAgICAgICAga2V5X3Nsb3QgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3Nsb3RfdCk7Ci0gICAgICAgICAgICBrZXlfdHlwZSA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfdHlwZV90KTsKLSAgICAgICAgICAgIHNpemUgICAgID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKLSAgICAgICAgICAgIGdlbmVyYXRvciA9IHZhX2FyZyh2YWxpc3QsIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QqKTsKLSAgICAgICAgICAgIHJldHVybiBwc2FfZ2VuZXJhdG9yX2ltcG9ydF9rZXkoa2V5X3Nsb3QsIGtleV90eXBlLCBzaXplLCBnZW5lcmF0b3IpOwotICAgICAgICBjYXNlIFBBTF9DUllQVE9fR0VORVJBVE9SX0FCT1JUOgotICAgICAgICAgICAgZ2VuZXJhdG9yID0gdmFfYXJnKHZhbGlzdCwgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCopOwotICAgICAgICAgICAgcmV0dXJuIHBzYV9nZW5lcmF0b3JfYWJvcnQoZ2VuZXJhdG9yKTsKLSAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0FFQURfRU5DUllQVDoKLSAgICAgICAgICAgIGtleV9zbG90ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9zbG90X3QpOwotICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKLSAgICAgICAgICAgIG5vbmNlID0gdmFfYXJnKHZhbGlzdCwgY29uc3QgdWludDhfdCAqKTsKLSAgICAgICAgICAgIG5vbmNlX2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7Ci0gICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGEgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB1aW50OF90ICopOwotICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhX2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7Ci0gICAgICAgICAgICBwbGFpbnRleHQgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB1aW50OF90ICopOwotICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7Ci0gICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKLSAgICAgICAgICAgIGNpcGhlcnRleHRfc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7Ci0gICAgICAgICAgICBsZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKLSAgICAgICAgICAgIHJldHVybiBwc2FfYWVhZF9lbmNyeXB0KGtleV9zbG90LCBhbGcsIG5vbmNlLCBub25jZV9sZW5ndGgsIGFkZGl0aW9uYWxfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhX2xlbmd0aCwgcGxhaW50ZXh0LCBzaXplLCBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X3NpemUsIGxlbmd0aCk7Ci0gICAgICAgIGNhc2UgUEFMX0NSWVBUT19NQUNfU0lHTl9TRVRVUDoKLSAgICAgICAgICAgIG1hY19vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfbWFjX29wZXJhdGlvbl90Kik7Ci0gICAgICAgICAgICBrZXlfc2xvdCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfc2xvdF90KTsKLSAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7Ci0gICAgICAgICAgICByZXR1cm4gcHNhX21hY19zaWduX3NldHVwKG1hY19vcGVyYXRpb24sIGtleV9zbG90LCBhbGcpOwotICAgICAgICBjYXNlIFBBTF9DUllQVE9fRlJFRToKLSAgICAgICAgICAgIG1iZWR0bHNfcHNhX2NyeXB0b19mcmVlKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBQQUxfU1RBVFVTX1VOU1VQUE9SVEVEX0ZVTkM7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9faW50Zi5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9faW50Zi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2ZkZWYxLi4wMDAwMDAwCi0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2ludGYuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxOSArMCwwIEBACi0vKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSoqLwotCi0jaWZuZGVmIF9QQUxfQ1JZUFRPX0hfCi0jZGVmaW5lIF9QQUxfQ1JZUFRPX0hfCi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlICJwYWxfY29tbW9uLmgiCi0KLSNkZWZpbmUgUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DICAgICAgMHhGRgotCi10eXBlZGVmIHVpbnQzMl90IHBzYV9rZXlfdXNhZ2VfdDsKLXR5cGVkZWYgdWludDMyX3QgcHNhX2FsZ29yaXRobV90OwotdHlwZWRlZiBpbnQzMl90ICBwc2Ffc3RhdHVzX3Q7Ci10eXBlZGVmIHVpbnQzMl90IHBzYV9rZXlfdHlwZV90OwotdHlwZWRlZiB1aW50MzJfdCBwc2Ffa2V5X3Nsb3RfdDsKLXR5cGVkZWYgdWludDMyX3QgcHNhX2tleV9saWZldGltZV90OwotdHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc19jaXBoZXJfYmFzZV90IG1iZWR0bHNfY2lwaGVyX2Jhc2VfdDsKLQotZW51bSBjcnlwdG9fZnVuY3Rpb25fY29kZSB7Ci0gICAgUEFMX0NSWVBUT19JTklUICAgICAgICAgICAgICAgICAgICAgPSAweDEsCi0gICAgUEFMX0NSWVBUT19HRU5FUkFURV9SQU5ET00gICAgICAgICAgPSAweDIsCi0gICAgUEFMX0NSWVBUT19JTVBPUlRfS0VZICAgICAgICAgICAgICAgPSAweDMsCi0gICAgUEFMX0NSWVBUT19FWFBPUlRfS0VZICAgICAgICAgICAgICAgPSAweDQsCi0gICAgUEFMX0NSWVBUT19FWFBPUlRfUFVCTElDX0tFWSAgICAgICAgPSAweDUsCi0gICAgUEFMX0NSWVBUT19ERVNUUk9ZX0tFWSAgICAgICAgICAgICAgPSAweDYsCi0gICAgUEFMX0NSWVBUT19HRVRfS0VZX0lORk8gICAgICAgICAgICAgPSAweDcsCi0gICAgUEFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQgICAgICAgICAgPSAweDgsCi0gICAgUEFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSAgICAgPSAweDksCi0gICAgUEFMX0NSWVBUT19LRVlfUE9MSUNZX0dFVF9VU0FHRSAgICAgPSAweEEsCi0gICAgUEFMX0NSWVBUT19LRVlfUE9MSUNZX0dFVF9BTEdPUklUSE0gPSAweEIsCi0gICAgUEFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSAgICAgICAgICAgPSAweEMsCi0gICAgUEFMX0NSWVBUT19HRVRfS0VZX1BPTElDWSAgICAgICAgICAgPSAweEQsCi0gICAgUEFMX0NSWVBUT19HRVRfS0VZX0lORk9STUFUSU9OICAgICAgPSAweEUsCi0gICAgUEFMX0NSWVBUT19HRVRfS0VZX0xJRkVUSU1FICAgICAgICAgPSAweEYsCi0gICAgUEFMX0NSWVBUT19TRVRfS0VZX0xJRkVUSU1FICAgICAgICAgPSAweDEwLAotICAgIFBBTF9DUllQVE9fSEFTSF9TRVRVUCAgICAgICAgICAgICAgID0gMHgxMSwKLSAgICBQQUxfQ1JZUFRPX0hBU0hfVVBEQVRFICAgICAgICAgICAgICA9IDB4MTIsCi0gICAgUEFMX0NSWVBUT19IQVNIX1ZFUklGWSAgICAgICAgICAgICAgPSAweDEzLAotICAgIFBBTF9DUllQVE9fSEFTSF9GSU5JU0ggICAgICAgICAgICAgID0gMHgxNCwKLSAgICBQQUxfQ1JZUFRPX0hBU0hfQUJPUlQgICAgICAgICAgICAgICA9IDB4MTUsCi0gICAgUEFMX0NSWVBUT19HRU5FUkFURV9LRVkgICAgICAgICAgICAgPSAweDE2LAotICAgIFBBTF9DUllQVE9fR0VORVJBVE9SX1JFQUQgICAgICAgICAgID0gMHgxNywKLSAgICBQQUxfQ1JZUFRPX0tFWV9ERVJJVkFUSU9OICAgICAgICAgICA9IDB4MTgsCi0gICAgUEFMX0NSWVBUT19HRVRfR0VORVJBVE9SX0NBUEFDSVRZICAgPSAweDE5LAotICAgIFBBTF9DUllQVE9fR0VORVJBVE9SX0lNUE9SVF9LRVkgICAgID0gMHgyMCwKLSAgICBQQUxfQ1JZUFRPX0dFTkVSQVRPUl9BQk9SVCAgICAgICAgICA9IDB4MjEsCi0gICAgUEFMX0NSWVBUT19BRUFEX0VOQ1JZUFQgICAgICAgICAgICAgPSAweDIyLAotICAgIFBBTF9DUllQVE9fTUFDX1NJR05fU0VUVVAsCi0gICAgUEFMX0NSWVBUT19GUkVFICAgICAgICAgICAgICAgICAgICAgPSAweEZFLAotfTsKLQotc3RydWN0IHBzYV9rZXlfcG9saWN5X3MgewotICAgIHBzYV9rZXlfdXNhZ2VfdCB1c2FnZTsKLSAgICBwc2FfYWxnb3JpdGhtX3QgYWxnOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuc2lnbmVkIGNoYXIgY2tzdW1bMTZdOyAgICAvKiE8IGNoZWNrc3VtIG9mIHRoZSBkYXRhIGJsb2NrICovCi0gICAgdW5zaWduZWQgY2hhciBzdGF0ZVs0OF07ICAgIC8qITwgaW50ZXJtZWRpYXRlIGRpZ2VzdCBzdGF0ZSAgKi8KLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxNl07ICAgLyohPCBkYXRhIGJsb2NrIGJlaW5nIHByb2Nlc3NlZCAqLwotICAgIHNpemVfdCBsZWZ0OyAgICAgICAgICAgICAgICAvKiE8IGFtb3VudCBvZiBkYXRhIGluIGJ1ZmZlciAgICovCi19IG1iZWR0bHNfbWQyX2NvbnRleHQ7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICB1aW50MzJfdCB0b3RhbFsyXTsgICAgICAgICAgLyohPCBudW1iZXIgb2YgYnl0ZXMgcHJvY2Vzc2VkICAqLwotICAgIHVpbnQzMl90IHN0YXRlWzRdOyAgICAgICAgICAvKiE8IGludGVybWVkaWF0ZSBkaWdlc3Qgc3RhdGUgICovCi0gICAgdW5zaWduZWQgY2hhciBidWZmZXJbNjRdOyAgIC8qITwgZGF0YSBibG9jayBiZWluZyBwcm9jZXNzZWQgKi8KLX0gbWJlZHRsc19tZDRfY29udGV4dDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVpbnQzMl90IHRvdGFsWzJdOyAgICAgICAgICAvKiE8IG51bWJlciBvZiBieXRlcyBwcm9jZXNzZWQgICovCi0gICAgdWludDMyX3Qgc3RhdGVbNF07ICAgICAgICAgIC8qITwgaW50ZXJtZWRpYXRlIGRpZ2VzdCBzdGF0ZSAgKi8KLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07ICAgLyohPCBkYXRhIGJsb2NrIGJlaW5nIHByb2Nlc3NlZCAqLwotfSBtYmVkdGxzX21kNV9jb250ZXh0OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWludDMyX3QgdG90YWxbMl07ICAgICAgICAgIC8qITwgbnVtYmVyIG9mIGJ5dGVzIHByb2Nlc3NlZCAgKi8KLSAgICB1aW50MzJfdCBzdGF0ZVs1XTsgICAgICAgICAgLyohPCBpbnRlcm1lZGlhdGUgZGlnZXN0IHN0YXRlICAqLwotICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzY0XTsgICAvKiE8IGRhdGEgYmxvY2sgYmVpbmcgcHJvY2Vzc2VkICovCi19IG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQ7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICB1aW50MzJfdCB0b3RhbFsyXTsgICAgICAgICAgLyohPCBUaGUgbnVtYmVyIG9mIEJ5dGVzIHByb2Nlc3NlZC4gICovCi0gICAgdWludDMyX3Qgc3RhdGVbNV07ICAgICAgICAgIC8qITwgVGhlIGludGVybWVkaWF0ZSBkaWdlc3Qgc3RhdGUuICAqLwotICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzY0XTsgICAvKiE8IFRoZSBkYXRhIGJsb2NrIGJlaW5nIHByb2Nlc3NlZC4gKi8KLX0gbWJlZHRsc19zaGExX2NvbnRleHQ7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICB1aW50MzJfdCB0b3RhbFsyXTsgICAgICAgICAgLyohPCBUaGUgbnVtYmVyIG9mIEJ5dGVzIHByb2Nlc3NlZC4gICovCi0gICAgdWludDMyX3Qgc3RhdGVbOF07ICAgICAgICAgIC8qITwgVGhlIGludGVybWVkaWF0ZSBkaWdlc3Qgc3RhdGUuICAqLwotICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzY0XTsgICAvKiE8IFRoZSBkYXRhIGJsb2NrIGJlaW5nIHByb2Nlc3NlZC4gKi8KLSAgICBpbnQgaXMyMjQ7ICAgICAgICAgICAgICAgICAgLyohPCBEZXRlcm1pbmVzIHdoaWNoIGZ1bmN0aW9uIHRvIHVzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOiBVc2UgU0hBLTI1Niwgb3IgMTogVXNlIFNIQS0yMjQuICovCi19IG1iZWR0bHNfc2hhMjU2X2NvbnRleHQ7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICB1aW50NjRfdCB0b3RhbFsyXTsgICAgICAgICAgLyohPCBUaGUgbnVtYmVyIG9mIEJ5dGVzIHByb2Nlc3NlZC4gKi8KLSAgICB1aW50NjRfdCBzdGF0ZVs4XTsgICAgICAgICAgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGRpZ2VzdCBzdGF0ZS4gKi8KLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxMjhdOyAgLyohPCBUaGUgZGF0YSBibG9jayBiZWluZyBwcm9jZXNzZWQuICovCi0gICAgaW50IGlzMzg0OyAgICAgICAgICAgICAgICAgIC8qITwgRGV0ZXJtaW5lcyB3aGljaCBmdW5jdGlvbiB0byB1c2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDogVXNlIFNIQS01MTIsIG9yIDE6IFVzZSBTSEEtMzg0LiAqLwotfSBtYmVkdGxzX3NoYTUxMl9jb250ZXh0OwotCi0vKioKLSAqIFxicmllZiAgICAgU3VwcG9ydGVkIHtjaXBoZXIgdHlwZSwgY2lwaGVyIG1vZGV9IHBhaXJzLgotICoKLSAqIFx3YXJuaW5nICAgUkM0IGFuZCBERVMgYXJlIGNvbnNpZGVyZWQgd2VhayBjaXBoZXJzIGFuZCB0aGVpciB1c2UKLSAqICAgICAgICAgICAgY29uc3RpdHV0ZXMgYSBzZWN1cml0eSByaXNrLiBBcm0gcmVjb21tZW5kcyBjb25zaWRlcmluZyBzdHJvbmdlcgotICogICAgICAgICAgICBjaXBoZXJzIGluc3RlYWQuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gICAgTUJFRFRMU19DSVBIRVJfTk9ORSA9IDAsICAgICAgICAgICAgIC8qKjwgUGxhY2Vob2xkZXIgdG8gbWFyayB0aGUgZW5kIG9mIGNpcGhlci1wYWlyIGxpc3RzLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX05VTEwsICAgICAgICAgICAgICAgICAvKio8IFRoZSBpZGVudGl0eSBzdHJlYW0gY2lwaGVyLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCLCAgICAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAxMjgtYml0IEVDQiBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCLCAgICAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAxOTItYml0IEVDQiBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCLCAgICAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAyNTYtYml0IEVDQiBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCAgICAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAxMjgtYml0IENCQyBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDLCAgICAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAxOTItYml0IENCQyBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCAgICAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAyNTYtYml0IENCQyBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4LCAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAxMjgtYml0IENGQjEyOCBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0ZCMTI4LCAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAxOTItYml0IENGQjEyOCBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0ZCMTI4LCAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAyNTYtYml0IENGQjEyOCBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSLCAgICAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAxMjgtYml0IENUUiBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ1RSLCAgICAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAxOTItYml0IENUUiBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ1RSLCAgICAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAyNTYtYml0IENUUiBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNLCAgICAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAxMjgtYml0IEdDTSBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNLCAgICAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAxOTItYml0IEdDTSBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNLCAgICAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAyNTYtYml0IEdDTSBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9FQ0IsICAgICAvKio8IENhbWVsbGlhIGNpcGhlciB3aXRoIDEyOC1iaXQgRUNCIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0VDQiwgICAgIC8qKjwgQ2FtZWxsaWEgY2lwaGVyIHdpdGggMTkyLWJpdCBFQ0IgbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfRUNCLCAgICAgLyoqPCBDYW1lbGxpYSBjaXBoZXIgd2l0aCAyNTYtYml0IEVDQiBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMsICAgICAvKio8IENhbWVsbGlhIGNpcGhlciB3aXRoIDEyOC1iaXQgQ0JDIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQywgICAgIC8qKjwgQ2FtZWxsaWEgY2lwaGVyIHdpdGggMTkyLWJpdCBDQkMgbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDLCAgICAgLyoqPCBDYW1lbGxpYSBjaXBoZXIgd2l0aCAyNTYtYml0IENCQyBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjgsICAvKio8IENhbWVsbGlhIGNpcGhlciB3aXRoIDEyOC1iaXQgQ0ZCMTI4IG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NGQjEyOCwgIC8qKjwgQ2FtZWxsaWEgY2lwaGVyIHdpdGggMTkyLWJpdCBDRkIxMjggbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0ZCMTI4LCAgLyoqPCBDYW1lbGxpYSBjaXBoZXIgd2l0aCAyNTYtYml0IENGQjEyOCBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFIsICAgICAvKio8IENhbWVsbGlhIGNpcGhlciB3aXRoIDEyOC1iaXQgQ1RSIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NUUiwgICAgIC8qKjwgQ2FtZWxsaWEgY2lwaGVyIHdpdGggMTkyLWJpdCBDVFIgbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ1RSLCAgICAgLyoqPCBDYW1lbGxpYSBjaXBoZXIgd2l0aCAyNTYtYml0IENUUiBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ00sICAgICAvKio8IENhbWVsbGlhIGNpcGhlciB3aXRoIDEyOC1iaXQgR0NNIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTSwgICAgIC8qKjwgQ2FtZWxsaWEgY2lwaGVyIHdpdGggMTkyLWJpdCBHQ00gbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNLCAgICAgLyoqPCBDYW1lbGxpYSBjaXBoZXIgd2l0aCAyNTYtYml0IEdDTSBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FQ0IsICAgICAgICAgICAgICAvKio8IERFUyBjaXBoZXIgd2l0aCBFQ0IgbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9ERVNfQ0JDLCAgICAgICAgICAgICAgLyoqPCBERVMgY2lwaGVyIHdpdGggQ0JDIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfREVTX0VERV9FQ0IsICAgICAgICAgIC8qKjwgREVTIGNpcGhlciB3aXRoIEVERSBFQ0IgbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQywgICAgICAgICAgLyoqPCBERVMgY2lwaGVyIHdpdGggRURFIENCQyBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0VDQiwgICAgICAgICAvKio8IERFUyBjaXBoZXIgd2l0aCBFREUzIEVDQiBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQywgICAgICAgICAvKio8IERFUyBjaXBoZXIgd2l0aCBFREUzIENCQyBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0VDQiwgICAgICAgICAvKio8IEJsb3dmaXNoIGNpcGhlciB3aXRoIEVDQiBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQywgICAgICAgICAvKio8IEJsb3dmaXNoIGNpcGhlciB3aXRoIENCQyBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0LCAgICAgICAvKio8IEJsb3dmaXNoIGNpcGhlciB3aXRoIENGQjY0IG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSLCAgICAgICAgIC8qKjwgQmxvd2Zpc2ggY2lwaGVyIHdpdGggQ1RSIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQVJDNF8xMjgsICAgICAgICAgICAgIC8qKjwgUkM0IGNpcGhlciB3aXRoIDEyOC1iaXQgbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTSwgICAgICAgICAgLyoqPCBBRVMgY2lwaGVyIHdpdGggMTI4LWJpdCBDQ00gbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTSwgICAgICAgICAgLyoqPCBBRVMgY2lwaGVyIHdpdGggMTkyLWJpdCBDQ00gbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTSwgICAgICAgICAgLyoqPCBBRVMgY2lwaGVyIHdpdGggMjU2LWJpdCBDQ00gbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNLCAgICAgLyoqPCBDYW1lbGxpYSBjaXBoZXIgd2l0aCAxMjgtYml0IENDTSBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQ00sICAgICAvKio8IENhbWVsbGlhIGNpcGhlciB3aXRoIDE5Mi1iaXQgQ0NNIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NDTSwgICAgIC8qKjwgQ2FtZWxsaWEgY2lwaGVyIHdpdGggMjU2LWJpdCBDQ00gbW9kZS4gKi8KLX0gbWJlZHRsc19jaXBoZXJfdHlwZV90OwotCi0vKiogU3VwcG9ydGVkIGNpcGhlciBtb2Rlcy4gKi8KLXR5cGVkZWYgZW51bSB7Ci0gICAgTUJFRFRMU19NT0RFX05PTkUgPSAwLCAgICAgICAgICAgICAgIC8qKjwgTm9uZS4gKi8KLSAgICBNQkVEVExTX01PREVfRUNCLCAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgRUNCIGNpcGhlciBtb2RlLiAqLwotICAgIE1CRURUTFNfTU9ERV9DQkMsICAgICAgICAgICAgICAgICAgICAvKio8IFRoZSBDQkMgY2lwaGVyIG1vZGUuICovCi0gICAgTUJFRFRMU19NT0RFX0NGQiwgICAgICAgICAgICAgICAgICAgIC8qKjwgVGhlIENGQiBjaXBoZXIgbW9kZS4gKi8KLSAgICBNQkVEVExTX01PREVfT0ZCLCAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgT0ZCIGNpcGhlciBtb2RlIC0gdW5zdXBwb3J0ZWQuICovCi0gICAgTUJFRFRMU19NT0RFX0NUUiwgICAgICAgICAgICAgICAgICAgIC8qKjwgVGhlIENUUiBjaXBoZXIgbW9kZS4gKi8KLSAgICBNQkVEVExTX01PREVfR0NNLCAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgR0NNIGNpcGhlciBtb2RlLiAqLwotICAgIE1CRURUTFNfTU9ERV9TVFJFQU0sICAgICAgICAgICAgICAgICAvKio8IFRoZSBzdHJlYW0gY2lwaGVyIG1vZGUuICovCi0gICAgTUJFRFRMU19NT0RFX0NDTSwgICAgICAgICAgICAgICAgICAgIC8qKjwgVGhlIENDTSBjaXBoZXIgbW9kZS4gKi8KLX0gbWJlZHRsc19jaXBoZXJfbW9kZV90OwotCi1zdHJ1Y3QgcHNhX2hhc2hfb3BlcmF0aW9uX3MgewotICAgIHBzYV9hbGdvcml0aG1fdCBhbGc7Ci0gICAgdW5pb24KLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGR1bW15OyAvKiBNYWtlIHRoZSB1bmlvbiBub24tZW1wdHkgZXZlbiB3aXRoIG5vIHN1cHBvcnRlZCBhbGdvcml0aG1zLiAqLwotICAgICAgICBtYmVkdGxzX21kMl9jb250ZXh0IG1kMjsKLSAgICAgICAgbWJlZHRsc19tZDRfY29udGV4dCBtZDQ7Ci0gICAgICAgIG1iZWR0bHNfbWQ1X2NvbnRleHQgbWQ1OwotICAgICAgICBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0IHJpcGVtZDE2MDsKLSAgICAgICAgbWJlZHRsc19zaGExX2NvbnRleHQgc2hhMTsKLSAgICAgICAgbWJlZHRsc19zaGEyNTZfY29udGV4dCBzaGEyNTY7Ci0gICAgICAgIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgc2hhNTEyOwotICAgIH0gY3R4OwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIC8qKiBGdWxsIGNpcGhlciBpZGVudGlmaWVyLiBGb3IgZXhhbXBsZSwKLSAgICAgKiBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQy4KLSAgICAgKi8KLSAgICBtYmVkdGxzX2NpcGhlcl90eXBlX3QgdHlwZTsKLQotICAgIC8qKiBUaGUgY2lwaGVyIG1vZGUuIEZvciBleGFtcGxlLCBNQkVEVExTX01PREVfQ0JDLiAqLwotICAgIG1iZWR0bHNfY2lwaGVyX21vZGVfdCBtb2RlOwotCi0gICAgLyoqIFRoZSBjaXBoZXIga2V5IGxlbmd0aCwgaW4gYml0cy4gVGhpcyBpcyB0aGUKLSAgICAgKiBkZWZhdWx0IGxlbmd0aCBmb3IgdmFyaWFibGUgc2l6ZWQgY2lwaGVycy4KLSAgICAgKiBJbmNsdWRlcyBwYXJpdHkgYml0cyBmb3IgY2lwaGVycyBsaWtlIERFUy4KLSAgICAgKi8KLSAgICB1bnNpZ25lZCBpbnQga2V5X2JpdGxlbjsKLQotICAgIC8qKiBOYW1lIG9mIHRoZSBjaXBoZXIuICovCi0gICAgY29uc3QgY2hhciAqbmFtZTsKLQotICAgIC8qKiBJViBvciBub25jZSBzaXplLCBpbiBCeXRlcy4KLSAgICAgKiBGb3IgY2lwaGVycyB0aGF0IGFjY2VwdCB2YXJpYWJsZSBJViBzaXplcywKLSAgICAgKiB0aGlzIGlzIHRoZSByZWNvbW1lbmRlZCBzaXplLgotICAgICAqLwotICAgIHVuc2lnbmVkIGludCBpdl9zaXplOwotCi0gICAgLyoqIEJpdGZsYWcgY29tcHJpc2VkIG9mIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0lWX0xFTiBhbmQKLSAgICAgKiAgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfS0VZX0xFTiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlCi0gICAgICogIGNpcGhlciBzdXBwb3J0cyB2YXJpYWJsZSBJViBvciB2YXJpYWJsZSBrZXkgc2l6ZXMsIHJlc3BlY3RpdmVseS4KLSAgICAgKi8KLSAgICBpbnQgZmxhZ3M7Ci0KLSAgICAvKiogVGhlIGJsb2NrIHNpemUsIGluIEJ5dGVzLiAqLwotICAgIHVuc2lnbmVkIGludCBibG9ja19zaXplOwotCi0gICAgLyoqIFN0cnVjdCBmb3IgYmFzZSBjaXBoZXIgaW5mb3JtYXRpb24gYW5kIGZ1bmN0aW9ucy4gKi8KLSAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9iYXNlX3QgKmJhc2U7Ci0KLX0gbWJlZHRsc19jaXBoZXJfaW5mb190OwotCi0vKiogVHlwZSBvZiBvcGVyYXRpb24uICovCi10eXBlZGVmIGVudW0gewotICAgIE1CRURUTFNfT1BFUkFUSU9OX05PTkUgPSAtMSwKLSAgICBNQkVEVExTX0RFQ1JZUFQgPSAwLAotICAgIE1CRURUTFNfRU5DUllQVCwKLX0gbWJlZHRsc19vcGVyYXRpb25fdDsKLQotLyoqIE1heGltdW0gbGVuZ3RoIG9mIGFueSBJViwgaW4gQnl0ZXMuICovCi0jZGVmaW5lIE1CRURUTFNfTUFYX0lWX0xFTkdUSCAgICAgIDE2Ci0vKiogTWF4aW11bSBibG9jayBzaXplIG9mIGFueSBjaXBoZXIsIGluIEJ5dGVzLiAqLwotI2RlZmluZSBNQkVEVExTX01BWF9CTE9DS19MRU5HVEggICAxNgotCi0jaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQotI2RlZmluZSBQU0FfSEFTSF9NQVhfU0laRSA2NAotI2RlZmluZSBQU0FfSE1BQ19NQVhfSEFTSF9CTE9DS19TSVpFIDEyOAotI2Vsc2UKLSNkZWZpbmUgUFNBX0hBU0hfTUFYX1NJWkUgMzIKLSNkZWZpbmUgUFNBX0hNQUNfTUFYX0hBU0hfQkxPQ0tfU0laRSA2NAotI2VuZGlmCi0KLS8qKgotICogR2VuZXJpYyBjaXBoZXIgY29udGV4dC4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICAgIC8qKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgYXNzb2NpYXRlZCBjaXBoZXIuICovCi0gICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKLQotICAgIC8qKiBLZXkgbGVuZ3RoIHRvIHVzZS4gKi8KLSAgICBpbnQga2V5X2JpdGxlbjsKLQotICAgIC8qKiBPcGVyYXRpb24gdGhhdCB0aGUga2V5IG9mIHRoZSBjb250ZXh0IGhhcyBiZWVuCi0gICAgICogaW5pdGlhbGl6ZWQgZm9yLgotICAgICAqLwotICAgIG1iZWR0bHNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uOwotCi0jaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX1dJVEhfUEFERElORykKLSAgICAvKiogUGFkZGluZyBmdW5jdGlvbnMgdG8gdXNlLCBpZiByZWxldmFudCBmb3IKLSAgICAgKiB0aGUgc3BlY2lmaWMgY2lwaGVyIG1vZGUuCi0gICAgICovCi0gICAgdm9pZCAoKmFkZF9wYWRkaW5nKSh1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBvbGVuLCBzaXplX3QgZGF0YV9sZW4pOwotICAgIGludCAoKmdldF9wYWRkaW5nKSh1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sIHNpemVfdCAqZGF0YV9sZW4pOwotI2VuZGlmCi0KLSAgICAvKiogQnVmZmVyIGZvciBpbnB1dCB0aGF0IGhhcyBub3QgYmVlbiBwcm9jZXNzZWQgeWV0LiAqLwotICAgIHVuc2lnbmVkIGNoYXIgdW5wcm9jZXNzZWRfZGF0YVtNQkVEVExTX01BWF9CTE9DS19MRU5HVEhdOwotCi0gICAgLyoqIE51bWJlciBvZiBCeXRlcyB0aGF0IGhhdmUgbm90IGJlZW4gcHJvY2Vzc2VkIHlldC4gKi8KLSAgICBzaXplX3QgdW5wcm9jZXNzZWRfbGVuOwotCi0gICAgLyoqIEN1cnJlbnQgSVYgb3IgTk9OQ0VfQ09VTlRFUiBmb3IgQ1RSLW1vZGUuICovCi0gICAgdW5zaWduZWQgY2hhciBpdltNQkVEVExTX01BWF9JVl9MRU5HVEhdOwotCi0gICAgLyoqIElWIHNpemUgaW4gQnl0ZXMsIGZvciBjaXBoZXJzIHdpdGggdmFyaWFibGUtbGVuZ3RoIElWcy4gKi8KLSAgICBzaXplX3QgaXZfc2l6ZTsKLQotICAgIC8qKiBUaGUgY2lwaGVyLXNwZWNpZmljIGNvbnRleHQuICovCi0gICAgdm9pZCAqY2lwaGVyX2N0eDsKLQotI2lmIGRlZmluZWQoTUJFRFRMU19DTUFDX0MpCi0gICAgLyoqIENNQUMtc3BlY2lmaWMgY29udGV4dC4gKi8KLSAgICBtYmVkdGxzX2NtYWNfY29udGV4dF90ICpjbWFjX2N0eDsKLSNlbmRpZgotfSBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICAgICAgLyoqIFRoZSBoYXNoIGNvbnRleHQuICovCi0gICAgICAgIHN0cnVjdCBwc2FfaGFzaF9vcGVyYXRpb25fcyBoYXNoX2N0eDsKLSAgICAgICAgLyoqIFRoZSBITUFDIHBhcnQgb2YgdGhlIGNvbnRleHQuICovCi0gICAgICAgIHVpbnQ4X3Qgb3BhZFtQU0FfSE1BQ19NQVhfSEFTSF9CTE9DS19TSVpFXTsKLX0gcHNhX2htYWNfaW50ZXJuYWxfZGF0YTsKLQotc3RydWN0IHBzYV9tYWNfb3BlcmF0aW9uX3MgewotICAgIHBzYV9hbGdvcml0aG1fdCBhbGc7Ci0gICAgdW5zaWduZWQgaW50IGtleV9zZXQgOiAxOwotICAgIHVuc2lnbmVkIGludCBpdl9yZXF1aXJlZCA6IDE7Ci0gICAgdW5zaWduZWQgaW50IGl2X3NldCA6IDE7Ci0gICAgdW5zaWduZWQgaW50IGhhc19pbnB1dCA6IDE7Ci0gICAgdW5zaWduZWQgaW50IGlzX3NpZ24gOiAxOwotICAgIHVpbnQ4X3QgbWFjX3NpemU7Ci0gICAgdW5pb24gewotICAgICAgICB1bnNpZ25lZCBkdW1teTsgLyogTWFrZSB0aGUgdW5pb24gbm9uLWVtcHR5IGV2ZW4gd2l0aCBubyBzdXBwb3J0ZWQgYWxnb3JpdGhtcy4gKi8KLSNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKLSAgICAgICAgcHNhX2htYWNfaW50ZXJuYWxfZGF0YSBobWFjOwotI2VuZGlmCi0jaWYgZGVmaW5lZChNQkVEVExTX0NNQUNfQykKLSAgICAgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGNtYWM7Ci0jZW5kaWYKLSAgICB9IGN0eDsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICB1aW50OF90ICppbmZvOwotICAgIHNpemVfdCBpbmZvX2xlbmd0aDsKLSAgICBwc2FfaG1hY19pbnRlcm5hbF9kYXRhIGhtYWM7Ci0gICAgdWludDhfdCBwcmtbUFNBX0hBU0hfTUFYX1NJWkVdOwotICAgIHVpbnQ4X3Qgb3V0cHV0X2Jsb2NrW1BTQV9IQVNIX01BWF9TSVpFXTsKLSNpZiBQU0FfSEFTSF9NQVhfU0laRSA+IDB4ZmYKLSNlcnJvciAiUFNBX0hBU0hfTUFYX1NJWkUgZG9lcyBub3QgZml0IGluIHVpbnQ4X3QiCi0jZW5kaWYKLSAgICB1aW50OF90IG9mZnNldF9pbl9ibG9jazsKLSAgICB1aW50OF90IGJsb2NrX251bWJlcjsKLX0gcHNhX2hrZGZfZ2VuZXJhdG9yX3Q7Ci0KLXN0cnVjdCBwc2FfY3J5cHRvX2dlbmVyYXRvcl9zIHsKLSAgICBwc2FfYWxnb3JpdGhtX3QgYWxnOwotICAgIHNpemVfdCBjYXBhY2l0eTsKLSAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1aW50OF90ICpkYXRhOwotICAgICAgICAgICAgc2l6ZV90IHNpemU7Ci0gICAgICAgIH0gYnVmZmVyOwotI2lmIGRlZmluZWQoTUJFRFRMU19NRF9DKQotICAgICAgICBwc2FfaGtkZl9nZW5lcmF0b3JfdCBoa2RmOwotI2VuZGlmCi0gICAgfSBjdHg7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBwc2FfaGFzaF9vcGVyYXRpb25fcyBwc2FfaGFzaF9vcGVyYXRpb25fdDsKLXR5cGVkZWYgc3RydWN0IHBzYV9rZXlfcG9saWN5X3MgcHNhX2tleV9wb2xpY3lfdDsKLXR5cGVkZWYgc3RydWN0IHBzYV9tYWNfb3BlcmF0aW9uX3MgcHNhX21hY19vcGVyYXRpb25fdDsKLXR5cGVkZWYgc3RydWN0IHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3MgcHNhX2NyeXB0b19nZW5lcmF0b3JfdDsKLQotcHNhX3N0YXR1c190IHBzYV9jcnlwdG9faW5pdCh2b2lkKTsKLXBzYV9zdGF0dXNfdCBwc2FfaW1wb3J0X2tleShwc2Ffa2V5X3Nsb3RfdCBrZXksIHBzYV9rZXlfdHlwZV90IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuZ3RoKTsKLXBzYV9zdGF0dXNfdCBwc2FfZXhwb3J0X2tleShwc2Ffa2V5X3Nsb3RfdCBrZXksIHVpbnQ4X3QgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFfc2l6ZSwgc2l6ZV90ICpkYXRhX2xlbmd0aCk7Ci12b2lkIHBzYV9rZXlfcG9saWN5X2luaXQocHNhX2tleV9wb2xpY3lfdCAqcG9saWN5KTsKLXZvaWQgcHNhX2tleV9wb2xpY3lfc2V0X3VzYWdlKHBzYV9rZXlfcG9saWN5X3QgKnBvbGljeSwgcHNhX2tleV91c2FnZV90IHVzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZyk7Ci1wc2Ffc3RhdHVzX3QgcHNhX3NldF9rZXlfcG9saWN5KHBzYV9rZXlfc2xvdF90IGtleSwgY29uc3QgcHNhX2tleV9wb2xpY3lfdCAqcG9saWN5KTsKLXBzYV9zdGF0dXNfdCBwc2FfZGVzdHJveV9rZXkocHNhX2tleV9zbG90X3Qga2V5KTsKLXBzYV9zdGF0dXNfdCBwc2FfZXhwb3J0X3B1YmxpY19rZXkocHNhX2tleV9zbG90X3Qga2V5LCB1aW50OF90ICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YV9zaXplLCBzaXplX3QgKmRhdGFfbGVuZ3RoKTsKLXBzYV9zdGF0dXNfdCBwc2FfZ2VuZXJhdGVfa2V5KHBzYV9rZXlfc2xvdF90IGtleSwgIHBzYV9rZXlfdHlwZV90IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYml0cywgY29uc3Qgdm9pZCAqZXh0cmEsIHNpemVfdCBleHRyYV9zaXplKTsKLXBzYV9zdGF0dXNfdCBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbihwc2Ffa2V5X3Nsb3RfdCBrZXksIHBzYV9rZXlfdHlwZV90ICp0eXBlLCBzaXplX3QgKmJpdHMpOwotcHNhX3N0YXR1c190IHBzYV9nZXRfa2V5X3BvbGljeShwc2Ffa2V5X3Nsb3RfdCBrZXksIHBzYV9rZXlfcG9saWN5X3QgKnBvbGljeSk7Ci1wc2Ffa2V5X3VzYWdlX3QgcHNhX2tleV9wb2xpY3lfZ2V0X3VzYWdlKGNvbnN0IHBzYV9rZXlfcG9saWN5X3QgKnBvbGljeSk7Ci1wc2FfYWxnb3JpdGhtX3QgcHNhX2tleV9wb2xpY3lfZ2V0X2FsZ29yaXRobShjb25zdCBwc2Ffa2V5X3BvbGljeV90ICpwb2xpY3kpOwotcHNhX3N0YXR1c190IHBzYV9nZXRfa2V5X2xpZmV0aW1lKHBzYV9rZXlfc2xvdF90IGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgKmxpZmV0aW1lKTsKLXBzYV9zdGF0dXNfdCBwc2Ffc2V0X2tleV9saWZldGltZShwc2Ffa2V5X3Nsb3RfdCBrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lKTsKLXBzYV9zdGF0dXNfdCBwc2FfaGFzaF9zZXR1cChwc2FfaGFzaF9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcpOwotcHNhX3N0YXR1c190IHBzYV9oYXNoX3VwZGF0ZShwc2FfaGFzaF9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbnB1dCwgc2l6ZV90IGlucHV0X2xlbmd0aCk7Ci1wc2Ffc3RhdHVzX3QgcHNhX2hhc2hfdmVyaWZ5KHBzYV9oYXNoX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmhhc2gsIHNpemVfdCBoYXNoX2xlbmd0aCk7Ci1wc2Ffc3RhdHVzX3QgcHNhX2hhc2hfZmluaXNoKHBzYV9oYXNoX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmhhc2gsIHNpemVfdCBoYXNoX3NpemUsIHNpemVfdCAqaGFzaF9sZW5ndGgpOwotcHNhX3N0YXR1c190IHBzYV9oYXNoX2Fib3J0KHBzYV9oYXNoX29wZXJhdGlvbl90ICpvcGVyYXRpb24pOwotcHNhX3N0YXR1c190IHBzYV9nZW5lcmF0ZV9yYW5kb20odWludDhfdCAqb3V0cHV0LCBzaXplX3Qgb3V0cHV0X3NpemUpOwotcHNhX3N0YXR1c190IHBzYV9nZW5lcmF0ZV9rZXkocHNhX2tleV9zbG90X3Qga2V5LCBwc2Ffa2V5X3R5cGVfdCB0eXBlLCBzaXplX3QgYml0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmV4dHJhLCBzaXplX3QgZXh0cmFfc2l6ZSk7Ci1wc2Ffc3RhdHVzX3QgcHNhX2dlbmVyYXRvcl9yZWFkKHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QgKmdlbmVyYXRvciwgdWludDhfdCAqb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0cHV0X2xlbmd0aCk7Ci1wc2Ffc3RhdHVzX3QgcHNhX2tleV9kZXJpdmF0aW9uKHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QgKmdlbmVyYXRvciwgcHNhX2tleV9zbG90X3Qga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLCBjb25zdCB1aW50OF90ICpzYWx0LCBzaXplX3Qgc2FsdF9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmxhYmVsLCBzaXplX3QgbGFiZWxfbGVuZ3RoLCBzaXplX3QgY2FwYWNpdHkpOwotcHNhX3N0YXR1c190IHBzYV9nZXRfZ2VuZXJhdG9yX2NhcGFjaXR5KGNvbnN0IHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QgKmdlbmVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmNhcGFjaXR5KTsKLXBzYV9zdGF0dXNfdCBwc2FfZ2VuZXJhdG9yX2ltcG9ydF9rZXkocHNhX2tleV9zbG90X3Qga2V5LCBwc2Ffa2V5X3R5cGVfdCB0eXBlLCBzaXplX3QgYml0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCAqZ2VuZXJhdG9yKTsKLXBzYV9zdGF0dXNfdCBwc2FfZ2VuZXJhdG9yX2Fib3J0KHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QgKmdlbmVyYXRvcik7Ci1wc2Ffc3RhdHVzX3QgcHNhX2FlYWRfZW5jcnlwdChwc2Ffa2V5X3Nsb3RfdCBrZXksIHBzYV9hbGdvcml0aG1fdCBhbGcsIGNvbnN0IHVpbnQ4X3QgKm5vbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5vbmNlX2xlbmd0aCwgY29uc3QgdWludDhfdCAqYWRkaXRpb25hbF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFkZGl0aW9uYWxfZGF0YV9sZW5ndGgsIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwbGFpbnRleHRfbGVuZ3RoLCB1aW50OF90ICpjaXBoZXJ0ZXh0LCBzaXplX3QgY2lwaGVydGV4dF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpjaXBoZXJ0ZXh0X2xlbmd0aCk7Ci1wc2Ffc3RhdHVzX3QgcHNhX21hY19zaWduX3NldHVwKHBzYV9tYWNfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwgcHNhX2tleV9zbG90X3Qga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnKTsKLXZvaWQgbWJlZHRsc19wc2FfY3J5cHRvX2ZyZWUodm9pZCk7Ci1wc2Ffc3RhdHVzX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpOwotI2VuZGlmIC8qIF9QQUxfQ1JZUFRPX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX3NpZC5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9zaWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg4YjNiYi4uMDAwMDAwMAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX3NpZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qKi8KLQotI2lmbmRlZiBfUEFMX1NJRF9IXwotI2RlZmluZSBfUEFMX1NJRF9IXwotCi0vKiBTSUQgQ29uc3RhbnQgZGVmaW5lZCBhbmQgdXNlZCBieSB0ZXN0IHN1aXRlICovCi0jZGVmaW5lIENMSUVOVF9URVNUX0RJU1BBVENIRVJfU0lEICAgICAgMHgwMDAwRkEwMQotI2RlZmluZSBTRVJWRVJfVEVTVF9ESVNQQVRDSEVSX1NJRCAgICAgIDB4MDAwMEZCMDEKLSNkZWZpbmUgU0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lEICAweDAwMDBGQjAyCi0jZGVmaW5lIFNFUlZFUl9TVFJJQ1RfTUlOT1JfVkVSU0lPTl9TSUQgMHgwMDAwRkIwMwotI2RlZmluZSBTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCAgIDB4MDAwMEZCMDQKLSNkZWZpbmUgU0VSVkVSX1JFTEFYX01JTk9SX1ZFUlNJT05fU0lEICAweDAwMDBGQjA1Ci0jZGVmaW5lIFNFUlZFUl9VTkVYVEVSTl9TSUQgICAgICAgICAgICAgMHgwMDAwRkIwNgotI2RlZmluZSBTRVJWRVJfQ09OTkVDVElPTl9EUk9QX1NJRCAgICAgIDB4MDAwMEZCMDcKLSNkZWZpbmUgRFJJVkVSX1VBUlRfU0lEICAgICAgICAgICAgICAgICAweDAwMDBGQzAxCi0jZGVmaW5lIERSSVZFUl9XQVRDSERPR19TSUQgICAgICAgICAgICAgMHgwMDAwRkMwMgotI2RlZmluZSBEUklWRVJfTlZNRU1fU0lEICAgICAgICAgICAgICAgIDB4MDAwMEZDMDMKLSNkZWZpbmUgRFJJVkVSX1RBUkdFVF9JTklUX1NJRCAgICAgICAgICAweDAwMDBGQzA0Ci0KLSNlbmRpZiAvKiBfUEFMX1NJRF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9NYWtlZmlsZSBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCA2MyUKcmVuYW1lIGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9NYWtlZmlsZQpyZW5hbWUgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9NYWtlZmlsZQppbmRleCBkYTJmMDg5Li5iNDRkMGNmIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL01ha2VmaWxlCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi0jICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogIyAqCiAjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNiwyMCArMTYsNDggQEAKIAogaW5jbHVkZSAkKFNPVVJDRSkvdG9vbHMvbWFrZWZpbGVzL3Rvb2xjaGFpbi5tawogCi0jIExvY2FsIFBBTCBNYWtlIHZhcmlhYmxlCisjIE1ha2UgdmFyaWFibGVzIHRvIHNlbGVjdCBjb3JyZWN0IGluc3RhbmNlcyBvZiBQQUwgZmlsZXMKKwogIyMgUFNBX0lQQ19JTVBMRU1FTlRFRCBtdXN0IGJlIHRydWUgZm9yIElQQyBTVUlURQotUFNBX0lQQ19JTVBMRU1FTlRFRDo9MQorUFNBX0lQQ19JTVBMRU1FTlRFRDo9MAogCiAjIyBQU0FfQ1JZUFRPX0lNUExFTUVOVEVEIG11c3QgYmUgdHJ1ZSBmb3IgQ1JZUFRPIFNVSVRFCiBQU0FfQ1JZUFRPX0lNUExFTUVOVEVEOj0xCiAKLSMgUEFMIEMgc291cmNlIGZpbGVzIHBhcnQgb2YgTlNQRSBsaWJyYXJ5Ci1TUkNfQ19OU1BFPSBwYWxfZHJpdmVyX25zX2ludGYuYworIyMgUFNBX1BST1RFQ1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEIG11c3QgYmUgdHJ1ZSBmb3IgUFJPVEVDVEVEX1NUT1JBR0UgU1VJVEUKK1BTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRDo9MQorCisjIyBQU0FfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEIG11c3QgYmUgdHJ1ZSBmb3IgSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFIFNVSVRFCitQU0FfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEOj0xCisKKyMjIFBTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEIG11c3QgYmUgdHJ1ZSBmb3IgSU5JVElBTF9BVFRFU1RBVElPTiBTVUlURQorUFNBX0lOSVRJQUxfQVRURVNUQVRJT05fSU1QTEVNRU5URUQ6PTAKKworIyBNYWtlIHZhcmlhYmxlcyBob2xkaW5nIE5TUEUvU1BFIHNvdXJjZSBmaWxlcworCisjIyBQQUwgQyBzb3VyY2UgZmlsZXMgcGFydCBvZiBOU1BFIGxpYnJhcnkKK1NSQ19DX05TUEU9CisKKyMjIFBBTCBBU00gc291cmNlIGZpbGVzIHBhcnQgb2YgTlNQRSBsaWJyYXJ5CitTUkNfQVNNX05TUEU9CisKKyMjIFBBTCBDIHNvdXJjZSBmaWxlcyBwYXJ0IG9mIFNQRSBsaWJyYXJ5IC0gZHJpdmVyIHBhcnRpdGlvbgorU1JDX0NfRFJJVkVSX1NQPQorCisjIyBQQUwgQVNNIHNvdXJjZSBmaWxlcyBwYXJ0IG9mIFNQRSBsaWJyYXJ5IC0gZHJpdmVyIHBhcnRpdGlvbgorU1JDX0FTTV9EUklWRVJfU1A9CiAKIGlmZXEgKCR7UFNBX0lQQ19JTVBMRU1FTlRFRH0sMSkKKyMgV2hlbiBQU0FfSVBDX0lNUExFTUVOVEVEPTEsIGRyaXZlciBmdW5jdGlvbmFsaXRpZXMgYXJlIGltcGxlbWVudGVkIGFzIFJvVC1zZXJ2aWNlcworIyBhbmQgc2VjdXJlIGFuZCBub24tc2VjdXJlIGNsaWVudHMgd2lsbCBjYWxsIHRvIHRoZXNlIFJvVC1zZXJ2aWNlcyB0byBnZXQgYXBwcm9wcmlhdGUgZHJpdmVyIHNlcnZpY2VzLgogU1JDX0NfTlNQRSArPSBwYWxfY2xpZW50X2FwaV9pbnRmLmMKIFNSQ19DX05TUEUgKz0gcGFsX2RyaXZlcl9pcGNfaW50Zi5jCisKKyMgRHJpdmVyIGZpbGVzIHdpbGwgYmUgY29tcGlsZWQgYXMgcGFydCBvZiBkcml2ZXIgcGFydGl0aW9uCitTUkNfQ19EUklWRVJfU1AgKz0gcGFsX2RyaXZlcl9pbnRmLmMgcGFsX252bWVtLmMgcGFsX3VhcnQuYyBwYWxfd2RfY21zZGsuYwogZWxzZQorCisjIFdoZW4gUFNBX0lQQ19JTVBMRU1FTlRFRD0wLCBkcml2ZXIgZmlsZXMgd2lsbCBiZSBjb21waWxlZCBhcyBwYXJ0IG9mIE5TUEUKIFNSQ19DX05TUEUgKz0gcGFsX2NsaWVudF9hcGlfZW1wdHlfaW50Zi5jCiBTUkNfQ19OU1BFICs9IHBhbF9kcml2ZXJfbnNfaW50Zi5jIHBhbF9udm1lbS5jIHBhbF91YXJ0LmMgcGFsX3dkX2Ntc2RrLmMKIGVuZGlmCkBAIC00MCwxNSArNjgsMjMgQEAKIFNSQ19DX05TUEUgKz0gcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKIGVuZGlmCiAKLSMgUEFMIEFTTSBzb3VyY2UgZmlsZXMgcGFydCBvZiBOU1BFIGxpYnJhcnkKLVNSQ19BU01fTlNQRT0KK2lmZXEgKCR7UFNBX1BST1RFQ1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEfSwxKQorU1JDX0NfTlNQRSArPSBwYWxfcHJvdGVjdGVkX3N0b3JhZ2VfaW50Zi5jCitlbHNlCitTUkNfQ19OU1BFICs9IHBhbF9wcm90ZWN0ZWRfc3RvcmFnZV9lbXB0eV9pbnRmLmMKK2VuZGlmCiAKLSMgUEFMIEMgc291cmNlIGZpbGVzIHBhcnQgb2YgU1BFIGxpYnJhcnkgLSBkcml2ZXIgcGFydGl0aW9uCi1TUkNfQ19EUklWRVJfU1A9IHBhbF9kcml2ZXJfaW50Zi5jIHBhbF9udm1lbS5jIHBhbF91YXJ0LmMgcGFsX3dkX2Ntc2RrLmMKK2lmZXEgKCR7UFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRH0sMSkKK1NSQ19DX05TUEUgKz0gcGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9pbnRmLmMKK2Vsc2UKK1NSQ19DX05TUEUgKz0gcGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9lbXB0eV9pbnRmLmMKK2VuZGlmCiAKLSMgUEFMIEFTTSBzb3VyY2UgZmlsZXMgcGFydCBvZiBTUEUgbGlicmFyeSAtIGRyaXZlciBwYXJ0aXRpb24KLVNSQ19BU01fRFJJVkVSX1NQPQotCitpZmVxICgke1BTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEfSwxKQorU1JDX0NfTlNQRSArPSBwYWxfYXR0ZXN0YXRpb25faW50Zi5jCitlbHNlCitTUkNfQ19OU1BFICs9IHBhbF9hdHRlc3RhdGlvbl9lbXB0eV9pbnRmLmMKK2VuZGlmCiAKIElOQ0xVREU9IC1JJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL25zcGUgXAogICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvc3BlIFwKQEAgLTEwMSw3ICsxMzcsNyBAQAogCiAjIEdlbmVyYXRlZCAlX2RyaXZlcl9zcC5vKHMpIGFyZSB1c2VkIGluIHNwYnVpbGQubWsgdG8gY3JlYXRlIGZpbmFsIGRyaXZlcl9wYXJ0aXRpb24uYQogJChCVUlMRCkvcGxhdGZvcm0vc3BlLyVfZHJpdmVyX3NwLm8gOiAlLmMKLQkkKENDKSAkKElOQ0xVREUpIC1vICRAIC1jICQ8CisJJChDQykgJChJTkNMVURFKSAtRFNQRV9CVUlMRCAtbyAkQCAtYyAkPAogCiAkKEJVSUxEKS9wbGF0Zm9ybS9zcGUvJV9kcml2ZXJfc3AubyA6ICUucwogCSQoQVMpICQoSU5DTFVERSkgLW8gJEAgJDwKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9tYW5pZmVzdHMvY29tbW9uL2RyaXZlcl9wYXJ0aXRpb25fcHNhLmpzb24Kc2ltaWxhcml0eSBpbmRleCA3NyUKcmVuYW1lIGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9tYW5pZmVzdHMvY29tbW9uL2RyaXZlcl9wYXJ0aXRpb25fcHNhLmpzb24KcmVuYW1lIHRvIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uCmluZGV4IDEyZGQxOGIuLjVkNTc1NzEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uCkBAIC0xLDEzICsxLDEzIEBACiB7CiAgICJwc2FfZnJhbWV3b3JrX3ZlcnNpb24iOiAxLjAsCiAgICJuYW1lIjogIkRSSVZFUl9QQVJUSVRJT04iLAotICAidHlwZSI6ICJBUFBMSUNBVElPTi1ST1QiLAorICAidHlwZSI6ICJQU0EtUk9UIiwKICAgInByaW9yaXR5IjogIk5PUk1BTCIsCiAgICJpZCI6ICIweDAwMDAwMDAzIiwKICAgImRlc2NyaXB0aW9uIjogIkltcGxlbWVudHMgZGV2aWNlIHNlcnZpY2VzIHN1Y2ggcHJpbnQsIGZsYXNoIHJlYWQvd3JpdGUsLiBldGMuIiwKICAgImVudHJ5X3BvaW50IjogImRyaXZlcl9tYWluIiwKICAgInN0YWNrX3NpemUiOiAiMHg0MDAiLAotICAiaGVhcF9zaXplIjogIjB4NDAwIiwKKyAgImhlYXBfc2l6ZSI6ICIweDEwMCIsCiAgICJzZXJ2aWNlcyI6IFt7CiAgICAgICAibmFtZSI6ICJEUklWRVJfVUFSVF9TSUQiLAogICAgICAgInNpZCI6ICIweDAwMDBGQzAxIiwKQEAgLTMzLDkgKzMzLDkgQEAKICAgICAgICJtaW5vcl9wb2xpY3kiOiAiUkVMQVhFRCIKICAgICB9LAogICAgIHsKLSAgICAgICJuYW1lIjogIkRSSVZFUl9UQVJHRVRfSU5JVF9TSUQiLAorICAgICAgIm5hbWUiOiAiVEVTVF9JTlRSX1NJRCIsCiAgICAgICAic2lkIjogIjB4MDAwMEZDMDQiLAotICAgICAgInNpZ25hbCI6ICJEUklWRVJfVEFSR0VUX0lOSVRfU0lHIiwKKyAgICAgICJzaWduYWwiOiAiVEVTVF9JTlRSX1NJRyIsCiAgICAgICAibm9uX3NlY3VyZV9jbGllbnRzIjogdHJ1ZSwKICAgICAgICJtaW5vcl92ZXJzaW9uIjogMSwKICAgICAgICJtaW5vcl9wb2xpY3kiOiAiUkVMQVhFRCIKQEAgLTQ1LDIwICs0NSwzMiBAQAogICAgIHsKICAgICAgICJuYW1lIjogIlVBUlRfUkVHSU9OIiwKICAgICAgICJiYXNlIjogIjB4NDAwMDQwMDAiLAotICAgICAgInNpemUiOiAiMHhGRkYiLAorICAgICAgInNpemUiOiAiMHgxMDAwIiwKICAgICAgICJwZXJtaXNzaW9uIjogIlJFQUQtV1JJVEUiCiAgICAgfSwKICAgICB7CiAgICAgICAibmFtZSI6ICJXQVRDSERPR19SRUdJT04iLAogICAgICAgImJhc2UiOiAiMHg0MDAwODAwMCIsCi0gICAgICAic2l6ZSI6ICIweEZGRiIsCisgICAgICAic2l6ZSI6ICIweDEwMDAiLAogICAgICAgInBlcm1pc3Npb24iOiAiUkVBRC1XUklURSIKICAgICB9LAogICAgIHsKICAgICAgICJuYW1lIjogIk5WTUVNX1JFR0lPTiIsCiAgICAgICAiYmFzZSI6ICIweDIwMDJGMDAwIiwKLSAgICAgICJzaXplIjogIjB4RkZGIiwKKyAgICAgICJzaXplIjogIjB4NDAwIiwKICAgICAgICJwZXJtaXNzaW9uIjogIlJFQUQtV1JJVEUiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJEUklWRVJfUEFSVElUSU9OX01NSU8iLAorICAgICAgImJhc2UiOiAiMHgyMDBBRjA0MCIsCisgICAgICAic2l6ZSI6ICIweDIwIiwKKyAgICAgICJwZXJtaXNzaW9uIjogIlJFQUQtV1JJVEUiCisgICAgfQorICBdLAorICAiaXJxcyI6IFsKKyAgICB7CisgICAgICAgInNpZ25hbCI6ICJEUklWRVJfVUFSVF9JTlRSX1NJRyIsCisgICAgICAgImxpbmVfbnVtIjogMTcKICAgICB9CiAgIF0sCiAgICJsaW5rZXJfcGF0dGVybiI6IHsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbWFuaWZlc3RzL2lwYy9jbGllbnRfcGFydGl0aW9uX3BzYS5qc29uIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24Kc2ltaWxhcml0eSBpbmRleCA4MCUKcmVuYW1lIGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24KcmVuYW1lIHRvIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2lwYy9jbGllbnRfcGFydGl0aW9uX3BzYS5qc29uCmluZGV4IGEyYTJjZTUuLjA4MWRjOTUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbWFuaWZlc3RzL2lwYy9jbGllbnRfcGFydGl0aW9uX3BzYS5qc29uCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2lwYy9jbGllbnRfcGFydGl0aW9uX3BzYS5qc29uCkBAIC03LDcgKzcsNyBAQAogICAiZGVzY3JpcHRpb24iOiAiQ2xpZW50IHBhcnRpdGlvbiBleGVjdXRpbmcgY2xpZW50IHRlc3QgZnVuYyBmcm9tIFNQRSIsCiAgICJlbnRyeV9wb2ludCI6ICJjbGllbnRfbWFpbiIsCiAgICJzdGFja19zaXplIjogIjB4NDAwIiwKLSAgImhlYXBfc2l6ZSI6ICIweDQwMCIsCisgICJoZWFwX3NpemUiOiAiMHgxMDAiLAogICAic2VydmljZXMiOiBbewogICAgICAgIm5hbWUiOiAiQ0xJRU5UX1RFU1RfRElTUEFUQ0hFUl9TSUQiLAogICAgICAgInNpZCI6ICIweDAwMDBGQTAxIiwKQEAgLTIwLDYgKzIwLDcgQEAKICAgImRlcGVuZGVuY2llcyI6IFsKICAgICAiRFJJVkVSX1VBUlRfU0lEIiwKICAgICAiRFJJVkVSX05WTUVNX1NJRCIsCisgICAgIlRFU1RfSU5UUl9TSUQiLAogICAgICJTRVJWRVJfVEVTVF9ESVNQQVRDSEVSX1NJRCIsCiAgICAgIlNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lEIiwKICAgICAiU0VSVkVSX1NUUklDVF9NSU5PUl9WRVJTSU9OX1NJRCIsCkBAIC0yNyw2ICsyOCwxNCBAQAogICAgICJTRVJWRVJfU0VDVVJFX0NPTk5FQ1RfT05MWV9TSUQiLAogICAgICJTRVJWRVJfQ09OTkVDVElPTl9EUk9QX1NJRCIKICAgXSwKKyAgIm1taW9fcmVnaW9ucyIgOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiQ0xJRU5UX1BBUlRJVElPTl9NTUlPIiwKKyAgICAgICJiYXNlIjogIjB4MjAwQUYwMDAiLAorICAgICAgInNpemUiOiAiMHgyMCIsCisgICAgICAicGVybWlzc2lvbiI6ICJSRUFELVdSSVRFIgorICAgIH0KKyAgIF0sCiAgICJsaW5rZXJfcGF0dGVybiI6IHsKICAgICAib2JqZWN0X2xpc3QiOiBbCiAgICAgImNsaWVudF9wYXJ0aXRpb24uYSIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbWFuaWZlc3RzL2lwYy9zZXJ2ZXJfcGFydGl0aW9uX3BzYS5qc29uIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9tYW5pZmVzdHMvaXBjL3NlcnZlcl9wYXJ0aXRpb25fcHNhLmpzb24Kc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9tYW5pZmVzdHMvaXBjL3NlcnZlcl9wYXJ0aXRpb25fcHNhLmpzb24KcmVuYW1lIHRvIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2lwYy9zZXJ2ZXJfcGFydGl0aW9uX3BzYS5qc29uCmluZGV4IDE2N2ZhYTAuLjM1NDEzODcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbWFuaWZlc3RzL2lwYy9zZXJ2ZXJfcGFydGl0aW9uX3BzYS5qc29uCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2lwYy9zZXJ2ZXJfcGFydGl0aW9uX3BzYS5qc29uCkBAIC03LDcgKzcsNyBAQAogICAiZGVzY3JpcHRpb24iOiAiU2VydmVyIHBhcnRpdGlvbiBleGVjdXRpbmcgc2VydmVyIHRlc3QgZnVuYyIsCiAgICJlbnRyeV9wb2ludCI6ICJzZXJ2ZXJfbWFpbiIsCiAgICJzdGFja19zaXplIjogIjB4NDAwIiwKLSAgImhlYXBfc2l6ZSI6ICIweDQwMCIsCisgICJoZWFwX3NpemUiOiAiMHgxMDAiLAogICAic2VydmljZXMiOiBbewogICAgICAgIm5hbWUiOiAiU0VSVkVSX1RFU1RfRElTUEFUQ0hFUl9TSUQiLAogICAgICAgInNpZCI6ICIweDAwMDBGQjAxIiwKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfYXR0ZXN0YXRpb25fZW1wdHlfaW50Zi5jCnNpbWlsYXJpdHkgaW5kZXggNzQlCmNvcHkgZnJvbSBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKY29weSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2F0dGVzdGF0aW9uX2VtcHR5X2ludGYuYwppbmRleCAxNDY0OWU5Li5mYWYzZjQ5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9hdHRlc3RhdGlvbl9lbXB0eV9pbnRmLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSwxNyArMTUsMTYgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLQorI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgInBhbF9jb21tb24uaCIKLSNpbmNsdWRlICJwYWxfY3J5cHRvX2ludGYuaCIKIAogLyoqCi0gICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgY3J5cHRvIGZ1bmN0aW9uCisgICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgYXR0ZXN0YXRpb24gZnVuY3Rpb24KICAgICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQogICAgICAgICAgICAgICAgIHZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0CiAgICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCiAqKi8KLXBzYV9zdGF0dXNfdCBwYWxfY3J5cHRvX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKK2ludDMyX3QgcGFsX2F0dGVzdGF0aW9uX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKIHsKLSAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIHJldHVybiBQQUxfU1RBVFVTX0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2F0dGVzdGF0aW9uX2ludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MThlYTA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmMKQEAgLTAsMCArMSw0MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworCisjaW5jbHVkZSAicGFsX2F0dGVzdGF0aW9uX2ludGYuaCIKKworLyoqCisgICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgYXR0ZXN0YXRpb24gZnVuY3Rpb24KKyAgICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQorICAgICAgICAgICAgICAgIHZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0CisgICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCisqKi8KK2ludDMyX3QgcGFsX2F0dGVzdGF0aW9uX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKK3sKKyAgICB1aW50OF90ICAgICAqY2hhbGxlbmdlLCAqdG9rZW47CisgICAgc2l6ZV90ICAgICAgY2hhbGxlbmdlX3NpemUsICp0b2tlbl9zaXplOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBQQUxfSU5JVElBTF9BVFRFU1RfR0VUX1RPS0VOOgorICAgICAgICAgICAgY2hhbGxlbmdlID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgY2hhbGxlbmdlX3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgdG9rZW4gPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICB0b2tlbl9zaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2luaXRpYWxfYXR0ZXN0X2dldF90b2tlbihjaGFsbGVuZ2UsIGNoYWxsZW5nZV9zaXplLCB0b2tlbiwgdG9rZW5fc2l6ZSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfYXR0ZXN0YXRpb25faW50Zi5oCnNpbWlsYXJpdHkgaW5kZXggNjIlCmNvcHkgZnJvbSBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKY29weSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2F0dGVzdGF0aW9uX2ludGYuaAppbmRleCAxNDY0OWU5Li5lZWJiNTE0IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSwxNyArMTUsMTQgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKKyNpZm5kZWYgX1BBTF9JTklUSUFMX0FUVEVTVEFUSU9OX0hfCisjZGVmaW5lIF9QQUxfSU5JVElBTF9BVFRFU1RBVElPTl9IXwogCiAjaW5jbHVkZSAicGFsX2NvbW1vbi5oIgotI2luY2x1ZGUgInBhbF9jcnlwdG9faW50Zi5oIgogCi0vKioKLSAgICBAYnJpZWYgICAgLSBUaGlzIEFQSSB3aWxsIGNhbGwgdGhlIHJlcXVlc3RlZCBjcnlwdG8gZnVuY3Rpb24KLSAgICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQotICAgICAgICAgICAgICAgIHZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0Ci0gICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCi0qKi8KLXBzYV9zdGF0dXNfdCBwYWxfY3J5cHRvX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKLXsKLSAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOwotfQorZW51bSBhdHRlc3RhdGlvbl9mdW5jdGlvbl9jb2RlIHsKKyAgICBQQUxfSU5JVElBTF9BVFRFU1RfR0VUX1RPS0VOICAgICAgICA9IDB4MSwKK307CisKK2ludDMyX3QgcGFsX2F0dGVzdGF0aW9uX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCk7CisjZW5kaWYgLyogX1BBTF9JTklUSUFMX0FUVEVTVEFUSU9OX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NsaWVudF9hcGlfZW1wdHlfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jbGllbnRfYXBpX2VtcHR5X2ludGYuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NsaWVudF9hcGlfZW1wdHlfaW50Zi5jCnJlbmFtZSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2NsaWVudF9hcGlfZW1wdHlfaW50Zi5jCmluZGV4IDhlMmFhMjIuLjU3OGI0Y2UgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY2xpZW50X2FwaV9lbXB0eV9pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jbGllbnRfYXBpX2VtcHR5X2ludGYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE3LDcgKzE3LDYgQEAKIAogI2luY2x1ZGUgInBhbF9jb21tb24uaCIKICNpbmNsdWRlICJwYWxfY2xpZW50X2FwaV9pbnRmLmgiCi0jaW5jbHVkZSAicGFsX3NpZC5oIgogCiAvKioKICAqIEBicmllZiAtIFJldHJpZXZlIHRoZSB2ZXJzaW9uIG9mIHRoZSBQU0EgRnJhbWV3b3JrIEFQSSB0aGF0IGlzIGltcGxlbWVudGVkLgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jbGllbnRfYXBpX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY2xpZW50X2FwaV9pbnRmLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jbGllbnRfYXBpX2ludGYuYwpyZW5hbWUgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jbGllbnRfYXBpX2ludGYuYwppbmRleCAyMTM1MGVhLi4yMGRkZDExIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NsaWVudF9hcGlfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY2xpZW50X2FwaV9pbnRmLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNyw3ICsxNyw2IEBACiAKICNpbmNsdWRlICJwYWxfY29tbW9uLmgiCiAjaW5jbHVkZSAicGFsX2NsaWVudF9hcGlfaW50Zi5oIgotI2luY2x1ZGUgInBhbF9zaWQuaCIKIAogLyoqCiAgKiBAYnJpZWYgICAtIFJldHJpZXZlIHRoZSB2ZXJzaW9uIG9mIHRoZSBQU0EgRnJhbWV3b3JrIEFQSSB0aGF0IGlzIGltcGxlbWVudGVkLgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jbGllbnRfYXBpX2ludGYuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY2xpZW50X2FwaV9pbnRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1NzQxZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY2xpZW50X2FwaV9pbnRmLmgKQEAgLTAsMCArMSwzMiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2lmbmRlZiBfUEFMX0NMSUVOVF9BUElfSF8KKyNkZWZpbmUgX1BBTF9DTElFTlRfQVBJX0hfCisKKyNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisKK3VpbnQzMl90IHBhbF9pcGNfZnJhbWV3b3JrX3ZlcnNpb24odm9pZCk7Cit1aW50MzJfdCBwYWxfaXBjX3ZlcnNpb24odWludDMyX3Qgc2lkKTsKK3BzYV9oYW5kbGVfdCBwYWxfaXBjX2Nvbm5lY3QodWludDMyX3Qgc2lkLCB1aW50MzJfdCBtaW5vcl92ZXJzaW9uKTsKK3BzYV9zdGF0dXNfdCBwYWxfaXBjX2NhbGwocHNhX2hhbmRsZV90IGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwc2FfaW52ZWMgKmluX3ZlYywKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHBzYV9vdXR2ZWMgKm91dF92ZWMsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG91dF9sZW4pOwordm9pZCBwYWxfaXBjX2Nsb3NlKHBzYV9oYW5kbGVfdCBoYW5kbGUpOworI2VuZGlmIC8qIF9QQUxfQ0xJRU5UX0FQSV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jb21tb24uaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY29tbW9uLmgKc2ltaWxhcml0eSBpbmRleCA2NCUKcmVuYW1lIGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jb21tb24uaApyZW5hbWUgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jb21tb24uaAppbmRleCA3OWRjN2EzLi5kNWFjYjJlIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NvbW1vbi5oCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY29tbW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMSw2ICsyMSwxMiBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaWZuZGVmIFRBUkdFVF9DRkdfQlVJTEQKKyNpbmNsdWRlICJwYWxfY29uZmlnLmgiCisjZW5kaWYKIAogLyogdHlwZWRlZidzICovCiB0eXBlZGVmIHVpbnQ4X3QgICAgICAgICAgICAgYm9vbF90OwpAQCAtMzAsMTEgKzM2LDEzIEBACiB0eXBlZGVmIGNoYXIgICAgICAgICAgICAgICAgY2hhcjhfdDsKIHR5cGVkZWYgdWludDMyX3QgICAgICAgICAgICBjZmdfaWRfdDsKIAorI2RlZmluZSBQQUxfU1RBVFVTX1VOU1VQUE9SVEVEX0ZVTkMgICAgICAweEZGCisKIHR5cGVkZWYgZW51bQogewogICAgIFBBTF9TVEFUVVNfU1VDQ0VTUyA9IDB4MCwKICAgICBQQUxfU1RBVFVTX0VSUk9SICAgPSAweDgwCi19cGFsX3N0YXR1c190OworfSBwYWxfc3RhdHVzX3Q7CiAKIHR5cGVkZWYgZW51bSB7CiAgICAgTlZNRU1fUkVBRCAgICAgICAgICAgICA9IDB4MSwKQEAgLTU5LDEzICs2NywxNCBAQAogICAgIFdEX0xPV19USU1FT1VUICAgICAgPSAweDEsCiAgICAgV0RfTUVESVVNX1RJTUVPVVQgICA9IDB4MiwKICAgICBXRF9ISUdIX1RJTUVPVVQgICAgID0gMHgzLAorICAgIFdEX0NSWVBUT19USU1FT1VUICAgPSAweDQsCiB9IHdkX3RpbWVvdXRfdHlwZV90OwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgd2RfZm5fdHlwZV90IHdkX2ZuX3R5cGU7Ci0gICAgYWRkcl90IHdkX2Jhc2VfYWRkcjsKLSAgICB1aW50MzJfdCB3ZF90aW1lX3VzOwotICAgIHVpbnQzMl90IHdkX3RpbWVyX3RpY2tfdXM7CisgICAgYWRkcl90ICAgICAgIHdkX2Jhc2VfYWRkcjsKKyAgICB1aW50MzJfdCAgICAgd2RfdGltZV91czsKKyAgICB1aW50MzJfdCAgICAgd2RfdGltZXJfdGlja191czsKIH0gd2RfcGFyYW1fdDsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTczLDQgKzgyLDM2IEBACiAgICAgVUFSVF9QUklOVCAgICAgICAgICAgID0gMHgyLAogfSB1YXJ0X2ZuX3R5cGVfdDsKIAorLyoKKyAqIFJlZGVmaW5pbmcgc29tZSBvZiB0aGUgY2xpZW50LmggZWxlbWVudHMgZm9yIGNvbXBpbGF0aW9uIHRvIGdvIHRocm91Z2gKKyAqIHdoZW4gUFNBIElQQyBBUElzIGFyZSBub3QgaW1wbGVtZW50ZWQuCisgKi8KKyNpZiAoUFNBX0lQQ19JTVBMRU1FTlRFRCA9PSAwKQorCisjaWZuZGVmIFBTQV9WRVJTSU9OX05PTkUKKyNkZWZpbmUgUFNBX1ZFUlNJT05fTk9ORSAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgUFNBX1NVQ0NFU1MKKyNkZWZpbmUgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICgwKQordHlwZWRlZiBpbnQzMl90IHBzYV9zdGF0dXNfdDsKKyNlbmRpZgordHlwZWRlZiBpbnQzMl90IHBzYV9oYW5kbGVfdDsKKworI2lmbmRlZiBQU0FfTlVMTF9IQU5ETEUKKyNkZWZpbmUgUFNBX05VTExfSEFORExFICAgICAgICAgICAgICgocHNhX2hhbmRsZV90KTApCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgcHNhX2ludmVjIHsKKyAgICBjb25zdCB2b2lkICpiYXNlOworICAgIHNpemVfdCBsZW47Cit9IHBzYV9pbnZlYzsKKwordHlwZWRlZiBzdHJ1Y3QgcHNhX291dHZlYyB7CisgICAgdm9pZCAqYmFzZTsKKyAgICBzaXplX3QgbGVuOworfSBwc2Ffb3V0dmVjOworCisjZW5kaWYgLyogUFNBX0lQQ19JTVBMRU1FTlRFRCAqLworCiAjZW5kaWYgLyogX1BBTF9DT01NT05fSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY29uZmlnLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYTBlYzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2NvbmZpZy5oCkBAIC0wLDAgKzEsMTA0IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZuZGVmIF9QQUxfQ09ORklHX0hfCisjZGVmaW5lIF9QQUxfQ09ORklHX0hfCisKKy8qCisgKiBMaXN0IG9mIG1hY3JvcyB1c2VkIGJ5IHRlc3Qgc3VpdGUKKyAqLworI2lmICFkZWZpbmVkKFBTQV9JUENfSU1QTEVNRU5URUQpCisjZGVmaW5lIFBTQV9JUENfSU1QTEVNRU5URUQgMAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChQU0FfQ1JZUFRPX0lNUExFTUVOVEVEKQorI2RlZmluZSBQU0FfQ1JZUFRPX0lNUExFTUVOVEVEIDAKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCkKKyNkZWZpbmUgUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCAwCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFBTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCkKKyNkZWZpbmUgUFNBX1BST1RFQ1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEIDAKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoUFNBX0lOSVRJQUxfQVRURVNUQVRJT05fSU1QTEVNRU5URUQpCisjZGVmaW5lIFBTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEIDAKKyNlbmRpZgorCisjaWYgKFBTQV9JUENfSU1QTEVNRU5URUQgPT0gMCkgJiYgXAorICAgIChQU0FfQ1JZUFRPX0lNUExFTUVOVEVEID09IDApICYmIFwKKyAgICAoUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCA9PSAwKSAmJiBcCisgICAgKFBTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCA9PSAwKSAmJiBcCisgICAgKFBTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEID09IDApCisjZXJyb3IgIllvdSBtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgb2YgdGhlc2UgbWFjcm9zIHRvIHJ1biB0ZXN0IHN1aXRlIgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChWRVJCT1NFKQorI2RlZmluZSBWRVJCT1NFIDQgLyogUHJpbnQgdmVyYm9zaXR5ID0gRVJST1IgKi8KKyNlbmRpZgorCisjaWYgKCFkZWZpbmVkKFZBTF9OU1BFX0JVSUxEKSAmJiAhZGVmaW5lZChTUEVfQlVJTEQpKQorI2RlZmluZSBWQUxfTlNQRV9CVUlMRCAxCisjZW5kaWYKKworI2lmICghZGVmaW5lZChOT05TRUNVUkVfVEVTVF9CVUlMRCkgJiYgIWRlZmluZWQoU1BFX0JVSUxEKSkKKyNkZWZpbmUgTk9OU0VDVVJFX1RFU1RfQlVJTEQgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChURVNUX0NPTUJJTkVfQVJDSElWRSkKKy8vI2RlZmluZSBURVNUX0NPTUJJTkVfQVJDSElWRSAvKiBUZXN0IGRpc3BhdGNoZXIgY29kZSBzZWxlY3Rpb24gKi8KKyNlbmRpZgorCisvKgorICogSW5jbHVkZSBvZiBQU0EgZGVmaW5lZCBIZWFkZXIgZmlsZXMKKyAqLworCisjaWYgUFNBX0lQQ19JTVBMRU1FTlRFRAorLyogcHNhL2NsaWVudC5oOiBDb250YWlucyB0aGUgUFNBIENsaWVudCBBUEkgZWxlbWVudHMgKi8KKyNpbmNsdWRlICJwc2EvY2xpZW50LmgiCisKKy8qCisgKiBwc2FfbWFuaWZlc3Qvc2lkLmg6ICBNYWNybyBkZWZpbml0aW9ucyBkZXJpdmVkIGZyb20gbWFuaWZlc3QgZmlsZXMgdGhhdCBtYXAgZnJvbSBSb1QgU2VydmljZQorICogbmFtZXMgdG8gU2VydmljZSBJRHMgKFNJRHMpLiBQYXJ0aXRpb24gbWFuaWZlc3QgcGFyc2UgYnVpbGQgdG9vbCBtdXN0IHByb3ZpZGUgdGhlIGltcGxlbWVudGF0aW9uCisgKiBvZiB0aGlzIGZpbGUuCisqLworI2luY2x1ZGUgInBzYV9tYW5pZmVzdC9zaWQuaCIKKyNlbmRpZgorCisjaWYgUFNBX0NSWVBUT19JTVBMRU1FTlRFRAorLyogcHNhL2NyeXB0by5oOiBDb250YWlucyB0aGUgUFNBIENyeXB0byBBUEkgZWxlbWVudHMgKi8KKyNpbmNsdWRlICJwc2EvY3J5cHRvLmgiCisjZW5kaWYKKworI2lmIFBTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQKKy8qIHBzYS9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UuaDogQ29udGFpbnMgdGhlIFBTQSBJVFMgQVBJIGVsZW1lbnRzICovCisjaW5jbHVkZSAicHNhL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS5oIgorI2VuZGlmCisKKyNpZiBQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQKKy8qIHBzYS9wcm90ZWN0ZWRfc3RvcmFnZS5oOiBDb250YWlucyB0aGUgUFNBIFBTIEFQSSBlbGVtZW50cyAqLworI2luY2x1ZGUgInBzYS9wcm90ZWN0ZWRfc3RvcmFnZS5oIgorI2VuZGlmCisKKyNpZiBQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRAorLyogcHNhL2luaXRpYWxfYXR0ZXN0YXRpb24uaDogQ29udGFpbnMgdGhlIFBTQSBJbml0aWFsIEF0dGVzdGF0aW9uIEFQSSBlbGVtZW50cyAqLworI2luY2x1ZGUgInBzYS9pbml0aWFsX2F0dGVzdGF0aW9uLmgiCisjZW5kaWYKKworI2VuZGlmIC8qIF9QQUxfQ09ORklHX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKc2ltaWxhcml0eSBpbmRleCA4MSUKcmVuYW1lIGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCnJlbmFtZSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKaW5kZXggMTQ2NDllOS4uMmEyOGYzOSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDkgKzE1LDggQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLQorI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgInBhbF9jb21tb24uaCIKLSNpbmNsdWRlICJwYWxfY3J5cHRvX2ludGYuaCIKIAogLyoqCiAgICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgY3J5cHRvIGZ1bmN0aW9uCkBAIC0yNSw3ICsyNCw3IEBACiAgICAgICAgICAgICAgICAgdmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKICAgICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKICoqLwotcHNhX3N0YXR1c190IHBhbF9jcnlwdG9fZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KQoraW50MzJfdCBwYWxfY3J5cHRvX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKIHsKLSAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIHJldHVybiBQQUxfU1RBVFVTX0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jcnlwdG9faW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jcnlwdG9faW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMTdjZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2NyeXB0b19pbnRmLmMKQEAgLTAsMCArMSwzMzcgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKworI2luY2x1ZGUgInBhbF9jcnlwdG9faW50Zi5oIgorCisjZGVmaW5lICBQQUxfS0VZX1NMT1RfQ09VTlQgIDMyCisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGNyeXB0byBmdW5jdGlvbgorICAgIEBwYXJhbSAgICAtIHR5cGUgICAgOiBmdW5jdGlvbiBjb2RlCisgICAgICAgICAgICAgICAgdmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKKyAgICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKKyoqLworaW50MzJfdCBwYWxfY3J5cHRvX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBpOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIHNpemUsICpsZW5ndGgsIHNhbHRfbGVuZ3RoLCBsYWJlbF9sZW5ndGgsIGNpcGhlcnRleHRfc2l6ZTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAqYnVmZmVyLCAqY2lwaGVydGV4dDsKKyAgICBjb25zdCB1aW50OF90ICAgICAgICAgICAqc2FsdCwgKmxhYmVsLCAqbm9uY2UsICphZGRpdGlvbmFsX2RhdGE7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgKnBsYWludGV4dDsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBzdGF0dXM7CisgICAgY29uc3Qgdm9pZCAgICAgICAgICAgICAgKmV4dHJhOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGV4dHJhX3NpemUsIGNhcGFjaXR5LCAqZ2VuX2NhcCwgbm9uY2VfbGVuZ3RoLCBhZGRpdGlvbmFsX2RhdGFfbGVuZ3RoOworICAgIHBzYV9rZXlfaGFuZGxlX3QgICAgICAgIGhhbmRsZSwgKmtleV9oYW5kbGU7CisgICAgcHNhX2tleV90eXBlX3QgICAgICAgICAga2V5X3R5cGUsICprZXlfdHlwZV9vdXQ7CisgICAgcHNhX2tleV9wb2xpY3lfdCAgICAgICAgKnBvbGljeTsKKyAgICBwc2Ffa2V5X3VzYWdlX3QgICAgICAgICB1c2FnZSwgKnVzYWdlX291dDsKKyAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgICAgICAqbGlmZXRpbWVfb3V0OworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGFsZywgKmFsZ19vdXQ7CisgICAgcHNhX2hhc2hfb3BlcmF0aW9uX3QgICAgKmhhc2hfb3BlcmF0aW9uOworICAgIHBzYV9tYWNfb3BlcmF0aW9uX3QgICAgICptYWNfb3BlcmF0aW9uOworICAgIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgICpjaXBoZXJfb3BlcmF0aW9uOworICAgIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QgICpnZW5lcmF0b3I7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFBBTF9DUllQVE9fSU5JVDoKKyAgICAgICAgICAgIHJldHVybiBwc2FfY3J5cHRvX2luaXQoKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFTkVSQVRFX1JBTkRPTToKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9nZW5lcmF0ZV9yYW5kb20oYnVmZmVyLCBzaXplKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0lNUE9SVF9LRVk6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAga2V5X3R5cGUgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3R5cGVfdCk7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IHBzYV9pbXBvcnRfa2V5KGhhbmRsZSwga2V5X3R5cGUsIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fRVhQT1JUX0tFWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBidWZmZXIgPSAodWludDhfdCAqKSh2YV9hcmcodmFsaXN0LCB1aW50OF90KikpOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBsZW5ndGggPSAoc2l6ZV90ICopdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICBzdGF0dXMgPSBwc2FfZXhwb3J0X2tleShoYW5kbGUsIGJ1ZmZlciwgc2l6ZSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19FWFBPUlRfUFVCTElDX0tFWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBidWZmZXIgPSAodWludDhfdCAqKSh2YV9hcmcodmFsaXN0LCB1aW50OF90KikpOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBsZW5ndGggPSAoc2l6ZV90ICopdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICBzdGF0dXMgPSBwc2FfZXhwb3J0X3B1YmxpY19rZXkoaGFuZGxlLCBidWZmZXIsIHNpemUsIGxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fS0VZX1BPTElDWV9JTklUOgorICAgICAgICAgICAgcG9saWN5ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9wb2xpY3lfdCopOworICAgICAgICAgICAgcHNhX2tleV9wb2xpY3lfaW5pdChwb2xpY3kpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRToKKyAgICAgICAgICAgIHBvbGljeSA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfcG9saWN5X3QqKTsKKyAgICAgICAgICAgIHVzYWdlID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV91c2FnZV90KTsKKyAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7CisgICAgICAgICAgICBwc2Ffa2V5X3BvbGljeV9zZXRfdXNhZ2UocG9saWN5LCB1c2FnZSwgYWxnKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1k6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgcG9saWN5ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9wb2xpY3lfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9zZXRfa2V5X3BvbGljeShoYW5kbGUsIHBvbGljeSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19ERVNUUk9ZX0tFWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBzdGF0dXMgPSBwc2FfZGVzdHJveV9rZXkoaGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRVRfS0VZX0lORk9STUFUSU9OOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGtleV90eXBlX291dCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfdHlwZV90Kik7CisgICAgICAgICAgICBsZW5ndGggPSAoc2l6ZV90ICopdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICBzdGF0dXMgPSBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbihoYW5kbGUsIGtleV90eXBlX291dCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRVRfS0VZX1BPTElDWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBwb2xpY3kgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3BvbGljeV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2dldF9rZXlfcG9saWN5KGhhbmRsZSwgcG9saWN5KTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfR0VUX1VTQUdFOgorICAgICAgICAgICAgcG9saWN5ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9wb2xpY3lfdCopOworICAgICAgICAgICAgdXNhZ2Vfb3V0ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV91c2FnZV90Kik7CisgICAgICAgICAgICAqdXNhZ2Vfb3V0ID0gcHNhX2tleV9wb2xpY3lfZ2V0X3VzYWdlKHBvbGljeSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfR0VUX0FMR09SSVRITToKKyAgICAgICAgICAgIHBvbGljeSA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfcG9saWN5X3QqKTsKKyAgICAgICAgICAgIGFsZ19vdXQgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QqKTsKKyAgICAgICAgICAgICphbGdfb3V0ID0gcHNhX2tleV9wb2xpY3lfZ2V0X2FsZ29yaXRobShwb2xpY3kpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRVRfS0VZX0xJRkVUSU1FOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGxpZmV0aW1lX291dCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfbGlmZXRpbWVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9nZXRfa2V5X2xpZmV0aW1lKGhhbmRsZSwgbGlmZXRpbWVfb3V0KTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0hBU0hfU0VUVVA6CisgICAgICAgICAgICBoYXNoX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9oYXNoX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9oYXNoX3NldHVwKGhhc2hfb3BlcmF0aW9uLCBhbGcpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fSEFTSF9VUERBVEU6CisgICAgICAgICAgICBoYXNoX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9oYXNoX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfaGFzaF91cGRhdGUoaGFzaF9vcGVyYXRpb24sIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19IQVNIX1ZFUklGWToKKyAgICAgICAgICAgIGhhc2hfb3BlcmF0aW9uID0gdmFfYXJnKHZhbGlzdCwgcHNhX2hhc2hfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9oYXNoX3ZlcmlmeShoYXNoX29wZXJhdGlvbiwgYnVmZmVyLCBzaXplKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0hBU0hfRklOSVNIOgorICAgICAgICAgICAgaGFzaF9vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfaGFzaF9vcGVyYXRpb25fdCopOworICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfaGFzaF9maW5pc2goaGFzaF9vcGVyYXRpb24sIGJ1ZmZlciwgc2l6ZSwgbGVuZ3RoKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0hBU0hfQUJPUlQ6CisgICAgICAgICAgICBoYXNoX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9oYXNoX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2hhc2hfYWJvcnQoaGFzaF9vcGVyYXRpb24pOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fR0VORVJBVEVfS0VZOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGtleV90eXBlID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV90eXBlX3QpOworICAgICAgICAgICAgc2l6ZSAgICAgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgZXh0cmEgICAgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB2b2lkKik7CisgICAgICAgICAgICBleHRyYV9zaXplICA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICByZXR1cm4gcHNhX2dlbmVyYXRlX2tleShoYW5kbGUsIGtleV90eXBlLCBzaXplLCBleHRyYSwgZXh0cmFfc2l6ZSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRU5FUkFUT1JfUkVBRDoKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHZhX2FyZyh2YWxpc3QsIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QqKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9nZW5lcmF0b3JfcmVhZChnZW5lcmF0b3IsIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19LRVlfREVSSVZBVElPTjoKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHZhX2FyZyh2YWxpc3QsIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QqKTsKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgc2FsdCA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgICAgICBzYWx0X2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsYWJlbCA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgICAgICBsYWJlbF9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgY2FwYWNpdHkgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9rZXlfZGVyaXZhdGlvbihnZW5lcmF0b3IsIGhhbmRsZSwgYWxnLCBzYWx0LCBzYWx0X2xlbmd0aCwgbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbF9sZW5ndGgsIGNhcGFjaXR5KTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFVF9HRU5FUkFUT1JfQ0FQQUNJVFk6CisgICAgICAgICAgICBnZW5lcmF0b3IgPSB2YV9hcmcodmFsaXN0LCBwc2FfY3J5cHRvX2dlbmVyYXRvcl90Kik7CisgICAgICAgICAgICBnZW5fY2FwICAgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfZ2V0X2dlbmVyYXRvcl9jYXBhY2l0eShnZW5lcmF0b3IsIGdlbl9jYXApOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fR0VORVJBVE9SX0lNUE9SVF9LRVk6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAga2V5X3R5cGUgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3R5cGVfdCk7CisgICAgICAgICAgICBzaXplICAgICA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBnZW5lcmF0b3IgPSB2YV9hcmcodmFsaXN0LCBwc2FfY3J5cHRvX2dlbmVyYXRvcl90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2dlbmVyYXRvcl9pbXBvcnRfa2V5KGhhbmRsZSwga2V5X3R5cGUsIHNpemUsIGdlbmVyYXRvcik7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRU5FUkFUT1JfQUJPUlQ6CisgICAgICAgICAgICBnZW5lcmF0b3IgPSB2YV9hcmcodmFsaXN0LCBwc2FfY3J5cHRvX2dlbmVyYXRvcl90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2dlbmVyYXRvcl9hYm9ydChnZW5lcmF0b3IpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQUVBRF9FTkNSWVBUOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7CisgICAgICAgICAgICBub25jZSA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgICAgICBub25jZV9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhID0gdmFfYXJnKHZhbGlzdCwgY29uc3QgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YV9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcGxhaW50ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgY2lwaGVydGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0X3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2FlYWRfZW5jcnlwdChoYW5kbGUsIGFsZywgbm9uY2UsIG5vbmNlX2xlbmd0aCwgYWRkaXRpb25hbF9kYXRhLAorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGFfbGVuZ3RoLCBwbGFpbnRleHQsIHNpemUsIGNpcGhlcnRleHQsIGNpcGhlcnRleHRfc2l6ZSwgbGVuZ3RoKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0FFQURfREVDUllQVDoKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgbm9uY2UgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB1aW50OF90ICopOworICAgICAgICAgICAgbm9uY2VfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YSA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGFfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGNpcGhlcnRleHQgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90ICopOworICAgICAgICAgICAgY2lwaGVydGV4dF9zaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIHBsYWludGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9hZWFkX2RlY3J5cHQoaGFuZGxlLCBhbGcsIG5vbmNlLCBub25jZV9sZW5ndGgsIGFkZGl0aW9uYWxfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhX2xlbmd0aCwgY2lwaGVydGV4dCwgY2lwaGVydGV4dF9zaXplLCBwbGFpbnRleHQsIHNpemUsIGxlbmd0aCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19NQUNfU0lHTl9TRVRVUDoKKyAgICAgICAgICAgIG1hY19vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfbWFjX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfbWFjX3NpZ25fc2V0dXAobWFjX29wZXJhdGlvbiwgaGFuZGxlLCBhbGcpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fTUFDX1VQREFURToKKyAgICAgICAgICAgIG1hY19vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfbWFjX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfbWFjX3VwZGF0ZShtYWNfb3BlcmF0aW9uLCBidWZmZXIsIHNpemUpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fTUFDX1NJR05fRklOSVNIOgorICAgICAgICAgICAgbWFjX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9tYWNfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgbGVuZ3RoID0gKHNpemVfdCAqKXZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9tYWNfc2lnbl9maW5pc2gobWFjX29wZXJhdGlvbiwgYnVmZmVyLCBzaXplLCBsZW5ndGgpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fTUFDX1ZFUklGWV9TRVRVUDoKKyAgICAgICAgICAgIG1hY19vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfbWFjX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfbWFjX3ZlcmlmeV9zZXR1cChtYWNfb3BlcmF0aW9uLCBoYW5kbGUsIGFsZyk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19NQUNfVkVSSUZZX0ZJTklTSDoKKyAgICAgICAgICAgIG1hY19vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfbWFjX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfbWFjX3ZlcmlmeV9maW5pc2gobWFjX29wZXJhdGlvbiwgYnVmZmVyLCBzaXplKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX01BQ19BQk9SVDoKKyAgICAgICAgICAgIG1hY19vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfbWFjX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX21hY19hYm9ydChtYWNfb3BlcmF0aW9uKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0FTWU1NVEVSSUNfRU5DUllQVDoKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgcGxhaW50ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgc2FsdCA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgICAgICBzYWx0X2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGNpcGhlcnRleHRfc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfYXN5bW1ldHJpY19lbmNyeXB0KGhhbmRsZSwgYWxnLCBwbGFpbnRleHQsIHNpemUsIHNhbHQsIHNhbHRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X3NpemUsIGxlbmd0aCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19BU1lNTVRFUklDX0RFQ1JZUFQ6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIHBsYWludGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIHNhbHQgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB1aW50OF90ICopOworICAgICAgICAgICAgc2FsdF9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgY2lwaGVydGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0X3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2FzeW1tZXRyaWNfZGVjcnlwdChoYW5kbGUsIGFsZywgcGxhaW50ZXh0LCBzaXplLCBzYWx0LCBzYWx0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgY2lwaGVydGV4dCwgY2lwaGVydGV4dF9zaXplLCBsZW5ndGgpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQ0lQSEVSX0VOQ1JZUFRfU0VUVVA6CisgICAgICAgICAgICBjaXBoZXJfb3BlcmF0aW9uID0gIHZhX2FyZyh2YWxpc3QsIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgKik7CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoY2lwaGVyX29wZXJhdGlvbiwgaGFuZGxlLCBhbGcpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQ0lQSEVSX0RFQ1JZUFRfU0VUVVA6CisgICAgICAgICAgICBjaXBoZXJfb3BlcmF0aW9uID0gIHZhX2FyZyh2YWxpc3QsIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgKik7CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAoY2lwaGVyX29wZXJhdGlvbiwgaGFuZGxlLCBhbGcpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQ0lQSEVSX0dFTkVSQVRFX0lWOgorICAgICAgICAgICAgY2lwaGVyX29wZXJhdGlvbiA9ICB2YV9hcmcodmFsaXN0LCBwc2FfY2lwaGVyX29wZXJhdGlvbl90ICopOworICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfY2lwaGVyX2dlbmVyYXRlX2l2KGNpcGhlcl9vcGVyYXRpb24sIGJ1ZmZlciwgc2l6ZSwgbGVuZ3RoKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0NJUEhFUl9TRVRfSVY6CisgICAgICAgICAgICBjaXBoZXJfb3BlcmF0aW9uID0gIHZhX2FyZyh2YWxpc3QsIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgKik7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfY2lwaGVyX3NldF9pdihjaXBoZXJfb3BlcmF0aW9uLCBidWZmZXIsIHNpemUpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQ0lQSEVSX1VQREFURToKKyAgICAgICAgICAgIGNpcGhlcl9vcGVyYXRpb24gPSAgdmFfYXJnKHZhbGlzdCwgcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAqKTsKKyAgICAgICAgICAgIHBsYWludGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGNpcGhlcnRleHQgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90ICopOworICAgICAgICAgICAgY2lwaGVydGV4dF9zaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9jaXBoZXJfdXBkYXRlKGNpcGhlcl9vcGVyYXRpb24sIHBsYWludGV4dCwgc2l6ZSwgY2lwaGVydGV4dCwgY2lwaGVydGV4dF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19DSVBIRVJfRklOSVNIOgorICAgICAgICAgICAgY2lwaGVyX29wZXJhdGlvbiA9ICB2YV9hcmcodmFsaXN0LCBwc2FfY2lwaGVyX29wZXJhdGlvbl90ICopOworICAgICAgICAgICAgY2lwaGVydGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0X3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2NpcGhlcl9maW5pc2goY2lwaGVyX29wZXJhdGlvbiwgY2lwaGVydGV4dCwgY2lwaGVydGV4dF9zaXplLCBsZW5ndGgpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQ0lQSEVSX0FCT1JUOgorICAgICAgICAgICAgY2lwaGVyX29wZXJhdGlvbiA9ICB2YV9hcmcodmFsaXN0LCBwc2FfY2lwaGVyX29wZXJhdGlvbl90ICopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9jaXBoZXJfYWJvcnQoY2lwaGVyX29wZXJhdGlvbik7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19BU1lNTVRFUklDX1NJR046CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgY2lwaGVydGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0X3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2FzeW1tZXRyaWNfc2lnbihoYW5kbGUsIGFsZywgYnVmZmVyLCBzaXplLCBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQVNZTU1URVJJQ19WRVJJRlk6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgY2lwaGVydGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0X3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9hc3ltbWV0cmljX3ZlcmlmeShoYW5kbGUsIGFsZywgYnVmZmVyLCBzaXplLCBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X3NpemUpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fS0VZX0FHUkVFTUVOVDoKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHZhX2FyZyh2YWxpc3QsIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QqKTsKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7CisgICAgICAgICAgICByZXR1cm4gcHNhX2tleV9hZ3JlZW1lbnQoZ2VuZXJhdG9yLCBoYW5kbGUsIGJ1ZmZlciwgc2l6ZSwgYWxnKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWToKKyAgICAgICAgICAgIGtleV90eXBlID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV90eXBlX3QpOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBrZXlfaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QgKil2YV9hcmcodmFsaXN0LCBpbnQqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfYWxsb2NhdGVfa2V5KGtleV90eXBlLCBzaXplLCBrZXlfaGFuZGxlKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0ZSRUU6CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUEFMX0tFWV9TTE9UX0NPVU5UOyBpKyspCisgICAgICAgICAgICAgICAgcHNhX2Rlc3Ryb3lfa2V5KGkpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY3J5cHRvX2ludGYuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY3J5cHRvX2ludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmFiZWUxCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jcnlwdG9faW50Zi5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZm5kZWYgX1BBTF9DUllQVE9fSF8KKyNkZWZpbmUgX1BBTF9DUllQVE9fSF8KKworI2luY2x1ZGUgInBhbF9jb21tb24uaCIKKworZW51bSBjcnlwdG9fZnVuY3Rpb25fY29kZSB7CisgICAgUEFMX0NSWVBUT19JTklUICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisgICAgUEFMX0NSWVBUT19HRU5FUkFURV9SQU5ET00gICAgICAgICAgPSAweDIsCisgICAgUEFMX0NSWVBUT19JTVBPUlRfS0VZICAgICAgICAgICAgICAgPSAweDMsCisgICAgUEFMX0NSWVBUT19FWFBPUlRfS0VZICAgICAgICAgICAgICAgPSAweDQsCisgICAgUEFMX0NSWVBUT19FWFBPUlRfUFVCTElDX0tFWSAgICAgICAgPSAweDUsCisgICAgUEFMX0NSWVBUT19ERVNUUk9ZX0tFWSAgICAgICAgICAgICAgPSAweDYsCisgICAgUEFMX0NSWVBUT19HRVRfS0VZX0lORk8gICAgICAgICAgICAgPSAweDcsCisgICAgUEFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQgICAgICAgICAgPSAweDgsCisgICAgUEFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSAgICAgPSAweDksCisgICAgUEFMX0NSWVBUT19LRVlfUE9MSUNZX0dFVF9VU0FHRSAgICAgPSAweEEsCisgICAgUEFMX0NSWVBUT19LRVlfUE9MSUNZX0dFVF9BTEdPUklUSE0gPSAweEIsCisgICAgUEFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSAgICAgICAgICAgPSAweEMsCisgICAgUEFMX0NSWVBUT19HRVRfS0VZX1BPTElDWSAgICAgICAgICAgPSAweEQsCisgICAgUEFMX0NSWVBUT19HRVRfS0VZX0lORk9STUFUSU9OICAgICAgPSAweEUsCisgICAgUEFMX0NSWVBUT19HRVRfS0VZX0xJRkVUSU1FICAgICAgICAgPSAweEYsCisgICAgUEFMX0NSWVBUT19IQVNIX1NFVFVQICAgICAgICAgICAgICAgPSAweDExLAorICAgIFBBTF9DUllQVE9fSEFTSF9VUERBVEUgICAgICAgICAgICAgID0gMHgxMiwKKyAgICBQQUxfQ1JZUFRPX0hBU0hfVkVSSUZZICAgICAgICAgICAgICA9IDB4MTMsCisgICAgUEFMX0NSWVBUT19IQVNIX0ZJTklTSCAgICAgICAgICAgICAgPSAweDE0LAorICAgIFBBTF9DUllQVE9fSEFTSF9BQk9SVCAgICAgICAgICAgICAgID0gMHgxNSwKKyAgICBQQUxfQ1JZUFRPX0dFTkVSQVRFX0tFWSAgICAgICAgICAgICA9IDB4MTYsCisgICAgUEFMX0NSWVBUT19HRU5FUkFUT1JfUkVBRCAgICAgICAgICAgPSAweDE3LAorICAgIFBBTF9DUllQVE9fS0VZX0RFUklWQVRJT04gICAgICAgICAgID0gMHgxOCwKKyAgICBQQUxfQ1JZUFRPX0dFVF9HRU5FUkFUT1JfQ0FQQUNJVFkgICA9IDB4MTksCisgICAgUEFMX0NSWVBUT19HRU5FUkFUT1JfSU1QT1JUX0tFWSAgICAgPSAweDFBLAorICAgIFBBTF9DUllQVE9fR0VORVJBVE9SX0FCT1JUICAgICAgICAgID0gMHgxQiwKKyAgICBQQUxfQ1JZUFRPX0FFQURfRU5DUllQVCAgICAgICAgICAgICA9IDB4MUMsCisgICAgUEFMX0NSWVBUT19BRUFEX0RFQ1JZUFQgICAgICAgICAgICAgPSAweDFELAorICAgIFBBTF9DUllQVE9fTUFDX1NJR05fU0VUVVAgICAgICAgICAgID0gMHgxRSwKKyAgICBQQUxfQ1JZUFRPX01BQ19VUERBVEUgICAgICAgICAgICAgICA9IDB4MUYsCisgICAgUEFMX0NSWVBUT19NQUNfU0lHTl9GSU5JU0ggICAgICAgICAgPSAweDIwLAorICAgIFBBTF9DUllQVE9fTUFDX1ZFUklGWV9TRVRVUCAgICAgICAgID0gMHgyMSwKKyAgICBQQUxfQ1JZUFRPX01BQ19WRVJJRllfRklOSVNIICAgICAgICA9IDB4MjIsCisgICAgUEFMX0NSWVBUT19NQUNfQUJPUlQgICAgICAgICAgICAgICAgPSAweDIzLAorICAgIFBBTF9DUllQVE9fQVNZTU1URVJJQ19FTkNSWVBUICAgICAgID0gMHgyNCwKKyAgICBQQUxfQ1JZUFRPX0FTWU1NVEVSSUNfREVDUllQVCAgICAgICA9IDB4MjUsCisgICAgUEFMX0NSWVBUT19DSVBIRVJfRU5DUllQVF9TRVRVUCAgICAgPSAweDI2LAorICAgIFBBTF9DUllQVE9fQ0lQSEVSX0RFQ1JZUFRfU0VUVVAgICAgID0gMHgyQSwKKyAgICBQQUxfQ1JZUFRPX0NJUEhFUl9HRU5FUkFURV9JViAgICAgICA9IDB4MkIsCisgICAgUEFMX0NSWVBUT19DSVBIRVJfU0VUX0lWICAgICAgICAgICAgPSAweDJDLAorICAgIFBBTF9DUllQVE9fQ0lQSEVSX1VQREFURSAgICAgICAgICAgID0gMHgyRCwKKyAgICBQQUxfQ1JZUFRPX0NJUEhFUl9GSU5JU0ggICAgICAgICAgICA9IDB4MkUsCisgICAgUEFMX0NSWVBUT19DSVBIRVJfQUJPUlQgICAgICAgICAgICAgPSAweDJGLAorICAgIFBBTF9DUllQVE9fQVNZTU1URVJJQ19TSUdOICAgICAgICAgID0gMHgzMCwKKyAgICBQQUxfQ1JZUFRPX0FTWU1NVEVSSUNfVkVSSUZZICAgICAgICA9IDB4MzEsCisgICAgUEFMX0NSWVBUT19LRVlfQUdSRUVNRU5UICAgICAgICAgICAgPSAweDMyLAorICAgIFBBTF9DUllQVE9fQUxMT0NBVEVfS0VZICAgICAgICAgICAgID0gMHgzMywKKyAgICBQQUxfQ1JZUFRPX0ZSRUUgICAgICAgICAgICAgICAgICAgICA9IDB4RkUsCit9OworCitpbnQzMl90IHBhbF9jcnlwdG9fZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KTsKKyNlbmRpZiAvKiBfUEFMX0NSWVBUT19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9kcml2ZXJfaXBjX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfZHJpdmVyX2lwY19pbnRmLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9kcml2ZXJfaXBjX2ludGYuYwpyZW5hbWUgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9kcml2ZXJfaXBjX2ludGYuYwppbmRleCA1OWVmYWUxLi4zMmFlZjljIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2RyaXZlcl9pcGNfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfZHJpdmVyX2lwY19pbnRmLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2RyaXZlcl9uc19pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2RyaXZlcl9uc19pbnRmLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9kcml2ZXJfbnNfaW50Zi5jCnJlbmFtZSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2RyaXZlcl9uc19pbnRmLmMKaW5kZXggZDZmMzEyMy4uZGQ2YjE0YyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9kcml2ZXJfbnNfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfZHJpdmVyX25zX2ludGYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlX2VtcHR5X2ludGYuYwpzaW1pbGFyaXR5IGluZGV4IDc0JQpjb3B5IGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCmNvcHkgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfZW1wdHlfaW50Zi5jCmluZGV4IDE0NjQ5ZTkuLjEzM2NmYTkgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYworKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9lbXB0eV9pbnRmLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSwxNyArMTUsMTYgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLQorI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgInBhbF9jb21tb24uaCIKLSNpbmNsdWRlICJwYWxfY3J5cHRvX2ludGYuaCIKIAogLyoqCi0gICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgY3J5cHRvIGZ1bmN0aW9uCisgICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgaW50ZXJuYWwgdHJ1c3RlZCBzdG9yYWdlIGZ1bmN0aW9uCiAgICAgQHBhcmFtICAgIC0gdHlwZSAgICA6IGZ1bmN0aW9uIGNvZGUKICAgICAgICAgICAgICAgICB2YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdAogICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cwogKiovCi1wc2Ffc3RhdHVzX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCit1aW50MzJfdCBwYWxfaXRzX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKIHsKLSAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIHJldHVybiBQQUxfU1RBVFVTX0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMDRhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9pbnRmLmMKQEAgLTAsMCArMSw2MCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworCisjaW5jbHVkZSAicGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9pbnRmLmgiCisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGludGVybmFsIHRydXN0ZWQgc3RvcmFnZSBmdW5jdGlvbgorICAgIEBwYXJhbSAgICAtIHR5cGUgICAgOiBmdW5jdGlvbiBjb2RlCisgICAgICAgICAgICAgICAgdmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKKyAgICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKKyoqLwordWludDMyX3QgcGFsX2l0c19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCit7CisgICAgcHNhX2l0c191aWRfdCAgICAgICAgICAgdWlkOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGRhdGFfbGVuZ3RoLCBvZmZzZXQ7CisgICAgY29uc3Qgdm9pZCAgICAgICAgICAgICAgKnBfd3JpdGVfZGF0YTsKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqcF9yZWFkX2RhdGE7CisgICAgcHNhX2l0c19jcmVhdGVfZmxhZ3NfdCAgaXRzX2NyZWF0ZV9mbGFnczsKKyAgICBzdHJ1Y3QgcHNhX2l0c19pbmZvX3QgICAqaXRzX3BfaW5mbzsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgY2FzZSBQQUxfSVRTX1NFVDoKKyAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX2l0c191aWRfdCk7CisgICAgICAgIGRhdGFfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QpOworICAgICAgICBwX3dyaXRlX2RhdGEgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB2b2lkKik7CisgICAgICAgIGl0c19jcmVhdGVfZmxhZ3MgPSB2YV9hcmcodmFsaXN0LCBwc2FfaXRzX2NyZWF0ZV9mbGFnc190KTsKKyAgICAgICAgcmV0dXJuIHBzYV9pdHNfc2V0KHVpZCwgZGF0YV9sZW5ndGgsIHBfd3JpdGVfZGF0YSwgaXRzX2NyZWF0ZV9mbGFncyk7CisgICAgY2FzZSBQQUxfSVRTX0dFVDoKKyAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX2l0c191aWRfdCk7CisgICAgICAgIG9mZnNldCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQzMl90KTsKKyAgICAgICAgZGF0YV9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCB1aW50MzJfdCk7CisgICAgICAgIHBfcmVhZF9kYXRhID0gdmFfYXJnKHZhbGlzdCwgdm9pZCopOworICAgICAgICByZXR1cm4gcHNhX2l0c19nZXQodWlkLCBvZmZzZXQsIGRhdGFfbGVuZ3RoLCBwX3JlYWRfZGF0YSk7CisgICAgY2FzZSBQQUxfSVRTX0dFVF9JTkZPOgorICAgICAgICB1aWQgPSB2YV9hcmcodmFsaXN0LCBwc2FfaXRzX3VpZF90KTsKKyAgICAgICAgaXRzX3BfaW5mbyA9IHZhX2FyZyh2YWxpc3QsIHN0cnVjdCBwc2FfaXRzX2luZm9fdCopOworICAgICAgICByZXR1cm4gcHNhX2l0c19nZXRfaW5mbyh1aWQsIGl0c19wX2luZm8pOworICAgIGNhc2UgUEFMX0lUU19SRU1PVkU6CisgICAgICAgIHVpZCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9pdHNfdWlkX3QpOworICAgICAgICByZXR1cm4gcHNhX2l0c19yZW1vdmUodWlkKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlX2ludGYuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlX2ludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGI2YWFjCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfaW50Zi5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZm5kZWYgX1BBTF9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU5URl9IXworI2RlZmluZSBfUEFMX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTlRGX0hfCisKKyNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisKK2VudW0gaXRzX2Z1bmN0aW9uX2NvZGUgeworICAgIFBBTF9JVFNfU0VUICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorICAgIFBBTF9JVFNfR0VUICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAorICAgIFBBTF9JVFNfR0VUX0lORk8gICAgICAgICAgICAgICAgICAgID0gMHgzLAorICAgIFBBTF9JVFNfUkVNT1ZFICAgICAgICAgICAgICAgICAgICAgID0gMHg0LAorfTsKKwordWludDMyX3QgcGFsX2l0c19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpOworI2VuZGlmIC8qIF9QQUxfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0lOVEZfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfcHJvdGVjdGVkX3N0b3JhZ2VfZW1wdHlfaW50Zi5jCnNpbWlsYXJpdHkgaW5kZXggNzQlCmNvcHkgZnJvbSBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKY29weSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX3Byb3RlY3RlZF9zdG9yYWdlX2VtcHR5X2ludGYuYwppbmRleCAxNDY0OWU5Li5lZTliMTNkIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9lbXB0eV9pbnRmLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSwxNyArMTUsMTYgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLQorI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgInBhbF9jb21tb24uaCIKLSNpbmNsdWRlICJwYWxfY3J5cHRvX2ludGYuaCIKIAogLyoqCi0gICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgY3J5cHRvIGZ1bmN0aW9uCisgICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgcHJvdGVjdGVkIHN0b3JhZ2UgZnVuY3Rpb24KICAgICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQogICAgICAgICAgICAgICAgIHZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0CiAgICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCiAqKi8KLXBzYV9zdGF0dXNfdCBwYWxfY3J5cHRvX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKK3VpbnQzMl90IHBhbF9wc19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCiB7Ci0gICAgcmV0dXJuIFBBTF9TVEFUVVNfVU5TVVBQT1JURURfRlVOQzsKKyAgICByZXR1cm4gUEFMX1NUQVRVU19FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfcHJvdGVjdGVkX3N0b3JhZ2VfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9pbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY4OWVmZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfcHJvdGVjdGVkX3N0b3JhZ2VfaW50Zi5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKworI2luY2x1ZGUgInBhbF9wcm90ZWN0ZWRfc3RvcmFnZV9pbnRmLmgiCisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIHByb3RlY3RlZCBzdG9yYWdlIGZ1bmN0aW9uCisgICAgQHBhcmFtICAgIC0gdHlwZSAgICA6IGZ1bmN0aW9uIGNvZGUKKyAgICAgICAgICAgICAgICB2YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdAorICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cworKiovCit1aW50MzJfdCBwYWxfcHNfZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KQoreworICAgIHBzYV9wc191aWRfdCAgICAgICAgICAgIHVpZDsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBkYXRhX2xlbmd0aCwgc2l6ZSwgb2Zmc2V0OworICAgIGNvbnN0IHZvaWQgICAgICAgICAgICAgICpwX3dyaXRlX2RhdGE7CisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKnBfcmVhZF9kYXRhOworICAgIHBzYV9wc19jcmVhdGVfZmxhZ3NfdCAgIHBzX2NyZWF0ZV9mbGFnczsKKyAgICBzdHJ1Y3QgcHNhX3BzX2luZm9fdCAgICAqcHNfcF9pbmZvOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgY2FzZSBQQUxfUFNfU0VUOgorICAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX3BzX3VpZF90KTsKKyAgICAgICAgIGRhdGFfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QpOworICAgICAgICAgcF93cml0ZV9kYXRhID0gdmFfYXJnKHZhbGlzdCwgY29uc3Qgdm9pZCopOworICAgICAgICAgcHNfY3JlYXRlX2ZsYWdzID0gdmFfYXJnKHZhbGlzdCwgcHNhX3BzX2NyZWF0ZV9mbGFnc190KTsKKyAgICAgICAgIHJldHVybiBwc2FfcHNfc2V0KHVpZCwgZGF0YV9sZW5ndGgsIHBfd3JpdGVfZGF0YSwgcHNfY3JlYXRlX2ZsYWdzKTsKKyAgICAgY2FzZSBQQUxfUFNfR0VUOgorICAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX3BzX3VpZF90KTsKKyAgICAgICAgIG9mZnNldCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQzMl90KTsKKyAgICAgICAgIGRhdGFfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QpOworICAgICAgICAgcF9yZWFkX2RhdGEgPSB2YV9hcmcodmFsaXN0LCB2b2lkKik7CisgICAgICAgICByZXR1cm4gcHNhX3BzX2dldCh1aWQsIG9mZnNldCwgZGF0YV9sZW5ndGgsIHBfcmVhZF9kYXRhKTsKKyAgICAgY2FzZSBQQUxfUFNfR0VUX0lORk86CisgICAgICAgICB1aWQgPSB2YV9hcmcodmFsaXN0LCBwc2FfcHNfdWlkX3QpOworICAgICAgICAgcHNfcF9pbmZvID0gdmFfYXJnKHZhbGlzdCwgc3RydWN0IHBzYV9wc19pbmZvX3QqKTsKKyAgICAgICAgIHJldHVybiBwc2FfcHNfZ2V0X2luZm8odWlkLCBwc19wX2luZm8pOworICAgICBjYXNlIFBBTF9QU19SRU1PVkU6CisgICAgICAgICB1aWQgPSB2YV9hcmcodmFsaXN0LCBwc2FfcHNfdWlkX3QpOworICAgICAgICAgcmV0dXJuIHBzYV9wc19yZW1vdmUodWlkKTsKKyAgICAgY2FzZSBQQUxfUFNfQ1JFQVRFOgorICAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX3BzX3VpZF90KTsKKyAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCB1aW50MzJfdCk7CisgICAgICAgICBwc19jcmVhdGVfZmxhZ3MgPSB2YV9hcmcodmFsaXN0LCBwc2FfcHNfY3JlYXRlX2ZsYWdzX3QpOworICAgICAgICAgcmV0dXJuIHBzYV9wc19jcmVhdGUodWlkLCBzaXplLCBwc19jcmVhdGVfZmxhZ3MpOworICAgICBjYXNlIFBBTF9QU19TRVRfRVhURU5ERUQ6CisgICAgICAgICB1aWQgPSB2YV9hcmcodmFsaXN0LCBwc2FfcHNfdWlkX3QpOworICAgICAgICAgb2Zmc2V0ID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QpOworICAgICAgICAgZGF0YV9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCB1aW50MzJfdCk7CisgICAgICAgICBwX3dyaXRlX2RhdGEgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB2b2lkKik7CisgICAgICAgICByZXR1cm4gcHNhX3BzX3NldF9leHRlbmRlZCh1aWQsIG9mZnNldCwgZGF0YV9sZW5ndGgsIHBfd3JpdGVfZGF0YSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFBBTF9TVEFUVVNfVU5TVVBQT1JURURfRlVOQzsKKyAgICB9CisKKyAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9pbnRmLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX3Byb3RlY3RlZF9zdG9yYWdlX2ludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjdlNWZjCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9pbnRmLmgKQEAgLTAsMCArMSwzMyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2lmbmRlZiBfUEFMX1BST1RFQ1RFRF9TVE9SQUdFX0lOVEZfSF8KKyNkZWZpbmUgX1BBTF9QUk9URUNURURfU1RPUkFHRV9JTlRGX0hfCisKKyNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisKK2VudW0gcHNfZnVuY3Rpb25fY29kZSB7CisgICAgUEFMX1BTX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisgICAgUEFMX1BTX0dFVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisgICAgUEFMX1BTX0dFVF9JTkZPICAgICAgICAgICAgICAgICAgICAgPSAweDMsCisgICAgUEFMX1BTX1JFTU9WRSAgICAgICAgICAgICAgICAgICAgICAgPSAweDQsCisgICAgUEFMX1BTX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgPSAweDUsCisgICAgUEFMX1BTX1NFVF9FWFRFTkRFRCAgICAgICAgICAgICAgICAgPSAweDYsCit9OworCit1aW50MzJfdCBwYWxfcHNfZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KTsKKyNlbmRpZiAvKiBfUEFMX1BST1RFQ1RFRF9TVE9SQUdFX0lOVEZfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3Mvc3BlL3BhbF9kcml2ZXJfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9zcGUvcGFsX2RyaXZlcl9pbnRmLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9zcGUvcGFsX2RyaXZlcl9pbnRmLmMKcmVuYW1lIHRvIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvc3BlL3BhbF9kcml2ZXJfaW50Zi5jCmluZGV4IGY4MGU4MmQuLmNjOGI1MzcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3Mvc3BlL3BhbF9kcml2ZXJfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvc3BlL3BhbF9kcml2ZXJfaW50Zi5jCkBAIC0xLDUgKzEsNSBAQAogIC8qKiBAZmlsZQotICAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAgKgogICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9zcGUvcGFsX2RyaXZlcl9pbnRmLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L3NwZS9wYWxfZHJpdmVyX2ludGYuaApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL3NwZS9wYWxfZHJpdmVyX2ludGYuaApyZW5hbWUgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9zcGUvcGFsX2RyaXZlcl9pbnRmLmgKaW5kZXggYjZlZDJhYi4uZGE4NWE2MyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9zcGUvcGFsX2RyaXZlcl9pbnRmLmgKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9zcGUvcGFsX2RyaXZlcl9pbnRmLmgKQEAgLTEsNSArMSw1IEBACiAgLyoqIEBmaWxlCi0gICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICAqCiAgICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL3RhcmdldC5jZmcgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L3RhcmdldC5jZmcKc2ltaWxhcml0eSBpbmRleCA3NCUKcmVuYW1lIGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy90YXJnZXQuY2ZnCnJlbmFtZSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L3RhcmdldC5jZmcKaW5kZXggMWExM2M5Ni4uNTk4ZDM0NyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy90YXJnZXQuY2ZnCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvdGFyZ2V0LmNmZwpAQCAtMSw1ICsxLDUgQEAKIC8vLyoqIEBmaWxlCi0vLyAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogLy8gKgogLy8gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTI5LDI2ICsyOSwyOSBAQAogd2F0Y2hkb2cuMC5pbnRyX2lkID0gMHhGRjsKIHdhdGNoZG9nLjAucGVybWlzc2lvbiA9IFRZUEVfUkVBRF9XUklURTsKIHdhdGNoZG9nLjAubnVtX29mX3RpY2tfcGVyX21pY3JvX3NlYyA9IDB4MzsgICAgICAgICAvLyhzeXNfZmVxLzEwMDAwMDApCi13YXRjaGRvZy4wLnRpbWVvdXRfaW5fbWljcm9fc2VjX2xvdyA9IDB4RjQyNDA7ICAgICAgLy8xLjAgc2VjIDogMSAqIDEwMDAgKiAxMDAwCi13YXRjaGRvZy4wLnRpbWVvdXRfaW5fbWljcm9fc2VjX21lZGl1bSA9IDB4MUU4NDgwOyAgLy8yLjAgc2VjIDogMiAqIDEwMDAgKiAxMDAwCi13YXRjaGRvZy4wLnRpbWVvdXRfaW5fbWljcm9fc2VjX2hpZ2ggPSAweDRDNEI0MDsgICAgLy81LjAgc2VjIDogNSAqIDEwMDAgKiAxMDAwCit3YXRjaGRvZy4wLnRpbWVvdXRfaW5fbWljcm9fc2VjX2xvdyA9IDB4RjQyNDA7ICAgICAgLy8xLjAgIHNlYyA6ICAxICogMTAwMCAqIDEwMDAKK3dhdGNoZG9nLjAudGltZW91dF9pbl9taWNyb19zZWNfbWVkaXVtID0gMHgxRTg0ODA7ICAvLzIuMCAgc2VjIDogIDIgKiAxMDAwICogMTAwMAord2F0Y2hkb2cuMC50aW1lb3V0X2luX21pY3JvX3NlY19oaWdoID0gMHg0QzRCNDA7ICAgIC8vNS4wICBzZWMgOiAgNSAqIDEwMDAgKiAxMDAwCit3YXRjaGRvZy4wLnRpbWVvdXRfaW5fbWljcm9fc2VjX2NyeXB0byA9IDB4MTMxMkQwMDsgLy8xOC4wIHNlYyA6IDE4ICogMTAwMCAqIDEwMDAKIAogLy8gUmFuZ2Ugb2YgMUtCIE5vbi12b2xhdGlsZSBtZW1vcnkgdG8gcHJlc2VydmUgZGF0YSBvdmVyIHJlc2V0LiBFeCwgTlZSQU0gYW5kIEZMQVNICiBudm1lbS5udW0gPTE7CiBudm1lbS4wLnN0YXJ0ID0gMHgyMDAyRjAwMDsKLW52bWVtLjAuZW5kID0gMHgyMDAyRkZGRjsKK252bWVtLjAuZW5kID0gMHgyMDAyRjNGRjsKIG52bWVtLjAucGVybWlzc2lvbiA9IFRZUEVfUkVBRF9XUklURTsKIAotLy9NaXNjZWxsYW5lb3VzCisvLyBNaXNjZWxsYW5lb3VzIC0gVGVzdCBzY2F0dGVyIGluZm8KIGR1dC5udW0gPSAxOwotZHV0LjAuaW1wbGVtZW50ZWRfcHNhX2Zpcm13YXJlX2lzb2xhdGlvbl9sZXZlbCA9IExFVkVMMTsKKworLy8gU3RhcnQgYWRkcmVzcyBvZiAxMEtCIE5TIG1lbW9yeSBmb3IgdGVzdCBFTEYKK2R1dC4wLm5zX3Rlc3RfYWRkciA9IDB4MjAwN0YwMDA7CiAKIC8vIFN0YXJ0IGFkZHJlc3Mgb2YgY29tYmluZV90ZXN0X2JpbmFyeSBpbiBtZW1vcnkuIE1lbW9yeSBjYW4gYmUgbWFpbiBtZW1vcnkgb3Igc2Vjb25kYXJ5IG1lbW9yeS4KLS8vIFNpemUgb2YgY29tYmluZV90ZXN0X2JpbmFyeSA9IFN1bW1hdGlvbiBvZiBzaXplIG9mIGVhY2ggdGVzdCBFTEYgZmlsZQorLy8gU2l6ZSBvZiBjb21iaW5lX3Rlc3RfYmluYXJ5ID0gU3VtbWF0aW9uIG9mIHNpemUgb2YgZWFjaCB0ZXN0IEVMRiBmaWxlLgogZHV0LjAubnNfc3RhcnRfYWRkcl9vZl9jb21iaW5lX3Rlc3RfYmluYXJ5ID0gMHgyMDAzRjAwMDsKIAogLy8gSXMgY29tYmluZV90ZXN0X2JpbmFyeSBhdmFpbGFibGUgaW4gUkFNPwogZHV0LjAuY29tYmluZV90ZXN0X2JpbmFyeV9pbl9yYW0gPSBBVkFJTEFCTEU7CiAKLS8vIFN0YXJ0IGFkZHJlc3Mgb2YgOUtCIE5TIG1lbW9yeSBmb3IgdGVzdCBFTEYKLWR1dC4wLm5zX3Rlc3RfYWRkciA9IDB4MjAwN0YwMDA7CisvLyBMZXZlbCBvZiBJc29sYXRpb24KK2R1dC4wLmltcGxlbWVudGVkX3BzYV9maXJtd2FyZV9pc29sYXRpb25fbGV2ZWwgPSBMRVZFTDE7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL01ha2VmaWxlIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggNjElCmNvcHkgZnJvbSBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL01ha2VmaWxlCmNvcHkgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL01ha2VmaWxlCmluZGV4IGRhMmYwODkuLmRhMmY0MWQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvTWFrZWZpbGUKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotIyAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICMgKgogIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTYsMjAgKzE2LDQ4IEBACiAKIGluY2x1ZGUgJChTT1VSQ0UpL3Rvb2xzL21ha2VmaWxlcy90b29sY2hhaW4ubWsKIAotIyBMb2NhbCBQQUwgTWFrZSB2YXJpYWJsZQorIyBNYWtlIHZhcmlhYmxlcyB0byBzZWxlY3QgY29ycmVjdCBpbnN0YW5jZXMgb2YgUEFMIGZpbGVzCisKICMjIFBTQV9JUENfSU1QTEVNRU5URUQgbXVzdCBiZSB0cnVlIGZvciBJUEMgU1VJVEUKLVBTQV9JUENfSU1QTEVNRU5URUQ6PTEKK1BTQV9JUENfSU1QTEVNRU5URUQ6PTAKIAogIyMgUFNBX0NSWVBUT19JTVBMRU1FTlRFRCBtdXN0IGJlIHRydWUgZm9yIENSWVBUTyBTVUlURQogUFNBX0NSWVBUT19JTVBMRU1FTlRFRDo9MQogCi0jIFBBTCBDIHNvdXJjZSBmaWxlcyBwYXJ0IG9mIE5TUEUgbGlicmFyeQotU1JDX0NfTlNQRT0gcGFsX2RyaXZlcl9uc19pbnRmLmMKKyMjIFBTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCBtdXN0IGJlIHRydWUgZm9yIFBST1RFQ1RFRF9TVE9SQUdFIFNVSVRFCitQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQ6PTEKKworIyMgUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCBtdXN0IGJlIHRydWUgZm9yIElOVEVSTkFMX1RSVVNURURfU1RPUkFHRSBTVUlURQorUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRDo9MQorCisjIyBQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRCBtdXN0IGJlIHRydWUgZm9yIElOSVRJQUxfQVRURVNUQVRJT04gU1VJVEUKK1BTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEOj0wCisKKyMgTWFrZSB2YXJpYWJsZXMgaG9sZGluZyBOU1BFL1NQRSBzb3VyY2UgZmlsZXMKKworIyMgUEFMIEMgc291cmNlIGZpbGVzIHBhcnQgb2YgTlNQRSBsaWJyYXJ5CitTUkNfQ19OU1BFPQorCisjIyBQQUwgQVNNIHNvdXJjZSBmaWxlcyBwYXJ0IG9mIE5TUEUgbGlicmFyeQorU1JDX0FTTV9OU1BFPQorCisjIyBQQUwgQyBzb3VyY2UgZmlsZXMgcGFydCBvZiBTUEUgbGlicmFyeSAtIGRyaXZlciBwYXJ0aXRpb24KK1NSQ19DX0RSSVZFUl9TUD0KKworIyMgUEFMIEFTTSBzb3VyY2UgZmlsZXMgcGFydCBvZiBTUEUgbGlicmFyeSAtIGRyaXZlciBwYXJ0aXRpb24KK1NSQ19BU01fRFJJVkVSX1NQPQogCiBpZmVxICgke1BTQV9JUENfSU1QTEVNRU5URUR9LDEpCisjIFdoZW4gUFNBX0lQQ19JTVBMRU1FTlRFRD0xLCBkcml2ZXIgZnVuY3Rpb25hbGl0aWVzIGFyZSBpbXBsZW1lbnRlZCBhcyBSb1Qtc2VydmljZXMKKyMgYW5kIHNlY3VyZSBhbmQgbm9uLXNlY3VyZSBjbGllbnRzIHdpbGwgY2FsbCB0byB0aGVzZSBSb1Qtc2VydmljZXMgdG8gZ2V0IGFwcHJvcHJpYXRlIGRyaXZlciBzZXJ2aWNlcy4KIFNSQ19DX05TUEUgKz0gcGFsX2NsaWVudF9hcGlfaW50Zi5jCiBTUkNfQ19OU1BFICs9IHBhbF9kcml2ZXJfaXBjX2ludGYuYworCisjIERyaXZlciBmaWxlcyB3aWxsIGJlIGNvbXBpbGVkIGFzIHBhcnQgb2YgZHJpdmVyIHBhcnRpdGlvbgorU1JDX0NfRFJJVkVSX1NQICs9IHBhbF9kcml2ZXJfaW50Zi5jIHBhbF9udm1lbS5jIHBhbF91YXJ0LmMgcGFsX3dkX2Ntc2RrLmMKIGVsc2UKKworIyBXaGVuIFBTQV9JUENfSU1QTEVNRU5URUQ9MCwgZHJpdmVyIGZpbGVzIHdpbGwgYmUgY29tcGlsZWQgYXMgcGFydCBvZiBOU1BFCiBTUkNfQ19OU1BFICs9IHBhbF9jbGllbnRfYXBpX2VtcHR5X2ludGYuYwogU1JDX0NfTlNQRSArPSBwYWxfZHJpdmVyX25zX2ludGYuYyBwYWxfbnZtZW0uYyBwYWxfdWFydC5jIHBhbF93ZF9jbXNkay5jCiBlbmRpZgpAQCAtNDAsMjcgKzY4LDM1IEBACiBTUkNfQ19OU1BFICs9IHBhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCiBlbmRpZgogCi0jIFBBTCBBU00gc291cmNlIGZpbGVzIHBhcnQgb2YgTlNQRSBsaWJyYXJ5Ci1TUkNfQVNNX05TUEU9CitpZmVxICgke1BTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRH0sMSkKK1NSQ19DX05TUEUgKz0gcGFsX3Byb3RlY3RlZF9zdG9yYWdlX2ludGYuYworZWxzZQorU1JDX0NfTlNQRSArPSBwYWxfcHJvdGVjdGVkX3N0b3JhZ2VfZW1wdHlfaW50Zi5jCitlbmRpZgogCi0jIFBBTCBDIHNvdXJjZSBmaWxlcyBwYXJ0IG9mIFNQRSBsaWJyYXJ5IC0gZHJpdmVyIHBhcnRpdGlvbgotU1JDX0NfRFJJVkVSX1NQPSBwYWxfZHJpdmVyX2ludGYuYyBwYWxfbnZtZW0uYyBwYWxfdWFydC5jIHBhbF93ZF9jbXNkay5jCitpZmVxICgke1BTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URUR9LDEpCitTUkNfQ19OU1BFICs9IHBhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfaW50Zi5jCitlbHNlCitTUkNfQ19OU1BFICs9IHBhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfZW1wdHlfaW50Zi5jCitlbmRpZgogCi0jIFBBTCBBU00gc291cmNlIGZpbGVzIHBhcnQgb2YgU1BFIGxpYnJhcnkgLSBkcml2ZXIgcGFydGl0aW9uCi1TUkNfQVNNX0RSSVZFUl9TUD0KLQoraWZlcSAoJHtQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRH0sMSkKK1NSQ19DX05TUEUgKz0gcGFsX2F0dGVzdGF0aW9uX2ludGYuYworZWxzZQorU1JDX0NfTlNQRSArPSBwYWxfYXR0ZXN0YXRpb25fZW1wdHlfaW50Zi5jCitlbmRpZgogCiBJTkNMVURFPSAtSSQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS9uc3BlIFwKICAgICAgICAgIC1JJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL3NwZSBcCiAgICAgICAgICAtSSQoQlVJTEQpL3BsYXRmb3JtLyQoVEFSR0VUKS8gXAotICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vZHJpdmVycy91YXJ0L2Ntc2RrIFwKKyAgICAgICAgIC1JJChTT1VSQ0UpL3BsYXRmb3JtL2RyaXZlcnMvdWFydC9tdXNjYV9hIFwKICAgICAgICAgIC1JJChTT1VSQ0UpL3BsYXRmb3JtL2RyaXZlcnMvbnZtZW0vIFwKICAgICAgICAgIC1JJChTT1VSQ0UpL3BsYXRmb3JtL2RyaXZlcnMvd2F0Y2hkb2cvY21zZGsKIAogVlBBVEg9JChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpLzogXAogICAgICAgJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL3NwZTogXAogICAgICAgJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL25zcGU6IFwKLSAgICAgICQoU09VUkNFKS9wbGF0Zm9ybS9kcml2ZXJzL3VhcnQvY21zZGs6IFwKKyAgICAgICQoU09VUkNFKS9wbGF0Zm9ybS9kcml2ZXJzL3VhcnQvbXVzY2FfYTogXAogICAgICAgJChTT1VSQ0UpL3BsYXRmb3JtL2RyaXZlcnMvbnZtZW06IFwKICAgICAgICQoU09VUkNFKS9wbGF0Zm9ybS9kcml2ZXJzL3dhdGNoZG9nL2Ntc2RrOiBcCiAKQEAgLTEwMSw3ICsxMzcsNyBAQAogCiAjIEdlbmVyYXRlZCAlX2RyaXZlcl9zcC5vKHMpIGFyZSB1c2VkIGluIHNwYnVpbGQubWsgdG8gY3JlYXRlIGZpbmFsIGRyaXZlcl9wYXJ0aXRpb24uYQogJChCVUlMRCkvcGxhdGZvcm0vc3BlLyVfZHJpdmVyX3NwLm8gOiAlLmMKLQkkKENDKSAkKElOQ0xVREUpIC1vICRAIC1jICQ8CisJJChDQykgJChJTkNMVURFKSAtRFNQRV9CVUlMRCAtbyAkQCAtYyAkPAogCiAkKEJVSUxEKS9wbGF0Zm9ybS9zcGUvJV9kcml2ZXJfc3AubyA6ICUucwogCSQoQVMpICQoSU5DTFVERSkgLW8gJEAgJDwKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL21hbmlmZXN0cy9jb21tb24vZHJpdmVyX3BhcnRpdGlvbl9wc2EuanNvbgpzaW1pbGFyaXR5IGluZGV4IDc3JQpjb3B5IGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9tYW5pZmVzdHMvY29tbW9uL2RyaXZlcl9wYXJ0aXRpb25fcHNhLmpzb24KY29weSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uCmluZGV4IDEyZGQxOGIuLjVkNTc1NzEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9tYW5pZmVzdHMvY29tbW9uL2RyaXZlcl9wYXJ0aXRpb25fcHNhLmpzb24KQEAgLTEsMTMgKzEsMTMgQEAKIHsKICAgInBzYV9mcmFtZXdvcmtfdmVyc2lvbiI6IDEuMCwKICAgIm5hbWUiOiAiRFJJVkVSX1BBUlRJVElPTiIsCi0gICJ0eXBlIjogIkFQUExJQ0FUSU9OLVJPVCIsCisgICJ0eXBlIjogIlBTQS1ST1QiLAogICAicHJpb3JpdHkiOiAiTk9STUFMIiwKICAgImlkIjogIjB4MDAwMDAwMDMiLAogICAiZGVzY3JpcHRpb24iOiAiSW1wbGVtZW50cyBkZXZpY2Ugc2VydmljZXMgc3VjaCBwcmludCwgZmxhc2ggcmVhZC93cml0ZSwuIGV0Yy4iLAogICAiZW50cnlfcG9pbnQiOiAiZHJpdmVyX21haW4iLAogICAic3RhY2tfc2l6ZSI6ICIweDQwMCIsCi0gICJoZWFwX3NpemUiOiAiMHg0MDAiLAorICAiaGVhcF9zaXplIjogIjB4MTAwIiwKICAgInNlcnZpY2VzIjogW3sKICAgICAgICJuYW1lIjogIkRSSVZFUl9VQVJUX1NJRCIsCiAgICAgICAic2lkIjogIjB4MDAwMEZDMDEiLApAQCAtMzMsOSArMzMsOSBAQAogICAgICAgIm1pbm9yX3BvbGljeSI6ICJSRUxBWEVEIgogICAgIH0sCiAgICAgewotICAgICAgIm5hbWUiOiAiRFJJVkVSX1RBUkdFVF9JTklUX1NJRCIsCisgICAgICAibmFtZSI6ICJURVNUX0lOVFJfU0lEIiwKICAgICAgICJzaWQiOiAiMHgwMDAwRkMwNCIsCi0gICAgICAic2lnbmFsIjogIkRSSVZFUl9UQVJHRVRfSU5JVF9TSUciLAorICAgICAgInNpZ25hbCI6ICJURVNUX0lOVFJfU0lHIiwKICAgICAgICJub25fc2VjdXJlX2NsaWVudHMiOiB0cnVlLAogICAgICAgIm1pbm9yX3ZlcnNpb24iOiAxLAogICAgICAgIm1pbm9yX3BvbGljeSI6ICJSRUxBWEVEIgpAQCAtNDUsMjAgKzQ1LDMyIEBACiAgICAgewogICAgICAgIm5hbWUiOiAiVUFSVF9SRUdJT04iLAogICAgICAgImJhc2UiOiAiMHg0MDAwNDAwMCIsCi0gICAgICAic2l6ZSI6ICIweEZGRiIsCisgICAgICAic2l6ZSI6ICIweDEwMDAiLAogICAgICAgInBlcm1pc3Npb24iOiAiUkVBRC1XUklURSIKICAgICB9LAogICAgIHsKICAgICAgICJuYW1lIjogIldBVENIRE9HX1JFR0lPTiIsCiAgICAgICAiYmFzZSI6ICIweDQwMDA4MDAwIiwKLSAgICAgICJzaXplIjogIjB4RkZGIiwKKyAgICAgICJzaXplIjogIjB4MTAwMCIsCiAgICAgICAicGVybWlzc2lvbiI6ICJSRUFELVdSSVRFIgogICAgIH0sCiAgICAgewogICAgICAgIm5hbWUiOiAiTlZNRU1fUkVHSU9OIiwKICAgICAgICJiYXNlIjogIjB4MjAwMkYwMDAiLAotICAgICAgInNpemUiOiAiMHhGRkYiLAorICAgICAgInNpemUiOiAiMHg0MDAiLAogICAgICAgInBlcm1pc3Npb24iOiAiUkVBRC1XUklURSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIkRSSVZFUl9QQVJUSVRJT05fTU1JTyIsCisgICAgICAiYmFzZSI6ICIweDIwMEFGMDQwIiwKKyAgICAgICJzaXplIjogIjB4MjAiLAorICAgICAgInBlcm1pc3Npb24iOiAiUkVBRC1XUklURSIKKyAgICB9CisgIF0sCisgICJpcnFzIjogWworICAgIHsKKyAgICAgICAic2lnbmFsIjogIkRSSVZFUl9VQVJUX0lOVFJfU0lHIiwKKyAgICAgICAibGluZV9udW0iOiAxNwogICAgIH0KICAgXSwKICAgImxpbmtlcl9wYXR0ZXJuIjogewpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24gYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbWFuaWZlc3RzL2lwYy9jbGllbnRfcGFydGl0aW9uX3BzYS5qc29uCnNpbWlsYXJpdHkgaW5kZXggODAlCmNvcHkgZnJvbSBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL21hbmlmZXN0cy9pcGMvY2xpZW50X3BhcnRpdGlvbl9wc2EuanNvbgpjb3B5IHRvIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24KaW5kZXggYTJhMmNlNS4uMDgxZGM5NSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24KKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL21hbmlmZXN0cy9pcGMvY2xpZW50X3BhcnRpdGlvbl9wc2EuanNvbgpAQCAtNyw3ICs3LDcgQEAKICAgImRlc2NyaXB0aW9uIjogIkNsaWVudCBwYXJ0aXRpb24gZXhlY3V0aW5nIGNsaWVudCB0ZXN0IGZ1bmMgZnJvbSBTUEUiLAogICAiZW50cnlfcG9pbnQiOiAiY2xpZW50X21haW4iLAogICAic3RhY2tfc2l6ZSI6ICIweDQwMCIsCi0gICJoZWFwX3NpemUiOiAiMHg0MDAiLAorICAiaGVhcF9zaXplIjogIjB4MTAwIiwKICAgInNlcnZpY2VzIjogW3sKICAgICAgICJuYW1lIjogIkNMSUVOVF9URVNUX0RJU1BBVENIRVJfU0lEIiwKICAgICAgICJzaWQiOiAiMHgwMDAwRkEwMSIsCkBAIC0yMCw2ICsyMCw3IEBACiAgICJkZXBlbmRlbmNpZXMiOiBbCiAgICAgIkRSSVZFUl9VQVJUX1NJRCIsCiAgICAgIkRSSVZFUl9OVk1FTV9TSUQiLAorICAgICJURVNUX0lOVFJfU0lEIiwKICAgICAiU0VSVkVSX1RFU1RfRElTUEFUQ0hFUl9TSUQiLAogICAgICJTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCIsCiAgICAgIlNFUlZFUl9TVFJJQ1RfTUlOT1JfVkVSU0lPTl9TSUQiLApAQCAtMjcsNiArMjgsMTQgQEAKICAgICAiU0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lEIiwKICAgICAiU0VSVkVSX0NPTk5FQ1RJT05fRFJPUF9TSUQiCiAgIF0sCisgICJtbWlvX3JlZ2lvbnMiIDogWworICAgIHsKKyAgICAgICJuYW1lIjogIkNMSUVOVF9QQVJUSVRJT05fTU1JTyIsCisgICAgICAiYmFzZSI6ICIweDIwMEFGMDAwIiwKKyAgICAgICJzaXplIjogIjB4MjAiLAorICAgICAgInBlcm1pc3Npb24iOiAiUkVBRC1XUklURSIKKyAgICB9CisgICBdLAogICAibGlua2VyX3BhdHRlcm4iOiB7CiAgICAgIm9iamVjdF9saXN0IjogWwogICAgICJjbGllbnRfcGFydGl0aW9uLmEiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL21hbmlmZXN0cy9pcGMvc2VydmVyX3BhcnRpdGlvbl9wc2EuanNvbiBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9tYW5pZmVzdHMvaXBjL3NlcnZlcl9wYXJ0aXRpb25fcHNhLmpzb24Kc2ltaWxhcml0eSBpbmRleCA5OCUKY29weSBmcm9tIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbWFuaWZlc3RzL2lwYy9zZXJ2ZXJfcGFydGl0aW9uX3BzYS5qc29uCmNvcHkgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL21hbmlmZXN0cy9pcGMvc2VydmVyX3BhcnRpdGlvbl9wc2EuanNvbgppbmRleCAxNjdmYWEwLi4zNTQxMzg3IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL21hbmlmZXN0cy9pcGMvc2VydmVyX3BhcnRpdGlvbl9wc2EuanNvbgorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbWFuaWZlc3RzL2lwYy9zZXJ2ZXJfcGFydGl0aW9uX3BzYS5qc29uCkBAIC03LDcgKzcsNyBAQAogICAiZGVzY3JpcHRpb24iOiAiU2VydmVyIHBhcnRpdGlvbiBleGVjdXRpbmcgc2VydmVyIHRlc3QgZnVuYyIsCiAgICJlbnRyeV9wb2ludCI6ICJzZXJ2ZXJfbWFpbiIsCiAgICJzdGFja19zaXplIjogIjB4NDAwIiwKLSAgImhlYXBfc2l6ZSI6ICIweDQwMCIsCisgICJoZWFwX3NpemUiOiAiMHgxMDAiLAogICAic2VydmljZXMiOiBbewogICAgICAgIm5hbWUiOiAiU0VSVkVSX1RFU1RfRElTUEFUQ0hFUl9TSUQiLAogICAgICAgInNpZCI6ICIweDAwMDBGQjAxIiwKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9hdHRlc3RhdGlvbl9lbXB0eV9pbnRmLmMKc2ltaWxhcml0eSBpbmRleCA3NCUKY29weSBmcm9tIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYwpjb3B5IHRvIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9hdHRlc3RhdGlvbl9lbXB0eV9pbnRmLmMKaW5kZXggMTQ2NDllOS4uZmFmM2Y0OSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9hdHRlc3RhdGlvbl9lbXB0eV9pbnRmLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSwxNyArMTUsMTYgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLQorI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgInBhbF9jb21tb24uaCIKLSNpbmNsdWRlICJwYWxfY3J5cHRvX2ludGYuaCIKIAogLyoqCi0gICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgY3J5cHRvIGZ1bmN0aW9uCisgICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgYXR0ZXN0YXRpb24gZnVuY3Rpb24KICAgICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQogICAgICAgICAgICAgICAgIHZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0CiAgICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCiAqKi8KLXBzYV9zdGF0dXNfdCBwYWxfY3J5cHRvX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKK2ludDMyX3QgcGFsX2F0dGVzdGF0aW9uX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKIHsKLSAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIHJldHVybiBQQUxfU1RBVFVTX0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2F0dGVzdGF0aW9uX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4ZWEwNwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmMKQEAgLTAsMCArMSw0MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworCisjaW5jbHVkZSAicGFsX2F0dGVzdGF0aW9uX2ludGYuaCIKKworLyoqCisgICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgYXR0ZXN0YXRpb24gZnVuY3Rpb24KKyAgICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQorICAgICAgICAgICAgICAgIHZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0CisgICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCisqKi8KK2ludDMyX3QgcGFsX2F0dGVzdGF0aW9uX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKK3sKKyAgICB1aW50OF90ICAgICAqY2hhbGxlbmdlLCAqdG9rZW47CisgICAgc2l6ZV90ICAgICAgY2hhbGxlbmdlX3NpemUsICp0b2tlbl9zaXplOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBQQUxfSU5JVElBTF9BVFRFU1RfR0VUX1RPS0VOOgorICAgICAgICAgICAgY2hhbGxlbmdlID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgY2hhbGxlbmdlX3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgdG9rZW4gPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICB0b2tlbl9zaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2luaXRpYWxfYXR0ZXN0X2dldF90b2tlbihjaGFsbGVuZ2UsIGNoYWxsZW5nZV9zaXplLCB0b2tlbiwgdG9rZW5fc2l6ZSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmgKc2ltaWxhcml0eSBpbmRleCA2MiUKY29weSBmcm9tIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYwpjb3B5IHRvIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmgKaW5kZXggMTQ2NDllOS4uZWViYjUxNCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSwxNyArMTUsMTQgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKKyNpZm5kZWYgX1BBTF9JTklUSUFMX0FUVEVTVEFUSU9OX0hfCisjZGVmaW5lIF9QQUxfSU5JVElBTF9BVFRFU1RBVElPTl9IXwogCiAjaW5jbHVkZSAicGFsX2NvbW1vbi5oIgotI2luY2x1ZGUgInBhbF9jcnlwdG9faW50Zi5oIgogCi0vKioKLSAgICBAYnJpZWYgICAgLSBUaGlzIEFQSSB3aWxsIGNhbGwgdGhlIHJlcXVlc3RlZCBjcnlwdG8gZnVuY3Rpb24KLSAgICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQotICAgICAgICAgICAgICAgIHZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0Ci0gICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCi0qKi8KLXBzYV9zdGF0dXNfdCBwYWxfY3J5cHRvX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKLXsKLSAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOwotfQorZW51bSBhdHRlc3RhdGlvbl9mdW5jdGlvbl9jb2RlIHsKKyAgICBQQUxfSU5JVElBTF9BVFRFU1RfR0VUX1RPS0VOICAgICAgICA9IDB4MSwKK307CisKK2ludDMyX3QgcGFsX2F0dGVzdGF0aW9uX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCk7CisjZW5kaWYgLyogX1BBTF9JTklUSUFMX0FUVEVTVEFUSU9OX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NsaWVudF9hcGlfZW1wdHlfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2NsaWVudF9hcGlfZW1wdHlfaW50Zi5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCmNvcHkgZnJvbSBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NsaWVudF9hcGlfZW1wdHlfaW50Zi5jCmNvcHkgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2NsaWVudF9hcGlfZW1wdHlfaW50Zi5jCmluZGV4IDhlMmFhMjIuLjU3OGI0Y2UgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY2xpZW50X2FwaV9lbXB0eV9pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2NsaWVudF9hcGlfZW1wdHlfaW50Zi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTcsNyArMTcsNiBAQAogCiAjaW5jbHVkZSAicGFsX2NvbW1vbi5oIgogI2luY2x1ZGUgInBhbF9jbGllbnRfYXBpX2ludGYuaCIKLSNpbmNsdWRlICJwYWxfc2lkLmgiCiAKIC8qKgogICogQGJyaWVmIC0gUmV0cmlldmUgdGhlIHZlcnNpb24gb2YgdGhlIFBTQSBGcmFtZXdvcmsgQVBJIHRoYXQgaXMgaW1wbGVtZW50ZWQuCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NsaWVudF9hcGlfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2NsaWVudF9hcGlfaW50Zi5jCnNpbWlsYXJpdHkgaW5kZXggOTclCmNvcHkgZnJvbSBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NsaWVudF9hcGlfaW50Zi5jCmNvcHkgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2NsaWVudF9hcGlfaW50Zi5jCmluZGV4IDIxMzUwZWEuLjIwZGRkMTEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY2xpZW50X2FwaV9pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2NsaWVudF9hcGlfaW50Zi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTcsNyArMTcsNiBAQAogCiAjaW5jbHVkZSAicGFsX2NvbW1vbi5oIgogI2luY2x1ZGUgInBhbF9jbGllbnRfYXBpX2ludGYuaCIKLSNpbmNsdWRlICJwYWxfc2lkLmgiCiAKIC8qKgogICogQGJyaWVmICAgLSBSZXRyaWV2ZSB0aGUgdmVyc2lvbiBvZiB0aGUgUFNBIEZyYW1ld29yayBBUEkgdGhhdCBpcyBpbXBsZW1lbnRlZC4KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9jbGllbnRfYXBpX2ludGYuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9jbGllbnRfYXBpX2ludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjU3NDFlCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2NsaWVudF9hcGlfaW50Zi5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZm5kZWYgX1BBTF9DTElFTlRfQVBJX0hfCisjZGVmaW5lIF9QQUxfQ0xJRU5UX0FQSV9IXworCisjaW5jbHVkZSAicGFsX2NvbW1vbi5oIgorCit1aW50MzJfdCBwYWxfaXBjX2ZyYW1ld29ya192ZXJzaW9uKHZvaWQpOwordWludDMyX3QgcGFsX2lwY192ZXJzaW9uKHVpbnQzMl90IHNpZCk7Citwc2FfaGFuZGxlX3QgcGFsX2lwY19jb25uZWN0KHVpbnQzMl90IHNpZCwgdWludDMyX3QgbWlub3JfdmVyc2lvbik7Citwc2Ffc3RhdHVzX3QgcGFsX2lwY19jYWxsKHBzYV9oYW5kbGVfdCBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHNhX2ludmVjICppbl92ZWMsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBwc2Ffb3V0dmVjICpvdXRfdmVjLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRfbGVuKTsKK3ZvaWQgcGFsX2lwY19jbG9zZShwc2FfaGFuZGxlX3QgaGFuZGxlKTsKKyNlbmRpZiAvKiBfUEFMX0NMSUVOVF9BUElfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY29tbW9uLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9wYWxfY29tbW9uLmgKc2ltaWxhcml0eSBpbmRleCA2NCUKY29weSBmcm9tIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY29tbW9uLmgKY29weSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9wYWxfY29tbW9uLmgKaW5kZXggNzlkYzdhMy4uZDVhY2IyZSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jb21tb24uaAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9wYWxfY29tbW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMSw2ICsyMSwxMiBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaWZuZGVmIFRBUkdFVF9DRkdfQlVJTEQKKyNpbmNsdWRlICJwYWxfY29uZmlnLmgiCisjZW5kaWYKIAogLyogdHlwZWRlZidzICovCiB0eXBlZGVmIHVpbnQ4X3QgICAgICAgICAgICAgYm9vbF90OwpAQCAtMzAsMTEgKzM2LDEzIEBACiB0eXBlZGVmIGNoYXIgICAgICAgICAgICAgICAgY2hhcjhfdDsKIHR5cGVkZWYgdWludDMyX3QgICAgICAgICAgICBjZmdfaWRfdDsKIAorI2RlZmluZSBQQUxfU1RBVFVTX1VOU1VQUE9SVEVEX0ZVTkMgICAgICAweEZGCisKIHR5cGVkZWYgZW51bQogewogICAgIFBBTF9TVEFUVVNfU1VDQ0VTUyA9IDB4MCwKICAgICBQQUxfU1RBVFVTX0VSUk9SICAgPSAweDgwCi19cGFsX3N0YXR1c190OworfSBwYWxfc3RhdHVzX3Q7CiAKIHR5cGVkZWYgZW51bSB7CiAgICAgTlZNRU1fUkVBRCAgICAgICAgICAgICA9IDB4MSwKQEAgLTU5LDEzICs2NywxNCBAQAogICAgIFdEX0xPV19USU1FT1VUICAgICAgPSAweDEsCiAgICAgV0RfTUVESVVNX1RJTUVPVVQgICA9IDB4MiwKICAgICBXRF9ISUdIX1RJTUVPVVQgICAgID0gMHgzLAorICAgIFdEX0NSWVBUT19USU1FT1VUICAgPSAweDQsCiB9IHdkX3RpbWVvdXRfdHlwZV90OwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgd2RfZm5fdHlwZV90IHdkX2ZuX3R5cGU7Ci0gICAgYWRkcl90IHdkX2Jhc2VfYWRkcjsKLSAgICB1aW50MzJfdCB3ZF90aW1lX3VzOwotICAgIHVpbnQzMl90IHdkX3RpbWVyX3RpY2tfdXM7CisgICAgYWRkcl90ICAgICAgIHdkX2Jhc2VfYWRkcjsKKyAgICB1aW50MzJfdCAgICAgd2RfdGltZV91czsKKyAgICB1aW50MzJfdCAgICAgd2RfdGltZXJfdGlja191czsKIH0gd2RfcGFyYW1fdDsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTczLDQgKzgyLDM2IEBACiAgICAgVUFSVF9QUklOVCAgICAgICAgICAgID0gMHgyLAogfSB1YXJ0X2ZuX3R5cGVfdDsKIAorLyoKKyAqIFJlZGVmaW5pbmcgc29tZSBvZiB0aGUgY2xpZW50LmggZWxlbWVudHMgZm9yIGNvbXBpbGF0aW9uIHRvIGdvIHRocm91Z2gKKyAqIHdoZW4gUFNBIElQQyBBUElzIGFyZSBub3QgaW1wbGVtZW50ZWQuCisgKi8KKyNpZiAoUFNBX0lQQ19JTVBMRU1FTlRFRCA9PSAwKQorCisjaWZuZGVmIFBTQV9WRVJTSU9OX05PTkUKKyNkZWZpbmUgUFNBX1ZFUlNJT05fTk9ORSAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgUFNBX1NVQ0NFU1MKKyNkZWZpbmUgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICgwKQordHlwZWRlZiBpbnQzMl90IHBzYV9zdGF0dXNfdDsKKyNlbmRpZgordHlwZWRlZiBpbnQzMl90IHBzYV9oYW5kbGVfdDsKKworI2lmbmRlZiBQU0FfTlVMTF9IQU5ETEUKKyNkZWZpbmUgUFNBX05VTExfSEFORExFICAgICAgICAgICAgICgocHNhX2hhbmRsZV90KTApCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgcHNhX2ludmVjIHsKKyAgICBjb25zdCB2b2lkICpiYXNlOworICAgIHNpemVfdCBsZW47Cit9IHBzYV9pbnZlYzsKKwordHlwZWRlZiBzdHJ1Y3QgcHNhX291dHZlYyB7CisgICAgdm9pZCAqYmFzZTsKKyAgICBzaXplX3QgbGVuOworfSBwc2Ffb3V0dmVjOworCisjZW5kaWYgLyogUFNBX0lQQ19JTVBMRU1FTlRFRCAqLworCiAjZW5kaWYgLyogX1BBTF9DT01NT05fSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9jb25maWcuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWEwZWM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2NvbmZpZy5oCkBAIC0wLDAgKzEsMTA0IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZuZGVmIF9QQUxfQ09ORklHX0hfCisjZGVmaW5lIF9QQUxfQ09ORklHX0hfCisKKy8qCisgKiBMaXN0IG9mIG1hY3JvcyB1c2VkIGJ5IHRlc3Qgc3VpdGUKKyAqLworI2lmICFkZWZpbmVkKFBTQV9JUENfSU1QTEVNRU5URUQpCisjZGVmaW5lIFBTQV9JUENfSU1QTEVNRU5URUQgMAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChQU0FfQ1JZUFRPX0lNUExFTUVOVEVEKQorI2RlZmluZSBQU0FfQ1JZUFRPX0lNUExFTUVOVEVEIDAKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCkKKyNkZWZpbmUgUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCAwCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFBTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCkKKyNkZWZpbmUgUFNBX1BST1RFQ1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEIDAKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoUFNBX0lOSVRJQUxfQVRURVNUQVRJT05fSU1QTEVNRU5URUQpCisjZGVmaW5lIFBTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEIDAKKyNlbmRpZgorCisjaWYgKFBTQV9JUENfSU1QTEVNRU5URUQgPT0gMCkgJiYgXAorICAgIChQU0FfQ1JZUFRPX0lNUExFTUVOVEVEID09IDApICYmIFwKKyAgICAoUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCA9PSAwKSAmJiBcCisgICAgKFBTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCA9PSAwKSAmJiBcCisgICAgKFBTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEID09IDApCisjZXJyb3IgIllvdSBtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgb2YgdGhlc2UgbWFjcm9zIHRvIHJ1biB0ZXN0IHN1aXRlIgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChWRVJCT1NFKQorI2RlZmluZSBWRVJCT1NFIDQgLyogUHJpbnQgdmVyYm9zaXR5ID0gRVJST1IgKi8KKyNlbmRpZgorCisjaWYgKCFkZWZpbmVkKFZBTF9OU1BFX0JVSUxEKSAmJiAhZGVmaW5lZChTUEVfQlVJTEQpKQorI2RlZmluZSBWQUxfTlNQRV9CVUlMRCAxCisjZW5kaWYKKworI2lmICghZGVmaW5lZChOT05TRUNVUkVfVEVTVF9CVUlMRCkgJiYgIWRlZmluZWQoU1BFX0JVSUxEKSkKKyNkZWZpbmUgTk9OU0VDVVJFX1RFU1RfQlVJTEQgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChURVNUX0NPTUJJTkVfQVJDSElWRSkKKy8vI2RlZmluZSBURVNUX0NPTUJJTkVfQVJDSElWRSAvKiBUZXN0IGRpc3BhdGNoZXIgY29kZSBzZWxlY3Rpb24gKi8KKyNlbmRpZgorCisvKgorICogSW5jbHVkZSBvZiBQU0EgZGVmaW5lZCBIZWFkZXIgZmlsZXMKKyAqLworCisjaWYgUFNBX0lQQ19JTVBMRU1FTlRFRAorLyogcHNhL2NsaWVudC5oOiBDb250YWlucyB0aGUgUFNBIENsaWVudCBBUEkgZWxlbWVudHMgKi8KKyNpbmNsdWRlICJwc2EvY2xpZW50LmgiCisKKy8qCisgKiBwc2FfbWFuaWZlc3Qvc2lkLmg6ICBNYWNybyBkZWZpbml0aW9ucyBkZXJpdmVkIGZyb20gbWFuaWZlc3QgZmlsZXMgdGhhdCBtYXAgZnJvbSBSb1QgU2VydmljZQorICogbmFtZXMgdG8gU2VydmljZSBJRHMgKFNJRHMpLiBQYXJ0aXRpb24gbWFuaWZlc3QgcGFyc2UgYnVpbGQgdG9vbCBtdXN0IHByb3ZpZGUgdGhlIGltcGxlbWVudGF0aW9uCisgKiBvZiB0aGlzIGZpbGUuCisqLworI2luY2x1ZGUgInBzYV9tYW5pZmVzdC9zaWQuaCIKKyNlbmRpZgorCisjaWYgUFNBX0NSWVBUT19JTVBMRU1FTlRFRAorLyogcHNhL2NyeXB0by5oOiBDb250YWlucyB0aGUgUFNBIENyeXB0byBBUEkgZWxlbWVudHMgKi8KKyNpbmNsdWRlICJwc2EvY3J5cHRvLmgiCisjZW5kaWYKKworI2lmIFBTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQKKy8qIHBzYS9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UuaDogQ29udGFpbnMgdGhlIFBTQSBJVFMgQVBJIGVsZW1lbnRzICovCisjaW5jbHVkZSAicHNhL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS5oIgorI2VuZGlmCisKKyNpZiBQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQKKy8qIHBzYS9wcm90ZWN0ZWRfc3RvcmFnZS5oOiBDb250YWlucyB0aGUgUFNBIFBTIEFQSSBlbGVtZW50cyAqLworI2luY2x1ZGUgInBzYS9wcm90ZWN0ZWRfc3RvcmFnZS5oIgorI2VuZGlmCisKKyNpZiBQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRAorLyogcHNhL2luaXRpYWxfYXR0ZXN0YXRpb24uaDogQ29udGFpbnMgdGhlIFBTQSBJbml0aWFsIEF0dGVzdGF0aW9uIEFQSSBlbGVtZW50cyAqLworI2luY2x1ZGUgInBzYS9pbml0aWFsX2F0dGVzdGF0aW9uLmgiCisjZW5kaWYKKworI2VuZGlmIC8qIF9QQUxfQ09ORklHX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYwpzaW1pbGFyaXR5IGluZGV4IDgxJQpjb3B5IGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCmNvcHkgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKaW5kZXggMTQ2NDllOS4uMmEyOGYzOSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOSArMTUsOCBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotCisjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSAicGFsX2NvbW1vbi5oIgotI2luY2x1ZGUgInBhbF9jcnlwdG9faW50Zi5oIgogCiAvKioKICAgICBAYnJpZWYgICAgLSBUaGlzIEFQSSB3aWxsIGNhbGwgdGhlIHJlcXVlc3RlZCBjcnlwdG8gZnVuY3Rpb24KQEAgLTI1LDcgKzI0LDcgQEAKICAgICAgICAgICAgICAgICB2YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdAogICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cwogKiovCi1wc2Ffc3RhdHVzX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCitpbnQzMl90IHBhbF9jcnlwdG9fZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KQogewotICAgIHJldHVybiBQQUxfU1RBVFVTX1VOU1VQUE9SVEVEX0ZVTkM7CisgICAgcmV0dXJuIFBBTF9TVEFUVVNfRVJST1I7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9wYWxfY3J5cHRvX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9jcnlwdG9faW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMTdjZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9wYWxfY3J5cHRvX2ludGYuYwpAQCAtMCwwICsxLDMzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworCisjaW5jbHVkZSAicGFsX2NyeXB0b19pbnRmLmgiCisKKyNkZWZpbmUgIFBBTF9LRVlfU0xPVF9DT1VOVCAgMzIKKworLyoqCisgICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgY3J5cHRvIGZ1bmN0aW9uCisgICAgQHBhcmFtICAgIC0gdHlwZSAgICA6IGZ1bmN0aW9uIGNvZGUKKyAgICAgICAgICAgICAgICB2YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdAorICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cworKiovCitpbnQzMl90IHBhbF9jcnlwdG9fZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgIGk7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgc2l6ZSwgKmxlbmd0aCwgc2FsdF9sZW5ndGgsIGxhYmVsX2xlbmd0aCwgY2lwaGVydGV4dF9zaXplOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICpidWZmZXIsICpjaXBoZXJ0ZXh0OworICAgIGNvbnN0IHVpbnQ4X3QgICAgICAgICAgICpzYWx0LCAqbGFiZWwsICpub25jZSwgKmFkZGl0aW9uYWxfZGF0YTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAqcGxhaW50ZXh0OworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIHN0YXR1czsKKyAgICBjb25zdCB2b2lkICAgICAgICAgICAgICAqZXh0cmE7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgZXh0cmFfc2l6ZSwgY2FwYWNpdHksICpnZW5fY2FwLCBub25jZV9sZW5ndGgsIGFkZGl0aW9uYWxfZGF0YV9sZW5ndGg7CisgICAgcHNhX2tleV9oYW5kbGVfdCAgICAgICAgaGFuZGxlLCAqa2V5X2hhbmRsZTsKKyAgICBwc2Ffa2V5X3R5cGVfdCAgICAgICAgICBrZXlfdHlwZSwgKmtleV90eXBlX291dDsKKyAgICBwc2Ffa2V5X3BvbGljeV90ICAgICAgICAqcG9saWN5OworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlLCAqdXNhZ2Vfb3V0OworICAgIHBzYV9rZXlfbGlmZXRpbWVfdCAgICAgICpsaWZldGltZV9vdXQ7CisgICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAgYWxnLCAqYWxnX291dDsKKyAgICBwc2FfaGFzaF9vcGVyYXRpb25fdCAgICAqaGFzaF9vcGVyYXRpb247CisgICAgcHNhX21hY19vcGVyYXRpb25fdCAgICAgKm1hY19vcGVyYXRpb247CisgICAgcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAgKmNpcGhlcl9vcGVyYXRpb247CisgICAgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCAgKmdlbmVyYXRvcjsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19JTklUOgorICAgICAgICAgICAgcmV0dXJuIHBzYV9jcnlwdG9faW5pdCgpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fR0VORVJBVEVfUkFORE9NOgorICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICByZXR1cm4gcHNhX2dlbmVyYXRlX3JhbmRvbShidWZmZXIsIHNpemUpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fSU1QT1JUX0tFWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBrZXlfdHlwZSA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfdHlwZV90KTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgc3RhdHVzID0gcHNhX2ltcG9ydF9rZXkoaGFuZGxlLCBrZXlfdHlwZSwgYnVmZmVyLCBzaXplKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19FWFBPUlRfS0VZOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGJ1ZmZlciA9ICh1aW50OF90ICopKHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKSk7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IChzaXplX3QgKil2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IHBzYV9leHBvcnRfa2V5KGhhbmRsZSwgYnVmZmVyLCBzaXplLCBsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0VYUE9SVF9QVUJMSUNfS0VZOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGJ1ZmZlciA9ICh1aW50OF90ICopKHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKSk7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IChzaXplX3QgKil2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IHBzYV9leHBvcnRfcHVibGljX2tleShoYW5kbGUsIGJ1ZmZlciwgc2l6ZSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQ6CisgICAgICAgICAgICBwb2xpY3kgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3BvbGljeV90Kik7CisgICAgICAgICAgICBwc2Ffa2V5X3BvbGljeV9pbml0KHBvbGljeSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFOgorICAgICAgICAgICAgcG9saWN5ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9wb2xpY3lfdCopOworICAgICAgICAgICAgdXNhZ2UgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3VzYWdlX3QpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIHBzYV9rZXlfcG9saWN5X3NldF91c2FnZShwb2xpY3ksIHVzYWdlLCBhbGcpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19TRVRfS0VZX1BPTElDWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBwb2xpY3kgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3BvbGljeV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX3NldF9rZXlfcG9saWN5KGhhbmRsZSwgcG9saWN5KTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0RFU1RST1lfS0VZOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IHBzYV9kZXN0cm95X2tleShoYW5kbGUpOworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFVF9LRVlfSU5GT1JNQVRJT046CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAga2V5X3R5cGVfb3V0ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV90eXBlX3QqKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IChzaXplX3QgKil2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IHBzYV9nZXRfa2V5X2luZm9ybWF0aW9uKGhhbmRsZSwga2V5X3R5cGVfb3V0LCBsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFVF9LRVlfUE9MSUNZOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIHBvbGljeSA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfcG9saWN5X3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfZ2V0X2tleV9wb2xpY3koaGFuZGxlLCBwb2xpY3kpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fS0VZX1BPTElDWV9HRVRfVVNBR0U6CisgICAgICAgICAgICBwb2xpY3kgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3BvbGljeV90Kik7CisgICAgICAgICAgICB1c2FnZV9vdXQgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3VzYWdlX3QqKTsKKyAgICAgICAgICAgICp1c2FnZV9vdXQgPSBwc2Ffa2V5X3BvbGljeV9nZXRfdXNhZ2UocG9saWN5KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fS0VZX1BPTElDWV9HRVRfQUxHT1JJVEhNOgorICAgICAgICAgICAgcG9saWN5ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9wb2xpY3lfdCopOworICAgICAgICAgICAgYWxnX291dCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCopOworICAgICAgICAgICAgKmFsZ19vdXQgPSBwc2Ffa2V5X3BvbGljeV9nZXRfYWxnb3JpdGhtKHBvbGljeSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFVF9LRVlfTElGRVRJTUU6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgbGlmZXRpbWVfb3V0ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9saWZldGltZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2dldF9rZXlfbGlmZXRpbWUoaGFuZGxlLCBsaWZldGltZV9vdXQpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fSEFTSF9TRVRVUDoKKyAgICAgICAgICAgIGhhc2hfb3BlcmF0aW9uID0gdmFfYXJnKHZhbGlzdCwgcHNhX2hhc2hfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7CisgICAgICAgICAgICByZXR1cm4gcHNhX2hhc2hfc2V0dXAoaGFzaF9vcGVyYXRpb24sIGFsZyk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19IQVNIX1VQREFURToKKyAgICAgICAgICAgIGhhc2hfb3BlcmF0aW9uID0gdmFfYXJnKHZhbGlzdCwgcHNhX2hhc2hfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9oYXNoX3VwZGF0ZShoYXNoX29wZXJhdGlvbiwgYnVmZmVyLCBzaXplKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0hBU0hfVkVSSUZZOgorICAgICAgICAgICAgaGFzaF9vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfaGFzaF9vcGVyYXRpb25fdCopOworICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICByZXR1cm4gcHNhX2hhc2hfdmVyaWZ5KGhhc2hfb3BlcmF0aW9uLCBidWZmZXIsIHNpemUpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fSEFTSF9GSU5JU0g6CisgICAgICAgICAgICBoYXNoX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9oYXNoX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9oYXNoX2ZpbmlzaChoYXNoX29wZXJhdGlvbiwgYnVmZmVyLCBzaXplLCBsZW5ndGgpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fSEFTSF9BQk9SVDoKKyAgICAgICAgICAgIGhhc2hfb3BlcmF0aW9uID0gdmFfYXJnKHZhbGlzdCwgcHNhX2hhc2hfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfaGFzaF9hYm9ydChoYXNoX29wZXJhdGlvbik7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRU5FUkFURV9LRVk6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAga2V5X3R5cGUgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3R5cGVfdCk7CisgICAgICAgICAgICBzaXplICAgICA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBleHRyYSAgICA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHZvaWQqKTsKKyAgICAgICAgICAgIGV4dHJhX3NpemUgID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfZ2VuZXJhdGVfa2V5KGhhbmRsZSwga2V5X3R5cGUsIHNpemUsIGV4dHJhLCBleHRyYV9zaXplKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFTkVSQVRPUl9SRUFEOgorICAgICAgICAgICAgZ2VuZXJhdG9yID0gdmFfYXJnKHZhbGlzdCwgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCopOworICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICByZXR1cm4gcHNhX2dlbmVyYXRvcl9yZWFkKGdlbmVyYXRvciwgYnVmZmVyLCBzaXplKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0tFWV9ERVJJVkFUSU9OOgorICAgICAgICAgICAgZ2VuZXJhdG9yID0gdmFfYXJnKHZhbGlzdCwgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCopOworICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7CisgICAgICAgICAgICBzYWx0ID0gdmFfYXJnKHZhbGlzdCwgY29uc3QgdWludDhfdCAqKTsKKyAgICAgICAgICAgIHNhbHRfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGxhYmVsID0gdmFfYXJnKHZhbGlzdCwgY29uc3QgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGxhYmVsX2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBjYXBhY2l0eSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICByZXR1cm4gcHNhX2tleV9kZXJpdmF0aW9uKGdlbmVyYXRvciwgaGFuZGxlLCBhbGcsIHNhbHQsIHNhbHRfbGVuZ3RoLCBsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsX2xlbmd0aCwgY2FwYWNpdHkpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fR0VUX0dFTkVSQVRPUl9DQVBBQ0lUWToKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHZhX2FyZyh2YWxpc3QsIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QqKTsKKyAgICAgICAgICAgIGdlbl9jYXAgICA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9nZXRfZ2VuZXJhdG9yX2NhcGFjaXR5KGdlbmVyYXRvciwgZ2VuX2NhcCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRU5FUkFUT1JfSU1QT1JUX0tFWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBrZXlfdHlwZSA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfdHlwZV90KTsKKyAgICAgICAgICAgIHNpemUgICAgID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHZhX2FyZyh2YWxpc3QsIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfZ2VuZXJhdG9yX2ltcG9ydF9rZXkoaGFuZGxlLCBrZXlfdHlwZSwgc2l6ZSwgZ2VuZXJhdG9yKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFTkVSQVRPUl9BQk9SVDoKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHZhX2FyZyh2YWxpc3QsIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfZ2VuZXJhdG9yX2Fib3J0KGdlbmVyYXRvcik7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19BRUFEX0VOQ1JZUFQ6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIG5vbmNlID0gdmFfYXJnKHZhbGlzdCwgY29uc3QgdWludDhfdCAqKTsKKyAgICAgICAgICAgIG5vbmNlX2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGEgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB1aW50OF90ICopOworICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhX2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBwbGFpbnRleHQgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90ICopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGNpcGhlcnRleHRfc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfYWVhZF9lbmNyeXB0KGhhbmRsZSwgYWxnLCBub25jZSwgbm9uY2VfbGVuZ3RoLCBhZGRpdGlvbmFsX2RhdGEsCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YV9sZW5ndGgsIHBsYWludGV4dCwgc2l6ZSwgY2lwaGVydGV4dCwgY2lwaGVydGV4dF9zaXplLCBsZW5ndGgpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQUVBRF9ERUNSWVBUOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7CisgICAgICAgICAgICBub25jZSA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgICAgICBub25jZV9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhID0gdmFfYXJnKHZhbGlzdCwgY29uc3QgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YV9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgY2lwaGVydGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0X3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcGxhaW50ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2FlYWRfZGVjcnlwdChoYW5kbGUsIGFsZywgbm9uY2UsIG5vbmNlX2xlbmd0aCwgYWRkaXRpb25hbF9kYXRhLAorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGFfbGVuZ3RoLCBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X3NpemUsIHBsYWludGV4dCwgc2l6ZSwgbGVuZ3RoKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX01BQ19TSUdOX1NFVFVQOgorICAgICAgICAgICAgbWFjX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9tYWNfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9tYWNfc2lnbl9zZXR1cChtYWNfb3BlcmF0aW9uLCBoYW5kbGUsIGFsZyk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19NQUNfVVBEQVRFOgorICAgICAgICAgICAgbWFjX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9tYWNfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9tYWNfdXBkYXRlKG1hY19vcGVyYXRpb24sIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19NQUNfU0lHTl9GSU5JU0g6CisgICAgICAgICAgICBtYWNfb3BlcmF0aW9uID0gdmFfYXJnKHZhbGlzdCwgcHNhX21hY19vcGVyYXRpb25fdCopOworICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSAoc2l6ZV90ICopdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX21hY19zaWduX2ZpbmlzaChtYWNfb3BlcmF0aW9uLCBidWZmZXIsIHNpemUsIGxlbmd0aCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19NQUNfVkVSSUZZX1NFVFVQOgorICAgICAgICAgICAgbWFjX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9tYWNfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9tYWNfdmVyaWZ5X3NldHVwKG1hY19vcGVyYXRpb24sIGhhbmRsZSwgYWxnKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX01BQ19WRVJJRllfRklOSVNIOgorICAgICAgICAgICAgbWFjX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9tYWNfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9tYWNfdmVyaWZ5X2ZpbmlzaChtYWNfb3BlcmF0aW9uLCBidWZmZXIsIHNpemUpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fTUFDX0FCT1JUOgorICAgICAgICAgICAgbWFjX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9tYWNfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfbWFjX2Fib3J0KG1hY19vcGVyYXRpb24pOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQVNZTU1URVJJQ19FTkNSWVBUOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7CisgICAgICAgICAgICBwbGFpbnRleHQgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90ICopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBzYWx0ID0gdmFfYXJnKHZhbGlzdCwgY29uc3QgdWludDhfdCAqKTsKKyAgICAgICAgICAgIHNhbHRfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGNpcGhlcnRleHQgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90ICopOworICAgICAgICAgICAgY2lwaGVydGV4dF9zaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9hc3ltbWV0cmljX2VuY3J5cHQoaGFuZGxlLCBhbGcsIHBsYWludGV4dCwgc2l6ZSwgc2FsdCwgc2FsdF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGNpcGhlcnRleHQsIGNpcGhlcnRleHRfc2l6ZSwgbGVuZ3RoKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0FTWU1NVEVSSUNfREVDUllQVDoKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgcGxhaW50ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgc2FsdCA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgICAgICBzYWx0X2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGNpcGhlcnRleHRfc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfYXN5bW1ldHJpY19kZWNyeXB0KGhhbmRsZSwgYWxnLCBwbGFpbnRleHQsIHNpemUsIHNhbHQsIHNhbHRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X3NpemUsIGxlbmd0aCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19DSVBIRVJfRU5DUllQVF9TRVRVUDoKKyAgICAgICAgICAgIGNpcGhlcl9vcGVyYXRpb24gPSAgdmFfYXJnKHZhbGlzdCwgcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAqKTsKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cChjaXBoZXJfb3BlcmF0aW9uLCBoYW5kbGUsIGFsZyk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19DSVBIRVJfREVDUllQVF9TRVRVUDoKKyAgICAgICAgICAgIGNpcGhlcl9vcGVyYXRpb24gPSAgdmFfYXJnKHZhbGlzdCwgcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAqKTsKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cChjaXBoZXJfb3BlcmF0aW9uLCBoYW5kbGUsIGFsZyk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19DSVBIRVJfR0VORVJBVEVfSVY6CisgICAgICAgICAgICBjaXBoZXJfb3BlcmF0aW9uID0gIHZhX2FyZyh2YWxpc3QsIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgKik7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9jaXBoZXJfZ2VuZXJhdGVfaXYoY2lwaGVyX29wZXJhdGlvbiwgYnVmZmVyLCBzaXplLCBsZW5ndGgpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQ0lQSEVSX1NFVF9JVjoKKyAgICAgICAgICAgIGNpcGhlcl9vcGVyYXRpb24gPSAgdmFfYXJnKHZhbGlzdCwgcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAqKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9jaXBoZXJfc2V0X2l2KGNpcGhlcl9vcGVyYXRpb24sIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19DSVBIRVJfVVBEQVRFOgorICAgICAgICAgICAgY2lwaGVyX29wZXJhdGlvbiA9ICB2YV9hcmcodmFsaXN0LCBwc2FfY2lwaGVyX29wZXJhdGlvbl90ICopOworICAgICAgICAgICAgcGxhaW50ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgY2lwaGVydGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0X3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2NpcGhlcl91cGRhdGUoY2lwaGVyX29wZXJhdGlvbiwgcGxhaW50ZXh0LCBzaXplLCBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0NJUEhFUl9GSU5JU0g6CisgICAgICAgICAgICBjaXBoZXJfb3BlcmF0aW9uID0gIHZhX2FyZyh2YWxpc3QsIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGNpcGhlcnRleHRfc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfY2lwaGVyX2ZpbmlzaChjaXBoZXJfb3BlcmF0aW9uLCBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X3NpemUsIGxlbmd0aCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19DSVBIRVJfQUJPUlQ6CisgICAgICAgICAgICBjaXBoZXJfb3BlcmF0aW9uID0gIHZhX2FyZyh2YWxpc3QsIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgKik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2NpcGhlcl9hYm9ydChjaXBoZXJfb3BlcmF0aW9uKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0FTWU1NVEVSSUNfU0lHTjoKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGNpcGhlcnRleHRfc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfYXN5bW1ldHJpY19zaWduKGhhbmRsZSwgYWxnLCBidWZmZXIsIHNpemUsIGNpcGhlcnRleHQsIGNpcGhlcnRleHRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19BU1lNTVRFUklDX1ZFUklGWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGNpcGhlcnRleHRfc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICByZXR1cm4gcHNhX2FzeW1tZXRyaWNfdmVyaWZ5KGhhbmRsZSwgYWxnLCBidWZmZXIsIHNpemUsIGNpcGhlcnRleHQsIGNpcGhlcnRleHRfc2l6ZSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19LRVlfQUdSRUVNRU5UOgorICAgICAgICAgICAgZ2VuZXJhdG9yID0gdmFfYXJnKHZhbGlzdCwgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCopOworICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2Ffa2V5X2FncmVlbWVudChnZW5lcmF0b3IsIGhhbmRsZSwgYnVmZmVyLCBzaXplLCBhbGcpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQUxMT0NBVEVfS0VZOgorICAgICAgICAgICAga2V5X3R5cGUgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3R5cGVfdCk7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGtleV9oYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCAqKXZhX2FyZyh2YWxpc3QsIGludCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9hbGxvY2F0ZV9rZXkoa2V5X3R5cGUsIHNpemUsIGtleV9oYW5kbGUpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fRlJFRToKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQQUxfS0VZX1NMT1RfQ09VTlQ7IGkrKykKKyAgICAgICAgICAgICAgICBwc2FfZGVzdHJveV9rZXkoaSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBQQUxfU1RBVFVTX1VOU1VQUE9SVEVEX0ZVTkM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2NyeXB0b19pbnRmLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9wYWxfY3J5cHRvX2ludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmFiZWUxCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2NyeXB0b19pbnRmLmgKQEAgLTAsMCArMSw3NSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2lmbmRlZiBfUEFMX0NSWVBUT19IXworI2RlZmluZSBfUEFMX0NSWVBUT19IXworCisjaW5jbHVkZSAicGFsX2NvbW1vbi5oIgorCitlbnVtIGNyeXB0b19mdW5jdGlvbl9jb2RlIHsKKyAgICBQQUxfQ1JZUFRPX0lOSVQgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKyAgICBQQUxfQ1JZUFRPX0dFTkVSQVRFX1JBTkRPTSAgICAgICAgICA9IDB4MiwKKyAgICBQQUxfQ1JZUFRPX0lNUE9SVF9LRVkgICAgICAgICAgICAgICA9IDB4MywKKyAgICBQQUxfQ1JZUFRPX0VYUE9SVF9LRVkgICAgICAgICAgICAgICA9IDB4NCwKKyAgICBQQUxfQ1JZUFRPX0VYUE9SVF9QVUJMSUNfS0VZICAgICAgICA9IDB4NSwKKyAgICBQQUxfQ1JZUFRPX0RFU1RST1lfS0VZICAgICAgICAgICAgICA9IDB4NiwKKyAgICBQQUxfQ1JZUFRPX0dFVF9LRVlfSU5GTyAgICAgICAgICAgICA9IDB4NywKKyAgICBQQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCAgICAgICAgICA9IDB4OCwKKyAgICBQQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFICAgICA9IDB4OSwKKyAgICBQQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfR0VUX1VTQUdFICAgICA9IDB4QSwKKyAgICBQQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfR0VUX0FMR09SSVRITSA9IDB4QiwKKyAgICBQQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZICAgICAgICAgICA9IDB4QywKKyAgICBQQUxfQ1JZUFRPX0dFVF9LRVlfUE9MSUNZICAgICAgICAgICA9IDB4RCwKKyAgICBQQUxfQ1JZUFRPX0dFVF9LRVlfSU5GT1JNQVRJT04gICAgICA9IDB4RSwKKyAgICBQQUxfQ1JZUFRPX0dFVF9LRVlfTElGRVRJTUUgICAgICAgICA9IDB4RiwKKyAgICBQQUxfQ1JZUFRPX0hBU0hfU0VUVVAgICAgICAgICAgICAgICA9IDB4MTEsCisgICAgUEFMX0NSWVBUT19IQVNIX1VQREFURSAgICAgICAgICAgICAgPSAweDEyLAorICAgIFBBTF9DUllQVE9fSEFTSF9WRVJJRlkgICAgICAgICAgICAgID0gMHgxMywKKyAgICBQQUxfQ1JZUFRPX0hBU0hfRklOSVNIICAgICAgICAgICAgICA9IDB4MTQsCisgICAgUEFMX0NSWVBUT19IQVNIX0FCT1JUICAgICAgICAgICAgICAgPSAweDE1LAorICAgIFBBTF9DUllQVE9fR0VORVJBVEVfS0VZICAgICAgICAgICAgID0gMHgxNiwKKyAgICBQQUxfQ1JZUFRPX0dFTkVSQVRPUl9SRUFEICAgICAgICAgICA9IDB4MTcsCisgICAgUEFMX0NSWVBUT19LRVlfREVSSVZBVElPTiAgICAgICAgICAgPSAweDE4LAorICAgIFBBTF9DUllQVE9fR0VUX0dFTkVSQVRPUl9DQVBBQ0lUWSAgID0gMHgxOSwKKyAgICBQQUxfQ1JZUFRPX0dFTkVSQVRPUl9JTVBPUlRfS0VZICAgICA9IDB4MUEsCisgICAgUEFMX0NSWVBUT19HRU5FUkFUT1JfQUJPUlQgICAgICAgICAgPSAweDFCLAorICAgIFBBTF9DUllQVE9fQUVBRF9FTkNSWVBUICAgICAgICAgICAgID0gMHgxQywKKyAgICBQQUxfQ1JZUFRPX0FFQURfREVDUllQVCAgICAgICAgICAgICA9IDB4MUQsCisgICAgUEFMX0NSWVBUT19NQUNfU0lHTl9TRVRVUCAgICAgICAgICAgPSAweDFFLAorICAgIFBBTF9DUllQVE9fTUFDX1VQREFURSAgICAgICAgICAgICAgID0gMHgxRiwKKyAgICBQQUxfQ1JZUFRPX01BQ19TSUdOX0ZJTklTSCAgICAgICAgICA9IDB4MjAsCisgICAgUEFMX0NSWVBUT19NQUNfVkVSSUZZX1NFVFVQICAgICAgICAgPSAweDIxLAorICAgIFBBTF9DUllQVE9fTUFDX1ZFUklGWV9GSU5JU0ggICAgICAgID0gMHgyMiwKKyAgICBQQUxfQ1JZUFRPX01BQ19BQk9SVCAgICAgICAgICAgICAgICA9IDB4MjMsCisgICAgUEFMX0NSWVBUT19BU1lNTVRFUklDX0VOQ1JZUFQgICAgICAgPSAweDI0LAorICAgIFBBTF9DUllQVE9fQVNZTU1URVJJQ19ERUNSWVBUICAgICAgID0gMHgyNSwKKyAgICBQQUxfQ1JZUFRPX0NJUEhFUl9FTkNSWVBUX1NFVFVQICAgICA9IDB4MjYsCisgICAgUEFMX0NSWVBUT19DSVBIRVJfREVDUllQVF9TRVRVUCAgICAgPSAweDJBLAorICAgIFBBTF9DUllQVE9fQ0lQSEVSX0dFTkVSQVRFX0lWICAgICAgID0gMHgyQiwKKyAgICBQQUxfQ1JZUFRPX0NJUEhFUl9TRVRfSVYgICAgICAgICAgICA9IDB4MkMsCisgICAgUEFMX0NSWVBUT19DSVBIRVJfVVBEQVRFICAgICAgICAgICAgPSAweDJELAorICAgIFBBTF9DUllQVE9fQ0lQSEVSX0ZJTklTSCAgICAgICAgICAgID0gMHgyRSwKKyAgICBQQUxfQ1JZUFRPX0NJUEhFUl9BQk9SVCAgICAgICAgICAgICA9IDB4MkYsCisgICAgUEFMX0NSWVBUT19BU1lNTVRFUklDX1NJR04gICAgICAgICAgPSAweDMwLAorICAgIFBBTF9DUllQVE9fQVNZTU1URVJJQ19WRVJJRlkgICAgICAgID0gMHgzMSwKKyAgICBQQUxfQ1JZUFRPX0tFWV9BR1JFRU1FTlQgICAgICAgICAgICA9IDB4MzIsCisgICAgUEFMX0NSWVBUT19BTExPQ0FURV9LRVkgICAgICAgICAgICAgPSAweDMzLAorICAgIFBBTF9DUllQVE9fRlJFRSAgICAgICAgICAgICAgICAgICAgID0gMHhGRSwKK307CisKK2ludDMyX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpOworI2VuZGlmIC8qIF9QQUxfQ1JZUFRPX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2RyaXZlcl9pcGNfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2RyaXZlcl9pcGNfaW50Zi5jCnNpbWlsYXJpdHkgaW5kZXggOTglCmNvcHkgZnJvbSBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2RyaXZlcl9pcGNfaW50Zi5jCmNvcHkgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2RyaXZlcl9pcGNfaW50Zi5jCmluZGV4IDU5ZWZhZTEuLjMyYWVmOWMgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfZHJpdmVyX2lwY19pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2RyaXZlcl9pcGNfaW50Zi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9kcml2ZXJfbnNfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2RyaXZlcl9uc19pbnRmLmMKc2ltaWxhcml0eSBpbmRleCA5NiUKY29weSBmcm9tIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfZHJpdmVyX25zX2ludGYuYwpjb3B5IHRvIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9kcml2ZXJfbnNfaW50Zi5jCmluZGV4IGQ2ZjMxMjMuLmIxOGNlM2YgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfZHJpdmVyX25zX2ludGYuYworKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9wYWxfZHJpdmVyX25zX2ludGYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJwYWxfdWFydC5oIgogI2luY2x1ZGUgInBhbF9udm1lbS5oIgogI2luY2x1ZGUgInBhbF93ZF9jbXNkay5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIC8qKgogICAgIEBicmllZiAgICAtIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIFVBUlQKQEAgLTI3LDcgKzI4LDcgQEAKICoqLwogaW50IHBhbF91YXJ0X2luaXRfbnModWludDMyX3QgdWFydF9iYXNlX2FkZHIpCiB7Ci0gICAgcGFsX3VhcnRfY21zZGtfaW5pdCh1YXJ0X2Jhc2VfYWRkcik7CisgICAgcGFsX3VhcnRfaW5pdCh1YXJ0X2Jhc2VfYWRkcik7CiAgICAgcmV0dXJuIFBBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KIApAQCAtNDAsNyArNDEsNyBAQAogCiBpbnQgcGFsX3ByaW50X25zKGNoYXIgKnN0ciwgdWludDMyX3QgZGF0YSkKIHsKLSAgICBwYWxfY21zZGtfcHJpbnQoc3RyLCBkYXRhKTsKKyAgICBwYWxfdWFydF9wcmludChzdHIsIGRhdGEpOwogICAgIHJldHVybiBQQUxfU1RBVFVTX1NVQ0NFU1M7CiB9CiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfZW1wdHlfaW50Zi5jCnNpbWlsYXJpdHkgaW5kZXggNzQlCmNvcHkgZnJvbSBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKY29weSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9wYWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlX2VtcHR5X2ludGYuYwppbmRleCAxNDY0OWU5Li4xMzNjZmE5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9lbXB0eV9pbnRmLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSwxNyArMTUsMTYgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLQorI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgInBhbF9jb21tb24uaCIKLSNpbmNsdWRlICJwYWxfY3J5cHRvX2ludGYuaCIKIAogLyoqCi0gICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgY3J5cHRvIGZ1bmN0aW9uCisgICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgaW50ZXJuYWwgdHJ1c3RlZCBzdG9yYWdlIGZ1bmN0aW9uCiAgICAgQHBhcmFtICAgIC0gdHlwZSAgICA6IGZ1bmN0aW9uIGNvZGUKICAgICAgICAgICAgICAgICB2YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdAogICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cwogKiovCi1wc2Ffc3RhdHVzX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCit1aW50MzJfdCBwYWxfaXRzX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKIHsKLSAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIHJldHVybiBQQUxfU1RBVFVTX0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9wYWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlX2ludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjA0YWIwCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9pbnRmLmMKQEAgLTAsMCArMSw2MCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworCisjaW5jbHVkZSAicGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9pbnRmLmgiCisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGludGVybmFsIHRydXN0ZWQgc3RvcmFnZSBmdW5jdGlvbgorICAgIEBwYXJhbSAgICAtIHR5cGUgICAgOiBmdW5jdGlvbiBjb2RlCisgICAgICAgICAgICAgICAgdmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKKyAgICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKKyoqLwordWludDMyX3QgcGFsX2l0c19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCit7CisgICAgcHNhX2l0c191aWRfdCAgICAgICAgICAgdWlkOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGRhdGFfbGVuZ3RoLCBvZmZzZXQ7CisgICAgY29uc3Qgdm9pZCAgICAgICAgICAgICAgKnBfd3JpdGVfZGF0YTsKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqcF9yZWFkX2RhdGE7CisgICAgcHNhX2l0c19jcmVhdGVfZmxhZ3NfdCAgaXRzX2NyZWF0ZV9mbGFnczsKKyAgICBzdHJ1Y3QgcHNhX2l0c19pbmZvX3QgICAqaXRzX3BfaW5mbzsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgY2FzZSBQQUxfSVRTX1NFVDoKKyAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX2l0c191aWRfdCk7CisgICAgICAgIGRhdGFfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QpOworICAgICAgICBwX3dyaXRlX2RhdGEgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB2b2lkKik7CisgICAgICAgIGl0c19jcmVhdGVfZmxhZ3MgPSB2YV9hcmcodmFsaXN0LCBwc2FfaXRzX2NyZWF0ZV9mbGFnc190KTsKKyAgICAgICAgcmV0dXJuIHBzYV9pdHNfc2V0KHVpZCwgZGF0YV9sZW5ndGgsIHBfd3JpdGVfZGF0YSwgaXRzX2NyZWF0ZV9mbGFncyk7CisgICAgY2FzZSBQQUxfSVRTX0dFVDoKKyAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX2l0c191aWRfdCk7CisgICAgICAgIG9mZnNldCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQzMl90KTsKKyAgICAgICAgZGF0YV9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCB1aW50MzJfdCk7CisgICAgICAgIHBfcmVhZF9kYXRhID0gdmFfYXJnKHZhbGlzdCwgdm9pZCopOworICAgICAgICByZXR1cm4gcHNhX2l0c19nZXQodWlkLCBvZmZzZXQsIGRhdGFfbGVuZ3RoLCBwX3JlYWRfZGF0YSk7CisgICAgY2FzZSBQQUxfSVRTX0dFVF9JTkZPOgorICAgICAgICB1aWQgPSB2YV9hcmcodmFsaXN0LCBwc2FfaXRzX3VpZF90KTsKKyAgICAgICAgaXRzX3BfaW5mbyA9IHZhX2FyZyh2YWxpc3QsIHN0cnVjdCBwc2FfaXRzX2luZm9fdCopOworICAgICAgICByZXR1cm4gcHNhX2l0c19nZXRfaW5mbyh1aWQsIGl0c19wX2luZm8pOworICAgIGNhc2UgUEFMX0lUU19SRU1PVkU6CisgICAgICAgIHVpZCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9pdHNfdWlkX3QpOworICAgICAgICByZXR1cm4gcHNhX2l0c19yZW1vdmUodWlkKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfaW50Zi5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9pbnRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiNmFhYwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfaW50Zi5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZm5kZWYgX1BBTF9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU5URl9IXworI2RlZmluZSBfUEFMX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTlRGX0hfCisKKyNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisKK2VudW0gaXRzX2Z1bmN0aW9uX2NvZGUgeworICAgIFBBTF9JVFNfU0VUICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorICAgIFBBTF9JVFNfR0VUICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAorICAgIFBBTF9JVFNfR0VUX0lORk8gICAgICAgICAgICAgICAgICAgID0gMHgzLAorICAgIFBBTF9JVFNfUkVNT1ZFICAgICAgICAgICAgICAgICAgICAgID0gMHg0LAorfTsKKwordWludDMyX3QgcGFsX2l0c19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpOworI2VuZGlmIC8qIF9QQUxfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0lOVEZfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9lbXB0eV9pbnRmLmMKc2ltaWxhcml0eSBpbmRleCA3NCUKY29weSBmcm9tIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYwpjb3B5IHRvIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9lbXB0eV9pbnRmLmMKaW5kZXggMTQ2NDllOS4uZWU5YjEzZCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9lbXB0eV9pbnRmLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSwxNyArMTUsMTYgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLQorI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgInBhbF9jb21tb24uaCIKLSNpbmNsdWRlICJwYWxfY3J5cHRvX2ludGYuaCIKIAogLyoqCi0gICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgY3J5cHRvIGZ1bmN0aW9uCisgICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgcHJvdGVjdGVkIHN0b3JhZ2UgZnVuY3Rpb24KICAgICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQogICAgICAgICAgICAgICAgIHZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0CiAgICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCiAqKi8KLXBzYV9zdGF0dXNfdCBwYWxfY3J5cHRvX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKK3VpbnQzMl90IHBhbF9wc19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCiB7Ci0gICAgcmV0dXJuIFBBTF9TVEFUVVNfVU5TVVBQT1JURURfRlVOQzsKKyAgICByZXR1cm4gUEFMX1NUQVRVU19FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9wYWxfcHJvdGVjdGVkX3N0b3JhZ2VfaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmODllZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9wYWxfcHJvdGVjdGVkX3N0b3JhZ2VfaW50Zi5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKworI2luY2x1ZGUgInBhbF9wcm90ZWN0ZWRfc3RvcmFnZV9pbnRmLmgiCisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIHByb3RlY3RlZCBzdG9yYWdlIGZ1bmN0aW9uCisgICAgQHBhcmFtICAgIC0gdHlwZSAgICA6IGZ1bmN0aW9uIGNvZGUKKyAgICAgICAgICAgICAgICB2YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdAorICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cworKiovCit1aW50MzJfdCBwYWxfcHNfZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KQoreworICAgIHBzYV9wc191aWRfdCAgICAgICAgICAgIHVpZDsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBkYXRhX2xlbmd0aCwgc2l6ZSwgb2Zmc2V0OworICAgIGNvbnN0IHZvaWQgICAgICAgICAgICAgICpwX3dyaXRlX2RhdGE7CisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKnBfcmVhZF9kYXRhOworICAgIHBzYV9wc19jcmVhdGVfZmxhZ3NfdCAgIHBzX2NyZWF0ZV9mbGFnczsKKyAgICBzdHJ1Y3QgcHNhX3BzX2luZm9fdCAgICAqcHNfcF9pbmZvOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgY2FzZSBQQUxfUFNfU0VUOgorICAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX3BzX3VpZF90KTsKKyAgICAgICAgIGRhdGFfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QpOworICAgICAgICAgcF93cml0ZV9kYXRhID0gdmFfYXJnKHZhbGlzdCwgY29uc3Qgdm9pZCopOworICAgICAgICAgcHNfY3JlYXRlX2ZsYWdzID0gdmFfYXJnKHZhbGlzdCwgcHNhX3BzX2NyZWF0ZV9mbGFnc190KTsKKyAgICAgICAgIHJldHVybiBwc2FfcHNfc2V0KHVpZCwgZGF0YV9sZW5ndGgsIHBfd3JpdGVfZGF0YSwgcHNfY3JlYXRlX2ZsYWdzKTsKKyAgICAgY2FzZSBQQUxfUFNfR0VUOgorICAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX3BzX3VpZF90KTsKKyAgICAgICAgIG9mZnNldCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQzMl90KTsKKyAgICAgICAgIGRhdGFfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QpOworICAgICAgICAgcF9yZWFkX2RhdGEgPSB2YV9hcmcodmFsaXN0LCB2b2lkKik7CisgICAgICAgICByZXR1cm4gcHNhX3BzX2dldCh1aWQsIG9mZnNldCwgZGF0YV9sZW5ndGgsIHBfcmVhZF9kYXRhKTsKKyAgICAgY2FzZSBQQUxfUFNfR0VUX0lORk86CisgICAgICAgICB1aWQgPSB2YV9hcmcodmFsaXN0LCBwc2FfcHNfdWlkX3QpOworICAgICAgICAgcHNfcF9pbmZvID0gdmFfYXJnKHZhbGlzdCwgc3RydWN0IHBzYV9wc19pbmZvX3QqKTsKKyAgICAgICAgIHJldHVybiBwc2FfcHNfZ2V0X2luZm8odWlkLCBwc19wX2luZm8pOworICAgICBjYXNlIFBBTF9QU19SRU1PVkU6CisgICAgICAgICB1aWQgPSB2YV9hcmcodmFsaXN0LCBwc2FfcHNfdWlkX3QpOworICAgICAgICAgcmV0dXJuIHBzYV9wc19yZW1vdmUodWlkKTsKKyAgICAgY2FzZSBQQUxfUFNfQ1JFQVRFOgorICAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX3BzX3VpZF90KTsKKyAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCB1aW50MzJfdCk7CisgICAgICAgICBwc19jcmVhdGVfZmxhZ3MgPSB2YV9hcmcodmFsaXN0LCBwc2FfcHNfY3JlYXRlX2ZsYWdzX3QpOworICAgICAgICAgcmV0dXJuIHBzYV9wc19jcmVhdGUodWlkLCBzaXplLCBwc19jcmVhdGVfZmxhZ3MpOworICAgICBjYXNlIFBBTF9QU19TRVRfRVhURU5ERUQ6CisgICAgICAgICB1aWQgPSB2YV9hcmcodmFsaXN0LCBwc2FfcHNfdWlkX3QpOworICAgICAgICAgb2Zmc2V0ID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QpOworICAgICAgICAgZGF0YV9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCB1aW50MzJfdCk7CisgICAgICAgICBwX3dyaXRlX2RhdGEgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB2b2lkKik7CisgICAgICAgICByZXR1cm4gcHNhX3BzX3NldF9leHRlbmRlZCh1aWQsIG9mZnNldCwgZGF0YV9sZW5ndGgsIHBfd3JpdGVfZGF0YSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFBBTF9TVEFUVVNfVU5TVVBQT1JURURfRlVOQzsKKyAgICB9CisKKyAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvcGFsX3Byb3RlY3RlZF9zdG9yYWdlX2ludGYuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9pbnRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3ZTVmYwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9pbnRmLmgKQEAgLTAsMCArMSwzMyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2lmbmRlZiBfUEFMX1BST1RFQ1RFRF9TVE9SQUdFX0lOVEZfSF8KKyNkZWZpbmUgX1BBTF9QUk9URUNURURfU1RPUkFHRV9JTlRGX0hfCisKKyNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisKK2VudW0gcHNfZnVuY3Rpb25fY29kZSB7CisgICAgUEFMX1BTX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisgICAgUEFMX1BTX0dFVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisgICAgUEFMX1BTX0dFVF9JTkZPICAgICAgICAgICAgICAgICAgICAgPSAweDMsCisgICAgUEFMX1BTX1JFTU9WRSAgICAgICAgICAgICAgICAgICAgICAgPSAweDQsCisgICAgUEFMX1BTX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgPSAweDUsCisgICAgUEFMX1BTX1NFVF9FWFRFTkRFRCAgICAgICAgICAgICAgICAgPSAweDYsCit9OworCit1aW50MzJfdCBwYWxfcHNfZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KTsKKyNlbmRpZiAvKiBfUEFMX1BST1RFQ1RFRF9TVE9SQUdFX0lOVEZfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3Mvc3BlL3BhbF9kcml2ZXJfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL3NwZS9wYWxfZHJpdmVyX2ludGYuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpjb3B5IGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9zcGUvcGFsX2RyaXZlcl9pbnRmLmMKY29weSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2Evc3BlL3BhbF9kcml2ZXJfaW50Zi5jCmluZGV4IGY4MGU4MmQuLmNjOGI1MzcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3Mvc3BlL3BhbF9kcml2ZXJfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9zcGUvcGFsX2RyaXZlcl9pbnRmLmMKQEAgLTEsNSArMSw1IEBACiAgLyoqIEBmaWxlCi0gICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICAqCiAgICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL3NwZS9wYWxfZHJpdmVyX2ludGYuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9zcGUvcGFsX2RyaXZlcl9pbnRmLmgKc2ltaWxhcml0eSBpbmRleCA5NCUKY29weSBmcm9tIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3Mvc3BlL3BhbF9kcml2ZXJfaW50Zi5oCmNvcHkgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL3NwZS9wYWxfZHJpdmVyX2ludGYuaAppbmRleCBiNmVkMmFiLi5kYTg1YTYzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL3NwZS9wYWxfZHJpdmVyX2ludGYuaAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2Evc3BlL3BhbF9kcml2ZXJfaW50Zi5oCkBAIC0xLDUgKzEsNSBAQAogIC8qKiBAZmlsZQotICAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAgKgogICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL3RhcmdldC5jZmcgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvdGFyZ2V0LmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzBmMzBhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL3RhcmdldC5jZmcKQEAgLTAsMCArMSw2MSBAQAorLy8vKiogQGZpbGUKKy8vICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisvLyAqCisvLyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8gKgorLy8gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLyAqCisvLyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyoqLworCisvLyBVQVJUIGRldmljZSBpbmZvCit1YXJ0Lm51bT0xOwordWFydC4wLmJhc2UgPSAweDQwMTAyMDAwOyAvLyBVQVJUMV9OUwordWFydC4wLnNpemUgPSAweEZGRjsKK3VhcnQuMC5pbnRyX2lkID0gMHhGRjsKK3VhcnQuMC5wZXJtaXNzaW9uID0gVFlQRV9SRUFEX1dSSVRFOworCisvLyBXYXRjaGRvZyBkZXZpY2UgaW5mbword2F0Y2hkb2cubnVtID0gMTsKK3dhdGNoZG9nLjAuYmFzZSA9IDB4NDAwODEwMDA7Cit3YXRjaGRvZy4wLnNpemUgPSAweEZGRjsKK3dhdGNoZG9nLjAuaW50cl9pZCA9IDB4RkY7Cit3YXRjaGRvZy4wLnBlcm1pc3Npb24gPSBUWVBFX1JFQURfV1JJVEU7Cit3YXRjaGRvZy4wLm51bV9vZl90aWNrX3Blcl9taWNyb19zZWMgPSAweDM7ICAgICAgICAgLy8oc3lzX2ZlcS8xMDAwMDAwKQord2F0Y2hkb2cuMC50aW1lb3V0X2luX21pY3JvX3NlY19sb3cgPSAweEY0MjQwOyAgICAgIC8vMS4wICBzZWMgOiAgMSAqIDEwMDAgKiAxMDAwCit3YXRjaGRvZy4wLnRpbWVvdXRfaW5fbWljcm9fc2VjX21lZGl1bSA9IDB4MUU4NDgwOyAgLy8yLjAgIHNlYyA6ICAyICogMTAwMCAqIDEwMDAKK3dhdGNoZG9nLjAudGltZW91dF9pbl9taWNyb19zZWNfaGlnaCA9IDB4NEM0QjQwOyAgICAvLzUuMCAgc2VjIDogIDUgKiAxMDAwICogMTAwMAord2F0Y2hkb2cuMC50aW1lb3V0X2luX21pY3JvX3NlY19jcnlwdG8gPSAweDEzMTJEMDA7IC8vMTguMCBzZWMgOiAxOCAqIDEwMDAgKiAxMDAwCisKKy8vIFJhbmdlIG9mIDFLQiBOb24tdm9sYXRpbGUgbWVtb3J5IHRvIHByZXNlcnZlIGRhdGEgb3ZlciByZXNldC4gRXgsIE5WUkFNIGFuZCBGTEFTSAorbnZtZW0ubnVtID0xOworbnZtZW0uMC5zdGFydCA9IDB4MjAwMTEwMDA7Citudm1lbS4wLmVuZCA9IDB4MjAwMTEzRkY7Citudm1lbS4wLnBlcm1pc3Npb24gPSBUWVBFX1JFQURfV1JJVEU7CisKKy8vKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLy8qICMgRm9sbG93aW5nIFRhcmdldCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXJlIHJlcXVpcmVkIGZvciBsb2FkaW5nICAgICAgICAgICAjCisvLyogIyB0ZXN0cyBzZXJpYWxseS4gQXZvaWQgdXBkYXRpbmcgdGhlbSBpZiB5b3UgYXJlIHVzaW5nIC0tYXJjaGl2ZS10ZXN0cyBvcHRpb24uICMKKy8vKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisvLyBNaXNjZWxsYW5lb3VzIC0gVGVzdCBzY2F0dGVyIGluZm8KK2R1dC5udW0gPSAxOworCisvLyBTdGFydCBhZGRyZXNzIG9mIDEwS0IgTlMgbWVtb3J5IGZvciB0ZXN0IEVMRgorZHV0LjAubnNfdGVzdF9hZGRyID0gMHgyODExMDAwMDsKKworLy8gU3RhcnQgYWRkcmVzcyBvZiBjb21iaW5lX3Rlc3RfYmluYXJ5IGluIG1lbW9yeS4gTWVtb3J5IGNhbiBiZSBtYWluIG1lbW9yeSBvciBzZWNvbmRhcnkgbWVtb3J5LgorLy8gU2l6ZSBvZiBjb21iaW5lX3Rlc3RfYmluYXJ5ID0gU3VtbWF0aW9uIG9mIHNpemUgb2YgZWFjaCB0ZXN0IEVMRiBmaWxlLgorZHV0LjAubnNfc3RhcnRfYWRkcl9vZl9jb21iaW5lX3Rlc3RfYmluYXJ5ID0gMHgyODEyMDAwMDsKKworLy8gSXMgY29tYmluZV90ZXN0X2JpbmFyeSBhdmFpbGFibGUgaW4gUkFNPworZHV0LjAuY29tYmluZV90ZXN0X2JpbmFyeV9pbl9yYW0gPSBBVkFJTEFCTEU7CisKK2R1dC4wLmltcGxlbWVudGVkX3BzYV9maXJtd2FyZV9pc29sYXRpb25fbGV2ZWwgPSBMRVZFTDE7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL01ha2VmaWxlIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDYzJQpjb3B5IGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9NYWtlZmlsZQpjb3B5IHRvIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvTWFrZWZpbGUKaW5kZXggZGEyZjA4OS4uMjc4NDdjYyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9NYWtlZmlsZQorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotIyAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICMgKgogIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTYsMjAgKzE2LDQ4IEBACiAKIGluY2x1ZGUgJChTT1VSQ0UpL3Rvb2xzL21ha2VmaWxlcy90b29sY2hhaW4ubWsKIAotIyBMb2NhbCBQQUwgTWFrZSB2YXJpYWJsZQorIyBNYWtlIHZhcmlhYmxlcyB0byBzZWxlY3QgY29ycmVjdCBpbnN0YW5jZXMgb2YgUEFMIGZpbGVzCisKICMjIFBTQV9JUENfSU1QTEVNRU5URUQgbXVzdCBiZSB0cnVlIGZvciBJUEMgU1VJVEUKIFBTQV9JUENfSU1QTEVNRU5URUQ6PTEKIAogIyMgUFNBX0NSWVBUT19JTVBMRU1FTlRFRCBtdXN0IGJlIHRydWUgZm9yIENSWVBUTyBTVUlURQotUFNBX0NSWVBUT19JTVBMRU1FTlRFRDo9MQorUFNBX0NSWVBUT19JTVBMRU1FTlRFRDo9MAogCi0jIFBBTCBDIHNvdXJjZSBmaWxlcyBwYXJ0IG9mIE5TUEUgbGlicmFyeQotU1JDX0NfTlNQRT0gcGFsX2RyaXZlcl9uc19pbnRmLmMKKyMjIFBTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCBtdXN0IGJlIHRydWUgZm9yIFBST1RFQ1RFRF9TVE9SQUdFIFNVSVRFCitQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQ6PTAKKworIyMgUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCBtdXN0IGJlIHRydWUgZm9yIElOVEVSTkFMX1RSVVNURURfU1RPUkFHRSBTVUlURQorUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRDo9MAorCisjIyBQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRCBtdXN0IGJlIHRydWUgZm9yIElOSVRJQUxfQVRURVNUQVRJT04gU1VJVEUKK1BTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEOj0wCisKKyMgTWFrZSB2YXJpYWJsZXMgaG9sZGluZyBOU1BFL1NQRSBzb3VyY2UgZmlsZXMKKworIyMgUEFMIEMgc291cmNlIGZpbGVzIHBhcnQgb2YgTlNQRSBsaWJyYXJ5CitTUkNfQ19OU1BFPQorCisjIyBQQUwgQVNNIHNvdXJjZSBmaWxlcyBwYXJ0IG9mIE5TUEUgbGlicmFyeQorU1JDX0FTTV9OU1BFPQorCisjIyBQQUwgQyBzb3VyY2UgZmlsZXMgcGFydCBvZiBTUEUgbGlicmFyeSAtIGRyaXZlciBwYXJ0aXRpb24KK1NSQ19DX0RSSVZFUl9TUD0KKworIyMgUEFMIEFTTSBzb3VyY2UgZmlsZXMgcGFydCBvZiBTUEUgbGlicmFyeSAtIGRyaXZlciBwYXJ0aXRpb24KK1NSQ19BU01fRFJJVkVSX1NQPQogCiBpZmVxICgke1BTQV9JUENfSU1QTEVNRU5URUR9LDEpCisjIFdoZW4gUFNBX0lQQ19JTVBMRU1FTlRFRD0xLCBkcml2ZXIgZnVuY3Rpb25hbGl0aWVzIGFyZSBpbXBsZW1lbnRlZCBhcyBSb1Qtc2VydmljZXMKKyMgYW5kIHNlY3VyZSBhbmQgbm9uLXNlY3VyZSBjbGllbnRzIHdpbGwgY2FsbCB0byB0aGVzZSBSb1Qtc2VydmljZXMgdG8gZ2V0IGFwcHJvcHJpYXRlIGRyaXZlciBzZXJ2aWNlcy4KIFNSQ19DX05TUEUgKz0gcGFsX2NsaWVudF9hcGlfaW50Zi5jCiBTUkNfQ19OU1BFICs9IHBhbF9kcml2ZXJfaXBjX2ludGYuYworCisjIERyaXZlciBmaWxlcyB3aWxsIGJlIGNvbXBpbGVkIGFzIHBhcnQgb2YgZHJpdmVyIHBhcnRpdGlvbgorU1JDX0NfRFJJVkVSX1NQICs9IHBhbF9kcml2ZXJfaW50Zi5jIHBhbF9udm1lbS5jIHBhbF91YXJ0LmMgcGFsX3dkX2Ntc2RrLmMKIGVsc2UKKworIyBXaGVuIFBTQV9JUENfSU1QTEVNRU5URUQ9MCwgZHJpdmVyIGZpbGVzIHdpbGwgYmUgY29tcGlsZWQgYXMgcGFydCBvZiBOU1BFCiBTUkNfQ19OU1BFICs9IHBhbF9jbGllbnRfYXBpX2VtcHR5X2ludGYuYwogU1JDX0NfTlNQRSArPSBwYWxfZHJpdmVyX25zX2ludGYuYyBwYWxfbnZtZW0uYyBwYWxfdWFydC5jIHBhbF93ZF9jbXNkay5jCiBlbmRpZgpAQCAtNDAsMTUgKzY4LDIzIEBACiBTUkNfQ19OU1BFICs9IHBhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCiBlbmRpZgogCi0jIFBBTCBBU00gc291cmNlIGZpbGVzIHBhcnQgb2YgTlNQRSBsaWJyYXJ5Ci1TUkNfQVNNX05TUEU9CitpZmVxICgke1BTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRH0sMSkKK1NSQ19DX05TUEUgKz0gcGFsX3Byb3RlY3RlZF9zdG9yYWdlX2ludGYuYworZWxzZQorU1JDX0NfTlNQRSArPSBwYWxfcHJvdGVjdGVkX3N0b3JhZ2VfZW1wdHlfaW50Zi5jCitlbmRpZgogCi0jIFBBTCBDIHNvdXJjZSBmaWxlcyBwYXJ0IG9mIFNQRSBsaWJyYXJ5IC0gZHJpdmVyIHBhcnRpdGlvbgotU1JDX0NfRFJJVkVSX1NQPSBwYWxfZHJpdmVyX2ludGYuYyBwYWxfbnZtZW0uYyBwYWxfdWFydC5jIHBhbF93ZF9jbXNkay5jCitpZmVxICgke1BTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URUR9LDEpCitTUkNfQ19OU1BFICs9IHBhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfaW50Zi5jCitlbHNlCitTUkNfQ19OU1BFICs9IHBhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfZW1wdHlfaW50Zi5jCitlbmRpZgogCi0jIFBBTCBBU00gc291cmNlIGZpbGVzIHBhcnQgb2YgU1BFIGxpYnJhcnkgLSBkcml2ZXIgcGFydGl0aW9uCi1TUkNfQVNNX0RSSVZFUl9TUD0KLQoraWZlcSAoJHtQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRH0sMSkKK1NSQ19DX05TUEUgKz0gcGFsX2F0dGVzdGF0aW9uX2ludGYuYworZWxzZQorU1JDX0NfTlNQRSArPSBwYWxfYXR0ZXN0YXRpb25fZW1wdHlfaW50Zi5jCitlbmRpZgogCiBJTkNMVURFPSAtSSQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS9uc3BlIFwKICAgICAgICAgIC1JJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL3NwZSBcCkBAIC0xMDEsNyArMTM3LDcgQEAKIAogIyBHZW5lcmF0ZWQgJV9kcml2ZXJfc3AubyhzKSBhcmUgdXNlZCBpbiBzcGJ1aWxkLm1rIHRvIGNyZWF0ZSBmaW5hbCBkcml2ZXJfcGFydGl0aW9uLmEKICQoQlVJTEQpL3BsYXRmb3JtL3NwZS8lX2RyaXZlcl9zcC5vIDogJS5jCi0JJChDQykgJChJTkNMVURFKSAtbyAkQCAtYyAkPAorCSQoQ0MpICQoSU5DTFVERSkgLURTUEVfQlVJTEQgLW8gJEAgLWMgJDwKIAogJChCVUlMRCkvcGxhdGZvcm0vc3BlLyVfZHJpdmVyX3NwLm8gOiAlLnMKIAkkKEFTKSAkKElOQ0xVREUpIC1vICRAICQ8CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL21hbmlmZXN0cy9jb21tb24vZHJpdmVyX3BhcnRpdGlvbl9wc2EuanNvbiBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uCnNpbWlsYXJpdHkgaW5kZXggNzclCmNvcHkgZnJvbSBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL21hbmlmZXN0cy9jb21tb24vZHJpdmVyX3BhcnRpdGlvbl9wc2EuanNvbgpjb3B5IHRvIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uCmluZGV4IDEyZGQxOGIuLjVkNTc1NzEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uCkBAIC0xLDEzICsxLDEzIEBACiB7CiAgICJwc2FfZnJhbWV3b3JrX3ZlcnNpb24iOiAxLjAsCiAgICJuYW1lIjogIkRSSVZFUl9QQVJUSVRJT04iLAotICAidHlwZSI6ICJBUFBMSUNBVElPTi1ST1QiLAorICAidHlwZSI6ICJQU0EtUk9UIiwKICAgInByaW9yaXR5IjogIk5PUk1BTCIsCiAgICJpZCI6ICIweDAwMDAwMDAzIiwKICAgImRlc2NyaXB0aW9uIjogIkltcGxlbWVudHMgZGV2aWNlIHNlcnZpY2VzIHN1Y2ggcHJpbnQsIGZsYXNoIHJlYWQvd3JpdGUsLiBldGMuIiwKICAgImVudHJ5X3BvaW50IjogImRyaXZlcl9tYWluIiwKICAgInN0YWNrX3NpemUiOiAiMHg0MDAiLAotICAiaGVhcF9zaXplIjogIjB4NDAwIiwKKyAgImhlYXBfc2l6ZSI6ICIweDEwMCIsCiAgICJzZXJ2aWNlcyI6IFt7CiAgICAgICAibmFtZSI6ICJEUklWRVJfVUFSVF9TSUQiLAogICAgICAgInNpZCI6ICIweDAwMDBGQzAxIiwKQEAgLTMzLDkgKzMzLDkgQEAKICAgICAgICJtaW5vcl9wb2xpY3kiOiAiUkVMQVhFRCIKICAgICB9LAogICAgIHsKLSAgICAgICJuYW1lIjogIkRSSVZFUl9UQVJHRVRfSU5JVF9TSUQiLAorICAgICAgIm5hbWUiOiAiVEVTVF9JTlRSX1NJRCIsCiAgICAgICAic2lkIjogIjB4MDAwMEZDMDQiLAotICAgICAgInNpZ25hbCI6ICJEUklWRVJfVEFSR0VUX0lOSVRfU0lHIiwKKyAgICAgICJzaWduYWwiOiAiVEVTVF9JTlRSX1NJRyIsCiAgICAgICAibm9uX3NlY3VyZV9jbGllbnRzIjogdHJ1ZSwKICAgICAgICJtaW5vcl92ZXJzaW9uIjogMSwKICAgICAgICJtaW5vcl9wb2xpY3kiOiAiUkVMQVhFRCIKQEAgLTQ1LDIwICs0NSwzMiBAQAogICAgIHsKICAgICAgICJuYW1lIjogIlVBUlRfUkVHSU9OIiwKICAgICAgICJiYXNlIjogIjB4NDAwMDQwMDAiLAotICAgICAgInNpemUiOiAiMHhGRkYiLAorICAgICAgInNpemUiOiAiMHgxMDAwIiwKICAgICAgICJwZXJtaXNzaW9uIjogIlJFQUQtV1JJVEUiCiAgICAgfSwKICAgICB7CiAgICAgICAibmFtZSI6ICJXQVRDSERPR19SRUdJT04iLAogICAgICAgImJhc2UiOiAiMHg0MDAwODAwMCIsCi0gICAgICAic2l6ZSI6ICIweEZGRiIsCisgICAgICAic2l6ZSI6ICIweDEwMDAiLAogICAgICAgInBlcm1pc3Npb24iOiAiUkVBRC1XUklURSIKICAgICB9LAogICAgIHsKICAgICAgICJuYW1lIjogIk5WTUVNX1JFR0lPTiIsCiAgICAgICAiYmFzZSI6ICIweDIwMDJGMDAwIiwKLSAgICAgICJzaXplIjogIjB4RkZGIiwKKyAgICAgICJzaXplIjogIjB4NDAwIiwKICAgICAgICJwZXJtaXNzaW9uIjogIlJFQUQtV1JJVEUiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJEUklWRVJfUEFSVElUSU9OX01NSU8iLAorICAgICAgImJhc2UiOiAiMHgyMDBBRjA0MCIsCisgICAgICAic2l6ZSI6ICIweDIwIiwKKyAgICAgICJwZXJtaXNzaW9uIjogIlJFQUQtV1JJVEUiCisgICAgfQorICBdLAorICAiaXJxcyI6IFsKKyAgICB7CisgICAgICAgInNpZ25hbCI6ICJEUklWRVJfVUFSVF9JTlRSX1NJRyIsCisgICAgICAgImxpbmVfbnVtIjogMTcKICAgICB9CiAgIF0sCiAgICJsaW5rZXJfcGF0dGVybiI6IHsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbWFuaWZlc3RzL2lwYy9jbGllbnRfcGFydGl0aW9uX3BzYS5qc29uIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24Kc2ltaWxhcml0eSBpbmRleCA4MCUKY29weSBmcm9tIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbWFuaWZlc3RzL2lwYy9jbGllbnRfcGFydGl0aW9uX3BzYS5qc29uCmNvcHkgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24KaW5kZXggYTJhMmNlNS4uMDgxZGM5NSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24KKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24KQEAgLTcsNyArNyw3IEBACiAgICJkZXNjcmlwdGlvbiI6ICJDbGllbnQgcGFydGl0aW9uIGV4ZWN1dGluZyBjbGllbnQgdGVzdCBmdW5jIGZyb20gU1BFIiwKICAgImVudHJ5X3BvaW50IjogImNsaWVudF9tYWluIiwKICAgInN0YWNrX3NpemUiOiAiMHg0MDAiLAotICAiaGVhcF9zaXplIjogIjB4NDAwIiwKKyAgImhlYXBfc2l6ZSI6ICIweDEwMCIsCiAgICJzZXJ2aWNlcyI6IFt7CiAgICAgICAibmFtZSI6ICJDTElFTlRfVEVTVF9ESVNQQVRDSEVSX1NJRCIsCiAgICAgICAic2lkIjogIjB4MDAwMEZBMDEiLApAQCAtMjAsNiArMjAsNyBAQAogICAiZGVwZW5kZW5jaWVzIjogWwogICAgICJEUklWRVJfVUFSVF9TSUQiLAogICAgICJEUklWRVJfTlZNRU1fU0lEIiwKKyAgICAiVEVTVF9JTlRSX1NJRCIsCiAgICAgIlNFUlZFUl9URVNUX0RJU1BBVENIRVJfU0lEIiwKICAgICAiU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQiLAogICAgICJTRVJWRVJfU1RSSUNUX01JTk9SX1ZFUlNJT05fU0lEIiwKQEAgLTI3LDYgKzI4LDE0IEBACiAgICAgIlNFUlZFUl9TRUNVUkVfQ09OTkVDVF9PTkxZX1NJRCIsCiAgICAgIlNFUlZFUl9DT05ORUNUSU9OX0RST1BfU0lEIgogICBdLAorICAibW1pb19yZWdpb25zIiA6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJDTElFTlRfUEFSVElUSU9OX01NSU8iLAorICAgICAgImJhc2UiOiAiMHgyMDBBRjAwMCIsCisgICAgICAic2l6ZSI6ICIweDIwIiwKKyAgICAgICJwZXJtaXNzaW9uIjogIlJFQUQtV1JJVEUiCisgICAgfQorICAgXSwKICAgImxpbmtlcl9wYXR0ZXJuIjogewogICAgICJvYmplY3RfbGlzdCI6IFsKICAgICAiY2xpZW50X3BhcnRpdGlvbi5hIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9tYW5pZmVzdHMvaXBjL3NlcnZlcl9wYXJ0aXRpb25fcHNhLmpzb24gYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L21hbmlmZXN0cy9pcGMvc2VydmVyX3BhcnRpdGlvbl9wc2EuanNvbgpzaW1pbGFyaXR5IGluZGV4IDk4JQpjb3B5IGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9tYW5pZmVzdHMvaXBjL3NlcnZlcl9wYXJ0aXRpb25fcHNhLmpzb24KY29weSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L21hbmlmZXN0cy9pcGMvc2VydmVyX3BhcnRpdGlvbl9wc2EuanNvbgppbmRleCAxNjdmYWEwLi4zNTQxMzg3IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL21hbmlmZXN0cy9pcGMvc2VydmVyX3BhcnRpdGlvbl9wc2EuanNvbgorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L21hbmlmZXN0cy9pcGMvc2VydmVyX3BhcnRpdGlvbl9wc2EuanNvbgpAQCAtNyw3ICs3LDcgQEAKICAgImRlc2NyaXB0aW9uIjogIlNlcnZlciBwYXJ0aXRpb24gZXhlY3V0aW5nIHNlcnZlciB0ZXN0IGZ1bmMiLAogICAiZW50cnlfcG9pbnQiOiAic2VydmVyX21haW4iLAogICAic3RhY2tfc2l6ZSI6ICIweDQwMCIsCi0gICJoZWFwX3NpemUiOiAiMHg0MDAiLAorICAiaGVhcF9zaXplIjogIjB4MTAwIiwKICAgInNlcnZpY2VzIjogW3sKICAgICAgICJuYW1lIjogIlNFUlZFUl9URVNUX0RJU1BBVENIRVJfU0lEIiwKICAgICAgICJzaWQiOiAiMHgwMDAwRkIwMSIsCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2F0dGVzdGF0aW9uX2VtcHR5X2ludGYuYwpzaW1pbGFyaXR5IGluZGV4IDc0JQpjb3B5IGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCmNvcHkgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9hdHRlc3RhdGlvbl9lbXB0eV9pbnRmLmMKaW5kZXggMTQ2NDllOS4uZmFmM2Y0OSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfYXR0ZXN0YXRpb25fZW1wdHlfaW50Zi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsMTcgKzE1LDE2IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0KKyNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlICJwYWxfY29tbW9uLmgiCi0jaW5jbHVkZSAicGFsX2NyeXB0b19pbnRmLmgiCiAKIC8qKgotICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGNyeXB0byBmdW5jdGlvbgorICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGF0dGVzdGF0aW9uIGZ1bmN0aW9uCiAgICAgQHBhcmFtICAgIC0gdHlwZSAgICA6IGZ1bmN0aW9uIGNvZGUKICAgICAgICAgICAgICAgICB2YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdAogICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cwogKiovCi1wc2Ffc3RhdHVzX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCitpbnQzMl90IHBhbF9hdHRlc3RhdGlvbl9mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCiB7Ci0gICAgcmV0dXJuIFBBTF9TVEFUVVNfVU5TVVBQT1JURURfRlVOQzsKKyAgICByZXR1cm4gUEFMX1NUQVRVU19FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfYXR0ZXN0YXRpb25faW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4ZWEwNwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfYXR0ZXN0YXRpb25faW50Zi5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKworI2luY2x1ZGUgInBhbF9hdHRlc3RhdGlvbl9pbnRmLmgiCisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGF0dGVzdGF0aW9uIGZ1bmN0aW9uCisgICAgQHBhcmFtICAgIC0gdHlwZSAgICA6IGZ1bmN0aW9uIGNvZGUKKyAgICAgICAgICAgICAgICB2YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdAorICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cworKiovCitpbnQzMl90IHBhbF9hdHRlc3RhdGlvbl9mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCit7CisgICAgdWludDhfdCAgICAgKmNoYWxsZW5nZSwgKnRva2VuOworICAgIHNpemVfdCAgICAgIGNoYWxsZW5nZV9zaXplLCAqdG9rZW5fc2l6ZTsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgUEFMX0lOSVRJQUxfQVRURVNUX0dFVF9UT0tFTjoKKyAgICAgICAgICAgIGNoYWxsZW5nZSA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIGNoYWxsZW5nZV9zaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIHRva2VuID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgdG9rZW5fc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9pbml0aWFsX2F0dGVzdF9nZXRfdG9rZW4oY2hhbGxlbmdlLCBjaGFsbGVuZ2Vfc2l6ZSwgdG9rZW4sIHRva2VuX3NpemUpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFBBTF9TVEFUVVNfVU5TVVBQT1JURURfRlVOQzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2F0dGVzdGF0aW9uX2ludGYuaApzaW1pbGFyaXR5IGluZGV4IDYyJQpjb3B5IGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCmNvcHkgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmgKaW5kZXggMTQ2NDllOS4uZWViYjUxNCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfYXR0ZXN0YXRpb25faW50Zi5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsMTcgKzE1LDE0IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCisjaWZuZGVmIF9QQUxfSU5JVElBTF9BVFRFU1RBVElPTl9IXworI2RlZmluZSBfUEFMX0lOSVRJQUxfQVRURVNUQVRJT05fSF8KIAogI2luY2x1ZGUgInBhbF9jb21tb24uaCIKLSNpbmNsdWRlICJwYWxfY3J5cHRvX2ludGYuaCIKIAotLyoqCi0gICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgY3J5cHRvIGZ1bmN0aW9uCi0gICAgQHBhcmFtICAgIC0gdHlwZSAgICA6IGZ1bmN0aW9uIGNvZGUKLSAgICAgICAgICAgICAgICB2YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdAotICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cwotKiovCi1wc2Ffc3RhdHVzX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCi17Ci0gICAgcmV0dXJuIFBBTF9TVEFUVVNfVU5TVVBQT1JURURfRlVOQzsKLX0KK2VudW0gYXR0ZXN0YXRpb25fZnVuY3Rpb25fY29kZSB7CisgICAgUEFMX0lOSVRJQUxfQVRURVNUX0dFVF9UT0tFTiAgICAgICAgPSAweDEsCit9OworCitpbnQzMl90IHBhbF9hdHRlc3RhdGlvbl9mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpOworI2VuZGlmIC8qIF9QQUxfSU5JVElBTF9BVFRFU1RBVElPTl9IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jbGllbnRfYXBpX2VtcHR5X2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY2xpZW50X2FwaV9lbXB0eV9pbnRmLmMKc2ltaWxhcml0eSBpbmRleCA5NiUKY29weSBmcm9tIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY2xpZW50X2FwaV9lbXB0eV9pbnRmLmMKY29weSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2NsaWVudF9hcGlfZW1wdHlfaW50Zi5jCmluZGV4IDhlMmFhMjIuLjU3OGI0Y2UgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY2xpZW50X2FwaV9lbXB0eV9pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jbGllbnRfYXBpX2VtcHR5X2ludGYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE3LDcgKzE3LDYgQEAKIAogI2luY2x1ZGUgInBhbF9jb21tb24uaCIKICNpbmNsdWRlICJwYWxfY2xpZW50X2FwaV9pbnRmLmgiCi0jaW5jbHVkZSAicGFsX3NpZC5oIgogCiAvKioKICAqIEBicmllZiAtIFJldHJpZXZlIHRoZSB2ZXJzaW9uIG9mIHRoZSBQU0EgRnJhbWV3b3JrIEFQSSB0aGF0IGlzIGltcGxlbWVudGVkLgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jbGllbnRfYXBpX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY2xpZW50X2FwaV9pbnRmLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKY29weSBmcm9tIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY2xpZW50X2FwaV9pbnRmLmMKY29weSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2NsaWVudF9hcGlfaW50Zi5jCmluZGV4IDIxMzUwZWEuLjIwZGRkMTEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY2xpZW50X2FwaV9pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jbGllbnRfYXBpX2ludGYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE3LDcgKzE3LDYgQEAKIAogI2luY2x1ZGUgInBhbF9jb21tb24uaCIKICNpbmNsdWRlICJwYWxfY2xpZW50X2FwaV9pbnRmLmgiCi0jaW5jbHVkZSAicGFsX3NpZC5oIgogCiAvKioKICAqIEBicmllZiAgIC0gUmV0cmlldmUgdGhlIHZlcnNpb24gb2YgdGhlIFBTQSBGcmFtZXdvcmsgQVBJIHRoYXQgaXMgaW1wbGVtZW50ZWQuCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2NsaWVudF9hcGlfaW50Zi5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jbGllbnRfYXBpX2ludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjU3NDFlCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jbGllbnRfYXBpX2ludGYuaApAQCAtMCwwICsxLDMyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZuZGVmIF9QQUxfQ0xJRU5UX0FQSV9IXworI2RlZmluZSBfUEFMX0NMSUVOVF9BUElfSF8KKworI2luY2x1ZGUgInBhbF9jb21tb24uaCIKKwordWludDMyX3QgcGFsX2lwY19mcmFtZXdvcmtfdmVyc2lvbih2b2lkKTsKK3VpbnQzMl90IHBhbF9pcGNfdmVyc2lvbih1aW50MzJfdCBzaWQpOworcHNhX2hhbmRsZV90IHBhbF9pcGNfY29ubmVjdCh1aW50MzJfdCBzaWQsIHVpbnQzMl90IG1pbm9yX3ZlcnNpb24pOworcHNhX3N0YXR1c190IHBhbF9pcGNfY2FsbChwc2FfaGFuZGxlX3QgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBzYV9pbnZlYyAqaW5fdmVjLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgcHNhX291dHZlYyAqb3V0X3ZlYywKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0X2xlbik7Cit2b2lkIHBhbF9pcGNfY2xvc2UocHNhX2hhbmRsZV90IGhhbmRsZSk7CisjZW5kaWYgLyogX1BBTF9DTElFTlRfQVBJX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NvbW1vbi5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jb21tb24uaApzaW1pbGFyaXR5IGluZGV4IDY0JQpjb3B5IGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jb21tb24uaApjb3B5IHRvIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY29tbW9uLmgKaW5kZXggNzlkYzdhMy4uZDVhY2IyZSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jb21tb24uaAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2NvbW1vbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjEsNiArMjEsMTIgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2lmbmRlZiBUQVJHRVRfQ0ZHX0JVSUxECisjaW5jbHVkZSAicGFsX2NvbmZpZy5oIgorI2VuZGlmCiAKIC8qIHR5cGVkZWYncyAqLwogdHlwZWRlZiB1aW50OF90ICAgICAgICAgICAgIGJvb2xfdDsKQEAgLTMwLDExICszNiwxMyBAQAogdHlwZWRlZiBjaGFyICAgICAgICAgICAgICAgIGNoYXI4X3Q7CiB0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAgY2ZnX2lkX3Q7CiAKKyNkZWZpbmUgUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DICAgICAgMHhGRgorCiB0eXBlZGVmIGVudW0KIHsKICAgICBQQUxfU1RBVFVTX1NVQ0NFU1MgPSAweDAsCiAgICAgUEFMX1NUQVRVU19FUlJPUiAgID0gMHg4MAotfXBhbF9zdGF0dXNfdDsKK30gcGFsX3N0YXR1c190OwogCiB0eXBlZGVmIGVudW0gewogICAgIE5WTUVNX1JFQUQgICAgICAgICAgICAgPSAweDEsCkBAIC01OSwxMyArNjcsMTQgQEAKICAgICBXRF9MT1dfVElNRU9VVCAgICAgID0gMHgxLAogICAgIFdEX01FRElVTV9USU1FT1VUICAgPSAweDIsCiAgICAgV0RfSElHSF9USU1FT1VUICAgICA9IDB4MywKKyAgICBXRF9DUllQVE9fVElNRU9VVCAgID0gMHg0LAogfSB3ZF90aW1lb3V0X3R5cGVfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIHdkX2ZuX3R5cGVfdCB3ZF9mbl90eXBlOwotICAgIGFkZHJfdCB3ZF9iYXNlX2FkZHI7Ci0gICAgdWludDMyX3Qgd2RfdGltZV91czsKLSAgICB1aW50MzJfdCB3ZF90aW1lcl90aWNrX3VzOworICAgIGFkZHJfdCAgICAgICB3ZF9iYXNlX2FkZHI7CisgICAgdWludDMyX3QgICAgIHdkX3RpbWVfdXM7CisgICAgdWludDMyX3QgICAgIHdkX3RpbWVyX3RpY2tfdXM7CiB9IHdkX3BhcmFtX3Q7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC03Myw0ICs4MiwzNiBAQAogICAgIFVBUlRfUFJJTlQgICAgICAgICAgICA9IDB4MiwKIH0gdWFydF9mbl90eXBlX3Q7CiAKKy8qCisgKiBSZWRlZmluaW5nIHNvbWUgb2YgdGhlIGNsaWVudC5oIGVsZW1lbnRzIGZvciBjb21waWxhdGlvbiB0byBnbyB0aHJvdWdoCisgKiB3aGVuIFBTQSBJUEMgQVBJcyBhcmUgbm90IGltcGxlbWVudGVkLgorICovCisjaWYgKFBTQV9JUENfSU1QTEVNRU5URUQgPT0gMCkKKworI2lmbmRlZiBQU0FfVkVSU0lPTl9OT05FCisjZGVmaW5lIFBTQV9WRVJTSU9OX05PTkUgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIFBTQV9TVUNDRVNTCisjZGVmaW5lIFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAoMCkKK3R5cGVkZWYgaW50MzJfdCBwc2Ffc3RhdHVzX3Q7CisjZW5kaWYKK3R5cGVkZWYgaW50MzJfdCBwc2FfaGFuZGxlX3Q7CisKKyNpZm5kZWYgUFNBX05VTExfSEFORExFCisjZGVmaW5lIFBTQV9OVUxMX0hBTkRMRSAgICAgICAgICAgICAoKHBzYV9oYW5kbGVfdCkwKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHBzYV9pbnZlYyB7CisgICAgY29uc3Qgdm9pZCAqYmFzZTsKKyAgICBzaXplX3QgbGVuOworfSBwc2FfaW52ZWM7CisKK3R5cGVkZWYgc3RydWN0IHBzYV9vdXR2ZWMgeworICAgIHZvaWQgKmJhc2U7CisgICAgc2l6ZV90IGxlbjsKK30gcHNhX291dHZlYzsKKworI2VuZGlmIC8qIFBTQV9JUENfSU1QTEVNRU5URUQgKi8KKwogI2VuZGlmIC8qIF9QQUxfQ09NTU9OX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2NvbmZpZy5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWEwZWM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jb25maWcuaApAQCAtMCwwICsxLDEwNCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2lmbmRlZiBfUEFMX0NPTkZJR19IXworI2RlZmluZSBfUEFMX0NPTkZJR19IXworCisvKgorICogTGlzdCBvZiBtYWNyb3MgdXNlZCBieSB0ZXN0IHN1aXRlCisgKi8KKyNpZiAhZGVmaW5lZChQU0FfSVBDX0lNUExFTUVOVEVEKQorI2RlZmluZSBQU0FfSVBDX0lNUExFTUVOVEVEIDAKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoUFNBX0NSWVBUT19JTVBMRU1FTlRFRCkKKyNkZWZpbmUgUFNBX0NSWVBUT19JTVBMRU1FTlRFRCAwCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFBTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQpCisjZGVmaW5lIFBTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQgMAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQpCisjZGVmaW5lIFBTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCAwCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFBTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEKQorI2RlZmluZSBQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRCAwCisjZW5kaWYKKworI2lmIChQU0FfSVBDX0lNUExFTUVOVEVEID09IDApICYmIFwKKyAgICAoUFNBX0NSWVBUT19JTVBMRU1FTlRFRCA9PSAwKSAmJiBcCisgICAgKFBTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQgPT0gMCkgJiYgXAorICAgIChQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQgPT0gMCkgJiYgXAorICAgIChQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRCA9PSAwKQorI2Vycm9yICJZb3UgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIG1hY3JvcyB0byBydW4gdGVzdCBzdWl0ZSIKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoVkVSQk9TRSkKKyNkZWZpbmUgVkVSQk9TRSA0IC8qIFByaW50IHZlcmJvc2l0eSA9IEVSUk9SICovCisjZW5kaWYKKworI2lmICghZGVmaW5lZChWQUxfTlNQRV9CVUlMRCkgJiYgIWRlZmluZWQoU1BFX0JVSUxEKSkKKyNkZWZpbmUgVkFMX05TUEVfQlVJTEQgMQorI2VuZGlmCisKKyNpZiAoIWRlZmluZWQoTk9OU0VDVVJFX1RFU1RfQlVJTEQpICYmICFkZWZpbmVkKFNQRV9CVUlMRCkpCisjZGVmaW5lIE5PTlNFQ1VSRV9URVNUX0JVSUxEIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoVEVTVF9DT01CSU5FX0FSQ0hJVkUpCisvLyNkZWZpbmUgVEVTVF9DT01CSU5FX0FSQ0hJVkUgLyogVGVzdCBkaXNwYXRjaGVyIGNvZGUgc2VsZWN0aW9uICovCisjZW5kaWYKKworLyoKKyAqIEluY2x1ZGUgb2YgUFNBIGRlZmluZWQgSGVhZGVyIGZpbGVzCisgKi8KKworI2lmIFBTQV9JUENfSU1QTEVNRU5URUQKKy8qIHBzYS9jbGllbnQuaDogQ29udGFpbnMgdGhlIFBTQSBDbGllbnQgQVBJIGVsZW1lbnRzICovCisjaW5jbHVkZSAicHNhL2NsaWVudC5oIgorCisvKgorICogcHNhX21hbmlmZXN0L3NpZC5oOiAgTWFjcm8gZGVmaW5pdGlvbnMgZGVyaXZlZCBmcm9tIG1hbmlmZXN0IGZpbGVzIHRoYXQgbWFwIGZyb20gUm9UIFNlcnZpY2UKKyAqIG5hbWVzIHRvIFNlcnZpY2UgSURzIChTSURzKS4gUGFydGl0aW9uIG1hbmlmZXN0IHBhcnNlIGJ1aWxkIHRvb2wgbXVzdCBwcm92aWRlIHRoZSBpbXBsZW1lbnRhdGlvbgorICogb2YgdGhpcyBmaWxlLgorKi8KKyNpbmNsdWRlICJwc2FfbWFuaWZlc3Qvc2lkLmgiCisjZW5kaWYKKworI2lmIFBTQV9DUllQVE9fSU1QTEVNRU5URUQKKy8qIHBzYS9jcnlwdG8uaDogQ29udGFpbnMgdGhlIFBTQSBDcnlwdG8gQVBJIGVsZW1lbnRzICovCisjaW5jbHVkZSAicHNhL2NyeXB0by5oIgorI2VuZGlmCisKKyNpZiBQU0FfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0lNUExFTUVOVEVECisvKiBwc2EvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLmg6IENvbnRhaW5zIHRoZSBQU0EgSVRTIEFQSSBlbGVtZW50cyAqLworI2luY2x1ZGUgInBzYS9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UuaCIKKyNlbmRpZgorCisjaWYgUFNBX1BST1RFQ1RFRF9TVE9SQUdFX0lNUExFTUVOVEVECisvKiBwc2EvcHJvdGVjdGVkX3N0b3JhZ2UuaDogQ29udGFpbnMgdGhlIFBTQSBQUyBBUEkgZWxlbWVudHMgKi8KKyNpbmNsdWRlICJwc2EvcHJvdGVjdGVkX3N0b3JhZ2UuaCIKKyNlbmRpZgorCisjaWYgUFNBX0lOSVRJQUxfQVRURVNUQVRJT05fSU1QTEVNRU5URUQKKy8qIHBzYS9pbml0aWFsX2F0dGVzdGF0aW9uLmg6IENvbnRhaW5zIHRoZSBQU0EgSW5pdGlhbCBBdHRlc3RhdGlvbiBBUEkgZWxlbWVudHMgKi8KKyNpbmNsdWRlICJwc2EvaW5pdGlhbF9hdHRlc3RhdGlvbi5oIgorI2VuZGlmCisKKyNlbmRpZiAvKiBfUEFMX0NPTkZJR19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCnNpbWlsYXJpdHkgaW5kZXggODElCmNvcHkgZnJvbSBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKY29weSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKaW5kZXggMTQ2NDllOS4uMmEyOGYzOSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDkgKzE1LDggQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLQorI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgInBhbF9jb21tb24uaCIKLSNpbmNsdWRlICJwYWxfY3J5cHRvX2ludGYuaCIKIAogLyoqCiAgICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgY3J5cHRvIGZ1bmN0aW9uCkBAIC0yNSw3ICsyNCw3IEBACiAgICAgICAgICAgICAgICAgdmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKICAgICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKICoqLwotcHNhX3N0YXR1c190IHBhbF9jcnlwdG9fZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KQoraW50MzJfdCBwYWxfY3J5cHRvX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKIHsKLSAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIHJldHVybiBQQUxfU1RBVFVTX0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jcnlwdG9faW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jcnlwdG9faW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMTdjZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2NyeXB0b19pbnRmLmMKQEAgLTAsMCArMSwzMzcgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKworI2luY2x1ZGUgInBhbF9jcnlwdG9faW50Zi5oIgorCisjZGVmaW5lICBQQUxfS0VZX1NMT1RfQ09VTlQgIDMyCisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGNyeXB0byBmdW5jdGlvbgorICAgIEBwYXJhbSAgICAtIHR5cGUgICAgOiBmdW5jdGlvbiBjb2RlCisgICAgICAgICAgICAgICAgdmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKKyAgICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKKyoqLworaW50MzJfdCBwYWxfY3J5cHRvX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBpOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIHNpemUsICpsZW5ndGgsIHNhbHRfbGVuZ3RoLCBsYWJlbF9sZW5ndGgsIGNpcGhlcnRleHRfc2l6ZTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAqYnVmZmVyLCAqY2lwaGVydGV4dDsKKyAgICBjb25zdCB1aW50OF90ICAgICAgICAgICAqc2FsdCwgKmxhYmVsLCAqbm9uY2UsICphZGRpdGlvbmFsX2RhdGE7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgKnBsYWludGV4dDsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBzdGF0dXM7CisgICAgY29uc3Qgdm9pZCAgICAgICAgICAgICAgKmV4dHJhOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGV4dHJhX3NpemUsIGNhcGFjaXR5LCAqZ2VuX2NhcCwgbm9uY2VfbGVuZ3RoLCBhZGRpdGlvbmFsX2RhdGFfbGVuZ3RoOworICAgIHBzYV9rZXlfaGFuZGxlX3QgICAgICAgIGhhbmRsZSwgKmtleV9oYW5kbGU7CisgICAgcHNhX2tleV90eXBlX3QgICAgICAgICAga2V5X3R5cGUsICprZXlfdHlwZV9vdXQ7CisgICAgcHNhX2tleV9wb2xpY3lfdCAgICAgICAgKnBvbGljeTsKKyAgICBwc2Ffa2V5X3VzYWdlX3QgICAgICAgICB1c2FnZSwgKnVzYWdlX291dDsKKyAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgICAgICAqbGlmZXRpbWVfb3V0OworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGFsZywgKmFsZ19vdXQ7CisgICAgcHNhX2hhc2hfb3BlcmF0aW9uX3QgICAgKmhhc2hfb3BlcmF0aW9uOworICAgIHBzYV9tYWNfb3BlcmF0aW9uX3QgICAgICptYWNfb3BlcmF0aW9uOworICAgIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgICpjaXBoZXJfb3BlcmF0aW9uOworICAgIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QgICpnZW5lcmF0b3I7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFBBTF9DUllQVE9fSU5JVDoKKyAgICAgICAgICAgIHJldHVybiBwc2FfY3J5cHRvX2luaXQoKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFTkVSQVRFX1JBTkRPTToKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9nZW5lcmF0ZV9yYW5kb20oYnVmZmVyLCBzaXplKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0lNUE9SVF9LRVk6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAga2V5X3R5cGUgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3R5cGVfdCk7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IHBzYV9pbXBvcnRfa2V5KGhhbmRsZSwga2V5X3R5cGUsIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fRVhQT1JUX0tFWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBidWZmZXIgPSAodWludDhfdCAqKSh2YV9hcmcodmFsaXN0LCB1aW50OF90KikpOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBsZW5ndGggPSAoc2l6ZV90ICopdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICBzdGF0dXMgPSBwc2FfZXhwb3J0X2tleShoYW5kbGUsIGJ1ZmZlciwgc2l6ZSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19FWFBPUlRfUFVCTElDX0tFWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBidWZmZXIgPSAodWludDhfdCAqKSh2YV9hcmcodmFsaXN0LCB1aW50OF90KikpOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBsZW5ndGggPSAoc2l6ZV90ICopdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICBzdGF0dXMgPSBwc2FfZXhwb3J0X3B1YmxpY19rZXkoaGFuZGxlLCBidWZmZXIsIHNpemUsIGxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fS0VZX1BPTElDWV9JTklUOgorICAgICAgICAgICAgcG9saWN5ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9wb2xpY3lfdCopOworICAgICAgICAgICAgcHNhX2tleV9wb2xpY3lfaW5pdChwb2xpY3kpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRToKKyAgICAgICAgICAgIHBvbGljeSA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfcG9saWN5X3QqKTsKKyAgICAgICAgICAgIHVzYWdlID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV91c2FnZV90KTsKKyAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7CisgICAgICAgICAgICBwc2Ffa2V5X3BvbGljeV9zZXRfdXNhZ2UocG9saWN5LCB1c2FnZSwgYWxnKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1k6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgcG9saWN5ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9wb2xpY3lfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9zZXRfa2V5X3BvbGljeShoYW5kbGUsIHBvbGljeSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19ERVNUUk9ZX0tFWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBzdGF0dXMgPSBwc2FfZGVzdHJveV9rZXkoaGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRVRfS0VZX0lORk9STUFUSU9OOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGtleV90eXBlX291dCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfdHlwZV90Kik7CisgICAgICAgICAgICBsZW5ndGggPSAoc2l6ZV90ICopdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICBzdGF0dXMgPSBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbihoYW5kbGUsIGtleV90eXBlX291dCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRVRfS0VZX1BPTElDWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBwb2xpY3kgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3BvbGljeV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2dldF9rZXlfcG9saWN5KGhhbmRsZSwgcG9saWN5KTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfR0VUX1VTQUdFOgorICAgICAgICAgICAgcG9saWN5ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9wb2xpY3lfdCopOworICAgICAgICAgICAgdXNhZ2Vfb3V0ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV91c2FnZV90Kik7CisgICAgICAgICAgICAqdXNhZ2Vfb3V0ID0gcHNhX2tleV9wb2xpY3lfZ2V0X3VzYWdlKHBvbGljeSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfR0VUX0FMR09SSVRITToKKyAgICAgICAgICAgIHBvbGljeSA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfcG9saWN5X3QqKTsKKyAgICAgICAgICAgIGFsZ19vdXQgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QqKTsKKyAgICAgICAgICAgICphbGdfb3V0ID0gcHNhX2tleV9wb2xpY3lfZ2V0X2FsZ29yaXRobShwb2xpY3kpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRVRfS0VZX0xJRkVUSU1FOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGxpZmV0aW1lX291dCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfbGlmZXRpbWVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9nZXRfa2V5X2xpZmV0aW1lKGhhbmRsZSwgbGlmZXRpbWVfb3V0KTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0hBU0hfU0VUVVA6CisgICAgICAgICAgICBoYXNoX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9oYXNoX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9oYXNoX3NldHVwKGhhc2hfb3BlcmF0aW9uLCBhbGcpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fSEFTSF9VUERBVEU6CisgICAgICAgICAgICBoYXNoX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9oYXNoX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfaGFzaF91cGRhdGUoaGFzaF9vcGVyYXRpb24sIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19IQVNIX1ZFUklGWToKKyAgICAgICAgICAgIGhhc2hfb3BlcmF0aW9uID0gdmFfYXJnKHZhbGlzdCwgcHNhX2hhc2hfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9oYXNoX3ZlcmlmeShoYXNoX29wZXJhdGlvbiwgYnVmZmVyLCBzaXplKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0hBU0hfRklOSVNIOgorICAgICAgICAgICAgaGFzaF9vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfaGFzaF9vcGVyYXRpb25fdCopOworICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfaGFzaF9maW5pc2goaGFzaF9vcGVyYXRpb24sIGJ1ZmZlciwgc2l6ZSwgbGVuZ3RoKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0hBU0hfQUJPUlQ6CisgICAgICAgICAgICBoYXNoX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9oYXNoX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2hhc2hfYWJvcnQoaGFzaF9vcGVyYXRpb24pOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fR0VORVJBVEVfS0VZOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGtleV90eXBlID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV90eXBlX3QpOworICAgICAgICAgICAgc2l6ZSAgICAgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgZXh0cmEgICAgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB2b2lkKik7CisgICAgICAgICAgICBleHRyYV9zaXplICA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICByZXR1cm4gcHNhX2dlbmVyYXRlX2tleShoYW5kbGUsIGtleV90eXBlLCBzaXplLCBleHRyYSwgZXh0cmFfc2l6ZSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRU5FUkFUT1JfUkVBRDoKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHZhX2FyZyh2YWxpc3QsIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QqKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9nZW5lcmF0b3JfcmVhZChnZW5lcmF0b3IsIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19LRVlfREVSSVZBVElPTjoKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHZhX2FyZyh2YWxpc3QsIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QqKTsKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgc2FsdCA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgICAgICBzYWx0X2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsYWJlbCA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgICAgICBsYWJlbF9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgY2FwYWNpdHkgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9rZXlfZGVyaXZhdGlvbihnZW5lcmF0b3IsIGhhbmRsZSwgYWxnLCBzYWx0LCBzYWx0X2xlbmd0aCwgbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbF9sZW5ndGgsIGNhcGFjaXR5KTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFVF9HRU5FUkFUT1JfQ0FQQUNJVFk6CisgICAgICAgICAgICBnZW5lcmF0b3IgPSB2YV9hcmcodmFsaXN0LCBwc2FfY3J5cHRvX2dlbmVyYXRvcl90Kik7CisgICAgICAgICAgICBnZW5fY2FwICAgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfZ2V0X2dlbmVyYXRvcl9jYXBhY2l0eShnZW5lcmF0b3IsIGdlbl9jYXApOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fR0VORVJBVE9SX0lNUE9SVF9LRVk6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAga2V5X3R5cGUgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3R5cGVfdCk7CisgICAgICAgICAgICBzaXplICAgICA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBnZW5lcmF0b3IgPSB2YV9hcmcodmFsaXN0LCBwc2FfY3J5cHRvX2dlbmVyYXRvcl90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2dlbmVyYXRvcl9pbXBvcnRfa2V5KGhhbmRsZSwga2V5X3R5cGUsIHNpemUsIGdlbmVyYXRvcik7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRU5FUkFUT1JfQUJPUlQ6CisgICAgICAgICAgICBnZW5lcmF0b3IgPSB2YV9hcmcodmFsaXN0LCBwc2FfY3J5cHRvX2dlbmVyYXRvcl90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2dlbmVyYXRvcl9hYm9ydChnZW5lcmF0b3IpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQUVBRF9FTkNSWVBUOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7CisgICAgICAgICAgICBub25jZSA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgICAgICBub25jZV9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhID0gdmFfYXJnKHZhbGlzdCwgY29uc3QgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YV9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcGxhaW50ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgY2lwaGVydGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0X3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2FlYWRfZW5jcnlwdChoYW5kbGUsIGFsZywgbm9uY2UsIG5vbmNlX2xlbmd0aCwgYWRkaXRpb25hbF9kYXRhLAorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGFfbGVuZ3RoLCBwbGFpbnRleHQsIHNpemUsIGNpcGhlcnRleHQsIGNpcGhlcnRleHRfc2l6ZSwgbGVuZ3RoKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0FFQURfREVDUllQVDoKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgbm9uY2UgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB1aW50OF90ICopOworICAgICAgICAgICAgbm9uY2VfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YSA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGFfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGNpcGhlcnRleHQgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90ICopOworICAgICAgICAgICAgY2lwaGVydGV4dF9zaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIHBsYWludGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9hZWFkX2RlY3J5cHQoaGFuZGxlLCBhbGcsIG5vbmNlLCBub25jZV9sZW5ndGgsIGFkZGl0aW9uYWxfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhX2xlbmd0aCwgY2lwaGVydGV4dCwgY2lwaGVydGV4dF9zaXplLCBwbGFpbnRleHQsIHNpemUsIGxlbmd0aCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19NQUNfU0lHTl9TRVRVUDoKKyAgICAgICAgICAgIG1hY19vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfbWFjX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfbWFjX3NpZ25fc2V0dXAobWFjX29wZXJhdGlvbiwgaGFuZGxlLCBhbGcpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fTUFDX1VQREFURToKKyAgICAgICAgICAgIG1hY19vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfbWFjX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfbWFjX3VwZGF0ZShtYWNfb3BlcmF0aW9uLCBidWZmZXIsIHNpemUpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fTUFDX1NJR05fRklOSVNIOgorICAgICAgICAgICAgbWFjX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9tYWNfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgbGVuZ3RoID0gKHNpemVfdCAqKXZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9tYWNfc2lnbl9maW5pc2gobWFjX29wZXJhdGlvbiwgYnVmZmVyLCBzaXplLCBsZW5ndGgpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fTUFDX1ZFUklGWV9TRVRVUDoKKyAgICAgICAgICAgIG1hY19vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfbWFjX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfbWFjX3ZlcmlmeV9zZXR1cChtYWNfb3BlcmF0aW9uLCBoYW5kbGUsIGFsZyk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19NQUNfVkVSSUZZX0ZJTklTSDoKKyAgICAgICAgICAgIG1hY19vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfbWFjX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfbWFjX3ZlcmlmeV9maW5pc2gobWFjX29wZXJhdGlvbiwgYnVmZmVyLCBzaXplKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX01BQ19BQk9SVDoKKyAgICAgICAgICAgIG1hY19vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfbWFjX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX21hY19hYm9ydChtYWNfb3BlcmF0aW9uKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0FTWU1NVEVSSUNfRU5DUllQVDoKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgcGxhaW50ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgc2FsdCA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgICAgICBzYWx0X2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGNpcGhlcnRleHRfc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfYXN5bW1ldHJpY19lbmNyeXB0KGhhbmRsZSwgYWxnLCBwbGFpbnRleHQsIHNpemUsIHNhbHQsIHNhbHRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X3NpemUsIGxlbmd0aCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19BU1lNTVRFUklDX0RFQ1JZUFQ6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIHBsYWludGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIHNhbHQgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB1aW50OF90ICopOworICAgICAgICAgICAgc2FsdF9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgY2lwaGVydGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0X3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2FzeW1tZXRyaWNfZGVjcnlwdChoYW5kbGUsIGFsZywgcGxhaW50ZXh0LCBzaXplLCBzYWx0LCBzYWx0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgY2lwaGVydGV4dCwgY2lwaGVydGV4dF9zaXplLCBsZW5ndGgpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQ0lQSEVSX0VOQ1JZUFRfU0VUVVA6CisgICAgICAgICAgICBjaXBoZXJfb3BlcmF0aW9uID0gIHZhX2FyZyh2YWxpc3QsIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgKik7CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoY2lwaGVyX29wZXJhdGlvbiwgaGFuZGxlLCBhbGcpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQ0lQSEVSX0RFQ1JZUFRfU0VUVVA6CisgICAgICAgICAgICBjaXBoZXJfb3BlcmF0aW9uID0gIHZhX2FyZyh2YWxpc3QsIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgKik7CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAoY2lwaGVyX29wZXJhdGlvbiwgaGFuZGxlLCBhbGcpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQ0lQSEVSX0dFTkVSQVRFX0lWOgorICAgICAgICAgICAgY2lwaGVyX29wZXJhdGlvbiA9ICB2YV9hcmcodmFsaXN0LCBwc2FfY2lwaGVyX29wZXJhdGlvbl90ICopOworICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfY2lwaGVyX2dlbmVyYXRlX2l2KGNpcGhlcl9vcGVyYXRpb24sIGJ1ZmZlciwgc2l6ZSwgbGVuZ3RoKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0NJUEhFUl9TRVRfSVY6CisgICAgICAgICAgICBjaXBoZXJfb3BlcmF0aW9uID0gIHZhX2FyZyh2YWxpc3QsIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgKik7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfY2lwaGVyX3NldF9pdihjaXBoZXJfb3BlcmF0aW9uLCBidWZmZXIsIHNpemUpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQ0lQSEVSX1VQREFURToKKyAgICAgICAgICAgIGNpcGhlcl9vcGVyYXRpb24gPSAgdmFfYXJnKHZhbGlzdCwgcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAqKTsKKyAgICAgICAgICAgIHBsYWludGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGNpcGhlcnRleHQgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90ICopOworICAgICAgICAgICAgY2lwaGVydGV4dF9zaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9jaXBoZXJfdXBkYXRlKGNpcGhlcl9vcGVyYXRpb24sIHBsYWludGV4dCwgc2l6ZSwgY2lwaGVydGV4dCwgY2lwaGVydGV4dF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19DSVBIRVJfRklOSVNIOgorICAgICAgICAgICAgY2lwaGVyX29wZXJhdGlvbiA9ICB2YV9hcmcodmFsaXN0LCBwc2FfY2lwaGVyX29wZXJhdGlvbl90ICopOworICAgICAgICAgICAgY2lwaGVydGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0X3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2NpcGhlcl9maW5pc2goY2lwaGVyX29wZXJhdGlvbiwgY2lwaGVydGV4dCwgY2lwaGVydGV4dF9zaXplLCBsZW5ndGgpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQ0lQSEVSX0FCT1JUOgorICAgICAgICAgICAgY2lwaGVyX29wZXJhdGlvbiA9ICB2YV9hcmcodmFsaXN0LCBwc2FfY2lwaGVyX29wZXJhdGlvbl90ICopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9jaXBoZXJfYWJvcnQoY2lwaGVyX29wZXJhdGlvbik7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19BU1lNTVRFUklDX1NJR046CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgY2lwaGVydGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0X3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2FzeW1tZXRyaWNfc2lnbihoYW5kbGUsIGFsZywgYnVmZmVyLCBzaXplLCBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQVNZTU1URVJJQ19WRVJJRlk6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgY2lwaGVydGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0X3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9hc3ltbWV0cmljX3ZlcmlmeShoYW5kbGUsIGFsZywgYnVmZmVyLCBzaXplLCBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X3NpemUpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fS0VZX0FHUkVFTUVOVDoKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHZhX2FyZyh2YWxpc3QsIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QqKTsKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7CisgICAgICAgICAgICByZXR1cm4gcHNhX2tleV9hZ3JlZW1lbnQoZ2VuZXJhdG9yLCBoYW5kbGUsIGJ1ZmZlciwgc2l6ZSwgYWxnKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWToKKyAgICAgICAgICAgIGtleV90eXBlID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV90eXBlX3QpOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBrZXlfaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QgKil2YV9hcmcodmFsaXN0LCBpbnQqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfYWxsb2NhdGVfa2V5KGtleV90eXBlLCBzaXplLCBrZXlfaGFuZGxlKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0ZSRUU6CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUEFMX0tFWV9TTE9UX0NPVU5UOyBpKyspCisgICAgICAgICAgICAgICAgcHNhX2Rlc3Ryb3lfa2V5KGkpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY3J5cHRvX2ludGYuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfY3J5cHRvX2ludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmFiZWUxCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9jcnlwdG9faW50Zi5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZm5kZWYgX1BBTF9DUllQVE9fSF8KKyNkZWZpbmUgX1BBTF9DUllQVE9fSF8KKworI2luY2x1ZGUgInBhbF9jb21tb24uaCIKKworZW51bSBjcnlwdG9fZnVuY3Rpb25fY29kZSB7CisgICAgUEFMX0NSWVBUT19JTklUICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisgICAgUEFMX0NSWVBUT19HRU5FUkFURV9SQU5ET00gICAgICAgICAgPSAweDIsCisgICAgUEFMX0NSWVBUT19JTVBPUlRfS0VZICAgICAgICAgICAgICAgPSAweDMsCisgICAgUEFMX0NSWVBUT19FWFBPUlRfS0VZICAgICAgICAgICAgICAgPSAweDQsCisgICAgUEFMX0NSWVBUT19FWFBPUlRfUFVCTElDX0tFWSAgICAgICAgPSAweDUsCisgICAgUEFMX0NSWVBUT19ERVNUUk9ZX0tFWSAgICAgICAgICAgICAgPSAweDYsCisgICAgUEFMX0NSWVBUT19HRVRfS0VZX0lORk8gICAgICAgICAgICAgPSAweDcsCisgICAgUEFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQgICAgICAgICAgPSAweDgsCisgICAgUEFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSAgICAgPSAweDksCisgICAgUEFMX0NSWVBUT19LRVlfUE9MSUNZX0dFVF9VU0FHRSAgICAgPSAweEEsCisgICAgUEFMX0NSWVBUT19LRVlfUE9MSUNZX0dFVF9BTEdPUklUSE0gPSAweEIsCisgICAgUEFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSAgICAgICAgICAgPSAweEMsCisgICAgUEFMX0NSWVBUT19HRVRfS0VZX1BPTElDWSAgICAgICAgICAgPSAweEQsCisgICAgUEFMX0NSWVBUT19HRVRfS0VZX0lORk9STUFUSU9OICAgICAgPSAweEUsCisgICAgUEFMX0NSWVBUT19HRVRfS0VZX0xJRkVUSU1FICAgICAgICAgPSAweEYsCisgICAgUEFMX0NSWVBUT19IQVNIX1NFVFVQICAgICAgICAgICAgICAgPSAweDExLAorICAgIFBBTF9DUllQVE9fSEFTSF9VUERBVEUgICAgICAgICAgICAgID0gMHgxMiwKKyAgICBQQUxfQ1JZUFRPX0hBU0hfVkVSSUZZICAgICAgICAgICAgICA9IDB4MTMsCisgICAgUEFMX0NSWVBUT19IQVNIX0ZJTklTSCAgICAgICAgICAgICAgPSAweDE0LAorICAgIFBBTF9DUllQVE9fSEFTSF9BQk9SVCAgICAgICAgICAgICAgID0gMHgxNSwKKyAgICBQQUxfQ1JZUFRPX0dFTkVSQVRFX0tFWSAgICAgICAgICAgICA9IDB4MTYsCisgICAgUEFMX0NSWVBUT19HRU5FUkFUT1JfUkVBRCAgICAgICAgICAgPSAweDE3LAorICAgIFBBTF9DUllQVE9fS0VZX0RFUklWQVRJT04gICAgICAgICAgID0gMHgxOCwKKyAgICBQQUxfQ1JZUFRPX0dFVF9HRU5FUkFUT1JfQ0FQQUNJVFkgICA9IDB4MTksCisgICAgUEFMX0NSWVBUT19HRU5FUkFUT1JfSU1QT1JUX0tFWSAgICAgPSAweDFBLAorICAgIFBBTF9DUllQVE9fR0VORVJBVE9SX0FCT1JUICAgICAgICAgID0gMHgxQiwKKyAgICBQQUxfQ1JZUFRPX0FFQURfRU5DUllQVCAgICAgICAgICAgICA9IDB4MUMsCisgICAgUEFMX0NSWVBUT19BRUFEX0RFQ1JZUFQgICAgICAgICAgICAgPSAweDFELAorICAgIFBBTF9DUllQVE9fTUFDX1NJR05fU0VUVVAgICAgICAgICAgID0gMHgxRSwKKyAgICBQQUxfQ1JZUFRPX01BQ19VUERBVEUgICAgICAgICAgICAgICA9IDB4MUYsCisgICAgUEFMX0NSWVBUT19NQUNfU0lHTl9GSU5JU0ggICAgICAgICAgPSAweDIwLAorICAgIFBBTF9DUllQVE9fTUFDX1ZFUklGWV9TRVRVUCAgICAgICAgID0gMHgyMSwKKyAgICBQQUxfQ1JZUFRPX01BQ19WRVJJRllfRklOSVNIICAgICAgICA9IDB4MjIsCisgICAgUEFMX0NSWVBUT19NQUNfQUJPUlQgICAgICAgICAgICAgICAgPSAweDIzLAorICAgIFBBTF9DUllQVE9fQVNZTU1URVJJQ19FTkNSWVBUICAgICAgID0gMHgyNCwKKyAgICBQQUxfQ1JZUFRPX0FTWU1NVEVSSUNfREVDUllQVCAgICAgICA9IDB4MjUsCisgICAgUEFMX0NSWVBUT19DSVBIRVJfRU5DUllQVF9TRVRVUCAgICAgPSAweDI2LAorICAgIFBBTF9DUllQVE9fQ0lQSEVSX0RFQ1JZUFRfU0VUVVAgICAgID0gMHgyQSwKKyAgICBQQUxfQ1JZUFRPX0NJUEhFUl9HRU5FUkFURV9JViAgICAgICA9IDB4MkIsCisgICAgUEFMX0NSWVBUT19DSVBIRVJfU0VUX0lWICAgICAgICAgICAgPSAweDJDLAorICAgIFBBTF9DUllQVE9fQ0lQSEVSX1VQREFURSAgICAgICAgICAgID0gMHgyRCwKKyAgICBQQUxfQ1JZUFRPX0NJUEhFUl9GSU5JU0ggICAgICAgICAgICA9IDB4MkUsCisgICAgUEFMX0NSWVBUT19DSVBIRVJfQUJPUlQgICAgICAgICAgICAgPSAweDJGLAorICAgIFBBTF9DUllQVE9fQVNZTU1URVJJQ19TSUdOICAgICAgICAgID0gMHgzMCwKKyAgICBQQUxfQ1JZUFRPX0FTWU1NVEVSSUNfVkVSSUZZICAgICAgICA9IDB4MzEsCisgICAgUEFMX0NSWVBUT19LRVlfQUdSRUVNRU5UICAgICAgICAgICAgPSAweDMyLAorICAgIFBBTF9DUllQVE9fQUxMT0NBVEVfS0VZICAgICAgICAgICAgID0gMHgzMywKKyAgICBQQUxfQ1JZUFRPX0ZSRUUgICAgICAgICAgICAgICAgICAgICA9IDB4RkUsCit9OworCitpbnQzMl90IHBhbF9jcnlwdG9fZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KTsKKyNlbmRpZiAvKiBfUEFMX0NSWVBUT19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9kcml2ZXJfaXBjX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfZHJpdmVyX2lwY19pbnRmLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKY29weSBmcm9tIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfZHJpdmVyX2lwY19pbnRmLmMKY29weSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2RyaXZlcl9pcGNfaW50Zi5jCmluZGV4IDU5ZWZhZTEuLjMyYWVmOWMgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfZHJpdmVyX2lwY19pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9kcml2ZXJfaXBjX2ludGYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfZHJpdmVyX25zX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfZHJpdmVyX25zX2ludGYuYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpjb3B5IGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9kcml2ZXJfbnNfaW50Zi5jCmNvcHkgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9kcml2ZXJfbnNfaW50Zi5jCmluZGV4IGQ2ZjMxMjMuLmRkNmIxNGMgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfZHJpdmVyX25zX2ludGYuYworKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2RyaXZlcl9uc19pbnRmLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9lbXB0eV9pbnRmLmMKc2ltaWxhcml0eSBpbmRleCA3NCUKY29weSBmcm9tIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3MvbnNwZS9wYWxfY3J5cHRvX2VtcHR5X2ludGYuYwpjb3B5IHRvIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlX2VtcHR5X2ludGYuYwppbmRleCAxNDY0OWU5Li4xMzNjZmE5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfZW1wdHlfaW50Zi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsMTcgKzE1LDE2IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0KKyNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlICJwYWxfY29tbW9uLmgiCi0jaW5jbHVkZSAicGFsX2NyeXB0b19pbnRmLmgiCiAKIC8qKgotICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGNyeXB0byBmdW5jdGlvbgorICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGludGVybmFsIHRydXN0ZWQgc3RvcmFnZSBmdW5jdGlvbgogICAgIEBwYXJhbSAgICAtIHR5cGUgICAgOiBmdW5jdGlvbiBjb2RlCiAgICAgICAgICAgICAgICAgdmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKICAgICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKICoqLwotcHNhX3N0YXR1c190IHBhbF9jcnlwdG9fZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KQordWludDMyX3QgcGFsX2l0c19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCiB7Ci0gICAgcmV0dXJuIFBBTF9TVEFUVVNfVU5TVVBQT1JURURfRlVOQzsKKyAgICByZXR1cm4gUEFMX1NUQVRVU19FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlX2ludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjA0YWIwCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfaW50Zi5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKworI2luY2x1ZGUgInBhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfaW50Zi5oIgorCisvKioKKyAgICBAYnJpZWYgICAgLSBUaGlzIEFQSSB3aWxsIGNhbGwgdGhlIHJlcXVlc3RlZCBpbnRlcm5hbCB0cnVzdGVkIHN0b3JhZ2UgZnVuY3Rpb24KKyAgICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQorICAgICAgICAgICAgICAgIHZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0CisgICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCisqKi8KK3VpbnQzMl90IHBhbF9pdHNfZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KQoreworICAgIHBzYV9pdHNfdWlkX3QgICAgICAgICAgIHVpZDsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBkYXRhX2xlbmd0aCwgb2Zmc2V0OworICAgIGNvbnN0IHZvaWQgICAgICAgICAgICAgICpwX3dyaXRlX2RhdGE7CisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKnBfcmVhZF9kYXRhOworICAgIHBzYV9pdHNfY3JlYXRlX2ZsYWdzX3QgIGl0c19jcmVhdGVfZmxhZ3M7CisgICAgc3RydWN0IHBzYV9pdHNfaW5mb190ICAgKml0c19wX2luZm87CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgIGNhc2UgUEFMX0lUU19TRVQ6CisgICAgICAgIHVpZCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9pdHNfdWlkX3QpOworICAgICAgICBkYXRhX2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQzMl90KTsKKyAgICAgICAgcF93cml0ZV9kYXRhID0gdmFfYXJnKHZhbGlzdCwgY29uc3Qgdm9pZCopOworICAgICAgICBpdHNfY3JlYXRlX2ZsYWdzID0gdmFfYXJnKHZhbGlzdCwgcHNhX2l0c19jcmVhdGVfZmxhZ3NfdCk7CisgICAgICAgIHJldHVybiBwc2FfaXRzX3NldCh1aWQsIGRhdGFfbGVuZ3RoLCBwX3dyaXRlX2RhdGEsIGl0c19jcmVhdGVfZmxhZ3MpOworICAgIGNhc2UgUEFMX0lUU19HRVQ6CisgICAgICAgIHVpZCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9pdHNfdWlkX3QpOworICAgICAgICBvZmZzZXQgPSB2YV9hcmcodmFsaXN0LCB1aW50MzJfdCk7CisgICAgICAgIGRhdGFfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QpOworICAgICAgICBwX3JlYWRfZGF0YSA9IHZhX2FyZyh2YWxpc3QsIHZvaWQqKTsKKyAgICAgICAgcmV0dXJuIHBzYV9pdHNfZ2V0KHVpZCwgb2Zmc2V0LCBkYXRhX2xlbmd0aCwgcF9yZWFkX2RhdGEpOworICAgIGNhc2UgUEFMX0lUU19HRVRfSU5GTzoKKyAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX2l0c191aWRfdCk7CisgICAgICAgIGl0c19wX2luZm8gPSB2YV9hcmcodmFsaXN0LCBzdHJ1Y3QgcHNhX2l0c19pbmZvX3QqKTsKKyAgICAgICAgcmV0dXJuIHBzYV9pdHNfZ2V0X2luZm8odWlkLCBpdHNfcF9pbmZvKTsKKyAgICBjYXNlIFBBTF9JVFNfUkVNT1ZFOgorICAgICAgICB1aWQgPSB2YV9hcmcodmFsaXN0LCBwc2FfaXRzX3VpZF90KTsKKyAgICAgICAgcmV0dXJuIHBzYV9pdHNfcmVtb3ZlKHVpZCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFBBTF9TVEFUVVNfVU5TVVBQT1JURURfRlVOQzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9pbnRmLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9pbnRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiNmFhYwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlX2ludGYuaApAQCAtMCwwICsxLDMxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZuZGVmIF9QQUxfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0lOVEZfSF8KKyNkZWZpbmUgX1BBTF9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU5URl9IXworCisjaW5jbHVkZSAicGFsX2NvbW1vbi5oIgorCitlbnVtIGl0c19mdW5jdGlvbl9jb2RlIHsKKyAgICBQQUxfSVRTX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKyAgICBQQUxfSVRTX0dFVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKyAgICBQQUxfSVRTX0dFVF9JTkZPICAgICAgICAgICAgICAgICAgICA9IDB4MywKKyAgICBQQUxfSVRTX1JFTU9WRSAgICAgICAgICAgICAgICAgICAgICA9IDB4NCwKK307CisKK3VpbnQzMl90IHBhbF9pdHNfZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KTsKKyNlbmRpZiAvKiBfUEFMX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTlRGX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL25zcGUvcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX3Byb3RlY3RlZF9zdG9yYWdlX2VtcHR5X2ludGYuYwpzaW1pbGFyaXR5IGluZGV4IDc0JQpjb3B5IGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCmNvcHkgdG8gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9lbXB0eV9pbnRmLmMKaW5kZXggMTQ2NDllOS4uZWU5YjEzZCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9uc3BlL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfcHJvdGVjdGVkX3N0b3JhZ2VfZW1wdHlfaW50Zi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsMTcgKzE1LDE2IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0KKyNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlICJwYWxfY29tbW9uLmgiCi0jaW5jbHVkZSAicGFsX2NyeXB0b19pbnRmLmgiCiAKIC8qKgotICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGNyeXB0byBmdW5jdGlvbgorICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIHByb3RlY3RlZCBzdG9yYWdlIGZ1bmN0aW9uCiAgICAgQHBhcmFtICAgIC0gdHlwZSAgICA6IGZ1bmN0aW9uIGNvZGUKICAgICAgICAgICAgICAgICB2YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdAogICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cwogKiovCi1wc2Ffc3RhdHVzX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCit1aW50MzJfdCBwYWxfcHNfZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KQogewotICAgIHJldHVybiBQQUxfU1RBVFVTX1VOU1VQUE9SVEVEX0ZVTkM7CisgICAgcmV0dXJuIFBBTF9TVEFUVVNfRVJST1I7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX3Byb3RlY3RlZF9zdG9yYWdlX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfcHJvdGVjdGVkX3N0b3JhZ2VfaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmODllZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvcGFsX3Byb3RlY3RlZF9zdG9yYWdlX2ludGYuYwpAQCAtMCwwICsxLDczIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisKKyNpbmNsdWRlICJwYWxfcHJvdGVjdGVkX3N0b3JhZ2VfaW50Zi5oIgorCisvKioKKyAgICBAYnJpZWYgICAgLSBUaGlzIEFQSSB3aWxsIGNhbGwgdGhlIHJlcXVlc3RlZCBwcm90ZWN0ZWQgc3RvcmFnZSBmdW5jdGlvbgorICAgIEBwYXJhbSAgICAtIHR5cGUgICAgOiBmdW5jdGlvbiBjb2RlCisgICAgICAgICAgICAgICAgdmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKKyAgICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKKyoqLwordWludDMyX3QgcGFsX3BzX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKK3sKKyAgICBwc2FfcHNfdWlkX3QgICAgICAgICAgICB1aWQ7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgZGF0YV9sZW5ndGgsIHNpemUsIG9mZnNldDsKKyAgICBjb25zdCB2b2lkICAgICAgICAgICAgICAqcF93cml0ZV9kYXRhOworICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICpwX3JlYWRfZGF0YTsKKyAgICBwc2FfcHNfY3JlYXRlX2ZsYWdzX3QgICBwc19jcmVhdGVfZmxhZ3M7CisgICAgc3RydWN0IHBzYV9wc19pbmZvX3QgICAgKnBzX3BfaW5mbzsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgIGNhc2UgUEFMX1BTX1NFVDoKKyAgICAgICAgIHVpZCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9wc191aWRfdCk7CisgICAgICAgICBkYXRhX2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQzMl90KTsKKyAgICAgICAgIHBfd3JpdGVfZGF0YSA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHZvaWQqKTsKKyAgICAgICAgIHBzX2NyZWF0ZV9mbGFncyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9wc19jcmVhdGVfZmxhZ3NfdCk7CisgICAgICAgICByZXR1cm4gcHNhX3BzX3NldCh1aWQsIGRhdGFfbGVuZ3RoLCBwX3dyaXRlX2RhdGEsIHBzX2NyZWF0ZV9mbGFncyk7CisgICAgIGNhc2UgUEFMX1BTX0dFVDoKKyAgICAgICAgIHVpZCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9wc191aWRfdCk7CisgICAgICAgICBvZmZzZXQgPSB2YV9hcmcodmFsaXN0LCB1aW50MzJfdCk7CisgICAgICAgICBkYXRhX2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQzMl90KTsKKyAgICAgICAgIHBfcmVhZF9kYXRhID0gdmFfYXJnKHZhbGlzdCwgdm9pZCopOworICAgICAgICAgcmV0dXJuIHBzYV9wc19nZXQodWlkLCBvZmZzZXQsIGRhdGFfbGVuZ3RoLCBwX3JlYWRfZGF0YSk7CisgICAgIGNhc2UgUEFMX1BTX0dFVF9JTkZPOgorICAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX3BzX3VpZF90KTsKKyAgICAgICAgIHBzX3BfaW5mbyA9IHZhX2FyZyh2YWxpc3QsIHN0cnVjdCBwc2FfcHNfaW5mb190Kik7CisgICAgICAgICByZXR1cm4gcHNhX3BzX2dldF9pbmZvKHVpZCwgcHNfcF9pbmZvKTsKKyAgICAgY2FzZSBQQUxfUFNfUkVNT1ZFOgorICAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX3BzX3VpZF90KTsKKyAgICAgICAgIHJldHVybiBwc2FfcHNfcmVtb3ZlKHVpZCk7CisgICAgIGNhc2UgUEFMX1BTX0NSRUFURToKKyAgICAgICAgIHVpZCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9wc191aWRfdCk7CisgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QpOworICAgICAgICAgcHNfY3JlYXRlX2ZsYWdzID0gdmFfYXJnKHZhbGlzdCwgcHNhX3BzX2NyZWF0ZV9mbGFnc190KTsKKyAgICAgICAgIHJldHVybiBwc2FfcHNfY3JlYXRlKHVpZCwgc2l6ZSwgcHNfY3JlYXRlX2ZsYWdzKTsKKyAgICAgY2FzZSBQQUxfUFNfU0VUX0VYVEVOREVEOgorICAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX3BzX3VpZF90KTsKKyAgICAgICAgIG9mZnNldCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQzMl90KTsKKyAgICAgICAgIGRhdGFfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QpOworICAgICAgICAgcF93cml0ZV9kYXRhID0gdmFfYXJnKHZhbGlzdCwgY29uc3Qgdm9pZCopOworICAgICAgICAgcmV0dXJuIHBzYV9wc19zZXRfZXh0ZW5kZWQodWlkLCBvZmZzZXQsIGRhdGFfbGVuZ3RoLCBwX3dyaXRlX2RhdGEpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQQUxfU1RBVFVTX1VOU1VQUE9SVEVEX0ZVTkM7CisgICAgfQorCisgICAgcmV0dXJuIFBBTF9TVEFUVVNfVU5TVVBQT1JURURfRlVOQzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfcHJvdGVjdGVkX3N0b3JhZ2VfaW50Zi5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9pbnRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3ZTVmYwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9wYWxfcHJvdGVjdGVkX3N0b3JhZ2VfaW50Zi5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZm5kZWYgX1BBTF9QUk9URUNURURfU1RPUkFHRV9JTlRGX0hfCisjZGVmaW5lIF9QQUxfUFJPVEVDVEVEX1NUT1JBR0VfSU5URl9IXworCisjaW5jbHVkZSAicGFsX2NvbW1vbi5oIgorCitlbnVtIHBzX2Z1bmN0aW9uX2NvZGUgeworICAgIFBBTF9QU19TRVQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorICAgIFBBTF9QU19HRVQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAorICAgIFBBTF9QU19HRVRfSU5GTyAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorICAgIFBBTF9QU19SRU1PVkUgICAgICAgICAgICAgICAgICAgICAgID0gMHg0LAorICAgIFBBTF9QU19DUkVBVEUgICAgICAgICAgICAgICAgICAgICAgID0gMHg1LAorICAgIFBBTF9QU19TRVRfRVhURU5ERUQgICAgICAgICAgICAgICAgID0gMHg2LAorfTsKKwordWludDMyX3QgcGFsX3BzX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCk7CisjZW5kaWYgLyogX1BBTF9QUk9URUNURURfU1RPUkFHRV9JTlRGX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL3NwZS9wYWxfZHJpdmVyX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvc3BlL3BhbF9kcml2ZXJfaW50Zi5jCnNpbWlsYXJpdHkgaW5kZXggOTclCmNvcHkgZnJvbSBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL3NwZS9wYWxfZHJpdmVyX2ludGYuYwpjb3B5IHRvIGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvc3BlL3BhbF9kcml2ZXJfaW50Zi5jCmluZGV4IGY4MGU4MmQuLmNjOGI1MzcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL2Z2cF9tcHMyX2NtNF9tYmVkb3Mvc3BlL3BhbF9kcml2ZXJfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvc3BlL3BhbF9kcml2ZXJfaW50Zi5jCkBAIC0xLDUgKzEsNSBAQAogIC8qKiBAZmlsZQotICAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAgKgogICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9zcGUvcGFsX2RyaXZlcl9pbnRmLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L3NwZS9wYWxfZHJpdmVyX2ludGYuaApzaW1pbGFyaXR5IGluZGV4IDk0JQpjb3B5IGZyb20gYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvZnZwX21wczJfY200X21iZWRvcy9zcGUvcGFsX2RyaXZlcl9pbnRmLmgKY29weSB0byBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L3NwZS9wYWxfZHJpdmVyX2ludGYuaAppbmRleCBiNmVkMmFiLi5kYTg1YTYzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy9mdnBfbXBzMl9jbTRfbWJlZG9zL3NwZS9wYWxfZHJpdmVyX2ludGYuaAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L3NwZS9wYWxfZHJpdmVyX2ludGYuaApAQCAtMSw1ICsxLDUgQEAKICAvKiogQGZpbGUKLSAgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgICoKICAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvdGFyZ2V0LmNmZyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvdGFyZ2V0LmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTQ4Mzk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC90YXJnZXQuY2ZnCkBAIC0wLDAgKzEsODEgQEAKKy8vLyoqIEBmaWxlCisvLyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorLy8gKgorLy8gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vICoKKy8vICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8gKgorLy8gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8qKi8KKworLy8gVUFSVCBkZXZpY2UgaW5mbwordWFydC5udW09MTsKK3VhcnQuMC5iYXNlID0gMHg0MDAwNDAwMDsKK3VhcnQuMC5zaXplID0gMHhGRkY7Cit1YXJ0LjAuaW50cl9pZCA9IDB4RkY7Cit1YXJ0LjAucGVybWlzc2lvbiA9IFRZUEVfUkVBRF9XUklURTsKKworLy8gV2F0Y2hkb2cgZGV2aWNlIGluZm8KK3dhdGNoZG9nLm51bSA9IDE7Cit3YXRjaGRvZy4wLmJhc2UgPSAweDQwMDA4MDAwOword2F0Y2hkb2cuMC5zaXplID0gMHhGRkY7Cit3YXRjaGRvZy4wLmludHJfaWQgPSAweEZGOword2F0Y2hkb2cuMC5wZXJtaXNzaW9uID0gVFlQRV9SRUFEX1dSSVRFOword2F0Y2hkb2cuMC5udW1fb2ZfdGlja19wZXJfbWljcm9fc2VjID0gMHgzOyAgICAgICAgIC8vKHN5c19mZXEvMTAwMDAwMCkKK3dhdGNoZG9nLjAudGltZW91dF9pbl9taWNyb19zZWNfbG93ID0gMHhGNDI0MDsgICAgICAvLzEuMCAgc2VjIDogIDEgKiAxMDAwICogMTAwMAord2F0Y2hkb2cuMC50aW1lb3V0X2luX21pY3JvX3NlY19tZWRpdW0gPSAweDFFODQ4MDsgIC8vMi4wICBzZWMgOiAgMiAqIDEwMDAgKiAxMDAwCit3YXRjaGRvZy4wLnRpbWVvdXRfaW5fbWljcm9fc2VjX2hpZ2ggPSAweDRDNEI0MDsgICAgLy81LjAgIHNlYyA6ICA1ICogMTAwMCAqIDEwMDAKK3dhdGNoZG9nLjAudGltZW91dF9pbl9taWNyb19zZWNfY3J5cHRvID0gMHgxMzEyRDAwOyAvLzE4LjAgc2VjIDogMTggKiAxMDAwICogMTAwMAorCisvLyBSYW5nZSBvZiAxS0IgTm9uLXZvbGF0aWxlIG1lbW9yeSB0byBwcmVzZXJ2ZSBkYXRhIG92ZXIgcmVzZXQuIEV4LCBOVlJBTSBhbmQgRkxBU0gKK252bWVtLm51bSA9MTsKK252bWVtLjAuc3RhcnQgPSAweDIwMDJGMDAwOworbnZtZW0uMC5lbmQgPSAweDIwMDJGM0ZGOworbnZtZW0uMC5wZXJtaXNzaW9uID0gVFlQRV9SRUFEX1dSSVRFOworCisvLyBNaXNjZWxsYW5lb3VzIC0gVGVzdCBzY2F0dGVyIGluZm8KK2R1dC5udW0gPSAxOworCisvLyBTdGFydCBhZGRyZXNzIG9mIDEwS0IgTlMgbWVtb3J5IGZvciB0ZXN0IEVMRgorZHV0LjAubnNfdGVzdF9hZGRyID0gMHgyMDA3RjAwMDsKKworLy8gU3RhcnQgYWRkcmVzcyBvZiBjb21iaW5lX3Rlc3RfYmluYXJ5IGluIG1lbW9yeS4gTWVtb3J5IGNhbiBiZSBtYWluIG1lbW9yeSBvciBzZWNvbmRhcnkgbWVtb3J5LgorLy8gU2l6ZSBvZiBjb21iaW5lX3Rlc3RfYmluYXJ5ID0gU3VtbWF0aW9uIG9mIHNpemUgb2YgZWFjaCB0ZXN0IEVMRiBmaWxlLgorZHV0LjAubnNfc3RhcnRfYWRkcl9vZl9jb21iaW5lX3Rlc3RfYmluYXJ5ID0gMHgyMDAzRjAwMDsKKworLy8gSXMgY29tYmluZV90ZXN0X2JpbmFyeSBhdmFpbGFibGUgaW4gUkFNPworZHV0LjAuY29tYmluZV90ZXN0X2JpbmFyeV9pbl9yYW0gPSBBVkFJTEFCTEU7CisKKworLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLy8gRm9sbG93aW5nIFRhcmdldCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXJlIHJlcXVpcmVkIGZvciBJUEMgdGVzdHMKKy8vIG9ubHkuIEF2b2lkIHVwZGF0aW5nIHRoZW0gaWYgeW91IGFyZSBydW5uaW5nIGRldl9hcGlzLgorLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisvLyBMZXZlbCBvZiBJc29sYXRpb24KK2R1dC4wLmltcGxlbWVudGVkX3BzYV9maXJtd2FyZV9pc29sYXRpb25fbGV2ZWwgPSBMRVZFTDE7CisKKy8vIEFzc2lnbiBmcmVlIG1lbW9yeSByYW5nZSBmb3IgaXNvbGF0aW9uIHRlc3RpbmcuIENob29zZSB0aGUgYWRkcmVzc2VzCisvLyBmb3IgdGhlc2UgbWVtb3J5IHJlZ2lvbnMgc3VjaCB0aGF0IGl0IGZvbGxvd3MgYmVsb3cgY29uZGl0aW9uOgorLy8gbnNwZV9tbWlvLjAuc3RhcnQgPCBjbGllbnRfcGFydGl0aW9uX21taW8uMC5zdGFydCA8IGRyaXZlcl9wYXJ0aXRpb25fbW1pby4wLnN0YXJ0LgorbnNwZV9tbWlvLm51bT0xOworbnNwZV9tbWlvLjAuc3RhcnQgPSAweDIwMEFGMDAwOworbnNwZV9tbWlvLjAuZW5kID0gMHgyMDBBRjAxRjsKK25zcGVfbW1pby4wLnBlcm1pc3Npb24gPSBUWVBFX1JFQURfV1JJVEU7CisKK2NsaWVudF9wYXJ0aXRpb25fbW1pby5udW09MTsKK2NsaWVudF9wYXJ0aXRpb25fbW1pby4wLnN0YXJ0ID0gMHgyMDBBRjAyMDsKK2NsaWVudF9wYXJ0aXRpb25fbW1pby4wLmVuZCA9IDB4MjAwQUYwM0Y7CitjbGllbnRfcGFydGl0aW9uX21taW8uMC5wZXJtaXNzaW9uID0gVFlQRV9SRUFEX1dSSVRFOworCitkcml2ZXJfcGFydGl0aW9uX21taW8ubnVtPTE7Citkcml2ZXJfcGFydGl0aW9uX21taW8uMC5zdGFydCA9IDB4MjAwQUYwNDA7Citkcml2ZXJfcGFydGl0aW9uX21taW8uMC5lbmQgPSAweDIwMEFGMDVGOworZHJpdmVyX3BhcnRpdGlvbl9tbWlvLjAucGVybWlzc2lvbiA9IFRZUEVfUkVBRF9XUklURTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvTWFrZWZpbGUgYi9hcGktdGVzdHMvdG9vbHMvbWFrZWZpbGVzL01ha2VmaWxlCmluZGV4IDlhYWExZTYuLjMwNjI1MGYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvTWFrZWZpbGUKKysrIGIvYXBpLXRlc3RzL3Rvb2xzL21ha2VmaWxlcy9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLSMgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICMgKgogIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtOTIsMTMgKzkyLDE1IEBACiAJQGVjaG8gICIgJChTVUlURV9PVVQpL3Rlc3RfZWxmX2NvbWJpbmUuYmluIgogZW5kaWYKIAlAZWNobyAgIiIKLWlmZXEgKCR7U1VJVEV9LCBpcGMpCitpZmVxICgke1BTQV9JUENfSU1QTEVNRU5URUR9LCAxKQogCUBlY2hvICAiYikgU1BFIGZpbGVzIgogCUBlY2hvICAiICQoQlVJTEQpL3BhcnRpdGlvbi9kcml2ZXJfcGFydGl0aW9uLmEiCitlbmRpZgoraWZlcSAoJHtTVUlURX0sIGlwYykKIAlAZWNobyAgIiAkKEJVSUxEKS9wYXJ0aXRpb24vY2xpZW50X3BhcnRpdGlvbi5hIgogCUBlY2hvICAiICQoQlVJTEQpL3BhcnRpdGlvbi9zZXJ2ZXJfcGFydGl0aW9uLmEiCi0JQGVjaG8gICIiCiBlbmRpZgorCUBlY2hvICAiIgogCiBjbGVhbjoKIAlAZWNobyAgIj4+Pj4gQ2xlYW5pbmcgdGhlIGJ1aWxkIGRpcmVjdG9yeS4uLiIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvbGlua2VyL3Rlc3QubGlua2VyIGIvYXBpLXRlc3RzL3Rvb2xzL21ha2VmaWxlcy9saW5rZXIvdGVzdC5saW5rZXIKaW5kZXggY2M4ZjU1Mi4uNjE5MDFkOSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3Rvb2xzL21ha2VmaWxlcy9saW5rZXIvdGVzdC5saW5rZXIKKysrIGIvYXBpLXRlc3RzL3Rvb2xzL21ha2VmaWxlcy9saW5rZXIvdGVzdC5saW5rZXIKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLyogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMSw4ICsyMSw4IEBACiBNRU1PUlkKIHsKICAgICBURVNUX0lORk8gIChSKSAgOiBPUklHSU4gPSBURVNUX1NUQVJULCBMRU5HVEggPSAweDEwMAotICAgIFRFU1RfVEVYVCAgKFJYKSA6IE9SSUdJTiA9IFRFU1RfU1RBUlQgKzB4MTAwLCBMRU5HVEggPSAweEUwMAotICAgIFRFU1RfREFUQSAgKFJXKSA6IE9SSUdJTiA9IFRFU1RfU1RBUlQgKzB4RjAwLCBMRU5HVEggPSAweDEzMDAKKyAgICBURVNUX1RFWFQgIChSWCkgOiBPUklHSU4gPSBURVNUX1NUQVJUICsweDEwMCwgTEVOR1RIID0gMHgxNDAwCisgICAgVEVTVF9EQVRBICAoUlcpIDogT1JJR0lOID0gVEVTVF9TVEFSVCArMHgxNTAwLCBMRU5HVEggPSAweDE4MDAKIH0KIAogU0VDVElPTlMKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvbGlua2VyL3Rlc3Quc2N0IGIvYXBpLXRlc3RzL3Rvb2xzL21ha2VmaWxlcy9saW5rZXIvdGVzdC5zY3QKaW5kZXggMjc0MjJmMS4uODcwYWE4ZiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3Rvb2xzL21ha2VmaWxlcy9saW5rZXIvdGVzdC5zY3QKKysrIGIvYXBpLXRlc3RzL3Rvb2xzL21ha2VmaWxlcy9saW5rZXIvdGVzdC5zY3QKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLyogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSwxNiArMTUsMTYgQEAKICoqLwogCiAjZGVmaW5lIFRFU1RfQ09ERV9TVEFSVCAweDAKLSNkZWZpbmUgVEVTVF9JTkZPX1NJWkUgIDB4OAotI2RlZmluZSBURVNUX1RFWFRfU0laRSAgMHhEMDAKLSNkZWZpbmUgVEVTVF9EQVRBX1NJWkUgIDB4MTMwMAorI2RlZmluZSBURVNUX0lORk9fU0laRSAgMHgxMDAKKyNkZWZpbmUgVEVTVF9URVhUX1NJWkUgIDB4MTQwMAorI2RlZmluZSBURVNUX0RBVEFfU0laRSAgMHgxODAwCiAKIExSX0NPREUgVEVTVF9DT0RFX1NUQVJUCiB7CiAKICAgICBFUl9DT0RFIFRFU1RfQ09ERV9TVEFSVCAoVEVTVF9JTkZPX1NJWkUrVEVTVF9URVhUX1NJWkUrVEVTVF9EQVRBX1NJWkUpCiAgICAgewotICAgICAgICB0ZXN0X2VudHJ5Lm8oLmFjc190ZXN0X2luZm8gK0ZJUlNUKQorICAgICAgICB0ZXN0X2VudHJ5X25zcGUubyguYWNzX3Rlc3RfaW5mbyArRklSU1QpCiAgICAgICAgICogKCtDT0RFKQogICAgICAgICAqICgrUk8pCiAgICAgICAgICogKCtaSSArUlcpCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdG9vbHMvbWFrZWZpbGVzL3NwYnVpbGQubWsgYi9hcGktdGVzdHMvdG9vbHMvbWFrZWZpbGVzL3NwYnVpbGQubWsKaW5kZXggZTg0ZmQ0Ny4uNTgwYTNjOSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3Rvb2xzL21ha2VmaWxlcy9zcGJ1aWxkLm1rCisrKyBiL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvc3BidWlsZC5tawpAQCAtMSw0ICsxLDQgQEAKLSMgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICMgKgogIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjMsNyArMjMsOSBAQAogICAgICAgICAgLUkkKFNPVVJDRSkvZmYvcGFydGl0aW9uL2NvbW1vbi8gXAogICAgICAgICAgLUkkKFNPVVJDRSkvZmYvcGFydGl0aW9uL2lwYy8gXAogICAgICAgICAgLUkkKEJVSUxEKS9wYXJ0aXRpb24vIFwKLSAgICAgICAgIC1JJChCVUlMRCkvcGxhdGZvcm0vJChUQVJHRVQpLworICAgICAgICAgLUkkKEJVSUxEKS9wbGF0Zm9ybS8kKFRBUkdFVCkvIFwKKyAgICAgICAgIC1JJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL25zcGUgXAorICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvc3BlCiAKIFZQQVRIPSQoU09VUkNFKS92YWwvY29tbW9uLzpcCiAgICAgICAkKFNPVVJDRSkvdmFsL25zcGUvOlwKQEAgLTQ5LDcgKzUxLDcgQEAKIGNvbXBpbGVfYXNtOiAkKEFTX1NPVVJDRTolLnM9JChCVUlMRCkvcGFydGl0aW9uLyUubykKIAogJChCVUlMRCkvcGFydGl0aW9uLyUubyA6ICUuYwotCSQoQ0MpIC1vICRAIC1jICQ8CisJJChDQykgLURTUEVfQlVJTEQgLW8gJEAgLWMgJDwKIAogJChCVUlMRCkvcGFydGl0aW9uLyUubyA6ICUucwogCSQoQVMpIC1vICRAICQ8CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdG9vbHMvbWFrZWZpbGVzL3Rlc3RidWlsZC5tayBiL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvdGVzdGJ1aWxkLm1rCmluZGV4IDdiOWNjZWIuLmNmOWVlYTIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvdGVzdGJ1aWxkLm1rCisrKyBiL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvdGVzdGJ1aWxkLm1rCkBAIC0xLDQgKzEsNCBAQAotIyAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogIyAqCiAjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yNywxMSArMjcsMTkgQEAKICAgICAgICAgIC1JJChTVUlURV9JTikvaW5jbHVkZS8gXAogICAgICAgICAgLUkkKEJVSUxEKS92YWwvCiAKK2lmZXEgKCR7U1VJVEV9LCBwcm90ZWN0ZWRfc3RvcmFnZSkKK0lOQ0xVREUgKz0gLUkkKFNVSVRFX0lOKS8uLi9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvJChURVNUKQorZW5kaWYKKwogVlBBVEg9JChTT1VSQ0UpL3ZhbC9jb21tb24vOlwKICAgICAgICQoU09VUkNFKS92YWwvbnNwZS86XAogICAgICAgJChTT1VSQ0UpL3ZhbC9zcGUvOlwKICAgICAgICQoU1VJVEVfSU4pLyQoVEVTVCkvOlwKLSAgICAgICQoU1VJVEVfSU4pL2luY2x1ZGUvCisgICAgICAkKFNVSVRFX0lOKS9pbmNsdWRlLzoKKworaWZlcSAoJHtTVUlURX0sIHByb3RlY3RlZF9zdG9yYWdlKQorVlBBVEggKz0gJChTVUlURV9JTikvLi4vaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLyQoVEVTVCkvCitlbmRpZgogCiAKIGFsbDogIG1rZGlyIGNvbXBpbGVfY19uc3BlIGNvbXBpbGVfYXNtX25zcGUgdGVzdC5lbGYgY29tcGlsZV9jX3NwZSBjb21waWxlX2FzbV9zcGUKQEAgLTUzLDcgKzYxLDcgQEAKIGNvbXBpbGVfYXNtX3NwZTogJChBU19TT1VSQ0VfU1BFOiUucz0kKFNVSVRFX09VVCkvJChURVNUKS8lX3NwZS5vKQogCiAkKFNVSVRFX09VVCkvJChURVNUKS8lX3NwZS5vIDogJS5jCi0JJChDQykgLW8gJEAgLWMgJDwKKwkkKENDKSAtRFNQRV9CVUlMRCAtbyAkQCAtYyAkPAogCiAkKFNVSVRFX09VVCkvJChURVNUKS8lX3NwZS5vIDogJS5zCiAJJChBUykgLW8gJEAgJDwKQEAgLTYyLDcgKzcwLDYgQEAKIGlmZXEgKCR7VE9PTENIQUlOfSwgR05VQVJNKQogCSQoTEQpIC1YbGlua2VyIC1NYXA9JChTVUlURV9PVVQpLyQoVEVTVCkvdGVzdC5tYXAgLW8gJChTVUlURV9PVVQpLyQoVEVTVCkvdGVzdC5lbGYgLVQkKFNVSVRFX09VVCkvLnRlc3QubGlua2VyICQoU1VJVEVfT1VUKS8kKFRFU1QpLypfbnNwZS5vCiBlbHNlCi0JY3BwIC14IGFzc2VtYmxlci13aXRoLWNwcCAtdyAtRSAtbyAkKFNVSVRFX09VVCkvLnRlc3Quc2N0LnRtcCAkKFNVSVRFX09VVCkvLnRlc3Quc2N0IDsgY3AgJChTVUlURV9PVVQpLy50ZXN0LnNjdC50bXAgICQoU1VJVEVfT1VUKS8udGVzdC5zY3QKIAkkKExEKSAgLS1zY2F0dGVyPSQoU1VJVEVfT1VUKS8udGVzdC5zY3QgIC0tbGlzdD0kKFNVSVRFX09VVCkvJChURVNUKS90ZXN0Lm1hcCAtbyAkKFNVSVRFX09VVCkvJChURVNUKS90ZXN0LmVsZiAgJChTVUlURV9PVVQpLyQoVEVTVCkvKl9uc3BlLm8KIGVuZGlmCiAJJChEUykgICQoU1VJVEVfT1VUKS8kKFRFU1QpL3Rlc3QuZWxmID4gICQoU1VJVEVfT1VUKS8kKFRFU1QpL3Rlc3QuZGlzYXNzCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdG9vbHMvbWFrZWZpbGVzL3Rvb2xjaGFpbi5tayBiL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvdG9vbGNoYWluLm1rCmluZGV4IDFlOTMyZWIuLjJhM2M5OTggMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvdG9vbGNoYWluLm1rCisrKyBiL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvdG9vbGNoYWluLm1rCkBAIC0xLDQgKzEsNCBAQAotIyAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogIyAqCiAjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC03MiwxNyArNzIsMTMgQEAKICAgICAgICAgZW5kaWYKICAgICBlbmRpZgogCi1DT01QSUxFUl9PUFRJT05TPSAtLXRhcmdldD1hcm0tYXJtLW5vbmUtZWFiaSAkKFRBUkdFVF9TV0lUQ0gpIC1XYWxsIC1XZXJyb3IgLWZzaG9ydC1lbnVtcyAtZnNob3J0LXdjaGFyIC1mdW5zaWduZWQtY2hhciAtZmRhdGEtc2VjdGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyAtbW5vLXVuYWxpZ25lZC1hY2Nlc3MgLW1mcHU9bm9uZSAtRFZBTF9OU1BFX0JVSUxECitDT01QSUxFUl9PUFRJT05TPSAtLXRhcmdldD1hcm0tYXJtLW5vbmUtZWFiaSAkKFRBUkdFVF9TV0lUQ0gpIC1XYWxsIC1XZXJyb3IgLWZzaG9ydC1lbnVtcyAtZnNob3J0LXdjaGFyIC1mdW5zaWduZWQtY2hhciAtZmRhdGEtc2VjdGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyAtbW5vLXVuYWxpZ25lZC1hY2Nlc3MgLW1mcHU9bm9uZQogQVJfT1BUSU9OUz0gLS1jcmVhdGUgLWNyCi1MSU5LRVJfT1BUSU9OUz0gLS1zdHJpY3QgLS1tYXAgLS1zeW1ib2xzIC0teHJlZiAtLWVudHJ5PWFjc190ZXN0X2luZm8gLS1pbmZvPXN1bW1hcnlzaXplcyxzaXplcyx0b3RhbHMsdW51c2VkLHZlbmVlcnMgLS1kaWFnX3dhcm5pbmc9TDYyMDQKK0xJTktFUl9PUFRJT05TPSAtLXN0cmljdCAtLW1hcCAtLXN5bWJvbHMgLS14cmVmICAtLWluZm89c3VtbWFyeXNpemVzLHNpemVzLHRvdGFscyx1bnVzZWQsdmVuZWVycyAtLWRpYWdfd2FybmluZz1MNjIwNAogT0JKRFVNUF9PUFRJT05TPSAtYyAtZCAtLWRhdGFzeW1ib2xzCiBlbmRpZgogIyMjIyBBUk1DTEFORyBPUFRJT05TIC0gRU5EICMjIyMKIAotaWZlcSAoJHtTVUlURX0sIGNyeXB0bykKLUNPTVBJTEVSX09QVElPTlMgKz0gLURDUllQVE9fU1VJVEUKLWVuZGlmCi0KIENPTVBJTEVSX09QVElPTlMgKz0gLURWRVJCT1NFPSQoVkVSQk9TRSkKIAogaWZlcSAoJHtURVNUX0NPTUJJTkVfQVJDSElWRX0sIDEpCkBAIC05Myw2ICs4OSwyMiBAQAogQ09NUElMRVJfT1BUSU9OUyArPSAtRFBTQV9JUENfSU1QTEVNRU5URUQKIGVuZGlmCiAKK2lmZXEgKCR7UFNBX0NSWVBUT19JTVBMRU1FTlRFRH0sIDEpCitDT01QSUxFUl9PUFRJT05TICs9IC1EUFNBX0NSWVBUT19JTVBMRU1FTlRFRAorZW5kaWYKKworaWZlcSAoJHtQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUR9LCAxKQorQ09NUElMRVJfT1BUSU9OUyArPSAtRFBTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRAorZW5kaWYKKworaWZlcSAoJHtQU0FfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEfSwgMSkKK0NPTVBJTEVSX09QVElPTlMgKz0gLURQU0FfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0lNUExFTUVOVEVECitlbmRpZgorCitpZmVxICgke1BTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEfSwgMSkKK0NPTVBJTEVSX09QVElPTlMgKz0gLURQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRAorZW5kaWYKKwogQ0M9ICQoQ09NUElMRVIpICQoQ09NUElMRVJfT1BUSU9OUykgJChDQ19PUFRJT05TKSAkKFVTRVJfSU5DTFVERSkgJChJTkNMVURFKQogQVM9ICQoQVNTRU1CTEVSKSAkKEFTU0VNQkxFUl9PUFRJT05TKSAkKEFTX09QVElPTlMpCiBMRD0gJChMSU5LRVIpICQoTElOS0VSX09QVElPTlMpCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdG9vbHMvbWFrZWZpbGVzL3ZhbGJ1aWxkLm1rIGIvYXBpLXRlc3RzL3Rvb2xzL21ha2VmaWxlcy92YWxidWlsZC5tawppbmRleCA3OTQxOGVjLi4wMWI0NTdjIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvdG9vbHMvbWFrZWZpbGVzL3ZhbGJ1aWxkLm1rCisrKyBiL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvdmFsYnVpbGQubWsKQEAgLTEsNCArMSw0IEBACi0jICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAjICoKICMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICQoU09VUkNFKS92YWwvc3BlLwogCiBTUkNfQ09NTU9OPQotU1JDX05TPSB2YWxfZW50cnkuYyB2YWxfZGlzcGF0Y2hlci5jIHZhbF9mcmFtZXdvcmsuYyB2YWxfY3J5cHRvLmMgdmFsX2ludGVyZmFjZXMuYyB2YWxfcGVyaXBoZXJhbHMuYyB2YWxfdGFyZ2V0LmMKK1NSQ19OUz0gdmFsX2VudHJ5LmMgdmFsX2Rpc3BhdGNoZXIuYyB2YWxfZnJhbWV3b3JrLmMgdmFsX2NyeXB0by5jIHZhbF9pbnRlcmZhY2VzLmMgdmFsX3BlcmlwaGVyYWxzLmMgdmFsX3RhcmdldC5jIHZhbF9wcm90ZWN0ZWRfc3RvcmFnZS5jIHZhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UuYyB2YWxfYXR0ZXN0YXRpb24uYwogCiBhbGw6IGJ1aWxkCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL2dlbl90ZXN0c19saXN0LnBsIGIvYXBpLXRlc3RzL3Rvb2xzL3NjcmlwdHMvZ2VuX3Rlc3RzX2xpc3QucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyN2I1MAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL2dlbl90ZXN0c19saXN0LnBsCkBAIC0wLDAgKzEsMTMxIEBACisjIS91c3IvYmluL2VudiBwZXJsCisjLyoqIEBmaWxlCisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworCiskYnVpbGQ9JEFSR1ZbMF07CiskdGVzdHNfbGlzdD0kQVJHVlsxXTsKKyRzdWl0ZT0kQVJHVlsyXTsKKworJmdlbl90ZXN0X2VudHJ5X2luZm8oKTsKKyZnZW5fc2VjdXJlX3Rlc3RzX2xpc3QoKSBpZiAoJHN1aXRlIGVxICJpcGMiKTsKKworc3ViIGdlbl90ZXN0X2VudHJ5X2luZm8KK3sKKyAgICBteSAkdGVzdF9udW0gICAgICAgICAgICAgICAgICAgID0gMDsKKyAgICBteSAkdW5pcV90ZXN0X3N0cmluZyAgICAgICAgICAgID0gJyc7CisgICAgbXkgJG1heF90ZXN0X3Blcl9zdWl0ZSAgICAgICAgICA9IDIwMDsKKyAgICBteSAkc3VpdGVfYmFzZSAgICAgICAgICAgICAgICAgID0gMDsKKyAgICBteSAkdGVzdF9lbnRyeV9saXN0ICAgICAgICAgICAgID0gIiRidWlsZC92YWwvdGVzdF9lbnRyeV9saXN0LmluYyI7CisgICAgbXkgJHRlc3RfZW50cnlfZm5fZGVjbGFyZV9saXN0ICA9ICIkYnVpbGQvdmFsL3Rlc3RfZW50cnlfZm5fZGVjbGFyZV9saXN0LmluYyI7CisKKyAgICBwcmludCAiXG4+Pj4+IEdlbmVyYXRpbmcgdGVzdHMgbGlzdCBieSByZWZlcnJpbmcgdGVzdHN1aXRlLmRiIFxuIjsKKworICAgIGlmICgkc3VpdGUgZXEgImNyeXB0byIpCisgICAgeworICAgICAgICAkc3VpdGVfYmFzZSA9IDE7CisgICAgfQorICAgIGVsc2lmICgkc3VpdGUgZXEgInByb3RlY3RlZF9zdG9yYWdlIikKKyAgICB7CisgICAgICAgICRzdWl0ZV9iYXNlID0gMjsKKyAgICB9CisgICAgZWxzaWYgKCRzdWl0ZSBlcSAiaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlIikKKyAgICB7CisgICAgICAgICRzdWl0ZV9iYXNlID0gMzsKKyAgICB9CisgICAgZWxzaWYgKCRzdWl0ZSBlcSAiaW5pdGlhbF9hdHRlc3RhdGlvbiIpCisgICAgeworICAgICAgICAkc3VpdGVfYmFzZSA9IDQ7CisgICAgfQorCisgICAgb3BlbihJTiwgJHRlc3RzX2xpc3QpIG9yIGRpZSAiVW5hYmxlIHRvIG9wZW4gJHRlc3RzX2xpc3QgJCEiOworICAgIG9wZW4oT1VUMSwgJz4nLCAkdGVzdF9lbnRyeV9mbl9kZWNsYXJlX2xpc3QpIG9yIGRpZSAiVW5hYmxlIHRvIG9wZW46ICQhIjsKKyAgICBvcGVuKE9VVDIsICc+JywgJHRlc3RfZW50cnlfbGlzdCkgb3IgZGllICJVbmFibGUgdG8gb3BlbjogJCEiOworCisgICAgICAgIHdoaWxlKDxJTj4pIHsKKyAgICAgICAgaWYoJF8gIX4gL15cLy8pIHsjIGV4Y2x1ZGUgY29tbWVudGVkIGxpbmVzIGlmIGFueQorICAgICAgICAgICAgY2hvbXAoJF8pOworICAgICAgICAgICAgaWYoJF8gPX4gL150ZXN0XyguKykvKSB7CisgICAgICAgICAgICAgICAgJHVuaXFfdGVzdF9zdHJpbmcgPSAkMTsKKyAgICAgICAgICAgICAgICAkdW5pcV90ZXN0X3N0cmluZyA9fiBzL3MvcC8gaWYgKCRzdWl0ZSBlcSAicHJvdGVjdGVkX3N0b3JhZ2UiKTsKKyAgICAgICAgICAgICAgICBwcmludCBPVVQxICJ2b2lkIHRlc3RfZW50cnlfJHVuaXFfdGVzdF9zdHJpbmcodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpO1xuIjsKKyAgICAgICAgICAgICAgICBpZigkXyA9fiAvXnRlc3RfXHcwKihcZCspLykgeworICAgICAgICAgICAgICAgICAgICAkdGVzdF9udW0gPSAkMSArICgkbWF4X3Rlc3RfcGVyX3N1aXRlICogJHN1aXRlX2Jhc2UpOworICAgICAgICAgICAgICAgICAgICBwcmludCBPVVQyICJcdHskdGVzdF9udW0sICZ0ZXN0X2VudHJ5XyR1bmlxX3Rlc3Rfc3RyaW5nfSxcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNsb3NlIElOOworICAgIGNsb3NlIE9VVDE7CisgICAgY2xvc2UgT1VUMjsKKyAgICBwcmludCAiT3V0cHV0IGZpbGVzIGFyZToKKyAgICAkdGVzdF9lbnRyeV9saXN0LAorICAgICR0ZXN0X2VudHJ5X2ZuX2RlY2xhcmVfbGlzdFxuIjsKK30KKworc3ViIGdlbl9zZWN1cmVfdGVzdHNfbGlzdAoreworICAgIG15ICR0ZXN0X251bSA9IDA7CisgICAgbXkgJHRlc3RfbnVtX3ByZXYgPSAwOworICAgIG15ICRjbGllbnRfdGVzdHNfbGlzdF9kZWNsYXJlID0gIiRidWlsZC9wYXJ0aXRpb24vY2xpZW50X3Rlc3RzX2xpc3RfZGVjbGFyZS5pbmMiOworICAgIG15ICRjbGllbnRfdGVzdHNfbGlzdCAgICAgICAgID0gIiRidWlsZC9wYXJ0aXRpb24vY2xpZW50X3Rlc3RzX2xpc3QuaW5jIjsKKyAgICBteSAkc2VydmVyX3Rlc3RzX2xpc3RfZGVjbGFyZSA9ICIkYnVpbGQvcGFydGl0aW9uL3NlcnZlcl90ZXN0c19saXN0X2RlY2xhcmUuaW5jIjsKKyAgICBteSAkc2VydmVyX3Rlc3RzX2xpc3QgICAgICAgICA9ICIkYnVpbGQvcGFydGl0aW9uL3NlcnZlcl90ZXN0c19saXN0LmluYyI7CisKKyAgICBwcmludCAiXG4+Pj4+IEdlbmVyYXRpbmcgc2VjdXJlIHRlc3RzIGxpc3QgZmlsZXMgYnkgcmVmZXJyaW5nIHRlc3RzdWl0ZS5kYiBcbiI7CisKKyAgICBvcGVuKElOLCAkdGVzdHNfbGlzdCkgb3IgZGllICJVbmFibGUgdG8gb3BlbiAkdGVzdHNfbGlzdCAkISI7CisgICAgb3BlbihPVVQxLCAnPicsICRjbGllbnRfdGVzdHNfbGlzdF9kZWNsYXJlKSBvciBkaWUgIlVuYWJsZSB0byBvcGVuOiAkISI7CisgICAgb3BlbihPVVQyLCAnPicsICRjbGllbnRfdGVzdHNfbGlzdCkgb3IgZGllICJVbmFibGUgdG8gb3BlbjogJCEiOworICAgIG9wZW4oT1VUMywgJz4nLCAkc2VydmVyX3Rlc3RzX2xpc3RfZGVjbGFyZSkgb3IgZGllICJVbmFibGUgdG8gb3BlbjogJCEiOworICAgIG9wZW4oT1VUNCwgJz4nLCAkc2VydmVyX3Rlc3RzX2xpc3QpIG9yIGRpZSAiVW5hYmxlIHRvIG9wZW46ICQhIjsKKworICAgIHdoaWxlKDxJTj4pIHsKKyAgICAgICAgaWYoJF8gIX4gL15cLy8pIHsjIGV4Y2x1ZGUgY29tbWVudGVkIGxpbmVzIGlmIGFueQorICAgICAgICAgICAgY2hvbXAoJF8pOworICAgICAgICAgICAgaWYoJF8gPX4gL150ZXN0X1x3KFxkKykvKSB7CisgICAgICAgICAgICAgICAgJHRlc3RfbnVtID0gJDE7CisgICAgICAgICAgICAgICAgcHJpbnQgT1VUMSAiIGV4dGVybiBjbGllbnRfdGVzdF90ICRfXF9jbGllbnRfdGVzdHNfbGlzdFtdO1xuIjsKKyAgICAgICAgICAgICAgICBwcmludCBPVVQzICIgZXh0ZXJuIHNlcnZlcl90ZXN0X3QgJF9cX3NlcnZlcl90ZXN0c19saXN0W107XG4iOworCisgICAgICAgICAgICAgICAgaWYgKCR0ZXN0X251bSAtICR0ZXN0X251bV9wcmV2ID4gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoJGkgPSAkdGVzdF9udW1fcHJldjsgJGkgPCAoJHRlc3RfbnVtIC0gMSk7ICRpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IE9VVDIgIlx0TlVMTCxcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBPVVQ0ICJcdE5VTEwsXG4iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByaW50IE9VVDIgIlx0JF9cX2NsaWVudF90ZXN0c19saXN0LFxuIjsKKyAgICAgICAgICAgICAgICBwcmludCBPVVQ0ICJcdCRfXF9zZXJ2ZXJfdGVzdHNfbGlzdCxcbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgJHRlc3RfbnVtX3ByZXYgPSAkdGVzdF9udW07CisgICAgfQorICAgIGNsb3NlIElOOworICAgIGNsb3NlIE9VVDE7CisgICAgY2xvc2UgT1VUMjsKKyAgICBjbG9zZSBPVVQzOworICAgIGNsb3NlIE9VVDQ7CisKKyAgICBwcmludCAiT3V0cHV0IGZpbGVzIGFyZToKKyAgICAkY2xpZW50X3Rlc3RzX2xpc3RfZGVjbGFyZSwKKyAgICAkY2xpZW50X3Rlc3RzX2xpc3QsCisgICAgJHNlcnZlcl90ZXN0c19saXN0X2RlY2xhcmUsCisgICAgJHNlcnZlcl90ZXN0c19saXN0IFxuXG4iOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3Rvb2xzL3NjcmlwdHMvcHJvY2Vzc190ZXN0X2xpbmtlcl9maWxlLnBsIGIvYXBpLXRlc3RzL3Rvb2xzL3NjcmlwdHMvcHJvY2Vzc190ZXN0X2xpbmtlcl9maWxlLnBsCmluZGV4IGI4ZDQ5ODQuLjNhMzFiM2IgMTAwNzU1Ci0tLSBhL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL3Byb2Nlc3NfdGVzdF9saW5rZXJfZmlsZS5wbAorKysgYi9hcGktdGVzdHMvdG9vbHMvc2NyaXB0cy9wcm9jZXNzX3Rlc3RfbGlua2VyX2ZpbGUucGwKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBwZXJsCiAjLyoqIEBmaWxlCi0jICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAjICoKICMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTcxLDMgKzcxLDkgQEAKIHsKICAgICBkaWUgKCJFcnJvcjogbnNfdGVzdF9hZGRyIGlzIG5vdCBmb3VuZCBpbiB0YXJnZXQuY2ZnIGZpbGVcbiIpOwogfQorCitpZigkdG9vbGNoYWluIGVxICJBUk1DTEFORyIpCit7CisgICAgc3lzdGVtKCJjcHAgLXggYXNzZW1ibGVyLXdpdGgtY3BwIC13IC1FIC1vICRsaW5rZXJfb3V0LnRtcCAkbGlua2VyX291dCAiKSAmJiBkaWUgKCJGYWlsZWQgdG8gcHJvY2VzcyAkbGlua2VyX291dFxuIik7CisgICAgc3lzdGVtKCJjcCAkbGlua2VyX291dC50bXAgICRsaW5rZXJfb3V0Iik7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdG9vbHMvc2NyaXB0cy9zZXR1cC5zaCBiL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL3NldHVwLnNoCmluZGV4IDMxNDE4MDYuLmJlYzE3N2IgMTAwNzU1Ci0tLSBhL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL3NldHVwLnNoCisrKyBiL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL3NldHVwLnNoCkBAIC0xLDcgKzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgYmFzaAotCiAjLyoqIEBmaWxlCi0jICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAjICoKICMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDEzICsxOSwzNiBAQAogZWNobyAiIgogCiBkZWNsYXJlIC1hIElOQ0xVREVfUEFUSFMKK2V4cG9ydCBTVUlURT0iICIKIGV4cG9ydCBURVNUX0NPTUJJTkVfQVJDSElWRT0wCiBleHBvcnQgQ0xJRU5UX0ZJTEVfRk9VTkQ9MAogZXhwb3J0IFNFUlZJQ0VfRklMRV9GT1VORD0wCitleHBvcnQgQ1JZUFRPX0ZJTEVfRk9VTkQ9MAorZXhwb3J0IFBST1RFQ1RFRF9TVE9SQUdFX0ZJTEVfRk9VTkQ9MAorZXhwb3J0IElOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9GSUxFX0ZPVU5EPTAKK2V4cG9ydCBJTklUSUFMX0FUVEVTVEFUSU9OX0ZJTEVfRk9VTkQ9MAorCitJUENfSEVBREVSX0ZJTEVfUkVRPSJJZiBQU0EgSVBDIGltcGxlbWVudGVkIGluIHlvdXIgcGxhdGZvcm0sIGluY2x1ZGUgcGF0aCBtdXN0IHBvaW50IHRvIHBhdGgKK3doZXJlIFwicHNhL2NsaWVudC5oXCIsIFwicHNhL3NlcnZpY2UuaFwiIGFuZCB0ZXN0IHBhcnRpdGlvbiBtYW5pZmVzdCBvdXRwdXQgZmlsZXMKKyhcInBzYV9tYW5pZmVzdC9zaWQuaFwiIGFuZCBcInBzYV9tYW5pZmVzdC88bWFuaWZlc3RmaWxlbmFtZT4uaFwiKSBhcmUgbG9jYXRlZC4KKyIKK0NSWVBUT19IRUFERVJfRklMRV9SRVE9IklmIFBTQSBDUllQVE8gQVBJcyBhcmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIHBsYXRmb3JtIHRoZW4geW91IG11c3QgcHJvdmlkZQorXCJwc2EvY3J5cHRvLmhcIiBmaWxlIHRvIHNldHVwLnNoIHNjcmlwdCB1c2luZyAtLWluY2x1ZGUgb3B0aW9uIHRvIGNvbXBpbGUgdGVzdHMgYW5kIGZyYW1ld29yay4KKyIKK1BTX0hFQURFUl9GSUxFX1JFUT0iSWYgUFNBIFBST1RFQ1RFRCBTVE9SQUdFIEFQSXMgYXJlIGltcGxlbWVudGVkIGludG8geW91ciBwbGF0Zm9ybSB0aGVuIHlvdSBtdXN0IHByb3ZpZGUKK1wicHNhL3Byb3RlY3RlZF9zdG9yYWdlLmhcIiBmaWxlIHRvIHNldHVwLnNoIHNjcmlwdCB1c2luZyAtLWluY2x1ZGUgb3B0aW9uIHRvIGNvbXBpbGUgdGVzdHMgYW5kIGZyYW1ld29yay4KKyIKK0lUU19IRUFERVJfRklMRV9SRVE9IklmIFBTQSBJTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0UgQVBJcyBhcmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIHBsYXRmb3JtIHRoZW4geW91IG11c3QgcHJvdmlkZQorXCJwc2EvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLmhcIiBmaWxlIHRvIHNldHVwLnNoIHNjcmlwdCB1c2luZyAtLWluY2x1ZGUgb3B0aW9uIHRvIGNvbXBpbGUgdGVzdHMgYW5kIGZyYW1ld29yay4KKyIKK0FUVEVTVEFUSU9OX0hFQURFUl9GSUxFX1JFUT0iSWYgUFNBIElOSVRJQUxfQVRURVNUQVRJT04gQVBJcyBhcmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIHBsYXRmb3JtIHRoZW4geW91IG11c3QgcHJvdmlkZQorXCJwc2EvaW5pdGlhbF9hdHRlc3RhdGlvbi5oXCIgZmlsZSB0byBzZXR1cC5zaCBzY3JpcHQgdXNpbmcgLS1pbmNsdWRlIG9wdGlvbiB0byBjb21waWxlIHRlc3RzIGFuZCBmcmFtZXdvcmsuCisiCisKIEhFTFA9IgogCiBVc2FnZTogc2V0dXAuc2ggWy0tc291cmNlIFNPVVJDRV9ESVJdIFstLWJ1aWxkIEJVSUxEX0RJUl0gWy0tdGFyZ2V0IFRBUkdFVF0gWy0tc3VpdGUgU1VJVEVdCi0gICAgICAgICAgICAgICAgWy0tdG9vbGNoYWluIFRPT0xDSEFJTl0gWy0tY3B1X2FyY2ggQ1BVX0FSQ0hdIFstLWNsZWFuXSBbLS12ZXJib3NlIFBSSU5UX0xFVkVMXQorICAgICAgICAgICAgICAgIFstLXRvb2xjaGFpbiBUT09MQ0hBSU5dIFstLWNwdV9hcmNoIENQVV9BUkNIXSBbLS12ZXJib3NlIFBSSU5UX0xFVkVMXQogICAgICAgICAgICAgICAgIFstLWluY2x1ZGUgSU5DTFVERV9QQVRIXSBbLS1oZWxwfC1oXQogCiBBcmd1bWVudHMgSW5mbzoKQEAgLTM2LDI5ICs1OCwzMiBAQAogICAgIC0tdGFyZ2V0IDxUQVJHRVQ+ICAgICAgIDogUHJvdmlkZSB0YXJnZXQgc3RyaW5nIGFzIGFyZ3VtZW50LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmNmZyBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gaW5wdXQgc3RyaW5nIG11c3QgYmUgYXZhaWFibGUgYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtL3RhcmdldHMvPFRBUkdFVD4vCi0gICAgLS1zdWl0ZSA8U1VJVEU+ICAgICAgICAgOiBDb21waWxlIHRlc3RzIGZvciBnaXZlbiBzdWl0ZS4gU3VwcG9ydCB2YWx1ZXMgYXJlIGlwYyBhbmQgY3J5cHRvLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBpcyBpcGMgc3VpdGUuCi0gICAgLS10b29sY2hhaW4gPFRPT0xDSEFJTj4gOiBCdWlsZCB1c2luZyB0aGUgZ2l2ZW4gVE9PTENIQUlOLiBTdXBwb3J0ZWQgdmFsdWUgaXMgR05VQVJNIChHTlUgQXJtIEVtYmVkZGVkKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1dHVyZSByZWxlYXNlIHdpbGwgYmUgZXh0ZW5kZWQgdG8gc3VwcG9ydCBBUk1DTEFORyAoQVJNIENvbXBpbGVyIDYueCkuCisgICAgLS1zdWl0ZSA8U1VJVEU+ICAgICAgICAgOiBDb21waWxlIHRlc3RzIGZvciBnaXZlbiBzdWl0ZS4gU3VwcG9ydCB2YWx1ZXMgYXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBjLCBjcnlwdG8sIGludGVybmFsX3RydXN0ZWRfc3RvcmFnZSBhbmQgcHJvdGVjdGVkX3N0b3JhZ2UuCisgICAgLS10b29sY2hhaW4gPFRPT0xDSEFJTj4gOiBCdWlsZCB1c2luZyB0aGUgZ2l2ZW4gVE9PTENIQUlOLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkIHZhbHVlcyBhcmUgR05VQVJNIChHTlUgQXJtIEVtYmVkZGVkKSBhbmQgQVJNQ0xBTkcgKEFSTSBDb21waWxlciA2LngpLgogICAgIC0tY3B1X2FyY2ggPENQVV9BUkNIPiAgIDogUHJvdmlkZSBjcHUgYXJjaCBzdHJpbmcgYXMgYXJndW1lbnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWQgQ1BVIGFyY2ggYXJlIGFybXY4bV9tbCwgYXJtdjhtX2JsIGFuZCBhcm12N20uCi0gICAgLS1jbGVhbiAgICAgICAgICAgICAgICAgOiBDbGVhbiB0aGUgYnVpbGQgZGlyZWN0b3J5CiAgICAgLS12ZXJib3NlIDxQUklOVF9MRVZFTD4gOiBQcmludCB2ZXJib3NpdHkgbGV2ZWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnRlZCBwcmludCBsZXZlbHMgYXJlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gSU5GTyAmIGFib3ZlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gREVCVUcgJiBhYm92ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtIFRFU1QgJiBhYm92ZS4oRGVmYXVsdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAtIFdBUk4gJiBFUlJPUi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtIFRFU1QgJiBhYm92ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAtIFdBUk4gJiBFUlJPUi4oRGVmYXVsdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAtIEVSUk9SLgogICAgIC0taW5jbHVkZSA8SU5DTFVERV9QQVRIPjogQWRkaXRpb25hbCBkaXJlY3RvcnkgdG8gYmUgaW5jbHVkZWQgaW50byBjb21waWxlciBzZWFyY2ggcGF0aC4gUHJvdmlkZSAtLWluY2x1ZGUgPHBhdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBwYXRoIHBvaW50aW5nIHRvIGxvY2F0aW9uIG9mIFBTQSBkZWZpbmVkIGhlYWRlciBmaWxlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSBzb3VyY2UgbG9jYXRpb25zIHVzaW5nIC0taW5jbHVkZSBvcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeDogLS1pbmNsdWRlIDxwYXRoMT4gIC0taW5jbHVkZSA8cGF0aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlLSBJZiBQU0EgSVBDIGltcGxlbWVudGVkIGluIHlvdXIgcGxhdGZvcm0sIGluY2x1ZGUgcGF0aCBtdXN0IHBvaW50IHRvIHBhdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIFwicHNhL2NsaWVudC5oXCIsIFwicHNhL3NlcnZpY2UuaFwiIGFuZCB0ZXN0IHBhcnRpdGlvbiBtYW5pZmVzdCBvdXRwdXQgZmlsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcInBzYV9tYW5pZmVzdC9zaWQuaFwiIGFuZCBcInBzYV9tYW5pZmVzdC88bWFuaWZlc3RmaWxlbmFtZT4uaFwiKSBhcmUgbG9jYXRlZC4KICAgICAtLWhlbHB8LWggICAgICAgICAgICAgICA6IFByaW50IHRoaXMgaGVscCBtZXNzYWdlCiAKK05vdGVzOgorMS4gJElQQ19IRUFERVJfRklMRV9SRVEKKzIuICRDUllQVE9fSEVBREVSX0ZJTEVfUkVRCiszLiAkUFNfSEVBREVSX0ZJTEVfUkVRCis0LiAkSVRTX0hFQURFUl9GSUxFX1JFUQorNS4gJEFUVEVTVEFUSU9OX0hFQURFUl9GSUxFX1JFUQorCiAiCiAKIGlmIFsgIiQjIiA9PSAiMCIgXTsgdGhlbgpAQCAtODcsOSArMTEyLDYgQEAKICAgICAgICAtLWNwdV9hcmNoICkgIHNoaWZ0CiAgICAgICAgICAgICAgICAgICBleHBvcnQgQ1BVX0FSQ0g9JDEKICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgLS1jbGVhbiApCi0gICAgICAgICAgICAgICAgICBleHBvcnQgQ0xFQU49MQotICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAtLXZlcmJvc2UgKSAgc2hpZnQKICAgICAgICAgICAgICAgICAgIGV4cG9ydCBWRVJCT1NFPSQxCiAgICAgICAgICAgICAgICAgICA7OwpAQCAtMTAwLDEyICsxMjIsMTIgQEAKICAgICAgICAgICAgICAgICAgIGV4cG9ydCBJTkNMVURFPSIkSU5DTFVERSAtSSAkMS8iCiAgICAgICAgICAgICAgICAgICBJTkNMVURFX1BBVEhTPSgiJHtJTkNMVURFX1BBVEhTW0BdfSIgJDEpCiAgICAgICAgICAgICAgICAgICA7OwotICAgICAgIC0taGVscCB8IC1oIHwgKiApCisgICAgICAgLS1oZWxwIHwgLWggKQogICAgICAgICAgICAgICAgICAgZWNobyAiJEhFTFAiCiAgICAgICAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAqICkKLSAgICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yOiBJbnZhaWQgYXJndW1lbnQiCisgICAgICAgICAgICAgICAgICBlY2hvICJFcnJvcjogSW52YWlkIGFyZ3VtZW50ICQxIgogICAgICAgICAgICAgICAgICAgZWNobyAiJEhFTFAiCiAgICAgICAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgZXNhYwpAQCAtMTQzLDIyICsxNjUsMjYgQEAKICAgIGVjaG8gIlVzaW5nIFwkVEFSR0VUPSRUQVJHRVQiCiBmaQogCi1pZiBbIC16ICIkU1VJVEUiIF0KK2lmIFsgIiRTVUlURSIgIT0gImlwYyIgXSAmJiBbICIkU1VJVEUiICE9ICJjcnlwdG8iIF0gJiYgIFsgIiRTVUlURSIgIT0gInByb3RlY3RlZF9zdG9yYWdlIiBdICYmCisgICBbICIkU1VJVEUiICE9ICJpbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UiIF0gJiYgIFsgIiRTVUlURSIgIT0gImluaXRpYWxfYXR0ZXN0YXRpb24iIF0KIHRoZW4KLSAgIGV4cG9ydCBTVUlURT1pcGMKLSAgIGVjaG8gIi0tc3VpdGUgb3B0aW9uIGlzIG5vdCBwcm92aWRlZCwgaGVuY2UgdXNpbmcgZGVmYXVsdCB2YWx1ZSBcJFNVSVRFPSRTVUlURSIKLWVsc2UKLSAgIGVjaG8gIlVzaW5nIFwkU1VJVEU9JFNVSVRFIgorICAgZWNobyAiRXJyb3I6IFVuc3VwcG9ydGVkIHZhbHVlIGZvciAtLXN1aXRlPSRTVUlURS4KKyAgIFJlZmVyIGhlbHAgbWVzc2FnZSB0byBzZWUgc3VwcG9ydGVkIHN1aXRlcyIKKyAgIGV4aXQgMQogZmkKIAotUFNBX0lQQ19JTVBMRU1FTlRFRD1gZ3JlcCAtYyAiXiAqUFNBX0lQQ19JTVBMRU1FTlRFRFxzKjo9XHMqMSIgJFNPVVJDRS9wbGF0Zm9ybS90YXJnZXRzLyRUQVJHRVQvTWFrZWZpbGVgCi1QU0FfQ1JZUFRPX0lNUExFTUVOVEVEPWBncmVwIC1jICJeICpQU0FfQ1JZUFRPX0lNUExFTUVOVEVEXHMqOj1ccyoxIiAkU09VUkNFL3BsYXRmb3JtL3RhcmdldHMvJFRBUkdFVC9NYWtlZmlsZWAKK1BMQVRGT1JNX01BS0VGSUxFPSRTT1VSQ0UvcGxhdGZvcm0vdGFyZ2V0cy8kVEFSR0VUL01ha2VmaWxlCitQU0FfSVBDX0lNUExFTUVOVEVEPWBncmVwIC1jICJeICpQU0FfSVBDX0lNUExFTUVOVEVEXHMqOj1ccyoxIiAkUExBVEZPUk1fTUFLRUZJTEVgCitQU0FfQ1JZUFRPX0lNUExFTUVOVEVEPWBncmVwIC1jICJeICpQU0FfQ1JZUFRPX0lNUExFTUVOVEVEXHMqOj1ccyoxIiAkUExBVEZPUk1fTUFLRUZJTEVgCitQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQ9YGdyZXAgLWMgIl4gKlBTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRFxzKjo9XHMqMSIgJFBMQVRGT1JNX01BS0VGSUxFYAorUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRD1gZ3JlcCAtYyAiXiAqUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRFxzKjo9XHMqMSIgJFBMQVRGT1JNX01BS0VGSUxFYAorUFNBX0lOSVRJQUxfQVRURVNUQVRJT05fSU1QTEVNRU5URUQ9YGdyZXAgLWMgIl4gKlBTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEXHMqOj1ccyoxIiAkUExBVEZPUk1fTUFLRUZJTEVgCiAKICMgQ2hlY2sgUFNBX0lQQ19JTVBMRU1FTlRFRCB2YWxpZGl0eQogaWYgWyAkU1VJVEUgPT0gImlwYyIgXSAmJiBbICRQU0FfSVBDX0lNUExFTUVOVEVEID09ICIwIiBdCiB0aGVuCiAgICBlY2hvICJFcnJvcjogUFNBX0lQQ19JTVBMRU1FTlRFRCBtdXN0IGJlIHNldCB0byAxIGZvciBpcGMgc3VpdGUKLSAgICAgICAgIGluICRTT1VSQ0UvcGxhdGZvcm0vJFRBUkdFVC9NYWtlZmlsZSIKKyAgICAgICAgIGluICRQTEFURk9STV9NQUtFRklMRSIKICAgIGV4aXQgMQogZmkKIApAQCAtMTY2LDcgKzE5MiwzMSBAQAogaWYgWyAkU1VJVEUgPT0gImNyeXB0byIgXSAmJiBbICRQU0FfQ1JZUFRPX0lNUExFTUVOVEVEID09ICIwIiBdCiB0aGVuCiAgICBlY2hvICJFcnJvcjogUFNBX0NSWVBUT19JTVBMRU1FTlRFRCBtdXN0IGJlIHNldCB0byAxIGZvciBjcnlwdG8gc3VpdGUKLSAgICAgICAgIGluICRTT1VSQ0UvcGxhdGZvcm0vJFRBUkdFVC9NYWtlZmlsZSIKKyAgICAgICAgIGluICRQTEFURk9STV9NQUtFRklMRSIKKyAgIGV4aXQgMQorZmkKKworIyBDaGVjayBQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQgdmFsaWRpdHkKK2lmIFsgJFNVSVRFID09ICJwcm90ZWN0ZWRfc3RvcmFnZSIgXSAmJiBbICRQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQgPT0gIjAiIF0KK3RoZW4KKyAgIGVjaG8gIkVycm9yOiBQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQgbXVzdCBiZSBzZXQgdG8gMSBmb3IgcHJvdGVjdGVkX3N0b3JhZ2Ugc3VpdGUKKyAgICAgICAgIGluICRQTEFURk9STV9NQUtFRklMRSIKKyAgIGV4aXQgMQorZmkKKworIyBDaGVjayBQU0FfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEIHZhbGlkaXR5CitpZiBbICRTVUlURSA9PSAiaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlIiBdICYmIFsgJFBTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQgPT0gIjAiIF0KK3RoZW4KKyAgIGVjaG8gIkVycm9yOiBQU0FfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEIG11c3QgYmUgc2V0IHRvIDEgZm9yIGludGVybmFsX3RydXN0ZWRfc3RvcmFnZSBzdWl0ZQorICAgICAgICAgaW4gJFBMQVRGT1JNX01BS0VGSUxFIgorICAgZXhpdCAxCitmaQorCisjIENoZWNrIFBTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEIHZhbGlkaXR5CitpZiBbICRTVUlURSA9PSAiaW5pdGlhbF9hdHRlc3RhdGlvbiIgXSAmJiBbICRQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRCA9PSAiMCIgXQordGhlbgorICAgZWNobyAiRXJyb3I6IFBTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEIG11c3QgYmUgc2V0IHRvIDEgZm9yIGluaXRpYWxfYXR0ZXN0YXRpb24gc3VpdGUKKyAgICAgICAgIGluICRQTEFURk9STV9NQUtFRklMRSIKICAgIGV4aXQgMQogZmkKIApAQCAtMTc1LDEyICsyMjUsNyBAQAogICAgICMgQ2hlY2sgLS1pbmNsdWRlIHZhbGlkaXR5IGZvciBpcGMgc3VpdGUKICAgICBpZiBbIC16ICIkSU5DTFVERSIgXQogICAgIHRoZW4KLSAgICAgICAgICBlY2hvICJFcnJvcjogLS1pbmNsdWRlIG9wdGlvbiBpcyBub3QgcHJvdmlkZWQuCi0gICAgICAgICAgWW91IG11c3QgcHJvdmlkZSBQU0EgZGVmaW5lZCBBUEkgZWxlbWVudCBoZWFkZXIgZmlsZXMgInBzYS9jbGllbnQuaCIgYW5kICJwc2Evc2VydmljZS5oIgotICAgICAgICAgIGFuZCB0ZXN0IHBhcnRpdGlvbiBtYW5pZmVzdCBvdXRwdXQgZmlsZXMgdG8gY29tcGlsZSB0ZXN0cyBhbmQgdGVzdCBmcmFtZXdvcmsuCi0gICAgICAgICAgUHJvdmlkZSAtLWluY2x1ZGUgPHBhdGg+IHdoZXJlIHBhdGggcG9pbnRpbmcgdG8gbG9jYXRpb24gb2YgcmVxdWlyZWQgZmlsZXMuCi0gICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IG11bHRpcGxlIHNvdXJjZSBsb2NhdGlvbnMgdXNpbmcgLS1pbmNsdWRlIG9wdGlvbi4KLSAgICAgICAgICBFeDogLS1pbmNsdWRlIDxwYXRoMT4gIC0taW5jbHVkZSA8cGF0aDI+ICIKKyAgICAgICAgICBlY2hvICJFcnJvcjogLS1pbmNsdWRlIG9wdGlvbiBpcyBub3QgcHJvdmlkZWQuICRJUENfSEVBREVSX0ZJTEVfUkVRIgogICAgICAgICAgIGV4aXQgMQogICAgIGVsc2UKICAgICAgICAgZm9yIHBhdGggaW4gIiR7SU5DTFVERV9QQVRIU1tAXX0iCkBAIC0xOTcsMTYgKzI0MiwxMTkgQEAKICAgICAgICAgaWYgWyAkQ0xJRU5UX0ZJTEVfRk9VTkQgPT0gICIwIiBdCiAgICAgICAgIHRoZW4KICAgICAgICAgICAgIGVjaG8gIkNvdWxkbid0IGZpbmQgcHNhL2NsaWVudC5oIGZpbGUgaW4gcGF0aHM6ICR7SU5DTFVERV9QQVRIU1tAXX0iCisgICAgICAgICAgICBlY2hvICIkSVBDX0hFQURFUl9GSUxFX1JFUSIKICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICBmaQogICAgICAgICBpZiBbICRTRVJWSUNFX0ZJTEVfRk9VTkQgPT0gIjAiIF0KICAgICAgICAgdGhlbgogICAgICAgICAgICAgZWNobyAiQ291bGRuJ3QgZmluZCBwc2Evc2VydmljZS5oIGZpbGUgaW4gcGF0aHM6ICR7SU5DTFVERV9QQVRIU1tAXX0iCisgICAgICAgICAgICBlY2hvICIkSVBDX0hFQURFUl9GSUxFX1JFUSIKICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICBmaQogICAgIGZpCiBmaQogCitpZiBbICRQU0FfQ1JZUFRPX0lNUExFTUVOVEVEID09ICIxIiBdCit0aGVuCisgICAgIyBDaGVjayAtLWluY2x1ZGUgdmFsaWRpdHkgZm9yIGNyeXB0byBzdWl0ZQorICAgIGlmIFsgLXogIiRJTkNMVURFIiBdCisgICAgdGhlbgorICAgICAgICAgIGVjaG8gIkVycm9yOiAtLWluY2x1ZGUgb3B0aW9uIGlzIG5vdCBwcm92aWRlZC4iCisgICAgICAgICAgZWNobyAiJENSWVBUT19IRUFERVJfRklMRV9SRVEiCisgICAgICAgICAgZXhpdCAxCisgICAgZWxzZQorICAgICAgICBmb3IgcGF0aCBpbiAiJHtJTkNMVURFX1BBVEhTW0BdfSIKKyAgICAgICAgZG8KKyAgICAgICAgICAgIGlmIFsgLWYgIiRwYXRoL3BzYS9jcnlwdG8uaCIgXQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIGV4cG9ydCBDUllQVE9fRklMRV9GT1VORD0xCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgICAgIGlmIFsgJENSWVBUT19GSUxFX0ZPVU5EID09ICAiMCIgXQorICAgICAgICB0aGVuCisgICAgICAgICAgICBlY2hvICJDb3VsZG4ndCBmaW5kIHBzYS9jcnlwdG8uaCBmaWxlIGluIHBhdGhzOiAke0lOQ0xVREVfUEFUSFNbQF19IgorICAgICAgICAgICAgZWNobyAiJENSWVBUT19IRUFERVJfRklMRV9SRVEiCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKyAgICBmaQorZmkKKworaWYgWyAkUFNBX1BST1RFQ1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEID09ICIxIiBdCit0aGVuCisgICAgIyBDaGVjayAtLWluY2x1ZGUgdmFsaWRpdHkgZm9yIHByb3RlY3RlZCBzdG9yYWdlIHN1aXRlCisgICAgaWYgWyAteiAiJElOQ0xVREUiIF0KKyAgICB0aGVuCisgICAgICAgICAgZWNobyAiRXJyb3I6IC0taW5jbHVkZSBvcHRpb24gaXMgbm90IHByb3ZpZGVkLiIKKyAgICAgICAgICBlY2hvICIkUFNfSEVBREVSX0ZJTEVfUkVRIgorICAgICAgICAgIGV4aXQgMQorICAgIGVsc2UKKyAgICAgICAgZm9yIHBhdGggaW4gIiR7SU5DTFVERV9QQVRIU1tAXX0iCisgICAgICAgIGRvCisgICAgICAgICAgICBpZiBbIC1mICIkcGF0aC9wc2EvcHJvdGVjdGVkX3N0b3JhZ2UuaCIgXQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIGV4cG9ydCBQUk9URUNURURfU1RPUkFHRV9GSUxFX0ZPVU5EPTEKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgaWYgWyAkUFJPVEVDVEVEX1NUT1JBR0VfRklMRV9GT1VORCA9PSAgIjAiIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgZWNobyAiQ291bGRuJ3QgZmluZCBwc2EvcHJvdGVjdGVkX3N0b3JhZ2UuaCBmaWxlIGluIHBhdGhzOiAke0lOQ0xVREVfUEFUSFNbQF19IgorICAgICAgICAgICAgZWNobyAiJFBTX0hFQURFUl9GSUxFX1JFUSIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgIGZpCitmaQorCitpZiBbICRQU0FfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEID09ICIxIiBdCit0aGVuCisgICAgIyBDaGVjayAtLWluY2x1ZGUgdmFsaWRpdHkgZm9yIGludGVybmFsIHRydXN0ZWQgc3RvcmFnZSBzdWl0ZQorICAgIGlmIFsgLXogIiRJTkNMVURFIiBdCisgICAgdGhlbgorICAgICAgICAgIGVjaG8gIkVycm9yOiAtLWluY2x1ZGUgb3B0aW9uIGlzIG5vdCBwcm92aWRlZC4iCisgICAgICAgICAgZWNobyAiJElUU19IRUFERVJfRklMRV9SRVEiCisgICAgICAgICAgZXhpdCAxCisgICAgZWxzZQorICAgICAgICBmb3IgcGF0aCBpbiAiJHtJTkNMVURFX1BBVEhTW0BdfSIKKyAgICAgICAgZG8KKyAgICAgICAgICAgIGlmIFsgLWYgIiRwYXRoL3BzYS9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UuaCIgXQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIGV4cG9ydCBJTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfRklMRV9GT1VORD0xCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgICAgIGlmIFsgJElOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9GSUxFX0ZPVU5EID09ICAiMCIgXQorICAgICAgICB0aGVuCisgICAgICAgICAgICBlY2hvICJDb3VsZG4ndCBmaW5kIHBzYS9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UuaCBmaWxlIGluIHBhdGhzOiAke0lOQ0xVREVfUEFUSFNbQF19IgorICAgICAgICAgICAgZWNobyAiJElUU19IRUFERVJfRklMRV9SRVEiCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKyAgICBmaQorZmkKKworaWYgWyAkUFNBX0lOSVRJQUxfQVRURVNUQVRJT05fSU1QTEVNRU5URUQgPT0gIjEiIF0KK3RoZW4KKyAgICAjIENoZWNrIC0taW5jbHVkZSB2YWxpZGl0eSBmb3IgaW5pdGlhbF9hdHRlc3RhdGlvbiBzdWl0ZQorICAgIGlmIFsgLXogIiRJTkNMVURFIiBdCisgICAgdGhlbgorICAgICAgICAgIGVjaG8gIkVycm9yOiAtLWluY2x1ZGUgb3B0aW9uIGlzIG5vdCBwcm92aWRlZC4iCisgICAgICAgICAgZWNobyAiJEFUVEVTVEFUSU9OX0hFQURFUl9GSUxFX1JFUSIKKyAgICAgICAgICBleGl0IDEKKyAgICBlbHNlCisgICAgICAgIGZvciBwYXRoIGluICIke0lOQ0xVREVfUEFUSFNbQF19IgorICAgICAgICBkbworICAgICAgICAgICAgaWYgWyAtZiAiJHBhdGgvcHNhL2luaXRpYWxfYXR0ZXN0YXRpb24uaCIgXQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIGV4cG9ydCBJTklUSUFMX0FUVEVTVEFUSU9OX0ZJTEVfRk9VTkQ9MQorICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICBpZiBbICRJTklUSUFMX0FUVEVTVEFUSU9OX0ZJTEVfRk9VTkQgPT0gICIwIiBdCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkNvdWxkbid0IGZpbmQgcHNhL2luaXRpYWxfYXR0ZXN0YXRpb24uaCBmaWxlIGluIHBhdGhzOiAke0lOQ0xVREVfUEFUSFNbQF19IgorICAgICAgICAgICAgZWNobyAiJEFUVEVTVEFUSU9OX0hFQURFUl9GSUxFX1JFUSIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgIGZpCitmaQorCisKIGlmIFsgLXogIiRUT09MQ0hBSU4iIF0KIHRoZW4KICAgIGV4cG9ydCBUT09MQ0hBSU49R05VQVJNCkBAIC0yMTcsNyArMzY1LDggQEAKIAogaWYgWyAkVE9PTENIQUlOICE9ICJHTlVBUk0iIF0gJiYgWyAkVE9PTENIQUlOICE9ICJBUk1DTEFORyIgXQogdGhlbgotICAgZWNobyAiRXJyb3I6IFVuc3VwcG9ydGVkIHZhbHVlIGZvciAtLXRvb2xjaGFpbj0kVE9PTENIQUlOLiBTdXBwb3J0ZWQgdG9vbGNoYWluIGFyZSBHTlVBUk0gYW5kIEFSTUNMQU5HIgorICAgZWNobyAiRXJyb3I6IFVuc3VwcG9ydGVkIHZhbHVlIGZvciAtLXRvb2xjaGFpbj0kVE9PTENIQUlOLgorICAgU3VwcG9ydGVkIHRvb2xjaGFpbiBhcmUgR05VQVJNIGFuZCBBUk1DTEFORyIKICAgIGV4aXQgMQogZmkKIApAQCAtMjMyLDEzICszODEsMTYgQEAKIAogaWYgWyAkQ1BVX0FSQ0ggIT0gImFybXY4bV9tbCIgXSAmJiBbICRDUFVfQVJDSCAhPSAiYXJtdjhtX2JsIiBdICYmIFsgJENQVV9BUkNIICE9ICJhcm12N20iIF0KIHRoZW4KLSAgIGVjaG8gIkVycm9yOiBVbnN1cHBvcnRlZCB2YWx1ZSBmb3IgLS1jcHVfYXJjaD0kQ1BVX0FSQ0guIFN1cHBvcnRlZCBDUFUgYXJjaCBhcmUgYXJtdjhtX21sLCBhcm12OG1fYmwsIGFybXY3bSIKKyAgIGVjaG8gIkVycm9yOiBVbnN1cHBvcnRlZCB2YWx1ZSBmb3IgLS1jcHVfYXJjaD0kQ1BVX0FSQ0guCisgICBTdXBwb3J0ZWQgQ1BVIGFyY2ggYXJlIGFybXY4bV9tbCwgYXJtdjhtX2JsLCBhcm12N20iCiAgICBleGl0IDEKIGZpCiAKIGlmIFsgISAteiAiJFZFUkJPU0UiIF0KIHRoZW4KLSAgICBpZiBbICRWRVJCT1NFICE9ICIxIiBdICYmIFsgJFZFUkJPU0UgIT0gIjIiIF0gJiYgWyAkVkVSQk9TRSAhPSAiMyIgXSAmJiBbICRWRVJCT1NFICE9ICI0IiBdICYmIFsgJFZFUkJPU0UgIT0gIjUiIF0KKyAgICBpZiBbICRWRVJCT1NFICE9ICIxIiBdICYmIFsgJFZFUkJPU0UgIT0gIjIiIF0gJiYKKyAgICAgICBbICRWRVJCT1NFICE9ICIzIiBdICYmIFsgJFZFUkJPU0UgIT0gIjQiIF0gJiYKKyAgICAgICBbICRWRVJCT1NFICE9ICI1IiBdCiAgICAgdGhlbgogICAgICAgICBlY2hvICJFcnJvcjogVW5zdXBwb3J0ZWQgdmFsdWUgZm9yIC0tdmVyYm9zZT0kVkVSQk9TRS4iCiAgICAgICAgIGVjaG8gIlN1cHBvcnRlZCBwcmludCBsZXZlbHMgYXJlOiIKQEAgLTI1MCw3ICs0MDIsNyBAQAogICAgICAgICBleGl0IDEKICAgICBmaQogZWxzZQotICAgIGV4cG9ydCBWRVJCT1NFPTMKKyAgICBleHBvcnQgVkVSQk9TRT00CiBmaQogCiBNQUtFX09QVElPTlM9IiBTT1VSQ0U9JFNPVVJDRSAiCkBAIC0yNjIsMTMgKzQxNCwxMiBAQAogTUFLRV9PUFRJT05TKz0iIFZFUkJPU0U9JFZFUkJPU0UgIgogTUFLRV9PUFRJT05TKz0iIFRFU1RfQ09NQklORV9BUkNISVZFPSRURVNUX0NPTUJJTkVfQVJDSElWRSAiCiBNQUtFX09QVElPTlMrPSIgUFNBX0lQQ19JTVBMRU1FTlRFRD0kUFNBX0lQQ19JTVBMRU1FTlRFRCAiCitNQUtFX09QVElPTlMrPSIgUFNBX0NSWVBUT19JTVBMRU1FTlRFRD0kUFNBX0NSWVBUT19JTVBMRU1FTlRFRCAiCitNQUtFX09QVElPTlMrPSIgUFNBX1BST1RFQ1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEPSRQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQgIgorTUFLRV9PUFRJT05TKz0iIFBTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQ9JFBTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQgIgorTUFLRV9PUFRJT05TKz0iIFBTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEPSRQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRCAiCiBNQUtFX09QVElPTlMrPSIgVVNFUl9JTkNMVURFPVwiJElOQ0xVREVcIiAiCiAKLWlmIFsgLXogIiRDTEVBTiIgXQotdGhlbgotICAgI0J1aWxkIFZBTC9QQUwgc3RhdGljIGxpYnJhcnkgYW5kIFRlc3RzIEVMRnMKLSAgIGVjaG8gIm1ha2UgLWYgJFNPVVJDRS90b29scy9tYWtlZmlsZXMvTWFrZWZpbGUgJE1BS0VfT1BUSU9OUyBVU0VSX0lOQ0xVREU9XCIkSU5DTFVERVwiIGFsbCAiCi0gICBtYWtlIC1mICRTT1VSQ0UvdG9vbHMvbWFrZWZpbGVzL01ha2VmaWxlICRNQUtFX09QVElPTlMgVVNFUl9JTkNMVURFPSIkSU5DTFVERSIgYWxsCi1lbHNlCi0gICBtYWtlIC1mICRTT1VSQ0UvdG9vbHMvbWFrZWZpbGVzL01ha2VmaWxlICRNQUtFX09QVElPTlMgVVNFUl9JTkNMVURFPSIkSU5DTFVERSIgY2xlYW4KLWZpCisjQnVpbGQgVkFML1BBTCBzdGF0aWMgbGlicmFyeSBhbmQgVGVzdHMgRUxGcworZWNobyAibWFrZSAtZiAkU09VUkNFL3Rvb2xzL21ha2VmaWxlcy9NYWtlZmlsZSAkTUFLRV9PUFRJT05TIFVTRVJfSU5DTFVERT1cIiRJTkNMVURFXCIgYWxsICIKK21ha2UgLWYgJFNPVVJDRS90b29scy9tYWtlZmlsZXMvTWFrZWZpbGUgJE1BS0VfT1BUSU9OUyBVU0VSX0lOQ0xVREU9IiRJTkNMVURFIiBhbGwKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL3RhcmdldENvbmZpZ0dlbi5wbCBiL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL3RhcmdldENvbmZpZ0dlbi5wbAppbmRleCAzNTMxYWZhLi4wMzY1OGVmIDEwMDc1NQotLS0gYS9hcGktdGVzdHMvdG9vbHMvc2NyaXB0cy90YXJnZXRDb25maWdHZW4ucGwKKysrIGIvYXBpLXRlc3RzL3Rvb2xzL3NjcmlwdHMvdGFyZ2V0Q29uZmlnR2VuLnBsCkBAIC0zNyw4ICszNyw2IEBACiAjIE5PVEU6IE9ubHkgQy1zdHlsZSBzaW5nbGUgbGluZSBjb21tZW50aW5nIGlzIHBlcm1pdHRlZCBpbnNpZGUgdGFyZ2V0Q29uZmlnLmNmZwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi11c2UgTGlzdDo6TW9yZVV0aWxzIHF3KHVuaXEpOwotCiBwcmludCAiXG4+Pj4+IEdlbmVyYXRpbmcgdGFyZ2V0Q29uZmlnIGRhdGEgYmFzZS4uLiBcbiI7CiAkc291cmNlPSRBUkdWWzBdOwogJGJ1aWxkPSRBUkdWWzFdOwpAQCAtNTUsNiArNTMsMTEgQEAKIAogQHVuaXF1ZV9kZXZpY2VzID0gdW5kZWY7CiAKK3N1YiB1bmlxIHsKKyAgICBteSAlc2VlbjsKKyAgICBncmVwICEkc2VlbnskX30rKywgQF87Cit9CisKIG9wZW4oSU4sICR0YXJnZXRDb25maWdQYXRoKSBvciBkaWUgIlVuYWJsZSB0byBvcGVuICR0YXJnZXRDb25maWdQYXRoICQhIjsKIG9wZW4oT1VULCAnPicsICRvdXRwdXRfYykgb3IgZGllICJVbmFibGUgdG8gb3BlbjogJCEiOwogCkBAIC0yMjksNyArMjMyLDcgQEAKIHByaW50IE9VVCAiXG5yZXR1cm4gMDtcfVwvXC9pbnQgbWFpbiI7CiAKICNnZW5lcmF0ZSB0YXJnZXRfZGF0YWJhc2UuaCBmaWxlCi1wcmludCAiZ2NjICRvdXRwdXRfYyAtbyAkYnVpbGQvcGxhdGZvcm0vJHRhcmdldC90YXJnZXRDb25maWdHZW4gLUkkc291cmNlL3ZhbC9uc3BlIC1JJHNvdXJjZS92YWwvY29tbW9uXG4iOwotc3lzdGVtKCJnY2MgJG91dHB1dF9jIC1vICRidWlsZC9wbGF0Zm9ybS8kdGFyZ2V0L3RhcmdldENvbmZpZ0dlbiAtSSRzb3VyY2UvdmFsL25zcGUgLUkkc291cmNlL3ZhbC9jb21tb24iKSAmJiBkaWUgKCJGYWlsZWQgdG8gY29tcGlsZSB0YXJnZXRDb25maWdHZW4uYyBcbiIpOworcHJpbnQgImdjYyAtRFRBUkdFVF9DRkdfQlVJTEQgJG91dHB1dF9jIC1vICRidWlsZC9wbGF0Zm9ybS8kdGFyZ2V0L3RhcmdldENvbmZpZ0dlbiAtSSRzb3VyY2UvdmFsL25zcGUgLUkkc291cmNlL3ZhbC9jb21tb24gLUkkc291cmNlL3BsYXRmb3JtL3RhcmdldHMvJHRhcmdldC9uc3BlL1xuIjsKK3N5c3RlbSgiZ2NjIC1EVEFSR0VUX0NGR19CVUlMRCAkb3V0cHV0X2MgLW8gJGJ1aWxkL3BsYXRmb3JtLyR0YXJnZXQvdGFyZ2V0Q29uZmlnR2VuIC1JJHNvdXJjZS92YWwvbnNwZSAtSSRzb3VyY2UvdmFsL2NvbW1vbiAtSSRzb3VyY2UvcGxhdGZvcm0vdGFyZ2V0cy8kdGFyZ2V0L25zcGUvIikgJiYgZGllICgiRmFpbGVkIHRvIGNvbXBpbGUgdGFyZ2V0Q29uZmlnR2VuLmMgXG4iKTsKIHByaW50ICIuLyRidWlsZC9wbGF0Zm9ybS8kdGFyZ2V0L3RhcmdldENvbmZpZ0dlblxuIjsKIHN5c3RlbSgiLi8kYnVpbGQvcGxhdGZvcm0vJHRhcmdldC90YXJnZXRDb25maWdHZW4gIikgJiYgZGllICgiRmFpbGVkIHRvIGdlbmVyYXRlIHRhcmdldENvbmZpZyBkYXRhIGJhc2UgXG4iKTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL3Rlc3RfZWxmX2NvbWJpbmUucGwgYi9hcGktdGVzdHMvdG9vbHMvc2NyaXB0cy90ZXN0X2VsZl9jb21iaW5lLnBsCmluZGV4IDUxOWI1MDMuLjEwOWE0ZTcgMTAwNzU1Ci0tLSBhL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL3Rlc3RfZWxmX2NvbWJpbmUucGwKKysrIGIvYXBpLXRlc3RzL3Rvb2xzL3NjcmlwdHMvdGVzdF9lbGZfY29tYmluZS5wbApAQCAtMTgsNyArMTgsNiBAQAogCiB1c2UgRmlsZTo6RmluZDsKIHVzZSBGaWxlOjpCYXNlbmFtZTsKLXVzZSBMaXN0OjpNb3JlVXRpbHMgJ3VuaXEnOwogCiBwcmludCAiXG4+Pj4+IENvbWJpbmluZyB0ZXN0IEVMRnMuLi4gXG4iOwogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdmFsL2NvbW1vbi92YWwuaCBiL2FwaS10ZXN0cy92YWwvY29tbW9uL3ZhbC5oCmluZGV4IGRlOWNkOGMuLjNlOWE5ZDcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvY29tbW9uL3ZhbC5oCisrKyBiL2FwaS10ZXN0cy92YWwvY29tbW9uL3ZhbC5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xOCwxOCArMTgsNyBAQAogI2lmbmRlZiBfVkFMX0NPTU1PTl9IXwogI2RlZmluZSBfVkFMX0NPTU1PTl9IXwogCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLS8qIHR5cGVkZWYncyAqLwotdHlwZWRlZiB1aW50OF90ICAgICAgICAgICAgIGJvb2xfdDsKLXR5cGVkZWYgdWludDMyX3QgICAgICAgICAgICBhZGRyX3Q7Ci10eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAgdGVzdF9pZF90OwotdHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAgIGJsb2NrX2lkX3Q7Ci10eXBlZGVmIGNoYXIgICAgICAgICAgICAgICAgY2hhcjhfdDsKLXR5cGVkZWYgdWludDMyX3QgICAgICAgICAgICBjZmdfaWRfdDsKLQorI2luY2x1ZGUgInBhbF9jb21tb24uaCIKIAogI2lmbmRlZiBWQUxfTlNQRV9CVUlMRAogI2RlZmluZSBTVEFUSUNfREVDTEFSRSAgc3RhdGljCkBAIC04NCwxNyArNzMsMjIgQEAKICNkZWZpbmUgSVNfVEVTVF9QRU5ESU5HKHN0YXR1cykgKCgoc3RhdHVzID4+IFRFU1RfU1RBVEVfQklUKSAmIFRFU1RfU1RBVEVfTUFTSykgPT0gVEVTVF9QRU5ESU5HKQogI2RlZmluZSBJU19URVNUX1NUQVJUKHN0YXR1cykgICAoKChzdGF0dXMgPj4gVEVTVF9TVEFURV9CSVQpICYgVEVTVF9TVEFURV9NQVNLKSA9PSBURVNUX1NUQVJUKQogI2RlZmluZSBJU19URVNUX0VORChzdGF0dXMpICAgICAoKChzdGF0dXMgPj4gVEVTVF9TVEFURV9CSVQpICYgVEVTVF9TVEFURV9NQVNLKSA9PSBURVNUX0VORCkKLSNkZWZpbmUgVkFMX0VSUk9SKHN0YXR1cykgICAgICAgKHN0YXR1cz8xOjApCisjZGVmaW5lIFZBTF9FUlJPUihzdGF0dXMpICAgICAgICgoc3RhdHVzICYgVEVTVF9TVEFUVVNfTUFTSykgPyAxIDogMCkKIAogCiAKIC8qIFRlc3QgRGVmaW5lcyAqLwogI2RlZmluZSBURVNUX1BVQkxJU0godGVzdF9pZCwgZW50cnkpIFwKLSAgIGNvbnN0IHZhbF90ZXN0X2luZm9fdCBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuYWNzX3Rlc3RfaW5mbyIpKSkgQ09OQ0FUKGFjc190ZXN0X2luZm8sIGVudHJ5KSA9IHt0ZXN0X2lkLCBlbnRyeX0KKyAgIGNvbnN0IHZhbF90ZXN0X2luZm9fdCBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuYWNzX3Rlc3RfaW5mbyIpKSkgXAorICAgICAgICAgICAgICAgICAgICAgIENPTkNBVChhY3NfdGVzdF9pbmZvLCBlbnRyeSkgPSB7dGVzdF9pZCwgZW50cnl9CiAKLSNkZWZpbmUgVkFMX01BWF9URVNUX1BFUl9DT01QICAgICAgICAgICAyMDAKLSNkZWZpbmUgVkFMX0ZGX0JBU0UgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFZBTF9DUllQVE9fQkFTRSAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBWQUxfTUFYX1RFU1RfUEVSX0NPTVAgICAgICAgICAgICAgICAgMjAwCisjZGVmaW5lIFZBTF9GRl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVkFMX0NSWVBUT19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBWQUxfUFJPVEVDVEVEX1NUT1JBR0VfQkFTRSAgICAgICAgICAgICAyCisjZGVmaW5lIFZBTF9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfQkFTRSAgICAgIDMKKyNkZWZpbmUgVkFMX0lOSVRJQUxfQVRURVNUQVRJT05fQkFTRSAgICAgICAgICAgNAorCiAjZGVmaW5lIFZBTF9HRVRfQ09NUF9OVU0odGVzdF9pZCkgICAgICBcCiAgICAoKHRlc3RfaWQgLSAodGVzdF9pZCAlIFZBTF9NQVhfVEVTVF9QRVJfQ09NUCkpIC8gVkFMX01BWF9URVNUX1BFUl9DT01QKQogI2RlZmluZSBWQUxfR0VUX1RFU1RfTlVNKHRlc3RfaWQpICAgICAgKHRlc3RfaWQgJSBWQUxfTUFYX1RFU1RfUEVSX0NPTVApCkBAIC0xMDIsNyArOTYsNyBAQAogCiAjZGVmaW5lIFRFU1RfRklFTEQobnVtMSxudW0yKSAgICAgICAgICAgKG51bTIgPDwgOCB8IG51bTEpCiAjZGVmaW5lIEdFVF9URVNUX0lTT0xBVElPTl9MRVZFTChudW0pICAgKG51bSAmIDB4MykKLSNkZWZpbmUgR0VUX1dEX1RJTU9VVF9UWVBFKG51bSkgICAgICAgICAoKG51bSA+PiA4KSAmIDB4MykKKyNkZWZpbmUgR0VUX1dEX1RJTU9VVF9UWVBFKG51bSkgICAgICAgICAoKG51bSA+PiA4KSAmIDB4NykKIAogI2RlZmluZSBURVNUX0NIRUNLUE9JTlRfTlVNKG4pICAgICAgICAgIG4KICNkZWZpbmUgVEVTVChuKSAgICAgICAgICAgICAgICAgICAgICAgICBuCkBAIC0xMjEsOSArMTE1LDU2IEBACiAjZGVmaW5lIFZBTF9OVk1FTV9CTE9DS19TSVpFICAgICAgICAgICA0CiAjZGVmaW5lIFZBTF9OVk1FTV9PRkZTRVQobnZtZW1faWR4KSAgICAobnZtZW1faWR4ICogVkFMX05WTUVNX0JMT0NLX1NJWkUpCiAKLSNkZWZpbmUgVUFSVF9JTklUX1NJR04gMHhmZgorI2RlZmluZSBVQVJUX0lOSVRfU0lHTiAgMHhmZgogI2RlZmluZSBVQVJUX1BSSU5UX1NJR04gMHhmZQogCisjZGVmaW5lIFRFU1RfUEFOSUMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDEpCisKKyNkZWZpbmUgVEVTVF9BU1NFUlRfRVFVQUwoYXJnMSwgYXJnMiwgY2hlY2twb2ludCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKChhcmcxKSAhPSBhcmcyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCBhdCBDaGVja3BvaW50OiAlZFxuIiwgY2hlY2twb2ludCk7ICAgIFwKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEFjdHVhbDogJWRcbiIsIGFyZzEpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEV4cGVjdGVkOiAlZFxuIiwgYXJnMik7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFRFU1RfQVNTRVJUX0RVQUwoYXJnMSwgc3RhdHVzMSwgc3RhdHVzMiwgY2hlY2twb2ludCkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICgoYXJnMSkgIT0gc3RhdHVzMSAmJiAoYXJnMSkgIT0gc3RhdHVzMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgYXQgQ2hlY2twb2ludDogJWRcbiIsIGNoZWNrcG9pbnQpOyAgICBcCisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRBY3R1YWw6ICVkXG4iLCBhcmcxKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZDogJWQiLCBzdGF0dXMxKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAib3IgJWRcbiIsIHN0YXR1czIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBURVNUX0FTU0VSVF9OT1RfRVFVQUwoYXJnMSwgYXJnMiwgY2hlY2twb2ludCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoKGFyZzEpID09IGFyZzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIGF0IENoZWNrcG9pbnQ6ICVkXG4iLCBjaGVja3BvaW50KTsgICAgXAorICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0VmFsdWU6ICVkXG4iLCBhcmcxKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgVEVTVF9BU1NFUlRfTUVNQ01QKGJ1ZjEsIGJ1ZjIsIHNpemUsIGNoZWNrcG9pbnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKG1lbWNtcChidWYxLCBidWYyLCBzaXplKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCBhdCBDaGVja3BvaW50OiAlZCA6ICIsIGNoZWNrcG9pbnQpOyAgIFwKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJVbmVxdWFsIGRhdGEgaW4gY29tcGFyZWQgYnVmZmVyc1xuIiwgMCk7ICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCiAvKiBlbnVtcyAqLwogdHlwZWRlZiBlbnVtIHsKICAgICBOT05TRUNVUkUgPSAweDAsCkBAIC0xNTIsMjkgKzE5Myw2IEBACiAgICAgTlZfVEVTVF9DTlQgICAgICAgICA9IDB4MywKIH0gbnZtZW1faW5kZXhfdDsKIAotdHlwZWRlZiBlbnVtIHsKLSAgICBXRF9JTklUX1NFUSAgICAgICAgID0gMHgxLAotICAgIFdEX0VOQUJMRV9TRVEgICAgICAgPSAweDIsCi0gICAgV0RfRElTQUJMRV9TRVEgICAgICA9IDB4MywKLSAgICBXRF9TVEFUVVNfU0VRICAgICAgID0gMHg0LAotfSB3ZF9mbl90eXBlX3Q7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gICAgV0RfTE9XX1RJTUVPVVQgICAgICA9IDB4MSwKLSAgICBXRF9NRURJVU1fVElNRU9VVCAgID0gMHgyLAotICAgIFdEX0hJR0hfVElNRU9VVCAgICAgPSAweDMsCi19IHdkX3RpbWVvdXRfdHlwZV90OwotCi10eXBlZGVmIGVudW0gewotICAgIE5WTUVNX1JFQUQgICAgICAgICAgICAgPSAweDEsCi0gICAgTlZNRU1fV1JJVEUgICAgICAgICAgICA9IDB4MiwKLX0gbnZtZW1fZm5fdHlwZV90OwotCi10eXBlZGVmIGVudW0gewotICAgIFVBUlRfSU5JVCAgICAgICAgICAgICA9IDB4MSwKLSAgICBVQVJUX1BSSU5UICAgICAgICAgICAgPSAweDIsCi19IHVhcnRfZm5fdHlwZV90OwotCiAvKiBlbnVtcyB0byByZXBvcnQgdGVzdCBzdWItc3RhdGUgKi8KIHR5cGVkZWYgZW51bSB7CiAgIFZBTF9TVEFUVVNfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgID0gMHgwLApAQCAtMjAzLDYgKzIyMSw5IEBACiAgIFZBTF9TVEFUVVNfSU5WQUxJRF9TSVpFICAgICAgICAgICAgICAgID0gMHgyNiwKICAgVkFMX1NUQVRVU19EQVRBX01JU01BVENIICAgICAgICAgICAgICAgPSAweDI3LAogICBWQUxfU1RBVFVTX0JPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCAgICA9IDB4MjgsCisgIFZBTF9TVEFUVVNfSU5JVF9BTFJFQURZX0RPTkUgICAgICAgICAgID0gMHgyOSwKKyAgVkFMX1NUQVRVU19IRUFQX05PVF9BVkFJTEFCTEUgICAgICAgICAgPSAweDJBLAorICBWQUxfU1RBVFVTX0VSUk9SX01BWCAgICAgICAgICAgICAgICAgICA9IElOVF9NQVgsCiB9IHZhbF9zdGF0dXNfdDsKIAogLyogdmVyYm9zaXR5IGVudW1zICovCkBAIC0yMTUsNiArMjM2LDE0IEBACiAgICAgUFJJTlRfQUxXQVlTICA9IDkKIH0gcHJpbnRfdmVyYm9zaXR5X3Q7CiAKKy8qIEludGVycnVwdCB0ZXN0IGZ1bmN0aW9uIGlkIGVudW1zICovCit0eXBlZGVmIGVudW0geworICAgIFRFU1RfUFNBX0VPSV9XSVRIX05PTl9JTlRSX1NJR05BTCAgICA9IDEsCisgICAgVEVTVF9QU0FfRU9JX1dJVEhfTVVMVElQTEVfU0lHTkFMUyAgID0gMiwKKyAgICBURVNUX1BTQV9FT0lfV0lUSF9VTkFTU0VSVEVEX1NJR05BTCAgPSAzLAorICAgIFRFU1RfSU5UUl9TRVJWSUNFICAgICAgICAgICAgICAgICAgICA9IDQsCit9IHRlc3RfaW50cl9mbl9pZF90OworCiAvKiB0eXBlZGVmJ3MgKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgICBib290X3N0YXRlX3Qgc3RhdGU7CkBAIC0yMjgsMjAgKzI1Nyw2IEBACiB9IHRlc3RfY291bnRfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHdkX2ZuX3R5cGVfdCB3ZF9mbl90eXBlOwotICAgIGFkZHJfdCAgICAgICB3ZF9iYXNlX2FkZHI7Ci0gICAgdWludDMyX3QgICAgIHdkX3RpbWVfdXM7Ci0gICAgdWludDMyX3QgICAgIHdkX3RpbWVyX3RpY2tfdXM7Ci19IHdkX3BhcmFtX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBudm1lbV9mbl90eXBlX3QgbnZtZW1fZm5fdHlwZTsKLSAgICBhZGRyX3QgICAgICAgICAgYmFzZTsKLSAgICB1aW50MzJfdCAgICAgICAgb2Zmc2V0OwotICAgIGludCAgICAgICAgICAgICBzaXplOwotfSBudm1lbV9wYXJhbV90OwotCi10eXBlZGVmIHN0cnVjdCB7CiAgICAgdWludDE2X3QgdGVzdF9udW07CiAgICAgdWludDhfdCBibG9ja19udW07CiB9IHRlc3RfaW5mb190OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3ZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmggYi9hcGktdGVzdHMvdmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaAppbmRleCA3MTRiN2E2Li5kYjc4MjVjIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvdmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaAorKysgYi9hcGktdGVzdHMvdmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTgsNTEgKzE4LDE1IEBACiAjaWZuZGVmIF9WQUxfQ0xJRU5UX0hfCiAjZGVmaW5lIF9WQUxfQ0xJRU5UX0hfCiAKLS8qKioqKioqKioqKioqKioqKiogUFNBIENsaWVudCBBUEkgKioqKioqKioqKioqKioqKiovCi0KLS8qIE5vdGUgLSBUaGlzIGhlYWRlciBmaWxlIGNvbnRhaW50cyB0aGUgZGVjbGFyYXRpb24gb2YgUFNBIGRlZmluZWQgY2xpZW50IEFQSSBlbGVtZW50cy4KLSAqIElkZWFsbHksIFRoZXNlIGVsZW1lbnRzIG11c3QgYmUgZGVmaW5lZCBpbiBhIGhlYWRlciBmaWxlIDxwc2FfY2xpZW50Lmg+IGJ5IFNQTSBpbXBsZW1lbnRlZAotICogbGlicmFyeSBhbmQgcHJvdmlkZWQgdG8gY2xpZW50cyBvcGVyYXRpb24gaW4gTlNQRSBhbmQgU1BFIGFzIHBlciB0aGUgc3BlY2lmaWNhdGlvbi4KLSAqICBJZiB0aGlzIGlzIGF2YWlsYWJsZSBpbiB0aGUgcGxhdGZvcm0sIHRoZSBlbGVtZW50cyBkZWNsYXJlZCBhcyBwYXJ0IG9mIHRoaXMKLSAqICBmaWxlIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBwYXNzaW5nIC0taW5jbHVkZSA8cGF0aF90b19wc2FfY2xpZW50X2g+IHRvIHNldHVwLnNoIHNjcmlwdC4KLSAqLwotCi0jaWYgUFNBX0lQQ19JTVBMRU1FTlRFRAotLyogcHNhL2NsaWVudC5oOiBDb250YWlucyB0aGUgQ2xpZW50IEFQSSBlbGVtZW50cy4gQWNjZXNzaWJsZSB0byBhbGwgYXBwbGljYXRpb25zICovCi0jaW5jbHVkZSAicHNhL2NsaWVudC5oIgotCi0vKiBwc2FfbWFuaWZlc3Qvc2lkLmg6ICBNYWNybyBkZWZpbml0aW9ucyBkZXJpdmVkIGZyb20gbWFuaWZlc3QgZmlsZXMgdGhhdCBtYXAgZnJvbSBSb1QgU2VydmljZQotICogbmFtZXMgdG8gU2VydmljZSBJRHMgKFNJRHMpLgotICogUGFydGl0aW9uIG1hbmlmZXN0IHBhcnNlIGJ1aWxkIHRvb2wgbXVzdCBwcm92aWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZpbGUuCi0qLwotI2luY2x1ZGUgInBzYV9tYW5pZmVzdC9zaWQuaCIKLQotI2Vsc2UKLQotI2luY2x1ZGUgInBhbF9zaWQuaCIKICNpbmNsdWRlICJ2YWwuaCIKLSNkZWZpbmUgUFNBX0ZSQU1FV09SS19WRVJTSU9OICAgICAgICgweDAxMDApCi0jZGVmaW5lIFBTQV9WRVJTSU9OX05PTkUgICAgICAgICAgICAoMCkKLSNkZWZpbmUgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICgwKQotI2RlZmluZSBQU0FfQ09OTkVDVElPTl9SRUZVU0VEICAgICAgKElOVDMyX01JTiArIDEpCi0jZGVmaW5lIFBTQV9DT05ORUNUSU9OX0JVU1kgICAgICAgICAoSU5UMzJfTUlOICsgMikKLSNkZWZpbmUgUFNBX0RST1BfQ09OTkVDVElPTiAgICAgICAgIChJTlQzMl9NSU4pCi0jZGVmaW5lIFBTQV9OVUxMX0hBTkRMRSAgICAgICAgICAgICAoKHBzYV9oYW5kbGVfdCkwKQotCi10eXBlZGVmIGludDMyX3QgcHNhX3N0YXR1c190OwotdHlwZWRlZiBpbnQzMl90IHBzYV9oYW5kbGVfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgcHNhX2ludmVjIHsKLSAgICBjb25zdCB2b2lkICpiYXNlOwotICAgIHNpemVfdCBsZW47Ci19IHBzYV9pbnZlYzsKLQotdHlwZWRlZiBzdHJ1Y3QgcHNhX291dHZlYyB7Ci0gICAgdm9pZCAqYmFzZTsKLSAgICBzaXplX3QgbGVuOwotfSBwc2Ffb3V0dmVjOwotCi0jZW5kaWYgLyogI2lmIFBTQV9JUENfSU1QTEVNRU5URUQgKi8KIAogI2RlZmluZSBJTlZBTElEX1NJRCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZBMjAKKworI2lmbmRlZiBDTElFTlRfVEVTVF9ESVNQQVRDSEVSX1NJRAorI2RlZmluZSBDTElFTlRfVEVTVF9ESVNQQVRDSEVSX1NJRCAgICAgIDB4MAorI2VuZGlmCisKKyNpZm5kZWYgU0VSVkVSX1RFU1RfRElTUEFUQ0hFUl9TSUQKKyNkZWZpbmUgU0VSVkVSX1RFU1RfRElTUEFUQ0hFUl9TSUQgICAgICAweDAKKyNlbmRpZgogI2VuZGlmIC8qIF9WQUxfQ0xJRU5UX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdmFsL2NvbW1vbi92YWxfdGFyZ2V0LmMgYi9hcGktdGVzdHMvdmFsL2NvbW1vbi92YWxfdGFyZ2V0LmMKaW5kZXggYmQ0MGViMi4uZTNiMjk4MCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3ZhbC9jb21tb24vdmFsX3RhcmdldC5jCisrKyBiL2FwaS10ZXN0cy92YWwvY29tbW9uL3ZhbF90YXJnZXQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTgsOCArMTgsMTcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjaW5jbHVkZSAidGFyZ2V0X2RhdGFiYXNlLmgiCiAKKyNpZmRlZiBVU0VfUkFXX1BSSU5UX0ZPUl9EUklWRVJfUEFSVElUSU9OCisjZGVmaW5lIHZhbF9wcmludCh4LCB5LCB6KSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBpZiAoeCA+PSBWRVJCT1NFKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIHZhbF9wcmludF9zZih5LHopOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB9IHdoaWxlKDApCisjZWxzZQogX19VTlVTRUQgU1RBVElDX0RFQ0xBUkUgdmFsX3N0YXR1c190IHZhbF9wcmludAogICAgICAgICAgICAgICAgICAgICAgICAgKHByaW50X3ZlcmJvc2l0eV90IHZlcmJvc2l0eSwgY2hhciAqc3RyaW5nLCB1aW50MzJfdCBkYXRhKTsKKyNlbmRpZgorCiAvKioKICAgICBAYnJpZWYgICAgLSBSZXR1cm5zIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gYmxvY2sgZGF0YWJhc2UuCiAgICAgQHBhcmFtICAgIC0gYmxvYiAgICAgOiBQb3B1bGF0ZXMgdGhlIGJhc2UgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3ZhbC9jb21tb24vdmFsX3RhcmdldC5oIGIvYXBpLXRlc3RzL3ZhbC9jb21tb24vdmFsX3RhcmdldC5oCmluZGV4IDU1ZDQ1NTYuLmMzMmYwYTUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvY29tbW9uL3ZhbF90YXJnZXQuaAorKysgYi9hcGktdGVzdHMvdmFsL2NvbW1vbi92YWxfdGFyZ2V0LmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTYyLDcgKzYyLDEwIEBACiB9IHNvY19wZXJpcGhlcmFsX2NmZ19pZF90OwogCiB0eXBlZGVmIGVudW0gX01FTU9SWV9DT05GSUdfSURfIHsKLSAgTUVNT1JZX05WTUVNID0gMHgyCisgIE1FTU9SWV9OVk1FTSAgICAgICAgICAgICAgICAgICAgPSAweDIsCisgIE1FTU9SWV9OU1BFX01NSU8gICAgICAgICAgICAgICAgPSAweDMsCisgIE1FTU9SWV9DTElFTlRfUEFSVElUSU9OX01NSU8gICAgPSAweDQsCisgIE1FTU9SWV9EUklWRVJfUEFSVElUSU9OX01NSU8gICAgPSAweDUsCiB9IG1lbW9yeV9jZmdfaWRfdDsKIAogdHlwZWRlZiBlbnVtIF9NSVNDRUxMQU5FT1VTX0NPTkZJR19JRF8gewpAQCAtNzQsMTIgKzc3LDE1IEBACiAgIEFzc2lnbiBncm91cCB0eXBlIHRvIGVhY2ggc3lzdGVtIGNvbXBvbmVudAogKiovCiB0eXBlZGVmIGVudW0gX0NPTVBPTkVOVF9HUk9VUElOR197Ci0gIFVBUlQgICAgICAgICAgPSBHUk9VUF9TT0NfUEVSSVBIRVJBTCwKLSAgVElNRVIgICAgICAgICA9IEdST1VQX1NPQ19QRVJJUEhFUkFMLAotICBXQVRDSERPRyAgICAgID0gR1JPVVBfU09DX1BFUklQSEVSQUwsCi0gIE5WTUVNICAgICAgICAgPSBHUk9VUF9NRU1PUlksCi0gIEJPT1QgICAgICAgICAgPSBHUk9VUF9NSVNDRUxMQU5FT1VTLAotICBEVVQgICAgICAgICAgID0gR1JPVVBfTUlTQ0VMTEFORU9VUywKKyAgVUFSVCAgICAgICAgICAgICAgICAgICAgID0gR1JPVVBfU09DX1BFUklQSEVSQUwsCisgIFRJTUVSICAgICAgICAgICAgICAgICAgICA9IEdST1VQX1NPQ19QRVJJUEhFUkFMLAorICBXQVRDSERPRyAgICAgICAgICAgICAgICAgPSBHUk9VUF9TT0NfUEVSSVBIRVJBTCwKKyAgTlZNRU0gICAgICAgICAgICAgICAgICAgID0gR1JPVVBfTUVNT1JZLAorICBOU1BFX01NSU8gICAgICAgICAgICAgICAgPSBHUk9VUF9NRU1PUlksCisgIENMSUVOVF9QQVJUSVRJT05fTU1JTyAgICA9IEdST1VQX01FTU9SWSwKKyAgRFJJVkVSX1BBUlRJVElPTl9NTUlPICAgID0gR1JPVVBfTUVNT1JZLAorICBCT09UICAgICAgICAgICAgICAgICAgICAgPSBHUk9VUF9NSVNDRUxMQU5FT1VTLAorICBEVVQgICAgICAgICAgICAgICAgICAgICAgPSBHUk9VUF9NSVNDRUxMQU5FT1VTLAogfSBjb21wX2dyb3VwX2Fzc2lnbl90OwogCiAvKioKQEAgLTE2OSw2ICsxNzUsNyBAQAogICB1aW50MzJfdCAgICB0aW1lb3V0X2luX21pY3JvX3NlY19sb3c7CiAgIHVpbnQzMl90ICAgIHRpbWVvdXRfaW5fbWljcm9fc2VjX21lZGl1bTsKICAgdWludDMyX3QgICAgdGltZW91dF9pbl9taWNyb19zZWNfaGlnaDsKKyAgdWludDMyX3QgICAgdGltZW91dF9pbl9taWNyb19zZWNfY3J5cHRvOwogICB1aW50MzJfdCAgICBudW1fb2ZfdGlja19wZXJfbWljcm9fc2VjOwogICBkZXZfYXR0cl90ICBhdHRyaWJ1dGU7CiB9IHNvY19wZXJpcGhlcmFsX2Rlc2NfdDsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy92YWwvbnNwZS9wYWxfaW50ZXJmYWNlc19ucy5oIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3BhbF9pbnRlcmZhY2VzX25zLmgKaW5kZXggNGUzYmEwMy4uMTg2YTVmYyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3BhbF9pbnRlcmZhY2VzX25zLmgKKysrIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3BhbF9pbnRlcmZhY2VzX25zLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1MSw1ICsxNTEsMzcgQEAKICAqICAgICAgICAgICAgICAgdmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKICAqICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCiAqKi8KLXVpbnQzMl90IHBhbF9jcnlwdG9fZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KTsKK2ludDMyX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpOworCisvKioKKyAqICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgaW50ZXJuYWwgdHJ1c3RlZCBzdG9yYWdlIGZ1bmN0aW9uCisgKiAgIEBwYXJhbSAgICAtIHR5cGUgICAgOiBmdW5jdGlvbiBjb2RlCisgKiAgICAgICAgICAgICAgIHZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0CisgKiAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cworKiovCit1aW50MzJfdCBwYWxfaXRzX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCk7CisKKy8qKgorICogICBAYnJpZWYgICAgLSBUaGlzIEFQSSB3aWxsIGNhbGwgdGhlIHJlcXVlc3RlZCBwcm90ZWN0ZWQgc3RvcmFnZSBmdW5jdGlvbgorICogICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQorICogICAgICAgICAgICAgICB2YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdAorICogICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKKyoqLwordWludDMyX3QgcGFsX3BzX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCk7CisKKy8qKgorICogICBAYnJpZWYgICAgLSBUaGlzIEFQSSB3aWxsIGNhbGwgdGhlIHJlcXVlc3RlZCBhdHRlc3RhdGlvbiBmdW5jdGlvbgorICogICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQorICogICAgICAgICAgICAgICB2YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdAorICogICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKKyoqLworaW50MzJfdCBwYWxfYXR0ZXN0YXRpb25fZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KTsKKworLyoqCisgKiAgIEBicmllZiAgICAtIFRlcm1pbmF0ZXMgdGhlIHNpbXVsYXRpb24gYXQgdGhlIGVuZCBvZiBhbGwgdGVzdHMgY29tcGxldGlvbi4KKyAqICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgaXQgcHV0IGNwdXMgaW50byBwb3dlciBkb3duIG1vZGUuCisgKiAgIEBwYXJhbSAgICAtIHZvaWQKKyAqICAgQHJldHVybiAgIC0gdm9pZAorKiovCit2b2lkIHBhbF90ZXJtaW5hdGVfc2ltdWxhdGlvbih2b2lkKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9hdHRlc3RhdGlvbi5jIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9hdHRlc3RhdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkODA2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2F0dGVzdGF0aW9uLmMKQEAgLTAsMCArMSw0MCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJwYWxfaW50ZXJmYWNlc19ucy5oIgorI2luY2x1ZGUgInZhbF9mcmFtZXdvcmsuaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfYXR0ZXN0YXRpb24uaCIKKworLyoqCisgICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgYXR0ZXN0YXRpb24gZnVuY3Rpb24KKyAgICBAcGFyYW0gICAgLSB0eXBlIDogZnVuY3Rpb24gY29kZQorICAgICAgICAgICAgICAgIC4uLiAgOiB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzCisgICAgQHJldHVybiAgIC0gRXJyb3Igc3RhdHVzCisqKi8KKworaW50MzJfdCB2YWxfYXR0ZXN0YXRpb25fZnVuY3Rpb24oaW50IHR5cGUsIC4uLikKK3sKKyAgICB2YV9saXN0ICAgICAgdmFsaXN0OworICAgIHZhbF9zdGF0dXNfdCBzdGF0dXM7CisKKyAgICB2YV9zdGFydCh2YWxpc3QsIHR5cGUpOworICAgIHN0YXR1cyA9IHBhbF9hdHRlc3RhdGlvbl9mdW5jdGlvbih0eXBlLCB2YWxpc3QpOworICAgIHZhX2VuZCh2YWxpc3QpOworICAgIHJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2F0dGVzdGF0aW9uLmggYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2F0dGVzdGF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyYjk0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfYXR0ZXN0YXRpb24uaApAQCAtMCwwICsxLDMyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZuZGVmIF9WQUxfSU5JVElBTF9BVFRFU1RBVElPTl9IXworI2RlZmluZSBfVkFMX0lOSVRJQUxfQVRURVNUQVRJT05fSF8KKworI2luY2x1ZGUgInZhbC5oIgorCisjZGVmaW5lIFRPT19TTUFMTF9UT0tFTl9CVUZGRVIgICAgICAgICAgMTYKKyNkZWZpbmUgQ0hBTExFTkdFX1NJWkUgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBNQVhfQ0hBTExFTkdFX1NJWkUgICAgICAgICAgICAgIDY0CisKK2VudW0gYXR0ZXN0YXRpb25fZnVuY3Rpb25fY29kZSB7CisgICAgVkFMX0lOSVRJQUxfQVRURVNUX0dFVF9UT0tFTiAgICAgICAgPSAweDEsCit9OworCitpbnQzMl90IHZhbF9hdHRlc3RhdGlvbl9mdW5jdGlvbihpbnQgdHlwZSwgLi4uKTsKKyNlbmRpZiAvKiBfVkFMX0lOSVRJQUxfQVRURVNUQVRJT05fSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfY3J5cHRvLmMgYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2NyeXB0by5jCmluZGV4IDRmNmU5NjguLjc2NGI0NGEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfY3J5cHRvLmMKKysrIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9jcnlwdG8uYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjcsNyArMjcsNyBAQAogICAgICAgICAgICAgICAgIC4uLiAgOiB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzCiAgICAgQHJldHVybiAgIC0gRXJyb3Igc3RhdHVzCiAqKi8KLXZhbF9zdGF0dXNfdCB2YWxfY3J5cHRvX2Z1bmN0aW9uKGludCB0eXBlLCAuLi4pCitpbnQzMl90IHZhbF9jcnlwdG9fZnVuY3Rpb24oaW50IHR5cGUsIC4uLikKIHsKICAgICB2YV9saXN0ICAgICAgdmFsaXN0OwogICAgIHZhbF9zdGF0dXNfdCBzdGF0dXM7CkBAIC0zNywxNyArMzcsMyBAQAogICAgIHZhX2VuZCh2YWxpc3QpOwogICAgIHJldHVybiBzdGF0dXM7CiB9Ci0KLS8qKgotICAgIEBicmllZiAgICAtIENoZWNrcyBpZiB0aGUga2V5IHR5cGUgaXMgb2YgcmF3IGJpdHMKLSAgICBAcGFyYW0gICAgLSB0eXBlIDogdHlwZSBvZiB0aGUga2V5Ci0gICAgQHJldHVybiAgIC0gVHJ1ZSA6IElmIGtleSB0eXBlIGlzIHJhdyBiaXRzCi0gICAgICAgICAgICAgICAgRmFsc2U6IElmIGtleSB0eXBlIGlzIG5vdCByYXcgYml0cwotKiovCi1pbnQzMl90IHZhbF9jcnlwdG9fa2V5X3R5cGVfaXNfcmF3KHBzYV9rZXlfdHlwZV90IHR5cGUpCi17Ci0gICAgcHNhX2tleV90eXBlX3QgY2F0ZWdvcnkgPSB0eXBlICYgUFNBX0tFWV9UWVBFX0NBVEVHT1JZX01BU0s7Ci0KLSAgICByZXR1cm4gKGNhdGVnb3J5ID09IFBTQV9LRVlfVFlQRV9SQVdfREFUQSB8fAotICAgICAgICAgICAgY2F0ZWdvcnkgPT0gUFNBX0tFWV9UWVBFX0NBVEVHT1JZX1NZTU1FVFJJQyk7Ci19CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2NyeXB0by5oIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9jcnlwdG8uaAppbmRleCAzNjZiY2U3Li42Y2IxYjJmIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2NyeXB0by5oCisrKyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfY3J5cHRvLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE5LDE1ICsxOSw5IEBACiAjZGVmaW5lIF9WQUxfQ1JZUFRPX0hfCiAKICNpbmNsdWRlICJ2YWwuaCIKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotI2lmIFBTQV9JUENfSU1QTEVNRU5URUQKLSNpbmNsdWRlICJwc2EvY2xpZW50LmgiCi0jZWxzZQotdHlwZWRlZiBpbnQzMl90IHBzYV9zdGF0dXNfdDsKLSNlbmRpZgogCiAjZGVmaW5lIEJZVEVTX1RPX0JJVFMoYnl0ZSkgICAgICAgICAgICAgKGJ5dGUgKiA4KQorCiAvKiBTaXplICovCiAjZGVmaW5lIEFFU18xNkJfS0VZX1NJWkUgICAgICAgICAgICAgICAgMTYKICNkZWZpbmUgQUVTXzI0Ql9LRVlfU0laRSAgICAgICAgICAgICAgICAyNApAQCAtMzcsMTEgKzMxLDE0IEBACiAjZGVmaW5lIERFU184Ql9LRVlfU0laRSAgICAgICAgICAgICAgICAgOAogI2RlZmluZSBERVMzXzJLRVlfU0laRSAgICAgICAgICAgICAgICAgIDE2CiAjZGVmaW5lIERFUzNfM0tFWV9TSVpFICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgU0laRV8zMkIgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBTSVpFXzUwQiAgICAgICAgICAgICAgICAgICAgICAgIDUwCiAjZGVmaW5lIFNJWkVfMTI4QiAgICAgICAgICAgICAgICAgICAgICAgMTI4CiAjZGVmaW5lIFNJWkVfMjU2QiAgICAgICAgICAgICAgICAgICAgICAgMjU2CiAjZGVmaW5lIFNJWkVfNTEyQiAgICAgICAgICAgICAgICAgICAgICAgNTEyCiAjZGVmaW5lIEJVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICAgMTIwMAogI2RlZmluZSBIQVNIXzY0QiAgICAgICAgICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIEJVRkZFUl9TSVpFX0hJR0ggICAgICAgICAgICAgICAgNTEzMAogCiAvKiBLZXkgU2xvdCAqLwogI2RlZmluZSBJTlZBTElEX0tFWV9TTE9UICAgICAgICAgICAgICAgIDB4REVBRApAQCAtNDksMTgxICs0Niw5IEBACiAjZGVmaW5lIE9DQ1VQSUVEX0tFWV9TTE9UICAgICAgICAgICAgICAgMQogI2RlZmluZSBNQVhfS0VZX1NMT1QgICAgICAgICAgICAgICAgICAgIDMyCiAKLS8qIEtleSBUeXBlICovCi0jZGVmaW5lIFBTQV9LRVlfVFlQRV9SQVdfREFUQSAgICAgICAgICAgICAgICAgICAoKHBzYV9rZXlfdHlwZV90KTB4NTAwMDAwMDEpCi0jZGVmaW5lIFBTQV9LRVlfVFlQRV9ERVJJVkUgICAgICAgICAgICAgICAgICAgICAoKHBzYV9rZXlfdHlwZV90KTB4NTIwMDAwMDApCi0jZGVmaW5lIFBTQV9LRVlfVFlQRV9DQVRFR09SWV9NQVNLICAgICAgICAgICAgICAoKHBzYV9rZXlfdHlwZV90KTB4NzAwMDAwMDApCi0jZGVmaW5lIFBTQV9LRVlfVFlQRV9DQVRFR09SWV9TWU1NRVRSSUMgICAgICAgICAoKHBzYV9rZXlfdHlwZV90KTB4NDAwMDAwMDApCi0jZGVmaW5lIFBTQV9LRVlfVFlQRV9QQUlSX0ZMQUcgICAgICAgICAgICAgICAgICAoKHBzYV9rZXlfdHlwZV90KTB4MTAwMDAwMDApCi0jZGVmaW5lIFBTQV9LRVlfVFlQRV9BRVMgICAgICAgICAgICAgICAgICAgICAgICAoKHBzYV9rZXlfdHlwZV90KTB4NDAwMDAwMDEpCi0jZGVmaW5lIFBTQV9LRVlfVFlQRV9ERVMgICAgICAgICAgICAgICAgICAgICAgICAoKHBzYV9rZXlfdHlwZV90KTB4NDAwMDAwMDIpCi0jZGVmaW5lIFBTQV9LRVlfVFlQRV9SU0FfUFVCTElDX0tFWSAgICAgICAgICAgICAoKHBzYV9rZXlfdHlwZV90KTB4NjAwMTAwMDApCi0jZGVmaW5lIFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUiAgICAgICAgICAgICAgICAoKHBzYV9rZXlfdHlwZV90KTB4NzAwMTAwMDApCi0jZGVmaW5lIFBTQV9LRVlfVFlQRV9WRU5ET1JfRkxBRyAgICAgICAgICAgICAgICAoKHBzYV9rZXlfdHlwZV90KTB4ODAwMDAwMDApCi0jZGVmaW5lIFBTQV9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWV9CQVNFICAgICAgICAoKHBzYV9rZXlfdHlwZV90KTB4NjAwMzAwMDApCi0jZGVmaW5lIFBTQV9LRVlfVFlQRV9FQ0NfS0VZUEFJUl9CQVNFICAgICAgICAgICAoKHBzYV9rZXlfdHlwZV90KTB4NzAwMzAwMDApCi0jZGVmaW5lIFBTQV9LRVlfVFlQRV9FQ0NfQ1VSVkVfTUFTSyAgICAgICAgICAgICAoKHBzYV9rZXlfdHlwZV90KTB4MDAwMGZmZmYpCi0KLS8qIEtleSBMaWZldGltZSAqLwotI2RlZmluZSBQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFICAgICAgICAgICAgICAgKChwc2Ffa2V5X2xpZmV0aW1lX3QpMHgwMDAwMDAwMCkKLSNkZWZpbmUgUFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UICAgICAgICAgICAgICgocHNhX2tleV9saWZldGltZV90KTB4MDAwMDAwMDEpCi0jZGVmaW5lIFBTQV9LRVlfTElGRVRJTUVfV1JJVEVfT05DRSAgICAgICAgICAgICAoKHBzYV9rZXlfbGlmZXRpbWVfdCkweDdmZmZmZmZmKQotI2RlZmluZSBQU0FfS0VZX0xJRkVUSU1FX0lOVkFMSUQgICAgICAgICAgICAgICAgKChwc2Ffa2V5X2xpZmV0aW1lX3QpMHhmZmZmZmZmZikKLQotLyogQWxnb3JpdGhtICovCi0jZGVmaW5lIFBTQV9BTEdfQkxPQ0tfQ0lQSEVSX1BBRF9OT05FICAgICAgICAgICAoKHBzYV9hbGdvcml0aG1fdCkweDAwMDAwMDAwKQotI2RlZmluZSBQU0FfQUxHX0JMT0NLX0NJUEhFUl9CQVNFICAgICAgICAgICAgICAgKChwc2FfYWxnb3JpdGhtX3QpMHgwNDAwMDAwMCkKLSNkZWZpbmUgUFNBX0tFWV9VU0FHRV9FWFBPUlQgICAgICAgICAgICAgICAgICAgICgocHNhX2tleV91c2FnZV90KTB4MDAwMDAwMDEpCi0jZGVmaW5lIFBTQV9LRVlfVVNBR0VfRU5DUllQVCAgICAgICAgICAgICAgICAgICAoKHBzYV9rZXlfdXNhZ2VfdCkweDAwMDAwMTAwKQotI2RlZmluZSBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgKChwc2Ffa2V5X3VzYWdlX3QpMHgwMDAwMDIwMCkKLSNkZWZpbmUgUFNBX0tFWV9VU0FHRV9TSUdOICAgICAgICAgICAgICAgICAgICAgICgocHNhX2tleV91c2FnZV90KTB4MDAwMDA0MDApCi0jZGVmaW5lIFBTQV9LRVlfVVNBR0VfVkVSSUZZICAgICAgICAgICAgICAgICAgICAoKHBzYV9rZXlfdXNhZ2VfdCkweDAwMDAwODAwKQotI2RlZmluZSBQU0FfS0VZX1VTQUdFX0RFUklWRSAgICAgICAgICAgICAgICAgICAgKChwc2Ffa2V5X3VzYWdlX3QpMHgwMDAwMTAwMCkKLSNkZWZpbmUgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9CQVNFICAgICAgICAgICgocHNhX2FsZ29yaXRobV90KTB4MTAwMjAwMDApCi0jZGVmaW5lIFBTQV9BTEdfRUNEU0FfQkFTRSAgICAgICAgICAgICAgICAgICAgICAoKHBzYV9hbGdvcml0aG1fdCkweDEwMDYwMDAwKQotI2RlZmluZSBQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTiAgKChwc2FfYWxnb3JpdGhtX3QpMHgxMjAwMDAwMCkKLSNkZWZpbmUgUFNBX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQgICAgICAgICAgICAgICgocHNhX2FsZ29yaXRobV90KTB4MTIwMjAwMDApCi0jZGVmaW5lIFBTQV9BTEdfSE1BQ19CQVNFICAgICAgICAgICAgICAgICAgICAgICAoKHBzYV9hbGdvcml0aG1fdCkweDAyODAwMDAwKQotI2RlZmluZSBQU0FfQUxHX0NJUEhFUl9NQUNfQkFTRSAgICAgICAgICAgICAgICAgKChwc2FfYWxnb3JpdGhtX3QpMHgwMmMwMDAwMCkKLSNkZWZpbmUgUFNBX0FMR19DQkNfTUFDICAgICAgICAgICAgICAgICAgICAgICAgICgocHNhX2FsZ29yaXRobV90KTB4MDJjMDAwMDEpCi0jZGVmaW5lIFBTQV9BTEdfQ01BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBzYV9hbGdvcml0aG1fdCkweDAyYzAwMDAyKQotI2RlZmluZSBQU0FfQUxHX0dNQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwc2FfYWxnb3JpdGhtX3QpMHgwMmMwMDAwMykKLSNkZWZpbmUgUFNBX0FMR19DRkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocHNhX2FsZ29yaXRobV90KTB4MDRjMDAwMDIpCi0jZGVmaW5lIFBTQV9BTEdfQ0NNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBzYV9hbGdvcml0aG1fdCkweDA2MDAxMDAxKQotI2RlZmluZSBQU0FfQUxHX0dDTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwc2FfYWxnb3JpdGhtX3QpMHgwNjAwMTAwMikKLSNkZWZpbmUgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVcgICAgICAgICAgIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fQkFTRQotI2RlZmluZSBQU0FfQUxHX0hLREZfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgKChwc2FfYWxnb3JpdGhtX3QpMHgzMDAwMDEwMCkKLSNkZWZpbmUgUFNBX0tFWV9VU0FHRV9JTlZBTElEICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKLSNkZWZpbmUgUFNBX0FMR19JTlZBTElEICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKLQotLyogSGFzaCBBbGdvcml0aG0gKi8KLSNkZWZpbmUgUFNBX0FMR19DQVRFR09SWV9IQVNIICAgICAgICAgICAgICAgICAgICgocHNhX2FsZ29yaXRobV90KTB4MDEwMDAwMDApCi0jZGVmaW5lIFBTQV9BTEdfSEFTSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoKHBzYV9hbGdvcml0aG1fdCkweDAwMDAwMGZmKQotI2RlZmluZSBQU0FfQUxHX01EMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwc2FfYWxnb3JpdGhtX3QpMHgwMTAwMDAwMSkKLSNkZWZpbmUgUFNBX0FMR19NRDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocHNhX2FsZ29yaXRobV90KTB4MDEwMDAwMDIpCi0jZGVmaW5lIFBTQV9BTEdfTUQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBzYV9hbGdvcml0aG1fdCkweDAxMDAwMDAzKQotI2RlZmluZSBQU0FfQUxHX1JJUEVNRDE2MCAgICAgICAgICAgICAgICAgICAgICAgKChwc2FfYWxnb3JpdGhtX3QpMHgwMTAwMDAwNCkKLSNkZWZpbmUgUFNBX0FMR19TSEFfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICgocHNhX2FsZ29yaXRobV90KTB4MDEwMDAwMDUpCi0jZGVmaW5lIFBTQV9BTEdfU0hBXzIyNCAgICAgICAgICAgICAgICAgICAgICAgICAoKHBzYV9hbGdvcml0aG1fdCkweDAxMDAwMDA4KQotI2RlZmluZSBQU0FfQUxHX1NIQV8yNTYgICAgICAgICAgICAgICAgICAgICAgICAgKChwc2FfYWxnb3JpdGhtX3QpMHgwMTAwMDAwOSkKLSNkZWZpbmUgUFNBX0FMR19TSEFfMzg0ICAgICAgICAgICAgICAgICAgICAgICAgICgocHNhX2FsZ29yaXRobV90KTB4MDEwMDAwMGEpCi0jZGVmaW5lIFBTQV9BTEdfU0hBXzUxMiAgICAgICAgICAgICAgICAgICAgICAgICAoKHBzYV9hbGdvcml0aG1fdCkweDAxMDAwMDBiKQotI2RlZmluZSBQU0FfQUxHX1NIQV81MTJfMjI0ICAgICAgICAgICAgICAgICAgICAgKChwc2FfYWxnb3JpdGhtX3QpMHgwMTAwMDAwYykKLSNkZWZpbmUgUFNBX0FMR19TSEFfNTEyXzI1NiAgICAgICAgICAgICAgICAgICAgICgocHNhX2FsZ29yaXRobV90KTB4MDEwMDAwMGQpCi0jZGVmaW5lIFBTQV9BTEdfU0hBM18yMjQgICAgICAgICAgICAgICAgICAgICAgICAoKHBzYV9hbGdvcml0aG1fdCkweDAxMDAwMDEwKQotI2RlZmluZSBQU0FfQUxHX1NIQTNfMjU2ICAgICAgICAgICAgICAgICAgICAgICAgKChwc2FfYWxnb3JpdGhtX3QpMHgwMTAwMDAxMSkKLSNkZWZpbmUgUFNBX0FMR19TSEEzXzM4NCAgICAgICAgICAgICAgICAgICAgICAgICgocHNhX2FsZ29yaXRobV90KTB4MDEwMDAwMTIpCi0jZGVmaW5lIFBTQV9BTEdfU0hBM181MTIgICAgICAgICAgICAgICAgICAgICAgICAoKHBzYV9hbGdvcml0aG1fdCkweDAxMDAwMDEzKQotCi0vKiBFcnJvciBjb2RlcyAqLwotI2RlZmluZSBQU0FfRVJST1JfVU5LTk9XTl9FUlJPUiAgICAgICAgICAgICAgICAgKChwc2Ffc3RhdHVzX3QpMSkKLSNkZWZpbmUgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgICAgICAgICAgICAgICAgICgocHNhX3N0YXR1c190KTIpCi0jZGVmaW5lIFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICAgICAgICAgICAgICAgICAoKHBzYV9zdGF0dXNfdCkzKQotI2RlZmluZSBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTCAgICAgICAgICAgICAgKChwc2Ffc3RhdHVzX3QpNCkKLSNkZWZpbmUgUFNBX0VSUk9SX09DQ1VQSUVEX1NMT1QgICAgICAgICAgICAgICAgICgocHNhX3N0YXR1c190KTUpCi0jZGVmaW5lIFBTQV9FUlJPUl9FTVBUWV9TTE9UICAgICAgICAgICAgICAgICAgICAoKHBzYV9zdGF0dXNfdCk2KQotI2RlZmluZSBQU0FfRVJST1JfQkFEX1NUQVRFICAgICAgICAgICAgICAgICAgICAgKChwc2Ffc3RhdHVzX3QpNykKLSNkZWZpbmUgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICAgICAgICAgICgocHNhX3N0YXR1c190KTgpCi0jZGVmaW5lIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZICAgICAgICAgICAoKHBzYV9zdGF0dXNfdCk5KQotI2RlZmluZSBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX1NUT1JBR0UgICAgICAgICAgKChwc2Ffc3RhdHVzX3QpMTApCi0jZGVmaW5lIFBTQV9FUlJPUl9DT01NVU5JQ0FUSU9OX0ZBSUxVUkUgICAgICAgICAoKHBzYV9zdGF0dXNfdCkxMSkKLSNkZWZpbmUgUFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRSAgICAgICAgICAgICAgICgocHNhX3N0YXR1c190KTEyKQotI2RlZmluZSBQU0FfRVJST1JfSEFSRFdBUkVfRkFJTFVSRSAgICAgICAgICAgICAgKChwc2Ffc3RhdHVzX3QpMTMpCi0jZGVmaW5lIFBTQV9FUlJPUl9UQU1QRVJJTkdfREVURUNURUQgICAgICAgICAgICAoKHBzYV9zdGF0dXNfdCkxNCkKLSNkZWZpbmUgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9FTlRST1BZICAgICAgICAgICgocHNhX3N0YXR1c190KTE1KQotI2RlZmluZSBQU0FfRVJST1JfSU5WQUxJRF9TSUdOQVRVUkUgICAgICAgICAgICAgKChwc2Ffc3RhdHVzX3QpMTYpCi0jZGVmaW5lIFBTQV9FUlJPUl9JTlZBTElEX1BBRERJTkcgICAgICAgICAgICAgICAoKHBzYV9zdGF0dXNfdCkxNykKLSNkZWZpbmUgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9DQVBBQ0lUWSAgICAgICAgICgocHNhX3N0YXR1c190KTE4KQotCi0vKiBFbmNvZGluZyBvZiBjdXJ2ZSBpZGVudGlmaWVycyAqLwotI2RlZmluZSBQU0FfRUNDX0NVUlZFX1NFQ1QxNjNLMSAgICAgICAgICAgICAgICAgKChwc2FfZWNjX2N1cnZlX3QpIDB4MDAwMSkKLSNkZWZpbmUgUFNBX0VDQ19DVVJWRV9TRUNUMTYzUjEgICAgICAgICAgICAgICAgICgocHNhX2VjY19jdXJ2ZV90KSAweDAwMDIpCi0jZGVmaW5lIFBTQV9FQ0NfQ1VSVkVfU0VDVDE2M1IyICAgICAgICAgICAgICAgICAoKHBzYV9lY2NfY3VydmVfdCkgMHgwMDAzKQotI2RlZmluZSBQU0FfRUNDX0NVUlZFX1NFQ1QxOTNSMSAgICAgICAgICAgICAgICAgKChwc2FfZWNjX2N1cnZlX3QpIDB4MDAwNCkKLSNkZWZpbmUgUFNBX0VDQ19DVVJWRV9TRUNUMTkzUjIgICAgICAgICAgICAgICAgICgocHNhX2VjY19jdXJ2ZV90KSAweDAwMDUpCi0jZGVmaW5lIFBTQV9FQ0NfQ1VSVkVfU0VDVDIzM0sxICAgICAgICAgICAgICAgICAoKHBzYV9lY2NfY3VydmVfdCkgMHgwMDA2KQotI2RlZmluZSBQU0FfRUNDX0NVUlZFX1NFQ1QyMzNSMSAgICAgICAgICAgICAgICAgKChwc2FfZWNjX2N1cnZlX3QpIDB4MDAwNykKLSNkZWZpbmUgUFNBX0VDQ19DVVJWRV9TRUNUMjM5SzEgICAgICAgICAgICAgICAgICgocHNhX2VjY19jdXJ2ZV90KSAweDAwMDgpCi0jZGVmaW5lIFBTQV9FQ0NfQ1VSVkVfU0VDVDI4M0sxICAgICAgICAgICAgICAgICAoKHBzYV9lY2NfY3VydmVfdCkgMHgwMDA5KQotI2RlZmluZSBQU0FfRUNDX0NVUlZFX1NFQ1QyODNSMSAgICAgICAgICAgICAgICAgKChwc2FfZWNjX2N1cnZlX3QpIDB4MDAwYSkKLSNkZWZpbmUgUFNBX0VDQ19DVVJWRV9TRUNUNDA5SzEgICAgICAgICAgICAgICAgICgocHNhX2VjY19jdXJ2ZV90KSAweDAwMGIpCi0jZGVmaW5lIFBTQV9FQ0NfQ1VSVkVfU0VDVDQwOVIxICAgICAgICAgICAgICAgICAoKHBzYV9lY2NfY3VydmVfdCkgMHgwMDBjKQotI2RlZmluZSBQU0FfRUNDX0NVUlZFX1NFQ1Q1NzFLMSAgICAgICAgICAgICAgICAgKChwc2FfZWNjX2N1cnZlX3QpIDB4MDAwZCkKLSNkZWZpbmUgUFNBX0VDQ19DVVJWRV9TRUNUNTcxUjEgICAgICAgICAgICAgICAgICgocHNhX2VjY19jdXJ2ZV90KSAweDAwMGUpCi0jZGVmaW5lIFBTQV9FQ0NfQ1VSVkVfU0VDUDE2MEsxICAgICAgICAgICAgICAgICAoKHBzYV9lY2NfY3VydmVfdCkgMHgwMDBmKQotI2RlZmluZSBQU0FfRUNDX0NVUlZFX1NFQ1AxNjBSMSAgICAgICAgICAgICAgICAgKChwc2FfZWNjX2N1cnZlX3QpIDB4MDAxMCkKLSNkZWZpbmUgUFNBX0VDQ19DVVJWRV9TRUNQMTYwUjIgICAgICAgICAgICAgICAgICgocHNhX2VjY19jdXJ2ZV90KSAweDAwMTEpCi0jZGVmaW5lIFBTQV9FQ0NfQ1VSVkVfU0VDUDE5MksxICAgICAgICAgICAgICAgICAoKHBzYV9lY2NfY3VydmVfdCkgMHgwMDEyKQotI2RlZmluZSBQU0FfRUNDX0NVUlZFX1NFQ1AxOTJSMSAgICAgICAgICAgICAgICAgKChwc2FfZWNjX2N1cnZlX3QpIDB4MDAxMykKLSNkZWZpbmUgUFNBX0VDQ19DVVJWRV9TRUNQMjI0SzEgICAgICAgICAgICAgICAgICgocHNhX2VjY19jdXJ2ZV90KSAweDAwMTQpCi0jZGVmaW5lIFBTQV9FQ0NfQ1VSVkVfU0VDUDIyNFIxICAgICAgICAgICAgICAgICAoKHBzYV9lY2NfY3VydmVfdCkgMHgwMDE1KQotI2RlZmluZSBQU0FfRUNDX0NVUlZFX1NFQ1AyNTZLMSAgICAgICAgICAgICAgICAgKChwc2FfZWNjX2N1cnZlX3QpIDB4MDAxNikKLSNkZWZpbmUgUFNBX0VDQ19DVVJWRV9TRUNQMjU2UjEgICAgICAgICAgICAgICAgICgocHNhX2VjY19jdXJ2ZV90KSAweDAwMTcpCi0jZGVmaW5lIFBTQV9FQ0NfQ1VSVkVfU0VDUDM4NFIxICAgICAgICAgICAgICAgICAoKHBzYV9lY2NfY3VydmVfdCkgMHgwMDE4KQotI2RlZmluZSBQU0FfRUNDX0NVUlZFX1NFQ1A1MjFSMSAgICAgICAgICAgICAgICAgKChwc2FfZWNjX2N1cnZlX3QpIDB4MDAxOSkKLSNkZWZpbmUgUFNBX0VDQ19DVVJWRV9CUkFJTlBPT0xfUDI1NlIxICAgICAgICAgICgocHNhX2VjY19jdXJ2ZV90KSAweDAwMWEpCi0jZGVmaW5lIFBTQV9FQ0NfQ1VSVkVfQlJBSU5QT09MX1AzODRSMSAgICAgICAgICAoKHBzYV9lY2NfY3VydmVfdCkgMHgwMDFiKQotI2RlZmluZSBQU0FfRUNDX0NVUlZFX0JSQUlOUE9PTF9QNTEyUjEgICAgICAgICAgKChwc2FfZWNjX2N1cnZlX3QpIDB4MDAxYykKLSNkZWZpbmUgUFNBX0VDQ19DVVJWRV9DVVJWRTI1NTE5ICAgICAgICAgICAgICAgICgocHNhX2VjY19jdXJ2ZV90KSAweDAwMWQpCi0jZGVmaW5lIFBTQV9FQ0NfQ1VSVkVfQ1VSVkU0NDggICAgICAgICAgICAgICAgICAoKHBzYV9lY2NfY3VydmVfdCkgMHgwMDFlKQotI2RlZmluZSBQU0FfRUNDX0NVUlZFX0ZGREhFXzIwNDggICAgICAgICAgICAgICAgKChwc2FfZWNjX2N1cnZlX3QpIDB4MDEwMCkKLSNkZWZpbmUgUFNBX0VDQ19DVVJWRV9GRkRIRV8zMDcyICAgICAgICAgICAgICAgICgocHNhX2VjY19jdXJ2ZV90KSAweDAxMDEpCi0jZGVmaW5lIFBTQV9FQ0NfQ1VSVkVfRkZESEVfNDA5NiAgICAgICAgICAgICAgICAoKHBzYV9lY2NfY3VydmVfdCkgMHgwMTAyKQotI2RlZmluZSBQU0FfRUNDX0NVUlZFX0ZGREhFXzYxNDQgICAgICAgICAgICAgICAgKChwc2FfZWNjX2N1cnZlX3QpIDB4MDEwMykKLSNkZWZpbmUgUFNBX0VDQ19DVVJWRV9GRkRIRV84MTkyICAgICAgICAgICAgICAgICgocHNhX2VjY19jdXJ2ZV90KSAweDAxMDQpCi0KLSNkZWZpbmUgUFNBX0FMR19ITUFDX0hBU0goaG1hY19hbGcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKFBTQV9BTEdfQ0FURUdPUllfSEFTSCB8ICgoaG1hY19hbGcpICYgUFNBX0FMR19IQVNIX01BU0spKQotCi0vKiBUaGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGhhc2ggKi8KLSNkZWZpbmUgUFNBX0hBU0hfU0laRShhbGcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQU0FfQUxHX0hNQUNfSEFTSChhbGcpID09IFBTQV9BTEdfTUQyID8gMTYgOiAgICAgICAgICAgIFwKLSAgICAgICAgUFNBX0FMR19ITUFDX0hBU0goYWxnKSA9PSBQU0FfQUxHX01ENCA/IDE2IDogICAgICAgICAgICBcCi0gICAgICAgIFBTQV9BTEdfSE1BQ19IQVNIKGFsZykgPT0gUFNBX0FMR19NRDUgPyAxNiA6ICAgICAgICAgICAgXAotICAgICAgICBQU0FfQUxHX0hNQUNfSEFTSChhbGcpID09IFBTQV9BTEdfUklQRU1EMTYwID8gMjAgOiAgICAgIFwKLSAgICAgICAgUFNBX0FMR19ITUFDX0hBU0goYWxnKSA9PSBQU0FfQUxHX1NIQV8xID8gMjAgOiAgICAgICAgICBcCi0gICAgICAgIFBTQV9BTEdfSE1BQ19IQVNIKGFsZykgPT0gUFNBX0FMR19TSEFfMjI0ID8gMjggOiAgICAgICAgXAotICAgICAgICBQU0FfQUxHX0hNQUNfSEFTSChhbGcpID09IFBTQV9BTEdfU0hBXzI1NiA/IDMyIDogICAgICAgIFwKLSAgICAgICAgUFNBX0FMR19ITUFDX0hBU0goYWxnKSA9PSBQU0FfQUxHX1NIQV8zODQgPyA0OCA6ICAgICAgICBcCi0gICAgICAgIFBTQV9BTEdfSE1BQ19IQVNIKGFsZykgPT0gUFNBX0FMR19TSEFfNTEyID8gNjQgOiAgICAgICAgXAotICAgICAgICBQU0FfQUxHX0hNQUNfSEFTSChhbGcpID09IFBTQV9BTEdfU0hBXzUxMl8yMjQgPyAyOCA6ICAgIFwKLSAgICAgICAgUFNBX0FMR19ITUFDX0hBU0goYWxnKSA9PSBQU0FfQUxHX1NIQV81MTJfMjU2ID8gMzIgOiAgICBcCi0gICAgICAgIFBTQV9BTEdfSE1BQ19IQVNIKGFsZykgPT0gUFNBX0FMR19TSEEzXzIyNCA/IDI4IDogICAgICAgXAotICAgICAgICBQU0FfQUxHX0hNQUNfSEFTSChhbGcpID09IFBTQV9BTEdfU0hBM18yNTYgPyAzMiA6ICAgICAgIFwKLSAgICAgICAgUFNBX0FMR19ITUFDX0hBU0goYWxnKSA9PSBQU0FfQUxHX1NIQTNfMzg0ID8gNDggOiAgICAgICBcCi0gICAgICAgIFBTQV9BTEdfSE1BQ19IQVNIKGFsZykgPT0gUFNBX0FMR19TSEEzXzUxMiA/IDY0IDogICAgICAgXAotICAgICAgICAwKQotCi0vKiogVGhlIHB1YmxpYyBrZXkgdHlwZSBjb3JyZXNwb25kaW5nIHRvIGEga2V5IHBhaXIgdHlwZS4gKi8KLSNkZWZpbmUgUFNBX0tFWV9UWVBFX1BVQkxJQ19LRVlfT0ZfS0VZUEFJUih0eXBlKSAgICAgICAgXAotICAgICgodHlwZSkgJiB+UFNBX0tFWV9UWVBFX1BBSVJfRkxBRykKLQotLyoqIFdoZXRoZXIgYSBrZXkgdHlwZSBpcyBhbiBSU0Ega2V5IChwYWlyIG9yIHB1YmxpYy1vbmx5KS4gKi8KLSNkZWZpbmUgUFNBX0tFWV9UWVBFX0lTX1JTQSh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoUFNBX0tFWV9UWVBFX1BVQkxJQ19LRVlfT0ZfS0VZUEFJUih0eXBlKSA9PSBQU0FfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVkpCi0KLS8qKiBXaGV0aGVyIGEga2V5IHR5cGUgaXMgYW4gZWxsaXB0aWMgY3VydmUga2V5IChwYWlyIG9yIHB1YmxpYy1vbmx5KS4gKi8KLSNkZWZpbmUgUFNBX0tFWV9UWVBFX0lTX0VDQyh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKFBTQV9LRVlfVFlQRV9QVUJMSUNfS0VZX09GX0tFWVBBSVIodHlwZSkgJiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH5QU0FfS0VZX1RZUEVfRUNDX0NVUlZFX01BU0spID09IFBTQV9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWV9CQVNFKQotI2RlZmluZSBQU0FfS0VZX1RZUEVfSVNfRUNDX0tFWVBBSVIodHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICgoKHR5cGUpICYgflBTQV9LRVlfVFlQRV9FQ0NfQ1VSVkVfTUFTSykgPT0gICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBQU0FfS0VZX1RZUEVfRUNDX0tFWVBBSVJfQkFTRSkKLSNkZWZpbmUgUFNBX0tFWV9UWVBFX0lTX0VDQ19QVUJMSUNfS0VZKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKCh0eXBlKSAmIH5QU0FfS0VZX1RZUEVfRUNDX0NVUlZFX01BU0spID09ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgUFNBX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZX0JBU0UpCi0KLS8qTWFjcm8gdG8gYnVpbGQgYW4gSE1BQyBhbGdvcml0aG0gKi8KLSNkZWZpbmUgUFNBX0FMR19IS0RGKGhhc2hfYWxnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKFBTQV9BTEdfSEtERl9CQVNFIHwgKChoYXNoX2FsZykgJiBQU0FfQUxHX0hBU0hfTUFTSykpCi0KLXR5cGVkZWYgdWludDE2X3QgcHNhX2VjY19jdXJ2ZV90OwotdHlwZWRlZiB1aW50MzJfdCBwc2Ffa2V5X3VzYWdlX3Q7Ci10eXBlZGVmIHVpbnQzMl90IHBzYV9hbGdvcml0aG1fdDsKLXR5cGVkZWYgdWludDMyX3QgcHNhX2tleV90eXBlX3Q7Ci10eXBlZGVmIHVpbnQzMl90IHBzYV9rZXlfc2xvdF90OwotdHlwZWRlZiB1aW50MzJfdCBwc2Ffa2V5X2xpZmV0aW1lX3Q7CisjZGVmaW5lIFBTQV9LRVlfTElGRVRJTUVfSU5WQUxJRCAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBQU0FfS0VZX1VTQUdFX0lOVkFMSUQgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgUFNBX0FMR19JTlZBTElEICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCiAKIGVudW0gY3J5cHRvX2Z1bmN0aW9uX2NvZGUgewogICAgIFZBTF9DUllQVE9fSU5JVCAgICAgICAgICAgICAgICAgICAgID0gMHgxLApAQCAtMjQxLDcgKzY2LDYgQEAKICAgICBWQUxfQ1JZUFRPX0dFVF9LRVlfUE9MSUNZICAgICAgICAgICA9IDB4RCwKICAgICBWQUxfQ1JZUFRPX0dFVF9LRVlfSU5GT1JNQVRJT04gICAgICA9IDB4RSwKICAgICBWQUxfQ1JZUFRPX0dFVF9LRVlfTElGRVRJTUUgICAgICAgICA9IDB4RiwKLSAgICBWQUxfQ1JZUFRPX1NFVF9LRVlfTElGRVRJTUUgICAgICAgICA9IDB4MTAsCiAgICAgVkFMX0NSWVBUT19IQVNIX1NFVFVQICAgICAgICAgICAgICAgPSAweDExLAogICAgIFZBTF9DUllQVE9fSEFTSF9VUERBVEUgICAgICAgICAgICAgID0gMHgxMiwKICAgICBWQUxfQ1JZUFRPX0hBU0hfVkVSSUZZICAgICAgICAgICAgICA9IDB4MTMsCkBAIC0yNTEsMzE0ICs3NSwzMSBAQAogICAgIFZBTF9DUllQVE9fR0VORVJBVE9SX1JFQUQgICAgICAgICAgID0gMHgxNywKICAgICBWQUxfQ1JZUFRPX0tFWV9ERVJJVkFUSU9OICAgICAgICAgICA9IDB4MTgsCiAgICAgVkFMX0NSWVBUT19HRVRfR0VORVJBVE9SX0NBUEFDSVRZICAgPSAweDE5LAotICAgIFZBTF9DUllQVE9fR0VORVJBVE9SX0lNUE9SVF9LRVkgICAgID0gMHgyMCwKLSAgICBWQUxfQ1JZUFRPX0dFTkVSQVRPUl9BQk9SVCAgICAgICAgICA9IDB4MjEsCi0gICAgVkFMX0NSWVBUT19BRUFEX0VOQ1JZUFQgICAgICAgICAgICAgPSAweDIyLAotICAgIFZBTF9DUllQVE9fTUFDX1NJR05fU0VUVVAsCisgICAgVkFMX0NSWVBUT19HRU5FUkFUT1JfSU1QT1JUX0tFWSAgICAgPSAweDFBLAorICAgIFZBTF9DUllQVE9fR0VORVJBVE9SX0FCT1JUICAgICAgICAgID0gMHgxQiwKKyAgICBWQUxfQ1JZUFRPX0FFQURfRU5DUllQVCAgICAgICAgICAgICA9IDB4MUMsCisgICAgVkFMX0NSWVBUT19BRUFEX0RFQ1JZUFQgICAgICAgICAgICAgPSAweDFELAorICAgIFZBTF9DUllQVE9fTUFDX1NJR05fU0VUVVAgICAgICAgICAgID0gMHgxRSwKKyAgICBWQUxfQ1JZUFRPX01BQ19VUERBVEUgICAgICAgICAgICAgICA9IDB4MUYsCisgICAgVkFMX0NSWVBUT19NQUNfU0lHTl9GSU5JU0ggICAgICAgICAgPSAweDIwLAorICAgIFZBTF9DUllQVE9fTUFDX1ZFUklGWV9TRVRVUCAgICAgICAgID0gMHgyMSwKKyAgICBWQUxfQ1JZUFRPX01BQ19WRVJJRllfRklOSVNIICAgICAgICA9IDB4MjIsCisgICAgVkFMX0NSWVBUT19NQUNfQUJPUlQgICAgICAgICAgICAgICAgPSAweDIzLAorICAgIFZBTF9DUllQVE9fQVNZTU1URVJJQ19FTkNSWVBUICAgICAgID0gMHgyNCwKKyAgICBWQUxfQ1JZUFRPX0FTWU1NVEVSSUNfREVDUllQVCAgICAgICA9IDB4MjUsCisgICAgVkFMX0NSWVBUT19DSVBIRVJfRU5DUllQVF9TRVRVUCAgICAgPSAweDI2LAorICAgIFZBTF9DUllQVE9fQ0lQSEVSX0RFQ1JZUFRfU0VUVVAgICAgID0gMHgyQSwKKyAgICBWQUxfQ1JZUFRPX0NJUEhFUl9HRU5FUkFURV9JViAgICAgICA9IDB4MkIsCisgICAgVkFMX0NSWVBUT19DSVBIRVJfU0VUX0lWICAgICAgICAgICAgPSAweDJDLAorICAgIFZBTF9DUllQVE9fQ0lQSEVSX1VQREFURSAgICAgICAgICAgID0gMHgyRCwKKyAgICBWQUxfQ1JZUFRPX0NJUEhFUl9GSU5JU0ggICAgICAgICAgICA9IDB4MkUsCisgICAgVkFMX0NSWVBUT19DSVBIRVJfQUJPUlQgICAgICAgICAgICAgPSAweDJGLAorICAgIFZBTF9DUllQVE9fQVNZTU1URVJJQ19TSUdOICAgICAgICAgID0gMHgzMCwKKyAgICBWQUxfQ1JZUFRPX0FTWU1NVEVSSUNfVkVSSUZZICAgICAgICA9IDB4MzEsCisgICAgVkFMX0NSWVBUT19LRVlfQUdSRUVNRU5UICAgICAgICAgICAgPSAweDMyLAorICAgIFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZICAgICAgICAgICAgID0gMHgzMywKICAgICBWQUxfQ1JZUFRPX0ZSRUUgICAgICAgICAgICAgICAgICAgICA9IDB4RkUsCiB9OwogCi1zdHJ1Y3QgcHNhX2tleV9wb2xpY3lfcyB7Ci0gICAgcHNhX2tleV91c2FnZV90IHVzYWdlOwotICAgIHBzYV9hbGdvcml0aG1fdCBhbGc7Ci19OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5zaWduZWQgY2hhciBja3N1bVsxNl07ICAgIC8qITwgY2hlY2tzdW0gb2YgdGhlIGRhdGEgYmxvY2sgKi8KLSAgICB1bnNpZ25lZCBjaGFyIHN0YXRlWzQ4XTsgICAgLyohPCBpbnRlcm1lZGlhdGUgZGlnZXN0IHN0YXRlICAqLwotICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzE2XTsgICAvKiE8IGRhdGEgYmxvY2sgYmVpbmcgcHJvY2Vzc2VkICovCi0gICAgc2l6ZV90IGxlZnQ7ICAgICAgICAgICAgICAgIC8qITwgYW1vdW50IG9mIGRhdGEgaW4gYnVmZmVyICAgKi8KLX0gbWJlZHRsc19tZDJfY29udGV4dDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVpbnQzMl90IHRvdGFsWzJdOyAgICAgICAgICAvKiE8IG51bWJlciBvZiBieXRlcyBwcm9jZXNzZWQgICovCi0gICAgdWludDMyX3Qgc3RhdGVbNF07ICAgICAgICAgIC8qITwgaW50ZXJtZWRpYXRlIGRpZ2VzdCBzdGF0ZSAgKi8KLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07ICAgLyohPCBkYXRhIGJsb2NrIGJlaW5nIHByb2Nlc3NlZCAqLwotfSBtYmVkdGxzX21kNF9jb250ZXh0OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWludDMyX3QgdG90YWxbMl07ICAgICAgICAgIC8qITwgbnVtYmVyIG9mIGJ5dGVzIHByb2Nlc3NlZCAgKi8KLSAgICB1aW50MzJfdCBzdGF0ZVs0XTsgICAgICAgICAgLyohPCBpbnRlcm1lZGlhdGUgZGlnZXN0IHN0YXRlICAqLwotICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzY0XTsgICAvKiE8IGRhdGEgYmxvY2sgYmVpbmcgcHJvY2Vzc2VkICovCi19IG1iZWR0bHNfbWQ1X2NvbnRleHQ7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICB1aW50MzJfdCB0b3RhbFsyXTsgICAgICAgICAgLyohPCBudW1iZXIgb2YgYnl0ZXMgcHJvY2Vzc2VkICAqLwotICAgIHVpbnQzMl90IHN0YXRlWzVdOyAgICAgICAgICAvKiE8IGludGVybWVkaWF0ZSBkaWdlc3Qgc3RhdGUgICovCi0gICAgdW5zaWduZWQgY2hhciBidWZmZXJbNjRdOyAgIC8qITwgZGF0YSBibG9jayBiZWluZyBwcm9jZXNzZWQgKi8KLX0gbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVpbnQzMl90IHRvdGFsWzJdOyAgICAgICAgICAvKiE8IFRoZSBudW1iZXIgb2YgQnl0ZXMgcHJvY2Vzc2VkLiAgKi8KLSAgICB1aW50MzJfdCBzdGF0ZVs1XTsgICAgICAgICAgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGRpZ2VzdCBzdGF0ZS4gICovCi0gICAgdW5zaWduZWQgY2hhciBidWZmZXJbNjRdOyAgIC8qITwgVGhlIGRhdGEgYmxvY2sgYmVpbmcgcHJvY2Vzc2VkLiAqLwotfSBtYmVkdGxzX3NoYTFfY29udGV4dDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVpbnQzMl90IHRvdGFsWzJdOyAgICAgICAgICAvKiE8IFRoZSBudW1iZXIgb2YgQnl0ZXMgcHJvY2Vzc2VkLiAgKi8KLSAgICB1aW50MzJfdCBzdGF0ZVs4XTsgICAgICAgICAgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGRpZ2VzdCBzdGF0ZS4gICovCi0gICAgdW5zaWduZWQgY2hhciBidWZmZXJbNjRdOyAgIC8qITwgVGhlIGRhdGEgYmxvY2sgYmVpbmcgcHJvY2Vzc2VkLiAqLwotICAgIGludCBpczIyNDsgICAgICAgICAgICAgICAgICAvKiE8IERldGVybWluZXMgd2hpY2ggZnVuY3Rpb24gdG8gdXNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6IFVzZSBTSEEtMjU2LCBvciAxOiBVc2UgU0hBLTIyNC4gKi8KLX0gbWJlZHRsc19zaGEyNTZfY29udGV4dDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVpbnQ2NF90IHRvdGFsWzJdOyAgICAgICAgICAvKiE8IFRoZSBudW1iZXIgb2YgQnl0ZXMgcHJvY2Vzc2VkLiAqLwotICAgIHVpbnQ2NF90IHN0YXRlWzhdOyAgICAgICAgICAvKiE8IFRoZSBpbnRlcm1lZGlhdGUgZGlnZXN0IHN0YXRlLiAqLwotICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzEyOF07ICAvKiE8IFRoZSBkYXRhIGJsb2NrIGJlaW5nIHByb2Nlc3NlZC4gKi8KLSAgICBpbnQgaXMzODQ7ICAgICAgICAgICAgICAgICAgLyohPCBEZXRlcm1pbmVzIHdoaWNoIGZ1bmN0aW9uIHRvIHVzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOiBVc2UgU0hBLTUxMiwgb3IgMTogVXNlIFNIQS0zODQuICovCi19IG1iZWR0bHNfc2hhNTEyX2NvbnRleHQ7Ci0KLXR5cGVkZWYgc3RydWN0IG1iZWR0bHNfY2lwaGVyX2Jhc2VfdCBtYmVkdGxzX2NpcGhlcl9iYXNlX3Q7Ci0KLS8qKgotICogXGJyaWVmICAgICBTdXBwb3J0ZWQge2NpcGhlciB0eXBlLCBjaXBoZXIgbW9kZX0gcGFpcnMuCi0gKgotICogXHdhcm5pbmcgICBSQzQgYW5kIERFUyBhcmUgY29uc2lkZXJlZCB3ZWFrIGNpcGhlcnMgYW5kIHRoZWlyIHVzZQotICogICAgICAgICAgICBjb25zdGl0dXRlcyBhIHNlY3VyaXR5IHJpc2suIEFybSByZWNvbW1lbmRzIGNvbnNpZGVyaW5nIHN0cm9uZ2VyCi0gKiAgICAgICAgICAgIGNpcGhlcnMgaW5zdGVhZC4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgICBNQkVEVExTX0NJUEhFUl9OT05FID0gMCwgICAgICAgICAgICAgLyoqPCBQbGFjZWhvbGRlciB0byBtYXJrIHRoZSBlbmQgb2YgY2lwaGVyLXBhaXIgbGlzdHMuICovCi0gICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgICAgICAgICAgICAgICAgIC8qKjwgVGhlIGlkZW50aXR5IHN0cmVhbSBjaXBoZXIuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0IsICAgICAgICAgIC8qKjwgQUVTIGNpcGhlciB3aXRoIDEyOC1iaXQgRUNCIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0IsICAgICAgICAgIC8qKjwgQUVTIGNpcGhlciB3aXRoIDE5Mi1iaXQgRUNCIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0IsICAgICAgICAgIC8qKjwgQUVTIGNpcGhlciB3aXRoIDI1Ni1iaXQgRUNCIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkMsICAgICAgICAgIC8qKjwgQUVTIGNpcGhlciB3aXRoIDEyOC1iaXQgQ0JDIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkMsICAgICAgICAgIC8qKjwgQUVTIGNpcGhlciB3aXRoIDE5Mi1iaXQgQ0JDIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMsICAgICAgICAgIC8qKjwgQUVTIGNpcGhlciB3aXRoIDI1Ni1iaXQgQ0JDIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DRkIxMjgsICAgICAgIC8qKjwgQUVTIGNpcGhlciB3aXRoIDEyOC1iaXQgQ0ZCMTI4IG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DRkIxMjgsICAgICAgIC8qKjwgQUVTIGNpcGhlciB3aXRoIDE5Mi1iaXQgQ0ZCMTI4IG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DRkIxMjgsICAgICAgIC8qKjwgQUVTIGNpcGhlciB3aXRoIDI1Ni1iaXQgQ0ZCMTI4IG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFIsICAgICAgICAgIC8qKjwgQUVTIGNpcGhlciB3aXRoIDEyOC1iaXQgQ1RSIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DVFIsICAgICAgICAgIC8qKjwgQUVTIGNpcGhlciB3aXRoIDE5Mi1iaXQgQ1RSIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DVFIsICAgICAgICAgIC8qKjwgQUVTIGNpcGhlciB3aXRoIDI1Ni1iaXQgQ1RSIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ00sICAgICAgICAgIC8qKjwgQUVTIGNpcGhlciB3aXRoIDEyOC1iaXQgR0NNIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ00sICAgICAgICAgIC8qKjwgQUVTIGNpcGhlciB3aXRoIDE5Mi1iaXQgR0NNIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ00sICAgICAgICAgIC8qKjwgQUVTIGNpcGhlciB3aXRoIDI1Ni1iaXQgR0NNIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0VDQiwgICAgIC8qKjwgQ2FtZWxsaWEgY2lwaGVyIHdpdGggMTI4LWJpdCBFQ0IgbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfRUNCLCAgICAgLyoqPCBDYW1lbGxpYSBjaXBoZXIgd2l0aCAxOTItYml0IEVDQiBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9FQ0IsICAgICAvKio8IENhbWVsbGlhIGNpcGhlciB3aXRoIDI1Ni1iaXQgRUNCIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQywgICAgIC8qKjwgQ2FtZWxsaWEgY2lwaGVyIHdpdGggMTI4LWJpdCBDQkMgbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDLCAgICAgLyoqPCBDYW1lbGxpYSBjaXBoZXIgd2l0aCAxOTItYml0IENCQyBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMsICAgICAvKio8IENhbWVsbGlhIGNpcGhlciB3aXRoIDI1Ni1iaXQgQ0JDIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyOCwgIC8qKjwgQ2FtZWxsaWEgY2lwaGVyIHdpdGggMTI4LWJpdCBDRkIxMjggbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0ZCMTI4LCAgLyoqPCBDYW1lbGxpYSBjaXBoZXIgd2l0aCAxOTItYml0IENGQjEyOCBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DRkIxMjgsICAvKio8IENhbWVsbGlhIGNpcGhlciB3aXRoIDI1Ni1iaXQgQ0ZCMTI4IG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUiwgICAgIC8qKjwgQ2FtZWxsaWEgY2lwaGVyIHdpdGggMTI4LWJpdCBDVFIgbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ1RSLCAgICAgLyoqPCBDYW1lbGxpYSBjaXBoZXIgd2l0aCAxOTItYml0IENUUiBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DVFIsICAgICAvKio8IENhbWVsbGlhIGNpcGhlciB3aXRoIDI1Ni1iaXQgQ1RSIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTSwgICAgIC8qKjwgQ2FtZWxsaWEgY2lwaGVyIHdpdGggMTI4LWJpdCBHQ00gbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNLCAgICAgLyoqPCBDYW1lbGxpYSBjaXBoZXIgd2l0aCAxOTItYml0IEdDTSBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ00sICAgICAvKio8IENhbWVsbGlhIGNpcGhlciB3aXRoIDI1Ni1iaXQgR0NNIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfREVTX0VDQiwgICAgICAgICAgICAgIC8qKjwgREVTIGNpcGhlciB3aXRoIEVDQiBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0RFU19DQkMsICAgICAgICAgICAgICAvKio8IERFUyBjaXBoZXIgd2l0aCBDQkMgbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFX0VDQiwgICAgICAgICAgLyoqPCBERVMgY2lwaGVyIHdpdGggRURFIEVDQiBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDLCAgICAgICAgICAvKio8IERFUyBjaXBoZXIgd2l0aCBFREUgQ0JDIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfRUNCLCAgICAgICAgIC8qKjwgREVTIGNpcGhlciB3aXRoIEVERTMgRUNCIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDLCAgICAgICAgIC8qKjwgREVTIGNpcGhlciB3aXRoIEVERTMgQ0JDIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfRUNCLCAgICAgICAgIC8qKjwgQmxvd2Zpc2ggY2lwaGVyIHdpdGggRUNCIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDLCAgICAgICAgIC8qKjwgQmxvd2Zpc2ggY2lwaGVyIHdpdGggQ0JDIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQsICAgICAgIC8qKjwgQmxvd2Zpc2ggY2lwaGVyIHdpdGggQ0ZCNjQgbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFIsICAgICAgICAgLyoqPCBCbG93ZmlzaCBjaXBoZXIgd2l0aCBDVFIgbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9BUkM0XzEyOCwgICAgICAgICAgICAgLyoqPCBSQzQgY2lwaGVyIHdpdGggMTI4LWJpdCBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNLCAgICAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAxMjgtYml0IENDTSBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNLCAgICAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAxOTItYml0IENDTSBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNLCAgICAgICAgICAvKio8IEFFUyBjaXBoZXIgd2l0aCAyNTYtYml0IENDTSBtb2RlLiAqLwotICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ00sICAgICAvKio8IENhbWVsbGlhIGNpcGhlciB3aXRoIDEyOC1iaXQgQ0NNIG1vZGUuICovCi0gICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NDTSwgICAgIC8qKjwgQ2FtZWxsaWEgY2lwaGVyIHdpdGggMTkyLWJpdCBDQ00gbW9kZS4gKi8KLSAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0NNLCAgICAgLyoqPCBDYW1lbGxpYSBjaXBoZXIgd2l0aCAyNTYtYml0IENDTSBtb2RlLiAqLwotfSBtYmVkdGxzX2NpcGhlcl90eXBlX3Q7Ci0KLS8qKiBTdXBwb3J0ZWQgY2lwaGVyIG1vZGVzLiAqLwotdHlwZWRlZiBlbnVtIHsKLSAgICBNQkVEVExTX01PREVfTk9ORSA9IDAsICAgICAgICAgICAgICAgLyoqPCBOb25lLiAqLwotICAgIE1CRURUTFNfTU9ERV9FQ0IsICAgICAgICAgICAgICAgICAgICAvKio8IFRoZSBFQ0IgY2lwaGVyIG1vZGUuICovCi0gICAgTUJFRFRMU19NT0RFX0NCQywgICAgICAgICAgICAgICAgICAgIC8qKjwgVGhlIENCQyBjaXBoZXIgbW9kZS4gKi8KLSAgICBNQkVEVExTX01PREVfQ0ZCLCAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgQ0ZCIGNpcGhlciBtb2RlLiAqLwotICAgIE1CRURUTFNfTU9ERV9PRkIsICAgICAgICAgICAgICAgICAgICAvKio8IFRoZSBPRkIgY2lwaGVyIG1vZGUgLSB1bnN1cHBvcnRlZC4gKi8KLSAgICBNQkVEVExTX01PREVfQ1RSLCAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgQ1RSIGNpcGhlciBtb2RlLiAqLwotICAgIE1CRURUTFNfTU9ERV9HQ00sICAgICAgICAgICAgICAgICAgICAvKio8IFRoZSBHQ00gY2lwaGVyIG1vZGUuICovCi0gICAgTUJFRFRMU19NT0RFX1NUUkVBTSwgICAgICAgICAgICAgICAgIC8qKjwgVGhlIHN0cmVhbSBjaXBoZXIgbW9kZS4gKi8KLSAgICBNQkVEVExTX01PREVfQ0NNLCAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgQ0NNIGNpcGhlciBtb2RlLiAqLwotfSBtYmVkdGxzX2NpcGhlcl9tb2RlX3Q7Ci0KLXN0cnVjdCBwc2FfaGFzaF9vcGVyYXRpb25fcyB7Ci0gICAgcHNhX2FsZ29yaXRobV90IGFsZzsKLSAgICB1bmlvbgotICAgIHsKLSAgICAgICAgdW5zaWduZWQgZHVtbXk7IC8qIE1ha2UgdGhlIHVuaW9uIG5vbi1lbXB0eSBldmVuIHdpdGggbm8gc3VwcG9ydGVkIGFsZ29yaXRobXMuICovCi0gICAgICAgIG1iZWR0bHNfbWQyX2NvbnRleHQgbWQyOwotICAgICAgICBtYmVkdGxzX21kNF9jb250ZXh0IG1kNDsKLSAgICAgICAgbWJlZHRsc19tZDVfY29udGV4dCBtZDU7Ci0gICAgICAgIG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQgcmlwZW1kMTYwOwotICAgICAgICBtYmVkdGxzX3NoYTFfY29udGV4dCBzaGExOwotICAgICAgICBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0IHNoYTI1NjsKLSAgICAgICAgbWJlZHRsc19zaGE1MTJfY29udGV4dCBzaGE1MTI7Ci0gICAgfSBjdHg7Ci19OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgLyoqIEZ1bGwgY2lwaGVyIGlkZW50aWZpZXIuIEZvciBleGFtcGxlLAotICAgICAqIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLgotICAgICAqLwotICAgIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCB0eXBlOwotCi0gICAgLyoqIFRoZSBjaXBoZXIgbW9kZS4gRm9yIGV4YW1wbGUsIE1CRURUTFNfTU9ERV9DQkMuICovCi0gICAgbWJlZHRsc19jaXBoZXJfbW9kZV90IG1vZGU7Ci0KLSAgICAvKiogVGhlIGNpcGhlciBrZXkgbGVuZ3RoLCBpbiBiaXRzLiBUaGlzIGlzIHRoZQotICAgICAqIGRlZmF1bHQgbGVuZ3RoIGZvciB2YXJpYWJsZSBzaXplZCBjaXBoZXJzLgotICAgICAqIEluY2x1ZGVzIHBhcml0eSBiaXRzIGZvciBjaXBoZXJzIGxpa2UgREVTLgotICAgICAqLwotICAgIHVuc2lnbmVkIGludCBrZXlfYml0bGVuOwotCi0gICAgLyoqIE5hbWUgb2YgdGhlIGNpcGhlci4gKi8KLSAgICBjb25zdCBjaGFyICpuYW1lOwotCi0gICAgLyoqIElWIG9yIG5vbmNlIHNpemUsIGluIEJ5dGVzLgotICAgICAqIEZvciBjaXBoZXJzIHRoYXQgYWNjZXB0IHZhcmlhYmxlIElWIHNpemVzLAotICAgICAqIHRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIHNpemUuCi0gICAgICovCi0gICAgdW5zaWduZWQgaW50IGl2X3NpemU7Ci0KLSAgICAvKiogQml0ZmxhZyBjb21wcmlzZWQgb2YgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfSVZfTEVOIGFuZAotICAgICAqICBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9LRVlfTEVOIGluZGljYXRpbmcgd2hldGhlciB0aGUKLSAgICAgKiAgY2lwaGVyIHN1cHBvcnRzIHZhcmlhYmxlIElWIG9yIHZhcmlhYmxlIGtleSBzaXplcywgcmVzcGVjdGl2ZWx5LgotICAgICAqLwotICAgIGludCBmbGFnczsKLQotICAgIC8qKiBUaGUgYmxvY2sgc2l6ZSwgaW4gQnl0ZXMuICovCi0gICAgdW5zaWduZWQgaW50IGJsb2NrX3NpemU7Ci0KLSAgICAvKiogU3RydWN0IGZvciBiYXNlIGNpcGhlciBpbmZvcm1hdGlvbiBhbmQgZnVuY3Rpb25zLiAqLwotICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2Jhc2VfdCAqYmFzZTsKLQotfSBtYmVkdGxzX2NpcGhlcl9pbmZvX3Q7Ci0KLS8qKiBUeXBlIG9mIG9wZXJhdGlvbi4gKi8KLXR5cGVkZWYgZW51bSB7Ci0gICAgTUJFRFRMU19PUEVSQVRJT05fTk9ORSA9IC0xLAotICAgIE1CRURUTFNfREVDUllQVCA9IDAsCi0gICAgTUJFRFRMU19FTkNSWVBULAotfSBtYmVkdGxzX29wZXJhdGlvbl90OwotCi0vKiogTWF4aW11bSBsZW5ndGggb2YgYW55IElWLCBpbiBCeXRlcy4gKi8KLSNkZWZpbmUgTUJFRFRMU19NQVhfSVZfTEVOR1RIICAgICAgMTYKLS8qKiBNYXhpbXVtIGJsb2NrIHNpemUgb2YgYW55IGNpcGhlciwgaW4gQnl0ZXMuICovCi0jZGVmaW5lIE1CRURUTFNfTUFYX0JMT0NLX0xFTkdUSCAgIDE2Ci0KLSNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCi0jZGVmaW5lIFBTQV9IQVNIX01BWF9TSVpFIDY0Ci0jZGVmaW5lIFBTQV9ITUFDX01BWF9IQVNIX0JMT0NLX1NJWkUgMTI4Ci0jZWxzZQotI2RlZmluZSBQU0FfSEFTSF9NQVhfU0laRSAzMgotI2RlZmluZSBQU0FfSE1BQ19NQVhfSEFTSF9CTE9DS19TSVpFIDY0Ci0jZW5kaWYKLQotLyoqCi0gKiBHZW5lcmljIGNpcGhlciBjb250ZXh0LgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgLyoqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBhc3NvY2lhdGVkIGNpcGhlci4gKi8KLSAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOwotCi0gICAgLyoqIEtleSBsZW5ndGggdG8gdXNlLiAqLwotICAgIGludCBrZXlfYml0bGVuOwotCi0gICAgLyoqIE9wZXJhdGlvbiB0aGF0IHRoZSBrZXkgb2YgdGhlIGNvbnRleHQgaGFzIGJlZW4KLSAgICAgKiBpbml0aWFsaXplZCBmb3IuCi0gICAgICovCi0gICAgbWJlZHRsc19vcGVyYXRpb25fdCBvcGVyYXRpb247Ci0KLSNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HKQotICAgIC8qKiBQYWRkaW5nIGZ1bmN0aW9ucyB0byB1c2UsIGlmIHJlbGV2YW50IGZvcgotICAgICAqIHRoZSBzcGVjaWZpYyBjaXBoZXIgbW9kZS4KLSAgICAgKi8KLSAgICB2b2lkICgqYWRkX3BhZGRpbmcpKHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IG9sZW4sIHNpemVfdCBkYXRhX2xlbik7Ci0gICAgaW50ICgqZ2V0X3BhZGRpbmcpKHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwgc2l6ZV90ICpkYXRhX2xlbik7Ci0jZW5kaWYKLQotICAgIC8qKiBCdWZmZXIgZm9yIGlucHV0IHRoYXQgaGFzIG5vdCBiZWVuIHByb2Nlc3NlZCB5ZXQuICovCi0gICAgdW5zaWduZWQgY2hhciB1bnByb2Nlc3NlZF9kYXRhW01CRURUTFNfTUFYX0JMT0NLX0xFTkdUSF07Ci0KLSAgICAvKiogTnVtYmVyIG9mIEJ5dGVzIHRoYXQgaGF2ZSBub3QgYmVlbiBwcm9jZXNzZWQgeWV0LiAqLwotICAgIHNpemVfdCB1bnByb2Nlc3NlZF9sZW47Ci0KLSAgICAvKiogQ3VycmVudCBJViBvciBOT05DRV9DT1VOVEVSIGZvciBDVFItbW9kZS4gKi8KLSAgICB1bnNpZ25lZCBjaGFyIGl2W01CRURUTFNfTUFYX0lWX0xFTkdUSF07Ci0KLSAgICAvKiogSVYgc2l6ZSBpbiBCeXRlcywgZm9yIGNpcGhlcnMgd2l0aCB2YXJpYWJsZS1sZW5ndGggSVZzLiAqLwotICAgIHNpemVfdCBpdl9zaXplOwotCi0gICAgLyoqIFRoZSBjaXBoZXItc3BlY2lmaWMgY29udGV4dC4gKi8KLSAgICB2b2lkICpjaXBoZXJfY3R4OwotCi0jaWYgZGVmaW5lZChNQkVEVExTX0NNQUNfQykKLSAgICAvKiogQ01BQy1zcGVjaWZpYyBjb250ZXh0LiAqLwotICAgIG1iZWR0bHNfY21hY19jb250ZXh0X3QgKmNtYWNfY3R4OwotI2VuZGlmCi19IG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgICAgICAvKiogVGhlIGhhc2ggY29udGV4dC4gKi8KLSAgICAgICAgc3RydWN0IHBzYV9oYXNoX29wZXJhdGlvbl9zIGhhc2hfY3R4OwotICAgICAgICAvKiogVGhlIEhNQUMgcGFydCBvZiB0aGUgY29udGV4dC4gKi8KLSAgICAgICAgdWludDhfdCBvcGFkW1BTQV9ITUFDX01BWF9IQVNIX0JMT0NLX1NJWkVdOwotfSBwc2FfaG1hY19pbnRlcm5hbF9kYXRhOwotCi1zdHJ1Y3QgcHNhX21hY19vcGVyYXRpb25fcyB7Ci0gICAgcHNhX2FsZ29yaXRobV90IGFsZzsKLSAgICB1bnNpZ25lZCBpbnQga2V5X3NldCA6IDE7Ci0gICAgdW5zaWduZWQgaW50IGl2X3JlcXVpcmVkIDogMTsKLSAgICB1bnNpZ25lZCBpbnQgaXZfc2V0IDogMTsKLSAgICB1bnNpZ25lZCBpbnQgaGFzX2lucHV0IDogMTsKLSAgICB1bnNpZ25lZCBpbnQgaXNfc2lnbiA6IDE7Ci0gICAgdWludDhfdCBtYWNfc2l6ZTsKLSAgICB1bmlvbiB7Ci0gICAgICAgIHVuc2lnbmVkIGR1bW15OyAvKiBNYWtlIHRoZSB1bmlvbiBub24tZW1wdHkgZXZlbiB3aXRoIG5vIHN1cHBvcnRlZCBhbGdvcml0aG1zLiAqLwotI2lmIGRlZmluZWQoTUJFRFRMU19NRF9DKQotICAgICAgICBwc2FfaG1hY19pbnRlcm5hbF9kYXRhIGhtYWM7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKE1CRURUTFNfQ01BQ19DKQotICAgICAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY21hYzsKLSNlbmRpZgotICAgIH0gY3R4OwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVpbnQ4X3QgKmluZm87Ci0gICAgc2l6ZV90IGluZm9fbGVuZ3RoOwotICAgIHBzYV9obWFjX2ludGVybmFsX2RhdGEgaG1hYzsKLSAgICB1aW50OF90IHBya1tQU0FfSEFTSF9NQVhfU0laRV07Ci0gICAgdWludDhfdCBvdXRwdXRfYmxvY2tbUFNBX0hBU0hfTUFYX1NJWkVdOwotI2lmIFBTQV9IQVNIX01BWF9TSVpFID4gMHhmZgotI2Vycm9yICJQU0FfSEFTSF9NQVhfU0laRSBkb2VzIG5vdCBmaXQgaW4gdWludDhfdCIKLSNlbmRpZgotICAgIHVpbnQ4X3Qgb2Zmc2V0X2luX2Jsb2NrOwotICAgIHVpbnQ4X3QgYmxvY2tfbnVtYmVyOwotfSBwc2FfaGtkZl9nZW5lcmF0b3JfdDsKLQotc3RydWN0IHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3MgewotICAgIHBzYV9hbGdvcml0aG1fdCBhbGc7Ci0gICAgc2l6ZV90IGNhcGFjaXR5OwotICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVpbnQ4X3QgKmRhdGE7Ci0gICAgICAgICAgICBzaXplX3Qgc2l6ZTsKLSAgICAgICAgfSBidWZmZXI7Ci0jaWYgZGVmaW5lZChNQkVEVExTX01EX0MpCi0gICAgICAgIHBzYV9oa2RmX2dlbmVyYXRvcl90IGhrZGY7Ci0jZW5kaWYKLSAgICB9IGN0eDsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHBzYV9oYXNoX29wZXJhdGlvbl9zIHBzYV9oYXNoX29wZXJhdGlvbl90OwotdHlwZWRlZiBzdHJ1Y3QgcHNhX2tleV9wb2xpY3lfcyBwc2Ffa2V5X3BvbGljeV90OwotdHlwZWRlZiBzdHJ1Y3QgcHNhX21hY19vcGVyYXRpb25fcyBwc2FfbWFjX29wZXJhdGlvbl90OwotdHlwZWRlZiBzdHJ1Y3QgcHNhX2NyeXB0b19nZW5lcmF0b3JfcyBwc2FfY3J5cHRvX2dlbmVyYXRvcl90OwotCi12YWxfc3RhdHVzX3QgdmFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgLi4uKTsKLWludDMyX3QgdmFsX2NyeXB0b19rZXlfdHlwZV9pc19yYXcocHNhX2tleV90eXBlX3QgdHlwZSk7CitpbnQzMl90IHZhbF9jcnlwdG9fZnVuY3Rpb24oaW50IHR5cGUsIC4uLik7CiAjZW5kaWYgLyogX1ZBTF9DUllQVE9fSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfZGlzcGF0Y2hlci5jIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9kaXNwYXRjaGVyLmMKaW5kZXggYmZhNzRiYi4uMjljNzJkYyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9kaXNwYXRjaGVyLmMKKysrIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9kaXNwYXRjaGVyLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE2NCw3ICsxNjQsNyBAQAogCiAgICAgICAgICAgICBpZiAodGVzdF9oZWFkZXIuc3RhcnRfbWFya2VyID09IFZBTF9URVNUX0VORF9NQVJLRVIpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXG5cbk5vIG1vcmUgdmFsaWQgdGVzdHMgZm91bmQuIEV4aXRpbmcuLiIsIDApOworICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9ERUJVRywgIlxuXG5ObyBtb3JlIHZhbGlkIHRlc3RzIGZvdW5kLiBFeGl0aW5nLi4iLCAwKTsKICAgICAgICAgICAgICAgICAqdGVzdF9pZCA9IFZBTF9JTlZBTElEX1RFU1RfSUQ7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICAgICAgICAgIH0KQEAgLTE5NCwxNCArMTk0LDE0IEBACiAKICAgICBpZiAodGVzdF9oZWFkZXIuc3RhcnRfbWFya2VyID09IFZBTF9URVNUX0VORF9NQVJLRVIpCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcblxuTm8gbW9yZSB2YWxpZCB0ZXN0cyBmb3VuZC4gRXhpdGluZy4iLCAwKTsKKyAgICAgICAgdmFsX3ByaW50KFBSSU5UX0RFQlVHLCAiXG5cbk5vIG1vcmUgdmFsaWQgdGVzdHMgZm91bmQuIEV4aXRpbmcuIiwgMCk7CiAgICAgICAgICp0ZXN0X2lkID0gVkFMX0lOVkFMSURfVEVTVF9JRDsKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICB9CiAKICAgICBpZiAodGVzdF9oZWFkZXIuc3RhcnRfbWFya2VyICE9IFZBTF9URVNUX1NUQVJUX01BUktFUikKICAgICB7Ci0gICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlxuXG5ObyB2YWxpZCB0ZXN0IGJpbmFyeSBmb3VuZC4gRXhpdGluZy4iLCAwKTsKKyAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXG5cbkVycm9yOiBObyB2YWxpZCB0ZXN0IGJpbmFyeSBmb3VuZC4gRXhpdGluZy4iLCAwKTsKICAgICAgICAgKnRlc3RfaWQgPSBWQUxfSU5WQUxJRF9URVNUX0lEOwogICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19MT0FEX0VSUk9SOwogICAgIH0KQEAgLTI5MywxMSArMjkzLDE3IEBACiAgICAgc3dpdGNoIChWQUxfR0VUX0NPTVBfTlVNKHRlc3RfaWQpKQogICAgIHsKICAgICAgICAgY2FzZSBWQUxfRkZfQkFTRToKLSAgICAgICAgICAgIHJldHVybiAiXG5SdW5uaW5nLi4uIElQQyBTdWl0ZSI7CisgICAgICAgICAgICByZXR1cm4gIklQQyBTdWl0ZSI7CiAgICAgICAgIGNhc2UgVkFMX0NSWVBUT19CQVNFOgotICAgICAgICAgICAgcmV0dXJuICJcblJ1bm5pbmcuLi4gQ3J5cHRvIFN1aXRlIjsKKyAgICAgICAgICAgIHJldHVybiAiQ3J5cHRvIFN1aXRlIjsKKyAgICAgICAgY2FzZSBWQUxfUFJPVEVDVEVEX1NUT1JBR0VfQkFTRToKKyAgICAgICAgICAgIHJldHVybiAiUHJvdGVjdGVkIFN0b3JhZ2UgU3VpdGUiOworICAgICAgICBjYXNlIFZBTF9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfQkFTRToKKyAgICAgICAgICAgIHJldHVybiAiSW50ZXJuYWwgVHJ1c3RlZCBTdG9yYWdlIFN1aXRlIjsKKyAgICAgICAgY2FzZSBWQUxfSU5JVElBTF9BVFRFU1RBVElPTl9CQVNFOgorICAgICAgICAgICAgcmV0dXJuICJBdHRlc3RhdGlvbiBTdWl0ZSI7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gIk5vIENvbXBvbmVudCI7CisgICAgICAgICAgICByZXR1cm4gIlVua25vd24gU3VpdGUiOwogICAgIH0KIH0KIApAQCAtMzM0LDcgKzM0MCw3IEBACiAgICAgICAgIHN0YXR1cyA9IHZhbF9nZXRfYm9vdF9mbGFnKCZib290LnN0YXRlKTsKICAgICAgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQogICAgICAgICB7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIC8qIERpZCBsYXN0IHJ1biB0ZXN0IGhhbmcgYW5kIHN5c3RlbSByZS1ib290ZWQgZHVlIHRvIHdhdGNoZG9nIHRpbWVvdXQgYW5kCkBAIC0zNDgsNiArMzU0LDcgQEAKICAgICAgICAgICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcblx0TlZNRU0gcmVhZCBlcnJvciIsIDApOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvKiBEaWQgbGFzdCBydW4gdGVzdCBoYW5nIGFuZCBzeXN0ZW0gcmVzZXQgZHVlIHRvIHdhdGNoZG9nIHRpbWVvdXQgYnV0CkBAIC0zNjMsMTMgKzM3MCwxOCBAQAogICAgICAgICAgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlxuXHROVk1FTSByZWFkIGVycm9yIiwgMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAgc3RhdHVzID0gdmFsX3Rlc3RfbG9hZCgmdGVzdF9pZCwgdGVzdF9pZF9wcmV2KTsKIAotICAgICAgICAgICAgaWYgKHRlc3RfaWQgPT0gVkFMX0lOVkFMSURfVEVTVF9JRCB8fCBWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICAgICAgICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0ZXN0X2lkID09IFZBTF9JTlZBTElEX1RFU1RfSUQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zNzksMTEgKzM5MSwxMiBAQAogICAgICAgICAgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlxuXHROVk1FTSB3cml0ZSBlcnJvciIsIDApOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKFZBTF9HRVRfQ09NUF9OVU0odGVzdF9pZF9wcmV2KSAhPSBWQUxfR0VUX0NPTVBfTlVNKHRlc3RfaWQpKQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9BTFdBWVMsICJcblJ1bm5pbmcuLiAiLCAwKTsKICAgICAgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfQUxXQVlTLCB2YWxfZ2V0X2NvbXBfbmFtZSh0ZXN0X2lkKSwgMCk7CiAgICAgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0FMV0FZUywgIlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iLCAwKTsKICAgICAgICAgICAgIH0KQEAgLTM5NCw3ICs0MDcsNyBAQAogICAgICAgICAgICAgICAgIHN0YXR1cyA9IHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfTk9UX0VYUEVDVEVEKTsKICAgICAgICAgICAgICAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhbF9leGVjdXRlX3Rlc3RfZm4oKTsKQEAgLTQwNiw3ICs0MTksNyBAQAogICAgICAgICBzdGF0dXMgPSB2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX1VOS05PV04pOwogICAgICAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLyogUHJlcGFyZSBzdWl0ZSBzdW1tYXJ5IGRhdGEgc3RydWN0dXJlICovCkBAIC00MTQsNyArNDI3LDcgQEAKICAgICAgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQogICAgICAgICB7CiAgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcblx0TlZNRU0gcmVhZCBlcnJvciIsIDApOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKHRlc3RfcmVzdWx0KQpAQCAtNDM3LDcgKzQ1MCw3IEBACiAgICAgICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKICAgICAgICAgewogICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXG5cdE5WTUVNIHdyaXRlIGVycm9yIiwgMCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIHRlc3RfaWRfcHJldiA9IHRlc3RfaWQ7CkBAIC00NDYsNyArNDU5LDcgQEAKICAgICAgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQogICAgICAgICB7CiAgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcblx0TlZNRU0gd3JpdGUgZXJyb3IiLCAwKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgIH0gd2hpbGUoMSk7CkBAIC00NTgsMTQgKzQ3MSwxNiBAQAogICAgICAgIHJldHVybjsKICAgIH0KIAotICAgdmFsX3ByaW50KFBSSU5UX0FMV0FZUywgIlxuXG4qKioqKioqKioqKiogUkVHUkVTU0lPTiBTVU1NQVJZICoqKioqKioqKipcbiIsIDApOworICAgdmFsX3ByaW50KFBSSU5UX0FMV0FZUywgIlxuKioqKioqKioqKioqICIsIDApOworICAgdmFsX3ByaW50KFBSSU5UX0FMV0FZUywgdmFsX2dldF9jb21wX25hbWUodGVzdF9pZF9wcmV2KSwgMCk7CisgICB2YWxfcHJpbnQoUFJJTlRfQUxXQVlTLCAiIFJlcG9ydCAqKioqKioqKioqXG4iLCAwKTsKICAgIHZhbF9wcmludChQUklOVF9BTFdBWVMsICJUT1RBTCBURVNUUyAgICAgOiAlZFxuIiwgdGVzdF9jb3VudC5wYXNzX2NudCArIHRlc3RfY291bnQuZmFpbF9jbnQKICAgICAgICAgICAgICsgdGVzdF9jb3VudC5za2lwX2NudCArIHRlc3RfY291bnQuc2ltX2Vycm9yX2NudCk7CiAgICB2YWxfcHJpbnQoUFJJTlRfQUxXQVlTLCAiVE9UQUwgUEFTU0VEICAgIDogJWRcbiIsIHRlc3RfY291bnQucGFzc19jbnQpOwogICAgdmFsX3ByaW50KFBSSU5UX0FMV0FZUywgIlRPVEFMIFNJTSBFUlJPUiA6ICVkXG4iLCB0ZXN0X2NvdW50LnNpbV9lcnJvcl9jbnQpOwogICAgdmFsX3ByaW50KFBSSU5UX0FMV0FZUywgIlRPVEFMIEZBSUxFRCAgICA6ICVkXG4iLCB0ZXN0X2NvdW50LmZhaWxfY250KTsKICAgIHZhbF9wcmludChQUklOVF9BTFdBWVMsICJUT1RBTCBTS0lQUEVEICAgOiAlZFxuIiwgdGVzdF9jb3VudC5za2lwX2NudCk7Ci0gICB2YWxfcHJpbnQoUFJJTlRfQUxXQVlTLCAiXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIsIDApOworICAgdmFsX3ByaW50KFBSSU5UX0FMV0FZUywgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIiwgMCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9lbnRyeS5jIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9lbnRyeS5jCmluZGV4IDYxNmFmMDcuLmNmZjVkZWQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfZW50cnkuYworKysgYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2VudHJ5LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTQyLDcgKzQyLDggQEAKICAgICAvKiBDb21wbGlhbmNlIGhlYWRlciBwcmludCAqLwogICAgIGlmICh0ZXN0X2lkID09IFZBTF9JTlZBTElEX1RFU1RfSUQpCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfQUxXQVlTLCAiXG4qKioqKiBQU0EgQ29tcGxpYW5jZSBTdWl0ZSAtIFZlcnNpb24gJWQuIiwgUFNBX0FDU19NQUpPUl9WRVIpOworICAgICAgICB2YWxfcHJpbnQoUFJJTlRfQUxXQVlTLCAiXG4qKioqKiBQU0EgQXJjaGl0ZWN0dXJlIFRlc3QgU3VpdGUgLSBWZXJzaW9uICVkLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0FDU19NQUpPUl9WRVIpOwogICAgICAgICB2YWxfcHJpbnQoUFJJTlRfQUxXQVlTLCAiJWQgKioqKipcbiIsIFBTQV9BQ1NfTUlOT1JfVkVSKTsKICAgICB9CiAKQEAgLTUwLDkgKzUxLDcgQEAKICAgICB2YWxfZGlzcGF0Y2hlcih0ZXN0X2lkKTsKIAogZXhpdDoKLSAgICB2YWxfcHJpbnQoUFJJTlRfQUxXQVlTLCAiXG5cbkVudGVyaW5nIHN0YW5kYnlcbiIsIDApOwotICAgIHdoaWxlKDEpCi0gICAgewotICAgICAgICBhc20gdm9sYXRpbGUoIldGSSIpOwotICAgIH0KKyAgICB2YWxfcHJpbnQoUFJJTlRfQUxXQVlTLCAiXG5FbnRlcmluZyBzdGFuZGJ5Li4gXG4iLCAwKTsKKworICAgIHBhbF90ZXJtaW5hdGVfc2ltdWxhdGlvbigpOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9lbnRyeS5oIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9lbnRyeS5oCmluZGV4IDAyOTMxMTMuLjQ5MDM0NTcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfZW50cnkuaAorKysgYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2VudHJ5LmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIxLDEwICsyMSwxMCBAQAogI2luY2x1ZGUgInZhbF9mcmFtZXdvcmsuaCIKIAogI2RlZmluZSBQU0FfQUNTX01BSk9SX1ZFUiAgICAwCi0jZGVmaW5lIFBTQV9BQ1NfTUlOT1JfVkVSICAgIDUKKyNkZWZpbmUgUFNBX0FDU19NSU5PUl9WRVIgICAgNwogCiAvKioKLSAgICBAYnJpZWYgICAgLSBQU0EgQyBtYWluIGZ1bmN0aW9uLCBkb2VzIFZBTCBpbml0IGFuZCBjYWxscyB0ZXN0IGRpc3BhdGNoZXIKKyAgICBAYnJpZWYgICAgLSBQU0EgVGVzdCBTdWl0ZSBDIG1haW4gZnVuY3Rpb24sIGRvZXMgVkFMIGluaXQgYW5kIGNhbGxzIHRlc3QgZGlzcGF0Y2hlcgogICAgIEBwYXJhbSAgICAtIE5vbmUKICAgICBAcmV0dXJuICAgLSB2b2lkCiAqKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfZnJhbWV3b3JrLmMgYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2ZyYW1ld29yay5jCmluZGV4IDAyNDhhZGMuLmJiZDQ1OWUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfZnJhbWV3b3JrLmMKKysrIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9mcmFtZXdvcmsuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTEzLDcgKzExMyw3IEBACiAKICAgICBpZiAoYm9vdC5zdGF0ZSA9PSBCT09UX05PVF9FWFBFQ1RFRCB8fCBib290LnN0YXRlID09IEJPT1RfRVhQRUNURURfQ1JZUFRPKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX1RFU1QsIltJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZm9ybSBub24tc2VjdXJlXG4iLCAwKTsKKyAgICAgICAgdmFsX3ByaW50KFBSSU5UX1RFU1QsIltJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlXG4iLCAwKTsKICAgICAgICAgd2hpbGUgKHRlc3RzX2xpc3RbaV0gIT0gTlVMTCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHNlcnZlcl9ocyA9PSBUUlVFKQpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICAgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdmFsX3NldF9zdGF0dXMoUkVTVUxUX0ZBSUwoc3RhdHVzKSk7Ci0gICAgICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwiW0NoZWNrJWRdIFNUQVJUXG4iLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0RFQlVHLCJbQ2hlY2slZF0gU1RBUlRcbiIsIGkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCkBAIC0xNDQsMTggKzE0NCwyNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGF0dXMgPSB0ZXN0X3N0YXR1cyA/IHRlc3Rfc3RhdHVzOnN0YXR1czsKLSAgICAgICAgICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICAgICAgICAgIGlmIChJU19URVNUX1NLSVAoc3RhdHVzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YWxfc2V0X3N0YXR1cyhzdGF0dXMpOworICAgICAgICAgICAgICAgIGlmIChzZXJ2ZXJfaHMgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0RFQlVHLCAiW0NoZWNrJWRdIFNLSVBQRURcbiIsIGkpOworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB2YWxfc2V0X3N0YXR1cyhSRVNVTFRfRkFJTChzdGF0dXMpKTsKICAgICAgICAgICAgICAgICBpZiAoc2VydmVyX2hzID09IFRSVUUpCi0gICAgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCJbQ2hlY2slZF0gRkFJTEVEXG4iLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0RFQlVHLCAiW0NoZWNrJWRdIEZBSUxFRFxuIiwgaSk7CisKICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChzZXJ2ZXJfaHMgPT0gVFJVRSkKLSAgICAgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfREVCVUcsIltDaGVjayVkXSBQQVNTRURcbiIsIGkpOworICAgICAgICAgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfREVCVUcsICJbQ2hlY2slZF0gUEFTU0VEXG4iLCBpKTsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaSsrOwogICAgICAgICB9CiAgICB9CkBAIC0xNjUsNyArMTc0LDcgQEAKICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CiAgICAgICAgaWYgKGJvb3Quc3RhdGUgIT0gQk9PVF9FWFBFQ1RFRF9TKQogICAgICAgIHsKLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9ERUJVRywiW0NoZWNrMV0gUEFTU0VEXG4iLCAwKTsKKyAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9ERUJVRywgIltDaGVjazFdIFBBU1NFRFxuIiwgMCk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHN0YXR1czsKQEAgLTIxMCw2ICsyMTksMTEgQEAKIAogICAgICAgIC8qIFJldHJpdmUgc2VjdXJlIGNsaWVudCB0ZXN0IHN0YXR1cyAqLwogICAgICAgIHN0YXR1cyA9IHZhbF9nZXRfc2VjdXJlX3Rlc3RfcmVzdWx0KCZoYW5kbGUpOworICAgICAgIGlmIChJU19URVNUX1NLSVAoc3RhdHVzKSkKKyAgICAgICB7CisgICAgICAgICAgICB2YWxfc2V0X3N0YXR1cyhzdGF0dXMpOworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICB9CiAgICAgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQogICAgICAgIHsKICAgICAgICAgICAgZ290byBleGl0OwpAQCAtMjE5LDcgKzIzMyw3IEBACiAgICBlbHNlCiAgICB7CiAgICAgICAgLyogSWYgd2UgYXJlIGhlcmUgbWVhbnMsIHdlIGFyZSBpbiB0aGlyZCBydW4gb2YgdGhpcyB0ZXN0ICovCi0gICAgICAgdmFsX3ByaW50KFBSSU5UX0RFQlVHLCJbQ2hlY2sxXSBQQVNTRURcbiIsIDApOworICAgICAgIHZhbF9wcmludChQUklOVF9ERUJVRywgIltDaGVjazFdIFBBU1NFRFxuIiwgMCk7CiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgIH0KIApAQCAtMjQ1LDcgKzI1OSw2IEBACiAgICAgcHNhX3N0YXR1c190ICAgIHN0YXR1c19vZl9jYWxsID0gUFNBX1NVQ0NFU1M7CiAKICAgICAqaGFuZGxlID0gcGFsX2lwY19jb25uZWN0KHNpZCwgMCk7Ci0KICAgICBpZiAoKmhhbmRsZSA8IDApCiAgICAgewogICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJDb3VsZCBub3QgY29ubmVjdCBTSUQuIEhhbmRsZT0leFxuIiwgKmhhbmRsZSk7CkBAIC0yNTcsMTMgKzI3MCwxMyBAQAogICAgIHBzYV9pbnZlYyBkYXRhWzFdID0ge3smdGVzdF9kYXRhLCBzaXplb2YodGVzdF9kYXRhKX19OwogCiAgICAgc3RhdHVzX29mX2NhbGwgPSBwYWxfaXBjX2NhbGwoKmhhbmRsZSwgZGF0YSwgMSwgTlVMTCwgMCk7Ci0KICAgICBpZiAoc3RhdHVzX29mX2NhbGwgIT0gUFNBX1NVQ0NFU1MpCiAgICAgewogICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX0NBTExfRkFJTEVEOwogICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJDYWxsIHRvIGRpc3BhdGNoIFNGIGZhaWxlZC4gU3RhdHVzPSV4XG4iLCBzdGF0dXNfb2ZfY2FsbCk7CiAgICAgICAgIHBhbF9pcGNfY2xvc2UoKmhhbmRsZSk7CiAgICAgfQorCiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMzI4LDYgKzM0MSw3IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFRFU1RfU0tJUDoKKyAgICAgICAgICAgIHN0YXRlID0gVEVTVF9TS0lQOwogICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0FMV0FZUywgIlRFU1QgUkVTVUxUOiBTS0lQUEVEIChTa2lwIENvZGU9MHgleClcbiIsIHN0YXR1cyk7CiAgICAgICAgICAgICBicmVhazsKIApAQCAtNDI5LDYgKzQ0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopc2l6ZW9mKG1pc2NlbGxhbmVvdXNfZGVzY190KSk7CiAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCiAgICB7CisgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAidmFsX3RhcmdldF9nZXRfY29uZmlnIGZhaWxlZCBFcnJvcj0weCV4XG4iLCBzdGF0dXMpOwogICAgICAgIHJldHVybjsKICAgIH0KIApAQCAtNDY4LDE0ICs0ODMsMTkgQEAKIAogdm9pZCB2YWxfdGVzdF9leGl0KHZvaWQpCiB7Ci0gICAgdmFsX3dkX3RpbWVyX2Rpc2FibGUoKTsKKyAgICB2YWxfc3RhdHVzX3QgICAgc3RhdHVzOwogCisgICAgdmFsX3dkX3RpbWVyX2Rpc2FibGUoKTsKKyAgICBzdGF0dXMgPSB2YWxfZ2V0X3N0YXR1cygpOwogICAgIC8qIHJldHVybiBpZiB0ZXN0IHNraXBwZWQgb3IgZmFpbGVkICovCi0gICAgaWYgKElTX1RFU1RfU0tJUCh2YWxfZ2V0X3N0YXR1cygpKSB8fCBJU19URVNUX0ZBSUwodmFsX2dldF9zdGF0dXMoKSkpCisgICAgaWYgKElTX1RFU1RfRkFJTChzdGF0dXMpIHx8IElTX1RFU1RfU0tJUChzdGF0dXMpKQogICAgIHsKLSAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdmFsX3NldF9zdGF0dXMoUkVTVUxUX0VORChWQUxfU1RBVFVTX1NVQ0NFU1MpKTsKKyAgICBlbHNlCisgICAgeworICAgICAgICB2YWxfc2V0X3N0YXR1cyhSRVNVTFRfRU5EKFZBTF9TVEFUVVNfU1VDQ0VTUykpOworICAgIH0KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2ludGVyZmFjZXMuYyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfaW50ZXJmYWNlcy5jCmluZGV4IDM2YWQxNzMuLjcxOWY0YjAgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfaW50ZXJmYWNlcy5jCisrKyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfaW50ZXJmYWNlcy5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMSw2ICsyMSw5IEBACiAjaW5jbHVkZSAidmFsX3BlcmlwaGVyYWxzLmgiCiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKyNpbmNsdWRlICJ2YWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLmgiCisjaW5jbHVkZSAidmFsX3Byb3RlY3RlZF9zdG9yYWdlLmgiCisjaW5jbHVkZSAidmFsX2F0dGVzdGF0aW9uLmgiCiAKIC8qVkFMIEFQSXMgdG8gYmUgdXNlZCBieSB0ZXN0ICovCiBjb25zdCB2YWxfYXBpX3QgdmFsX2FwaSA9IHsKQEAgLTQzLDEwICs0NiwxMyBAQAogICAgIC53ZF90aW1lcl9pbml0ICAgICAgICAgICAgID0gdmFsX3dkX3RpbWVyX2luaXQsCiAgICAgLndkX3RpbWVyX2VuYWJsZSAgICAgICAgICAgPSB2YWxfd2RfdGltZXJfZW5hYmxlLAogICAgIC53ZF90aW1lcl9kaXNhYmxlICAgICAgICAgID0gdmFsX3dkX3RpbWVyX2Rpc2FibGUsCisgICAgLndkX3JlcHJvZ3JhbV90aW1lciAgICAgICAgPSB2YWxfd2RfcmVwcm9ncmFtX3RpbWVyLAogICAgIC5zZXRfYm9vdF9mbGFnICAgICAgICAgICAgID0gdmFsX3NldF9ib290X2ZsYWcsCiAgICAgLmdldF9ib290X2ZsYWcgICAgICAgICAgICAgPSB2YWxfZ2V0X2Jvb3RfZmxhZywKICAgICAuY3J5cHRvX2Z1bmN0aW9uICAgICAgICAgICA9IHZhbF9jcnlwdG9fZnVuY3Rpb24sCi0gICAgLmNyeXB0b19rZXlfdHlwZV9pc19yYXcgICAgPSB2YWxfY3J5cHRvX2tleV90eXBlX2lzX3JhdywKKyAgICAuaXRzX2Z1bmN0aW9uICAgICAgICAgICAgICA9IHZhbF9pdHNfZnVuY3Rpb24sCisgICAgLnBzX2Z1bmN0aW9uICAgICAgICAgICAgICAgPSB2YWxfcHNfZnVuY3Rpb24sCisgICAgLmF0dGVzdGF0aW9uX2Z1bmN0aW9uICAgICAgPSB2YWxfYXR0ZXN0YXRpb25fZnVuY3Rpb24sCiB9OwogCiBjb25zdCBwc2FfYXBpX3QgcHNhX2FwaSA9IHsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfaW50ZXJmYWNlcy5oIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9pbnRlcmZhY2VzLmgKaW5kZXggY2U5YjNhMS4uYjQxYWFiMSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9pbnRlcmZhY2VzLmgKKysrIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9pbnRlcmZhY2VzLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTUwLDEwICs1MCwxMyBAQAogICAgIHZhbF9zdGF0dXNfdCAgICAgKCp3ZF90aW1lcl9pbml0KSAgICAgICAgICAgICAod2RfdGltZW91dF90eXBlX3QgdGltZW91dF90eXBlKTsKICAgICB2YWxfc3RhdHVzX3QgICAgICgqd2RfdGltZXJfZW5hYmxlKSAgICAgICAgICAgKHZvaWQpOwogICAgIHZhbF9zdGF0dXNfdCAgICAgKCp3ZF90aW1lcl9kaXNhYmxlKSAgICAgICAgICAodm9pZCk7CisgICAgdmFsX3N0YXR1c190ICAgICAoKndkX3JlcHJvZ3JhbV90aW1lcikgICAgICAgICh3ZF90aW1lb3V0X3R5cGVfdCB0aW1lb3V0X3R5cGUpOwogICAgIHZhbF9zdGF0dXNfdCAgICAgKCpzZXRfYm9vdF9mbGFnKSAgICAgICAgICAgICAoYm9vdF9zdGF0ZV90IHN0YXRlKTsKICAgICB2YWxfc3RhdHVzX3QgICAgICgqZ2V0X2Jvb3RfZmxhZykgICAgICAgICAgICAgKGJvb3Rfc3RhdGVfdCAqc3RhdGUpOwotICAgIHZhbF9zdGF0dXNfdCAgICAgKCpjcnlwdG9fZnVuY3Rpb24pICAgICAgICAgICAoaW50IHR5cGUsIC4uLik7Ci0gICAgaW50MzJfdCAgICAgICAgICAoKmNyeXB0b19rZXlfdHlwZV9pc19yYXcpICAgICh1aW50MzJfdCB0eXBlKTsKKyAgICBpbnQzMl90ICAgICAgICAgICgqY3J5cHRvX2Z1bmN0aW9uKSAgICAgICAgICAgKGludCB0eXBlLCAuLi4pOworICAgIHVpbnQzMl90ICAgICAgICAgKCppdHNfZnVuY3Rpb24pICAgICAgICAgICAgICAoaW50IHR5cGUsIC4uLik7CisgICAgdWludDMyX3QgICAgICAgICAoKnBzX2Z1bmN0aW9uKSAgICAgICAgICAgICAgIChpbnQgdHlwZSwgLi4uKTsKKyAgICBpbnQzMl90ICAgICAgICAgICgqYXR0ZXN0YXRpb25fZnVuY3Rpb24pICAgICAgKGludCB0eXBlLCAuLi4pOwogfSB2YWxfYXBpX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTY2LDcgKzY5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffb3V0dmVjICpvdXRfdmVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRfbGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICB2b2lkICAgICAoKmNsb3NlKSAgICAgICAgICAgICAgICAgKHBzYV9oYW5kbGVfdCBoYW5kbGUpOworICAgIHZvaWQgICAgICAgICAgICAgKCpjbG9zZSkgICAgICAgICAgICAgICAgIChwc2FfaGFuZGxlX3QgaGFuZGxlKTsKIH0gcHNhX2FwaV90OwogCiB0eXBlZGVmIHZvaWQgKCp0ZXN0X2ZwdHJfdCkodmFsX2FwaV90ICp2YWwsIHBzYV9hcGlfdCAqcHNhKTsKQEAgLTc3LDcgKzgwLDYgQEAKIH0gdmFsX3Rlc3RfaW5mb190OwogCiAjaW5jbHVkZSAidGVzdF9lbnRyeV9mbl9kZWNsYXJlX2xpc3QuaW5jIgotdm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsLCBwc2FfYXBpX3QgKnBzYSk7Ci12b2lkIHRlc3RfcGF5bG9hZCh2YWxfYXBpX3QgKnZhbCwgcHNhX2FwaV90ICpwc2EpOwogCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWwsIHBzYV9hcGlfdCAqcHNhKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UuYyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc5ZTljMAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLmMKQEAgLTAsMCArMSwzOSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJwYWxfaW50ZXJmYWNlc19ucy5oIgorI2luY2x1ZGUgInZhbF9mcmFtZXdvcmsuaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLmgiCisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGludGVybmFsIHRydXN0ZWQgc3RvcmFnZSBmdW5jdGlvbgorICAgIEBwYXJhbSAgICAtIHR5cGUgOiBmdW5jdGlvbiBjb2RlCisgICAgICAgICAgICAgICAgLi4uICA6IHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMKKyAgICBAcmV0dXJuICAgLSBFcnJvciBzdGF0dXMKKyoqLwordWludDMyX3QgdmFsX2l0c19mdW5jdGlvbihpbnQgdHlwZSwgLi4uKQoreworICAgIHZhX2xpc3QgICAgICB2YWxpc3Q7CisgICAgdWludDMyX3Qgc3RhdHVzOworCisgICAgdmFfc3RhcnQodmFsaXN0LCB0eXBlKTsKKyAgICBzdGF0dXMgPSBwYWxfaXRzX2Z1bmN0aW9uKHR5cGUsIHZhbGlzdCk7CisgICAgdmFfZW5kKHZhbGlzdCk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLmggYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NGE3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZm5kZWYgX1ZBTF9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSF8KKyNkZWZpbmUgX1ZBTF9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSF8KKworI2luY2x1ZGUgInZhbC5oIgorCisjZGVmaW5lIFVJRF9CQVNFX1ZBTFVFICAwCisjZGVmaW5lIFVJRF9NQVhfVkFMVUUgIDE1CisjZGVmaW5lIEJZVEVTX1RPX0JJVFMoYnl0ZSkgICAgICAgICAgICAgKGJ5dGUgKiA4KQorCitlbnVtIGl0c19mdW5jdGlvbl9jb2RlIHsKKyAgICBWQUxfSVRTX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKyAgICBWQUxfSVRTX0dFVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKyAgICBWQUxfSVRTX0dFVF9JTkZPICAgICAgICAgICAgICAgICAgICA9IDB4MywKKyAgICBWQUxfSVRTX1JFTU9WRSAgICAgICAgICAgICAgICAgICAgICA9IDB4NCwKK307CisKK3VpbnQzMl90IHZhbF9pdHNfZnVuY3Rpb24oaW50IHR5cGUsIC4uLik7CisjZW5kaWYgLyogX1ZBTF9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfcGVyaXBoZXJhbHMuYyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfcGVyaXBoZXJhbHMuYwppbmRleCAxYWMzM2M2Li45ZjE1M2UwIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvdmFsL25zcGUvdmFsX3BlcmlwaGVyYWxzLmMKKysrIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9wZXJpcGhlcmFscy5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xMDAsNyArMTAwLDExIEBACiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICB9CiAKLSAgIGlmICh0aW1lb3V0X3R5cGUgPT0gV0RfTE9XX1RJTUVPVVQpCisgICBpZiAodGltZW91dF90eXBlID09IFdEX0NSWVBUT19USU1FT1VUKQorICAgeworICAgICAgIHRpbWVfdXMgPSAgc29jX3Blcl9kZXNjLT50aW1lb3V0X2luX21pY3JvX3NlY19jcnlwdG87CisgICB9CisgICBlbHNlIGlmICh0aW1lb3V0X3R5cGUgPT0gV0RfTE9XX1RJTUVPVVQpCiAgICB7CiAgICAgICAgdGltZV91cyA9ICBzb2NfcGVyX2Rlc2MtPnRpbWVvdXRfaW5fbWljcm9fc2VjX2xvdzsKICAgIH0KQEAgLTE2Miw2ICsxNjYsMzEgQEAKICAgIHJldHVybiBwYWxfd2RfdGltZXJfZGlzYWJsZV9ucyhzb2NfcGVyX2Rlc2MtPmJhc2UpOwogfQogCit2YWxfc3RhdHVzX3QgdmFsX3dkX3JlcHJvZ3JhbV90aW1lcih3ZF90aW1lb3V0X3R5cGVfdCB0aW1lb3V0X3R5cGUpCit7CisgICAgdmFsX3N0YXR1c190ICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIC8qIERpc2FibGUgd2F0Y2hkb2cgVGltZXIgKi8KKyAgICB2YWxfd2RfdGltZXJfZGlzYWJsZSgpOworCisgICAgLyogSW5pdGlhbGlzZSB3YXRjaGRvZyAqLworICAgIHN0YXR1cyA9IHZhbF93ZF90aW1lcl9pbml0KHRpbWVvdXRfdHlwZSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgd2F0Y2hkb2cgVGltZXIgKi8KKyAgICBzdGF0dXMgPSB2YWxfd2RfdGltZXJfZW5hYmxlKCk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisKIC8qCiAgICAgQGJyaWVmICAgICAtIFJlYWRzICdzaXplJyBieXRlcyBmcm9tIE5vbi12b2xhdGlsZSBtZW1vcnkgYXQgYSBnaXZlbi4gVGhpcyBpcyBjbGllbnQgaW50ZXJmYWNlCiAgICAgICAgICAgICAgICAgQVBJIG9mIHNlY3VyZSBwYXJ0aXRpb24gdmFsX252bWVtX3JlYWRfc2YgQVBJIGZvciBuc3BlIHdvcmxkLgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9wZXJpcGhlcmFscy5oIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9wZXJpcGhlcmFscy5oCmluZGV4IDg2MTQ3YzEuLmRmZWExNDMgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfcGVyaXBoZXJhbHMuaAorKysgYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX3BlcmlwaGVyYWxzLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTI4LDQgKzI4LDUgQEAKIHZhbF9zdGF0dXNfdCB2YWxfd2RfdGltZXJfaW5pdCh3ZF90aW1lb3V0X3R5cGVfdCB0aW1lb3V0X3R5cGUpOwogdmFsX3N0YXR1c190IHZhbF93ZF90aW1lcl9lbmFibGUodm9pZCk7CiB2YWxfc3RhdHVzX3QgdmFsX3dkX3RpbWVyX2Rpc2FibGUodm9pZCk7Cit2YWxfc3RhdHVzX3QgdmFsX3dkX3JlcHJvZ3JhbV90aW1lcih3ZF90aW1lb3V0X3R5cGVfdCB0aW1lb3V0X3R5cGUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdmFsL25zcGUvdmFsX3Byb3RlY3RlZF9zdG9yYWdlLmMgYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX3Byb3RlY3RlZF9zdG9yYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjMWY1MAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfcHJvdGVjdGVkX3N0b3JhZ2UuYwpAQCAtMCwwICsxLDM5IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInBhbF9pbnRlcmZhY2VzX25zLmgiCisjaW5jbHVkZSAidmFsX2ZyYW1ld29yay5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9wcm90ZWN0ZWRfc3RvcmFnZS5oIgorCisvKioKKyAgICBAYnJpZWYgICAgLSBUaGlzIEFQSSB3aWxsIGNhbGwgdGhlIHJlcXVlc3RlZCBwcm90ZWN0ZWQgc3RvcmFnZSBmdW5jdGlvbgorICAgIEBwYXJhbSAgICAtIHR5cGUgOiBmdW5jdGlvbiBjb2RlCisgICAgICAgICAgICAgICAgLi4uICA6IHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMKKyAgICBAcmV0dXJuICAgLSBFcnJvciBzdGF0dXMKKyoqLwordWludDMyX3QgdmFsX3BzX2Z1bmN0aW9uKGludCB0eXBlLCAuLi4pCit7CisgICAgdmFfbGlzdCAgICAgIHZhbGlzdDsKKyAgICB1aW50MzJfdCBzdGF0dXM7CisKKyAgICB2YV9zdGFydCh2YWxpc3QsIHR5cGUpOworICAgIHN0YXR1cyA9IHBhbF9wc19mdW5jdGlvbih0eXBlLCB2YWxpc3QpOworICAgIHZhX2VuZCh2YWxpc3QpOworICAgIHJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdmFsL25zcGUvdmFsX3Byb3RlY3RlZF9zdG9yYWdlLmggYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX3Byb3RlY3RlZF9zdG9yYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQyZGYyMQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfcHJvdGVjdGVkX3N0b3JhZ2UuaApAQCAtMCwwICsxLDM3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZuZGVmIF9WQUxfUFJPVEVDVEVEX1NUT1JBR0VfSF8KKyNkZWZpbmUgX1ZBTF9QUk9URUNURURfU1RPUkFHRV9IXworCisjaW5jbHVkZSAidmFsLmgiCisKKyNkZWZpbmUgVUlEX0JBU0VfVkFMVUUgIDAKKyNkZWZpbmUgVUlEX01BWF9WQUxVRSAgMTUKKyNkZWZpbmUgQllURVNfVE9fQklUUyhieXRlKSAgICAgICAgICAgICAoYnl0ZSAqIDgpCisKK2VudW0gcHNfZnVuY3Rpb25fY29kZSB7CisgICAgVkFMX1BTX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisgICAgVkFMX1BTX0dFVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisgICAgVkFMX1BTX0dFVF9JTkZPICAgICAgICAgICAgICAgICAgICAgPSAweDMsCisgICAgVkFMX1BTX1JFTU9WRSAgICAgICAgICAgICAgICAgICAgICAgPSAweDQsCisgICAgVkFMX1BTX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgPSAweDUsCisgICAgVkFMX1BTX1NFVF9FWFRFTkRFRCAgICAgICAgICAgICAgICAgPSAweDYsCit9OworCit1aW50MzJfdCB2YWxfcHNfZnVuY3Rpb24oaW50IHR5cGUsIC4uLik7CisjZW5kaWYgLyogX1ZBTF9QUk9URUNURURfU1RPUkFHRV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3ZhbC9zcGUvdmFsX2RyaXZlcl9zZXJ2aWNlX2FwaXMuYyBiL2FwaS10ZXN0cy92YWwvc3BlL3ZhbF9kcml2ZXJfc2VydmljZV9hcGlzLmMKaW5kZXggYjI5ZGUxNC4uNDZhMzE2MiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3ZhbC9zcGUvdmFsX2RyaXZlcl9zZXJ2aWNlX2FwaXMuYworKysgYi9hcGktdGVzdHMvdmFsL3NwZS92YWxfZHJpdmVyX3NlcnZpY2VfYXBpcy5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNyw4ICsxNywxMCBAQAogCiAKICNpbmNsdWRlICJ2YWxfZHJpdmVyX3NlcnZpY2VfYXBpcy5oIgorI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX3RhcmdldC5jIgogCiBwcmludF92ZXJib3NpdHlfdCAgZ19wcmludF9sZXZlbCA9IFBSSU5UX0lORk87CitzdGF0aWMgaW50IGlzX3VhcnRfaW5pdF9kb25lID0gMDsKIAogLyogVUFSVCBBUElzICovCiAvKgpAQCAtMzAsNiArMzIsNyBAQAogdmFsX3N0YXR1c190IHZhbF91YXJ0X2luaXRfc2YoYWRkcl90IHVhcnRfYmFzZV9hZGRyKQogewogICAgIHBhbF91YXJ0X2luaXQodWFydF9iYXNlX2FkZHIpOworICAgIGlzX3VhcnRfaW5pdF9kb25lID0gMTsKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwogfQogLyoKQEAgLTQxLDcgKzQ0LDExIEBACiAgKi8KIHZhbF9zdGF0dXNfdCB2YWxfcHJpbnRfc2YoY2hhciAqc3RyaW5nLCB1aW50MzJfdCBkYXRhKQogewotICAgIHBhbF9wcmludChzdHJpbmcsIGRhdGEpOworICAgIGlmIChpc191YXJ0X2luaXRfZG9uZSA9PSAxKQorICAgIHsKKyAgICAgICAgLyogRG8gbm90IHByaW50IHVudGlsIHVhcnRfaW5pdCBpcyBjb21wbGV0ZSAqLworICAgICAgICBwYWxfcHJpbnQoc3RyaW5nLCBkYXRhKTsKKyAgICB9CiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KIApAQCAtMTMzLDMgKzE0MCw2MiBAQAogICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKICAgICB9CiB9CisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZ2l2ZW4gYm9vdC5zdGF0ZSB2YWx1ZSB0byBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgYm9vdCBOVk1FTSBsb2NhdGlvbgorICAgIEBwYXJhbSAgICAtIHN0YXRlOiBib290X3N0YXRlX3QKKyAgICBAcmV0dXJuICAgLSB2YWxfc3RhdHVzX3QKKyoqLwordmFsX3N0YXR1c190IHZhbF9kcml2ZXJfcHJpdmF0ZV9zZXRfYm9vdF9mbGFnX2ZuKGJvb3Rfc3RhdGVfdCBzdGF0ZSkKK3sKKyAgIGJvb3RfdCAgICAgICAgICAgYm9vdDsKKyAgIHZhbF9zdGF0dXNfdCAgICAgc3RhdHVzOworICAgbWVtb3J5X2Rlc2NfdCAgICptZW1vcnlfZGVzYzsKKworICAgc3RhdHVzID0gdmFsX3RhcmdldF9nZXRfY29uZmlnKFRBUkdFVF9DT05GSUdfQ1JFQVRFX0lEKEdST1VQX01FTU9SWSwgTUVNT1JZX05WTUVNLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKikmbWVtb3J5X2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopc2l6ZW9mKG1lbW9yeV9kZXNjX3QpKTsKKworICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgfQorCisgICBib290LnN0YXRlID0gc3RhdGU7CisgICBzdGF0dXMgPSB2YWxfbnZtZW1fd3JpdGVfc2YobWVtb3J5X2Rlc2MtPnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTF9OVk1FTV9PRkZTRVQoTlZfQk9PVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGJvb3RfdCkpOworICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgeworICAgICAgIHZhbF9wcmludF9zZigidmFsX252bWVtX3dyaXRlX3NmIGZhaWxlZCBFcnJvcj0weCV4XG4iLCBzdGF0dXMpOworICAgICAgIHJldHVybiBzdGF0dXM7CisgICB9CisgICByZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAgICBAYnJpZWYgICAgLSBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpc2VzIHRoZSBkcml2ZXIgcmVzZXJ2ZWQgbW1pbyByZWdpb24KKyAgICBAcGFyYW0gICAgLSB2b2lkCisgICAgQHJldHVybiAgIC0gdmFsX3N0YXR1c190CisqKi8KK3ZhbF9zdGF0dXNfdCB2YWxfaW5pdF9kcml2ZXJfbWVtb3J5KHZvaWQpCit7CisgICB2YWxfc3RhdHVzX3QgICAgIHN0YXR1czsKKyAgIG1lbW9yeV9kZXNjX3QgICAqbWVtb3J5X2Rlc2M7CisKKyAgIHN0YXR1cyA9IHZhbF90YXJnZXRfZ2V0X2NvbmZpZyhUQVJHRVRfQ09ORklHX0NSRUFURV9JRChHUk9VUF9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNT1JZX0RSSVZFUl9QQVJUSVRJT05fTU1JTywgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKiopJm1lbW9yeV9kZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKXNpemVvZihtZW1vcnlfZGVzY190KSk7CisgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICB9CisKKyAgIC8qIEluaXQgZHJpdmVyIG1taW8gc3BhY2UgdG8gMCB0byBhdm9pZCB1bmluaXQgYWNjZXNzICovCisgICBtZW1zZXQoKHVpbnQzMl90ICopbWVtb3J5X2Rlc2MtPnN0YXJ0LCAwLCAobWVtb3J5X2Rlc2MtPmVuZCAtIG1lbW9yeV9kZXNjLT5zdGFydCArIDEpKTsKKworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy92YWwvc3BlL3ZhbF9kcml2ZXJfc2VydmljZV9hcGlzLmggYi9hcGktdGVzdHMvdmFsL3NwZS92YWxfZHJpdmVyX3NlcnZpY2VfYXBpcy5oCmluZGV4IGEwNDVkNTcuLjk2MTRlMzUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvc3BlL3ZhbF9kcml2ZXJfc2VydmljZV9hcGlzLmgKKysrIGIvYXBpLXRlc3RzL3ZhbC9zcGUvdmFsX2RyaXZlcl9zZXJ2aWNlX2FwaXMuaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTgsOCArMTgsOCBAQAogI2lmbmRlZiBfVkFMX0RSSVZFUl9QQVJUSVRJT05fQVBJU19IXwogI2RlZmluZSBfVkFMX0RSSVZFUl9QQVJUSVRJT05fQVBJU19IXwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWwuaCIKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbC5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgogI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNpbmNsdWRlICJwYWxfaW50ZXJmYWNlc19zLmgiCiAKQEAgLTMwLDYgKzMwLDggQEAKICAqLwogI2luY2x1ZGUgInBzYV9tYW5pZmVzdC9kcml2ZXJfcGFydGl0aW9uX3BzYS5oIgogCisjZGVmaW5lIFVTRV9SQVdfUFJJTlRfRk9SX0RSSVZFUl9QQVJUSVRJT04gMQorCiB2YWxfc3RhdHVzX3QgdmFsX3VhcnRfaW5pdF9zZihhZGRyX3QgdWFydF9iYXNlX2FkZHIpOwogdmFsX3N0YXR1c190IHZhbF9wcmludF9zZihjaGFyICpzdHJpbmcsIHVpbnQzMl90IGRhdGEpOwogdmFsX3N0YXR1c190IHZhbF93ZF90aW1lcl9pbml0X3NmKGFkZHJfdCBiYXNlX2FkZHIsIHVpbnQzMl90IHRpbWVfdXMsIHVpbnQzMl90IHRpbWVyX3RpY2tfdXMpOwpAQCAtMzgsNCArNDAsNiBAQAogdmFsX3N0YXR1c190IHZhbF9pc193ZF90aW1lcl9lbmFibGVkX3NmKGFkZHJfdCBiYXNlX2FkZHIpOwogdmFsX3N0YXR1c190IHZhbF9udm1lbV9yZWFkX3NmKGFkZHJfdCBiYXNlLCB1aW50MzJfdCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgaW50IHNpemUpOwogdmFsX3N0YXR1c190IHZhbF9udm1lbV93cml0ZV9zZihhZGRyX3QgYmFzZSwgdWludDMyX3Qgb2Zmc2V0LCB2b2lkICpidWZmZXIsIGludCBzaXplKTsKK3ZhbF9zdGF0dXNfdCB2YWxfZHJpdmVyX3ByaXZhdGVfc2V0X2Jvb3RfZmxhZ19mbihib290X3N0YXRlX3Qgc3RhdGUpOwordmFsX3N0YXR1c190IHZhbF9pbml0X2RyaXZlcl9tZW1vcnkodm9pZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy92YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmggYi9hcGktdGVzdHMvdmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oCmluZGV4IDc2NDgxMTYuLmRmMzY0MDIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgKKysrIGIvYXBpLXRlc3RzL3ZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaApAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBfVkFMX0NPTU1PTl9TUF9BUElTX0hfCiAjZGVmaW5lIF9WQUxfQ09NTU9OX1NQX0FQSVNfSF8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsLmgiCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfdGFyZ2V0LmMiCisjaW5jbHVkZSAidmFsLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5jIgogI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKIAogLyogInBzYV9tYW5pZmVzdC88bWFuaWZlc3RmaWxlbmFtZT4uaCIgTWFuaWZlc3QgZGVmaW5pdGlvbnMuIE9ubHkgYWNjZXNzaWJsZSB0byBTZWN1cmUgUGFydGl0aW9uLgpAQCAtMjA2LDcgKzIwNiw3IEBACiAKICAgICAgICAgaWYgKChtc2ctPnR5cGUgIT0gUFNBX0lQQ19DT05ORUNUKSB8fCAobXNnLT5oYW5kbGUgPD0gMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlxucHNhX2dldCBmYWlsZWQgZm9yIFBTQV9JUENfQ09OTkVDVCIsIDApOworICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfZ2V0IGZhaWxlZCBmb3IgUFNBX0lQQ19DT05ORUNUXG4iLCAwKTsKICAgICAgICAgICAgIHJlcyA9IFZBTF9TVEFUVVNfRVJST1I7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtMjE2LDcgKzIxNiw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlxucHNhX3dhaXQgcmV0dXJuZWQgd2l0aCBpbnZhbGlkIHNpZ25hbCB2YWx1ZSA9IDB4JXgiLCBzaWduYWxzKTsKKyAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2Ffd2FpdCByZXR1cm5lZCB3aXRoIGludmFsaWQgc2lnbmFsIHZhbHVlID0gMHgleFxuIiwgc2lnbmFscyk7CiAgICAgICAgIHJlcyA9IFZBTF9TVEFUVVNfRVJST1I7CiAgICAgfQogICAgIHJldHVybiByZXM7CkBAIC0yNDQsNyArMjQ0LDcgQEAKIAogICAgICAgICBpZiAoKG1zZy0+dHlwZSAhPSBQU0FfSVBDX0NBTEwpIHx8IChtc2ctPmhhbmRsZSA8PSAwKSkKICAgICAgICAgewotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXG5wc2FfZ2V0IGZhaWxlZCBmb3IgUFNBX0lQQ19DQUxMIiwgMCk7CisgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdHBzYV9nZXQgZmFpbGVkIGZvciBQU0FfSVBDX0NBTExcbiIsIDApOwogICAgICAgICAgICAgcmVzID0gVkFMX1NUQVRVU19FUlJPUjsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0yNTQsNyArMjU0LDcgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXG5wc2Ffd2FpdCByZXR1cm5lZCB3aXRoIGludmFsaWQgc2lnbmFsIHZhbHVlID0gMHgleCIsIHNpZ25hbHMpOworICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdHBzYV93YWl0IHJldHVybmVkIHdpdGggaW52YWxpZCBzaWduYWwgdmFsdWUgPSAweCV4XG4iLCBzaWduYWxzKTsKICAgICAgICAgcmVzID0gVkFMX1NUQVRVU19FUlJPUjsKICAgICB9CiAgICAgcmV0dXJuIHJlczsKQEAgLTI4Miw3ICsyODIsNyBAQAogCiAgICAgICAgIGlmICgobXNnLT50eXBlICE9IFBTQV9JUENfRElTQ09OTkVDVCkgfHwgKG1zZy0+aGFuZGxlIDw9IDApKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcbnBzYV9nZXQgZmFpbGVkIGZvciBQU0FfSVBDX0RJU0NPTk5FQ1QiLCAwKTsKKyAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX2dldCBmYWlsZWQgZm9yIFBTQV9JUENfRElTQ09OTkVDVFxuIiwgMCk7CiAgICAgICAgICAgICByZXMgPSBWQUxfU1RBVFVTX0VSUk9SOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTI5Miw3ICsyOTIsNyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcbnBzYV93YWl0IHJldHVybmVkIHdpdGggaW52YWxpZCBzaWduYWwgdmFsdWUgPSAweCV4Iiwgc2lnbmFscyk7CisgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX3dhaXQgcmV0dXJuZWQgd2l0aCBpbnZhbGlkIHNpZ25hbCB2YWx1ZSA9IDB4JXhcbiIsIHNpZ25hbHMpOwogICAgICAgICByZXMgPSBWQUxfU1RBVFVTX0VSUk9SOwogICAgIH0KICAgICByZXR1cm4gcmVzOwpAQCAtMzE0LDcgKzMxNCw3IEBACiAgICAgdGVzdF9pbmZvX3QgICAgICAgICAgIHRlc3RfaW5mbzsKIAogICAgIHRlc3RfaW5mby50ZXN0X251bSA9IHRlc3RfbnVtOwotICAgIHZhbF9wcmludChQUklOVF9URVNULCAiW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmb3JtIHNlY3VyZVxuIiwgMCk7CisgICAgdmFsX3ByaW50KFBSSU5UX1RFU1QsICJbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gc2VjdXJlXG4iLCAwKTsKIAogICAgIHdoaWxlICh0ZXN0c19saXN0W2ldICE9IE5VTEwpCiAgICAgewpAQCAtMzM5LDkgKzMzOSwxNCBAQAogICAgICAgICBzdGF0dXMgPSB2YWxfZ2V0X3NlY3VyZV90ZXN0X3Jlc3VsdCgmaGFuZGxlKTsKIAogICAgICAgICBzdGF0dXMgPSB0ZXN0X3N0YXR1cyA/IHRlc3Rfc3RhdHVzOnN0YXR1czsKKyAgICAgICAgaWYgKElTX1RFU1RfU0tJUChzdGF0dXMpKQorICAgICAgICB7CisgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfREVCVUcsICJbQ2hlY2slZF0gU0tJUFBFRFxuIiwgaSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CiAgICAgICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKICAgICAgICAgewotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCJbQ2hlY2slZF0gRkFJTEVEXG4iLCBpKTsKKyAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9ERUJVRywiW0NoZWNrJWRdIEZBSUxFRFxuIiwgaSk7CiAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgICAgICB9CiAgICAgICAgIGVsc2UK