Name: series-workflow86mgt Phase: Succeeded StartedAt: 2026-08-07 12:21:11 +0000 UTC FinishedAt: 2026-08-07 13:08:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[0] Phase: Succeeded StartedAt: 2026-08-07 12:21:11 +0000 UTC FinishedAt: 2026-08-07 12:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 12:21:11 +0000 UTC FinishedAt: 2026-08-07 12:24:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f9a2394a23482bfd330911e9c8295b71724feacd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f9a2394a23482bfd330911e9c8295b71724feacd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "edd69ea2-8f45-4824-b8d4-e81745204f84" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_s390_handle_vsie", "kvm_s390_vm_set_attr" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV92c2llJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3NldF9hdHRyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcGVyZm9ybXMgbWlub3IgcmVmYWN0b3JpbmcgKHJlcGxhY2luZyBoYXJkY29kZWQgc2hpZnQgdmFsdWVzIHdpdGggYSBtYWNybywgdXNpbmcgcGh5c190b19wZm4gaW5zdGVhZCBvZiBiaXR3aXNlIHNoaWZ0KSBhbmQgZW5hYmxlcyBhIEtWTSBDUFUgZmVhdHVyZSAoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTykgdW5jb25kaXRpb25hbGx5LiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBidWZmZXJzLCBtb2RpZnlpbmcgZGF0YSBsZW5ndGhzLCBvciBjb3B5aW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmdW5jdGlvbmFsbHkgY2hhbmdlcyBLVk0gQ1BVIGZlYXR1cmUgaW5pdGlhbGl6YXRpb24gYnkgdW5jb25kaXRpb25hbGx5IGFsbG93aW5nIEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8uIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBlbmFibGUgdGhlIDY0LWJpdCBCU0NBIG9yaWdpbiBmZWF0dXJlIGZvciBhIGd1ZXN0LCB3aGljaCBhbHRlcnMgaG93IHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIGlzIGNhbGN1bGF0ZWQgaW4gYHBpbl9ibG9ja3NgIGR1cmluZyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gKHZTSUUpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgdGhlIFNJRSBpbnN0cnVjdGlvbiBpbiBhIGd1ZXN0LCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgxYTA5NDc0MzE0ZDZkMmYyMzE4MTExYWRiODM5Y2E2NzhiYjFiYzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjIyOjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF90eXBlcy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmhcbmluZGV4IDNmNTA5NDJiZGZlNmMuLmFjODJkZDA5ZmNlNTIgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmhcbkBAIC05LDYgJiM0Mzs5LDggQEBcbiAjZGVmaW5lIEtWTV9TMzkwX0JTQ0FfQ1BVX1NMT1RTIDY0XG4gI2RlZmluZSBLVk1fUzM5MF9FU0NBX0NQVV9TTE9UUyAyNDhcbiBcbiYjNDM7I2RlZmluZSBTQ0JfQUxJR05NRU5UX1NISUZUIDlcbiYjNDM7XG4gI2RlZmluZSBTSUdQX0NUUkxfQ1x0XHQweDgwXG4gI2RlZmluZSBTSUdQX0NUUkxfU0NOX01BU0tcdDB4M2ZcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDE1MGI1ZGQyMTcwZTIuLmM2NzlkOGY4M2MwZWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTQ1NSw4ICYjNDM7NDU1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGt2bV9zMzkwX2NwdV9mZWF0X2luaXQodm9pZClcbiBcdCAgICAhdGVzdF9mYWNpbGl0eSgzKSB8fCAhbmVzdGVkKVxuIFx0XHRyZXR1cm47XG4gXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUVGMik7XG4tXHRpZiAoc2NscC5oYXNfNjRic2Nhbylcbi1cdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTyk7XG4mIzQzO1x0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTyk7XG4gXHRpZiAoc2NscC5oYXNfc2lpZilcbiBcdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lJRik7XG4gXHRpZiAoc2NscC5oYXNfZ3BlcmUpXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS92c2llLmMgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuaW5kZXggZWVhMjQ1NjJlN2RiMi4uZWI2MGEzNTlkMGFhMCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vdnNpZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuQEAgLTMzLDEwICYjNDM7MzMsNyBAQCBlbnVtIHZzaWVfcGFnZV9mbGFncyB7XG4gXG4gc3RydWN0IHZzaWVfcGFnZSB7XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfc2llX2Jsb2NrIHNjYl9zO1x0LyogMHgwMDAwICovXG4tXHQvKlxuLVx0ICogdGhlIGJhY2t1cCBpbmZvIGZvciBtYWNoaW5lIGNoZWNrLiBlbnN1cmUgaXQmIzM5O3MgYXRcbi1cdCAqIHRoZSBzYW1lIG9mZnNldCBhcyB0aGF0IGluIHN0cnVjdCBzaWVfcGFnZSFcbi1cdCAqL1xuJiM0MztcdC8qIGJhY2t1cCBpbmZvIGZvciBtYWNoaW5lIGNoZWNrICovXG4gXHRzdHJ1Y3QgbWNja192b2xhdGlsZV9pbmZvIG1jY2tfaW5mbzsgICAgLyogMHgwMjAwICovXG4gXHQvKlxuIFx0ICogVGhlIHBpbm5lZCBvcmlnaW5hbCBzY2IuIEJlIGF3YXJlIHRoYXQgb3RoZXIgVkNQVXMgY2FuIG1vZGlmeVxuQEAgLTcxLDYgJiM0Mzs2OCw4IEBAIHN0cnVjdCB2c2llX3BhZ2Uge1xuIH07XG4gXG4gc3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IHZzaWVfcGFnZSkgPT0gUEFHRV9TSVpFKTtcbiYjNDM7c3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdnNpZV9wYWdlLCBtY2NrX2luZm8pID09IG9mZnNldG9mKHN0cnVjdCBzaWVfcGFnZSwgbWNja19pbmZvKSk7XG4mIzQzO3N0YXRpY19hc3NlcnQoSVNfQUxJR05FRChvZmZzZXRvZihzdHJ1Y3QgdnNpZV9wYWdlLCBjcnljYiksIDgpKTtcbiBcbiAvKiB0cmlnZ2VyIGEgdmFsaWRpdHkgaWNwdCBmb3IgdGhlIGdpdmVuIHNjYiAqL1xuIHN0YXRpYyBpbnQgc2V0X3ZhbGlkaXR5X2ljcHQoc3RydWN0IGt2bV9zMzkwX3NpZV9ibG9jayAqc2NiLFxuQEAgLTcwMSw3ICYjNDM7NzAwLDcgQEAgc3RhdGljIGludCBwaW5fZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgaHBhX3QgKmhwYSlcbiAvKiBVbnBpbnMgYSBwYWdlIHByZXZpb3VzbHkgcGlubmVkIHZpYSBwaW5fZ3Vlc3RfcGFnZSwgbWFya2luZyBpdCBhcyBkaXJ0eS4gKi9cbiBzdGF0aWMgdm9pZCB1bnBpbl9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBocGFfdCBocGEpXG4ge1xuLVx0a3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShwZm5fdG9fcGFnZShocGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpKTtcbiYjNDM7XHRrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBmbl90b19wYWdlKHBoeXNfdG9fcGZuKGhwYSkpKTtcbiBcdC8qIG1hcmsgdGhlIHBhZ2UgYWx3YXlzIGFzIGRpcnR5IGZvciBtaWdyYXRpb24gKi9cbiBcdG1hcmtfcGFnZV9kaXJ0eShrdm0sIGdwYV90b19nZm4oZ3BhKSk7XG4gfVxuQEAgLTE0ODYsNyAmIzQzOzE0ODUsNyBAQCBzdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdGludCBucl92Y3B1cztcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdHZzaWVfcGFnZSA9IHJhZGl4X3RyZWVfbG9va3VwKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLCBhZGRyIFx1MDAzZVx1MDAzZSA5KTtcbiYjNDM7XHR2c2llX3BhZ2UgPSByYWRpeF90cmVlX2xvb2t1cChcdTAwMjZrdm0tXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciBcdTAwM2VcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmICh2c2llX3BhZ2UpIHtcbiBcdFx0aWYgKHRyeV9nZXRfdnNpZV9wYWdlKHZzaWVfcGFnZSkpIHtcbkBAIC0xNTI3LDEzICYjNDM7MTUyNiwxNCBAQCBzdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdFx0fVxuIFx0XHRpZiAodnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgIT0gVUxPTkdfTUFYKVxuIFx0XHRcdHJhZGl4X3RyZWVfZGVsZXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLFxuLVx0XHRcdFx0XHQgIHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhIFx1MDAzZVx1MDAzZSA5KTtcbiYjNDM7XHRcdFx0XHRcdCAgdnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQpO1xuIFx0fVxuIFx0LyogTWFyayBpdCBhcyBpbnZhbGlkIHVudGlsIGl0IHJlc2lkZXMgaW4gdGhlIHRyZWUuICovXG4gXHR2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSA9IFVMT05HX01BWDtcbiBcbiBcdC8qIERvdWJsZSB1c2Ugb2YgdGhlIHNhbWUgYWRkcmVzcyBvciBhbGxvY2F0aW9uIGZhaWx1cmUuICovXG4tXHRpZiAocmFkaXhfdHJlZV9pbnNlcnQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXHUwMDNlXHUwMDNlIDksIHZzaWVfcGFnZSkpIHtcbiYjNDM7XHRpZiAocmFkaXhfdHJlZV9pbnNlcnQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQsXG4mIzQzO1x0XHRcdCAgICAgIHZzaWVfcGFnZSkpIHtcbiBcdFx0cHV0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5tdXRleCk7XG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTE1NjUsNyAmIzQzOzE1NjUsNiBAQCBpbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ3Bzdy5tYXNrIFx1MDAyNiBQU1dfTUFTS19QU1RBVEUpXG4gXHRcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX1BSSVZJTEVHRURfT1ApO1xuIFxuLVx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgdnNpZV9wYWdlKSAhPSBQQUdFX1NJWkUpO1xuIFx0c2NiX2FkZHIgPSBrdm1fczM5MF9nZXRfYmFzZV9kaXNwX3ModmNwdSwgTlVMTCk7XG4gXG4gXHQvKiA1MTIgYnl0ZSBhbGlnbm1lbnQgKi9cbkBAIC0xNjMyLDcgJiM0MzsxNjMxLDcgQEAgdm9pZCBrdm1fczM5MF92c2llX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHQvKiBmcmVlIHRoZSByYWRpeCB0cmVlIGVudHJ5ICovXG4gXHRcdGlmICh2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSAhPSBVTE9OR19NQVgpXG4gXHRcdFx0cmFkaXhfdHJlZV9kZWxldGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsXG4tXHRcdFx0XHRcdCAgdnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgXHUwMDNlXHUwMDNlIDkpO1xuJiM0MztcdFx0XHRcdFx0ICB2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSBcdTAwM2VcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCk7XG4gXHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl2c2llX3BhZ2UpO1xuIFx0fVxuIFx0a3ZtLVx1MDAzZWFyY2gudnNpZS5wYWdlX2NvdW50ID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX3ZzaWUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdm1fc2V0X2F0dHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZnVuY3Rpb25hbGx5IGNoYW5nZXMgS1ZNIENQVSBmZWF0dXJlIGluaXRpYWxpemF0aW9uIGJ5IHVuY29uZGl0aW9uYWxseSBhbGxvd2luZyBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPLiBUaGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8gZW5hYmxlIHRoZSA2NC1iaXQgQlNDQSBvcmlnaW4gZmVhdHVyZSBmb3IgYSBndWVzdCwgd2hpY2ggYWx0ZXJzIGhvdyB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBpcyBjYWxjdWxhdGVkIGluIGBwaW5fYmxvY2tzYCBkdXJpbmcgbmVzdGVkIHZpcnR1YWxpemF0aW9uICh2U0lFKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHRoZSBTSUUgaW5zdHJ1Y3Rpb24gaW4gYSBndWVzdCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MWEwOTQ3NDMxNGQ2ZDJmMjMxODExMWFkYjgzOWNhNjc4YmIxYmMyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxMjoyMjozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF90eXBlcy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmgKaW5kZXggM2Y1MDk0MmJkZmU2Yy4uYWM4MmRkMDlmY2U1MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmgKQEAgLTksNiAmIzQzOzksOCBAQAogI2RlZmluZSBLVk1fUzM5MF9CU0NBX0NQVV9TTE9UUyA2NAogI2RlZmluZSBLVk1fUzM5MF9FU0NBX0NQVV9TTE9UUyAyNDgKIAomIzQzOyNkZWZpbmUgU0NCX0FMSUdOTUVOVF9TSElGVCA5CiYjNDM7CiAjZGVmaW5lIFNJR1BfQ1RSTF9DCQkweDgwCiAjZGVmaW5lIFNJR1BfQ1RSTF9TQ05fTUFTSwkweDNmCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCAxNTBiNWRkMjE3MGUyLi5jNjc5ZDhmODNjMGVjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC00NTUsOCAmIzQzOzQ1NSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1fczM5MF9jcHVfZmVhdF9pbml0KHZvaWQpCiAJICAgICF0ZXN0X2ZhY2lsaXR5KDMpIHx8ICFuZXN0ZWQpCiAJCXJldHVybjsKIAlhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUVGMik7Ci0JaWYgKHNjbHAuaGFzXzY0YnNjYW8pCi0JCWFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pOwomIzQzOwlhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKTsKIAlpZiAoc2NscC5oYXNfc2lpZikKIAkJYWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lJRik7CiAJaWYgKHNjbHAuaGFzX2dwZXJlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS92c2llLmMgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuYwppbmRleCBlZWEyNDU2MmU3ZGIyLi5lYjYwYTM1OWQwYWEwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ZzaWUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuYwpAQCAtMzMsMTAgJiM0MzszMyw3IEBAIGVudW0gdnNpZV9wYWdlX2ZsYWdzIHsKIAogc3RydWN0IHZzaWVfcGFnZSB7CiAJc3RydWN0IGt2bV9zMzkwX3NpZV9ibG9jayBzY2JfczsJLyogMHgwMDAwICovCi0JLyoKLQkgKiB0aGUgYmFja3VwIGluZm8gZm9yIG1hY2hpbmUgY2hlY2suIGVuc3VyZSBpdCYjMzk7cyBhdAotCSAqIHRoZSBzYW1lIG9mZnNldCBhcyB0aGF0IGluIHN0cnVjdCBzaWVfcGFnZSEKLQkgKi8KJiM0MzsJLyogYmFja3VwIGluZm8gZm9yIG1hY2hpbmUgY2hlY2sgKi8KIAlzdHJ1Y3QgbWNja192b2xhdGlsZV9pbmZvIG1jY2tfaW5mbzsgICAgLyogMHgwMjAwICovCiAJLyoKIAkgKiBUaGUgcGlubmVkIG9yaWdpbmFsIHNjYi4gQmUgYXdhcmUgdGhhdCBvdGhlciBWQ1BVcyBjYW4gbW9kaWZ5CkBAIC03MSw2ICYjNDM7NjgsOCBAQCBzdHJ1Y3QgdnNpZV9wYWdlIHsKIH07CiAKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpID09IFBBR0VfU0laRSk7CiYjNDM7c3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdnNpZV9wYWdlLCBtY2NrX2luZm8pID09IG9mZnNldG9mKHN0cnVjdCBzaWVfcGFnZSwgbWNja19pbmZvKSk7CiYjNDM7c3RhdGljX2Fzc2VydChJU19BTElHTkVEKG9mZnNldG9mKHN0cnVjdCB2c2llX3BhZ2UsIGNyeWNiKSwgOCkpOwogCiAvKiB0cmlnZ2VyIGEgdmFsaWRpdHkgaWNwdCBmb3IgdGhlIGdpdmVuIHNjYiAqLwogc3RhdGljIGludCBzZXRfdmFsaWRpdHlfaWNwdChzdHJ1Y3Qga3ZtX3MzOTBfc2llX2Jsb2NrICpzY2IsCkBAIC03MDEsNyAmIzQzOzcwMCw3IEBAIHN0YXRpYyBpbnQgcGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90ICpocGEpCiAvKiBVbnBpbnMgYSBwYWdlIHByZXZpb3VzbHkgcGlubmVkIHZpYSBwaW5fZ3Vlc3RfcGFnZSwgbWFya2luZyBpdCBhcyBkaXJ0eS4gKi8KIHN0YXRpYyB2b2lkIHVucGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90IGhwYSkKIHsKLQlrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBmbl90b19wYWdlKGhwYSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKSk7CiYjNDM7CWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkocGZuX3RvX3BhZ2UocGh5c190b19wZm4oaHBhKSkpOwogCS8qIG1hcmsgdGhlIHBhZ2UgYWx3YXlzIGFzIGRpcnR5IGZvciBtaWdyYXRpb24gKi8KIAltYXJrX3BhZ2VfZGlydHkoa3ZtLCBncGFfdG9fZ2ZuKGdwYSkpOwogfQpAQCAtMTQ4Niw3ICYjNDM7MTQ4NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKQogCWludCBucl92Y3B1czsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQl2c2llX3BhZ2UgPSByYWRpeF90cmVlX2xvb2t1cCgmYW1wO2t2bS0mZ3Q7YXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciAmZ3Q7Jmd0OyA5KTsKJiM0MzsJdnNpZV9wYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoJmFtcDtrdm0tJmd0O2FyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgJmd0OyZndDsgU0NCX0FMSUdOTUVOVF9TSElGVCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKHZzaWVfcGFnZSkgewogCQlpZiAodHJ5X2dldF92c2llX3BhZ2UodnNpZV9wYWdlKSkgewpAQCAtMTUyNywxMyAmIzQzOzE1MjYsMTQgQEAgc3RhdGljIHN0cnVjdCB2c2llX3BhZ2UgKmdldF92c2llX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIpCiAJCX0KIAkJaWYgKHZzaWVfcGFnZS0mZ3Q7c2NiX2dwYSAhPSBVTE9OR19NQVgpCiAJCQlyYWRpeF90cmVlX2RlbGV0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC52c2llLmFkZHJfdG9fcGFnZSwKLQkJCQkJICB2c2llX3BhZ2UtJmd0O3NjYl9ncGEgJmd0OyZndDsgOSk7CiYjNDM7CQkJCQkgIHZzaWVfcGFnZS0mZ3Q7c2NiX2dwYSAmZ3Q7Jmd0OyBTQ0JfQUxJR05NRU5UX1NISUZUKTsKIAl9CiAJLyogTWFyayBpdCBhcyBpbnZhbGlkIHVudGlsIGl0IHJlc2lkZXMgaW4gdGhlIHRyZWUuICovCiAJdnNpZV9wYWdlLSZndDtzY2JfZ3BhID0gVUxPTkdfTUFYOwogCiAJLyogRG91YmxlIHVzZSBvZiB0aGUgc2FtZSBhZGRyZXNzIG9yIGFsbG9jYXRpb24gZmFpbHVyZS4gKi8KLQlpZiAocmFkaXhfdHJlZV9pbnNlcnQoJmFtcDtrdm0tJmd0O2FyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgJmd0OyZndDsgOSwgdnNpZV9wYWdlKSkgewomIzQzOwlpZiAocmFkaXhfdHJlZV9pbnNlcnQoJmFtcDtrdm0tJmd0O2FyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgJmd0OyZndDsgU0NCX0FMSUdOTUVOVF9TSElGVCwKJiM0MzsJCQkgICAgICB2c2llX3BhZ2UpKSB7CiAJCXB1dF92c2llX3BhZ2UodnNpZV9wYWdlKTsKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLnZzaWUubXV0ZXgpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTE1NjUsNyAmIzQzOzE1NjUsNiBAQCBpbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICh2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7Z3Bzdy5tYXNrICZhbXA7IFBTV19NQVNLX1BTVEFURSkKIAkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fUFJJVklMRUdFRF9PUCk7CiAKLQlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpICE9IFBBR0VfU0laRSk7CiAJc2NiX2FkZHIgPSBrdm1fczM5MF9nZXRfYmFzZV9kaXNwX3ModmNwdSwgTlVMTCk7CiAKIAkvKiA1MTIgYnl0ZSBhbGlnbm1lbnQgKi8KQEAgLTE2MzIsNyAmIzQzOzE2MzEsNyBAQCB2b2lkIGt2bV9zMzkwX3ZzaWVfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pCiAJCS8qIGZyZWUgdGhlIHJhZGl4IHRyZWUgZW50cnkgKi8KIAkJaWYgKHZzaWVfcGFnZS0mZ3Q7c2NiX2dwYSAhPSBVTE9OR19NQVgpCiAJCQlyYWRpeF90cmVlX2RlbGV0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC52c2llLmFkZHJfdG9fcGFnZSwKLQkJCQkJICB2c2llX3BhZ2UtJmd0O3NjYl9ncGEgJmd0OyZndDsgOSk7CiYjNDM7CQkJCQkgIHZzaWVfcGFnZS0mZ3Q7c2NiX2dwYSAmZ3Q7Jmd0OyBTQ0JfQUxJR05NRU5UX1NISUZUKTsKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZzaWVfcGFnZSk7CiAJfQogCWt2bS0mZ3Q7YXJjaC52c2llLnBhZ2VfY291bnQgPSAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzYwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTS9zMzkwIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgS1ZNIG9uIHMzOTAsIHNwZWNpZmljYWxseSBjaGFuZ2VzIHRvIGBrdm0tczM5MC5jYCBhbmQgYHZzaWUuY2AsIGFuZCBpdCYjMzk7cyBtYWtpbmcgbWUgdGhpbmsgYWJvdXQgZnV6emluZy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGEgbmV3IGAjZGVmaW5lYCBmb3IgU0NCIGFsaWdubWVudCwgYSBiaXQgb2YgdW5jb25kaXRpb25hbCBmZWF0dXJlIGVuYWJsaW5nLCBhbmQgc29tZSBhbGlnbm1lbnQgYW5kIHBvaW50ZXIgYWRqdXN0bWVudHMgaW4gdGhlIHZzaWUgY29kZS4KCkZpcnN0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYCNkZWZpbmUgU0NCX0FMSUdOTUVOVF9TSElGVCA5YCBpbiB0aGUgaW5jbHVkZSBmaWxlLiBTdGFuZGFyZCBzdHVmZi4gVGhlbiB0aGUgYGt2bS1zMzkwLmNgIGNoYW5nZSBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZTogaXQgKnVuY29uZGl0aW9uYWxseSogZW5hYmxlcyB0aGUgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gIGZlYXR1cmUuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGNoZWNrIG9uIGBzY2xwLmhhc182NGJzY2FvYCwgYnV0IHRoYXQgY2hlY2sgaXMgbm93IGdvbmUuIE9rYXksIHNvIHRoYXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2XigJRpdCBhbHRlcnMgdGhlIENQVSBmZWF0dXJlcyBleHBvc2VkIHRvIGEgZ3Vlc3QuIEl0JiMzOTtzIGRlZmluaXRlbHkgKnJlYWNoYWJsZSogd2l0aGluIEtWTSBvbiBzMzkwLCB3aGljaCBpcyBnb29kLiBCdXQgdGhlIGtleSBxdWVzdGlvbjogaXMgaXQgZnV6emFibGU/CgpUaGUgcHJvbXB0IG1lbnRpb25zIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIEJ1dCB3YWl0LCBzMzkweCAqY2FuKiBiZSBydW4gaW4gUUVNVSwgZXZlbiBuZXN0ZWQsIGFuZCBzeXprYWxsZXIgaGFzIHMzOTB4IGluc3RhbmNlcy4gU28sIHRoZSBRRU1VIGJhcnJpZXIgZG9lc27igJl0IGFwcGx5IGhlcmUuIFRoaXMgaXMgcHJvbWlzaW5nLiBTbyB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgY2hhbmdlIHdvcnRoIGZ1enppbmc/CgpMZXQmIzM5O3MgY2hlY2sgYGt2bV9zMzkwX2NwdV9mZWF0X2luaXRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgaWYgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQ7IHdoYXQmIzM5O3MgdGhlIGltcGFjdCBvbiB0aGUgZ3Vlc3QuIFRoZSBgdnNpZS5jYCBjaGFuZ2VzIHNlZW0gbGlrZSBmYWlybHkgc3RhbmRhcmQgYWxpZ25tZW50IGFuZCBtZW1vcnkgbWFwcGluZyBhZGp1c3RtZW50cywgd2hpY2ggYXJlIG9mdGVuIHNvdXJjZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBidXQgdGhlIGZlYXR1cmUgZW5hYmxlbWVudCBpcyB0aGUgYmlnZ2VzdCBjb25jZXJuLiBUaGlzIGlzIGEgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3IsIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2NwdV9mZWF0X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM3Nj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19kZmx0Y2NfcXVlcnkodTggKCpxdWVyeSlbMzJdKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg4OnN0YXRpYyB2b2lkIF9faW5pdCBrdm1fczM5MF9jcHVfZmVhdF9pbml0KHZvaWQpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDk1PXN0YXRpYyBpbnQgX19pbml0IF9fa3ZtX3MzOTBfaW5pdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MTAtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTExOlx0a3ZtX3MzOTBfY3B1X2ZlYXRfaW5pdCgpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUxMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTgyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIHMzOTAgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIGBrdm1fczM5MF9jcHVfZmVhdF9pbml0YCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBkdXJpbmcgS1ZNIGluaXRpYWxpemF0aW9uLCBhcyBleHBlY3RlZC4gVGhlIHByaW1hcnkgY2hhbmdlIGluIGBrdm0tczM5MC5jYCBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgYGlmIChzY2xwLmhhc182NGJzY2FvKWAgY2hlY2sgYmVmb3JlIGFsbG93aW5nIHRoZSBgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT2AgZmVhdHVyZS4gU28sIHRoZSBmZWF0dXJlIGlzIG5vdyAqYWx3YXlzKiBhbGxvd2VkLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBuZWVkcyBmdXJ0aGVyIHNjcnV0aW55LgoKVGhlIGB2c2llLmNgIGNoYW5nZXMgbG9vayBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGp1c3QgYSBjb3VwbGUgb2YgbWFjcm8gcmVwbGFjZW1lbnRzLiBSZXBsYWNpbmcgYHBmbl90b19wYWdlKGhwYSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKWAgd2l0aCBga3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShwZm5fdG9fcGFnZShwaHlzX3RvX3BmbihocGEpKSlgLi4uIHRoYXQmIzM5O3MgZWZmZWN0aXZlbHkgdGhlIHNhbWUgdGhpbmcsIGp1c3QgYSByZS13cml0aW5nIG9mIGhvdyB3ZSBnZXQgdGhlIFBGTi4gVGhlIHNhbWUgZ29lcyBmb3IgdGhlIGBhZGRyICZndDsmZ3Q7IDlgIHRvIGBhZGRyICZndDsmZ3Q7IFNDQl9BTElHTk1FTlRfU0hJRlRgIGNoYW5nZSwgbWVyZWx5IGFub3RoZXIgbWFjcm8gc3dhcC4gVGhlIGFkZGVkIGBzdGF0aWNfYXNzZXJ0YCBzdGF0ZW1lbnRzIGFyZSBwdXJlbHkgY29tcGlsZS10aW1lIHNhbml0eSBjaGVja3MsIHNvIHRoZXkgZG9uJiMzOTt0IGltcGFjdCBydW50aW1lIGJlaGF2aW9yLgoKVGhlcmVmb3JlLCB0aGUgb25seSAqZnVuY3Rpb25hbCogbW9kaWZpY2F0aW9uIGFwcGVhcnMgdG8gYmUgdGhlIHVuY29uZGl0aW9uYWwgZW5hYmxpbmcgb2YgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gLiBUaGUgb2J2aW91cyBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGFsdGVyIHRoZSBwcm9ncmFtJiMzOTtzIGV4ZWN1dGlvbiBmbG93PyBJdCBpbXBhY3RzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBLVk0gQ1BVIGZlYXR1cmVzLCB3aGljaCBtZWFucyBpdCBkZWZpbml0ZWx5IGNoYW5nZXMgKmhvdyogdGhlIFZNIGlzIGluaXRpYWxpemVkLiBIb3dldmVyLCBkb2VzIGl0IGNyZWF0ZSBhIGNvZGUgcGF0aCB0aGF0IHdhc24mIzM5O3QgdGhlcmUgYmVmb3JlPwoKT2theSwgbGV0JiMzOTtzIGNvbnNpZGVyIGZ1enppbmcuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZeKAlGl0JiMzOTtzIGVzc2VudGlhbGx5IHNldHRpbmcgYSBiaXQgaW4gYSBiaXRtYXAsIHRoZSBhbGxvd2VkIENQVSBmZWF0dXJlc+KAlGl0JiMzOTtzIHByb2JhYmx5IG5vdCB0aGUgbW9zdCBwcm9taXNpbmcgdGFyZ2V0IGZvciBhIGZ1enppbmcgY2FtcGFpZ24sIHVubGVzcyB0aGlzIGJpdCBlbmFibGVzIHNvbWUgc2Vuc2l0aXZlIHVuZGVybHlpbmcgY29kZS4gSXQmIzM5O3MgcmVhbGx5IHdvcnRoIGRvaW5nIHNvbWUgbWFudWFsIGFuYWx5c2lzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHdoYXQgYGFsbG93X2NwdV9mZWF0YCBhY3R1YWxseSBkb2VzLiBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mICphbHdheXMqIGVuYWJsaW5nIHRoaXMgc3BlY2lmaWMgQ1BVIGZlYXR1cmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgYmVmb3JlIG1ha2luZyBhIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb3dfY3B1X2ZlYXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMyOT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9jbG9ja19ub3RpZmllciA9IHtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzMyLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMzMzpzdGF0aWMgdm9pZCBhbGxvd19jcHVfZmVhdCh1bnNpZ25lZCBsb25nIG5yKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMzNC17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM4OD1zdGF0aWMgdm9pZCBfX2luaXQga3ZtX3MzOTBfY3B1X2ZlYXRfaW5pdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NDgtXHRpZiAobWFjaGluZV9oYXNfZXNvcCgpKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ0OTpcdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfRVNPUCk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDUwLVx0Lypcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU2LVx0XHRyZXR1cm47XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDU3Olx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lFRjIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1ODpcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1OS1cdGlmIChzY2xwLmhhc19zaWlmKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ2MDpcdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lJRik7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDYxLVx0aWYgKHNjbHAuaGFzX2dwZXJlKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ2MjpcdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfR1BFUkUpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ2My1cdGlmIChzY2xwLmhhc19nc2xzKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ2NDpcdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfR1NMUyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDY1LVx0aWYgKHNjbHAuaGFzX2liKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ2NjpcdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfSUIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ2Ny1cdGlmIChzY2xwLmhhc19jZWkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDY4Olx0XHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9DRUkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ2OS1cdGlmIChzY2xwLmhhc19pYnMpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDcwOlx0XHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9JQlMpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ3MS1cdGlmIChzY2xwLmhhc19rc3MpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDcyOlx0XHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9LU1MpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ3My1cdGlmIChzY2xwLmhhc19hc3RmbGVpZTIpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDc0Olx0XHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9BU1RGTEVJRTIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ3NS1cdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI1MgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBhIEtWTS9zMzkwIEZlYXR1cmUgQ2hhbmdlKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGp1c3QgZmxpcHBpbmcgYSBiaXQsIGxpa2VseSB3aXRoaW4gYSBzdHJ1Y3R1cmUgbGlrZSBga3ZtX3MzOTBfYXZhaWxhYmxlX2NwdV9mZWF0YCBvciBzb21ldGhpbmcgc2ltaWxhciwgdGhhdCBzaWduYWxzIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIENQVSBmZWF0dXJlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoYXQmIzM5O3MgYSBjb21tb24gcGF0dGVybiBpbiB0aGUga2VybmVsLCBhIHNpbXBsZSBmbGFnLWJhc2VkIGFwcHJvYWNoLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMsIHRob3VnaC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRvZ2dsaW5nIHRoYXQgc3BlY2lmaWMgYml0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBgYWxsb3dfY3B1X2ZlYXRgIGFjdHVhbGx5ICpkb2VzKi4gSXMgaXQgYSB3aGl0ZWxpc3QsIGEgYmxhY2tsaXN0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gRG9lcyBpdCBjb250cm9sIHRoZSBmZWF0dXJlJiMzOTtzIHZpc2liaWxpdHkgdG8gdGhlIGd1ZXN0LCBpdHMgYXZhaWxhYmlsaXR5IGR1cmluZyB2Q1BVIGNyZWF0aW9uLCBvciBpbmZsdWVuY2Ugc29tZSBpbnRlcm5hbCBLVk0gbG9naWM/IFRoZSBhbnN3ZXIgdG8gdGhhdCB3aWxsIHRlbGwgbWUgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYGFsbG93X2NwdV9mZWF0YCBjb2RlIGFuZCBmaWd1cmUgb3V0IHRoZSBpbXBhY3QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMDpcdFx0Lm5vdGlmaWVyX2NhbGwgPSBrdm1fY2xvY2tfc3luYyxcbiAzMzE6XHR9O1xuIDMzMjpcdFxuIDMzMzpcdHN0YXRpYyB2b2lkIGFsbG93X2NwdV9mZWF0KHVuc2lnbmVkIGxvbmcgbnIpXG4gMzM0Olx0e1xuIDMzNTpcdFx0c2V0X2JpdF9pbnYobnIsIGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdCk7XG4gMzM2Olx0fVxuIDMzNzpcdFxuIDMzODpcdHN0YXRpYyBpbmxpbmUgaW50IHBsb190ZXN0X2JpdCh1bnNpZ25lZCBjaGFyIG5yKVxuIDMzOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzEyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHk6IEtWTSBDUFUgRmVhdHVyZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHRoYXQgc2V0cyBhIGJpdCBpbiBga3ZtX3MzOTBfYXZhaWxhYmxlX2NwdV9mZWF0YC4gTXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIHNvbWV0aGluZyB0aGF0IHdvdWxkIGJlIHdvcnRod2hpbGUgdG8gZnV6ej8mIzM0OyBPbiB0aGUgc3VyZmFjZSwgaXQgc2VlbXMgZmFpcmx5IGxpbWl0ZWQ7IGl0JiMzOTtzIGp1c3QgYWJvdXQgaG93IEtWTSBDUFUgZmVhdHVyZXMgYXJlIGluaXRpYWxpemVkLiBCdXQgd2FpdCwgSSYjMzk7dmUgZ290IHRvIGxvb2sgY2xvc2VyLiBJIHNlZSB0aGF0IGBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPYCBpcyBub3cgdW5jb25kaXRpb25hbGx5IGFsbG93ZWQuIEFoYSEgVGhhdCBtZWFucyB0aGUgdXNlcnNwYWNlIGNhbiBlbmFibGUgaXQgdGhyb3VnaCBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgb3IgYSBzaW1pbGFyIGludGVyZmFjZSwgdGhhdCBjaGFuZ2VzIHRoaW5ncyBzaWduaWZpY2FudGx5LiBOb3csIHRoaXMgaXMgaW50ZXJlc3RpbmcuLi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdGAgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgdXNhZ2UgdG8gZnVsbHkgYXNzZXNzIHRoZSBmdXp6aW5nIHBvdGVudGlhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfYXZhaWxhYmxlX2NwdV9mZWF0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yNjQ9c3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKGt2bV9zMzkwX2ZhY19leHQpIFx1MDAzYz0gQVJSQVlfU0laRShzdGZsZV9mYWNfbGlzdCkpO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNjYtLyogYXZhaWxhYmxlIGNwdSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkga3ZtICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjY3OnN0YXRpYyBERUNMQVJFX0JJVE1BUChrdm1fczM5MF9hdmFpbGFibGVfY3B1X2ZlYXQsIEtWTV9TMzkwX1ZNX0NQVV9GRUFUX05SX0JJVFMpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI2OC0vKiBhdmFpbGFibGUgc3ViZnVuY3Rpb25zIGluZGljYXRlZCB2aWEgcXVlcnkgLyBcJiMzNDt0ZXN0IGJpdFwmIzM0OyAqL1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMzM9c3RhdGljIHZvaWQgYWxsb3dfY3B1X2ZlYXQodW5zaWduZWQgbG9uZyBucilcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMzQte1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMzNTpcdHNldF9iaXRfaW52KG5yLCBrdm1fczM5MF9hdmFpbGFibGVfY3B1X2ZlYXQpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMzNi19XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTE1NDM9c3RhdGljIGludCBrdm1fczM5MF9zZXRfcHJvY2Vzc29yX2ZlYXQoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNTUwLVx0aWYgKCFiaXRtYXBfc3Vic2V0KCh1bnNpZ25lZCBsb25nICopIGRhdGEuZmVhdCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxNTUxOlx0XHRcdCAgIGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNTUyLVx0XHRcdCAgIEtWTV9TMzkwX1ZNX0NQVV9GRUFUX05SX0JJVFMpKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xNzgwPXN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X21hY2hpbmVfZmVhdChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTE3ODQtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTc4NTpcdGJpdG1hcF90b19hcnI2NChkYXRhLmZlYXQsIGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdCwgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfTlJfQklUUyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTc4Ni1cdGlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXR0ci1cdTAwM2VhZGRyLCBcdTAwMjZkYXRhLCBzaXplb2YoZGF0YSkpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Nzc3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogS1ZNL3MzOTB4IENQVSBGZWF0dXJlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBrdm1fczM5MF9zZXRfcHJvY2Vzc29yX2ZlYXRgIGZ1bmN0aW9uIGluIHRoZSBLVk0vczM5MCBjb2RlLiBJdCBzZWVtcyB0byB2YWxpZGF0ZSB0aGUgQ1BVIGZlYXR1cmVzIHJlcXVlc3RlZCBieSB1c2Vyc3BhY2UgYWdhaW5zdCB3aGF0JiMzOTtzIGFjdHVhbGx5IGF2YWlsYWJsZSwgbmFtZWx5IGBrdm1fczM5MF9hdmFpbGFibGVfY3B1X2ZlYXRgLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGlzIGNoYW5nZSByZWxhdGVkIHRvIGBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPYC4gSXQgbG9va3MgbGlrZSB1c2Vyc3BhY2UgY2FuIG5vdyByZXF1ZXN0IHRoaXMgZmVhdHVyZSBhbmQgdGhlIGNoZWNrIHdpbGwgcGFzcyAqZXZlbiogaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgKHJlcHJlc2VudGVkIGJ5IGBzY2xwLmhhc182NGJzY2FvYCkgZG9lc24mIzM5O3QgYWN0dWFsbHkgc3VwcG9ydCBpdC4gVGhpcyBpcyBhIHJlZCBmbGFnLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7RG9lcyB0aGlzIGNyZWF0ZSBhIG5ldyB2dWxuZXJhYmlsaXR5IHN1cmZhY2U/JiMzNDsgVGhpcyBpcyBhIGNsYXNzaWMgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0LiBJZiB0aGVyZSYjMzk7cyBhIGRpc2Nvbm5lY3QgYmV0d2VlbiB3aGF0JiMzOTtzICpyZXF1ZXN0ZWQqIGFuZCB3aGF0JiMzOTtzICpwcmVzZW50KiwgdGhhdCYjMzk7cyB3aGVyZSBidWdzIHRlbmQgdG8gaGlkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT2AgYWN0dWFsbHkgKmRvZXMqIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZGlzY3JlcGFuY3kgYWN0dWFsbHkgZW5hYmxlcyBhbnkgbmV3IGNvZGUgcGF0aHMgdGhhdCB3b3VsZCBiZSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmZWF0dXJlJiMzOTtzIHVzYWdlIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD00MjE9c3RydWN0IGt2bV9zMzkwX3ZtX2NwdV9tYWNoaW5lIHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC00MzQtI2RlZmluZSBLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUVGMlx0MVxuYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6NDM1OiNkZWZpbmUgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT1x0MlxuYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtNDM2LSNkZWZpbmUgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lJRlx0M1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zODg9c3RhdGljIHZvaWQgX19pbml0IGt2bV9zMzkwX2NwdV9mZWF0X2luaXQodm9pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3LVx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lFRjIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1ODpcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1OS1cdGlmIChzY2xwLmhhc19zaWlmKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTc2NT1zdGF0aWMgaW50IHBpbl9ibG9ja3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzczLVx0Z3BhID0gUkVBRF9PTkNFKHNjYl9vLVx1MDAzZXNjYW9sKSBcdTAwMjYgfjB4ZlVMO1xuYXJjaC9zMzkwL2t2bS92c2llLmM6Nzc0Olx0aWYgKHRlc3Rfa3ZtX2NwdV9mZWF0KHZjcHUtXHUwMDNla3ZtLCBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTc3NS1cdFx0Z3BhIHw9ICh1NjQpIFJFQURfT05DRShzY2Jfby1cdTAwM2VzY2FvaCkgXHUwMDNjXHUwMDNjIDMyO1xuLS1cbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTQyMT1zdHJ1Y3Qga3ZtX3MzOTBfdm1fY3B1X21hY2hpbmUge1xuLS1cbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTQzNC0jZGVmaW5lIEtWTV9TMzkwX1ZNX0NQVV9GRUFUX1NJRUYyXHQxXG50b29scy9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo0MzU6I2RlZmluZSBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPXHQyXG50b29scy9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC00MzYtI2RlZmluZSBLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUlGXHQzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5OTIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBzMzkweCBOZXN0ZWQgVmlydHVhbGl6YXRpb24gQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGFyY2gvczM5MC9rdm0vdnNpZS5jOjc3NGAgaGVyZS4gQWgsIHJpZ2h0LiBJdCBzZWVtcyB0aGlzIG1vZGlmaWNhdGlvbiBpbXBhY3RzIGhvdyB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcywgb3IgYGdwYWAsIGlzIGNhbGN1bGF0ZWQgd2l0aGluIHRoZSBgcGluX2Jsb2Nrc2AgZnVuY3Rpb24uIEFuZCB0aGlzIGlzIGFsbCBoYXBwZW5pbmcgd2l0aGluIGB2c2llLmNgLCB3aGljaCwgYXMgYSByZW1pbmRlciwgaXMgdGhlIGNvcmUgb2YgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0IGZvciBzMzkweC4gU28sIHRoaXMgY2hhbmdlIGlzIGRlZmluaXRlbHkgYWltZWQgYXQgaW1wcm92aW5nIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBiZWhhdmlvci4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhpcyBtb2RpZmljYXRpb24uIExldCBtZSBnbyBiYWNrIGFuZCByZS1leGFtaW5lIHRoZSBzcGVjaWZpYyBjaGFuZ2VzIHdpdGhpbiBgdnNpZS5jYCBhZ2FpbiwgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0NCX0FMSUdOTUVOVF9TSElGVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaC0xMS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF90eXBlcy5oOjEyOiNkZWZpbmUgU0NCX0FMSUdOTUVOVF9TSElGVCA5XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaC0xMy1cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xNDgyPXN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0ODctXHRyY3VfcmVhZF9sb2NrKCk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNDg4Olx0dnNpZV9wYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMTQ4OS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1MjgtXHRcdFx0cmFkaXhfdHJlZV9kZWxldGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNTI5Olx0XHRcdFx0XHQgIHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhIFx1MDAzZVx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZUKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1MzAtXHR9XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTUzNC1cdC8qIERvdWJsZSB1c2Ugb2YgdGhlIHNhbWUgYWRkcmVzcyBvciBhbGxvY2F0aW9uIGZhaWx1cmUuICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNTM1Olx0aWYgKHJhZGl4X3RyZWVfaW5zZXJ0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLCBhZGRyIFx1MDAzZVx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZULFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTUzNi1cdFx0XHQgICAgICB2c2llX3BhZ2UpKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTYxOT12b2lkIGt2bV9zMzkwX3ZzaWVfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYzMy1cdFx0XHRyYWRpeF90cmVlX2RlbGV0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE2MzQ6XHRcdFx0XHRcdCAgdnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYzNS1cdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZzaWVfcGFnZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTkyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNzk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPIEZlYXR1cmUgRW5hYmxlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3QgZmV3IGNoYW5nZXMgYXJlIGp1c3QgY2xlYW51cCDigJMgYWxpZ25pbmcgdGhlIGBTQ0JfQUxJR05NRU5UX1NISUZUYCBjb25zdGFudCwgYW5kIHRoZSBgcGluX2d1ZXN0X3BhZ2VgIHRvIGB1bnBpbl9ndWVzdF9wYWdlYCByZWZhY3RvcmluZywgYW5kIGFkZGluZyBgc3RhdGljX2Fzc2VydGAgc3RhdGVtZW50cyBmb3IgY29tcGlsZS10aW1lIGNoZWNrcywgbm90aGluZyB0byBzZWUgdGhlcmUuIFRoZSByZWFsIHF1ZXN0aW9uIGlzIHRoYXQgc2luZ2xlIGxpbmUgY2hhbmdlOiBgYWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTylgLiAgVGhpcyB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlcyB0aGUgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gIGZlYXR1cmUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gIEl0IHNlZW1zIHNtYWxsLCBidXQgaXQmIzM5O3MgZW5hYmxpbmcgdGhlIGd1ZXN0IHRvIHVzZSBhIDY0LWJpdCBCU0NBIG9yaWdpbi4gVGhhdCBhZmZlY3RzIGBwaW5fYmxvY2tzYCBpbiBgdnNpZS5jYDoKCmBgYGMKCWlmICh0ZXN0X2t2bV9jcHVfZmVhdCh2Y3B1LSZndDtrdm0sIEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pKQoJCWdwYSB8PSAodTY0KSBSRUFEX09OQ0Uoc2NiX28tJmd0O3NjYW9oKSAmbHQ7Jmx0OyAzMjsKYGBgCgpJZiB0aGUgZmVhdHVyZSBpcyBzZXQsIHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSBTQ0Egb3JpZ2luIGFyZSBub3cgcmVhZCBmcm9tIGBzY2Jfby0mZ3Q7c2Nhb2hgLiBUaGlzIG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpZiB0aGVyZSBhcmUgYW55IGlzc3VlcyBoYW5kbGluZyBhIDY0LWJpdCBHUEEgZm9yIHRoZSBTQ0EuIFN5emthbGxlciBjYW4gZnV6eiBLVk0gb24gczM5MHgsIHNvIGl0JiMzOTtzICpyZWFjaGFibGUqLgoKQnV0IGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQ/IFRoZSBjaGFuZ2UgaXMgKnRpbnkqLiBJdCYjMzk7cyBvbmUgbGluZS4gQnV0IGl0JiMzOTtzIGVuYWJsaW5nIHRoaXMgZmVhdHVyZSBmb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uICh2U0lFKSByZWdhcmRsZXNzIG9mIGhvc3Qgc3VwcG9ydCEgIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4uLiBpZiB0aGUgaG9zdCBkb2VzbiYjMzk7dCBzdXBwb3J0IHRoZSA2NC1iaXQgQlNDQSAoYHNjbHAuaGFzXzY0YnNjYW9gIGlzIGZhbHNlKSwgS1ZNIHdpbGwgKmVtdWxhdGUqIGl0IGZvciB0aGUgbmVzdGVkIGd1ZXN0LiAgVGhlIGNvZGUgaW4gYHBpbl9ibG9ja3NgIGFscmVhZHkgKmV4aXN0ZWQqIGJ1dCBpdCYjMzk7cyBub3cgcmVhY2hhYmxlIG9uIGFsbCBob3N0cy4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoZSBlbXVsYXRlZCBob3N0IGluIFFFTVUgKHdoZXJlIFN5emthbGxlciBydW5zKSAqYWxyZWFkeSogaGF2ZSBgc2NscC5oYXNfNjRic2Nhb2A/IElmIFFFTVUgKmRpZCogcHJvdmlkZSBpdCwgdGhpcyBjb2RlIHdhcyBhbHJlYWR5IHJlYWNoYWJsZS4gIElmIGl0ICpkaWRuJiMzOTt0KiwgdGhpcyBpcyAqbmV3bHkqIHJlYWNoYWJsZSBjb2RlLiBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjaGFuZ2VzLCBhbmQgbm9wZSwgdGhhdCBpcyB0aGUgb25seSBmdW5jdGlvbmFsIGNoYW5nZS4KClNvLCB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyOiBJdCAqaXMqIGEgbWlub3IgY2hhbmdlIChqdXN0IGVuYWJsaW5nIGEgZmxhZykuIEhvd2V2ZXIsIGl0ICpkb2VzKiBjaGFuZ2UgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGBwaW5fYmxvY2tzYC4gSSYjMzk7bGwgZGVsdmUgaW50byB0aGUgYHBpbl9ibG9ja3NgIGluIGB2c2llLmNgIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgcG90ZW50aWFsIGZvciBleHBsb2l0YXRpb24uIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgd2hhdCBgcGluX2Jsb2Nrc2AgKmRvZXMqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaW5fYmxvY2tzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vdnNpZS5jPTcwMT1zdGF0aWMgdm9pZCB1bnBpbl9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBocGFfdCBocGEpXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzA3LVxuYXJjaC9zMzkwL2t2bS92c2llLmM6NzA4Oi8qIHVucGluIGFsbCBibG9ja3MgcHJldmlvdXNseSBwaW5uZWQgYnkgcGluX2Jsb2NrcygpLCBtYXJraW5nIHRoZW0gZGlydHkgKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjcwOTpzdGF0aWMgdm9pZCB1bnBpbl9ibG9ja3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy03MTAte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTc2NC0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjc2NTpzdGF0aWMgaW50IHBpbl9ibG9ja3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy03NjYte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTg3Ny11bnBpbjpcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjg3ODpcdHVucGluX2Jsb2Nrcyh2Y3B1LCB2c2llX3BhZ2UpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtODc5LVx0cmV0dXJuIHJjO1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTE1NTY9aW50IGt2bV9zMzkwX2hhbmRsZV92c2llKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTkzLVx0XHRnb3RvIG91dF91bnBpbl9zY2I7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNTk0Olx0cmMgPSBwaW5fYmxvY2tzKHZjcHUsIHZzaWVfcGFnZSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTk1LVx0aWYgKHJjKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1OTktXHR1bnJlZ2lzdGVyX3NoYWRvd19zY2IodmNwdSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjAwOlx0dW5waW5fYmxvY2tzKHZjcHUsIHZzaWVfcGFnZSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjAxLW91dF91bnNoYWRvdzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNjMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcGluX2Jsb2Nrc2AgRnVuY3Rpb24gQ2FsbCoqCgpPa2F5LCBzbyBgcGluX2Jsb2Nrc2AgZ2V0cyBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgLiBUaGF0IG1lYW5zIHRoZSBgU0lFYCBpbnN0cnVjdGlvbiDigJMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIOKAkyBpcyB0aGUga2V5IGhlcmUuIFdoZW4gYSBndWVzdCBpc3N1ZXMgYW4gYFNJRWAgaW5zdHJ1Y3Rpb24sIHRoZSBjb250cm9sIGZsb3cgaGl0cyBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBwaW5fYmxvY2tzYC4gTm93LCBpZiBgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT2AgaXMgZW5hYmxlZCwgdGhlIGNvZGUgd2lsbCByZWFkIGBzY2FvaGAgYW5kIHVzZSBpdCBmb3IgdGhlIEdQQS4gVGhhdCYjMzk7cyBhIGNsZWFyIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBLVk0gczM5MHggbG9naWMsIG5vIHF1ZXN0aW9uLiBUaGVyZWZvcmUsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZywgSSYjMzk7bGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgbG9va3MgbGlrZSB0aGUgb2J2aW91cyBjaG9pY2UuIEl0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCBmb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBhbmQgdGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gYHBpbl9ibG9ja3NgIGlzIHN0YXRpYywgc28gaXQgKm1pZ2h0KiBiZSBpbmxpbmVkLiBCdXQgYGt2bV9zMzkwX2hhbmRsZV92c2llYCBpcyBub3QuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGt2bV9zMzkwX2hhbmRsZV92c2llYCBpc24mIzM5O3Qgc3RhdGljIGFuZCBpcyBleHBvcnRlZCwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9oYW5kbGVfdnNpZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9NDQyPWludCBrdm1fczM5MF9za2V5X2NoZWNrX2VuYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC00NDQtLyogaW1wbGVtZW50ZWQgaW4gdnNpZS5jICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6NDQ1OmludCBrdm1fczM5MF9oYW5kbGVfdnNpZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTQ0Ni12b2lkIGt2bV9zMzkwX3ZzaWVfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTk1OD1pbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NzEtXHRjYXNlIDB4MTQ6XG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo5NzI6XHRcdHJldHVybiBrdm1fczM5MF9oYW5kbGVfdnNpZSh2Y3B1KTtcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk3My1cdGNhc2UgMHgyMTpcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xNDgyPXN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1NTUtXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNTU2OmludCBrdm1fczM5MF9oYW5kbGVfdnNpZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTU3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMDUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgaXMgdGhlIGNsZWFyIHN0YXJ0aW5nIHBvaW50LiBJdCYjMzk7cyBub24tc3RhdGljLCBtZWFuaW5nIGl0JiMzOTtzIGV4dGVybmFsbHkgdmlzaWJsZSwgYW5kIGl0JiMzOTtzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBrdm1fczM5MF9oYW5kbGVfYjJgLiAgQW5kLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGAweGIyMTRgIGNvcnJlc3BvbmRzIHRvIHRoZSBTeXN0ZW0gSW5zdHJ1Y3Rpb24gRXhlY3V0aW9uIChTSUUpIGluc3RydWN0aW9uLiBQZXJmZWN0LiBUaGF0JiMzOTtzIGEgc29saWQsIGlkZW50aWZpYWJsZSBlbnRyeSBwb2ludCBmb3IgYW5hbHlzaXMgcmVsYXRlZCB0byBWU0lFLgoKTm93LCBsZXQmIzM5O3MgYnJvYWRlbiB0aGUgbmV0IGEgYml0LiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQ/IFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIGZlYXR1cmUgaXMgKmVuYWJsZWQqIGZyb20gdXNlcnNwYWNlLiBBaCwgeWVzLCBga3ZtX3MzOTBfc2V0X3Byb2Nlc3Nvcl9mZWF0YC4gIFRoYXQgd291bGQgYmUgd2hlcmUgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwgdG8gYWN0aXZhdGUgdGhlIGZlYXR1cmUuIEkgc2hvdWxkIGFkZCB0aGF0IHRvIHRoZSBsaXN0IG9mIGtleSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3NldF9wcm9jZXNzb3JfZmVhdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTQ5Nz1zdGF0aWMgaW50IGt2bV9zMzkwX3NldF9wcm9jZXNzb3Ioc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNTQyLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjE1NDM6c3RhdGljIGludCBrdm1fczM5MF9zZXRfcHJvY2Vzc29yX2ZlYXQoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTE1NDQtXHRcdFx0XHQgICAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTY4Mj1zdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jcHVfbW9kZWwoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNjkwLVx0Y2FzZSBLVk1fUzM5MF9WTV9DUFVfUFJPQ0VTU09SX0ZFQVQ6XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTY5MTpcdFx0cmV0ID0ga3ZtX3MzOTBfc2V0X3Byb2Nlc3Nvcl9mZWF0KGt2bSwgYXR0cik7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTY5Mi1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODE3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRlbHZpbmcgaW50byBDUFUgTW9kZWwgQXR0cmlidXRlcyB3aXRoIGBrdm1fczM5MF9zZXRfY3B1X21vZGVsYCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50LCBga3ZtX3MzOTBfc2V0X2NwdV9tb2RlbGAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBlbXVsYXRlZCBDUFUmIzM5O3MgcGVyc29uYWxpdHkgd2l0aGluIHRoZSBLVk0vczM5MCBmcmFtZXdvcmsuIEl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCB0aGUgY2VudHJhbCBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGFuZCBpbnRlcnByZXRzIHJlcXVlc3RzIHRvIGFsdGVyIHRoZSBwZXJjZWl2ZWQgQ1BVIG1vZGVsIHByZXNlbnRlZCB0byB0aGUgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbS4gSXTigJlzIHdoZXJlIHRoZSBhYnN0cmFjdGlvbiBvZiB0aGUgcGh5c2ljYWwgQ1BVIGNhcGFiaWxpdGllcyBpcyBzaGFwZWQgdG8gZml0IHRoZSBuZWVkcyBvZiB0aGUgdmlydHVhbCBtYWNoaW5lLgoKSSYjMzk7bSBpbnN0YW50bHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2hhdCBraW5kIG9mIGF0dHJpYnV0ZXMgYXJlIHdlIHNldHRpbmcgaGVyZT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gc2V0IGZlYXR1cmVzLCBjYXBhYmlsaXRpZXMgbGlrZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLCBwZXJmb3JtYW5jZSBjb3VudGVycywgb3IgcGVyaGFwcyBldmVuIG1pY3JvY29kZSBsZXZlbHM/IFVuZGVyc3RhbmRpbmcgdGhlIHByZWNpc2UgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBpcyBwYXJhbW91bnQuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgbG9naWMgd2l0aGluIGBrdm1fczM5MF9zZXRfY3B1X21vZGVsYCB0byBncmFzcCBob3cgaXQgdHJhbnNsYXRlcyB0aG9zZSByZXF1ZXN0cyBpbnRvIHRoZSBhY3R1YWwgQ1BVIG1vZGVsIHRoZSBndWVzdCB3aWxsIHNlZS4gQXJlIHRoZXJlIGFueSByZXN0cmljdGlvbnMsIGRlZmF1bHQgbW9kZWxzLCBvciB2YWxpZGF0aW9uIGNoZWNrcyBpbnZvbHZlZD8gQW55IHBvdGVudGlhbCBmb3IgaW5jb21wYXRpYmlsaXR5IG9yIG1pc2NvbmZpZ3VyYXRpb24gaWYgdGhlc2UgYXR0cmlidXRlcyBhcmUgbm90IHNldCBjb3JyZWN0bHk/IFRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSYjMzk7cyBvdmVyYWxsIHJlbGlhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBhcmUgdHJ1bHkgZGVmaW5lZC4gV2UgaGF2ZSB0byBiZSBtZXRpY3Vsb3VzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3NldF9jcHVfbW9kZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTE2NTg9c3RhdGljIGludCBrdm1fczM5MF9zZXRfdXZfZmVhdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTE2ODEtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTY4MjpzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jcHVfbW9kZWwoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTE2ODMte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMDQyPXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDUzLVx0Y2FzZSBLVk1fUzM5MF9WTV9DUFVfTU9ERUw6XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjA1NDpcdFx0cmV0ID0ga3ZtX3MzOTBfc2V0X2NwdV9tb2RlbChrdm0sIGF0dHIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIwNTUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUzMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0vczM5MCBDb2RlIGZvciBGZWF0dXJlIEV4ZWN1dGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBzcGVjaWZpYyBmZWF0dXJlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIEtWTS9zMzkwIGFyY2hpdGVjdHVyZS4gSSYjMzk7dmUgaWRlbnRpZmllZCBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIGFzIHRoZSBpb2N0bCBoYW5kbGVyIGZvciBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgb24gdGhlIFZNIGZpbGUgZGVzY3JpcHRvci4gV2hpbGUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBpdCYjMzk7cyBub3QgcXVpdGUgYXQgdGhlIGxldmVsIG9mIGRldGFpbCBJJiMzOTttIGFmdGVyLCBhbmQgSSBiZWxpZXZlIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgaXMgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZSBhY3R1YWwgZXhlY3V0aW9uIG9mIGEgc3BlY2lmaWMgZmVhdHVyZS4KClRoZXJlZm9yZSwgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbiwgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGJvdGggYGt2bV9zMzkwX2hhbmRsZV92c2llYCBhbmQgYGt2bV9zMzkwX3ZtX3NldF9hdHRyYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCk5vdywgYmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBzeXN0ZW0gaXMgYnVpbHQgd2l0aCBgQ09ORklHX0tWTWAuIFRoZSBjb2RlIGl0c2VsZiwgb2YgY291cnNlLCByZXNpZGVzIHdpdGhpbiB0aGUgYGFyY2gvczM5MC9rdm0vYCBkaXJlY3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMjEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBhbmQgYEtWTWAgaXMgZGVmaW5pdGVseSB0aGUgbWFpbiBjb25maWd1cmF0aW9uIHBvaW50LiBCdXQgaG9sZCBvbiwgSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGBLVk1gIGlzIGEgdHJpc3RhdGUuIFRoYXQgbWVhbnMgaXQgY2FuIGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlIOKAkyBnb29kIHRvIGtub3cuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gS1ZNIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGJlIHRob3JvdWdoLCBJIHN1cHBvc2UuIFJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgaW4gYGFyY2gvczM5MC9rdm0vTWFrZWZpbGVgIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIE1ha2VmaWxlIGlzIHVzdWFsbHkgd2hlcmUgcmVsYXRlZCBvcHRpb25zIGFyZSBnYXRoZXJlZCwgc28gaG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCMgTWFrZWZpbGUgZm9yIGtlcm5lbCB2aXJ0dWFsIG1hY2hpbmVzIG9uIHMzOTBcbiAgIDM6XHQjXG4gICA0Olx0IyBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDhcbiAgIDU6XHRcbiAgIDY6XHRpbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXG4gICA3Olx0XG4gICA4Olx0Y2NmbGFncy15IDo9IC1JdmlydC9rdm0gLUlhcmNoL3MzOTAva3ZtXG4gICA5Olx0XG4gIDEwOlx0a3ZtLXkgJiM0Mzs9IGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3Aub1xuICAxMTpcdGt2bS15ICYjNDM7PSBkaWFnLm8gZ2FjY2Vzcy5vIGd1ZXN0ZGJnLm8gdnNpZS5vIHB2Lm9cbiAgMTI6XHRrdm0teSAmIzQzOz0gZGF0Lm8gZ21hcC5vIGZhdWx0aW4ub1xuICAxMzpcdFxuICAxNDpcdGt2bS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgJiM0Mzs9IHBjaS5vXG4gIDE1Olx0b2JqLSQoQ09ORklHX0tWTSkgJiM0Mzs9IGt2bS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjMwCgkJCQkJCQlvdXRwdXQ6IDE2MgoJCQkJCQkJdGhvdWdodHM6IDI1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBpbml0aWFsbHkgdGhvdWdodCBgQ09ORklHX0tWTWAgd2FzIHRoZSBrZXksIGJ1dCBhIGNsb3NlciBsb29rIGF0IHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgYHZzaWUuY2AsIHNob3dzIGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDT05GSUdfS1ZNYCBpcyBhY3RpdmUuIFRoZXJlZm9yZSwgYEtWTWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gZmxhZyB0byBmb2N1cyBvbi4KCkxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHk6CgoqICAgKipGdW5jdGlvbmFsIENoYW5nZToqKiBBYnNvbHV0ZWx5LCB0aGlzIGVuYWJsZXMgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gIHVuY29uZGl0aW9uYWxseS4gSXQgYWx0ZXJzIHRoZSBiZWhhdmlvciwgd2hpY2ggbWFrZXMgaXQgaW50ZXJlc3RpbmcuCiogICAqKlJlYWNoYWJpbGl0eToqKiBZZXMsIHRoaXMgaXMgcmVhY2hhYmxlIHRocm91Z2ggS1ZNIGlvY3RscyBhbmQgdHJpZ2dlcmVkIGJ5IHRoZSBgU0lFYCBpbnN0cnVjdGlvbiB3aXRoaW4gYSBndWVzdC4gVGhhdCYjMzk7cyBhIGNsZWFyIHBhdGggdG8gdHJpZ2dlciB0aGUgY2hhbmdlLgoqICAgKipGdXp6YWJpbGl0eToqKiBEZWZpbml0ZWx5LiBUaGlzIGltcGFjdHMgbmVzdGVkIHZpcnR1YWxpemF0aW9uICh2U0lFKSBieSBhbGxvd2luZyBhIDY0LWJpdCBCU0NBIG9yaWdpbi4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGVub3VnaCBzaGlmdCBpbiBiZWhhdmlvciB0byB3YXJyYW50IGZ1enppbmcuCiogICAqKkZvY3VzIFN5bWJvbHM6KiogVGhlIGtleSBmdW5jdGlvbnMgdG8gaW52ZXN0aWdhdGUgd2lsbCBiZSBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgIGFuZCBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgLgoqICAgKipFbmFibGUgQ29uZmlndXJhdGlvbnM6KiogVGhlIGZvY3VzIGlzIGNsZWFybHkgb24gYEtWTWAuCgpOb3csIEkmIzM5O20ganVzdCBkb3VibGUtY2hlY2tpbmcgbXkgY2hvaWNlIG9mIGZvY3VzIHN5bWJvbHMuIElzIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgdGhlICpiZXN0KiBlbnRyeSBwb2ludD8gWWVzLCBpdCBpcy4gSXQmIzM5O3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBoYW5kbGluZy4gQW5kLCBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIGlzIHdoZXJlIHRoZSBDUFUgZmVhdHVyZSBpcyBzZXQuIEkgdGhpbmsgdGhpcyBpcyBhIHJvYnVzdCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV92c2llJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3NldF9hdHRyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIEtWTSBDUFUgZmVhdHVyZSBpbml0aWFsaXphdGlvbiBieSB1bmNvbmRpdGlvbmFsbHkgYWxsb3dpbmcgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTy4gVGhpcyBhbGxvd3MgdXNlcnNwYWNlIHRvIGVuYWJsZSB0aGUgNjQtYml0IEJTQ0Egb3JpZ2luIGZlYXR1cmUgZm9yIGEgZ3Vlc3QsIHdoaWNoIGFsdGVycyBob3cgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgaXMgY2FsY3VsYXRlZCBpbiBgcGluX2Jsb2Nrc2AgZHVyaW5nIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiAodlNJRSkuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCB0aGUgU0lFIGluc3RydWN0aW9uIGluIGEgZ3Vlc3QsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfdnNpZSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zZXRfYXR0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmdW5jdGlvbmFsbHkgY2hhbmdlcyBLVk0gQ1BVIGZlYXR1cmUgaW5pdGlhbGl6YXRpb24gYnkgdW5jb25kaXRpb25hbGx5IGFsbG93aW5nIEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8uIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBlbmFibGUgdGhlIDY0LWJpdCBCU0NBIG9yaWdpbiBmZWF0dXJlIGZvciBhIGd1ZXN0LCB3aGljaCBhbHRlcnMgaG93IHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIGlzIGNhbGN1bGF0ZWQgaW4gYHBpbl9ibG9ja3NgIGR1cmluZyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gKHZTSUUpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgdGhlIFNJRSBpbnN0cnVjdGlvbiBpbiBhIGd1ZXN0LCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwZXJmb3JtcyBtaW5vciByZWZhY3RvcmluZyAocmVwbGFjaW5nIGhhcmRjb2RlZCBzaGlmdCB2YWx1ZXMgd2l0aCBhIG1hY3JvLCB1c2luZyBwaHlzX3RvX3BmbiBpbnN0ZWFkIG9mIGJpdHdpc2Ugc2hpZnQpIGFuZCBlbmFibGVzIGEgS1ZNIENQVSBmZWF0dXJlIChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKSB1bmNvbmRpdGlvbmFsbHkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGJ1ZmZlcnMsIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMsIG9yIGNvcHlpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgxYTA5NDc0MzE0ZDZkMmYyMzE4MTExYWRiODM5Y2E2NzhiYjFiYzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjIyOjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaAppbmRleCAzZjUwOTQyYmRmZTZjLi5hYzgyZGQwOWZjZTUyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaApAQCAtOSw2ICYjNDM7OSw4IEBACiAjZGVmaW5lIEtWTV9TMzkwX0JTQ0FfQ1BVX1NMT1RTIDY0CiAjZGVmaW5lIEtWTV9TMzkwX0VTQ0FfQ1BVX1NMT1RTIDI0OAogCiYjNDM7I2RlZmluZSBTQ0JfQUxJR05NRU5UX1NISUZUIDkKJiM0MzsKICNkZWZpbmUgU0lHUF9DVFJMX0MJCTB4ODAKICNkZWZpbmUgU0lHUF9DVFJMX1NDTl9NQVNLCTB4M2YKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDE1MGI1ZGQyMTcwZTIuLmM2NzlkOGY4M2MwZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTQ1NSw4ICYjNDM7NDU1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGt2bV9zMzkwX2NwdV9mZWF0X2luaXQodm9pZCkKIAkgICAgIXRlc3RfZmFjaWxpdHkoMykgfHwgIW5lc3RlZCkKIAkJcmV0dXJuOwogCWFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUX1NJRUYyKTsKLQlpZiAoc2NscC5oYXNfNjRic2NhbykKLQkJYWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTyk7CiYjNDM7CWFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pOwogCWlmIChzY2xwLmhhc19zaWlmKQogCQlhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUlGKTsKIAlpZiAoc2NscC5oYXNfZ3BlcmUpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ZzaWUuYyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jCmluZGV4IGVlYTI0NTYyZTdkYjIuLmViNjBhMzU5ZDBhYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vdnNpZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jCkBAIC0zMywxMCAmIzQzOzMzLDcgQEAgZW51bSB2c2llX3BhZ2VfZmxhZ3MgewogCiBzdHJ1Y3QgdnNpZV9wYWdlIHsKIAlzdHJ1Y3Qga3ZtX3MzOTBfc2llX2Jsb2NrIHNjYl9zOwkvKiAweDAwMDAgKi8KLQkvKgotCSAqIHRoZSBiYWNrdXAgaW5mbyBmb3IgbWFjaGluZSBjaGVjay4gZW5zdXJlIGl0JiMzOTtzIGF0Ci0JICogdGhlIHNhbWUgb2Zmc2V0IGFzIHRoYXQgaW4gc3RydWN0IHNpZV9wYWdlIQotCSAqLwomIzQzOwkvKiBiYWNrdXAgaW5mbyBmb3IgbWFjaGluZSBjaGVjayAqLwogCXN0cnVjdCBtY2NrX3ZvbGF0aWxlX2luZm8gbWNja19pbmZvOyAgICAvKiAweDAyMDAgKi8KIAkvKgogCSAqIFRoZSBwaW5uZWQgb3JpZ2luYWwgc2NiLiBCZSBhd2FyZSB0aGF0IG90aGVyIFZDUFVzIGNhbiBtb2RpZnkKQEAgLTcxLDYgJiM0Mzs2OCw4IEBAIHN0cnVjdCB2c2llX3BhZ2UgewogfTsKIAogc3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IHZzaWVfcGFnZSkgPT0gUEFHRV9TSVpFKTsKJiM0MztzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2c2llX3BhZ2UsIG1jY2tfaW5mbykgPT0gb2Zmc2V0b2Yoc3RydWN0IHNpZV9wYWdlLCBtY2NrX2luZm8pKTsKJiM0MztzdGF0aWNfYXNzZXJ0KElTX0FMSUdORUQob2Zmc2V0b2Yoc3RydWN0IHZzaWVfcGFnZSwgY3J5Y2IpLCA4KSk7CiAKIC8qIHRyaWdnZXIgYSB2YWxpZGl0eSBpY3B0IGZvciB0aGUgZ2l2ZW4gc2NiICovCiBzdGF0aWMgaW50IHNldF92YWxpZGl0eV9pY3B0KHN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgKnNjYiwKQEAgLTcwMSw3ICYjNDM7NzAwLDcgQEAgc3RhdGljIGludCBwaW5fZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgaHBhX3QgKmhwYSkKIC8qIFVucGlucyBhIHBhZ2UgcHJldmlvdXNseSBwaW5uZWQgdmlhIHBpbl9ndWVzdF9wYWdlLCBtYXJraW5nIGl0IGFzIGRpcnR5LiAqLwogc3RhdGljIHZvaWQgdW5waW5fZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgaHBhX3QgaHBhKQogewotCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkocGZuX3RvX3BhZ2UoaHBhICZndDsmZ3Q7IFBBR0VfU0hJRlQpKTsKJiM0MzsJa3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShwZm5fdG9fcGFnZShwaHlzX3RvX3BmbihocGEpKSk7CiAJLyogbWFyayB0aGUgcGFnZSBhbHdheXMgYXMgZGlydHkgZm9yIG1pZ3JhdGlvbiAqLwogCW1hcmtfcGFnZV9kaXJ0eShrdm0sIGdwYV90b19nZm4oZ3BhKSk7CiB9CkBAIC0xNDg2LDcgJiM0MzsxNDg1LDcgQEAgc3RhdGljIHN0cnVjdCB2c2llX3BhZ2UgKmdldF92c2llX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIpCiAJaW50IG5yX3ZjcHVzOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXZzaWVfcGFnZSA9IHJhZGl4X3RyZWVfbG9va3VwKCZhbXA7a3ZtLSZndDthcmNoLnZzaWUuYWRkcl90b19wYWdlLCBhZGRyICZndDsmZ3Q7IDkpOwomIzQzOwl2c2llX3BhZ2UgPSByYWRpeF90cmVlX2xvb2t1cCgmYW1wO2t2bS0mZ3Q7YXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciAmZ3Q7Jmd0OyBTQ0JfQUxJR05NRU5UX1NISUZUKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlpZiAodnNpZV9wYWdlKSB7CiAJCWlmICh0cnlfZ2V0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpKSB7CkBAIC0xNTI3LDEzICYjNDM7MTUyNiwxNCBAQCBzdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIAkJfQogCQlpZiAodnNpZV9wYWdlLSZndDtzY2JfZ3BhICE9IFVMT05HX01BWCkKIAkJCXJhZGl4X3RyZWVfZGVsZXRlKCZhbXA7a3ZtLSZndDthcmNoLnZzaWUuYWRkcl90b19wYWdlLAotCQkJCQkgIHZzaWVfcGFnZS0mZ3Q7c2NiX2dwYSAmZ3Q7Jmd0OyA5KTsKJiM0MzsJCQkJCSAgdnNpZV9wYWdlLSZndDtzY2JfZ3BhICZndDsmZ3Q7IFNDQl9BTElHTk1FTlRfU0hJRlQpOwogCX0KIAkvKiBNYXJrIGl0IGFzIGludmFsaWQgdW50aWwgaXQgcmVzaWRlcyBpbiB0aGUgdHJlZS4gKi8KIAl2c2llX3BhZ2UtJmd0O3NjYl9ncGEgPSBVTE9OR19NQVg7CiAKIAkvKiBEb3VibGUgdXNlIG9mIHRoZSBzYW1lIGFkZHJlc3Mgb3IgYWxsb2NhdGlvbiBmYWlsdXJlLiAqLwotCWlmIChyYWRpeF90cmVlX2luc2VydCgmYW1wO2t2bS0mZ3Q7YXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciAmZ3Q7Jmd0OyA5LCB2c2llX3BhZ2UpKSB7CiYjNDM7CWlmIChyYWRpeF90cmVlX2luc2VydCgmYW1wO2t2bS0mZ3Q7YXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciAmZ3Q7Jmd0OyBTQ0JfQUxJR05NRU5UX1NISUZULAomIzQzOwkJCSAgICAgIHZzaWVfcGFnZSkpIHsKIAkJcHV0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpOwogCQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2gudnNpZS5tdXRleCk7CiAJCXJldHVybiBOVUxMOwpAQCAtMTU2NSw3ICYjNDM7MTU2NSw2IEBAIGludCBrdm1fczM5MF9oYW5kbGVfdnNpZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtncHN3Lm1hc2sgJmFtcDsgUFNXX01BU0tfUFNUQVRFKQogCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9QUklWSUxFR0VEX09QKTsKIAotCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHZzaWVfcGFnZSkgIT0gUEFHRV9TSVpFKTsKIAlzY2JfYWRkciA9IGt2bV9zMzkwX2dldF9iYXNlX2Rpc3Bfcyh2Y3B1LCBOVUxMKTsKIAogCS8qIDUxMiBieXRlIGFsaWdubWVudCAqLwpAQCAtMTYzMiw3ICYjNDM7MTYzMSw3IEBAIHZvaWQga3ZtX3MzOTBfdnNpZV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSkKIAkJLyogZnJlZSB0aGUgcmFkaXggdHJlZSBlbnRyeSAqLwogCQlpZiAodnNpZV9wYWdlLSZndDtzY2JfZ3BhICE9IFVMT05HX01BWCkKIAkJCXJhZGl4X3RyZWVfZGVsZXRlKCZhbXA7a3ZtLSZndDthcmNoLnZzaWUuYWRkcl90b19wYWdlLAotCQkJCQkgIHZzaWVfcGFnZS0mZ3Q7c2NiX2dwYSAmZ3Q7Jmd0OyA5KTsKJiM0MzsJCQkJCSAgdnNpZV9wYWdlLSZndDtzY2JfZ3BhICZndDsmZ3Q7IFNDQl9BTElHTk1FTlRfU0hJRlQpOwogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdnNpZV9wYWdlKTsKIAl9CiAJa3ZtLSZndDthcmNoLnZzaWUucGFnZV9jb3VudCA9IDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU3CgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDg2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogczM5MCBLVk0gUmVmYWN0b3JpbmcgYW5kIEZlYXR1cmUgRW5hYmxlbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgIGFuZCBgYXJjaC9zMzkwL2t2bS92c2llLmNgLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFib3V0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gbGV0JiMzOTtzIGRpZyBpbi4gSXQmIzM5O3MgcmVwbGFjaW5nIHNvbWUgaGFyZGNvZGVkIHNoaWZ0IHZhbHVlcyB3aXRoIGBTQ0JfQUxJR05NRU5UX1NISUZUYCwgd2hpY2gsIGZyb20gdGhlIGNvZGUsIEkga25vdyBpcyBqdXN0IDkuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIGZvciBtYWludGFpbmFiaWxpdHkuIEFsc28sIGBocGEgJmd0OyZndDsgUEFHRV9TSElGVGAgaXMgYmVjb21pbmcgYHBoeXNfdG9fcGZuKGhwYSlgLiBBZ2Fpbiwgc291bmRzIGxpa2UgYSBjbGVhbmVyIHdheSB0byBleHByZXNzIHRoZSBzYW1lIHRoaW5nLiBUaGV5JiMzOTtyZSBhZGRpbmcgc29tZSBgc3RhdGljX2Fzc2VydGBzIGFuZCBtb3ZpbmcgY29tbWVudHMgYXJvdW5kIHRvby4KClRoZSBwYXJ0IHRoYXQgZ2F2ZSBtZSBwYXVzZSB3YXMgcmVtb3ZpbmcgdGhlIGBzY2xwLmhhc182NGJzY2FvYCBjaGVjayBiZWZvcmUgZW5hYmxpbmcgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gLiBUaGlzIGZlZWxzIGxpa2UgaXQgbWlnaHQgYmUgYSBzdWJ0bGUgZmVhdHVyZSBlbmFibGVtZW50IHdpdGhvdXQgdGhlIHVzdWFsIGdhdGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHRoZSBndWVzdCBub3cgdXNlIDY0LWJpdCBCU0NBIGV2ZW4gaWYgdGhlIGhvc3QgZG9lc24mIzM5O3QgZnVsbHkgc3VwcG9ydCBpdD8mIzM0OyBCdXQgdGhlbiBJIHJlbWVtYmVyZWQsIHRoaXMgaXMgKmp1c3QqIGEgZmVhdHVyZSBiaXQuIEVuYWJsaW5nIGl0ICpkb2VzbiYjMzk7dCogYXV0b21hdGljYWxseSBjYXVzZSB0aGUgZ3Vlc3QgdG8gdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByaWdodD8gSXQganVzdCBhbGxvd3MgdGhlIGZ1bmN0aW9uYWxpdHkgaWYgdGhlIGhhcmR3YXJlIGlzIHRoZXJlLiBJdCYjMzk7cyBhIGtleSBkaWZmZXJlbmNlIGZyb20gYWxsb2NhdGluZyBvciBjb3B5aW5nIGRhdGEuCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYGFsbG93X2NwdV9mZWF0YC4gSWYgdGhlIGd1ZXN0IHN1YnNlcXVlbnRseSAqdXNlcyogNjQtYml0IEJTQ0EsIGRvZXMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCB0aGF0JiMzOTtzIG5vdCB3aGF0IHRoaXMgYml0IGRvZXMuIElmIHRoZSBob3N0IGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhlIGZlYXR1cmUsIHRoZSBndWVzdCBtYXkgdHJ5IHRvIHVzZSBpdCBidXQgaXQgc2hvdWxkbiYjMzk7dCBhY2Nlc3MgdW5pbml0aWFsaXplZCBkYXRhLiBMZXQgbWUgdGhpbmssIHRoaXMgaXMganVzdCBlbmFibGluZyB0aGUgZmVhdHVyZTsgaXQgZG9lc24mIzM5O3QgaW5pdGlhbGl6ZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGl0c2VsZi4gU2VlbXMgbGlrZSBhIHJlZ3VsYXIgS1ZNIGJ1ZyBvciBmZWF0dXJlIGVuYWJsZW1lbnQsIHNvIG5vdCBhIHByb2JsZW0uCgpOb3cgbGV0IG1lIHJ1biB0aHJvdWdoIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMuIExvb2tpbmcgYXQgYHVucGluX2d1ZXN0X3BhZ2VgOgoKYGBgYwpzdGF0aWMgdm9pZCB1bnBpbl9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBocGFfdCBocGEpCnsKCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkocGZuX3RvX3BhZ2UocGh5c190b19wZm4oaHBhKSkpOwoJLyogbWFyayB0aGUgcGFnZSBhbHdheXMgYXMgZGlydHkgZm9yIG1pZ3JhdGlvbiAqLwoJbWFya19wYWdlX2RpcnR5KGt2bSwgZ3BhX3RvX2dmbihncGEpKTsKfQpgYGAKClRoYXQmIzM5O3MganVzdCByZXBsYWNpbmcgdGhlIGJpdCBzaGlmdCB3aXRoIHRoZSBgcGh5c190b19wZm5gIGhlbHBlciwgd2hpY2ggaXMgY2xlYW5lciBhbmQgc2FmZXIuIFRoZW4gdGhlcmUmIzM5O3MgYGdldF92c2llX3BhZ2VgOgoKYGBgYwoJdnNpZV9wYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoJmFtcDtrdm0tJmd0O2FyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgJmd0OyZndDsgU0NCX0FMSUdOTUVOVF9TSElGVCk7CmBgYAoKQW5vdGhlciBzaW1wbGUgcmVwbGFjZW1lbnQgb2YgYDlgIHdpdGggYFNDQl9BTElHTk1FTlRfU0hJRlRgLiBOb3RoaW5nIHRvIHdvcnJ5IGFib3V0LgoKU28sIGNvbmNsdWRpbmcgdGhlIGFuYWx5c2lzLCBJIHNlZSBubyBpbmRpY2F0aW9uIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBhbnkgcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrcy4gSXQmIzM5O3MgcmVmYWN0b3JpbmcsIG1ha2luZyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlIGFuZCBtYWludGFpbmFibGUsIHBsdXMgZW5hYmxpbmcgYSBDUFUgZmVhdHVyZSB3aGljaCBpdHNlbGYgZG9lc24mIzM5O3QgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gR2l2ZW4gdGhpcywgSSBjYW4gY29uZmlkZW50bHkgc3RhdGUgdGhhdCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQmIzM5O3MgYSBsb3ctcmlzayBjaGFuZ2UuIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwZXJmb3JtcyBtaW5vciByZWZhY3RvcmluZyAocmVwbGFjaW5nIGhhcmRjb2RlZCBzaGlmdCB2YWx1ZXMgd2l0aCBhIG1hY3JvLCB1c2luZyBwaHlzX3RvX3BmbiBpbnN0ZWFkIG9mIGJpdHdpc2Ugc2hpZnQpIGFuZCBlbmFibGVzIGEgS1ZNIENQVSBmZWF0dXJlIChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKSB1bmNvbmRpdGlvbmFsbHkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGJ1ZmZlcnMsIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMsIG9yIGNvcHlpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwZXJmb3JtcyBtaW5vciByZWZhY3RvcmluZyAocmVwbGFjaW5nIGhhcmRjb2RlZCBzaGlmdCB2YWx1ZXMgd2l0aCBhIG1hY3JvLCB1c2luZyBwaHlzX3RvX3BmbiBpbnN0ZWFkIG9mIGJpdHdpc2Ugc2hpZnQpIGFuZCBlbmFibGVzIGEgS1ZNIENQVSBmZWF0dXJlIChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKSB1bmNvbmRpdGlvbmFsbHkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGJ1ZmZlcnMsIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMsIG9yIGNvcHlpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIyOjMyLjYyMzg3ODA4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDc4NDk1ODY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfdnNpZVwiLFxuICAgIFwia3ZtX3MzOTBfdm1fc2V0X2F0dHJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHBlcmZvcm1zIG1pbm9yIHJlZmFjdG9yaW5nIChyZXBsYWNpbmcgaGFyZGNvZGVkIHNoaWZ0IHZhbHVlcyB3aXRoIGEgbWFjcm8sIHVzaW5nIHBoeXNfdG9fcGZuIGluc3RlYWQgb2YgYml0d2lzZSBzaGlmdCkgYW5kIGVuYWJsZXMgYSBLVk0gQ1BVIGZlYXR1cmUgKEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pIHVuY29uZGl0aW9uYWxseS4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgYWxsb2NhdGluZyBuZXcgYnVmZmVycywgbW9kaWZ5aW5nIGRhdGEgbGVuZ3Rocywgb3IgY29weWluZyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmdW5jdGlvbmFsbHkgY2hhbmdlcyBLVk0gQ1BVIGZlYXR1cmUgaW5pdGlhbGl6YXRpb24gYnkgdW5jb25kaXRpb25hbGx5IGFsbG93aW5nIEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8uIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBlbmFibGUgdGhlIDY0LWJpdCBCU0NBIG9yaWdpbiBmZWF0dXJlIGZvciBhIGd1ZXN0LCB3aGljaCBhbHRlcnMgaG93IHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIGlzIGNhbGN1bGF0ZWQgaW4gYHBpbl9ibG9ja3NgIGR1cmluZyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gKHZTSUUpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgdGhlIFNJRSBpbnN0cnVjdGlvbiBpbiBhIGd1ZXN0LCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjI6MzIuNjIzODg1Mzc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY3OTIyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MWEwOTQ3NDMxNGQ2ZDJmMjMxODExMWFkYjgzOWNhNjc4YmIxYmMyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTI6MjI6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaFxcbmluZGV4IDNmNTA5NDJiZGZlNmMuLmFjODJkZDA5ZmNlNTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaFxcbkBAIC05LDYgKzksOCBAQFxcbiAjZGVmaW5lIEtWTV9TMzkwX0JTQ0FfQ1BVX1NMT1RTIDY0XFxuICNkZWZpbmUgS1ZNX1MzOTBfRVNDQV9DUFVfU0xPVFMgMjQ4XFxuIFxcbisjZGVmaW5lIFNDQl9BTElHTk1FTlRfU0hJRlQgOVxcbitcXG4gI2RlZmluZSBTSUdQX0NUUkxfQ1xcdFxcdDB4ODBcXG4gI2RlZmluZSBTSUdQX0NUUkxfU0NOX01BU0tcXHQweDNmXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG5pbmRleCAxNTBiNWRkMjE3MGUyLi5jNjc5ZDhmODNjMGVjIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbkBAIC00NTUsOCArNDU1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGt2bV9zMzkwX2NwdV9mZWF0X2luaXQodm9pZClcXG4gXFx0ICAgICF0ZXN0X2ZhY2lsaXR5KDMpIHx8ICFuZXN0ZWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lFRjIpO1xcbi1cXHRpZiAoc2NscC5oYXNfNjRic2NhbylcXG4tXFx0XFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTyk7XFxuK1xcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pO1xcbiBcXHRpZiAoc2NscC5oYXNfc2lpZilcXG4gXFx0XFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lJRik7XFxuIFxcdGlmIChzY2xwLmhhc19ncGVyZSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS92c2llLmMgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xcbmluZGV4IGVlYTI0NTYyZTdkYjIuLmViNjBhMzU5ZDBhYTAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS92c2llLmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xcbkBAIC0zMywxMCArMzMsNyBAQCBlbnVtIHZzaWVfcGFnZV9mbGFncyB7XFxuIFxcbiBzdHJ1Y3QgdnNpZV9wYWdlIHtcXG4gXFx0c3RydWN0IGt2bV9zMzkwX3NpZV9ibG9jayBzY2JfcztcXHQvKiAweDAwMDAgKi9cXG4tXFx0LypcXG4tXFx0ICogdGhlIGJhY2t1cCBpbmZvIGZvciBtYWNoaW5lIGNoZWNrLiBlbnN1cmUgaXQncyBhdFxcbi1cXHQgKiB0aGUgc2FtZSBvZmZzZXQgYXMgdGhhdCBpbiBzdHJ1Y3Qgc2llX3BhZ2UhXFxuLVxcdCAqL1xcbitcXHQvKiBiYWNrdXAgaW5mbyBmb3IgbWFjaGluZSBjaGVjayAqL1xcbiBcXHRzdHJ1Y3QgbWNja192b2xhdGlsZV9pbmZvIG1jY2tfaW5mbzsgICAgLyogMHgwMjAwICovXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBwaW5uZWQgb3JpZ2luYWwgc2NiLiBCZSBhd2FyZSB0aGF0IG90aGVyIFZDUFVzIGNhbiBtb2RpZnlcXG5AQCAtNzEsNiArNjgsOCBAQCBzdHJ1Y3QgdnNpZV9wYWdlIHtcXG4gfTtcXG4gXFxuIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpID09IFBBR0VfU0laRSk7XFxuK3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZzaWVfcGFnZSwgbWNja19pbmZvKSA9PSBvZmZzZXRvZihzdHJ1Y3Qgc2llX3BhZ2UsIG1jY2tfaW5mbykpO1xcbitzdGF0aWNfYXNzZXJ0KElTX0FMSUdORUQob2Zmc2V0b2Yoc3RydWN0IHZzaWVfcGFnZSwgY3J5Y2IpLCA4KSk7XFxuIFxcbiAvKiB0cmlnZ2VyIGEgdmFsaWRpdHkgaWNwdCBmb3IgdGhlIGdpdmVuIHNjYiAqL1xcbiBzdGF0aWMgaW50IHNldF92YWxpZGl0eV9pY3B0KHN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgKnNjYixcXG5AQCAtNzAxLDcgKzcwMCw3IEBAIHN0YXRpYyBpbnQgcGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90ICpocGEpXFxuIC8qIFVucGlucyBhIHBhZ2UgcHJldmlvdXNseSBwaW5uZWQgdmlhIHBpbl9ndWVzdF9wYWdlLCBtYXJraW5nIGl0IGFzIGRpcnR5LiAqL1xcbiBzdGF0aWMgdm9pZCB1bnBpbl9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBocGFfdCBocGEpXFxuIHtcXG4tXFx0a3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShwZm5fdG9fcGFnZShocGEgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCkpO1xcbitcXHRrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBmbl90b19wYWdlKHBoeXNfdG9fcGZuKGhwYSkpKTtcXG4gXFx0LyogbWFyayB0aGUgcGFnZSBhbHdheXMgYXMgZGlydHkgZm9yIG1pZ3JhdGlvbiAqL1xcbiBcXHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBncGFfdG9fZ2ZuKGdwYSkpO1xcbiB9XFxuQEAgLTE0ODYsNyArMTQ4NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiBcXHRpbnQgbnJfdmNwdXM7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdHZzaWVfcGFnZSA9IHJhZGl4X3RyZWVfbG9va3VwKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXFx1MDAzZVxcdTAwM2UgOSk7XFxuK1xcdHZzaWVfcGFnZSA9IHJhZGl4X3RyZWVfbG9va3VwKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXFx1MDAzZVxcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRpZiAodnNpZV9wYWdlKSB7XFxuIFxcdFxcdGlmICh0cnlfZ2V0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpKSB7XFxuQEAgLTE1MjcsMTMgKzE1MjYsMTQgQEAgc3RhdGljIHN0cnVjdCB2c2llX3BhZ2UgKmdldF92c2llX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKHZzaWVfcGFnZS1cXHUwMDNlc2NiX2dwYSAhPSBVTE9OR19NQVgpXFxuIFxcdFxcdFxcdHJhZGl4X3RyZWVfZGVsZXRlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsXFxuLVxcdFxcdFxcdFxcdFxcdCAgdnNpZV9wYWdlLVxcdTAwM2VzY2JfZ3BhIFxcdTAwM2VcXHUwMDNlIDkpO1xcbitcXHRcXHRcXHRcXHRcXHQgIHZzaWVfcGFnZS1cXHUwMDNlc2NiX2dwYSBcXHUwMDNlXFx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZUKTtcXG4gXFx0fVxcbiBcXHQvKiBNYXJrIGl0IGFzIGludmFsaWQgdW50aWwgaXQgcmVzaWRlcyBpbiB0aGUgdHJlZS4gKi9cXG4gXFx0dnNpZV9wYWdlLVxcdTAwM2VzY2JfZ3BhID0gVUxPTkdfTUFYO1xcbiBcXG4gXFx0LyogRG91YmxlIHVzZSBvZiB0aGUgc2FtZSBhZGRyZXNzIG9yIGFsbG9jYXRpb24gZmFpbHVyZS4gKi9cXG4tXFx0aWYgKHJhZGl4X3RyZWVfaW5zZXJ0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXFx1MDAzZVxcdTAwM2UgOSwgdnNpZV9wYWdlKSkge1xcbitcXHRpZiAocmFkaXhfdHJlZV9pbnNlcnQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciBcXHUwMDNlXFx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZULFxcbitcXHRcXHRcXHQgICAgICB2c2llX3BhZ2UpKSB7XFxuIFxcdFxcdHB1dF92c2llX3BhZ2UodnNpZV9wYWdlKTtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudnNpZS5tdXRleCk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC0xNTY1LDcgKzE1NjUsNiBAQCBpbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWdwc3cubWFzayBcXHUwMDI2IFBTV19NQVNLX1BTVEFURSlcXG4gXFx0XFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fUFJJVklMRUdFRF9PUCk7XFxuIFxcbi1cXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpICE9IFBBR0VfU0laRSk7XFxuIFxcdHNjYl9hZGRyID0ga3ZtX3MzOTBfZ2V0X2Jhc2VfZGlzcF9zKHZjcHUsIE5VTEwpO1xcbiBcXG4gXFx0LyogNTEyIGJ5dGUgYWxpZ25tZW50ICovXFxuQEAgLTE2MzIsNyArMTYzMSw3IEBAIHZvaWQga3ZtX3MzOTBfdnNpZV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0XFx0LyogZnJlZSB0aGUgcmFkaXggdHJlZSBlbnRyeSAqL1xcbiBcXHRcXHRpZiAodnNpZV9wYWdlLVxcdTAwM2VzY2JfZ3BhICE9IFVMT05HX01BWClcXG4gXFx0XFx0XFx0cmFkaXhfdHJlZV9kZWxldGUoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICB2c2llX3BhZ2UtXFx1MDAzZXNjYl9ncGEgXFx1MDAzZVxcdTAwM2UgOSk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgdnNpZV9wYWdlLVxcdTAwM2VzY2JfZ3BhIFxcdTAwM2VcXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQpO1xcbiBcXHRcXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdnNpZV9wYWdlKTtcXG4gXFx0fVxcbiBcXHRrdm0tXFx1MDAzZWFyY2gudnNpZS5wYWdlX2NvdW50ID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjI6MzMuMTMxNjQyMzkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTczNjI5MDgzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3MzOTBfaGFuZGxlX3ZzaWVcIixcbiAgICBcImt2bV9zMzkwX3ZtX3NldF9hdHRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZnVuY3Rpb25hbGx5IGNoYW5nZXMgS1ZNIENQVSBmZWF0dXJlIGluaXRpYWxpemF0aW9uIGJ5IHVuY29uZGl0aW9uYWxseSBhbGxvd2luZyBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPLiBUaGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8gZW5hYmxlIHRoZSA2NC1iaXQgQlNDQSBvcmlnaW4gZmVhdHVyZSBmb3IgYSBndWVzdCwgd2hpY2ggYWx0ZXJzIGhvdyB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBpcyBjYWxjdWxhdGVkIGluIGBwaW5fYmxvY2tzYCBkdXJpbmcgbmVzdGVkIHZpcnR1YWxpemF0aW9uICh2U0lFKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHRoZSBTSUUgaW5zdHJ1Y3Rpb24gaW4gYSBndWVzdCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgxYTA5NDc0MzE0ZDZkMmYyMzE4MTExYWRiODM5Y2E2NzhiYjFiYzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjIyOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaFxuaW5kZXggM2Y1MDk0MmJkZmU2Yy4uYWM4MmRkMDlmY2U1MiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF90eXBlcy5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaFxuQEAgLTksNiArOSw4IEBAXG4gI2RlZmluZSBLVk1fUzM5MF9CU0NBX0NQVV9TTE9UUyA2NFxuICNkZWZpbmUgS1ZNX1MzOTBfRVNDQV9DUFVfU0xPVFMgMjQ4XG4gXG4rI2RlZmluZSBTQ0JfQUxJR05NRU5UX1NISUZUIDlcbitcbiAjZGVmaW5lIFNJR1BfQ1RSTF9DXHRcdDB4ODBcbiAjZGVmaW5lIFNJR1BfQ1RSTF9TQ05fTUFTS1x0MHgzZlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggMTUwYjVkZDIxNzBlMi4uYzY3OWQ4ZjgzYzBlYyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtNDU1LDggKzQ1NSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1fczM5MF9jcHVfZmVhdF9pbml0KHZvaWQpXG4gXHQgICAgIXRlc3RfZmFjaWxpdHkoMykgfHwgIW5lc3RlZClcbiBcdFx0cmV0dXJuO1xuIFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lFRjIpO1xuLVx0aWYgKHNjbHAuaGFzXzY0YnNjYW8pXG4tXHRcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pO1xuK1x0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTyk7XG4gXHRpZiAoc2NscC5oYXNfc2lpZilcbiBcdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lJRik7XG4gXHRpZiAoc2NscC5oYXNfZ3BlcmUpXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS92c2llLmMgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuaW5kZXggZWVhMjQ1NjJlN2RiMi4uZWI2MGEzNTlkMGFhMCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vdnNpZS5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuQEAgLTMzLDEwICszMyw3IEBAIGVudW0gdnNpZV9wYWdlX2ZsYWdzIHtcbiBcbiBzdHJ1Y3QgdnNpZV9wYWdlIHtcbiBcdHN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgc2NiX3M7XHQvKiAweDAwMDAgKi9cbi1cdC8qXG4tXHQgKiB0aGUgYmFja3VwIGluZm8gZm9yIG1hY2hpbmUgY2hlY2suIGVuc3VyZSBpdCdzIGF0XG4tXHQgKiB0aGUgc2FtZSBvZmZzZXQgYXMgdGhhdCBpbiBzdHJ1Y3Qgc2llX3BhZ2UhXG4tXHQgKi9cbitcdC8qIGJhY2t1cCBpbmZvIGZvciBtYWNoaW5lIGNoZWNrICovXG4gXHRzdHJ1Y3QgbWNja192b2xhdGlsZV9pbmZvIG1jY2tfaW5mbzsgICAgLyogMHgwMjAwICovXG4gXHQvKlxuIFx0ICogVGhlIHBpbm5lZCBvcmlnaW5hbCBzY2IuIEJlIGF3YXJlIHRoYXQgb3RoZXIgVkNQVXMgY2FuIG1vZGlmeVxuQEAgLTcxLDYgKzY4LDggQEAgc3RydWN0IHZzaWVfcGFnZSB7XG4gfTtcbiBcbiBzdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgdnNpZV9wYWdlKSA9PSBQQUdFX1NJWkUpO1xuK3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZzaWVfcGFnZSwgbWNja19pbmZvKSA9PSBvZmZzZXRvZihzdHJ1Y3Qgc2llX3BhZ2UsIG1jY2tfaW5mbykpO1xuK3N0YXRpY19hc3NlcnQoSVNfQUxJR05FRChvZmZzZXRvZihzdHJ1Y3QgdnNpZV9wYWdlLCBjcnljYiksIDgpKTtcbiBcbiAvKiB0cmlnZ2VyIGEgdmFsaWRpdHkgaWNwdCBmb3IgdGhlIGdpdmVuIHNjYiAqL1xuIHN0YXRpYyBpbnQgc2V0X3ZhbGlkaXR5X2ljcHQoc3RydWN0IGt2bV9zMzkwX3NpZV9ibG9jayAqc2NiLFxuQEAgLTcwMSw3ICs3MDAsNyBAQCBzdGF0aWMgaW50IHBpbl9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBocGFfdCAqaHBhKVxuIC8qIFVucGlucyBhIHBhZ2UgcHJldmlvdXNseSBwaW5uZWQgdmlhIHBpbl9ndWVzdF9wYWdlLCBtYXJraW5nIGl0IGFzIGRpcnR5LiAqL1xuIHN0YXRpYyB2b2lkIHVucGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90IGhwYSlcbiB7XG4tXHRrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBmbl90b19wYWdlKGhwYSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkpO1xuK1x0a3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShwZm5fdG9fcGFnZShwaHlzX3RvX3BmbihocGEpKSk7XG4gXHQvKiBtYXJrIHRoZSBwYWdlIGFsd2F5cyBhcyBkaXJ0eSBmb3IgbWlncmF0aW9uICovXG4gXHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBncGFfdG9fZ2ZuKGdwYSkpO1xuIH1cbkBAIC0xNDg2LDcgKzE0ODUsNyBAQCBzdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdGludCBucl92Y3B1cztcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdHZzaWVfcGFnZSA9IHJhZGl4X3RyZWVfbG9va3VwKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLCBhZGRyIFx1MDAzZVx1MDAzZSA5KTtcbitcdHZzaWVfcGFnZSA9IHJhZGl4X3RyZWVfbG9va3VwKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLCBhZGRyIFx1MDAzZVx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZUKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0aWYgKHZzaWVfcGFnZSkge1xuIFx0XHRpZiAodHJ5X2dldF92c2llX3BhZ2UodnNpZV9wYWdlKSkge1xuQEAgLTE1MjcsMTMgKzE1MjYsMTQgQEAgc3RhdGljIHN0cnVjdCB2c2llX3BhZ2UgKmdldF92c2llX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gXHRcdH1cbiBcdFx0aWYgKHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhICE9IFVMT05HX01BWClcbiBcdFx0XHRyYWRpeF90cmVlX2RlbGV0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSxcbi1cdFx0XHRcdFx0ICB2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSBcdTAwM2VcdTAwM2UgOSk7XG4rXHRcdFx0XHRcdCAgdnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQpO1xuIFx0fVxuIFx0LyogTWFyayBpdCBhcyBpbnZhbGlkIHVudGlsIGl0IHJlc2lkZXMgaW4gdGhlIHRyZWUuICovXG4gXHR2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSA9IFVMT05HX01BWDtcbiBcbiBcdC8qIERvdWJsZSB1c2Ugb2YgdGhlIHNhbWUgYWRkcmVzcyBvciBhbGxvY2F0aW9uIGZhaWx1cmUuICovXG4tXHRpZiAocmFkaXhfdHJlZV9pbnNlcnQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXHUwMDNlXHUwMDNlIDksIHZzaWVfcGFnZSkpIHtcbitcdGlmIChyYWRpeF90cmVlX2luc2VydChcdTAwMjZrdm0tXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciBcdTAwM2VcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCxcbitcdFx0XHQgICAgICB2c2llX3BhZ2UpKSB7XG4gXHRcdHB1dF92c2llX3BhZ2UodnNpZV9wYWdlKTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUubXV0ZXgpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC0xNTY1LDcgKzE1NjUsNiBAQCBpbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ3Bzdy5tYXNrIFx1MDAyNiBQU1dfTUFTS19QU1RBVEUpXG4gXHRcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX1BSSVZJTEVHRURfT1ApO1xuIFxuLVx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgdnNpZV9wYWdlKSAhPSBQQUdFX1NJWkUpO1xuIFx0c2NiX2FkZHIgPSBrdm1fczM5MF9nZXRfYmFzZV9kaXNwX3ModmNwdSwgTlVMTCk7XG4gXG4gXHQvKiA1MTIgYnl0ZSBhbGlnbm1lbnQgKi9cbkBAIC0xNjMyLDcgKzE2MzEsNyBAQCB2b2lkIGt2bV9zMzkwX3ZzaWVfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdC8qIGZyZWUgdGhlIHJhZGl4IHRyZWUgZW50cnkgKi9cbiBcdFx0aWYgKHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhICE9IFVMT05HX01BWClcbiBcdFx0XHRyYWRpeF90cmVlX2RlbGV0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSxcbi1cdFx0XHRcdFx0ICB2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSBcdTAwM2VcdTAwM2UgOSk7XG4rXHRcdFx0XHRcdCAgdnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQpO1xuIFx0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdnNpZV9wYWdlKTtcbiBcdH1cbiBcdGt2bS1cdTAwM2VhcmNoLnZzaWUucGFnZV9jb3VudCA9IDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMjozMy4xMzE2NDUxMzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDIyNDc3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTS9zMzkwIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEtWTSBvbiBzMzkwLCBzcGVjaWZpY2FsbHkgY2hhbmdlcyB0byBga3ZtLXMzOTAuY2AgYW5kIGB2c2llLmNgLCBhbmQgaXQncyBtYWtpbmcgbWUgdGhpbmsgYWJvdXQgZnV6emluZy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGEgbmV3IGAjZGVmaW5lYCBmb3IgU0NCIGFsaWdubWVudCwgYSBiaXQgb2YgdW5jb25kaXRpb25hbCBmZWF0dXJlIGVuYWJsaW5nLCBhbmQgc29tZSBhbGlnbm1lbnQgYW5kIHBvaW50ZXIgYWRqdXN0bWVudHMgaW4gdGhlIHZzaWUgY29kZS5cblxuRmlyc3QsIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgI2RlZmluZSBTQ0JfQUxJR05NRU5UX1NISUZUIDlgIGluIHRoZSBpbmNsdWRlIGZpbGUuIFN0YW5kYXJkIHN0dWZmLiBUaGVuIHRoZSBga3ZtLXMzOTAuY2AgY2hhbmdlIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllOiBpdCAqdW5jb25kaXRpb25hbGx5KiBlbmFibGVzIHRoZSBgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT2AgZmVhdHVyZS4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgY2hlY2sgb24gYHNjbHAuaGFzXzY0YnNjYW9gLCBidXQgdGhhdCBjaGVjayBpcyBub3cgZ29uZS4gT2theSwgc28gdGhhdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZeKAlGl0IGFsdGVycyB0aGUgQ1BVIGZlYXR1cmVzIGV4cG9zZWQgdG8gYSBndWVzdC4gSXQncyBkZWZpbml0ZWx5ICpyZWFjaGFibGUqIHdpdGhpbiBLVk0gb24gczM5MCwgd2hpY2ggaXMgZ29vZC4gQnV0IHRoZSBrZXkgcXVlc3Rpb246IGlzIGl0IGZ1enphYmxlP1xuXG5UaGUgcHJvbXB0IG1lbnRpb25zIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIEJ1dCB3YWl0LCBzMzkweCAqY2FuKiBiZSBydW4gaW4gUUVNVSwgZXZlbiBuZXN0ZWQsIGFuZCBzeXprYWxsZXIgaGFzIHMzOTB4IGluc3RhbmNlcy4gU28sIHRoZSBRRU1VIGJhcnJpZXIgZG9lc27igJl0IGFwcGx5IGhlcmUuIFRoaXMgaXMgcHJvbWlzaW5nLiBTbyB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgY2hhbmdlIHdvcnRoIGZ1enppbmc/XG5cbkxldCdzIGNoZWNrIGBrdm1fczM5MF9jcHVfZmVhdF9pbml0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5zIGlmIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkOyB3aGF0J3MgdGhlIGltcGFjdCBvbiB0aGUgZ3Vlc3QuIFRoZSBgdnNpZS5jYCBjaGFuZ2VzIHNlZW0gbGlrZSBmYWlybHkgc3RhbmRhcmQgYWxpZ25tZW50IGFuZCBtZW1vcnkgbWFwcGluZyBhZGp1c3RtZW50cywgd2hpY2ggYXJlIG9mdGVuIHNvdXJjZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBidXQgdGhlIGZlYXR1cmUgZW5hYmxlbWVudCBpcyB0aGUgYmlnZ2VzdCBjb25jZXJuLiBUaGlzIGlzIGEgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3IsIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzYwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjI6NDIuMTU0MTI2MTEzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTEwMzA4NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfY3B1X2ZlYXRfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Mzc2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX2RmbHRjY19xdWVyeSh1OCAoKnF1ZXJ5KVszMl0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODg6c3RhdGljIHZvaWQgX19pbml0IGt2bV9zMzkwX2NwdV9mZWF0X2luaXQodm9pZClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00OTU9c3RhdGljIGludCBfX2luaXQgX19rdm1fczM5MF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTEwLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1MTE6XFx0a3ZtX3MzOTBfY3B1X2ZlYXRfaW5pdCgpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIyOjQ0LjM2NTE2MTA5N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMjg2MTI3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gczM5MCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIGBrdm1fczM5MF9jcHVfZmVhdF9pbml0YCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBkdXJpbmcgS1ZNIGluaXRpYWxpemF0aW9uLCBhcyBleHBlY3RlZC4gVGhlIHByaW1hcnkgY2hhbmdlIGluIGBrdm0tczM5MC5jYCBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgYGlmIChzY2xwLmhhc182NGJzY2FvKWAgY2hlY2sgYmVmb3JlIGFsbG93aW5nIHRoZSBgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT2AgZmVhdHVyZS4gU28sIHRoZSBmZWF0dXJlIGlzIG5vdyAqYWx3YXlzKiBhbGxvd2VkLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBuZWVkcyBmdXJ0aGVyIHNjcnV0aW55LlxuXG5UaGUgYHZzaWUuY2AgY2hhbmdlcyBsb29rIHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBqdXN0IGEgY291cGxlIG9mIG1hY3JvIHJlcGxhY2VtZW50cy4gUmVwbGFjaW5nIGBwZm5fdG9fcGFnZShocGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpYCB3aXRoIGBrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBmbl90b19wYWdlKHBoeXNfdG9fcGZuKGhwYSkpKWAuLi4gdGhhdCdzIGVmZmVjdGl2ZWx5IHRoZSBzYW1lIHRoaW5nLCBqdXN0IGEgcmUtd3JpdGluZyBvZiBob3cgd2UgZ2V0IHRoZSBQRk4uIFRoZSBzYW1lIGdvZXMgZm9yIHRoZSBgYWRkciBcdTAwM2VcdTAwM2UgOWAgdG8gYGFkZHIgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlRgIGNoYW5nZSwgbWVyZWx5IGFub3RoZXIgbWFjcm8gc3dhcC4gVGhlIGFkZGVkIGBzdGF0aWNfYXNzZXJ0YCBzdGF0ZW1lbnRzIGFyZSBwdXJlbHkgY29tcGlsZS10aW1lIHNhbml0eSBjaGVja3MsIHNvIHRoZXkgZG9uJ3QgaW1wYWN0IHJ1bnRpbWUgYmVoYXZpb3IuXG5cblRoZXJlZm9yZSwgdGhlIG9ubHkgKmZ1bmN0aW9uYWwqIG1vZGlmaWNhdGlvbiBhcHBlYXJzIHRvIGJlIHRoZSB1bmNvbmRpdGlvbmFsIGVuYWJsaW5nIG9mIGBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPYC4gVGhlIG9idmlvdXMgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBhbHRlciB0aGUgcHJvZ3JhbSdzIGV4ZWN1dGlvbiBmbG93PyBJdCBpbXBhY3RzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBLVk0gQ1BVIGZlYXR1cmVzLCB3aGljaCBtZWFucyBpdCBkZWZpbml0ZWx5IGNoYW5nZXMgKmhvdyogdGhlIFZNIGlzIGluaXRpYWxpemVkLiBIb3dldmVyLCBkb2VzIGl0IGNyZWF0ZSBhIGNvZGUgcGF0aCB0aGF0IHdhc24ndCB0aGVyZSBiZWZvcmU/XG5cbk9rYXksIGxldCdzIGNvbnNpZGVyIGZ1enppbmcuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZeKAlGl0J3MgZXNzZW50aWFsbHkgc2V0dGluZyBhIGJpdCBpbiBhIGJpdG1hcCwgdGhlIGFsbG93ZWQgQ1BVIGZlYXR1cmVz4oCUaXQncyBwcm9iYWJseSBub3QgdGhlIG1vc3QgcHJvbWlzaW5nIHRhcmdldCBmb3IgYSBmdXp6aW5nIGNhbXBhaWduLCB1bmxlc3MgdGhpcyBiaXQgZW5hYmxlcyBzb21lIHNlbnNpdGl2ZSB1bmRlcmx5aW5nIGNvZGUuIEl0J3MgcmVhbGx5IHdvcnRoIGRvaW5nIHNvbWUgbWFudWFsIGFuYWx5c2lzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gd2hhdCBgYWxsb3dfY3B1X2ZlYXRgIGFjdHVhbGx5IGRvZXMuIFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgKmFsd2F5cyogZW5hYmxpbmcgdGhpcyBzcGVjaWZpYyBDUFUgZmVhdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBiZWZvcmUgbWFraW5nIGEgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE4MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMjo1MS41OTM3Nzc5NTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MzQ3MTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvd19jcHVfZmVhdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzI5PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga3ZtX2Nsb2NrX25vdGlmaWVyID0ge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMzMi1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzMzOnN0YXRpYyB2b2lkIGFsbG93X2NwdV9mZWF0KHVuc2lnbmVkIGxvbmcgbnIpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMzNC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Mzg4PXN0YXRpYyB2b2lkIF9faW5pdCBrdm1fczM5MF9jcHVfZmVhdF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ4LVxcdGlmIChtYWNoaW5lX2hhc19lc29wKCkpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ0OTpcXHRcXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9FU09QKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDUwLVxcdC8qXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU2LVxcdFxcdHJldHVybjtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDU3OlxcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUX1NJRUYyKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDU4OlxcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTktXFx0aWYgKHNjbHAuaGFzX3NpaWYpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ2MDpcXHRcXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUlGKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDYxLVxcdGlmIChzY2xwLmhhc19ncGVyZSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDYyOlxcdFxcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUX0dQRVJFKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDYzLVxcdGlmIChzY2xwLmhhc19nc2xzKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NjQ6XFx0XFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfR1NMUyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ2NS1cXHRpZiAoc2NscC5oYXNfaWIpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ2NjpcXHRcXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9JQik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ2Ny1cXHRpZiAoc2NscC5oYXNfY2VpKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0Njg6XFx0XFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfQ0VJKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDY5LVxcdGlmIChzY2xwLmhhc19pYnMpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ3MDpcXHRcXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9JQlMpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NzEtXFx0aWYgKHNjbHAuaGFzX2tzcylcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDcyOlxcdFxcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUX0tTUyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ3My1cXHRpZiAoc2NscC5oYXNfYXN0ZmxlaWUyKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NzQ6XFx0XFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfQVNURkxFSUUyKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDc1LVxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIyOjU0LjA0NzI1OTE3MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTg3MDI3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBhIEtWTS9zMzkwIEZlYXR1cmUgQ2hhbmdlKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQncyBqdXN0IGZsaXBwaW5nIGEgYml0LCBsaWtlbHkgd2l0aGluIGEgc3RydWN0dXJlIGxpa2UgYGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHRoYXQgc2lnbmFscyB3aGV0aGVyIGEgcGFydGljdWxhciBDUFUgZmVhdHVyZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGF0J3MgYSBjb21tb24gcGF0dGVybiBpbiB0aGUga2VybmVsLCBhIHNpbXBsZSBmbGFnLWJhc2VkIGFwcHJvYWNoLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMsIHRob3VnaC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRvZ2dsaW5nIHRoYXQgc3BlY2lmaWMgYml0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBgYWxsb3dfY3B1X2ZlYXRgIGFjdHVhbGx5ICpkb2VzKi4gSXMgaXQgYSB3aGl0ZWxpc3QsIGEgYmxhY2tsaXN0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gRG9lcyBpdCBjb250cm9sIHRoZSBmZWF0dXJlJ3MgdmlzaWJpbGl0eSB0byB0aGUgZ3Vlc3QsIGl0cyBhdmFpbGFiaWxpdHkgZHVyaW5nIHZDUFUgY3JlYXRpb24sIG9yIGluZmx1ZW5jZSBzb21lIGludGVybmFsIEtWTSBsb2dpYz8gVGhlIGFuc3dlciB0byB0aGF0IHdpbGwgdGVsbCBtZSB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgY2hhbmdlLiBMZXQncyBkaWcgaW50byB0aGF0IGBhbGxvd19jcHVfZmVhdGAgY29kZSBhbmQgZmlndXJlIG91dCB0aGUgaW1wYWN0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjUyLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjI6NTcuODY1OTY1NjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTc2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzMDpcXHRcXHQubm90aWZpZXJfY2FsbCA9IGt2bV9jbG9ja19zeW5jLFxcbiAzMzE6XFx0fTtcXG4gMzMyOlxcdFxcbiAzMzM6XFx0c3RhdGljIHZvaWQgYWxsb3dfY3B1X2ZlYXQodW5zaWduZWQgbG9uZyBucilcXG4gMzM0OlxcdHtcXG4gMzM1OlxcdFxcdHNldF9iaXRfaW52KG5yLCBrdm1fczM5MF9hdmFpbGFibGVfY3B1X2ZlYXQpO1xcbiAzMzY6XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRzdGF0aWMgaW5saW5lIGludCBwbG9fdGVzdF9iaXQodW5zaWduZWQgY2hhciBucilcXG4gMzM5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjI6NTcuODY2Mjg4MTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTIwNDA3NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHk6IEtWTSBDUFUgRmVhdHVyZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSB0aGF0IHNldHMgYSBiaXQgaW4gYGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdGAuIE15IGZpcnN0IHRob3VnaHQgaXMsIFwiSXMgdGhpcyBzb21ldGhpbmcgdGhhdCB3b3VsZCBiZSB3b3J0aHdoaWxlIHRvIGZ1eno/XCIgT24gdGhlIHN1cmZhY2UsIGl0IHNlZW1zIGZhaXJseSBsaW1pdGVkOyBpdCdzIGp1c3QgYWJvdXQgaG93IEtWTSBDUFUgZmVhdHVyZXMgYXJlIGluaXRpYWxpemVkLiBCdXQgd2FpdCwgSSd2ZSBnb3QgdG8gbG9vayBjbG9zZXIuIEkgc2VlIHRoYXQgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gIGlzIG5vdyB1bmNvbmRpdGlvbmFsbHkgYWxsb3dlZC4gQWhhISBUaGF0IG1lYW5zIHRoZSB1c2Vyc3BhY2UgY2FuIGVuYWJsZSBpdCB0aHJvdWdoIGBLVk1fU0VUX0RFVklDRV9BVFRSYCBvciBhIHNpbWlsYXIgaW50ZXJmYWNlLCB0aGF0IGNoYW5nZXMgdGhpbmdzIHNpZ25pZmljYW50bHkuIE5vdywgdGhpcyBpcyBpbnRlcmVzdGluZy4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBga3ZtX3MzOTBfYXZhaWxhYmxlX2NwdV9mZWF0YCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyB1c2FnZSB0byBmdWxseSBhc3Nlc3MgdGhlIGZ1enppbmcgcG90ZW50aWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzEyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjM6MDEuOTg2Njk4NTg3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA3Mjg5Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjY0PXN0YXRpY19hc3NlcnQoQVJSQVlfU0laRShrdm1fczM5MF9mYWNfZXh0KSBcXHUwMDNjPSBBUlJBWV9TSVpFKHN0ZmxlX2ZhY19saXN0KSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjY2LS8qIGF2YWlsYWJsZSBjcHUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IGt2bSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyNjc6c3RhdGljIERFQ0xBUkVfQklUTUFQKGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdCwgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfTlJfQklUUyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI2OC0vKiBhdmFpbGFibGUgc3ViZnVuY3Rpb25zIGluZGljYXRlZCB2aWEgcXVlcnkgLyBcXFwidGVzdCBiaXRcXFwiICovXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzMzPXN0YXRpYyB2b2lkIGFsbG93X2NwdV9mZWF0KHVuc2lnbmVkIGxvbmcgbnIpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMzNC17XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMzNTpcXHRzZXRfYml0X2ludihuciwga3ZtX3MzOTBfYXZhaWxhYmxlX2NwdV9mZWF0KTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzM2LX1cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xNTQzPXN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3Byb2Nlc3Nvcl9mZWF0KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNTUwLVxcdGlmICghYml0bWFwX3N1YnNldCgodW5zaWduZWQgbG9uZyAqKSBkYXRhLmZlYXQsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjE1NTE6XFx0XFx0XFx0ICAga3ZtX3MzOTBfYXZhaWxhYmxlX2NwdV9mZWF0LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNTUyLVxcdFxcdFxcdCAgIEtWTV9TMzkwX1ZNX0NQVV9GRUFUX05SX0JJVFMpKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTE3ODA9c3RhdGljIGludCBrdm1fczM5MF9nZXRfbWFjaGluZV9mZWF0KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNzg0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxNzg1OlxcdGJpdG1hcF90b19hcnI2NChkYXRhLmZlYXQsIGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdCwgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfTlJfQklUUyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTE3ODYtXFx0aWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhdHRyLVxcdTAwM2VhZGRyLCBcXHUwMDI2ZGF0YSwgc2l6ZW9mKGRhdGEpKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjM6MDQuMTkzOTk2MjIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTY5OTQ2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0OiBLVk0vczM5MHggQ1BVIEZlYXR1cmUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBrdm1fczM5MF9zZXRfcHJvY2Vzc29yX2ZlYXRgIGZ1bmN0aW9uIGluIHRoZSBLVk0vczM5MCBjb2RlLiBJdCBzZWVtcyB0byB2YWxpZGF0ZSB0aGUgQ1BVIGZlYXR1cmVzIHJlcXVlc3RlZCBieSB1c2Vyc3BhY2UgYWdhaW5zdCB3aGF0J3MgYWN0dWFsbHkgYXZhaWxhYmxlLCBuYW1lbHkgYGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdGAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoaXMgY2hhbmdlIHJlbGF0ZWQgdG8gYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gLiBJdCBsb29rcyBsaWtlIHVzZXJzcGFjZSBjYW4gbm93IHJlcXVlc3QgdGhpcyBmZWF0dXJlIGFuZCB0aGUgY2hlY2sgd2lsbCBwYXNzICpldmVuKiBpZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAocmVwcmVzZW50ZWQgYnkgYHNjbHAuaGFzXzY0YnNjYW9gKSBkb2Vzbid0IGFjdHVhbGx5IHN1cHBvcnQgaXQuIFRoaXMgaXMgYSByZWQgZmxhZy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiRG9lcyB0aGlzIGNyZWF0ZSBhIG5ldyB2dWxuZXJhYmlsaXR5IHN1cmZhY2U/XCIgVGhpcyBpcyBhIGNsYXNzaWMgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0LiBJZiB0aGVyZSdzIGEgZGlzY29ubmVjdCBiZXR3ZWVuIHdoYXQncyAqcmVxdWVzdGVkKiBhbmQgd2hhdCdzICpwcmVzZW50KiwgdGhhdCdzIHdoZXJlIGJ1Z3MgdGVuZCB0byBoaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPYCBhY3R1YWxseSAqZG9lcyogd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHNlZSBpZiB0aGlzIGRpc2NyZXBhbmN5IGFjdHVhbGx5IGVuYWJsZXMgYW55IG5ldyBjb2RlIHBhdGhzIHRoYXQgd291bGQgYmUgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZmVhdHVyZSdzIHVzYWdlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc3NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzowOC4zOTA5OTM3MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NDQ0OTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTQyMT1zdHJ1Y3Qga3ZtX3MzOTBfdm1fY3B1X21hY2hpbmUge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtNDM0LSNkZWZpbmUgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lFRjJcXHQxXFxuYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6NDM1OiNkZWZpbmUgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT1xcdDJcXG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC00MzYtI2RlZmluZSBLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUlGXFx0M1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM4OD1zdGF0aWMgdm9pZCBfX2luaXQga3ZtX3MzOTBfY3B1X2ZlYXRfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1Ny1cXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUVGMik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1ODpcXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU5LVxcdGlmIChzY2xwLmhhc19zaWlmKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9NzY1PXN0YXRpYyBpbnQgcGluX2Jsb2NrcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTc3My1cXHRncGEgPSBSRUFEX09OQ0Uoc2NiX28tXFx1MDAzZXNjYW9sKSBcXHUwMDI2IH4weGZVTDtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo3NzQ6XFx0aWYgKHRlc3Rfa3ZtX2NwdV9mZWF0KHZjcHUtXFx1MDAzZWt2bSwgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTykpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzc1LVxcdFxcdGdwYSB8PSAodTY0KSBSRUFEX09OQ0Uoc2NiX28tXFx1MDAzZXNjYW9oKSBcXHUwMDNjXFx1MDAzYyAzMjtcXG4tLVxcbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTQyMT1zdHJ1Y3Qga3ZtX3MzOTBfdm1fY3B1X21hY2hpbmUge1xcbi0tXFxudG9vbHMvYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtNDM0LSNkZWZpbmUgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lFRjJcXHQxXFxudG9vbHMvYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6NDM1OiNkZWZpbmUgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT1xcdDJcXG50b29scy9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC00MzYtI2RlZmluZSBLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUlGXFx0M1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzoxMC44NjU0NDc3MjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2ODI2MjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHMzOTB4IE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBDb2RlKipcblxuT2theSwgbGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGFyY2gvczM5MC9rdm0vdnNpZS5jOjc3NGAgaGVyZS4gQWgsIHJpZ2h0LiBJdCBzZWVtcyB0aGlzIG1vZGlmaWNhdGlvbiBpbXBhY3RzIGhvdyB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcywgb3IgYGdwYWAsIGlzIGNhbGN1bGF0ZWQgd2l0aGluIHRoZSBgcGluX2Jsb2Nrc2AgZnVuY3Rpb24uIEFuZCB0aGlzIGlzIGFsbCBoYXBwZW5pbmcgd2l0aGluIGB2c2llLmNgLCB3aGljaCwgYXMgYSByZW1pbmRlciwgaXMgdGhlIGNvcmUgb2YgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0IGZvciBzMzkweC4gU28sIHRoaXMgY2hhbmdlIGlzIGRlZmluaXRlbHkgYWltZWQgYXQgaW1wcm92aW5nIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBiZWhhdmlvci4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhpcyBtb2RpZmljYXRpb24uIExldCBtZSBnbyBiYWNrIGFuZCByZS1leGFtaW5lIHRoZSBzcGVjaWZpYyBjaGFuZ2VzIHdpdGhpbiBgdnNpZS5jYCBhZ2FpbiwgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk5MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzoxNS40MzM3MTIyNDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDk4ODk5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0NCX0FMSUdOTUVOVF9TSElGVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaC0xMS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaDoxMjojZGVmaW5lIFNDQl9BTElHTk1FTlRfU0hJRlQgOVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF90eXBlcy5oLTEzLVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTQ4Mj1zdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0ODctXFx0cmN1X3JlYWRfbG9jaygpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE0ODg6XFx0dnNpZV9wYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciBcXHUwMDNlXFx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZUKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDg5LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTUyOC1cXHRcXHRcXHRyYWRpeF90cmVlX2RlbGV0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE1Mjk6XFx0XFx0XFx0XFx0XFx0ICB2c2llX3BhZ2UtXFx1MDAzZXNjYl9ncGEgXFx1MDAzZVxcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTUzMC1cXHR9XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTM0LVxcdC8qIERvdWJsZSB1c2Ugb2YgdGhlIHNhbWUgYWRkcmVzcyBvciBhbGxvY2F0aW9uIGZhaWx1cmUuICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTUzNTpcXHRpZiAocmFkaXhfdHJlZV9pbnNlcnQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciBcXHUwMDNlXFx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZULFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1MzYtXFx0XFx0XFx0ICAgICAgdnNpZV9wYWdlKSkge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTYxOT12b2lkIGt2bV9zMzkwX3ZzaWVfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjMzLVxcdFxcdFxcdHJhZGl4X3RyZWVfZGVsZXRlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTYzNDpcXHRcXHRcXHRcXHRcXHQgIHZzaWVfcGFnZS1cXHUwMDNlc2NiX2dwYSBcXHUwMDNlXFx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZUKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjM1LVxcdFxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl2c2llX3BhZ2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzoxNy42ODM2MDc1NzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxODYwMzAzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8gRmVhdHVyZSBFbmFibGVtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3QgZmV3IGNoYW5nZXMgYXJlIGp1c3QgY2xlYW51cCDigJMgYWxpZ25pbmcgdGhlIGBTQ0JfQUxJR05NRU5UX1NISUZUYCBjb25zdGFudCwgYW5kIHRoZSBgcGluX2d1ZXN0X3BhZ2VgIHRvIGB1bnBpbl9ndWVzdF9wYWdlYCByZWZhY3RvcmluZywgYW5kIGFkZGluZyBgc3RhdGljX2Fzc2VydGAgc3RhdGVtZW50cyBmb3IgY29tcGlsZS10aW1lIGNoZWNrcywgbm90aGluZyB0byBzZWUgdGhlcmUuIFRoZSByZWFsIHF1ZXN0aW9uIGlzIHRoYXQgc2luZ2xlIGxpbmUgY2hhbmdlOiBgYWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTylgLiAgVGhpcyB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlcyB0aGUgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gIGZlYXR1cmUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyAgSXQgc2VlbXMgc21hbGwsIGJ1dCBpdCdzIGVuYWJsaW5nIHRoZSBndWVzdCB0byB1c2UgYSA2NC1iaXQgQlNDQSBvcmlnaW4uIFRoYXQgYWZmZWN0cyBgcGluX2Jsb2Nrc2AgaW4gYHZzaWUuY2A6XG5cbmBgYGNcblx0aWYgKHRlc3Rfa3ZtX2NwdV9mZWF0KHZjcHUtXHUwMDNla3ZtLCBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKSlcblx0XHRncGEgfD0gKHU2NCkgUkVBRF9PTkNFKHNjYl9vLVx1MDAzZXNjYW9oKSBcdTAwM2NcdTAwM2MgMzI7XG5gYGBcblxuSWYgdGhlIGZlYXR1cmUgaXMgc2V0LCB0aGUgdXBwZXIgMzIgYml0cyBvZiB0aGUgU0NBIG9yaWdpbiBhcmUgbm93IHJlYWQgZnJvbSBgc2NiX28tXHUwMDNlc2Nhb2hgLiBUaGlzIG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpZiB0aGVyZSBhcmUgYW55IGlzc3VlcyBoYW5kbGluZyBhIDY0LWJpdCBHUEEgZm9yIHRoZSBTQ0EuIFN5emthbGxlciBjYW4gZnV6eiBLVk0gb24gczM5MHgsIHNvIGl0J3MgKnJlYWNoYWJsZSouXG5cbkJ1dCBpcyBpdCB3b3J0aCB0aGUgZWZmb3J0PyBUaGUgY2hhbmdlIGlzICp0aW55Ki4gSXQncyBvbmUgbGluZS4gQnV0IGl0J3MgZW5hYmxpbmcgdGhpcyBmZWF0dXJlIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gKHZTSUUpIHJlZ2FyZGxlc3Mgb2YgaG9zdCBzdXBwb3J0ISAgVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLi4uIGlmIHRoZSBob3N0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgNjQtYml0IEJTQ0EgKGBzY2xwLmhhc182NGJzY2FvYCBpcyBmYWxzZSksIEtWTSB3aWxsICplbXVsYXRlKiBpdCBmb3IgdGhlIG5lc3RlZCBndWVzdC4gIFRoZSBjb2RlIGluIGBwaW5fYmxvY2tzYCBhbHJlYWR5ICpleGlzdGVkKiBidXQgaXQncyBub3cgcmVhY2hhYmxlIG9uIGFsbCBob3N0cy5cblxuTm93LCBhIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhlIGVtdWxhdGVkIGhvc3QgaW4gUUVNVSAod2hlcmUgU3l6a2FsbGVyIHJ1bnMpICphbHJlYWR5KiBoYXZlIGBzY2xwLmhhc182NGJzY2FvYD8gSWYgUUVNVSAqZGlkKiBwcm92aWRlIGl0LCB0aGlzIGNvZGUgd2FzIGFscmVhZHkgcmVhY2hhYmxlLiAgSWYgaXQgKmRpZG4ndCosIHRoaXMgaXMgKm5ld2x5KiByZWFjaGFibGUgY29kZS4gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY2hhbmdlcywgYW5kIG5vcGUsIHRoYXQgaXMgdGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblNvLCB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyOiBJdCAqaXMqIGEgbWlub3IgY2hhbmdlIChqdXN0IGVuYWJsaW5nIGEgZmxhZykuIEhvd2V2ZXIsIGl0ICpkb2VzKiBjaGFuZ2UgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGBwaW5fYmxvY2tzYC4gSSdsbCBkZWx2ZSBpbnRvIHRoZSBgcGluX2Jsb2Nrc2AgaW4gYHZzaWUuY2AgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBwb3RlbnRpYWwgZm9yIGV4cGxvaXRhdGlvbi4gSXQncyB0aW1lIHRvIGNoZWNrIHdoYXQgYHBpbl9ibG9ja3NgICpkb2VzKi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5OTIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjM6MjkuODY5NjQwNzA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgzNzM3Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBpbl9ibG9ja3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS92c2llLmM9NzAxPXN0YXRpYyB2b2lkIHVucGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90IGhwYSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTcwNy1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo3MDg6LyogdW5waW4gYWxsIGJsb2NrcyBwcmV2aW91c2x5IHBpbm5lZCBieSBwaW5fYmxvY2tzKCksIG1hcmtpbmcgdGhlbSBkaXJ0eSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjcwOTpzdGF0aWMgdm9pZCB1bnBpbl9ibG9ja3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzEwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTc2NC0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo3NjU6c3RhdGljIGludCBwaW5fYmxvY2tzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTc2Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy04NzctdW5waW46XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6ODc4OlxcdHVucGluX2Jsb2Nrcyh2Y3B1LCB2c2llX3BhZ2UpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTg3OS1cXHRyZXR1cm4gcmM7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xNTU2PWludCBrdm1fczM5MF9oYW5kbGVfdnNpZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTkzLVxcdFxcdGdvdG8gb3V0X3VucGluX3NjYjtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNTk0OlxcdHJjID0gcGluX2Jsb2Nrcyh2Y3B1LCB2c2llX3BhZ2UpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1OTUtXFx0aWYgKHJjKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU5OS1cXHR1bnJlZ2lzdGVyX3NoYWRvd19zY2IodmNwdSk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTYwMDpcXHR1bnBpbl9ibG9ja3ModmNwdSwgdnNpZV9wYWdlKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjAxLW91dF91bnNoYWRvdzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjM6MzIuMTUzMzgzMzE5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Nzk4Njk1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcGluX2Jsb2Nrc2AgRnVuY3Rpb24gQ2FsbCoqXG5cbk9rYXksIHNvIGBwaW5fYmxvY2tzYCBnZXRzIGNhbGxlZCBmcm9tIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAuIFRoYXQgbWVhbnMgdGhlIGBTSUVgIGluc3RydWN0aW9uIOKAkyBuZXN0ZWQgdmlydHVhbGl6YXRpb24g4oCTIGlzIHRoZSBrZXkgaGVyZS4gV2hlbiBhIGd1ZXN0IGlzc3VlcyBhbiBgU0lFYCBpbnN0cnVjdGlvbiwgdGhlIGNvbnRyb2wgZmxvdyBoaXRzIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHBpbl9ibG9ja3NgLiBOb3csIGlmIGBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPYCBpcyBlbmFibGVkLCB0aGUgY29kZSB3aWxsIHJlYWQgYHNjYW9oYCBhbmQgdXNlIGl0IGZvciB0aGUgR1BBLiBUaGF0J3MgYSBjbGVhciBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIGNvcmUgS1ZNIHMzOTB4IGxvZ2ljLCBubyBxdWVzdGlvbi4gVGhlcmVmb3JlLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcsIEknbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgIGxvb2tzIGxpa2UgdGhlIG9idmlvdXMgY2hvaWNlLiBJdCdzIHRoZSBlbnRyeSBwb2ludCBmb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBhbmQgdGhhdCdzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBgcGluX2Jsb2Nrc2AgaXMgc3RhdGljLCBzbyBpdCAqbWlnaHQqIGJlIGlubGluZWQuIEJ1dCBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgIGlzIG5vdC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgaXNuJ3Qgc3RhdGljIGFuZCBpcyBleHBvcnRlZCwganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA2MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzozNy44MzMyNTY5ODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzE5MzE1MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfaGFuZGxlX3ZzaWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTQ0Mj1pbnQga3ZtX3MzOTBfc2tleV9jaGVja19lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC00NDQtLyogaW1wbGVtZW50ZWQgaW4gdnNpZS5jICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oOjQ0NTppbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtNDQ2LXZvaWQga3ZtX3MzOTBfdnNpZV9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz05NTg9aW50IGt2bV9zMzkwX2hhbmRsZV9iMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NzEtXFx0Y2FzZSAweDE0OlxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjk3MjpcXHRcXHRyZXR1cm4ga3ZtX3MzOTBfaGFuZGxlX3ZzaWUodmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtOTczLVxcdGNhc2UgMHgyMTpcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTE0ODI9c3RhdGljIHN0cnVjdCB2c2llX3BhZ2UgKmdldF92c2llX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTU1LVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE1NTY6aW50IGt2bV9zMzkwX2hhbmRsZV92c2llKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTU3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjM6NDAuMDY1MTk2NjE3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTY1MjE3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYGt2bV9zMzkwX2hhbmRsZV92c2llYCBpcyB0aGUgY2xlYXIgc3RhcnRpbmcgcG9pbnQuIEl0J3Mgbm9uLXN0YXRpYywgbWVhbmluZyBpdCdzIGV4dGVybmFsbHkgdmlzaWJsZSwgYW5kIGl0J3MgY2FsbGVkIGRpcmVjdGx5IGZyb20gYGt2bV9zMzkwX2hhbmRsZV9iMmAuICBBbmQsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYDB4YjIxNGAgY29ycmVzcG9uZHMgdG8gdGhlIFN5c3RlbSBJbnN0cnVjdGlvbiBFeGVjdXRpb24gKFNJRSkgaW5zdHJ1Y3Rpb24uIFBlcmZlY3QuIFRoYXQncyBhIHNvbGlkLCBpZGVudGlmaWFibGUgZW50cnkgcG9pbnQgZm9yIGFuYWx5c2lzIHJlbGF0ZWQgdG8gVlNJRS5cblxuTm93LCBsZXQncyBicm9hZGVuIHRoZSBuZXQgYSBiaXQuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZD8gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBmZWF0dXJlIGlzICplbmFibGVkKiBmcm9tIHVzZXJzcGFjZS4gQWgsIHllcywgYGt2bV9zMzkwX3NldF9wcm9jZXNzb3JfZmVhdGAuICBUaGF0IHdvdWxkIGJlIHdoZXJlIHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIHRvIGFjdGl2YXRlIHRoZSBmZWF0dXJlLiBJIHNob3VsZCBhZGQgdGhhdCB0byB0aGUgbGlzdCBvZiBrZXkgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEwNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzo0NC41MjE3MjI4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2OTg1NTgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9zZXRfcHJvY2Vzc29yX2ZlYXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTE0OTc9c3RhdGljIGludCBrdm1fczM5MF9zZXRfcHJvY2Vzc29yKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNTQyLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxNTQzOnN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3Byb2Nlc3Nvcl9mZWF0KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTU0NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xNjgyPXN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NwdV9tb2RlbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTY5MC1cXHRjYXNlIEtWTV9TMzkwX1ZNX0NQVV9QUk9DRVNTT1JfRkVBVDpcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTY5MTpcXHRcXHRyZXQgPSBrdm1fczM5MF9zZXRfcHJvY2Vzc29yX2ZlYXQoa3ZtLCBhdHRyKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTY5Mi1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjM6NDYuNzkxNTg0MTY2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODA3MjM3MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlbHZpbmcgaW50byBDUFUgTW9kZWwgQXR0cmlidXRlcyB3aXRoIGBrdm1fczM5MF9zZXRfY3B1X21vZGVsYCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCwgYGt2bV9zMzkwX3NldF9jcHVfbW9kZWxgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBjb25maWd1cmluZyB0aGUgZW11bGF0ZWQgQ1BVJ3MgcGVyc29uYWxpdHkgd2l0aGluIHRoZSBLVk0vczM5MCBmcmFtZXdvcmsuIEl0J3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBjZW50cmFsIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgYW5kIGludGVycHJldHMgcmVxdWVzdHMgdG8gYWx0ZXIgdGhlIHBlcmNlaXZlZCBDUFUgbW9kZWwgcHJlc2VudGVkIHRvIHRoZSBndWVzdCBvcGVyYXRpbmcgc3lzdGVtLiBJdOKAmXMgd2hlcmUgdGhlIGFic3RyYWN0aW9uIG9mIHRoZSBwaHlzaWNhbCBDUFUgY2FwYWJpbGl0aWVzIGlzIHNoYXBlZCB0byBmaXQgdGhlIG5lZWRzIG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUuXG5cbkknbSBpbnN0YW50bHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2hhdCBraW5kIG9mIGF0dHJpYnV0ZXMgYXJlIHdlIHNldHRpbmcgaGVyZT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gc2V0IGZlYXR1cmVzLCBjYXBhYmlsaXRpZXMgbGlrZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLCBwZXJmb3JtYW5jZSBjb3VudGVycywgb3IgcGVyaGFwcyBldmVuIG1pY3JvY29kZSBsZXZlbHM/IFVuZGVyc3RhbmRpbmcgdGhlIHByZWNpc2UgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBpcyBwYXJhbW91bnQuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgbG9naWMgd2l0aGluIGBrdm1fczM5MF9zZXRfY3B1X21vZGVsYCB0byBncmFzcCBob3cgaXQgdHJhbnNsYXRlcyB0aG9zZSByZXF1ZXN0cyBpbnRvIHRoZSBhY3R1YWwgQ1BVIG1vZGVsIHRoZSBndWVzdCB3aWxsIHNlZS4gQXJlIHRoZXJlIGFueSByZXN0cmljdGlvbnMsIGRlZmF1bHQgbW9kZWxzLCBvciB2YWxpZGF0aW9uIGNoZWNrcyBpbnZvbHZlZD8gQW55IHBvdGVudGlhbCBmb3IgaW5jb21wYXRpYmlsaXR5IG9yIG1pc2NvbmZpZ3VyYXRpb24gaWYgdGhlc2UgYXR0cmlidXRlcyBhcmUgbm90IHNldCBjb3JyZWN0bHk/IFRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSdzIG92ZXJhbGwgcmVsaWFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlIGFyZSB0cnVseSBkZWZpbmVkLiBXZSBoYXZlIHRvIGJlIG1ldGljdWxvdXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MTcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzo1MS40NzIzMTA3MTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTA0NzQyODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfc2V0X2NwdV9tb2RlbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTY1OD1zdGF0aWMgaW50IGt2bV9zMzkwX3NldF91dl9mZWF0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNjgxLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxNjgyOnN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NwdV9tb2RlbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTE2ODMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIwNDI9c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjA1My1cXHRjYXNlIEtWTV9TMzkwX1ZNX0NQVV9NT0RFTDpcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjA1NDpcXHRcXHRyZXQgPSBrdm1fczM5MF9zZXRfY3B1X21vZGVsKGt2bSwgYXR0cik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIwNTUtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIzOjUzLjk2Mjc4OTI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjQ5NjM3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNL3MzOTAgQ29kZSBmb3IgRmVhdHVyZSBFeGVjdXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gaG93IHNwZWNpZmljIGZlYXR1cmVzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgS1ZNL3MzOTAgYXJjaGl0ZWN0dXJlLiBJJ3ZlIGlkZW50aWZpZWQgYGt2bV9zMzkwX3ZtX3NldF9hdHRyYCBhcyB0aGUgaW9jdGwgaGFuZGxlciBmb3IgYEtWTV9TRVRfREVWSUNFX0FUVFJgIG9uIHRoZSBWTSBmaWxlIGRlc2NyaXB0b3IuIFdoaWxlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgaXQncyBub3QgcXVpdGUgYXQgdGhlIGxldmVsIG9mIGRldGFpbCBJJ20gYWZ0ZXIsIGFuZCBJIGJlbGlldmUgYGt2bV9zMzkwX2hhbmRsZV92c2llYCBpcyBhIGJldHRlciBpbmRpY2F0b3Igb2YgdGhlIGFjdHVhbCBleGVjdXRpb24gb2YgYSBzcGVjaWZpYyBmZWF0dXJlLlxuXG5UaGVyZWZvcmUsIGZvciB0aGlzIGludmVzdGlnYXRpb24sIEknbSBnb2luZyB0byBpbmNsdWRlIGJvdGggYGt2bV9zMzkwX2hhbmRsZV92c2llYCBhbmQgYGt2bV9zMzkwX3ZtX3NldF9hdHRyYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgc3lzdGVtIGlzIGJ1aWx0IHdpdGggYENPTkZJR19LVk1gLiBUaGUgY29kZSBpdHNlbGYsIG9mIGNvdXJzZSwgcmVzaWRlcyB3aXRoaW4gdGhlIGBhcmNoL3MzOTAva3ZtL2AgZGlyZWN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUzMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzo1OC41Mjc3NTYzOTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQ5MzU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIzOjU4LjYzOTI1NDY1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NDU2ODgwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS1ZNIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCBgS1ZNYCBpcyBkZWZpbml0ZWx5IHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gcG9pbnQuIEJ1dCBob2xkIG9uLCBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgYEtWTWAgaXMgYSB0cmlzdGF0ZS4gVGhhdCBtZWFucyBpdCBjYW4gYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUg4oCTIGdvb2QgdG8ga25vdy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBLVk0gdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEJlc3QgdG8gYmUgdGhvcm91Z2gsIEkgc3VwcG9zZS4gUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGluIGBhcmNoL3MzOTAva3ZtL01ha2VmaWxlYCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gVGhpcyBNYWtlZmlsZSBpcyB1c3VhbGx5IHdoZXJlIHJlbGF0ZWQgb3B0aW9ucyBhcmUgZ2F0aGVyZWQsIHNvIGhvcGVmdWxseSwgSSdsbCBmaW5kIHdoYXQgSSdtIGxvb2tpbmcgZm9yIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjEyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjI0OjAzLjU4NDk0NzI2MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCMgTWFrZWZpbGUgZm9yIGtlcm5lbCB2aXJ0dWFsIG1hY2hpbmVzIG9uIHMzOTBcXG4gICAzOlxcdCNcXG4gICA0OlxcdCMgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4XFxuICAgNTpcXHRcXG4gICA2OlxcdGluY2x1ZGUgJChzcmN0cmVlKS92aXJ0L2t2bS9NYWtlZmlsZS5rdm1cXG4gICA3OlxcdFxcbiAgIDg6XFx0Y2NmbGFncy15IDo9IC1JdmlydC9rdm0gLUlhcmNoL3MzOTAva3ZtXFxuICAgOTpcXHRcXG4gIDEwOlxcdGt2bS15ICs9IGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3Aub1xcbiAgMTE6XFx0a3ZtLXkgKz0gZGlhZy5vIGdhY2Nlc3MubyBndWVzdGRiZy5vIHZzaWUubyBwdi5vXFxuICAxMjpcXHRrdm0teSArPSBkYXQubyBnbWFwLm8gZmF1bHRpbi5vXFxuICAxMzpcXHRcXG4gIDE0OlxcdGt2bS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgKz0gcGNpLm9cXG4gIDE1OlxcdG9iai0kKENPTkZJR19LVk0pICs9IGt2bS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjI0OjAzLjU4NTA2Mjg3MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzcyMzc5MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgaW5pdGlhbGx5IHRob3VnaHQgYENPTkZJR19LVk1gIHdhcyB0aGUga2V5LCBidXQgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGB2c2llLmNgLCBzaG93cyBpdCdzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDT05GSUdfS1ZNYCBpcyBhY3RpdmUuIFRoZXJlZm9yZSwgYEtWTWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gZmxhZyB0byBmb2N1cyBvbi5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5OlxuXG4qICAgKipGdW5jdGlvbmFsIENoYW5nZToqKiBBYnNvbHV0ZWx5LCB0aGlzIGVuYWJsZXMgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gIHVuY29uZGl0aW9uYWxseS4gSXQgYWx0ZXJzIHRoZSBiZWhhdmlvciwgd2hpY2ggbWFrZXMgaXQgaW50ZXJlc3RpbmcuXG4qICAgKipSZWFjaGFiaWxpdHk6KiogWWVzLCB0aGlzIGlzIHJlYWNoYWJsZSB0aHJvdWdoIEtWTSBpb2N0bHMgYW5kIHRyaWdnZXJlZCBieSB0aGUgYFNJRWAgaW5zdHJ1Y3Rpb24gd2l0aGluIGEgZ3Vlc3QuIFRoYXQncyBhIGNsZWFyIHBhdGggdG8gdHJpZ2dlciB0aGUgY2hhbmdlLlxuKiAgICoqRnV6emFiaWxpdHk6KiogRGVmaW5pdGVseS4gVGhpcyBpbXBhY3RzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiAodlNJRSkgYnkgYWxsb3dpbmcgYSA2NC1iaXQgQlNDQSBvcmlnaW4uIFRoYXQncyBhIHNpZ25pZmljYW50IGVub3VnaCBzaGlmdCBpbiBiZWhhdmlvciB0byB3YXJyYW50IGZ1enppbmcuXG4qICAgKipGb2N1cyBTeW1ib2xzOioqIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIHdpbGwgYmUgYGt2bV9zMzkwX2hhbmRsZV92c2llYCBhbmQgYGt2bV9zMzkwX3ZtX3NldF9hdHRyYC5cbiogICAqKkVuYWJsZSBDb25maWd1cmF0aW9uczoqKiBUaGUgZm9jdXMgaXMgY2xlYXJseSBvbiBgS1ZNYC5cblxuTm93LCBJJ20ganVzdCBkb3VibGUtY2hlY2tpbmcgbXkgY2hvaWNlIG9mIGZvY3VzIHN5bWJvbHMuIElzIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgdGhlICpiZXN0KiBlbnRyeSBwb2ludD8gWWVzLCBpdCBpcy4gSXQncyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGhhbmRsaW5nLiBBbmQsIGBrdm1fczM5MF92bV9zZXRfYXR0cmAgaXMgd2hlcmUgdGhlIENQVSBmZWF0dXJlIGlzIHNldC4gSSB0aGluayB0aGlzIGlzIGEgcm9idXN0IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYzMCwiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyNDoxMC4zNTc0NDQ3NjZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcxMDA4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zMzkwX2hhbmRsZV92c2llXCIsXG4gICAgXCJrdm1fczM5MF92bV9zZXRfYXR0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIEtWTSBDUFUgZmVhdHVyZSBpbml0aWFsaXphdGlvbiBieSB1bmNvbmRpdGlvbmFsbHkgYWxsb3dpbmcgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTy4gVGhpcyBhbGxvd3MgdXNlcnNwYWNlIHRvIGVuYWJsZSB0aGUgNjQtYml0IEJTQ0Egb3JpZ2luIGZlYXR1cmUgZm9yIGEgZ3Vlc3QsIHdoaWNoIGFsdGVycyBob3cgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgaXMgY2FsY3VsYXRlZCBpbiBgcGluX2Jsb2Nrc2AgZHVyaW5nIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiAodlNJRSkuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCB0aGUgU0lFIGluc3RydWN0aW9uIGluIGEgZ3Vlc3QsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zMzkwX2hhbmRsZV92c2llXCIsXG4gICAgXCJrdm1fczM5MF92bV9zZXRfYXR0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIEtWTSBDUFUgZmVhdHVyZSBpbml0aWFsaXphdGlvbiBieSB1bmNvbmRpdGlvbmFsbHkgYWxsb3dpbmcgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTy4gVGhpcyBhbGxvd3MgdXNlcnNwYWNlIHRvIGVuYWJsZSB0aGUgNjQtYml0IEJTQ0Egb3JpZ2luIGZlYXR1cmUgZm9yIGEgZ3Vlc3QsIHdoaWNoIGFsdGVycyBob3cgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgaXMgY2FsY3VsYXRlZCBpbiBgcGluX2Jsb2Nrc2AgZHVyaW5nIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiAodlNJRSkuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCB0aGUgU0lFIGluc3RydWN0aW9uIGluIGEgZ3Vlc3QsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyNDoxMC40OTQ1NTY0NzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTE0MjY3NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjQ6MTAuNDk1MzkyNjUyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyOTEzNDI0NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBwZXJmb3JtcyBtaW5vciByZWZhY3RvcmluZyAocmVwbGFjaW5nIGhhcmRjb2RlZCBzaGlmdCB2YWx1ZXMgd2l0aCBhIG1hY3JvLCB1c2luZyBwaHlzX3RvX3BmbiBpbnN0ZWFkIG9mIGJpdHdpc2Ugc2hpZnQpIGFuZCBlbmFibGVzIGEgS1ZNIENQVSBmZWF0dXJlIChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKSB1bmNvbmRpdGlvbmFsbHkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGJ1ZmZlcnMsIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMsIG9yIGNvcHlpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODFhMDk0NzQzMTRkNmQyZjIzMTgxMTFhZGI4MzljYTY3OGJiMWJjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTI6MjI6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF90eXBlcy5oXG5pbmRleCAzZjUwOTQyYmRmZTZjLi5hYzgyZGQwOWZjZTUyIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF90eXBlcy5oXG5AQCAtOSw2ICs5LDggQEBcbiAjZGVmaW5lIEtWTV9TMzkwX0JTQ0FfQ1BVX1NMT1RTIDY0XG4gI2RlZmluZSBLVk1fUzM5MF9FU0NBX0NQVV9TTE9UUyAyNDhcbiBcbisjZGVmaW5lIFNDQl9BTElHTk1FTlRfU0hJRlQgOVxuK1xuICNkZWZpbmUgU0lHUF9DVFJMX0NcdFx0MHg4MFxuICNkZWZpbmUgU0lHUF9DVFJMX1NDTl9NQVNLXHQweDNmXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5pbmRleCAxNTBiNWRkMjE3MGUyLi5jNjc5ZDhmODNjMGVjIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC00NTUsOCArNDU1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGt2bV9zMzkwX2NwdV9mZWF0X2luaXQodm9pZClcbiBcdCAgICAhdGVzdF9mYWNpbGl0eSgzKSB8fCAhbmVzdGVkKVxuIFx0XHRyZXR1cm47XG4gXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUVGMik7XG4tXHRpZiAoc2NscC5oYXNfNjRic2Nhbylcbi1cdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTyk7XG4rXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKTtcbiBcdGlmIChzY2xwLmhhc19zaWlmKVxuIFx0XHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUlGKTtcbiBcdGlmIChzY2xwLmhhc19ncGVyZSlcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ZzaWUuYyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jXG5pbmRleCBlZWEyNDU2MmU3ZGIyLi5lYjYwYTM1OWQwYWEwIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS92c2llLmNcbisrKyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jXG5AQCAtMzMsMTAgKzMzLDcgQEAgZW51bSB2c2llX3BhZ2VfZmxhZ3Mge1xuIFxuIHN0cnVjdCB2c2llX3BhZ2Uge1xuIFx0c3RydWN0IGt2bV9zMzkwX3NpZV9ibG9jayBzY2JfcztcdC8qIDB4MDAwMCAqL1xuLVx0Lypcbi1cdCAqIHRoZSBiYWNrdXAgaW5mbyBmb3IgbWFjaGluZSBjaGVjay4gZW5zdXJlIGl0J3MgYXRcbi1cdCAqIHRoZSBzYW1lIG9mZnNldCBhcyB0aGF0IGluIHN0cnVjdCBzaWVfcGFnZSFcbi1cdCAqL1xuK1x0LyogYmFja3VwIGluZm8gZm9yIG1hY2hpbmUgY2hlY2sgKi9cbiBcdHN0cnVjdCBtY2NrX3ZvbGF0aWxlX2luZm8gbWNja19pbmZvOyAgICAvKiAweDAyMDAgKi9cbiBcdC8qXG4gXHQgKiBUaGUgcGlubmVkIG9yaWdpbmFsIHNjYi4gQmUgYXdhcmUgdGhhdCBvdGhlciBWQ1BVcyBjYW4gbW9kaWZ5XG5AQCAtNzEsNiArNjgsOCBAQCBzdHJ1Y3QgdnNpZV9wYWdlIHtcbiB9O1xuIFxuIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpID09IFBBR0VfU0laRSk7XG4rc3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdnNpZV9wYWdlLCBtY2NrX2luZm8pID09IG9mZnNldG9mKHN0cnVjdCBzaWVfcGFnZSwgbWNja19pbmZvKSk7XG4rc3RhdGljX2Fzc2VydChJU19BTElHTkVEKG9mZnNldG9mKHN0cnVjdCB2c2llX3BhZ2UsIGNyeWNiKSwgOCkpO1xuIFxuIC8qIHRyaWdnZXIgYSB2YWxpZGl0eSBpY3B0IGZvciB0aGUgZ2l2ZW4gc2NiICovXG4gc3RhdGljIGludCBzZXRfdmFsaWRpdHlfaWNwdChzdHJ1Y3Qga3ZtX3MzOTBfc2llX2Jsb2NrICpzY2IsXG5AQCAtNzAxLDcgKzcwMCw3IEBAIHN0YXRpYyBpbnQgcGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90ICpocGEpXG4gLyogVW5waW5zIGEgcGFnZSBwcmV2aW91c2x5IHBpbm5lZCB2aWEgcGluX2d1ZXN0X3BhZ2UsIG1hcmtpbmcgaXQgYXMgZGlydHkuICovXG4gc3RhdGljIHZvaWQgdW5waW5fZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgaHBhX3QgaHBhKVxuIHtcbi1cdGt2bV9yZWxlYXNlX3BhZ2VfZGlydHkocGZuX3RvX3BhZ2UoaHBhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKSk7XG4rXHRrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBmbl90b19wYWdlKHBoeXNfdG9fcGZuKGhwYSkpKTtcbiBcdC8qIG1hcmsgdGhlIHBhZ2UgYWx3YXlzIGFzIGRpcnR5IGZvciBtaWdyYXRpb24gKi9cbiBcdG1hcmtfcGFnZV9kaXJ0eShrdm0sIGdwYV90b19nZm4oZ3BhKSk7XG4gfVxuQEAgLTE0ODYsNyArMTQ4NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIFx0aW50IG5yX3ZjcHVzO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0dnNpZV9wYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXHUwMDNlXHUwMDNlIDkpO1xuK1x0dnNpZV9wYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpZiAodnNpZV9wYWdlKSB7XG4gXHRcdGlmICh0cnlfZ2V0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpKSB7XG5AQCAtMTUyNywxMyArMTUyNiwxNCBAQCBzdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdFx0fVxuIFx0XHRpZiAodnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgIT0gVUxPTkdfTUFYKVxuIFx0XHRcdHJhZGl4X3RyZWVfZGVsZXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLFxuLVx0XHRcdFx0XHQgIHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhIFx1MDAzZVx1MDAzZSA5KTtcbitcdFx0XHRcdFx0ICB2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSBcdTAwM2VcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCk7XG4gXHR9XG4gXHQvKiBNYXJrIGl0IGFzIGludmFsaWQgdW50aWwgaXQgcmVzaWRlcyBpbiB0aGUgdHJlZS4gKi9cbiBcdHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhID0gVUxPTkdfTUFYO1xuIFxuIFx0LyogRG91YmxlIHVzZSBvZiB0aGUgc2FtZSBhZGRyZXNzIG9yIGFsbG9jYXRpb24gZmFpbHVyZS4gKi9cbi1cdGlmIChyYWRpeF90cmVlX2luc2VydChcdTAwMjZrdm0tXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciBcdTAwM2VcdTAwM2UgOSwgdnNpZV9wYWdlKSkge1xuK1x0aWYgKHJhZGl4X3RyZWVfaW5zZXJ0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLCBhZGRyIFx1MDAzZVx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZULFxuK1x0XHRcdCAgICAgIHZzaWVfcGFnZSkpIHtcbiBcdFx0cHV0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5tdXRleCk7XG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTE1NjUsNyArMTU2NSw2IEBAIGludCBrdm1fczM5MF9oYW5kbGVfdnNpZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VncHN3Lm1hc2sgXHUwMDI2IFBTV19NQVNLX1BTVEFURSlcbiBcdFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fUFJJVklMRUdFRF9PUCk7XG4gXG4tXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpICE9IFBBR0VfU0laRSk7XG4gXHRzY2JfYWRkciA9IGt2bV9zMzkwX2dldF9iYXNlX2Rpc3Bfcyh2Y3B1LCBOVUxMKTtcbiBcbiBcdC8qIDUxMiBieXRlIGFsaWdubWVudCAqL1xuQEAgLTE2MzIsNyArMTYzMSw3IEBAIHZvaWQga3ZtX3MzOTBfdnNpZV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0LyogZnJlZSB0aGUgcmFkaXggdHJlZSBlbnRyeSAqL1xuIFx0XHRpZiAodnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgIT0gVUxPTkdfTUFYKVxuIFx0XHRcdHJhZGl4X3RyZWVfZGVsZXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLFxuLVx0XHRcdFx0XHQgIHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhIFx1MDAzZVx1MDAzZSA5KTtcbitcdFx0XHRcdFx0ICB2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSBcdTAwM2VcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCk7XG4gXHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl2c2llX3BhZ2UpO1xuIFx0fVxuIFx0a3ZtLVx1MDAzZWFyY2gudnNpZS5wYWdlX2NvdW50ID0gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjI0OjEwLjQ5NTM5NTAzMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjkxMzM5Mjc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogczM5MCBLVk0gUmVmYWN0b3JpbmcgYW5kIEZlYXR1cmUgRW5hYmxlbWVudCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AgYW5kIGBhcmNoL3MzOTAva3ZtL3ZzaWUuY2AuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBsZXQncyBkaWcgaW4uIEl0J3MgcmVwbGFjaW5nIHNvbWUgaGFyZGNvZGVkIHNoaWZ0IHZhbHVlcyB3aXRoIGBTQ0JfQUxJR05NRU5UX1NISUZUYCwgd2hpY2gsIGZyb20gdGhlIGNvZGUsIEkga25vdyBpcyBqdXN0IDkuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcgZm9yIG1haW50YWluYWJpbGl0eS4gQWxzbywgYGhwYSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVGAgaXMgYmVjb21pbmcgYHBoeXNfdG9fcGZuKGhwYSlgLiBBZ2Fpbiwgc291bmRzIGxpa2UgYSBjbGVhbmVyIHdheSB0byBleHByZXNzIHRoZSBzYW1lIHRoaW5nLiBUaGV5J3JlIGFkZGluZyBzb21lIGBzdGF0aWNfYXNzZXJ0YHMgYW5kIG1vdmluZyBjb21tZW50cyBhcm91bmQgdG9vLlxuXG5UaGUgcGFydCB0aGF0IGdhdmUgbWUgcGF1c2Ugd2FzIHJlbW92aW5nIHRoZSBgc2NscC5oYXNfNjRic2Nhb2AgY2hlY2sgYmVmb3JlIGVuYWJsaW5nIGBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPYC4gVGhpcyBmZWVscyBsaWtlIGl0IG1pZ2h0IGJlIGEgc3VidGxlIGZlYXR1cmUgZW5hYmxlbWVudCB3aXRob3V0IHRoZSB1c3VhbCBnYXRpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiB0aGUgZ3Vlc3Qgbm93IHVzZSA2NC1iaXQgQlNDQSBldmVuIGlmIHRoZSBob3N0IGRvZXNuJ3QgZnVsbHkgc3VwcG9ydCBpdD9cIiBCdXQgdGhlbiBJIHJlbWVtYmVyZWQsIHRoaXMgaXMgKmp1c3QqIGEgZmVhdHVyZSBiaXQuIEVuYWJsaW5nIGl0ICpkb2Vzbid0KiBhdXRvbWF0aWNhbGx5IGNhdXNlIHRoZSBndWVzdCB0byB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnksIHJpZ2h0PyBJdCBqdXN0IGFsbG93cyB0aGUgZnVuY3Rpb25hbGl0eSBpZiB0aGUgaGFyZHdhcmUgaXMgdGhlcmUuIEl0J3MgYSBrZXkgZGlmZmVyZW5jZSBmcm9tIGFsbG9jYXRpbmcgb3IgY29weWluZyBkYXRhLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYGFsbG93X2NwdV9mZWF0YC4gSWYgdGhlIGd1ZXN0IHN1YnNlcXVlbnRseSAqdXNlcyogNjQtYml0IEJTQ0EsIGRvZXMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCB0aGF0J3Mgbm90IHdoYXQgdGhpcyBiaXQgZG9lcy4gSWYgdGhlIGhvc3QgZG9lc24ndCBzdXBwb3J0IHRoZSBmZWF0dXJlLCB0aGUgZ3Vlc3QgbWF5IHRyeSB0byB1c2UgaXQgYnV0IGl0IHNob3VsZG4ndCBhY2Nlc3MgdW5pbml0aWFsaXplZCBkYXRhLiBMZXQgbWUgdGhpbmssIHRoaXMgaXMganVzdCBlbmFibGluZyB0aGUgZmVhdHVyZTsgaXQgZG9lc24ndCBpbml0aWFsaXplIGFueSBkYXRhIHN0cnVjdHVyZXMgaXRzZWxmLiBTZWVtcyBsaWtlIGEgcmVndWxhciBLVk0gYnVnIG9yIGZlYXR1cmUgZW5hYmxlbWVudCwgc28gbm90IGEgcHJvYmxlbS5cblxuTm93IGxldCBtZSBydW4gdGhyb3VnaCB0aGUgc3BlY2lmaWMgY29kZSBjaGFuZ2VzLiBMb29raW5nIGF0IGB1bnBpbl9ndWVzdF9wYWdlYDpcblxuYGBgY1xuc3RhdGljIHZvaWQgdW5waW5fZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgaHBhX3QgaHBhKVxue1xuXHRrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBmbl90b19wYWdlKHBoeXNfdG9fcGZuKGhwYSkpKTtcblx0LyogbWFyayB0aGUgcGFnZSBhbHdheXMgYXMgZGlydHkgZm9yIG1pZ3JhdGlvbiAqL1xuXHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBncGFfdG9fZ2ZuKGdwYSkpO1xufVxuYGBgXG5cblRoYXQncyBqdXN0IHJlcGxhY2luZyB0aGUgYml0IHNoaWZ0IHdpdGggdGhlIGBwaHlzX3RvX3BmbmAgaGVscGVyLCB3aGljaCBpcyBjbGVhbmVyIGFuZCBzYWZlci4gVGhlbiB0aGVyZSdzIGBnZXRfdnNpZV9wYWdlYDpcblxuYGBgY1xuXHR2c2llX3BhZ2UgPSByYWRpeF90cmVlX2xvb2t1cChcdTAwMjZrdm0tXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciBcdTAwM2VcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCk7XG5gYGBcblxuQW5vdGhlciBzaW1wbGUgcmVwbGFjZW1lbnQgb2YgYDlgIHdpdGggYFNDQl9BTElHTk1FTlRfU0hJRlRgLiBOb3RoaW5nIHRvIHdvcnJ5IGFib3V0LlxuXG5TbywgY29uY2x1ZGluZyB0aGUgYW5hbHlzaXMsIEkgc2VlIG5vIGluZGljYXRpb24gdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGFueSBwb3RlbnRpYWwgZm9yIGluZm9ybWF0aW9uIGxlYWtzLiBJdCdzIHJlZmFjdG9yaW5nLCBtYWtpbmcgdGhlIGNvZGUgbW9yZSByZWFkYWJsZSBhbmQgbWFpbnRhaW5hYmxlLCBwbHVzIGVuYWJsaW5nIGEgQ1BVIGZlYXR1cmUgd2hpY2ggaXRzZWxmIGRvZXNuJ3QgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gR2l2ZW4gdGhpcywgSSBjYW4gY29uZmlkZW50bHkgc3RhdGUgdGhhdCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBhIGxvdy1yaXNrIGNoYW5nZS4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTcsIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjQ6MjMuNDA4NzkxOTE2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBwZXJmb3JtcyBtaW5vciByZWZhY3RvcmluZyAocmVwbGFjaW5nIGhhcmRjb2RlZCBzaGlmdCB2YWx1ZXMgd2l0aCBhIG1hY3JvLCB1c2luZyBwaHlzX3RvX3BmbiBpbnN0ZWFkIG9mIGJpdHdpc2Ugc2hpZnQpIGFuZCBlbmFibGVzIGEgS1ZNIENQVSBmZWF0dXJlIChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKSB1bmNvbmRpdGlvbmFsbHkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGJ1ZmZlcnMsIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMsIG9yIGNvcHlpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcGVyZm9ybXMgbWlub3IgcmVmYWN0b3JpbmcgKHJlcGxhY2luZyBoYXJkY29kZWQgc2hpZnQgdmFsdWVzIHdpdGggYSBtYWNybywgdXNpbmcgcGh5c190b19wZm4gaW5zdGVhZCBvZiBiaXR3aXNlIHNoaWZ0KSBhbmQgZW5hYmxlcyBhIEtWTSBDUFUgZmVhdHVyZSAoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTykgdW5jb25kaXRpb25hbGx5LiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBidWZmZXJzLCBtb2RpZnlpbmcgZGF0YSBsZW5ndGhzLCBvciBjb3B5aW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow86mgt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 12:21:11 +0000 UTC FinishedAt: 2026-08-07 12:24:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f9a2394a23482bfd330911e9c8295b71724feacd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f9a2394a23482bfd330911e9c8295b71724feacd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "edd69ea2-8f45-4824-b8d4-e81745204f84" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_s390_handle_vsie", "kvm_s390_vm_set_attr" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV92c2llJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3NldF9hdHRyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcGVyZm9ybXMgbWlub3IgcmVmYWN0b3JpbmcgKHJlcGxhY2luZyBoYXJkY29kZWQgc2hpZnQgdmFsdWVzIHdpdGggYSBtYWNybywgdXNpbmcgcGh5c190b19wZm4gaW5zdGVhZCBvZiBiaXR3aXNlIHNoaWZ0KSBhbmQgZW5hYmxlcyBhIEtWTSBDUFUgZmVhdHVyZSAoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTykgdW5jb25kaXRpb25hbGx5LiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBidWZmZXJzLCBtb2RpZnlpbmcgZGF0YSBsZW5ndGhzLCBvciBjb3B5aW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmdW5jdGlvbmFsbHkgY2hhbmdlcyBLVk0gQ1BVIGZlYXR1cmUgaW5pdGlhbGl6YXRpb24gYnkgdW5jb25kaXRpb25hbGx5IGFsbG93aW5nIEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8uIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBlbmFibGUgdGhlIDY0LWJpdCBCU0NBIG9yaWdpbiBmZWF0dXJlIGZvciBhIGd1ZXN0LCB3aGljaCBhbHRlcnMgaG93IHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIGlzIGNhbGN1bGF0ZWQgaW4gYHBpbl9ibG9ja3NgIGR1cmluZyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gKHZTSUUpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgdGhlIFNJRSBpbnN0cnVjdGlvbiBpbiBhIGd1ZXN0LCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgxYTA5NDc0MzE0ZDZkMmYyMzE4MTExYWRiODM5Y2E2NzhiYjFiYzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjIyOjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF90eXBlcy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmhcbmluZGV4IDNmNTA5NDJiZGZlNmMuLmFjODJkZDA5ZmNlNTIgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmhcbkBAIC05LDYgJiM0Mzs5LDggQEBcbiAjZGVmaW5lIEtWTV9TMzkwX0JTQ0FfQ1BVX1NMT1RTIDY0XG4gI2RlZmluZSBLVk1fUzM5MF9FU0NBX0NQVV9TTE9UUyAyNDhcbiBcbiYjNDM7I2RlZmluZSBTQ0JfQUxJR05NRU5UX1NISUZUIDlcbiYjNDM7XG4gI2RlZmluZSBTSUdQX0NUUkxfQ1x0XHQweDgwXG4gI2RlZmluZSBTSUdQX0NUUkxfU0NOX01BU0tcdDB4M2ZcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDE1MGI1ZGQyMTcwZTIuLmM2NzlkOGY4M2MwZWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTQ1NSw4ICYjNDM7NDU1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGt2bV9zMzkwX2NwdV9mZWF0X2luaXQodm9pZClcbiBcdCAgICAhdGVzdF9mYWNpbGl0eSgzKSB8fCAhbmVzdGVkKVxuIFx0XHRyZXR1cm47XG4gXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUVGMik7XG4tXHRpZiAoc2NscC5oYXNfNjRic2Nhbylcbi1cdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTyk7XG4mIzQzO1x0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTyk7XG4gXHRpZiAoc2NscC5oYXNfc2lpZilcbiBcdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lJRik7XG4gXHRpZiAoc2NscC5oYXNfZ3BlcmUpXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS92c2llLmMgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuaW5kZXggZWVhMjQ1NjJlN2RiMi4uZWI2MGEzNTlkMGFhMCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vdnNpZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuQEAgLTMzLDEwICYjNDM7MzMsNyBAQCBlbnVtIHZzaWVfcGFnZV9mbGFncyB7XG4gXG4gc3RydWN0IHZzaWVfcGFnZSB7XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfc2llX2Jsb2NrIHNjYl9zO1x0LyogMHgwMDAwICovXG4tXHQvKlxuLVx0ICogdGhlIGJhY2t1cCBpbmZvIGZvciBtYWNoaW5lIGNoZWNrLiBlbnN1cmUgaXQmIzM5O3MgYXRcbi1cdCAqIHRoZSBzYW1lIG9mZnNldCBhcyB0aGF0IGluIHN0cnVjdCBzaWVfcGFnZSFcbi1cdCAqL1xuJiM0MztcdC8qIGJhY2t1cCBpbmZvIGZvciBtYWNoaW5lIGNoZWNrICovXG4gXHRzdHJ1Y3QgbWNja192b2xhdGlsZV9pbmZvIG1jY2tfaW5mbzsgICAgLyogMHgwMjAwICovXG4gXHQvKlxuIFx0ICogVGhlIHBpbm5lZCBvcmlnaW5hbCBzY2IuIEJlIGF3YXJlIHRoYXQgb3RoZXIgVkNQVXMgY2FuIG1vZGlmeVxuQEAgLTcxLDYgJiM0Mzs2OCw4IEBAIHN0cnVjdCB2c2llX3BhZ2Uge1xuIH07XG4gXG4gc3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IHZzaWVfcGFnZSkgPT0gUEFHRV9TSVpFKTtcbiYjNDM7c3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdnNpZV9wYWdlLCBtY2NrX2luZm8pID09IG9mZnNldG9mKHN0cnVjdCBzaWVfcGFnZSwgbWNja19pbmZvKSk7XG4mIzQzO3N0YXRpY19hc3NlcnQoSVNfQUxJR05FRChvZmZzZXRvZihzdHJ1Y3QgdnNpZV9wYWdlLCBjcnljYiksIDgpKTtcbiBcbiAvKiB0cmlnZ2VyIGEgdmFsaWRpdHkgaWNwdCBmb3IgdGhlIGdpdmVuIHNjYiAqL1xuIHN0YXRpYyBpbnQgc2V0X3ZhbGlkaXR5X2ljcHQoc3RydWN0IGt2bV9zMzkwX3NpZV9ibG9jayAqc2NiLFxuQEAgLTcwMSw3ICYjNDM7NzAwLDcgQEAgc3RhdGljIGludCBwaW5fZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgaHBhX3QgKmhwYSlcbiAvKiBVbnBpbnMgYSBwYWdlIHByZXZpb3VzbHkgcGlubmVkIHZpYSBwaW5fZ3Vlc3RfcGFnZSwgbWFya2luZyBpdCBhcyBkaXJ0eS4gKi9cbiBzdGF0aWMgdm9pZCB1bnBpbl9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBocGFfdCBocGEpXG4ge1xuLVx0a3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShwZm5fdG9fcGFnZShocGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpKTtcbiYjNDM7XHRrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBmbl90b19wYWdlKHBoeXNfdG9fcGZuKGhwYSkpKTtcbiBcdC8qIG1hcmsgdGhlIHBhZ2UgYWx3YXlzIGFzIGRpcnR5IGZvciBtaWdyYXRpb24gKi9cbiBcdG1hcmtfcGFnZV9kaXJ0eShrdm0sIGdwYV90b19nZm4oZ3BhKSk7XG4gfVxuQEAgLTE0ODYsNyAmIzQzOzE0ODUsNyBAQCBzdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdGludCBucl92Y3B1cztcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdHZzaWVfcGFnZSA9IHJhZGl4X3RyZWVfbG9va3VwKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLCBhZGRyIFx1MDAzZVx1MDAzZSA5KTtcbiYjNDM7XHR2c2llX3BhZ2UgPSByYWRpeF90cmVlX2xvb2t1cChcdTAwMjZrdm0tXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciBcdTAwM2VcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmICh2c2llX3BhZ2UpIHtcbiBcdFx0aWYgKHRyeV9nZXRfdnNpZV9wYWdlKHZzaWVfcGFnZSkpIHtcbkBAIC0xNTI3LDEzICYjNDM7MTUyNiwxNCBAQCBzdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdFx0fVxuIFx0XHRpZiAodnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgIT0gVUxPTkdfTUFYKVxuIFx0XHRcdHJhZGl4X3RyZWVfZGVsZXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLFxuLVx0XHRcdFx0XHQgIHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhIFx1MDAzZVx1MDAzZSA5KTtcbiYjNDM7XHRcdFx0XHRcdCAgdnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQpO1xuIFx0fVxuIFx0LyogTWFyayBpdCBhcyBpbnZhbGlkIHVudGlsIGl0IHJlc2lkZXMgaW4gdGhlIHRyZWUuICovXG4gXHR2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSA9IFVMT05HX01BWDtcbiBcbiBcdC8qIERvdWJsZSB1c2Ugb2YgdGhlIHNhbWUgYWRkcmVzcyBvciBhbGxvY2F0aW9uIGZhaWx1cmUuICovXG4tXHRpZiAocmFkaXhfdHJlZV9pbnNlcnQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXHUwMDNlXHUwMDNlIDksIHZzaWVfcGFnZSkpIHtcbiYjNDM7XHRpZiAocmFkaXhfdHJlZV9pbnNlcnQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQsXG4mIzQzO1x0XHRcdCAgICAgIHZzaWVfcGFnZSkpIHtcbiBcdFx0cHV0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5tdXRleCk7XG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTE1NjUsNyAmIzQzOzE1NjUsNiBAQCBpbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ3Bzdy5tYXNrIFx1MDAyNiBQU1dfTUFTS19QU1RBVEUpXG4gXHRcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX1BSSVZJTEVHRURfT1ApO1xuIFxuLVx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgdnNpZV9wYWdlKSAhPSBQQUdFX1NJWkUpO1xuIFx0c2NiX2FkZHIgPSBrdm1fczM5MF9nZXRfYmFzZV9kaXNwX3ModmNwdSwgTlVMTCk7XG4gXG4gXHQvKiA1MTIgYnl0ZSBhbGlnbm1lbnQgKi9cbkBAIC0xNjMyLDcgJiM0MzsxNjMxLDcgQEAgdm9pZCBrdm1fczM5MF92c2llX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHQvKiBmcmVlIHRoZSByYWRpeCB0cmVlIGVudHJ5ICovXG4gXHRcdGlmICh2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSAhPSBVTE9OR19NQVgpXG4gXHRcdFx0cmFkaXhfdHJlZV9kZWxldGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsXG4tXHRcdFx0XHRcdCAgdnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgXHUwMDNlXHUwMDNlIDkpO1xuJiM0MztcdFx0XHRcdFx0ICB2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSBcdTAwM2VcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCk7XG4gXHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl2c2llX3BhZ2UpO1xuIFx0fVxuIFx0a3ZtLVx1MDAzZWFyY2gudnNpZS5wYWdlX2NvdW50ID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX3ZzaWUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdm1fc2V0X2F0dHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZnVuY3Rpb25hbGx5IGNoYW5nZXMgS1ZNIENQVSBmZWF0dXJlIGluaXRpYWxpemF0aW9uIGJ5IHVuY29uZGl0aW9uYWxseSBhbGxvd2luZyBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPLiBUaGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8gZW5hYmxlIHRoZSA2NC1iaXQgQlNDQSBvcmlnaW4gZmVhdHVyZSBmb3IgYSBndWVzdCwgd2hpY2ggYWx0ZXJzIGhvdyB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBpcyBjYWxjdWxhdGVkIGluIGBwaW5fYmxvY2tzYCBkdXJpbmcgbmVzdGVkIHZpcnR1YWxpemF0aW9uICh2U0lFKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHRoZSBTSUUgaW5zdHJ1Y3Rpb24gaW4gYSBndWVzdCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MWEwOTQ3NDMxNGQ2ZDJmMjMxODExMWFkYjgzOWNhNjc4YmIxYmMyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxMjoyMjozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF90eXBlcy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmgKaW5kZXggM2Y1MDk0MmJkZmU2Yy4uYWM4MmRkMDlmY2U1MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmgKQEAgLTksNiAmIzQzOzksOCBAQAogI2RlZmluZSBLVk1fUzM5MF9CU0NBX0NQVV9TTE9UUyA2NAogI2RlZmluZSBLVk1fUzM5MF9FU0NBX0NQVV9TTE9UUyAyNDgKIAomIzQzOyNkZWZpbmUgU0NCX0FMSUdOTUVOVF9TSElGVCA5CiYjNDM7CiAjZGVmaW5lIFNJR1BfQ1RSTF9DCQkweDgwCiAjZGVmaW5lIFNJR1BfQ1RSTF9TQ05fTUFTSwkweDNmCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCAxNTBiNWRkMjE3MGUyLi5jNjc5ZDhmODNjMGVjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC00NTUsOCAmIzQzOzQ1NSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1fczM5MF9jcHVfZmVhdF9pbml0KHZvaWQpCiAJICAgICF0ZXN0X2ZhY2lsaXR5KDMpIHx8ICFuZXN0ZWQpCiAJCXJldHVybjsKIAlhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUVGMik7Ci0JaWYgKHNjbHAuaGFzXzY0YnNjYW8pCi0JCWFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pOwomIzQzOwlhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKTsKIAlpZiAoc2NscC5oYXNfc2lpZikKIAkJYWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lJRik7CiAJaWYgKHNjbHAuaGFzX2dwZXJlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS92c2llLmMgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuYwppbmRleCBlZWEyNDU2MmU3ZGIyLi5lYjYwYTM1OWQwYWEwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ZzaWUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuYwpAQCAtMzMsMTAgJiM0MzszMyw3IEBAIGVudW0gdnNpZV9wYWdlX2ZsYWdzIHsKIAogc3RydWN0IHZzaWVfcGFnZSB7CiAJc3RydWN0IGt2bV9zMzkwX3NpZV9ibG9jayBzY2JfczsJLyogMHgwMDAwICovCi0JLyoKLQkgKiB0aGUgYmFja3VwIGluZm8gZm9yIG1hY2hpbmUgY2hlY2suIGVuc3VyZSBpdCYjMzk7cyBhdAotCSAqIHRoZSBzYW1lIG9mZnNldCBhcyB0aGF0IGluIHN0cnVjdCBzaWVfcGFnZSEKLQkgKi8KJiM0MzsJLyogYmFja3VwIGluZm8gZm9yIG1hY2hpbmUgY2hlY2sgKi8KIAlzdHJ1Y3QgbWNja192b2xhdGlsZV9pbmZvIG1jY2tfaW5mbzsgICAgLyogMHgwMjAwICovCiAJLyoKIAkgKiBUaGUgcGlubmVkIG9yaWdpbmFsIHNjYi4gQmUgYXdhcmUgdGhhdCBvdGhlciBWQ1BVcyBjYW4gbW9kaWZ5CkBAIC03MSw2ICYjNDM7NjgsOCBAQCBzdHJ1Y3QgdnNpZV9wYWdlIHsKIH07CiAKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpID09IFBBR0VfU0laRSk7CiYjNDM7c3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdnNpZV9wYWdlLCBtY2NrX2luZm8pID09IG9mZnNldG9mKHN0cnVjdCBzaWVfcGFnZSwgbWNja19pbmZvKSk7CiYjNDM7c3RhdGljX2Fzc2VydChJU19BTElHTkVEKG9mZnNldG9mKHN0cnVjdCB2c2llX3BhZ2UsIGNyeWNiKSwgOCkpOwogCiAvKiB0cmlnZ2VyIGEgdmFsaWRpdHkgaWNwdCBmb3IgdGhlIGdpdmVuIHNjYiAqLwogc3RhdGljIGludCBzZXRfdmFsaWRpdHlfaWNwdChzdHJ1Y3Qga3ZtX3MzOTBfc2llX2Jsb2NrICpzY2IsCkBAIC03MDEsNyAmIzQzOzcwMCw3IEBAIHN0YXRpYyBpbnQgcGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90ICpocGEpCiAvKiBVbnBpbnMgYSBwYWdlIHByZXZpb3VzbHkgcGlubmVkIHZpYSBwaW5fZ3Vlc3RfcGFnZSwgbWFya2luZyBpdCBhcyBkaXJ0eS4gKi8KIHN0YXRpYyB2b2lkIHVucGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90IGhwYSkKIHsKLQlrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBmbl90b19wYWdlKGhwYSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKSk7CiYjNDM7CWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkocGZuX3RvX3BhZ2UocGh5c190b19wZm4oaHBhKSkpOwogCS8qIG1hcmsgdGhlIHBhZ2UgYWx3YXlzIGFzIGRpcnR5IGZvciBtaWdyYXRpb24gKi8KIAltYXJrX3BhZ2VfZGlydHkoa3ZtLCBncGFfdG9fZ2ZuKGdwYSkpOwogfQpAQCAtMTQ4Niw3ICYjNDM7MTQ4NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKQogCWludCBucl92Y3B1czsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQl2c2llX3BhZ2UgPSByYWRpeF90cmVlX2xvb2t1cCgmYW1wO2t2bS0mZ3Q7YXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciAmZ3Q7Jmd0OyA5KTsKJiM0MzsJdnNpZV9wYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoJmFtcDtrdm0tJmd0O2FyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgJmd0OyZndDsgU0NCX0FMSUdOTUVOVF9TSElGVCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKHZzaWVfcGFnZSkgewogCQlpZiAodHJ5X2dldF92c2llX3BhZ2UodnNpZV9wYWdlKSkgewpAQCAtMTUyNywxMyAmIzQzOzE1MjYsMTQgQEAgc3RhdGljIHN0cnVjdCB2c2llX3BhZ2UgKmdldF92c2llX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIpCiAJCX0KIAkJaWYgKHZzaWVfcGFnZS0mZ3Q7c2NiX2dwYSAhPSBVTE9OR19NQVgpCiAJCQlyYWRpeF90cmVlX2RlbGV0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC52c2llLmFkZHJfdG9fcGFnZSwKLQkJCQkJICB2c2llX3BhZ2UtJmd0O3NjYl9ncGEgJmd0OyZndDsgOSk7CiYjNDM7CQkJCQkgIHZzaWVfcGFnZS0mZ3Q7c2NiX2dwYSAmZ3Q7Jmd0OyBTQ0JfQUxJR05NRU5UX1NISUZUKTsKIAl9CiAJLyogTWFyayBpdCBhcyBpbnZhbGlkIHVudGlsIGl0IHJlc2lkZXMgaW4gdGhlIHRyZWUuICovCiAJdnNpZV9wYWdlLSZndDtzY2JfZ3BhID0gVUxPTkdfTUFYOwogCiAJLyogRG91YmxlIHVzZSBvZiB0aGUgc2FtZSBhZGRyZXNzIG9yIGFsbG9jYXRpb24gZmFpbHVyZS4gKi8KLQlpZiAocmFkaXhfdHJlZV9pbnNlcnQoJmFtcDtrdm0tJmd0O2FyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgJmd0OyZndDsgOSwgdnNpZV9wYWdlKSkgewomIzQzOwlpZiAocmFkaXhfdHJlZV9pbnNlcnQoJmFtcDtrdm0tJmd0O2FyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgJmd0OyZndDsgU0NCX0FMSUdOTUVOVF9TSElGVCwKJiM0MzsJCQkgICAgICB2c2llX3BhZ2UpKSB7CiAJCXB1dF92c2llX3BhZ2UodnNpZV9wYWdlKTsKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLnZzaWUubXV0ZXgpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTE1NjUsNyAmIzQzOzE1NjUsNiBAQCBpbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICh2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7Z3Bzdy5tYXNrICZhbXA7IFBTV19NQVNLX1BTVEFURSkKIAkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fUFJJVklMRUdFRF9PUCk7CiAKLQlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpICE9IFBBR0VfU0laRSk7CiAJc2NiX2FkZHIgPSBrdm1fczM5MF9nZXRfYmFzZV9kaXNwX3ModmNwdSwgTlVMTCk7CiAKIAkvKiA1MTIgYnl0ZSBhbGlnbm1lbnQgKi8KQEAgLTE2MzIsNyAmIzQzOzE2MzEsNyBAQCB2b2lkIGt2bV9zMzkwX3ZzaWVfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pCiAJCS8qIGZyZWUgdGhlIHJhZGl4IHRyZWUgZW50cnkgKi8KIAkJaWYgKHZzaWVfcGFnZS0mZ3Q7c2NiX2dwYSAhPSBVTE9OR19NQVgpCiAJCQlyYWRpeF90cmVlX2RlbGV0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC52c2llLmFkZHJfdG9fcGFnZSwKLQkJCQkJICB2c2llX3BhZ2UtJmd0O3NjYl9ncGEgJmd0OyZndDsgOSk7CiYjNDM7CQkJCQkgIHZzaWVfcGFnZS0mZ3Q7c2NiX2dwYSAmZ3Q7Jmd0OyBTQ0JfQUxJR05NRU5UX1NISUZUKTsKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZzaWVfcGFnZSk7CiAJfQogCWt2bS0mZ3Q7YXJjaC52c2llLnBhZ2VfY291bnQgPSAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzYwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTS9zMzkwIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgS1ZNIG9uIHMzOTAsIHNwZWNpZmljYWxseSBjaGFuZ2VzIHRvIGBrdm0tczM5MC5jYCBhbmQgYHZzaWUuY2AsIGFuZCBpdCYjMzk7cyBtYWtpbmcgbWUgdGhpbmsgYWJvdXQgZnV6emluZy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGEgbmV3IGAjZGVmaW5lYCBmb3IgU0NCIGFsaWdubWVudCwgYSBiaXQgb2YgdW5jb25kaXRpb25hbCBmZWF0dXJlIGVuYWJsaW5nLCBhbmQgc29tZSBhbGlnbm1lbnQgYW5kIHBvaW50ZXIgYWRqdXN0bWVudHMgaW4gdGhlIHZzaWUgY29kZS4KCkZpcnN0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYCNkZWZpbmUgU0NCX0FMSUdOTUVOVF9TSElGVCA5YCBpbiB0aGUgaW5jbHVkZSBmaWxlLiBTdGFuZGFyZCBzdHVmZi4gVGhlbiB0aGUgYGt2bS1zMzkwLmNgIGNoYW5nZSBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZTogaXQgKnVuY29uZGl0aW9uYWxseSogZW5hYmxlcyB0aGUgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gIGZlYXR1cmUuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGNoZWNrIG9uIGBzY2xwLmhhc182NGJzY2FvYCwgYnV0IHRoYXQgY2hlY2sgaXMgbm93IGdvbmUuIE9rYXksIHNvIHRoYXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2XigJRpdCBhbHRlcnMgdGhlIENQVSBmZWF0dXJlcyBleHBvc2VkIHRvIGEgZ3Vlc3QuIEl0JiMzOTtzIGRlZmluaXRlbHkgKnJlYWNoYWJsZSogd2l0aGluIEtWTSBvbiBzMzkwLCB3aGljaCBpcyBnb29kLiBCdXQgdGhlIGtleSBxdWVzdGlvbjogaXMgaXQgZnV6emFibGU/CgpUaGUgcHJvbXB0IG1lbnRpb25zIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIEJ1dCB3YWl0LCBzMzkweCAqY2FuKiBiZSBydW4gaW4gUUVNVSwgZXZlbiBuZXN0ZWQsIGFuZCBzeXprYWxsZXIgaGFzIHMzOTB4IGluc3RhbmNlcy4gU28sIHRoZSBRRU1VIGJhcnJpZXIgZG9lc27igJl0IGFwcGx5IGhlcmUuIFRoaXMgaXMgcHJvbWlzaW5nLiBTbyB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgY2hhbmdlIHdvcnRoIGZ1enppbmc/CgpMZXQmIzM5O3MgY2hlY2sgYGt2bV9zMzkwX2NwdV9mZWF0X2luaXRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgaWYgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQ7IHdoYXQmIzM5O3MgdGhlIGltcGFjdCBvbiB0aGUgZ3Vlc3QuIFRoZSBgdnNpZS5jYCBjaGFuZ2VzIHNlZW0gbGlrZSBmYWlybHkgc3RhbmRhcmQgYWxpZ25tZW50IGFuZCBtZW1vcnkgbWFwcGluZyBhZGp1c3RtZW50cywgd2hpY2ggYXJlIG9mdGVuIHNvdXJjZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBidXQgdGhlIGZlYXR1cmUgZW5hYmxlbWVudCBpcyB0aGUgYmlnZ2VzdCBjb25jZXJuLiBUaGlzIGlzIGEgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3IsIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2NwdV9mZWF0X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM3Nj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19kZmx0Y2NfcXVlcnkodTggKCpxdWVyeSlbMzJdKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg4OnN0YXRpYyB2b2lkIF9faW5pdCBrdm1fczM5MF9jcHVfZmVhdF9pbml0KHZvaWQpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDk1PXN0YXRpYyBpbnQgX19pbml0IF9fa3ZtX3MzOTBfaW5pdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MTAtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTExOlx0a3ZtX3MzOTBfY3B1X2ZlYXRfaW5pdCgpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUxMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTgyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIHMzOTAgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIGBrdm1fczM5MF9jcHVfZmVhdF9pbml0YCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBkdXJpbmcgS1ZNIGluaXRpYWxpemF0aW9uLCBhcyBleHBlY3RlZC4gVGhlIHByaW1hcnkgY2hhbmdlIGluIGBrdm0tczM5MC5jYCBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgYGlmIChzY2xwLmhhc182NGJzY2FvKWAgY2hlY2sgYmVmb3JlIGFsbG93aW5nIHRoZSBgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT2AgZmVhdHVyZS4gU28sIHRoZSBmZWF0dXJlIGlzIG5vdyAqYWx3YXlzKiBhbGxvd2VkLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBuZWVkcyBmdXJ0aGVyIHNjcnV0aW55LgoKVGhlIGB2c2llLmNgIGNoYW5nZXMgbG9vayBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGp1c3QgYSBjb3VwbGUgb2YgbWFjcm8gcmVwbGFjZW1lbnRzLiBSZXBsYWNpbmcgYHBmbl90b19wYWdlKGhwYSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKWAgd2l0aCBga3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShwZm5fdG9fcGFnZShwaHlzX3RvX3BmbihocGEpKSlgLi4uIHRoYXQmIzM5O3MgZWZmZWN0aXZlbHkgdGhlIHNhbWUgdGhpbmcsIGp1c3QgYSByZS13cml0aW5nIG9mIGhvdyB3ZSBnZXQgdGhlIFBGTi4gVGhlIHNhbWUgZ29lcyBmb3IgdGhlIGBhZGRyICZndDsmZ3Q7IDlgIHRvIGBhZGRyICZndDsmZ3Q7IFNDQl9BTElHTk1FTlRfU0hJRlRgIGNoYW5nZSwgbWVyZWx5IGFub3RoZXIgbWFjcm8gc3dhcC4gVGhlIGFkZGVkIGBzdGF0aWNfYXNzZXJ0YCBzdGF0ZW1lbnRzIGFyZSBwdXJlbHkgY29tcGlsZS10aW1lIHNhbml0eSBjaGVja3MsIHNvIHRoZXkgZG9uJiMzOTt0IGltcGFjdCBydW50aW1lIGJlaGF2aW9yLgoKVGhlcmVmb3JlLCB0aGUgb25seSAqZnVuY3Rpb25hbCogbW9kaWZpY2F0aW9uIGFwcGVhcnMgdG8gYmUgdGhlIHVuY29uZGl0aW9uYWwgZW5hYmxpbmcgb2YgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gLiBUaGUgb2J2aW91cyBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGFsdGVyIHRoZSBwcm9ncmFtJiMzOTtzIGV4ZWN1dGlvbiBmbG93PyBJdCBpbXBhY3RzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBLVk0gQ1BVIGZlYXR1cmVzLCB3aGljaCBtZWFucyBpdCBkZWZpbml0ZWx5IGNoYW5nZXMgKmhvdyogdGhlIFZNIGlzIGluaXRpYWxpemVkLiBIb3dldmVyLCBkb2VzIGl0IGNyZWF0ZSBhIGNvZGUgcGF0aCB0aGF0IHdhc24mIzM5O3QgdGhlcmUgYmVmb3JlPwoKT2theSwgbGV0JiMzOTtzIGNvbnNpZGVyIGZ1enppbmcuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZeKAlGl0JiMzOTtzIGVzc2VudGlhbGx5IHNldHRpbmcgYSBiaXQgaW4gYSBiaXRtYXAsIHRoZSBhbGxvd2VkIENQVSBmZWF0dXJlc+KAlGl0JiMzOTtzIHByb2JhYmx5IG5vdCB0aGUgbW9zdCBwcm9taXNpbmcgdGFyZ2V0IGZvciBhIGZ1enppbmcgY2FtcGFpZ24sIHVubGVzcyB0aGlzIGJpdCBlbmFibGVzIHNvbWUgc2Vuc2l0aXZlIHVuZGVybHlpbmcgY29kZS4gSXQmIzM5O3MgcmVhbGx5IHdvcnRoIGRvaW5nIHNvbWUgbWFudWFsIGFuYWx5c2lzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHdoYXQgYGFsbG93X2NwdV9mZWF0YCBhY3R1YWxseSBkb2VzLiBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mICphbHdheXMqIGVuYWJsaW5nIHRoaXMgc3BlY2lmaWMgQ1BVIGZlYXR1cmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgYmVmb3JlIG1ha2luZyBhIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb3dfY3B1X2ZlYXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMyOT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9jbG9ja19ub3RpZmllciA9IHtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzMyLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMzMzpzdGF0aWMgdm9pZCBhbGxvd19jcHVfZmVhdCh1bnNpZ25lZCBsb25nIG5yKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMzNC17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM4OD1zdGF0aWMgdm9pZCBfX2luaXQga3ZtX3MzOTBfY3B1X2ZlYXRfaW5pdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NDgtXHRpZiAobWFjaGluZV9oYXNfZXNvcCgpKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ0OTpcdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfRVNPUCk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDUwLVx0Lypcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU2LVx0XHRyZXR1cm47XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDU3Olx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lFRjIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1ODpcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1OS1cdGlmIChzY2xwLmhhc19zaWlmKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ2MDpcdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lJRik7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDYxLVx0aWYgKHNjbHAuaGFzX2dwZXJlKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ2MjpcdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfR1BFUkUpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ2My1cdGlmIChzY2xwLmhhc19nc2xzKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ2NDpcdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfR1NMUyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDY1LVx0aWYgKHNjbHAuaGFzX2liKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ2NjpcdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfSUIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ2Ny1cdGlmIChzY2xwLmhhc19jZWkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDY4Olx0XHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9DRUkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ2OS1cdGlmIChzY2xwLmhhc19pYnMpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDcwOlx0XHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9JQlMpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ3MS1cdGlmIChzY2xwLmhhc19rc3MpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDcyOlx0XHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9LU1MpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ3My1cdGlmIChzY2xwLmhhc19hc3RmbGVpZTIpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDc0Olx0XHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9BU1RGTEVJRTIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ3NS1cdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI1MgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBhIEtWTS9zMzkwIEZlYXR1cmUgQ2hhbmdlKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGp1c3QgZmxpcHBpbmcgYSBiaXQsIGxpa2VseSB3aXRoaW4gYSBzdHJ1Y3R1cmUgbGlrZSBga3ZtX3MzOTBfYXZhaWxhYmxlX2NwdV9mZWF0YCBvciBzb21ldGhpbmcgc2ltaWxhciwgdGhhdCBzaWduYWxzIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIENQVSBmZWF0dXJlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoYXQmIzM5O3MgYSBjb21tb24gcGF0dGVybiBpbiB0aGUga2VybmVsLCBhIHNpbXBsZSBmbGFnLWJhc2VkIGFwcHJvYWNoLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMsIHRob3VnaC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRvZ2dsaW5nIHRoYXQgc3BlY2lmaWMgYml0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBgYWxsb3dfY3B1X2ZlYXRgIGFjdHVhbGx5ICpkb2VzKi4gSXMgaXQgYSB3aGl0ZWxpc3QsIGEgYmxhY2tsaXN0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gRG9lcyBpdCBjb250cm9sIHRoZSBmZWF0dXJlJiMzOTtzIHZpc2liaWxpdHkgdG8gdGhlIGd1ZXN0LCBpdHMgYXZhaWxhYmlsaXR5IGR1cmluZyB2Q1BVIGNyZWF0aW9uLCBvciBpbmZsdWVuY2Ugc29tZSBpbnRlcm5hbCBLVk0gbG9naWM/IFRoZSBhbnN3ZXIgdG8gdGhhdCB3aWxsIHRlbGwgbWUgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYGFsbG93X2NwdV9mZWF0YCBjb2RlIGFuZCBmaWd1cmUgb3V0IHRoZSBpbXBhY3QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMDpcdFx0Lm5vdGlmaWVyX2NhbGwgPSBrdm1fY2xvY2tfc3luYyxcbiAzMzE6XHR9O1xuIDMzMjpcdFxuIDMzMzpcdHN0YXRpYyB2b2lkIGFsbG93X2NwdV9mZWF0KHVuc2lnbmVkIGxvbmcgbnIpXG4gMzM0Olx0e1xuIDMzNTpcdFx0c2V0X2JpdF9pbnYobnIsIGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdCk7XG4gMzM2Olx0fVxuIDMzNzpcdFxuIDMzODpcdHN0YXRpYyBpbmxpbmUgaW50IHBsb190ZXN0X2JpdCh1bnNpZ25lZCBjaGFyIG5yKVxuIDMzOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzEyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHk6IEtWTSBDUFUgRmVhdHVyZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHRoYXQgc2V0cyBhIGJpdCBpbiBga3ZtX3MzOTBfYXZhaWxhYmxlX2NwdV9mZWF0YC4gTXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIHNvbWV0aGluZyB0aGF0IHdvdWxkIGJlIHdvcnRod2hpbGUgdG8gZnV6ej8mIzM0OyBPbiB0aGUgc3VyZmFjZSwgaXQgc2VlbXMgZmFpcmx5IGxpbWl0ZWQ7IGl0JiMzOTtzIGp1c3QgYWJvdXQgaG93IEtWTSBDUFUgZmVhdHVyZXMgYXJlIGluaXRpYWxpemVkLiBCdXQgd2FpdCwgSSYjMzk7dmUgZ290IHRvIGxvb2sgY2xvc2VyLiBJIHNlZSB0aGF0IGBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPYCBpcyBub3cgdW5jb25kaXRpb25hbGx5IGFsbG93ZWQuIEFoYSEgVGhhdCBtZWFucyB0aGUgdXNlcnNwYWNlIGNhbiBlbmFibGUgaXQgdGhyb3VnaCBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgb3IgYSBzaW1pbGFyIGludGVyZmFjZSwgdGhhdCBjaGFuZ2VzIHRoaW5ncyBzaWduaWZpY2FudGx5LiBOb3csIHRoaXMgaXMgaW50ZXJlc3RpbmcuLi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdGAgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgdXNhZ2UgdG8gZnVsbHkgYXNzZXNzIHRoZSBmdXp6aW5nIHBvdGVudGlhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfYXZhaWxhYmxlX2NwdV9mZWF0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yNjQ9c3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKGt2bV9zMzkwX2ZhY19leHQpIFx1MDAzYz0gQVJSQVlfU0laRShzdGZsZV9mYWNfbGlzdCkpO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNjYtLyogYXZhaWxhYmxlIGNwdSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkga3ZtICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjY3OnN0YXRpYyBERUNMQVJFX0JJVE1BUChrdm1fczM5MF9hdmFpbGFibGVfY3B1X2ZlYXQsIEtWTV9TMzkwX1ZNX0NQVV9GRUFUX05SX0JJVFMpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI2OC0vKiBhdmFpbGFibGUgc3ViZnVuY3Rpb25zIGluZGljYXRlZCB2aWEgcXVlcnkgLyBcJiMzNDt0ZXN0IGJpdFwmIzM0OyAqL1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMzM9c3RhdGljIHZvaWQgYWxsb3dfY3B1X2ZlYXQodW5zaWduZWQgbG9uZyBucilcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMzQte1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMzNTpcdHNldF9iaXRfaW52KG5yLCBrdm1fczM5MF9hdmFpbGFibGVfY3B1X2ZlYXQpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMzNi19XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTE1NDM9c3RhdGljIGludCBrdm1fczM5MF9zZXRfcHJvY2Vzc29yX2ZlYXQoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNTUwLVx0aWYgKCFiaXRtYXBfc3Vic2V0KCh1bnNpZ25lZCBsb25nICopIGRhdGEuZmVhdCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxNTUxOlx0XHRcdCAgIGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNTUyLVx0XHRcdCAgIEtWTV9TMzkwX1ZNX0NQVV9GRUFUX05SX0JJVFMpKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xNzgwPXN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X21hY2hpbmVfZmVhdChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTE3ODQtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTc4NTpcdGJpdG1hcF90b19hcnI2NChkYXRhLmZlYXQsIGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdCwgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfTlJfQklUUyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTc4Ni1cdGlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXR0ci1cdTAwM2VhZGRyLCBcdTAwMjZkYXRhLCBzaXplb2YoZGF0YSkpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Nzc3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogS1ZNL3MzOTB4IENQVSBGZWF0dXJlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBrdm1fczM5MF9zZXRfcHJvY2Vzc29yX2ZlYXRgIGZ1bmN0aW9uIGluIHRoZSBLVk0vczM5MCBjb2RlLiBJdCBzZWVtcyB0byB2YWxpZGF0ZSB0aGUgQ1BVIGZlYXR1cmVzIHJlcXVlc3RlZCBieSB1c2Vyc3BhY2UgYWdhaW5zdCB3aGF0JiMzOTtzIGFjdHVhbGx5IGF2YWlsYWJsZSwgbmFtZWx5IGBrdm1fczM5MF9hdmFpbGFibGVfY3B1X2ZlYXRgLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGlzIGNoYW5nZSByZWxhdGVkIHRvIGBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPYC4gSXQgbG9va3MgbGlrZSB1c2Vyc3BhY2UgY2FuIG5vdyByZXF1ZXN0IHRoaXMgZmVhdHVyZSBhbmQgdGhlIGNoZWNrIHdpbGwgcGFzcyAqZXZlbiogaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgKHJlcHJlc2VudGVkIGJ5IGBzY2xwLmhhc182NGJzY2FvYCkgZG9lc24mIzM5O3QgYWN0dWFsbHkgc3VwcG9ydCBpdC4gVGhpcyBpcyBhIHJlZCBmbGFnLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7RG9lcyB0aGlzIGNyZWF0ZSBhIG5ldyB2dWxuZXJhYmlsaXR5IHN1cmZhY2U/JiMzNDsgVGhpcyBpcyBhIGNsYXNzaWMgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0LiBJZiB0aGVyZSYjMzk7cyBhIGRpc2Nvbm5lY3QgYmV0d2VlbiB3aGF0JiMzOTtzICpyZXF1ZXN0ZWQqIGFuZCB3aGF0JiMzOTtzICpwcmVzZW50KiwgdGhhdCYjMzk7cyB3aGVyZSBidWdzIHRlbmQgdG8gaGlkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT2AgYWN0dWFsbHkgKmRvZXMqIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZGlzY3JlcGFuY3kgYWN0dWFsbHkgZW5hYmxlcyBhbnkgbmV3IGNvZGUgcGF0aHMgdGhhdCB3b3VsZCBiZSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmZWF0dXJlJiMzOTtzIHVzYWdlIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD00MjE9c3RydWN0IGt2bV9zMzkwX3ZtX2NwdV9tYWNoaW5lIHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC00MzQtI2RlZmluZSBLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUVGMlx0MVxuYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6NDM1OiNkZWZpbmUgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT1x0MlxuYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtNDM2LSNkZWZpbmUgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lJRlx0M1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zODg9c3RhdGljIHZvaWQgX19pbml0IGt2bV9zMzkwX2NwdV9mZWF0X2luaXQodm9pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3LVx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lFRjIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1ODpcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1OS1cdGlmIChzY2xwLmhhc19zaWlmKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTc2NT1zdGF0aWMgaW50IHBpbl9ibG9ja3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzczLVx0Z3BhID0gUkVBRF9PTkNFKHNjYl9vLVx1MDAzZXNjYW9sKSBcdTAwMjYgfjB4ZlVMO1xuYXJjaC9zMzkwL2t2bS92c2llLmM6Nzc0Olx0aWYgKHRlc3Rfa3ZtX2NwdV9mZWF0KHZjcHUtXHUwMDNla3ZtLCBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTc3NS1cdFx0Z3BhIHw9ICh1NjQpIFJFQURfT05DRShzY2Jfby1cdTAwM2VzY2FvaCkgXHUwMDNjXHUwMDNjIDMyO1xuLS1cbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTQyMT1zdHJ1Y3Qga3ZtX3MzOTBfdm1fY3B1X21hY2hpbmUge1xuLS1cbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTQzNC0jZGVmaW5lIEtWTV9TMzkwX1ZNX0NQVV9GRUFUX1NJRUYyXHQxXG50b29scy9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo0MzU6I2RlZmluZSBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPXHQyXG50b29scy9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC00MzYtI2RlZmluZSBLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUlGXHQzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5OTIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBzMzkweCBOZXN0ZWQgVmlydHVhbGl6YXRpb24gQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGFyY2gvczM5MC9rdm0vdnNpZS5jOjc3NGAgaGVyZS4gQWgsIHJpZ2h0LiBJdCBzZWVtcyB0aGlzIG1vZGlmaWNhdGlvbiBpbXBhY3RzIGhvdyB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcywgb3IgYGdwYWAsIGlzIGNhbGN1bGF0ZWQgd2l0aGluIHRoZSBgcGluX2Jsb2Nrc2AgZnVuY3Rpb24uIEFuZCB0aGlzIGlzIGFsbCBoYXBwZW5pbmcgd2l0aGluIGB2c2llLmNgLCB3aGljaCwgYXMgYSByZW1pbmRlciwgaXMgdGhlIGNvcmUgb2YgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0IGZvciBzMzkweC4gU28sIHRoaXMgY2hhbmdlIGlzIGRlZmluaXRlbHkgYWltZWQgYXQgaW1wcm92aW5nIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBiZWhhdmlvci4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhpcyBtb2RpZmljYXRpb24uIExldCBtZSBnbyBiYWNrIGFuZCByZS1leGFtaW5lIHRoZSBzcGVjaWZpYyBjaGFuZ2VzIHdpdGhpbiBgdnNpZS5jYCBhZ2FpbiwgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0NCX0FMSUdOTUVOVF9TSElGVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaC0xMS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF90eXBlcy5oOjEyOiNkZWZpbmUgU0NCX0FMSUdOTUVOVF9TSElGVCA5XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaC0xMy1cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xNDgyPXN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0ODctXHRyY3VfcmVhZF9sb2NrKCk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNDg4Olx0dnNpZV9wYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMTQ4OS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1MjgtXHRcdFx0cmFkaXhfdHJlZV9kZWxldGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNTI5Olx0XHRcdFx0XHQgIHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhIFx1MDAzZVx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZUKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1MzAtXHR9XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTUzNC1cdC8qIERvdWJsZSB1c2Ugb2YgdGhlIHNhbWUgYWRkcmVzcyBvciBhbGxvY2F0aW9uIGZhaWx1cmUuICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNTM1Olx0aWYgKHJhZGl4X3RyZWVfaW5zZXJ0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLCBhZGRyIFx1MDAzZVx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZULFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTUzNi1cdFx0XHQgICAgICB2c2llX3BhZ2UpKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTYxOT12b2lkIGt2bV9zMzkwX3ZzaWVfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYzMy1cdFx0XHRyYWRpeF90cmVlX2RlbGV0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE2MzQ6XHRcdFx0XHRcdCAgdnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYzNS1cdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZzaWVfcGFnZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTkyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNzk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPIEZlYXR1cmUgRW5hYmxlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3QgZmV3IGNoYW5nZXMgYXJlIGp1c3QgY2xlYW51cCDigJMgYWxpZ25pbmcgdGhlIGBTQ0JfQUxJR05NRU5UX1NISUZUYCBjb25zdGFudCwgYW5kIHRoZSBgcGluX2d1ZXN0X3BhZ2VgIHRvIGB1bnBpbl9ndWVzdF9wYWdlYCByZWZhY3RvcmluZywgYW5kIGFkZGluZyBgc3RhdGljX2Fzc2VydGAgc3RhdGVtZW50cyBmb3IgY29tcGlsZS10aW1lIGNoZWNrcywgbm90aGluZyB0byBzZWUgdGhlcmUuIFRoZSByZWFsIHF1ZXN0aW9uIGlzIHRoYXQgc2luZ2xlIGxpbmUgY2hhbmdlOiBgYWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTylgLiAgVGhpcyB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlcyB0aGUgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gIGZlYXR1cmUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gIEl0IHNlZW1zIHNtYWxsLCBidXQgaXQmIzM5O3MgZW5hYmxpbmcgdGhlIGd1ZXN0IHRvIHVzZSBhIDY0LWJpdCBCU0NBIG9yaWdpbi4gVGhhdCBhZmZlY3RzIGBwaW5fYmxvY2tzYCBpbiBgdnNpZS5jYDoKCmBgYGMKCWlmICh0ZXN0X2t2bV9jcHVfZmVhdCh2Y3B1LSZndDtrdm0sIEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pKQoJCWdwYSB8PSAodTY0KSBSRUFEX09OQ0Uoc2NiX28tJmd0O3NjYW9oKSAmbHQ7Jmx0OyAzMjsKYGBgCgpJZiB0aGUgZmVhdHVyZSBpcyBzZXQsIHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSBTQ0Egb3JpZ2luIGFyZSBub3cgcmVhZCBmcm9tIGBzY2Jfby0mZ3Q7c2Nhb2hgLiBUaGlzIG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpZiB0aGVyZSBhcmUgYW55IGlzc3VlcyBoYW5kbGluZyBhIDY0LWJpdCBHUEEgZm9yIHRoZSBTQ0EuIFN5emthbGxlciBjYW4gZnV6eiBLVk0gb24gczM5MHgsIHNvIGl0JiMzOTtzICpyZWFjaGFibGUqLgoKQnV0IGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQ/IFRoZSBjaGFuZ2UgaXMgKnRpbnkqLiBJdCYjMzk7cyBvbmUgbGluZS4gQnV0IGl0JiMzOTtzIGVuYWJsaW5nIHRoaXMgZmVhdHVyZSBmb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uICh2U0lFKSByZWdhcmRsZXNzIG9mIGhvc3Qgc3VwcG9ydCEgIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4uLiBpZiB0aGUgaG9zdCBkb2VzbiYjMzk7dCBzdXBwb3J0IHRoZSA2NC1iaXQgQlNDQSAoYHNjbHAuaGFzXzY0YnNjYW9gIGlzIGZhbHNlKSwgS1ZNIHdpbGwgKmVtdWxhdGUqIGl0IGZvciB0aGUgbmVzdGVkIGd1ZXN0LiAgVGhlIGNvZGUgaW4gYHBpbl9ibG9ja3NgIGFscmVhZHkgKmV4aXN0ZWQqIGJ1dCBpdCYjMzk7cyBub3cgcmVhY2hhYmxlIG9uIGFsbCBob3N0cy4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoZSBlbXVsYXRlZCBob3N0IGluIFFFTVUgKHdoZXJlIFN5emthbGxlciBydW5zKSAqYWxyZWFkeSogaGF2ZSBgc2NscC5oYXNfNjRic2Nhb2A/IElmIFFFTVUgKmRpZCogcHJvdmlkZSBpdCwgdGhpcyBjb2RlIHdhcyBhbHJlYWR5IHJlYWNoYWJsZS4gIElmIGl0ICpkaWRuJiMzOTt0KiwgdGhpcyBpcyAqbmV3bHkqIHJlYWNoYWJsZSBjb2RlLiBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjaGFuZ2VzLCBhbmQgbm9wZSwgdGhhdCBpcyB0aGUgb25seSBmdW5jdGlvbmFsIGNoYW5nZS4KClNvLCB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyOiBJdCAqaXMqIGEgbWlub3IgY2hhbmdlIChqdXN0IGVuYWJsaW5nIGEgZmxhZykuIEhvd2V2ZXIsIGl0ICpkb2VzKiBjaGFuZ2UgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGBwaW5fYmxvY2tzYC4gSSYjMzk7bGwgZGVsdmUgaW50byB0aGUgYHBpbl9ibG9ja3NgIGluIGB2c2llLmNgIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgcG90ZW50aWFsIGZvciBleHBsb2l0YXRpb24uIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgd2hhdCBgcGluX2Jsb2Nrc2AgKmRvZXMqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaW5fYmxvY2tzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vdnNpZS5jPTcwMT1zdGF0aWMgdm9pZCB1bnBpbl9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBocGFfdCBocGEpXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzA3LVxuYXJjaC9zMzkwL2t2bS92c2llLmM6NzA4Oi8qIHVucGluIGFsbCBibG9ja3MgcHJldmlvdXNseSBwaW5uZWQgYnkgcGluX2Jsb2NrcygpLCBtYXJraW5nIHRoZW0gZGlydHkgKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjcwOTpzdGF0aWMgdm9pZCB1bnBpbl9ibG9ja3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy03MTAte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTc2NC0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjc2NTpzdGF0aWMgaW50IHBpbl9ibG9ja3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy03NjYte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTg3Ny11bnBpbjpcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjg3ODpcdHVucGluX2Jsb2Nrcyh2Y3B1LCB2c2llX3BhZ2UpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtODc5LVx0cmV0dXJuIHJjO1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTE1NTY9aW50IGt2bV9zMzkwX2hhbmRsZV92c2llKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTkzLVx0XHRnb3RvIG91dF91bnBpbl9zY2I7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNTk0Olx0cmMgPSBwaW5fYmxvY2tzKHZjcHUsIHZzaWVfcGFnZSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTk1LVx0aWYgKHJjKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1OTktXHR1bnJlZ2lzdGVyX3NoYWRvd19zY2IodmNwdSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjAwOlx0dW5waW5fYmxvY2tzKHZjcHUsIHZzaWVfcGFnZSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjAxLW91dF91bnNoYWRvdzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNjMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcGluX2Jsb2Nrc2AgRnVuY3Rpb24gQ2FsbCoqCgpPa2F5LCBzbyBgcGluX2Jsb2Nrc2AgZ2V0cyBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgLiBUaGF0IG1lYW5zIHRoZSBgU0lFYCBpbnN0cnVjdGlvbiDigJMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIOKAkyBpcyB0aGUga2V5IGhlcmUuIFdoZW4gYSBndWVzdCBpc3N1ZXMgYW4gYFNJRWAgaW5zdHJ1Y3Rpb24sIHRoZSBjb250cm9sIGZsb3cgaGl0cyBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBwaW5fYmxvY2tzYC4gTm93LCBpZiBgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT2AgaXMgZW5hYmxlZCwgdGhlIGNvZGUgd2lsbCByZWFkIGBzY2FvaGAgYW5kIHVzZSBpdCBmb3IgdGhlIEdQQS4gVGhhdCYjMzk7cyBhIGNsZWFyIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBLVk0gczM5MHggbG9naWMsIG5vIHF1ZXN0aW9uLiBUaGVyZWZvcmUsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZywgSSYjMzk7bGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgbG9va3MgbGlrZSB0aGUgb2J2aW91cyBjaG9pY2UuIEl0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCBmb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBhbmQgdGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gYHBpbl9ibG9ja3NgIGlzIHN0YXRpYywgc28gaXQgKm1pZ2h0KiBiZSBpbmxpbmVkLiBCdXQgYGt2bV9zMzkwX2hhbmRsZV92c2llYCBpcyBub3QuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGt2bV9zMzkwX2hhbmRsZV92c2llYCBpc24mIzM5O3Qgc3RhdGljIGFuZCBpcyBleHBvcnRlZCwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9oYW5kbGVfdnNpZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9NDQyPWludCBrdm1fczM5MF9za2V5X2NoZWNrX2VuYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC00NDQtLyogaW1wbGVtZW50ZWQgaW4gdnNpZS5jICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6NDQ1OmludCBrdm1fczM5MF9oYW5kbGVfdnNpZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTQ0Ni12b2lkIGt2bV9zMzkwX3ZzaWVfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTk1OD1pbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NzEtXHRjYXNlIDB4MTQ6XG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo5NzI6XHRcdHJldHVybiBrdm1fczM5MF9oYW5kbGVfdnNpZSh2Y3B1KTtcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk3My1cdGNhc2UgMHgyMTpcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xNDgyPXN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1NTUtXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNTU2OmludCBrdm1fczM5MF9oYW5kbGVfdnNpZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTU3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMDUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgaXMgdGhlIGNsZWFyIHN0YXJ0aW5nIHBvaW50LiBJdCYjMzk7cyBub24tc3RhdGljLCBtZWFuaW5nIGl0JiMzOTtzIGV4dGVybmFsbHkgdmlzaWJsZSwgYW5kIGl0JiMzOTtzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBrdm1fczM5MF9oYW5kbGVfYjJgLiAgQW5kLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGAweGIyMTRgIGNvcnJlc3BvbmRzIHRvIHRoZSBTeXN0ZW0gSW5zdHJ1Y3Rpb24gRXhlY3V0aW9uIChTSUUpIGluc3RydWN0aW9uLiBQZXJmZWN0LiBUaGF0JiMzOTtzIGEgc29saWQsIGlkZW50aWZpYWJsZSBlbnRyeSBwb2ludCBmb3IgYW5hbHlzaXMgcmVsYXRlZCB0byBWU0lFLgoKTm93LCBsZXQmIzM5O3MgYnJvYWRlbiB0aGUgbmV0IGEgYml0LiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQ/IFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIGZlYXR1cmUgaXMgKmVuYWJsZWQqIGZyb20gdXNlcnNwYWNlLiBBaCwgeWVzLCBga3ZtX3MzOTBfc2V0X3Byb2Nlc3Nvcl9mZWF0YC4gIFRoYXQgd291bGQgYmUgd2hlcmUgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwgdG8gYWN0aXZhdGUgdGhlIGZlYXR1cmUuIEkgc2hvdWxkIGFkZCB0aGF0IHRvIHRoZSBsaXN0IG9mIGtleSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3NldF9wcm9jZXNzb3JfZmVhdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTQ5Nz1zdGF0aWMgaW50IGt2bV9zMzkwX3NldF9wcm9jZXNzb3Ioc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNTQyLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjE1NDM6c3RhdGljIGludCBrdm1fczM5MF9zZXRfcHJvY2Vzc29yX2ZlYXQoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTE1NDQtXHRcdFx0XHQgICAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTY4Mj1zdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jcHVfbW9kZWwoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNjkwLVx0Y2FzZSBLVk1fUzM5MF9WTV9DUFVfUFJPQ0VTU09SX0ZFQVQ6XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTY5MTpcdFx0cmV0ID0ga3ZtX3MzOTBfc2V0X3Byb2Nlc3Nvcl9mZWF0KGt2bSwgYXR0cik7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTY5Mi1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODE3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRlbHZpbmcgaW50byBDUFUgTW9kZWwgQXR0cmlidXRlcyB3aXRoIGBrdm1fczM5MF9zZXRfY3B1X21vZGVsYCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50LCBga3ZtX3MzOTBfc2V0X2NwdV9tb2RlbGAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBlbXVsYXRlZCBDUFUmIzM5O3MgcGVyc29uYWxpdHkgd2l0aGluIHRoZSBLVk0vczM5MCBmcmFtZXdvcmsuIEl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCB0aGUgY2VudHJhbCBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGFuZCBpbnRlcnByZXRzIHJlcXVlc3RzIHRvIGFsdGVyIHRoZSBwZXJjZWl2ZWQgQ1BVIG1vZGVsIHByZXNlbnRlZCB0byB0aGUgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbS4gSXTigJlzIHdoZXJlIHRoZSBhYnN0cmFjdGlvbiBvZiB0aGUgcGh5c2ljYWwgQ1BVIGNhcGFiaWxpdGllcyBpcyBzaGFwZWQgdG8gZml0IHRoZSBuZWVkcyBvZiB0aGUgdmlydHVhbCBtYWNoaW5lLgoKSSYjMzk7bSBpbnN0YW50bHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2hhdCBraW5kIG9mIGF0dHJpYnV0ZXMgYXJlIHdlIHNldHRpbmcgaGVyZT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gc2V0IGZlYXR1cmVzLCBjYXBhYmlsaXRpZXMgbGlrZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLCBwZXJmb3JtYW5jZSBjb3VudGVycywgb3IgcGVyaGFwcyBldmVuIG1pY3JvY29kZSBsZXZlbHM/IFVuZGVyc3RhbmRpbmcgdGhlIHByZWNpc2UgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBpcyBwYXJhbW91bnQuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgbG9naWMgd2l0aGluIGBrdm1fczM5MF9zZXRfY3B1X21vZGVsYCB0byBncmFzcCBob3cgaXQgdHJhbnNsYXRlcyB0aG9zZSByZXF1ZXN0cyBpbnRvIHRoZSBhY3R1YWwgQ1BVIG1vZGVsIHRoZSBndWVzdCB3aWxsIHNlZS4gQXJlIHRoZXJlIGFueSByZXN0cmljdGlvbnMsIGRlZmF1bHQgbW9kZWxzLCBvciB2YWxpZGF0aW9uIGNoZWNrcyBpbnZvbHZlZD8gQW55IHBvdGVudGlhbCBmb3IgaW5jb21wYXRpYmlsaXR5IG9yIG1pc2NvbmZpZ3VyYXRpb24gaWYgdGhlc2UgYXR0cmlidXRlcyBhcmUgbm90IHNldCBjb3JyZWN0bHk/IFRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSYjMzk7cyBvdmVyYWxsIHJlbGlhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBhcmUgdHJ1bHkgZGVmaW5lZC4gV2UgaGF2ZSB0byBiZSBtZXRpY3Vsb3VzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3NldF9jcHVfbW9kZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTE2NTg9c3RhdGljIGludCBrdm1fczM5MF9zZXRfdXZfZmVhdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTE2ODEtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTY4MjpzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jcHVfbW9kZWwoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTE2ODMte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMDQyPXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDUzLVx0Y2FzZSBLVk1fUzM5MF9WTV9DUFVfTU9ERUw6XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjA1NDpcdFx0cmV0ID0ga3ZtX3MzOTBfc2V0X2NwdV9tb2RlbChrdm0sIGF0dHIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIwNTUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUzMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0vczM5MCBDb2RlIGZvciBGZWF0dXJlIEV4ZWN1dGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBzcGVjaWZpYyBmZWF0dXJlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIEtWTS9zMzkwIGFyY2hpdGVjdHVyZS4gSSYjMzk7dmUgaWRlbnRpZmllZCBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIGFzIHRoZSBpb2N0bCBoYW5kbGVyIGZvciBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgb24gdGhlIFZNIGZpbGUgZGVzY3JpcHRvci4gV2hpbGUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBpdCYjMzk7cyBub3QgcXVpdGUgYXQgdGhlIGxldmVsIG9mIGRldGFpbCBJJiMzOTttIGFmdGVyLCBhbmQgSSBiZWxpZXZlIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgaXMgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZSBhY3R1YWwgZXhlY3V0aW9uIG9mIGEgc3BlY2lmaWMgZmVhdHVyZS4KClRoZXJlZm9yZSwgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbiwgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGJvdGggYGt2bV9zMzkwX2hhbmRsZV92c2llYCBhbmQgYGt2bV9zMzkwX3ZtX3NldF9hdHRyYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCk5vdywgYmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBzeXN0ZW0gaXMgYnVpbHQgd2l0aCBgQ09ORklHX0tWTWAuIFRoZSBjb2RlIGl0c2VsZiwgb2YgY291cnNlLCByZXNpZGVzIHdpdGhpbiB0aGUgYGFyY2gvczM5MC9rdm0vYCBkaXJlY3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMjEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBhbmQgYEtWTWAgaXMgZGVmaW5pdGVseSB0aGUgbWFpbiBjb25maWd1cmF0aW9uIHBvaW50LiBCdXQgaG9sZCBvbiwgSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGBLVk1gIGlzIGEgdHJpc3RhdGUuIFRoYXQgbWVhbnMgaXQgY2FuIGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlIOKAkyBnb29kIHRvIGtub3cuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gS1ZNIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGJlIHRob3JvdWdoLCBJIHN1cHBvc2UuIFJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgaW4gYGFyY2gvczM5MC9rdm0vTWFrZWZpbGVgIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIE1ha2VmaWxlIGlzIHVzdWFsbHkgd2hlcmUgcmVsYXRlZCBvcHRpb25zIGFyZSBnYXRoZXJlZCwgc28gaG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCMgTWFrZWZpbGUgZm9yIGtlcm5lbCB2aXJ0dWFsIG1hY2hpbmVzIG9uIHMzOTBcbiAgIDM6XHQjXG4gICA0Olx0IyBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDhcbiAgIDU6XHRcbiAgIDY6XHRpbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXG4gICA3Olx0XG4gICA4Olx0Y2NmbGFncy15IDo9IC1JdmlydC9rdm0gLUlhcmNoL3MzOTAva3ZtXG4gICA5Olx0XG4gIDEwOlx0a3ZtLXkgJiM0Mzs9IGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3Aub1xuICAxMTpcdGt2bS15ICYjNDM7PSBkaWFnLm8gZ2FjY2Vzcy5vIGd1ZXN0ZGJnLm8gdnNpZS5vIHB2Lm9cbiAgMTI6XHRrdm0teSAmIzQzOz0gZGF0Lm8gZ21hcC5vIGZhdWx0aW4ub1xuICAxMzpcdFxuICAxNDpcdGt2bS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgJiM0Mzs9IHBjaS5vXG4gIDE1Olx0b2JqLSQoQ09ORklHX0tWTSkgJiM0Mzs9IGt2bS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjMwCgkJCQkJCQlvdXRwdXQ6IDE2MgoJCQkJCQkJdGhvdWdodHM6IDI1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBpbml0aWFsbHkgdGhvdWdodCBgQ09ORklHX0tWTWAgd2FzIHRoZSBrZXksIGJ1dCBhIGNsb3NlciBsb29rIGF0IHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgYHZzaWUuY2AsIHNob3dzIGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDT05GSUdfS1ZNYCBpcyBhY3RpdmUuIFRoZXJlZm9yZSwgYEtWTWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gZmxhZyB0byBmb2N1cyBvbi4KCkxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHk6CgoqICAgKipGdW5jdGlvbmFsIENoYW5nZToqKiBBYnNvbHV0ZWx5LCB0aGlzIGVuYWJsZXMgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gIHVuY29uZGl0aW9uYWxseS4gSXQgYWx0ZXJzIHRoZSBiZWhhdmlvciwgd2hpY2ggbWFrZXMgaXQgaW50ZXJlc3RpbmcuCiogICAqKlJlYWNoYWJpbGl0eToqKiBZZXMsIHRoaXMgaXMgcmVhY2hhYmxlIHRocm91Z2ggS1ZNIGlvY3RscyBhbmQgdHJpZ2dlcmVkIGJ5IHRoZSBgU0lFYCBpbnN0cnVjdGlvbiB3aXRoaW4gYSBndWVzdC4gVGhhdCYjMzk7cyBhIGNsZWFyIHBhdGggdG8gdHJpZ2dlciB0aGUgY2hhbmdlLgoqICAgKipGdXp6YWJpbGl0eToqKiBEZWZpbml0ZWx5LiBUaGlzIGltcGFjdHMgbmVzdGVkIHZpcnR1YWxpemF0aW9uICh2U0lFKSBieSBhbGxvd2luZyBhIDY0LWJpdCBCU0NBIG9yaWdpbi4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGVub3VnaCBzaGlmdCBpbiBiZWhhdmlvciB0byB3YXJyYW50IGZ1enppbmcuCiogICAqKkZvY3VzIFN5bWJvbHM6KiogVGhlIGtleSBmdW5jdGlvbnMgdG8gaW52ZXN0aWdhdGUgd2lsbCBiZSBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgIGFuZCBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgLgoqICAgKipFbmFibGUgQ29uZmlndXJhdGlvbnM6KiogVGhlIGZvY3VzIGlzIGNsZWFybHkgb24gYEtWTWAuCgpOb3csIEkmIzM5O20ganVzdCBkb3VibGUtY2hlY2tpbmcgbXkgY2hvaWNlIG9mIGZvY3VzIHN5bWJvbHMuIElzIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgdGhlICpiZXN0KiBlbnRyeSBwb2ludD8gWWVzLCBpdCBpcy4gSXQmIzM5O3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBoYW5kbGluZy4gQW5kLCBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIGlzIHdoZXJlIHRoZSBDUFUgZmVhdHVyZSBpcyBzZXQuIEkgdGhpbmsgdGhpcyBpcyBhIHJvYnVzdCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV92c2llJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3NldF9hdHRyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIEtWTSBDUFUgZmVhdHVyZSBpbml0aWFsaXphdGlvbiBieSB1bmNvbmRpdGlvbmFsbHkgYWxsb3dpbmcgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTy4gVGhpcyBhbGxvd3MgdXNlcnNwYWNlIHRvIGVuYWJsZSB0aGUgNjQtYml0IEJTQ0Egb3JpZ2luIGZlYXR1cmUgZm9yIGEgZ3Vlc3QsIHdoaWNoIGFsdGVycyBob3cgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgaXMgY2FsY3VsYXRlZCBpbiBgcGluX2Jsb2Nrc2AgZHVyaW5nIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiAodlNJRSkuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCB0aGUgU0lFIGluc3RydWN0aW9uIGluIGEgZ3Vlc3QsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfdnNpZSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zZXRfYXR0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmdW5jdGlvbmFsbHkgY2hhbmdlcyBLVk0gQ1BVIGZlYXR1cmUgaW5pdGlhbGl6YXRpb24gYnkgdW5jb25kaXRpb25hbGx5IGFsbG93aW5nIEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8uIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBlbmFibGUgdGhlIDY0LWJpdCBCU0NBIG9yaWdpbiBmZWF0dXJlIGZvciBhIGd1ZXN0LCB3aGljaCBhbHRlcnMgaG93IHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIGlzIGNhbGN1bGF0ZWQgaW4gYHBpbl9ibG9ja3NgIGR1cmluZyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gKHZTSUUpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgdGhlIFNJRSBpbnN0cnVjdGlvbiBpbiBhIGd1ZXN0LCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwZXJmb3JtcyBtaW5vciByZWZhY3RvcmluZyAocmVwbGFjaW5nIGhhcmRjb2RlZCBzaGlmdCB2YWx1ZXMgd2l0aCBhIG1hY3JvLCB1c2luZyBwaHlzX3RvX3BmbiBpbnN0ZWFkIG9mIGJpdHdpc2Ugc2hpZnQpIGFuZCBlbmFibGVzIGEgS1ZNIENQVSBmZWF0dXJlIChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKSB1bmNvbmRpdGlvbmFsbHkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGJ1ZmZlcnMsIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMsIG9yIGNvcHlpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgxYTA5NDc0MzE0ZDZkMmYyMzE4MTExYWRiODM5Y2E2NzhiYjFiYzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjIyOjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaAppbmRleCAzZjUwOTQyYmRmZTZjLi5hYzgyZGQwOWZjZTUyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaApAQCAtOSw2ICYjNDM7OSw4IEBACiAjZGVmaW5lIEtWTV9TMzkwX0JTQ0FfQ1BVX1NMT1RTIDY0CiAjZGVmaW5lIEtWTV9TMzkwX0VTQ0FfQ1BVX1NMT1RTIDI0OAogCiYjNDM7I2RlZmluZSBTQ0JfQUxJR05NRU5UX1NISUZUIDkKJiM0MzsKICNkZWZpbmUgU0lHUF9DVFJMX0MJCTB4ODAKICNkZWZpbmUgU0lHUF9DVFJMX1NDTl9NQVNLCTB4M2YKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDE1MGI1ZGQyMTcwZTIuLmM2NzlkOGY4M2MwZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTQ1NSw4ICYjNDM7NDU1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGt2bV9zMzkwX2NwdV9mZWF0X2luaXQodm9pZCkKIAkgICAgIXRlc3RfZmFjaWxpdHkoMykgfHwgIW5lc3RlZCkKIAkJcmV0dXJuOwogCWFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUX1NJRUYyKTsKLQlpZiAoc2NscC5oYXNfNjRic2NhbykKLQkJYWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTyk7CiYjNDM7CWFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pOwogCWlmIChzY2xwLmhhc19zaWlmKQogCQlhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUlGKTsKIAlpZiAoc2NscC5oYXNfZ3BlcmUpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ZzaWUuYyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jCmluZGV4IGVlYTI0NTYyZTdkYjIuLmViNjBhMzU5ZDBhYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vdnNpZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jCkBAIC0zMywxMCAmIzQzOzMzLDcgQEAgZW51bSB2c2llX3BhZ2VfZmxhZ3MgewogCiBzdHJ1Y3QgdnNpZV9wYWdlIHsKIAlzdHJ1Y3Qga3ZtX3MzOTBfc2llX2Jsb2NrIHNjYl9zOwkvKiAweDAwMDAgKi8KLQkvKgotCSAqIHRoZSBiYWNrdXAgaW5mbyBmb3IgbWFjaGluZSBjaGVjay4gZW5zdXJlIGl0JiMzOTtzIGF0Ci0JICogdGhlIHNhbWUgb2Zmc2V0IGFzIHRoYXQgaW4gc3RydWN0IHNpZV9wYWdlIQotCSAqLwomIzQzOwkvKiBiYWNrdXAgaW5mbyBmb3IgbWFjaGluZSBjaGVjayAqLwogCXN0cnVjdCBtY2NrX3ZvbGF0aWxlX2luZm8gbWNja19pbmZvOyAgICAvKiAweDAyMDAgKi8KIAkvKgogCSAqIFRoZSBwaW5uZWQgb3JpZ2luYWwgc2NiLiBCZSBhd2FyZSB0aGF0IG90aGVyIFZDUFVzIGNhbiBtb2RpZnkKQEAgLTcxLDYgJiM0Mzs2OCw4IEBAIHN0cnVjdCB2c2llX3BhZ2UgewogfTsKIAogc3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IHZzaWVfcGFnZSkgPT0gUEFHRV9TSVpFKTsKJiM0MztzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2c2llX3BhZ2UsIG1jY2tfaW5mbykgPT0gb2Zmc2V0b2Yoc3RydWN0IHNpZV9wYWdlLCBtY2NrX2luZm8pKTsKJiM0MztzdGF0aWNfYXNzZXJ0KElTX0FMSUdORUQob2Zmc2V0b2Yoc3RydWN0IHZzaWVfcGFnZSwgY3J5Y2IpLCA4KSk7CiAKIC8qIHRyaWdnZXIgYSB2YWxpZGl0eSBpY3B0IGZvciB0aGUgZ2l2ZW4gc2NiICovCiBzdGF0aWMgaW50IHNldF92YWxpZGl0eV9pY3B0KHN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgKnNjYiwKQEAgLTcwMSw3ICYjNDM7NzAwLDcgQEAgc3RhdGljIGludCBwaW5fZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgaHBhX3QgKmhwYSkKIC8qIFVucGlucyBhIHBhZ2UgcHJldmlvdXNseSBwaW5uZWQgdmlhIHBpbl9ndWVzdF9wYWdlLCBtYXJraW5nIGl0IGFzIGRpcnR5LiAqLwogc3RhdGljIHZvaWQgdW5waW5fZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgaHBhX3QgaHBhKQogewotCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkocGZuX3RvX3BhZ2UoaHBhICZndDsmZ3Q7IFBBR0VfU0hJRlQpKTsKJiM0MzsJa3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShwZm5fdG9fcGFnZShwaHlzX3RvX3BmbihocGEpKSk7CiAJLyogbWFyayB0aGUgcGFnZSBhbHdheXMgYXMgZGlydHkgZm9yIG1pZ3JhdGlvbiAqLwogCW1hcmtfcGFnZV9kaXJ0eShrdm0sIGdwYV90b19nZm4oZ3BhKSk7CiB9CkBAIC0xNDg2LDcgJiM0MzsxNDg1LDcgQEAgc3RhdGljIHN0cnVjdCB2c2llX3BhZ2UgKmdldF92c2llX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIpCiAJaW50IG5yX3ZjcHVzOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXZzaWVfcGFnZSA9IHJhZGl4X3RyZWVfbG9va3VwKCZhbXA7a3ZtLSZndDthcmNoLnZzaWUuYWRkcl90b19wYWdlLCBhZGRyICZndDsmZ3Q7IDkpOwomIzQzOwl2c2llX3BhZ2UgPSByYWRpeF90cmVlX2xvb2t1cCgmYW1wO2t2bS0mZ3Q7YXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciAmZ3Q7Jmd0OyBTQ0JfQUxJR05NRU5UX1NISUZUKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlpZiAodnNpZV9wYWdlKSB7CiAJCWlmICh0cnlfZ2V0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpKSB7CkBAIC0xNTI3LDEzICYjNDM7MTUyNiwxNCBAQCBzdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIAkJfQogCQlpZiAodnNpZV9wYWdlLSZndDtzY2JfZ3BhICE9IFVMT05HX01BWCkKIAkJCXJhZGl4X3RyZWVfZGVsZXRlKCZhbXA7a3ZtLSZndDthcmNoLnZzaWUuYWRkcl90b19wYWdlLAotCQkJCQkgIHZzaWVfcGFnZS0mZ3Q7c2NiX2dwYSAmZ3Q7Jmd0OyA5KTsKJiM0MzsJCQkJCSAgdnNpZV9wYWdlLSZndDtzY2JfZ3BhICZndDsmZ3Q7IFNDQl9BTElHTk1FTlRfU0hJRlQpOwogCX0KIAkvKiBNYXJrIGl0IGFzIGludmFsaWQgdW50aWwgaXQgcmVzaWRlcyBpbiB0aGUgdHJlZS4gKi8KIAl2c2llX3BhZ2UtJmd0O3NjYl9ncGEgPSBVTE9OR19NQVg7CiAKIAkvKiBEb3VibGUgdXNlIG9mIHRoZSBzYW1lIGFkZHJlc3Mgb3IgYWxsb2NhdGlvbiBmYWlsdXJlLiAqLwotCWlmIChyYWRpeF90cmVlX2luc2VydCgmYW1wO2t2bS0mZ3Q7YXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciAmZ3Q7Jmd0OyA5LCB2c2llX3BhZ2UpKSB7CiYjNDM7CWlmIChyYWRpeF90cmVlX2luc2VydCgmYW1wO2t2bS0mZ3Q7YXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciAmZ3Q7Jmd0OyBTQ0JfQUxJR05NRU5UX1NISUZULAomIzQzOwkJCSAgICAgIHZzaWVfcGFnZSkpIHsKIAkJcHV0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpOwogCQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2gudnNpZS5tdXRleCk7CiAJCXJldHVybiBOVUxMOwpAQCAtMTU2NSw3ICYjNDM7MTU2NSw2IEBAIGludCBrdm1fczM5MF9oYW5kbGVfdnNpZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtncHN3Lm1hc2sgJmFtcDsgUFNXX01BU0tfUFNUQVRFKQogCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9QUklWSUxFR0VEX09QKTsKIAotCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHZzaWVfcGFnZSkgIT0gUEFHRV9TSVpFKTsKIAlzY2JfYWRkciA9IGt2bV9zMzkwX2dldF9iYXNlX2Rpc3Bfcyh2Y3B1LCBOVUxMKTsKIAogCS8qIDUxMiBieXRlIGFsaWdubWVudCAqLwpAQCAtMTYzMiw3ICYjNDM7MTYzMSw3IEBAIHZvaWQga3ZtX3MzOTBfdnNpZV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSkKIAkJLyogZnJlZSB0aGUgcmFkaXggdHJlZSBlbnRyeSAqLwogCQlpZiAodnNpZV9wYWdlLSZndDtzY2JfZ3BhICE9IFVMT05HX01BWCkKIAkJCXJhZGl4X3RyZWVfZGVsZXRlKCZhbXA7a3ZtLSZndDthcmNoLnZzaWUuYWRkcl90b19wYWdlLAotCQkJCQkgIHZzaWVfcGFnZS0mZ3Q7c2NiX2dwYSAmZ3Q7Jmd0OyA5KTsKJiM0MzsJCQkJCSAgdnNpZV9wYWdlLSZndDtzY2JfZ3BhICZndDsmZ3Q7IFNDQl9BTElHTk1FTlRfU0hJRlQpOwogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdnNpZV9wYWdlKTsKIAl9CiAJa3ZtLSZndDthcmNoLnZzaWUucGFnZV9jb3VudCA9IDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU3CgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDg2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogczM5MCBLVk0gUmVmYWN0b3JpbmcgYW5kIEZlYXR1cmUgRW5hYmxlbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgIGFuZCBgYXJjaC9zMzkwL2t2bS92c2llLmNgLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFib3V0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gbGV0JiMzOTtzIGRpZyBpbi4gSXQmIzM5O3MgcmVwbGFjaW5nIHNvbWUgaGFyZGNvZGVkIHNoaWZ0IHZhbHVlcyB3aXRoIGBTQ0JfQUxJR05NRU5UX1NISUZUYCwgd2hpY2gsIGZyb20gdGhlIGNvZGUsIEkga25vdyBpcyBqdXN0IDkuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIGZvciBtYWludGFpbmFiaWxpdHkuIEFsc28sIGBocGEgJmd0OyZndDsgUEFHRV9TSElGVGAgaXMgYmVjb21pbmcgYHBoeXNfdG9fcGZuKGhwYSlgLiBBZ2Fpbiwgc291bmRzIGxpa2UgYSBjbGVhbmVyIHdheSB0byBleHByZXNzIHRoZSBzYW1lIHRoaW5nLiBUaGV5JiMzOTtyZSBhZGRpbmcgc29tZSBgc3RhdGljX2Fzc2VydGBzIGFuZCBtb3ZpbmcgY29tbWVudHMgYXJvdW5kIHRvby4KClRoZSBwYXJ0IHRoYXQgZ2F2ZSBtZSBwYXVzZSB3YXMgcmVtb3ZpbmcgdGhlIGBzY2xwLmhhc182NGJzY2FvYCBjaGVjayBiZWZvcmUgZW5hYmxpbmcgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gLiBUaGlzIGZlZWxzIGxpa2UgaXQgbWlnaHQgYmUgYSBzdWJ0bGUgZmVhdHVyZSBlbmFibGVtZW50IHdpdGhvdXQgdGhlIHVzdWFsIGdhdGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHRoZSBndWVzdCBub3cgdXNlIDY0LWJpdCBCU0NBIGV2ZW4gaWYgdGhlIGhvc3QgZG9lc24mIzM5O3QgZnVsbHkgc3VwcG9ydCBpdD8mIzM0OyBCdXQgdGhlbiBJIHJlbWVtYmVyZWQsIHRoaXMgaXMgKmp1c3QqIGEgZmVhdHVyZSBiaXQuIEVuYWJsaW5nIGl0ICpkb2VzbiYjMzk7dCogYXV0b21hdGljYWxseSBjYXVzZSB0aGUgZ3Vlc3QgdG8gdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByaWdodD8gSXQganVzdCBhbGxvd3MgdGhlIGZ1bmN0aW9uYWxpdHkgaWYgdGhlIGhhcmR3YXJlIGlzIHRoZXJlLiBJdCYjMzk7cyBhIGtleSBkaWZmZXJlbmNlIGZyb20gYWxsb2NhdGluZyBvciBjb3B5aW5nIGRhdGEuCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYGFsbG93X2NwdV9mZWF0YC4gSWYgdGhlIGd1ZXN0IHN1YnNlcXVlbnRseSAqdXNlcyogNjQtYml0IEJTQ0EsIGRvZXMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCB0aGF0JiMzOTtzIG5vdCB3aGF0IHRoaXMgYml0IGRvZXMuIElmIHRoZSBob3N0IGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhlIGZlYXR1cmUsIHRoZSBndWVzdCBtYXkgdHJ5IHRvIHVzZSBpdCBidXQgaXQgc2hvdWxkbiYjMzk7dCBhY2Nlc3MgdW5pbml0aWFsaXplZCBkYXRhLiBMZXQgbWUgdGhpbmssIHRoaXMgaXMganVzdCBlbmFibGluZyB0aGUgZmVhdHVyZTsgaXQgZG9lc24mIzM5O3QgaW5pdGlhbGl6ZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGl0c2VsZi4gU2VlbXMgbGlrZSBhIHJlZ3VsYXIgS1ZNIGJ1ZyBvciBmZWF0dXJlIGVuYWJsZW1lbnQsIHNvIG5vdCBhIHByb2JsZW0uCgpOb3cgbGV0IG1lIHJ1biB0aHJvdWdoIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMuIExvb2tpbmcgYXQgYHVucGluX2d1ZXN0X3BhZ2VgOgoKYGBgYwpzdGF0aWMgdm9pZCB1bnBpbl9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBocGFfdCBocGEpCnsKCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkocGZuX3RvX3BhZ2UocGh5c190b19wZm4oaHBhKSkpOwoJLyogbWFyayB0aGUgcGFnZSBhbHdheXMgYXMgZGlydHkgZm9yIG1pZ3JhdGlvbiAqLwoJbWFya19wYWdlX2RpcnR5KGt2bSwgZ3BhX3RvX2dmbihncGEpKTsKfQpgYGAKClRoYXQmIzM5O3MganVzdCByZXBsYWNpbmcgdGhlIGJpdCBzaGlmdCB3aXRoIHRoZSBgcGh5c190b19wZm5gIGhlbHBlciwgd2hpY2ggaXMgY2xlYW5lciBhbmQgc2FmZXIuIFRoZW4gdGhlcmUmIzM5O3MgYGdldF92c2llX3BhZ2VgOgoKYGBgYwoJdnNpZV9wYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoJmFtcDtrdm0tJmd0O2FyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgJmd0OyZndDsgU0NCX0FMSUdOTUVOVF9TSElGVCk7CmBgYAoKQW5vdGhlciBzaW1wbGUgcmVwbGFjZW1lbnQgb2YgYDlgIHdpdGggYFNDQl9BTElHTk1FTlRfU0hJRlRgLiBOb3RoaW5nIHRvIHdvcnJ5IGFib3V0LgoKU28sIGNvbmNsdWRpbmcgdGhlIGFuYWx5c2lzLCBJIHNlZSBubyBpbmRpY2F0aW9uIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBhbnkgcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrcy4gSXQmIzM5O3MgcmVmYWN0b3JpbmcsIG1ha2luZyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlIGFuZCBtYWludGFpbmFibGUsIHBsdXMgZW5hYmxpbmcgYSBDUFUgZmVhdHVyZSB3aGljaCBpdHNlbGYgZG9lc24mIzM5O3QgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gR2l2ZW4gdGhpcywgSSBjYW4gY29uZmlkZW50bHkgc3RhdGUgdGhhdCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQmIzM5O3MgYSBsb3ctcmlzayBjaGFuZ2UuIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwZXJmb3JtcyBtaW5vciByZWZhY3RvcmluZyAocmVwbGFjaW5nIGhhcmRjb2RlZCBzaGlmdCB2YWx1ZXMgd2l0aCBhIG1hY3JvLCB1c2luZyBwaHlzX3RvX3BmbiBpbnN0ZWFkIG9mIGJpdHdpc2Ugc2hpZnQpIGFuZCBlbmFibGVzIGEgS1ZNIENQVSBmZWF0dXJlIChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKSB1bmNvbmRpdGlvbmFsbHkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGJ1ZmZlcnMsIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMsIG9yIGNvcHlpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwZXJmb3JtcyBtaW5vciByZWZhY3RvcmluZyAocmVwbGFjaW5nIGhhcmRjb2RlZCBzaGlmdCB2YWx1ZXMgd2l0aCBhIG1hY3JvLCB1c2luZyBwaHlzX3RvX3BmbiBpbnN0ZWFkIG9mIGJpdHdpc2Ugc2hpZnQpIGFuZCBlbmFibGVzIGEgS1ZNIENQVSBmZWF0dXJlIChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKSB1bmNvbmRpdGlvbmFsbHkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGJ1ZmZlcnMsIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMsIG9yIGNvcHlpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIyOjMyLjYyMzg3ODA4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDc4NDk1ODY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfdnNpZVwiLFxuICAgIFwia3ZtX3MzOTBfdm1fc2V0X2F0dHJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHBlcmZvcm1zIG1pbm9yIHJlZmFjdG9yaW5nIChyZXBsYWNpbmcgaGFyZGNvZGVkIHNoaWZ0IHZhbHVlcyB3aXRoIGEgbWFjcm8sIHVzaW5nIHBoeXNfdG9fcGZuIGluc3RlYWQgb2YgYml0d2lzZSBzaGlmdCkgYW5kIGVuYWJsZXMgYSBLVk0gQ1BVIGZlYXR1cmUgKEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pIHVuY29uZGl0aW9uYWxseS4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgYWxsb2NhdGluZyBuZXcgYnVmZmVycywgbW9kaWZ5aW5nIGRhdGEgbGVuZ3Rocywgb3IgY29weWluZyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmdW5jdGlvbmFsbHkgY2hhbmdlcyBLVk0gQ1BVIGZlYXR1cmUgaW5pdGlhbGl6YXRpb24gYnkgdW5jb25kaXRpb25hbGx5IGFsbG93aW5nIEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8uIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBlbmFibGUgdGhlIDY0LWJpdCBCU0NBIG9yaWdpbiBmZWF0dXJlIGZvciBhIGd1ZXN0LCB3aGljaCBhbHRlcnMgaG93IHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIGlzIGNhbGN1bGF0ZWQgaW4gYHBpbl9ibG9ja3NgIGR1cmluZyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gKHZTSUUpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgdGhlIFNJRSBpbnN0cnVjdGlvbiBpbiBhIGd1ZXN0LCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjI6MzIuNjIzODg1Mzc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY3OTIyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MWEwOTQ3NDMxNGQ2ZDJmMjMxODExMWFkYjgzOWNhNjc4YmIxYmMyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTI6MjI6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaFxcbmluZGV4IDNmNTA5NDJiZGZlNmMuLmFjODJkZDA5ZmNlNTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaFxcbkBAIC05LDYgKzksOCBAQFxcbiAjZGVmaW5lIEtWTV9TMzkwX0JTQ0FfQ1BVX1NMT1RTIDY0XFxuICNkZWZpbmUgS1ZNX1MzOTBfRVNDQV9DUFVfU0xPVFMgMjQ4XFxuIFxcbisjZGVmaW5lIFNDQl9BTElHTk1FTlRfU0hJRlQgOVxcbitcXG4gI2RlZmluZSBTSUdQX0NUUkxfQ1xcdFxcdDB4ODBcXG4gI2RlZmluZSBTSUdQX0NUUkxfU0NOX01BU0tcXHQweDNmXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG5pbmRleCAxNTBiNWRkMjE3MGUyLi5jNjc5ZDhmODNjMGVjIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbkBAIC00NTUsOCArNDU1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGt2bV9zMzkwX2NwdV9mZWF0X2luaXQodm9pZClcXG4gXFx0ICAgICF0ZXN0X2ZhY2lsaXR5KDMpIHx8ICFuZXN0ZWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lFRjIpO1xcbi1cXHRpZiAoc2NscC5oYXNfNjRic2NhbylcXG4tXFx0XFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTyk7XFxuK1xcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pO1xcbiBcXHRpZiAoc2NscC5oYXNfc2lpZilcXG4gXFx0XFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lJRik7XFxuIFxcdGlmIChzY2xwLmhhc19ncGVyZSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS92c2llLmMgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xcbmluZGV4IGVlYTI0NTYyZTdkYjIuLmViNjBhMzU5ZDBhYTAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS92c2llLmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xcbkBAIC0zMywxMCArMzMsNyBAQCBlbnVtIHZzaWVfcGFnZV9mbGFncyB7XFxuIFxcbiBzdHJ1Y3QgdnNpZV9wYWdlIHtcXG4gXFx0c3RydWN0IGt2bV9zMzkwX3NpZV9ibG9jayBzY2JfcztcXHQvKiAweDAwMDAgKi9cXG4tXFx0LypcXG4tXFx0ICogdGhlIGJhY2t1cCBpbmZvIGZvciBtYWNoaW5lIGNoZWNrLiBlbnN1cmUgaXQncyBhdFxcbi1cXHQgKiB0aGUgc2FtZSBvZmZzZXQgYXMgdGhhdCBpbiBzdHJ1Y3Qgc2llX3BhZ2UhXFxuLVxcdCAqL1xcbitcXHQvKiBiYWNrdXAgaW5mbyBmb3IgbWFjaGluZSBjaGVjayAqL1xcbiBcXHRzdHJ1Y3QgbWNja192b2xhdGlsZV9pbmZvIG1jY2tfaW5mbzsgICAgLyogMHgwMjAwICovXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBwaW5uZWQgb3JpZ2luYWwgc2NiLiBCZSBhd2FyZSB0aGF0IG90aGVyIFZDUFVzIGNhbiBtb2RpZnlcXG5AQCAtNzEsNiArNjgsOCBAQCBzdHJ1Y3QgdnNpZV9wYWdlIHtcXG4gfTtcXG4gXFxuIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpID09IFBBR0VfU0laRSk7XFxuK3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZzaWVfcGFnZSwgbWNja19pbmZvKSA9PSBvZmZzZXRvZihzdHJ1Y3Qgc2llX3BhZ2UsIG1jY2tfaW5mbykpO1xcbitzdGF0aWNfYXNzZXJ0KElTX0FMSUdORUQob2Zmc2V0b2Yoc3RydWN0IHZzaWVfcGFnZSwgY3J5Y2IpLCA4KSk7XFxuIFxcbiAvKiB0cmlnZ2VyIGEgdmFsaWRpdHkgaWNwdCBmb3IgdGhlIGdpdmVuIHNjYiAqL1xcbiBzdGF0aWMgaW50IHNldF92YWxpZGl0eV9pY3B0KHN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgKnNjYixcXG5AQCAtNzAxLDcgKzcwMCw3IEBAIHN0YXRpYyBpbnQgcGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90ICpocGEpXFxuIC8qIFVucGlucyBhIHBhZ2UgcHJldmlvdXNseSBwaW5uZWQgdmlhIHBpbl9ndWVzdF9wYWdlLCBtYXJraW5nIGl0IGFzIGRpcnR5LiAqL1xcbiBzdGF0aWMgdm9pZCB1bnBpbl9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBocGFfdCBocGEpXFxuIHtcXG4tXFx0a3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShwZm5fdG9fcGFnZShocGEgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCkpO1xcbitcXHRrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBmbl90b19wYWdlKHBoeXNfdG9fcGZuKGhwYSkpKTtcXG4gXFx0LyogbWFyayB0aGUgcGFnZSBhbHdheXMgYXMgZGlydHkgZm9yIG1pZ3JhdGlvbiAqL1xcbiBcXHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBncGFfdG9fZ2ZuKGdwYSkpO1xcbiB9XFxuQEAgLTE0ODYsNyArMTQ4NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiBcXHRpbnQgbnJfdmNwdXM7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdHZzaWVfcGFnZSA9IHJhZGl4X3RyZWVfbG9va3VwKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXFx1MDAzZVxcdTAwM2UgOSk7XFxuK1xcdHZzaWVfcGFnZSA9IHJhZGl4X3RyZWVfbG9va3VwKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXFx1MDAzZVxcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRpZiAodnNpZV9wYWdlKSB7XFxuIFxcdFxcdGlmICh0cnlfZ2V0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpKSB7XFxuQEAgLTE1MjcsMTMgKzE1MjYsMTQgQEAgc3RhdGljIHN0cnVjdCB2c2llX3BhZ2UgKmdldF92c2llX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKHZzaWVfcGFnZS1cXHUwMDNlc2NiX2dwYSAhPSBVTE9OR19NQVgpXFxuIFxcdFxcdFxcdHJhZGl4X3RyZWVfZGVsZXRlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsXFxuLVxcdFxcdFxcdFxcdFxcdCAgdnNpZV9wYWdlLVxcdTAwM2VzY2JfZ3BhIFxcdTAwM2VcXHUwMDNlIDkpO1xcbitcXHRcXHRcXHRcXHRcXHQgIHZzaWVfcGFnZS1cXHUwMDNlc2NiX2dwYSBcXHUwMDNlXFx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZUKTtcXG4gXFx0fVxcbiBcXHQvKiBNYXJrIGl0IGFzIGludmFsaWQgdW50aWwgaXQgcmVzaWRlcyBpbiB0aGUgdHJlZS4gKi9cXG4gXFx0dnNpZV9wYWdlLVxcdTAwM2VzY2JfZ3BhID0gVUxPTkdfTUFYO1xcbiBcXG4gXFx0LyogRG91YmxlIHVzZSBvZiB0aGUgc2FtZSBhZGRyZXNzIG9yIGFsbG9jYXRpb24gZmFpbHVyZS4gKi9cXG4tXFx0aWYgKHJhZGl4X3RyZWVfaW5zZXJ0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXFx1MDAzZVxcdTAwM2UgOSwgdnNpZV9wYWdlKSkge1xcbitcXHRpZiAocmFkaXhfdHJlZV9pbnNlcnQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciBcXHUwMDNlXFx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZULFxcbitcXHRcXHRcXHQgICAgICB2c2llX3BhZ2UpKSB7XFxuIFxcdFxcdHB1dF92c2llX3BhZ2UodnNpZV9wYWdlKTtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudnNpZS5tdXRleCk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC0xNTY1LDcgKzE1NjUsNiBAQCBpbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWdwc3cubWFzayBcXHUwMDI2IFBTV19NQVNLX1BTVEFURSlcXG4gXFx0XFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fUFJJVklMRUdFRF9PUCk7XFxuIFxcbi1cXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpICE9IFBBR0VfU0laRSk7XFxuIFxcdHNjYl9hZGRyID0ga3ZtX3MzOTBfZ2V0X2Jhc2VfZGlzcF9zKHZjcHUsIE5VTEwpO1xcbiBcXG4gXFx0LyogNTEyIGJ5dGUgYWxpZ25tZW50ICovXFxuQEAgLTE2MzIsNyArMTYzMSw3IEBAIHZvaWQga3ZtX3MzOTBfdnNpZV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0XFx0LyogZnJlZSB0aGUgcmFkaXggdHJlZSBlbnRyeSAqL1xcbiBcXHRcXHRpZiAodnNpZV9wYWdlLVxcdTAwM2VzY2JfZ3BhICE9IFVMT05HX01BWClcXG4gXFx0XFx0XFx0cmFkaXhfdHJlZV9kZWxldGUoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICB2c2llX3BhZ2UtXFx1MDAzZXNjYl9ncGEgXFx1MDAzZVxcdTAwM2UgOSk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgdnNpZV9wYWdlLVxcdTAwM2VzY2JfZ3BhIFxcdTAwM2VcXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQpO1xcbiBcXHRcXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdnNpZV9wYWdlKTtcXG4gXFx0fVxcbiBcXHRrdm0tXFx1MDAzZWFyY2gudnNpZS5wYWdlX2NvdW50ID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjI6MzMuMTMxNjQyMzkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTczNjI5MDgzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3MzOTBfaGFuZGxlX3ZzaWVcIixcbiAgICBcImt2bV9zMzkwX3ZtX3NldF9hdHRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZnVuY3Rpb25hbGx5IGNoYW5nZXMgS1ZNIENQVSBmZWF0dXJlIGluaXRpYWxpemF0aW9uIGJ5IHVuY29uZGl0aW9uYWxseSBhbGxvd2luZyBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPLiBUaGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8gZW5hYmxlIHRoZSA2NC1iaXQgQlNDQSBvcmlnaW4gZmVhdHVyZSBmb3IgYSBndWVzdCwgd2hpY2ggYWx0ZXJzIGhvdyB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBpcyBjYWxjdWxhdGVkIGluIGBwaW5fYmxvY2tzYCBkdXJpbmcgbmVzdGVkIHZpcnR1YWxpemF0aW9uICh2U0lFKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHRoZSBTSUUgaW5zdHJ1Y3Rpb24gaW4gYSBndWVzdCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgxYTA5NDc0MzE0ZDZkMmYyMzE4MTExYWRiODM5Y2E2NzhiYjFiYzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjIyOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaFxuaW5kZXggM2Y1MDk0MmJkZmU2Yy4uYWM4MmRkMDlmY2U1MiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF90eXBlcy5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaFxuQEAgLTksNiArOSw4IEBAXG4gI2RlZmluZSBLVk1fUzM5MF9CU0NBX0NQVV9TTE9UUyA2NFxuICNkZWZpbmUgS1ZNX1MzOTBfRVNDQV9DUFVfU0xPVFMgMjQ4XG4gXG4rI2RlZmluZSBTQ0JfQUxJR05NRU5UX1NISUZUIDlcbitcbiAjZGVmaW5lIFNJR1BfQ1RSTF9DXHRcdDB4ODBcbiAjZGVmaW5lIFNJR1BfQ1RSTF9TQ05fTUFTS1x0MHgzZlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggMTUwYjVkZDIxNzBlMi4uYzY3OWQ4ZjgzYzBlYyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtNDU1LDggKzQ1NSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1fczM5MF9jcHVfZmVhdF9pbml0KHZvaWQpXG4gXHQgICAgIXRlc3RfZmFjaWxpdHkoMykgfHwgIW5lc3RlZClcbiBcdFx0cmV0dXJuO1xuIFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lFRjIpO1xuLVx0aWYgKHNjbHAuaGFzXzY0YnNjYW8pXG4tXHRcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pO1xuK1x0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTyk7XG4gXHRpZiAoc2NscC5oYXNfc2lpZilcbiBcdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lJRik7XG4gXHRpZiAoc2NscC5oYXNfZ3BlcmUpXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS92c2llLmMgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuaW5kZXggZWVhMjQ1NjJlN2RiMi4uZWI2MGEzNTlkMGFhMCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vdnNpZS5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuQEAgLTMzLDEwICszMyw3IEBAIGVudW0gdnNpZV9wYWdlX2ZsYWdzIHtcbiBcbiBzdHJ1Y3QgdnNpZV9wYWdlIHtcbiBcdHN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgc2NiX3M7XHQvKiAweDAwMDAgKi9cbi1cdC8qXG4tXHQgKiB0aGUgYmFja3VwIGluZm8gZm9yIG1hY2hpbmUgY2hlY2suIGVuc3VyZSBpdCdzIGF0XG4tXHQgKiB0aGUgc2FtZSBvZmZzZXQgYXMgdGhhdCBpbiBzdHJ1Y3Qgc2llX3BhZ2UhXG4tXHQgKi9cbitcdC8qIGJhY2t1cCBpbmZvIGZvciBtYWNoaW5lIGNoZWNrICovXG4gXHRzdHJ1Y3QgbWNja192b2xhdGlsZV9pbmZvIG1jY2tfaW5mbzsgICAgLyogMHgwMjAwICovXG4gXHQvKlxuIFx0ICogVGhlIHBpbm5lZCBvcmlnaW5hbCBzY2IuIEJlIGF3YXJlIHRoYXQgb3RoZXIgVkNQVXMgY2FuIG1vZGlmeVxuQEAgLTcxLDYgKzY4LDggQEAgc3RydWN0IHZzaWVfcGFnZSB7XG4gfTtcbiBcbiBzdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgdnNpZV9wYWdlKSA9PSBQQUdFX1NJWkUpO1xuK3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZzaWVfcGFnZSwgbWNja19pbmZvKSA9PSBvZmZzZXRvZihzdHJ1Y3Qgc2llX3BhZ2UsIG1jY2tfaW5mbykpO1xuK3N0YXRpY19hc3NlcnQoSVNfQUxJR05FRChvZmZzZXRvZihzdHJ1Y3QgdnNpZV9wYWdlLCBjcnljYiksIDgpKTtcbiBcbiAvKiB0cmlnZ2VyIGEgdmFsaWRpdHkgaWNwdCBmb3IgdGhlIGdpdmVuIHNjYiAqL1xuIHN0YXRpYyBpbnQgc2V0X3ZhbGlkaXR5X2ljcHQoc3RydWN0IGt2bV9zMzkwX3NpZV9ibG9jayAqc2NiLFxuQEAgLTcwMSw3ICs3MDAsNyBAQCBzdGF0aWMgaW50IHBpbl9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBocGFfdCAqaHBhKVxuIC8qIFVucGlucyBhIHBhZ2UgcHJldmlvdXNseSBwaW5uZWQgdmlhIHBpbl9ndWVzdF9wYWdlLCBtYXJraW5nIGl0IGFzIGRpcnR5LiAqL1xuIHN0YXRpYyB2b2lkIHVucGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90IGhwYSlcbiB7XG4tXHRrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBmbl90b19wYWdlKGhwYSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkpO1xuK1x0a3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShwZm5fdG9fcGFnZShwaHlzX3RvX3BmbihocGEpKSk7XG4gXHQvKiBtYXJrIHRoZSBwYWdlIGFsd2F5cyBhcyBkaXJ0eSBmb3IgbWlncmF0aW9uICovXG4gXHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBncGFfdG9fZ2ZuKGdwYSkpO1xuIH1cbkBAIC0xNDg2LDcgKzE0ODUsNyBAQCBzdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdGludCBucl92Y3B1cztcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdHZzaWVfcGFnZSA9IHJhZGl4X3RyZWVfbG9va3VwKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLCBhZGRyIFx1MDAzZVx1MDAzZSA5KTtcbitcdHZzaWVfcGFnZSA9IHJhZGl4X3RyZWVfbG9va3VwKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLCBhZGRyIFx1MDAzZVx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZUKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0aWYgKHZzaWVfcGFnZSkge1xuIFx0XHRpZiAodHJ5X2dldF92c2llX3BhZ2UodnNpZV9wYWdlKSkge1xuQEAgLTE1MjcsMTMgKzE1MjYsMTQgQEAgc3RhdGljIHN0cnVjdCB2c2llX3BhZ2UgKmdldF92c2llX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gXHRcdH1cbiBcdFx0aWYgKHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhICE9IFVMT05HX01BWClcbiBcdFx0XHRyYWRpeF90cmVlX2RlbGV0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSxcbi1cdFx0XHRcdFx0ICB2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSBcdTAwM2VcdTAwM2UgOSk7XG4rXHRcdFx0XHRcdCAgdnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQpO1xuIFx0fVxuIFx0LyogTWFyayBpdCBhcyBpbnZhbGlkIHVudGlsIGl0IHJlc2lkZXMgaW4gdGhlIHRyZWUuICovXG4gXHR2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSA9IFVMT05HX01BWDtcbiBcbiBcdC8qIERvdWJsZSB1c2Ugb2YgdGhlIHNhbWUgYWRkcmVzcyBvciBhbGxvY2F0aW9uIGZhaWx1cmUuICovXG4tXHRpZiAocmFkaXhfdHJlZV9pbnNlcnQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXHUwMDNlXHUwMDNlIDksIHZzaWVfcGFnZSkpIHtcbitcdGlmIChyYWRpeF90cmVlX2luc2VydChcdTAwMjZrdm0tXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciBcdTAwM2VcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCxcbitcdFx0XHQgICAgICB2c2llX3BhZ2UpKSB7XG4gXHRcdHB1dF92c2llX3BhZ2UodnNpZV9wYWdlKTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUubXV0ZXgpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC0xNTY1LDcgKzE1NjUsNiBAQCBpbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ3Bzdy5tYXNrIFx1MDAyNiBQU1dfTUFTS19QU1RBVEUpXG4gXHRcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX1BSSVZJTEVHRURfT1ApO1xuIFxuLVx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgdnNpZV9wYWdlKSAhPSBQQUdFX1NJWkUpO1xuIFx0c2NiX2FkZHIgPSBrdm1fczM5MF9nZXRfYmFzZV9kaXNwX3ModmNwdSwgTlVMTCk7XG4gXG4gXHQvKiA1MTIgYnl0ZSBhbGlnbm1lbnQgKi9cbkBAIC0xNjMyLDcgKzE2MzEsNyBAQCB2b2lkIGt2bV9zMzkwX3ZzaWVfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdC8qIGZyZWUgdGhlIHJhZGl4IHRyZWUgZW50cnkgKi9cbiBcdFx0aWYgKHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhICE9IFVMT05HX01BWClcbiBcdFx0XHRyYWRpeF90cmVlX2RlbGV0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSxcbi1cdFx0XHRcdFx0ICB2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSBcdTAwM2VcdTAwM2UgOSk7XG4rXHRcdFx0XHRcdCAgdnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQpO1xuIFx0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdnNpZV9wYWdlKTtcbiBcdH1cbiBcdGt2bS1cdTAwM2VhcmNoLnZzaWUucGFnZV9jb3VudCA9IDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMjozMy4xMzE2NDUxMzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDIyNDc3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTS9zMzkwIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEtWTSBvbiBzMzkwLCBzcGVjaWZpY2FsbHkgY2hhbmdlcyB0byBga3ZtLXMzOTAuY2AgYW5kIGB2c2llLmNgLCBhbmQgaXQncyBtYWtpbmcgbWUgdGhpbmsgYWJvdXQgZnV6emluZy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGEgbmV3IGAjZGVmaW5lYCBmb3IgU0NCIGFsaWdubWVudCwgYSBiaXQgb2YgdW5jb25kaXRpb25hbCBmZWF0dXJlIGVuYWJsaW5nLCBhbmQgc29tZSBhbGlnbm1lbnQgYW5kIHBvaW50ZXIgYWRqdXN0bWVudHMgaW4gdGhlIHZzaWUgY29kZS5cblxuRmlyc3QsIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgI2RlZmluZSBTQ0JfQUxJR05NRU5UX1NISUZUIDlgIGluIHRoZSBpbmNsdWRlIGZpbGUuIFN0YW5kYXJkIHN0dWZmLiBUaGVuIHRoZSBga3ZtLXMzOTAuY2AgY2hhbmdlIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllOiBpdCAqdW5jb25kaXRpb25hbGx5KiBlbmFibGVzIHRoZSBgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT2AgZmVhdHVyZS4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgY2hlY2sgb24gYHNjbHAuaGFzXzY0YnNjYW9gLCBidXQgdGhhdCBjaGVjayBpcyBub3cgZ29uZS4gT2theSwgc28gdGhhdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZeKAlGl0IGFsdGVycyB0aGUgQ1BVIGZlYXR1cmVzIGV4cG9zZWQgdG8gYSBndWVzdC4gSXQncyBkZWZpbml0ZWx5ICpyZWFjaGFibGUqIHdpdGhpbiBLVk0gb24gczM5MCwgd2hpY2ggaXMgZ29vZC4gQnV0IHRoZSBrZXkgcXVlc3Rpb246IGlzIGl0IGZ1enphYmxlP1xuXG5UaGUgcHJvbXB0IG1lbnRpb25zIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIEJ1dCB3YWl0LCBzMzkweCAqY2FuKiBiZSBydW4gaW4gUUVNVSwgZXZlbiBuZXN0ZWQsIGFuZCBzeXprYWxsZXIgaGFzIHMzOTB4IGluc3RhbmNlcy4gU28sIHRoZSBRRU1VIGJhcnJpZXIgZG9lc27igJl0IGFwcGx5IGhlcmUuIFRoaXMgaXMgcHJvbWlzaW5nLiBTbyB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgY2hhbmdlIHdvcnRoIGZ1enppbmc/XG5cbkxldCdzIGNoZWNrIGBrdm1fczM5MF9jcHVfZmVhdF9pbml0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5zIGlmIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkOyB3aGF0J3MgdGhlIGltcGFjdCBvbiB0aGUgZ3Vlc3QuIFRoZSBgdnNpZS5jYCBjaGFuZ2VzIHNlZW0gbGlrZSBmYWlybHkgc3RhbmRhcmQgYWxpZ25tZW50IGFuZCBtZW1vcnkgbWFwcGluZyBhZGp1c3RtZW50cywgd2hpY2ggYXJlIG9mdGVuIHNvdXJjZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBidXQgdGhlIGZlYXR1cmUgZW5hYmxlbWVudCBpcyB0aGUgYmlnZ2VzdCBjb25jZXJuLiBUaGlzIGlzIGEgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3IsIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzYwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjI6NDIuMTU0MTI2MTEzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTEwMzA4NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfY3B1X2ZlYXRfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Mzc2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX2RmbHRjY19xdWVyeSh1OCAoKnF1ZXJ5KVszMl0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODg6c3RhdGljIHZvaWQgX19pbml0IGt2bV9zMzkwX2NwdV9mZWF0X2luaXQodm9pZClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00OTU9c3RhdGljIGludCBfX2luaXQgX19rdm1fczM5MF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTEwLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1MTE6XFx0a3ZtX3MzOTBfY3B1X2ZlYXRfaW5pdCgpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIyOjQ0LjM2NTE2MTA5N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMjg2MTI3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gczM5MCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIGBrdm1fczM5MF9jcHVfZmVhdF9pbml0YCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBkdXJpbmcgS1ZNIGluaXRpYWxpemF0aW9uLCBhcyBleHBlY3RlZC4gVGhlIHByaW1hcnkgY2hhbmdlIGluIGBrdm0tczM5MC5jYCBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgYGlmIChzY2xwLmhhc182NGJzY2FvKWAgY2hlY2sgYmVmb3JlIGFsbG93aW5nIHRoZSBgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT2AgZmVhdHVyZS4gU28sIHRoZSBmZWF0dXJlIGlzIG5vdyAqYWx3YXlzKiBhbGxvd2VkLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBuZWVkcyBmdXJ0aGVyIHNjcnV0aW55LlxuXG5UaGUgYHZzaWUuY2AgY2hhbmdlcyBsb29rIHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBqdXN0IGEgY291cGxlIG9mIG1hY3JvIHJlcGxhY2VtZW50cy4gUmVwbGFjaW5nIGBwZm5fdG9fcGFnZShocGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpYCB3aXRoIGBrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBmbl90b19wYWdlKHBoeXNfdG9fcGZuKGhwYSkpKWAuLi4gdGhhdCdzIGVmZmVjdGl2ZWx5IHRoZSBzYW1lIHRoaW5nLCBqdXN0IGEgcmUtd3JpdGluZyBvZiBob3cgd2UgZ2V0IHRoZSBQRk4uIFRoZSBzYW1lIGdvZXMgZm9yIHRoZSBgYWRkciBcdTAwM2VcdTAwM2UgOWAgdG8gYGFkZHIgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlRgIGNoYW5nZSwgbWVyZWx5IGFub3RoZXIgbWFjcm8gc3dhcC4gVGhlIGFkZGVkIGBzdGF0aWNfYXNzZXJ0YCBzdGF0ZW1lbnRzIGFyZSBwdXJlbHkgY29tcGlsZS10aW1lIHNhbml0eSBjaGVja3MsIHNvIHRoZXkgZG9uJ3QgaW1wYWN0IHJ1bnRpbWUgYmVoYXZpb3IuXG5cblRoZXJlZm9yZSwgdGhlIG9ubHkgKmZ1bmN0aW9uYWwqIG1vZGlmaWNhdGlvbiBhcHBlYXJzIHRvIGJlIHRoZSB1bmNvbmRpdGlvbmFsIGVuYWJsaW5nIG9mIGBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPYC4gVGhlIG9idmlvdXMgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBhbHRlciB0aGUgcHJvZ3JhbSdzIGV4ZWN1dGlvbiBmbG93PyBJdCBpbXBhY3RzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBLVk0gQ1BVIGZlYXR1cmVzLCB3aGljaCBtZWFucyBpdCBkZWZpbml0ZWx5IGNoYW5nZXMgKmhvdyogdGhlIFZNIGlzIGluaXRpYWxpemVkLiBIb3dldmVyLCBkb2VzIGl0IGNyZWF0ZSBhIGNvZGUgcGF0aCB0aGF0IHdhc24ndCB0aGVyZSBiZWZvcmU/XG5cbk9rYXksIGxldCdzIGNvbnNpZGVyIGZ1enppbmcuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZeKAlGl0J3MgZXNzZW50aWFsbHkgc2V0dGluZyBhIGJpdCBpbiBhIGJpdG1hcCwgdGhlIGFsbG93ZWQgQ1BVIGZlYXR1cmVz4oCUaXQncyBwcm9iYWJseSBub3QgdGhlIG1vc3QgcHJvbWlzaW5nIHRhcmdldCBmb3IgYSBmdXp6aW5nIGNhbXBhaWduLCB1bmxlc3MgdGhpcyBiaXQgZW5hYmxlcyBzb21lIHNlbnNpdGl2ZSB1bmRlcmx5aW5nIGNvZGUuIEl0J3MgcmVhbGx5IHdvcnRoIGRvaW5nIHNvbWUgbWFudWFsIGFuYWx5c2lzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gd2hhdCBgYWxsb3dfY3B1X2ZlYXRgIGFjdHVhbGx5IGRvZXMuIFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgKmFsd2F5cyogZW5hYmxpbmcgdGhpcyBzcGVjaWZpYyBDUFUgZmVhdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBiZWZvcmUgbWFraW5nIGEgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE4MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMjo1MS41OTM3Nzc5NTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MzQ3MTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvd19jcHVfZmVhdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzI5PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga3ZtX2Nsb2NrX25vdGlmaWVyID0ge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMzMi1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzMzOnN0YXRpYyB2b2lkIGFsbG93X2NwdV9mZWF0KHVuc2lnbmVkIGxvbmcgbnIpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMzNC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Mzg4PXN0YXRpYyB2b2lkIF9faW5pdCBrdm1fczM5MF9jcHVfZmVhdF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ4LVxcdGlmIChtYWNoaW5lX2hhc19lc29wKCkpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ0OTpcXHRcXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9FU09QKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDUwLVxcdC8qXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU2LVxcdFxcdHJldHVybjtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDU3OlxcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUX1NJRUYyKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDU4OlxcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTktXFx0aWYgKHNjbHAuaGFzX3NpaWYpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ2MDpcXHRcXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUlGKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDYxLVxcdGlmIChzY2xwLmhhc19ncGVyZSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDYyOlxcdFxcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUX0dQRVJFKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDYzLVxcdGlmIChzY2xwLmhhc19nc2xzKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NjQ6XFx0XFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfR1NMUyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ2NS1cXHRpZiAoc2NscC5oYXNfaWIpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ2NjpcXHRcXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9JQik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ2Ny1cXHRpZiAoc2NscC5oYXNfY2VpKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0Njg6XFx0XFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfQ0VJKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDY5LVxcdGlmIChzY2xwLmhhc19pYnMpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ3MDpcXHRcXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9JQlMpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NzEtXFx0aWYgKHNjbHAuaGFzX2tzcylcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDcyOlxcdFxcdGFsbG93X2NwdV9mZWF0KEtWTV9TMzkwX1ZNX0NQVV9GRUFUX0tTUyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ3My1cXHRpZiAoc2NscC5oYXNfYXN0ZmxlaWUyKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NzQ6XFx0XFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfQVNURkxFSUUyKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDc1LVxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIyOjU0LjA0NzI1OTE3MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTg3MDI3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBhIEtWTS9zMzkwIEZlYXR1cmUgQ2hhbmdlKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQncyBqdXN0IGZsaXBwaW5nIGEgYml0LCBsaWtlbHkgd2l0aGluIGEgc3RydWN0dXJlIGxpa2UgYGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHRoYXQgc2lnbmFscyB3aGV0aGVyIGEgcGFydGljdWxhciBDUFUgZmVhdHVyZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGF0J3MgYSBjb21tb24gcGF0dGVybiBpbiB0aGUga2VybmVsLCBhIHNpbXBsZSBmbGFnLWJhc2VkIGFwcHJvYWNoLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMsIHRob3VnaC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRvZ2dsaW5nIHRoYXQgc3BlY2lmaWMgYml0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBgYWxsb3dfY3B1X2ZlYXRgIGFjdHVhbGx5ICpkb2VzKi4gSXMgaXQgYSB3aGl0ZWxpc3QsIGEgYmxhY2tsaXN0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gRG9lcyBpdCBjb250cm9sIHRoZSBmZWF0dXJlJ3MgdmlzaWJpbGl0eSB0byB0aGUgZ3Vlc3QsIGl0cyBhdmFpbGFiaWxpdHkgZHVyaW5nIHZDUFUgY3JlYXRpb24sIG9yIGluZmx1ZW5jZSBzb21lIGludGVybmFsIEtWTSBsb2dpYz8gVGhlIGFuc3dlciB0byB0aGF0IHdpbGwgdGVsbCBtZSB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgY2hhbmdlLiBMZXQncyBkaWcgaW50byB0aGF0IGBhbGxvd19jcHVfZmVhdGAgY29kZSBhbmQgZmlndXJlIG91dCB0aGUgaW1wYWN0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjUyLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjI6NTcuODY1OTY1NjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTc2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzMDpcXHRcXHQubm90aWZpZXJfY2FsbCA9IGt2bV9jbG9ja19zeW5jLFxcbiAzMzE6XFx0fTtcXG4gMzMyOlxcdFxcbiAzMzM6XFx0c3RhdGljIHZvaWQgYWxsb3dfY3B1X2ZlYXQodW5zaWduZWQgbG9uZyBucilcXG4gMzM0OlxcdHtcXG4gMzM1OlxcdFxcdHNldF9iaXRfaW52KG5yLCBrdm1fczM5MF9hdmFpbGFibGVfY3B1X2ZlYXQpO1xcbiAzMzY6XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRzdGF0aWMgaW5saW5lIGludCBwbG9fdGVzdF9iaXQodW5zaWduZWQgY2hhciBucilcXG4gMzM5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjI6NTcuODY2Mjg4MTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTIwNDA3NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHk6IEtWTSBDUFUgRmVhdHVyZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSB0aGF0IHNldHMgYSBiaXQgaW4gYGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdGAuIE15IGZpcnN0IHRob3VnaHQgaXMsIFwiSXMgdGhpcyBzb21ldGhpbmcgdGhhdCB3b3VsZCBiZSB3b3J0aHdoaWxlIHRvIGZ1eno/XCIgT24gdGhlIHN1cmZhY2UsIGl0IHNlZW1zIGZhaXJseSBsaW1pdGVkOyBpdCdzIGp1c3QgYWJvdXQgaG93IEtWTSBDUFUgZmVhdHVyZXMgYXJlIGluaXRpYWxpemVkLiBCdXQgd2FpdCwgSSd2ZSBnb3QgdG8gbG9vayBjbG9zZXIuIEkgc2VlIHRoYXQgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gIGlzIG5vdyB1bmNvbmRpdGlvbmFsbHkgYWxsb3dlZC4gQWhhISBUaGF0IG1lYW5zIHRoZSB1c2Vyc3BhY2UgY2FuIGVuYWJsZSBpdCB0aHJvdWdoIGBLVk1fU0VUX0RFVklDRV9BVFRSYCBvciBhIHNpbWlsYXIgaW50ZXJmYWNlLCB0aGF0IGNoYW5nZXMgdGhpbmdzIHNpZ25pZmljYW50bHkuIE5vdywgdGhpcyBpcyBpbnRlcmVzdGluZy4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBga3ZtX3MzOTBfYXZhaWxhYmxlX2NwdV9mZWF0YCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyB1c2FnZSB0byBmdWxseSBhc3Nlc3MgdGhlIGZ1enppbmcgcG90ZW50aWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzEyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjM6MDEuOTg2Njk4NTg3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA3Mjg5Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjY0PXN0YXRpY19hc3NlcnQoQVJSQVlfU0laRShrdm1fczM5MF9mYWNfZXh0KSBcXHUwMDNjPSBBUlJBWV9TSVpFKHN0ZmxlX2ZhY19saXN0KSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjY2LS8qIGF2YWlsYWJsZSBjcHUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IGt2bSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyNjc6c3RhdGljIERFQ0xBUkVfQklUTUFQKGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdCwgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfTlJfQklUUyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI2OC0vKiBhdmFpbGFibGUgc3ViZnVuY3Rpb25zIGluZGljYXRlZCB2aWEgcXVlcnkgLyBcXFwidGVzdCBiaXRcXFwiICovXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzMzPXN0YXRpYyB2b2lkIGFsbG93X2NwdV9mZWF0KHVuc2lnbmVkIGxvbmcgbnIpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMzNC17XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMzNTpcXHRzZXRfYml0X2ludihuciwga3ZtX3MzOTBfYXZhaWxhYmxlX2NwdV9mZWF0KTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzM2LX1cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xNTQzPXN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3Byb2Nlc3Nvcl9mZWF0KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNTUwLVxcdGlmICghYml0bWFwX3N1YnNldCgodW5zaWduZWQgbG9uZyAqKSBkYXRhLmZlYXQsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjE1NTE6XFx0XFx0XFx0ICAga3ZtX3MzOTBfYXZhaWxhYmxlX2NwdV9mZWF0LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNTUyLVxcdFxcdFxcdCAgIEtWTV9TMzkwX1ZNX0NQVV9GRUFUX05SX0JJVFMpKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTE3ODA9c3RhdGljIGludCBrdm1fczM5MF9nZXRfbWFjaGluZV9mZWF0KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNzg0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxNzg1OlxcdGJpdG1hcF90b19hcnI2NChkYXRhLmZlYXQsIGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdCwgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfTlJfQklUUyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTE3ODYtXFx0aWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhdHRyLVxcdTAwM2VhZGRyLCBcXHUwMDI2ZGF0YSwgc2l6ZW9mKGRhdGEpKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjM6MDQuMTkzOTk2MjIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTY5OTQ2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0OiBLVk0vczM5MHggQ1BVIEZlYXR1cmUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBrdm1fczM5MF9zZXRfcHJvY2Vzc29yX2ZlYXRgIGZ1bmN0aW9uIGluIHRoZSBLVk0vczM5MCBjb2RlLiBJdCBzZWVtcyB0byB2YWxpZGF0ZSB0aGUgQ1BVIGZlYXR1cmVzIHJlcXVlc3RlZCBieSB1c2Vyc3BhY2UgYWdhaW5zdCB3aGF0J3MgYWN0dWFsbHkgYXZhaWxhYmxlLCBuYW1lbHkgYGt2bV9zMzkwX2F2YWlsYWJsZV9jcHVfZmVhdGAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoaXMgY2hhbmdlIHJlbGF0ZWQgdG8gYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gLiBJdCBsb29rcyBsaWtlIHVzZXJzcGFjZSBjYW4gbm93IHJlcXVlc3QgdGhpcyBmZWF0dXJlIGFuZCB0aGUgY2hlY2sgd2lsbCBwYXNzICpldmVuKiBpZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAocmVwcmVzZW50ZWQgYnkgYHNjbHAuaGFzXzY0YnNjYW9gKSBkb2Vzbid0IGFjdHVhbGx5IHN1cHBvcnQgaXQuIFRoaXMgaXMgYSByZWQgZmxhZy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiRG9lcyB0aGlzIGNyZWF0ZSBhIG5ldyB2dWxuZXJhYmlsaXR5IHN1cmZhY2U/XCIgVGhpcyBpcyBhIGNsYXNzaWMgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0LiBJZiB0aGVyZSdzIGEgZGlzY29ubmVjdCBiZXR3ZWVuIHdoYXQncyAqcmVxdWVzdGVkKiBhbmQgd2hhdCdzICpwcmVzZW50KiwgdGhhdCdzIHdoZXJlIGJ1Z3MgdGVuZCB0byBoaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPYCBhY3R1YWxseSAqZG9lcyogd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHNlZSBpZiB0aGlzIGRpc2NyZXBhbmN5IGFjdHVhbGx5IGVuYWJsZXMgYW55IG5ldyBjb2RlIHBhdGhzIHRoYXQgd291bGQgYmUgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZmVhdHVyZSdzIHVzYWdlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc3NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzowOC4zOTA5OTM3MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NDQ0OTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTQyMT1zdHJ1Y3Qga3ZtX3MzOTBfdm1fY3B1X21hY2hpbmUge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtNDM0LSNkZWZpbmUgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lFRjJcXHQxXFxuYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6NDM1OiNkZWZpbmUgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT1xcdDJcXG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC00MzYtI2RlZmluZSBLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUlGXFx0M1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM4OD1zdGF0aWMgdm9pZCBfX2luaXQga3ZtX3MzOTBfY3B1X2ZlYXRfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1Ny1cXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUVGMik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1ODpcXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU5LVxcdGlmIChzY2xwLmhhc19zaWlmKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9NzY1PXN0YXRpYyBpbnQgcGluX2Jsb2NrcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTc3My1cXHRncGEgPSBSRUFEX09OQ0Uoc2NiX28tXFx1MDAzZXNjYW9sKSBcXHUwMDI2IH4weGZVTDtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo3NzQ6XFx0aWYgKHRlc3Rfa3ZtX2NwdV9mZWF0KHZjcHUtXFx1MDAzZWt2bSwgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTykpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzc1LVxcdFxcdGdwYSB8PSAodTY0KSBSRUFEX09OQ0Uoc2NiX28tXFx1MDAzZXNjYW9oKSBcXHUwMDNjXFx1MDAzYyAzMjtcXG4tLVxcbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTQyMT1zdHJ1Y3Qga3ZtX3MzOTBfdm1fY3B1X21hY2hpbmUge1xcbi0tXFxudG9vbHMvYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtNDM0LSNkZWZpbmUgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfU0lFRjJcXHQxXFxudG9vbHMvYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6NDM1OiNkZWZpbmUgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBT1xcdDJcXG50b29scy9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC00MzYtI2RlZmluZSBLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUlGXFx0M1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzoxMC44NjU0NDc3MjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2ODI2MjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHMzOTB4IE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBDb2RlKipcblxuT2theSwgbGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGFyY2gvczM5MC9rdm0vdnNpZS5jOjc3NGAgaGVyZS4gQWgsIHJpZ2h0LiBJdCBzZWVtcyB0aGlzIG1vZGlmaWNhdGlvbiBpbXBhY3RzIGhvdyB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcywgb3IgYGdwYWAsIGlzIGNhbGN1bGF0ZWQgd2l0aGluIHRoZSBgcGluX2Jsb2Nrc2AgZnVuY3Rpb24uIEFuZCB0aGlzIGlzIGFsbCBoYXBwZW5pbmcgd2l0aGluIGB2c2llLmNgLCB3aGljaCwgYXMgYSByZW1pbmRlciwgaXMgdGhlIGNvcmUgb2YgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0IGZvciBzMzkweC4gU28sIHRoaXMgY2hhbmdlIGlzIGRlZmluaXRlbHkgYWltZWQgYXQgaW1wcm92aW5nIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBiZWhhdmlvci4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhpcyBtb2RpZmljYXRpb24uIExldCBtZSBnbyBiYWNrIGFuZCByZS1leGFtaW5lIHRoZSBzcGVjaWZpYyBjaGFuZ2VzIHdpdGhpbiBgdnNpZS5jYCBhZ2FpbiwgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk5MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzoxNS40MzM3MTIyNDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDk4ODk5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0NCX0FMSUdOTUVOVF9TSElGVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaC0xMS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaDoxMjojZGVmaW5lIFNDQl9BTElHTk1FTlRfU0hJRlQgOVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF90eXBlcy5oLTEzLVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTQ4Mj1zdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0ODctXFx0cmN1X3JlYWRfbG9jaygpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE0ODg6XFx0dnNpZV9wYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciBcXHUwMDNlXFx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZUKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDg5LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTUyOC1cXHRcXHRcXHRyYWRpeF90cmVlX2RlbGV0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE1Mjk6XFx0XFx0XFx0XFx0XFx0ICB2c2llX3BhZ2UtXFx1MDAzZXNjYl9ncGEgXFx1MDAzZVxcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTUzMC1cXHR9XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTM0LVxcdC8qIERvdWJsZSB1c2Ugb2YgdGhlIHNhbWUgYWRkcmVzcyBvciBhbGxvY2F0aW9uIGZhaWx1cmUuICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTUzNTpcXHRpZiAocmFkaXhfdHJlZV9pbnNlcnQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciBcXHUwMDNlXFx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZULFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1MzYtXFx0XFx0XFx0ICAgICAgdnNpZV9wYWdlKSkge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTYxOT12b2lkIGt2bV9zMzkwX3ZzaWVfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjMzLVxcdFxcdFxcdHJhZGl4X3RyZWVfZGVsZXRlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTYzNDpcXHRcXHRcXHRcXHRcXHQgIHZzaWVfcGFnZS1cXHUwMDNlc2NiX2dwYSBcXHUwMDNlXFx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZUKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjM1LVxcdFxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl2c2llX3BhZ2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzoxNy42ODM2MDc1NzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxODYwMzAzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU8gRmVhdHVyZSBFbmFibGVtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3QgZmV3IGNoYW5nZXMgYXJlIGp1c3QgY2xlYW51cCDigJMgYWxpZ25pbmcgdGhlIGBTQ0JfQUxJR05NRU5UX1NISUZUYCBjb25zdGFudCwgYW5kIHRoZSBgcGluX2d1ZXN0X3BhZ2VgIHRvIGB1bnBpbl9ndWVzdF9wYWdlYCByZWZhY3RvcmluZywgYW5kIGFkZGluZyBgc3RhdGljX2Fzc2VydGAgc3RhdGVtZW50cyBmb3IgY29tcGlsZS10aW1lIGNoZWNrcywgbm90aGluZyB0byBzZWUgdGhlcmUuIFRoZSByZWFsIHF1ZXN0aW9uIGlzIHRoYXQgc2luZ2xlIGxpbmUgY2hhbmdlOiBgYWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTylgLiAgVGhpcyB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlcyB0aGUgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gIGZlYXR1cmUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyAgSXQgc2VlbXMgc21hbGwsIGJ1dCBpdCdzIGVuYWJsaW5nIHRoZSBndWVzdCB0byB1c2UgYSA2NC1iaXQgQlNDQSBvcmlnaW4uIFRoYXQgYWZmZWN0cyBgcGluX2Jsb2Nrc2AgaW4gYHZzaWUuY2A6XG5cbmBgYGNcblx0aWYgKHRlc3Rfa3ZtX2NwdV9mZWF0KHZjcHUtXHUwMDNla3ZtLCBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKSlcblx0XHRncGEgfD0gKHU2NCkgUkVBRF9PTkNFKHNjYl9vLVx1MDAzZXNjYW9oKSBcdTAwM2NcdTAwM2MgMzI7XG5gYGBcblxuSWYgdGhlIGZlYXR1cmUgaXMgc2V0LCB0aGUgdXBwZXIgMzIgYml0cyBvZiB0aGUgU0NBIG9yaWdpbiBhcmUgbm93IHJlYWQgZnJvbSBgc2NiX28tXHUwMDNlc2Nhb2hgLiBUaGlzIG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpZiB0aGVyZSBhcmUgYW55IGlzc3VlcyBoYW5kbGluZyBhIDY0LWJpdCBHUEEgZm9yIHRoZSBTQ0EuIFN5emthbGxlciBjYW4gZnV6eiBLVk0gb24gczM5MHgsIHNvIGl0J3MgKnJlYWNoYWJsZSouXG5cbkJ1dCBpcyBpdCB3b3J0aCB0aGUgZWZmb3J0PyBUaGUgY2hhbmdlIGlzICp0aW55Ki4gSXQncyBvbmUgbGluZS4gQnV0IGl0J3MgZW5hYmxpbmcgdGhpcyBmZWF0dXJlIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gKHZTSUUpIHJlZ2FyZGxlc3Mgb2YgaG9zdCBzdXBwb3J0ISAgVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLi4uIGlmIHRoZSBob3N0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgNjQtYml0IEJTQ0EgKGBzY2xwLmhhc182NGJzY2FvYCBpcyBmYWxzZSksIEtWTSB3aWxsICplbXVsYXRlKiBpdCBmb3IgdGhlIG5lc3RlZCBndWVzdC4gIFRoZSBjb2RlIGluIGBwaW5fYmxvY2tzYCBhbHJlYWR5ICpleGlzdGVkKiBidXQgaXQncyBub3cgcmVhY2hhYmxlIG9uIGFsbCBob3N0cy5cblxuTm93LCBhIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhlIGVtdWxhdGVkIGhvc3QgaW4gUUVNVSAod2hlcmUgU3l6a2FsbGVyIHJ1bnMpICphbHJlYWR5KiBoYXZlIGBzY2xwLmhhc182NGJzY2FvYD8gSWYgUUVNVSAqZGlkKiBwcm92aWRlIGl0LCB0aGlzIGNvZGUgd2FzIGFscmVhZHkgcmVhY2hhYmxlLiAgSWYgaXQgKmRpZG4ndCosIHRoaXMgaXMgKm5ld2x5KiByZWFjaGFibGUgY29kZS4gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY2hhbmdlcywgYW5kIG5vcGUsIHRoYXQgaXMgdGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblNvLCB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyOiBJdCAqaXMqIGEgbWlub3IgY2hhbmdlIChqdXN0IGVuYWJsaW5nIGEgZmxhZykuIEhvd2V2ZXIsIGl0ICpkb2VzKiBjaGFuZ2UgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGBwaW5fYmxvY2tzYC4gSSdsbCBkZWx2ZSBpbnRvIHRoZSBgcGluX2Jsb2Nrc2AgaW4gYHZzaWUuY2AgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBwb3RlbnRpYWwgZm9yIGV4cGxvaXRhdGlvbi4gSXQncyB0aW1lIHRvIGNoZWNrIHdoYXQgYHBpbl9ibG9ja3NgICpkb2VzKi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5OTIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjM6MjkuODY5NjQwNzA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgzNzM3Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBpbl9ibG9ja3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS92c2llLmM9NzAxPXN0YXRpYyB2b2lkIHVucGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90IGhwYSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTcwNy1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo3MDg6LyogdW5waW4gYWxsIGJsb2NrcyBwcmV2aW91c2x5IHBpbm5lZCBieSBwaW5fYmxvY2tzKCksIG1hcmtpbmcgdGhlbSBkaXJ0eSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjcwOTpzdGF0aWMgdm9pZCB1bnBpbl9ibG9ja3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzEwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTc2NC0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo3NjU6c3RhdGljIGludCBwaW5fYmxvY2tzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTc2Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy04NzctdW5waW46XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6ODc4OlxcdHVucGluX2Jsb2Nrcyh2Y3B1LCB2c2llX3BhZ2UpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTg3OS1cXHRyZXR1cm4gcmM7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xNTU2PWludCBrdm1fczM5MF9oYW5kbGVfdnNpZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTkzLVxcdFxcdGdvdG8gb3V0X3VucGluX3NjYjtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNTk0OlxcdHJjID0gcGluX2Jsb2Nrcyh2Y3B1LCB2c2llX3BhZ2UpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1OTUtXFx0aWYgKHJjKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU5OS1cXHR1bnJlZ2lzdGVyX3NoYWRvd19zY2IodmNwdSk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTYwMDpcXHR1bnBpbl9ibG9ja3ModmNwdSwgdnNpZV9wYWdlKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjAxLW91dF91bnNoYWRvdzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjM6MzIuMTUzMzgzMzE5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Nzk4Njk1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcGluX2Jsb2Nrc2AgRnVuY3Rpb24gQ2FsbCoqXG5cbk9rYXksIHNvIGBwaW5fYmxvY2tzYCBnZXRzIGNhbGxlZCBmcm9tIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAuIFRoYXQgbWVhbnMgdGhlIGBTSUVgIGluc3RydWN0aW9uIOKAkyBuZXN0ZWQgdmlydHVhbGl6YXRpb24g4oCTIGlzIHRoZSBrZXkgaGVyZS4gV2hlbiBhIGd1ZXN0IGlzc3VlcyBhbiBgU0lFYCBpbnN0cnVjdGlvbiwgdGhlIGNvbnRyb2wgZmxvdyBoaXRzIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHBpbl9ibG9ja3NgLiBOb3csIGlmIGBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPYCBpcyBlbmFibGVkLCB0aGUgY29kZSB3aWxsIHJlYWQgYHNjYW9oYCBhbmQgdXNlIGl0IGZvciB0aGUgR1BBLiBUaGF0J3MgYSBjbGVhciBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIGNvcmUgS1ZNIHMzOTB4IGxvZ2ljLCBubyBxdWVzdGlvbi4gVGhlcmVmb3JlLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcsIEknbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgIGxvb2tzIGxpa2UgdGhlIG9idmlvdXMgY2hvaWNlLiBJdCdzIHRoZSBlbnRyeSBwb2ludCBmb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBhbmQgdGhhdCdzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBgcGluX2Jsb2Nrc2AgaXMgc3RhdGljLCBzbyBpdCAqbWlnaHQqIGJlIGlubGluZWQuIEJ1dCBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgIGlzIG5vdC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgaXNuJ3Qgc3RhdGljIGFuZCBpcyBleHBvcnRlZCwganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA2MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzozNy44MzMyNTY5ODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzE5MzE1MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfaGFuZGxlX3ZzaWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTQ0Mj1pbnQga3ZtX3MzOTBfc2tleV9jaGVja19lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC00NDQtLyogaW1wbGVtZW50ZWQgaW4gdnNpZS5jICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oOjQ0NTppbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtNDQ2LXZvaWQga3ZtX3MzOTBfdnNpZV9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz05NTg9aW50IGt2bV9zMzkwX2hhbmRsZV9iMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NzEtXFx0Y2FzZSAweDE0OlxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjk3MjpcXHRcXHRyZXR1cm4ga3ZtX3MzOTBfaGFuZGxlX3ZzaWUodmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtOTczLVxcdGNhc2UgMHgyMTpcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTE0ODI9c3RhdGljIHN0cnVjdCB2c2llX3BhZ2UgKmdldF92c2llX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTU1LVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE1NTY6aW50IGt2bV9zMzkwX2hhbmRsZV92c2llKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTU3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjM6NDAuMDY1MTk2NjE3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTY1MjE3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYGt2bV9zMzkwX2hhbmRsZV92c2llYCBpcyB0aGUgY2xlYXIgc3RhcnRpbmcgcG9pbnQuIEl0J3Mgbm9uLXN0YXRpYywgbWVhbmluZyBpdCdzIGV4dGVybmFsbHkgdmlzaWJsZSwgYW5kIGl0J3MgY2FsbGVkIGRpcmVjdGx5IGZyb20gYGt2bV9zMzkwX2hhbmRsZV9iMmAuICBBbmQsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYDB4YjIxNGAgY29ycmVzcG9uZHMgdG8gdGhlIFN5c3RlbSBJbnN0cnVjdGlvbiBFeGVjdXRpb24gKFNJRSkgaW5zdHJ1Y3Rpb24uIFBlcmZlY3QuIFRoYXQncyBhIHNvbGlkLCBpZGVudGlmaWFibGUgZW50cnkgcG9pbnQgZm9yIGFuYWx5c2lzIHJlbGF0ZWQgdG8gVlNJRS5cblxuTm93LCBsZXQncyBicm9hZGVuIHRoZSBuZXQgYSBiaXQuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZD8gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBmZWF0dXJlIGlzICplbmFibGVkKiBmcm9tIHVzZXJzcGFjZS4gQWgsIHllcywgYGt2bV9zMzkwX3NldF9wcm9jZXNzb3JfZmVhdGAuICBUaGF0IHdvdWxkIGJlIHdoZXJlIHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIHRvIGFjdGl2YXRlIHRoZSBmZWF0dXJlLiBJIHNob3VsZCBhZGQgdGhhdCB0byB0aGUgbGlzdCBvZiBrZXkgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEwNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzo0NC41MjE3MjI4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2OTg1NTgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9zZXRfcHJvY2Vzc29yX2ZlYXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTE0OTc9c3RhdGljIGludCBrdm1fczM5MF9zZXRfcHJvY2Vzc29yKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNTQyLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxNTQzOnN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3Byb2Nlc3Nvcl9mZWF0KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTU0NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xNjgyPXN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NwdV9tb2RlbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTY5MC1cXHRjYXNlIEtWTV9TMzkwX1ZNX0NQVV9QUk9DRVNTT1JfRkVBVDpcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTY5MTpcXHRcXHRyZXQgPSBrdm1fczM5MF9zZXRfcHJvY2Vzc29yX2ZlYXQoa3ZtLCBhdHRyKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTY5Mi1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjM6NDYuNzkxNTg0MTY2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODA3MjM3MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlbHZpbmcgaW50byBDUFUgTW9kZWwgQXR0cmlidXRlcyB3aXRoIGBrdm1fczM5MF9zZXRfY3B1X21vZGVsYCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCwgYGt2bV9zMzkwX3NldF9jcHVfbW9kZWxgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBjb25maWd1cmluZyB0aGUgZW11bGF0ZWQgQ1BVJ3MgcGVyc29uYWxpdHkgd2l0aGluIHRoZSBLVk0vczM5MCBmcmFtZXdvcmsuIEl0J3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBjZW50cmFsIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgYW5kIGludGVycHJldHMgcmVxdWVzdHMgdG8gYWx0ZXIgdGhlIHBlcmNlaXZlZCBDUFUgbW9kZWwgcHJlc2VudGVkIHRvIHRoZSBndWVzdCBvcGVyYXRpbmcgc3lzdGVtLiBJdOKAmXMgd2hlcmUgdGhlIGFic3RyYWN0aW9uIG9mIHRoZSBwaHlzaWNhbCBDUFUgY2FwYWJpbGl0aWVzIGlzIHNoYXBlZCB0byBmaXQgdGhlIG5lZWRzIG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUuXG5cbkknbSBpbnN0YW50bHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2hhdCBraW5kIG9mIGF0dHJpYnV0ZXMgYXJlIHdlIHNldHRpbmcgaGVyZT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gc2V0IGZlYXR1cmVzLCBjYXBhYmlsaXRpZXMgbGlrZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLCBwZXJmb3JtYW5jZSBjb3VudGVycywgb3IgcGVyaGFwcyBldmVuIG1pY3JvY29kZSBsZXZlbHM/IFVuZGVyc3RhbmRpbmcgdGhlIHByZWNpc2UgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBpcyBwYXJhbW91bnQuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgbG9naWMgd2l0aGluIGBrdm1fczM5MF9zZXRfY3B1X21vZGVsYCB0byBncmFzcCBob3cgaXQgdHJhbnNsYXRlcyB0aG9zZSByZXF1ZXN0cyBpbnRvIHRoZSBhY3R1YWwgQ1BVIG1vZGVsIHRoZSBndWVzdCB3aWxsIHNlZS4gQXJlIHRoZXJlIGFueSByZXN0cmljdGlvbnMsIGRlZmF1bHQgbW9kZWxzLCBvciB2YWxpZGF0aW9uIGNoZWNrcyBpbnZvbHZlZD8gQW55IHBvdGVudGlhbCBmb3IgaW5jb21wYXRpYmlsaXR5IG9yIG1pc2NvbmZpZ3VyYXRpb24gaWYgdGhlc2UgYXR0cmlidXRlcyBhcmUgbm90IHNldCBjb3JyZWN0bHk/IFRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSdzIG92ZXJhbGwgcmVsaWFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlIGFyZSB0cnVseSBkZWZpbmVkLiBXZSBoYXZlIHRvIGJlIG1ldGljdWxvdXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MTcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzo1MS40NzIzMTA3MTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTA0NzQyODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfc2V0X2NwdV9tb2RlbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTY1OD1zdGF0aWMgaW50IGt2bV9zMzkwX3NldF91dl9mZWF0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xNjgxLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxNjgyOnN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NwdV9tb2RlbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTE2ODMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIwNDI9c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjA1My1cXHRjYXNlIEtWTV9TMzkwX1ZNX0NQVV9NT0RFTDpcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjA1NDpcXHRcXHRyZXQgPSBrdm1fczM5MF9zZXRfY3B1X21vZGVsKGt2bSwgYXR0cik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIwNTUtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIzOjUzLjk2Mjc4OTI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjQ5NjM3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNL3MzOTAgQ29kZSBmb3IgRmVhdHVyZSBFeGVjdXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gaG93IHNwZWNpZmljIGZlYXR1cmVzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgS1ZNL3MzOTAgYXJjaGl0ZWN0dXJlLiBJJ3ZlIGlkZW50aWZpZWQgYGt2bV9zMzkwX3ZtX3NldF9hdHRyYCBhcyB0aGUgaW9jdGwgaGFuZGxlciBmb3IgYEtWTV9TRVRfREVWSUNFX0FUVFJgIG9uIHRoZSBWTSBmaWxlIGRlc2NyaXB0b3IuIFdoaWxlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgaXQncyBub3QgcXVpdGUgYXQgdGhlIGxldmVsIG9mIGRldGFpbCBJJ20gYWZ0ZXIsIGFuZCBJIGJlbGlldmUgYGt2bV9zMzkwX2hhbmRsZV92c2llYCBpcyBhIGJldHRlciBpbmRpY2F0b3Igb2YgdGhlIGFjdHVhbCBleGVjdXRpb24gb2YgYSBzcGVjaWZpYyBmZWF0dXJlLlxuXG5UaGVyZWZvcmUsIGZvciB0aGlzIGludmVzdGlnYXRpb24sIEknbSBnb2luZyB0byBpbmNsdWRlIGJvdGggYGt2bV9zMzkwX2hhbmRsZV92c2llYCBhbmQgYGt2bV9zMzkwX3ZtX3NldF9hdHRyYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgc3lzdGVtIGlzIGJ1aWx0IHdpdGggYENPTkZJR19LVk1gLiBUaGUgY29kZSBpdHNlbGYsIG9mIGNvdXJzZSwgcmVzaWRlcyB3aXRoaW4gdGhlIGBhcmNoL3MzOTAva3ZtL2AgZGlyZWN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUzMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMzo1OC41Mjc3NTYzOTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQ5MzU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIzOjU4LjYzOTI1NDY1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NDU2ODgwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS1ZNIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCBgS1ZNYCBpcyBkZWZpbml0ZWx5IHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gcG9pbnQuIEJ1dCBob2xkIG9uLCBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgYEtWTWAgaXMgYSB0cmlzdGF0ZS4gVGhhdCBtZWFucyBpdCBjYW4gYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUg4oCTIGdvb2QgdG8ga25vdy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBLVk0gdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEJlc3QgdG8gYmUgdGhvcm91Z2gsIEkgc3VwcG9zZS4gUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGluIGBhcmNoL3MzOTAva3ZtL01ha2VmaWxlYCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gVGhpcyBNYWtlZmlsZSBpcyB1c3VhbGx5IHdoZXJlIHJlbGF0ZWQgb3B0aW9ucyBhcmUgZ2F0aGVyZWQsIHNvIGhvcGVmdWxseSwgSSdsbCBmaW5kIHdoYXQgSSdtIGxvb2tpbmcgZm9yIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjEyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjI0OjAzLjU4NDk0NzI2MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCMgTWFrZWZpbGUgZm9yIGtlcm5lbCB2aXJ0dWFsIG1hY2hpbmVzIG9uIHMzOTBcXG4gICAzOlxcdCNcXG4gICA0OlxcdCMgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4XFxuICAgNTpcXHRcXG4gICA2OlxcdGluY2x1ZGUgJChzcmN0cmVlKS92aXJ0L2t2bS9NYWtlZmlsZS5rdm1cXG4gICA3OlxcdFxcbiAgIDg6XFx0Y2NmbGFncy15IDo9IC1JdmlydC9rdm0gLUlhcmNoL3MzOTAva3ZtXFxuICAgOTpcXHRcXG4gIDEwOlxcdGt2bS15ICs9IGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3Aub1xcbiAgMTE6XFx0a3ZtLXkgKz0gZGlhZy5vIGdhY2Nlc3MubyBndWVzdGRiZy5vIHZzaWUubyBwdi5vXFxuICAxMjpcXHRrdm0teSArPSBkYXQubyBnbWFwLm8gZmF1bHRpbi5vXFxuICAxMzpcXHRcXG4gIDE0OlxcdGt2bS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgKz0gcGNpLm9cXG4gIDE1OlxcdG9iai0kKENPTkZJR19LVk0pICs9IGt2bS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjI0OjAzLjU4NTA2Mjg3MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzcyMzc5MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgaW5pdGlhbGx5IHRob3VnaHQgYENPTkZJR19LVk1gIHdhcyB0aGUga2V5LCBidXQgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGB2c2llLmNgLCBzaG93cyBpdCdzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDT05GSUdfS1ZNYCBpcyBhY3RpdmUuIFRoZXJlZm9yZSwgYEtWTWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gZmxhZyB0byBmb2N1cyBvbi5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5OlxuXG4qICAgKipGdW5jdGlvbmFsIENoYW5nZToqKiBBYnNvbHV0ZWx5LCB0aGlzIGVuYWJsZXMgYEtWTV9TMzkwX1ZNX0NQVV9GRUFUXzY0QlNDQU9gIHVuY29uZGl0aW9uYWxseS4gSXQgYWx0ZXJzIHRoZSBiZWhhdmlvciwgd2hpY2ggbWFrZXMgaXQgaW50ZXJlc3RpbmcuXG4qICAgKipSZWFjaGFiaWxpdHk6KiogWWVzLCB0aGlzIGlzIHJlYWNoYWJsZSB0aHJvdWdoIEtWTSBpb2N0bHMgYW5kIHRyaWdnZXJlZCBieSB0aGUgYFNJRWAgaW5zdHJ1Y3Rpb24gd2l0aGluIGEgZ3Vlc3QuIFRoYXQncyBhIGNsZWFyIHBhdGggdG8gdHJpZ2dlciB0aGUgY2hhbmdlLlxuKiAgICoqRnV6emFiaWxpdHk6KiogRGVmaW5pdGVseS4gVGhpcyBpbXBhY3RzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiAodlNJRSkgYnkgYWxsb3dpbmcgYSA2NC1iaXQgQlNDQSBvcmlnaW4uIFRoYXQncyBhIHNpZ25pZmljYW50IGVub3VnaCBzaGlmdCBpbiBiZWhhdmlvciB0byB3YXJyYW50IGZ1enppbmcuXG4qICAgKipGb2N1cyBTeW1ib2xzOioqIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIHdpbGwgYmUgYGt2bV9zMzkwX2hhbmRsZV92c2llYCBhbmQgYGt2bV9zMzkwX3ZtX3NldF9hdHRyYC5cbiogICAqKkVuYWJsZSBDb25maWd1cmF0aW9uczoqKiBUaGUgZm9jdXMgaXMgY2xlYXJseSBvbiBgS1ZNYC5cblxuTm93LCBJJ20ganVzdCBkb3VibGUtY2hlY2tpbmcgbXkgY2hvaWNlIG9mIGZvY3VzIHN5bWJvbHMuIElzIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgdGhlICpiZXN0KiBlbnRyeSBwb2ludD8gWWVzLCBpdCBpcy4gSXQncyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGhhbmRsaW5nLiBBbmQsIGBrdm1fczM5MF92bV9zZXRfYXR0cmAgaXMgd2hlcmUgdGhlIENQVSBmZWF0dXJlIGlzIHNldC4gSSB0aGluayB0aGlzIGlzIGEgcm9idXN0IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYzMCwiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyNDoxMC4zNTc0NDQ3NjZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcxMDA4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zMzkwX2hhbmRsZV92c2llXCIsXG4gICAgXCJrdm1fczM5MF92bV9zZXRfYXR0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIEtWTSBDUFUgZmVhdHVyZSBpbml0aWFsaXphdGlvbiBieSB1bmNvbmRpdGlvbmFsbHkgYWxsb3dpbmcgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTy4gVGhpcyBhbGxvd3MgdXNlcnNwYWNlIHRvIGVuYWJsZSB0aGUgNjQtYml0IEJTQ0Egb3JpZ2luIGZlYXR1cmUgZm9yIGEgZ3Vlc3QsIHdoaWNoIGFsdGVycyBob3cgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgaXMgY2FsY3VsYXRlZCBpbiBgcGluX2Jsb2Nrc2AgZHVyaW5nIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiAodlNJRSkuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCB0aGUgU0lFIGluc3RydWN0aW9uIGluIGEgZ3Vlc3QsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zMzkwX2hhbmRsZV92c2llXCIsXG4gICAgXCJrdm1fczM5MF92bV9zZXRfYXR0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZ1bmN0aW9uYWxseSBjaGFuZ2VzIEtWTSBDUFUgZmVhdHVyZSBpbml0aWFsaXphdGlvbiBieSB1bmNvbmRpdGlvbmFsbHkgYWxsb3dpbmcgS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTy4gVGhpcyBhbGxvd3MgdXNlcnNwYWNlIHRvIGVuYWJsZSB0aGUgNjQtYml0IEJTQ0Egb3JpZ2luIGZlYXR1cmUgZm9yIGEgZ3Vlc3QsIHdoaWNoIGFsdGVycyBob3cgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgaXMgY2FsY3VsYXRlZCBpbiBgcGluX2Jsb2Nrc2AgZHVyaW5nIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiAodlNJRSkuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCB0aGUgU0lFIGluc3RydWN0aW9uIGluIGEgZ3Vlc3QsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyNDoxMC40OTQ1NTY0NzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTE0MjY3NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjQ6MTAuNDk1MzkyNjUyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyOTEzNDI0NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBwZXJmb3JtcyBtaW5vciByZWZhY3RvcmluZyAocmVwbGFjaW5nIGhhcmRjb2RlZCBzaGlmdCB2YWx1ZXMgd2l0aCBhIG1hY3JvLCB1c2luZyBwaHlzX3RvX3BmbiBpbnN0ZWFkIG9mIGJpdHdpc2Ugc2hpZnQpIGFuZCBlbmFibGVzIGEgS1ZNIENQVSBmZWF0dXJlIChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKSB1bmNvbmRpdGlvbmFsbHkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGJ1ZmZlcnMsIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMsIG9yIGNvcHlpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODFhMDk0NzQzMTRkNmQyZjIzMTgxMTFhZGI4MzljYTY3OGJiMWJjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTI6MjI6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfdHlwZXMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF90eXBlcy5oXG5pbmRleCAzZjUwOTQyYmRmZTZjLi5hYzgyZGQwOWZjZTUyIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3R5cGVzLmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF90eXBlcy5oXG5AQCAtOSw2ICs5LDggQEBcbiAjZGVmaW5lIEtWTV9TMzkwX0JTQ0FfQ1BVX1NMT1RTIDY0XG4gI2RlZmluZSBLVk1fUzM5MF9FU0NBX0NQVV9TTE9UUyAyNDhcbiBcbisjZGVmaW5lIFNDQl9BTElHTk1FTlRfU0hJRlQgOVxuK1xuICNkZWZpbmUgU0lHUF9DVFJMX0NcdFx0MHg4MFxuICNkZWZpbmUgU0lHUF9DVFJMX1NDTl9NQVNLXHQweDNmXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5pbmRleCAxNTBiNWRkMjE3MGUyLi5jNjc5ZDhmODNjMGVjIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC00NTUsOCArNDU1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGt2bV9zMzkwX2NwdV9mZWF0X2luaXQodm9pZClcbiBcdCAgICAhdGVzdF9mYWNpbGl0eSgzKSB8fCAhbmVzdGVkKVxuIFx0XHRyZXR1cm47XG4gXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUVGMik7XG4tXHRpZiAoc2NscC5oYXNfNjRic2Nhbylcbi1cdFx0YWxsb3dfY3B1X2ZlYXQoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTyk7XG4rXHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKTtcbiBcdGlmIChzY2xwLmhhc19zaWlmKVxuIFx0XHRhbGxvd19jcHVfZmVhdChLVk1fUzM5MF9WTV9DUFVfRkVBVF9TSUlGKTtcbiBcdGlmIChzY2xwLmhhc19ncGVyZSlcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ZzaWUuYyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jXG5pbmRleCBlZWEyNDU2MmU3ZGIyLi5lYjYwYTM1OWQwYWEwIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS92c2llLmNcbisrKyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jXG5AQCAtMzMsMTAgKzMzLDcgQEAgZW51bSB2c2llX3BhZ2VfZmxhZ3Mge1xuIFxuIHN0cnVjdCB2c2llX3BhZ2Uge1xuIFx0c3RydWN0IGt2bV9zMzkwX3NpZV9ibG9jayBzY2JfcztcdC8qIDB4MDAwMCAqL1xuLVx0Lypcbi1cdCAqIHRoZSBiYWNrdXAgaW5mbyBmb3IgbWFjaGluZSBjaGVjay4gZW5zdXJlIGl0J3MgYXRcbi1cdCAqIHRoZSBzYW1lIG9mZnNldCBhcyB0aGF0IGluIHN0cnVjdCBzaWVfcGFnZSFcbi1cdCAqL1xuK1x0LyogYmFja3VwIGluZm8gZm9yIG1hY2hpbmUgY2hlY2sgKi9cbiBcdHN0cnVjdCBtY2NrX3ZvbGF0aWxlX2luZm8gbWNja19pbmZvOyAgICAvKiAweDAyMDAgKi9cbiBcdC8qXG4gXHQgKiBUaGUgcGlubmVkIG9yaWdpbmFsIHNjYi4gQmUgYXdhcmUgdGhhdCBvdGhlciBWQ1BVcyBjYW4gbW9kaWZ5XG5AQCAtNzEsNiArNjgsOCBAQCBzdHJ1Y3QgdnNpZV9wYWdlIHtcbiB9O1xuIFxuIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpID09IFBBR0VfU0laRSk7XG4rc3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdnNpZV9wYWdlLCBtY2NrX2luZm8pID09IG9mZnNldG9mKHN0cnVjdCBzaWVfcGFnZSwgbWNja19pbmZvKSk7XG4rc3RhdGljX2Fzc2VydChJU19BTElHTkVEKG9mZnNldG9mKHN0cnVjdCB2c2llX3BhZ2UsIGNyeWNiKSwgOCkpO1xuIFxuIC8qIHRyaWdnZXIgYSB2YWxpZGl0eSBpY3B0IGZvciB0aGUgZ2l2ZW4gc2NiICovXG4gc3RhdGljIGludCBzZXRfdmFsaWRpdHlfaWNwdChzdHJ1Y3Qga3ZtX3MzOTBfc2llX2Jsb2NrICpzY2IsXG5AQCAtNzAxLDcgKzcwMCw3IEBAIHN0YXRpYyBpbnQgcGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90ICpocGEpXG4gLyogVW5waW5zIGEgcGFnZSBwcmV2aW91c2x5IHBpbm5lZCB2aWEgcGluX2d1ZXN0X3BhZ2UsIG1hcmtpbmcgaXQgYXMgZGlydHkuICovXG4gc3RhdGljIHZvaWQgdW5waW5fZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgaHBhX3QgaHBhKVxuIHtcbi1cdGt2bV9yZWxlYXNlX3BhZ2VfZGlydHkocGZuX3RvX3BhZ2UoaHBhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKSk7XG4rXHRrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBmbl90b19wYWdlKHBoeXNfdG9fcGZuKGhwYSkpKTtcbiBcdC8qIG1hcmsgdGhlIHBhZ2UgYWx3YXlzIGFzIGRpcnR5IGZvciBtaWdyYXRpb24gKi9cbiBcdG1hcmtfcGFnZV9kaXJ0eShrdm0sIGdwYV90b19nZm4oZ3BhKSk7XG4gfVxuQEAgLTE0ODYsNyArMTQ4NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIFx0aW50IG5yX3ZjcHVzO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0dnNpZV9wYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXHUwMDNlXHUwMDNlIDkpO1xuK1x0dnNpZV9wYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXHUwMDNlXHUwMDNlIFNDQl9BTElHTk1FTlRfU0hJRlQpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpZiAodnNpZV9wYWdlKSB7XG4gXHRcdGlmICh0cnlfZ2V0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpKSB7XG5AQCAtMTUyNywxMyArMTUyNiwxNCBAQCBzdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdFx0fVxuIFx0XHRpZiAodnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgIT0gVUxPTkdfTUFYKVxuIFx0XHRcdHJhZGl4X3RyZWVfZGVsZXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLFxuLVx0XHRcdFx0XHQgIHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhIFx1MDAzZVx1MDAzZSA5KTtcbitcdFx0XHRcdFx0ICB2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSBcdTAwM2VcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCk7XG4gXHR9XG4gXHQvKiBNYXJrIGl0IGFzIGludmFsaWQgdW50aWwgaXQgcmVzaWRlcyBpbiB0aGUgdHJlZS4gKi9cbiBcdHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhID0gVUxPTkdfTUFYO1xuIFxuIFx0LyogRG91YmxlIHVzZSBvZiB0aGUgc2FtZSBhZGRyZXNzIG9yIGFsbG9jYXRpb24gZmFpbHVyZS4gKi9cbi1cdGlmIChyYWRpeF90cmVlX2luc2VydChcdTAwMjZrdm0tXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciBcdTAwM2VcdTAwM2UgOSwgdnNpZV9wYWdlKSkge1xuK1x0aWYgKHJhZGl4X3RyZWVfaW5zZXJ0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLCBhZGRyIFx1MDAzZVx1MDAzZSBTQ0JfQUxJR05NRU5UX1NISUZULFxuK1x0XHRcdCAgICAgIHZzaWVfcGFnZSkpIHtcbiBcdFx0cHV0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5tdXRleCk7XG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTE1NjUsNyArMTU2NSw2IEBAIGludCBrdm1fczM5MF9oYW5kbGVfdnNpZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VncHN3Lm1hc2sgXHUwMDI2IFBTV19NQVNLX1BTVEFURSlcbiBcdFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fUFJJVklMRUdFRF9PUCk7XG4gXG4tXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpICE9IFBBR0VfU0laRSk7XG4gXHRzY2JfYWRkciA9IGt2bV9zMzkwX2dldF9iYXNlX2Rpc3Bfcyh2Y3B1LCBOVUxMKTtcbiBcbiBcdC8qIDUxMiBieXRlIGFsaWdubWVudCAqL1xuQEAgLTE2MzIsNyArMTYzMSw3IEBAIHZvaWQga3ZtX3MzOTBfdnNpZV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0LyogZnJlZSB0aGUgcmFkaXggdHJlZSBlbnRyeSAqL1xuIFx0XHRpZiAodnNpZV9wYWdlLVx1MDAzZXNjYl9ncGEgIT0gVUxPTkdfTUFYKVxuIFx0XHRcdHJhZGl4X3RyZWVfZGVsZXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLFxuLVx0XHRcdFx0XHQgIHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhIFx1MDAzZVx1MDAzZSA5KTtcbitcdFx0XHRcdFx0ICB2c2llX3BhZ2UtXHUwMDNlc2NiX2dwYSBcdTAwM2VcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCk7XG4gXHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl2c2llX3BhZ2UpO1xuIFx0fVxuIFx0a3ZtLVx1MDAzZWFyY2gudnNpZS5wYWdlX2NvdW50ID0gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjI0OjEwLjQ5NTM5NTAzMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjkxMzM5Mjc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogczM5MCBLVk0gUmVmYWN0b3JpbmcgYW5kIEZlYXR1cmUgRW5hYmxlbWVudCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AgYW5kIGBhcmNoL3MzOTAva3ZtL3ZzaWUuY2AuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBsZXQncyBkaWcgaW4uIEl0J3MgcmVwbGFjaW5nIHNvbWUgaGFyZGNvZGVkIHNoaWZ0IHZhbHVlcyB3aXRoIGBTQ0JfQUxJR05NRU5UX1NISUZUYCwgd2hpY2gsIGZyb20gdGhlIGNvZGUsIEkga25vdyBpcyBqdXN0IDkuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcgZm9yIG1haW50YWluYWJpbGl0eS4gQWxzbywgYGhwYSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVGAgaXMgYmVjb21pbmcgYHBoeXNfdG9fcGZuKGhwYSlgLiBBZ2Fpbiwgc291bmRzIGxpa2UgYSBjbGVhbmVyIHdheSB0byBleHByZXNzIHRoZSBzYW1lIHRoaW5nLiBUaGV5J3JlIGFkZGluZyBzb21lIGBzdGF0aWNfYXNzZXJ0YHMgYW5kIG1vdmluZyBjb21tZW50cyBhcm91bmQgdG9vLlxuXG5UaGUgcGFydCB0aGF0IGdhdmUgbWUgcGF1c2Ugd2FzIHJlbW92aW5nIHRoZSBgc2NscC5oYXNfNjRic2Nhb2AgY2hlY2sgYmVmb3JlIGVuYWJsaW5nIGBLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPYC4gVGhpcyBmZWVscyBsaWtlIGl0IG1pZ2h0IGJlIGEgc3VidGxlIGZlYXR1cmUgZW5hYmxlbWVudCB3aXRob3V0IHRoZSB1c3VhbCBnYXRpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiB0aGUgZ3Vlc3Qgbm93IHVzZSA2NC1iaXQgQlNDQSBldmVuIGlmIHRoZSBob3N0IGRvZXNuJ3QgZnVsbHkgc3VwcG9ydCBpdD9cIiBCdXQgdGhlbiBJIHJlbWVtYmVyZWQsIHRoaXMgaXMgKmp1c3QqIGEgZmVhdHVyZSBiaXQuIEVuYWJsaW5nIGl0ICpkb2Vzbid0KiBhdXRvbWF0aWNhbGx5IGNhdXNlIHRoZSBndWVzdCB0byB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnksIHJpZ2h0PyBJdCBqdXN0IGFsbG93cyB0aGUgZnVuY3Rpb25hbGl0eSBpZiB0aGUgaGFyZHdhcmUgaXMgdGhlcmUuIEl0J3MgYSBrZXkgZGlmZmVyZW5jZSBmcm9tIGFsbG9jYXRpbmcgb3IgY29weWluZyBkYXRhLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYGFsbG93X2NwdV9mZWF0YC4gSWYgdGhlIGd1ZXN0IHN1YnNlcXVlbnRseSAqdXNlcyogNjQtYml0IEJTQ0EsIGRvZXMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCB0aGF0J3Mgbm90IHdoYXQgdGhpcyBiaXQgZG9lcy4gSWYgdGhlIGhvc3QgZG9lc24ndCBzdXBwb3J0IHRoZSBmZWF0dXJlLCB0aGUgZ3Vlc3QgbWF5IHRyeSB0byB1c2UgaXQgYnV0IGl0IHNob3VsZG4ndCBhY2Nlc3MgdW5pbml0aWFsaXplZCBkYXRhLiBMZXQgbWUgdGhpbmssIHRoaXMgaXMganVzdCBlbmFibGluZyB0aGUgZmVhdHVyZTsgaXQgZG9lc24ndCBpbml0aWFsaXplIGFueSBkYXRhIHN0cnVjdHVyZXMgaXRzZWxmLiBTZWVtcyBsaWtlIGEgcmVndWxhciBLVk0gYnVnIG9yIGZlYXR1cmUgZW5hYmxlbWVudCwgc28gbm90IGEgcHJvYmxlbS5cblxuTm93IGxldCBtZSBydW4gdGhyb3VnaCB0aGUgc3BlY2lmaWMgY29kZSBjaGFuZ2VzLiBMb29raW5nIGF0IGB1bnBpbl9ndWVzdF9wYWdlYDpcblxuYGBgY1xuc3RhdGljIHZvaWQgdW5waW5fZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgaHBhX3QgaHBhKVxue1xuXHRrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBmbl90b19wYWdlKHBoeXNfdG9fcGZuKGhwYSkpKTtcblx0LyogbWFyayB0aGUgcGFnZSBhbHdheXMgYXMgZGlydHkgZm9yIG1pZ3JhdGlvbiAqL1xuXHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBncGFfdG9fZ2ZuKGdwYSkpO1xufVxuYGBgXG5cblRoYXQncyBqdXN0IHJlcGxhY2luZyB0aGUgYml0IHNoaWZ0IHdpdGggdGhlIGBwaHlzX3RvX3BmbmAgaGVscGVyLCB3aGljaCBpcyBjbGVhbmVyIGFuZCBzYWZlci4gVGhlbiB0aGVyZSdzIGBnZXRfdnNpZV9wYWdlYDpcblxuYGBgY1xuXHR2c2llX3BhZ2UgPSByYWRpeF90cmVlX2xvb2t1cChcdTAwMjZrdm0tXHUwMDNlYXJjaC52c2llLmFkZHJfdG9fcGFnZSwgYWRkciBcdTAwM2VcdTAwM2UgU0NCX0FMSUdOTUVOVF9TSElGVCk7XG5gYGBcblxuQW5vdGhlciBzaW1wbGUgcmVwbGFjZW1lbnQgb2YgYDlgIHdpdGggYFNDQl9BTElHTk1FTlRfU0hJRlRgLiBOb3RoaW5nIHRvIHdvcnJ5IGFib3V0LlxuXG5TbywgY29uY2x1ZGluZyB0aGUgYW5hbHlzaXMsIEkgc2VlIG5vIGluZGljYXRpb24gdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGFueSBwb3RlbnRpYWwgZm9yIGluZm9ybWF0aW9uIGxlYWtzLiBJdCdzIHJlZmFjdG9yaW5nLCBtYWtpbmcgdGhlIGNvZGUgbW9yZSByZWFkYWJsZSBhbmQgbWFpbnRhaW5hYmxlLCBwbHVzIGVuYWJsaW5nIGEgQ1BVIGZlYXR1cmUgd2hpY2ggaXRzZWxmIGRvZXNuJ3QgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gR2l2ZW4gdGhpcywgSSBjYW4gY29uZmlkZW50bHkgc3RhdGUgdGhhdCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBhIGxvdy1yaXNrIGNoYW5nZS4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTcsIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjQ6MjMuNDA4NzkxOTE2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBwZXJmb3JtcyBtaW5vciByZWZhY3RvcmluZyAocmVwbGFjaW5nIGhhcmRjb2RlZCBzaGlmdCB2YWx1ZXMgd2l0aCBhIG1hY3JvLCB1c2luZyBwaHlzX3RvX3BmbiBpbnN0ZWFkIG9mIGJpdHdpc2Ugc2hpZnQpIGFuZCBlbmFibGVzIGEgS1ZNIENQVSBmZWF0dXJlIChLVk1fUzM5MF9WTV9DUFVfRkVBVF82NEJTQ0FPKSB1bmNvbmRpdGlvbmFsbHkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGJ1ZmZlcnMsIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMsIG9yIGNvcHlpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcGVyZm9ybXMgbWlub3IgcmVmYWN0b3JpbmcgKHJlcGxhY2luZyBoYXJkY29kZWQgc2hpZnQgdmFsdWVzIHdpdGggYSBtYWNybywgdXNpbmcgcGh5c190b19wZm4gaW5zdGVhZCBvZiBiaXR3aXNlIHNoaWZ0KSBhbmQgZW5hYmxlcyBhIEtWTSBDUFUgZmVhdHVyZSAoS1ZNX1MzOTBfVk1fQ1BVX0ZFQVRfNjRCU0NBTykgdW5jb25kaXRpb25hbGx5LiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBidWZmZXJzLCBtb2RpZnlpbmcgZGF0YSBsZW5ndGhzLCBvciBjb3B5aW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow86mgt[1] Phase: Succeeded StartedAt: 2026-08-07 12:24:34 +0000 UTC FinishedAt: 2026-08-07 12:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 12:24:34 +0000 UTC FinishedAt: 2026-08-07 12:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2] Phase: Succeeded StartedAt: 2026-08-07 12:24:34 +0000 UTC FinishedAt: 2026-08-07 13:08:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 12:24:34 +0000 UTC FinishedAt: 2026-08-07 13:08:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 12:24:34 +0000 UTC FinishedAt: 2026-08-07 12:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 12:24:34 +0000 UTC FinishedAt: 2026-08-07 12:24:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-convert-artifact-1015352552/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 12:24:44 +0000 UTC FinishedAt: 2026-08-07 12:44:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 12:24:44 +0000 UTC FinishedAt: 2026-08-07 12:44:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1188024b-8e5d-4a34-965f-7dae1990bedd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-convert-artifact-1015352552/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "8ae7bba3-0a8b-4680-8a73-139ba4097617", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-build-action-3954807390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 12:24:44 +0000 UTC FinishedAt: 2026-08-07 12:44:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1188024b-8e5d-4a34-965f-7dae1990bedd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-convert-artifact-1015352552/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "8ae7bba3-0a8b-4680-8a73-139ba4097617", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-build-action-3954807390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 12:44:18 +0000 UTC FinishedAt: 2026-08-07 12:44:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 12:44:18 +0000 UTC FinishedAt: 2026-08-07 12:44:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 12:44:18 +0000 UTC FinishedAt: 2026-08-07 12:44:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 12:44:18 +0000 UTC FinishedAt: 2026-08-07 12:44:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-convert-artifact-2781242831/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 12:44:29 +0000 UTC FinishedAt: 2026-08-07 12:46:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 12:44:29 +0000 UTC FinishedAt: 2026-08-07 12:46:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8ae7bba3-0a8b-4680-8a73-139ba4097617,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-build-action-3954807390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 12:46:31 +0000 UTC FinishedAt: 2026-08-07 12:46:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 12:46:31 +0000 UTC FinishedAt: 2026-08-07 12:46:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 12:46:31 +0000 UTC FinishedAt: 2026-08-07 13:03:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 12:46:31 +0000 UTC FinishedAt: 2026-08-07 13:03:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1188024b-8e5d-4a34-965f-7dae1990bedd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-convert-artifact-2781242831/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "cecf5785-3d41-4948-9c2b-f1cc26978c77", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-build-action-1887563235/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 12:46:31 +0000 UTC FinishedAt: 2026-08-07 13:03:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1188024b-8e5d-4a34-965f-7dae1990bedd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-convert-artifact-2781242831/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "cecf5785-3d41-4948-9c2b-f1cc26978c77", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-build-action-1887563235/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 13:03:33 +0000 UTC FinishedAt: 2026-08-07 13:03:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 13:03:33 +0000 UTC FinishedAt: 2026-08-07 13:03:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 13:03:33 +0000 UTC FinishedAt: 2026-08-07 13:05:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 13:03:33 +0000 UTC FinishedAt: 2026-08-07 13:05:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cecf5785-3d41-4948-9c2b-f1cc26978c77,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-build-action-1887563235/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 13:05:39 +0000 UTC FinishedAt: 2026-08-07 13:08:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 13:05:39 +0000 UTC FinishedAt: 2026-08-07 13:08:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*8ae7bba3-0a8b-4680-8a73-139ba4097617,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cecf5785-3d41-4948-9c2b-f1cc26978c77,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-build-action-3954807390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-build-action-1887563235/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 13:05:39 +0000 UTC FinishedAt: 2026-08-07 13:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 13:05:39 +0000 UTC FinishedAt: 2026-08-07 13:05:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-convert-artifact-1576600456/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 13:05:39 +0000 UTC FinishedAt: 2026-08-07 13:05:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 13:05:39 +0000 UTC FinishedAt: 2026-08-07 13:05:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 13:05:39 +0000 UTC FinishedAt: 2026-08-07 13:05:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 13:05:49 +0000 UTC FinishedAt: 2026-08-07 13:08:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86mgt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_s390_handle_vsie","kvm_s390_vm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f9a2394a23482bfd330911e9c8295b71724feacd","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"edd69ea2-8f45-4824-b8d4-e81745204f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 13:05:49 +0000 UTC FinishedAt: 2026-08-07 13:08:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8ae7bba3-0a8b-4680-8a73-139ba4097617,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cecf5785-3d41-4948-9c2b-f1cc26978c77,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-build-action-3954807390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-build-action-1887563235/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86mgt/series-workflow86mgt-convert-artifact-1576600456/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}