Name: series-workflowlzlp5 Phase: Succeeded StartedAt: 2026-09-14 12:20:48 +0000 UTC FinishedAt: 2026-09-14 16:39:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[0] Phase: Succeeded StartedAt: 2026-09-14 12:20:48 +0000 UTC FinishedAt: 2026-09-14 12:46:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 12:20:48 +0000 UTC FinishedAt: 2026-09-14 12:46:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "baa8de2f3448d1466a888a805c18d01c998fe052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "baa8de2f3448d1466a888a805c18d01c998fe052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU" ], "series_id": "6e9c0e39-b3ad-4dea-a85b-045e25222844" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zap_vma_for_reaping", "__oom_reap_task_mm", "oom_reap_task_mm", "oom_reap_task", "__x64_sys_process_mrelease" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "baa8de2f3448d1466a888a805c18d01c998fe052", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3phcF92bWFfZm9yX3JlYXBpbmcmIzM0OywKICAgICYjMzQ7X19vb21fcmVhcF90YXNrX21tJiMzNDssCiAgICAmIzM0O29vbV9yZWFwX3Rhc2tfbW0mIzM0OywKICAgICYjMzQ7b29tX3JlYXBfdGFzayYjMzQ7LAogICAgJiMzNDtfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00gcmVhcGVyIGxvZ2ljIGluIG1tL29vbV9raWxsLmMgYW5kIG1tL21lbW9yeS5jIHNvIHRoYXQgVk1BcyBhcmUgemFwcGVkIGluIDFHQiBjaHVua3MsIGFsbG93aW5nIG1tYXBfbG9jayB0byBiZSB5aWVsZGVkIHRvIHdhaXRpbmcgd3JpdGVycyB1cG9uIGNvbnRlbnRpb24uIEl0IGFsc28gdXBkYXRlcyBlcnJvciBoYW5kbGluZyBhY3Jvc3MgemFwX3ZtYV9mb3JfcmVhcGluZywgX19vb21fcmVhcF90YXNrX21tLCBvb21fcmVhcF90YXNrLCBhbmQgdGhlIHByb2Nlc3NfbXJlbGVhc2Ugc3lzY2FsbC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChhZGRyLCBlbmQsIHJldCwgYXR0ZW1wdHMpIGFyZSBzY2FsYXIgdHlwZXMgYW5kIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHByaW9yIHRvIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBoZWFwL3N0YWNrIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgb3Igc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocyBhZmZlY3RpbmcgcmVhZHMgb2YgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIGludm9sdmUgbG9jayBtYW5hZ2VtZW50LCBsb2NrIGNvbnRlbnRpb24sIFZNQSBpdGVyYXRpb24sIG9yIHBhZ2UgdGFibGUgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVk1BIHVubWFwcGluZyBsb2dpYyBmb3IgT09NIHJlYXBpbmcgYW5kIHRoZSBwcm9jZXNzX21yZWxlYXNlIHN5c2NhbGwsIHNwbGl0dGluZyBWTUEgemFwcGluZyBpbnRvIDFHQiBjaHVua3MgYW5kIHlpZWxkaW5nIG1tYXBfbG9jayB3aGVuIGNvbnRlbmRlZC4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRyb2wgZmxvdyBhbmQgbG9ja2luZyBzZW1hbnRpY3MgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbG9jayBpbnZlcnNpb25zLCBvciBzdGF0ZSBpbmNvbnNpc3RlbmN5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2FiZmEwM2I4MTIzZDljMjllNTIzYTg0MzNjY2UxNDFkYjk0YWViY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDEyOjQxOjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAwNTE3OWM0YjIwOTBlLi43YWMxNzI4YTU3YzI5IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaFxuQEAgLTU5Myw3ICYjNDM7NTkzLDggQEAgc3RydWN0IHphcF9kZXRhaWxzO1xuIHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKTtcbi1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4mIzQzO2ludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCk7XG4gaW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0ICAgZ2ZwX3QgZ2ZwKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA5MjYyNzZkNDE5MjAyLi4yNWMzNWEyOGEzOWQxIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtMjIwNywxNSAmIzQzOzIyMDcsMTggQEAgc3RhdGljIHZvaWQgX196YXBfdm1hX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiBcbiAvKipcbi0gKiB6YXBfdm1hX2Zvcl9yZWFwaW5nIC0gemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nXG4mIzQzOyAqIHphcF92bWFfZm9yX3JlYXBpbmcgLSB6YXAgYSByYW5nZSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmdcbiAgKiBAdm1hOiBUaGUgdm1hIHRvIHphcC5cbiYjNDM7ICogQHN0YXJ0OiBUaGUgZmlyc3QgYWRkcmVzcyB0byB6YXAuXG4mIzQzOyAqIEBlbmQ6IE9uZSBwYXN0IHRoZSBsYXN0IGFkZHJlc3MgdG8gemFwLlxuICAqXG4tICogWmFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nIGZvciB1c2UgYnkgdGhlIG9vbVxuLSAqIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxuJiM0MzsgKiBaYXAgdGhlIHBhZ2UgdGFibGUgZW50cmllcyBpbiBbQHN0YXJ0LCBAZW5kKSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmdcbiYjNDM7ICogZm9yIHVzZSBieSB0aGUgb29tIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxuICAqXG4gICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgd2Ugd291bGQgaGF2ZSB0byBibG9jay5cbiAgKi9cbi1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiYjNDM7aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgZW5kKVxuIHtcbiBcdHN0cnVjdCB6YXBfZGV0YWlscyBkZXRhaWxzID0ge1xuIFx0XHQucmVhcGluZyA9IHRydWUsXG5AQCAtMjIyNCw3ICYjNDM7MjIyNyw3IEBAIGludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xuIFxuIFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cdTAwM2V2bV9tbSxcbi1cdFx0XHRcdHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCk7XG4mIzQzO1x0XHRcdFx0c3RhcnQsIGVuZCk7XG4gXHR0bGJfZ2F0aGVyX21tdShcdTAwMjZ0bGIsIHZtYS1cdTAwM2V2bV9tbSk7XG4gXHRpZiAobW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbm9uYmxvY2soXHUwMDI2cmFuZ2UpKSB7XG4gXHRcdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcbmluZGV4IDVkNDhiZDg2MmMyN2IuLmNlZTBhMGY3YjRmMjggMTAwNjQ0XG4tLS0gYS9tbS9vb21fa2lsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9vb21fa2lsbC5jXG5AQCAtNTAzLDEwICYjNDM7NTAzLDE3IEBAIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChvb21fcmVhcGVyX3dhaXQpO1xuIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9vbV9yZWFwZXJfbGlzdDtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG9vbV9yZWFwZXJfbG9jayk7XG4gXG4tc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuJiM0MzsvKlxuJiM0MzsgKiBDYWxsZWQgd2l0aCBtbWFwX2xvY2sgaGVsZCBmb3IgcmVhZC4gIFJldHVybnMgd2l0aCBpdCBzdGlsbCBoZWxkIG9uIDBcbiYjNDM7ICogKGRvbmUpIG9yIC1FQlVTWSAocGFydCBjb3VsZCBub3QgYmUgcmVhcGVkLCB0cnkgYWdhaW4gbGF0ZXIpLCBhbmQgZHJvcHNcbiYjNDM7ICogaXQgb25seSBvbiAtRUFHQUlOLCB3aGVuIGl0IHdhcyBoYW5kZWQgb3ZlciB0byBhIHF1ZXVlZCB3cml0ZXIgYW5kIHRoZVxuJiM0MzsgKiBjYWxsZXIgc2hvdWxkIHJldGFrZSBpdCBhbmQgc3RhcnQgb3Zlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuLVx0Ym9vbCByZXQgPSB0cnVlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWRkciwgZW5kO1xuJiM0MztcdGludCByZXQgPSAwO1xuIFx0TUFfU1RBVEUobWFzLCBcdTAwMjZtbS1cdTAwM2VtbV9tdCwgVUxPTkdfTUFYLCBVTE9OR19NQVgpO1xuIFxuIFx0LypcbkBAIC01MzgsOCAmIzQzOzU0NSwyNSBAQCBzdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRcdCAqIGNvdW50IGVsZXZhdGVkIHdpdGhvdXQgYSBnb29kIHJlYXNvbi5cbiBcdFx0ICovXG4gXHRcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRCkpIHtcbi1cdFx0XHRpZiAoemFwX3ZtYV9mb3JfcmVhcGluZyh2bWEpKVxuLVx0XHRcdFx0cmV0ID0gZmFsc2U7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFphcCBpbiAxRyBjaHVua3MgYW5kIGhhbmQgbW1hcF9sb2NrIG92ZXIgd2hlbmV2ZXIgYVxuJiM0MztcdFx0XHQgKiB3cml0ZXIgaXMgcXVldWVkIG9uIGl0LCBzbyBpdCBkb2VzIG5vdCB3YWl0IGZvciB0aGVcbiYjNDM7XHRcdFx0ICogd2hvbGUgcmVhcC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGVuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4mIzQzO1x0XHRcdHdoaWxlIChlbmQgXHUwMDNlIHZtYS1cdTAwM2V2bV9zdGFydCkge1xuJiM0MztcdFx0XHRcdGFkZHIgPSBtYXgodm1hLVx1MDAzZXZtX3N0YXJ0LCBBTElHTl9ET1dOKGVuZCAtIDEsIFNaXzFHKSk7XG4mIzQzO1x0XHRcdFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hLCBhZGRyLCBlbmQpKSB7XG4mIzQzO1x0XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4mIzQzO1x0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0ZW5kID0gYWRkcjtcbiYjNDM7XHRcdFx0XHRpZiAoIW1tYXBfbG9ja19pc19jb250ZW5kZWQobW0pKVxuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC01NDksMTYgJiM0Mzs1NzMsMTcgQEAgc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIC8qXG4gICogUmVhcHMgdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGdpdmVuIHRhc2suXG4gICpcbi0gKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcyBhbmQgZmFsc2UgaWYgbm9uZSBvciBwYXJ0IG9mIHRoZSBhZGRyZXNzIHNwYWNlXG4tICogaGFzIGJlZW4gcmVjbGFpbWVkIGFuZCB0aGUgY2FsbGVyIHNob3VsZCByZXRyeSBsYXRlci5cbiYjNDM7ICogUmV0dXJucyAwIHdoZW4gZG9uZSwgLUVBR0FJTiBpZiBtbWFwX2xvY2sgd2FzIGhhbmRlZCBvdmVyIHRvIGEgd3JpdGVyXG4mIzQzOyAqIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBzdGFydCBvdmVyLCBhbmQgLUVCVVNZIGlmIG5vbmUgb3IgcGFydCBvZiB0aGVcbiYjNDM7ICogYWRkcmVzcyBzcGFjZSBoYXMgYmVlbiByZWNsYWltZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5IGxhdGVyLlxuICAqL1xuLXN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuJiM0MztzdGF0aWMgaW50IG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbi1cdGJvb2wgcmV0ID0gdHJ1ZTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sobW0pKSB7XG4gXHRcdHRyYWNlX3NraXBfdGFza19yZWFwaW5nKHRzay1cdTAwM2VwaWQpO1xuLVx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuIFx0fVxuIFxuIFx0LypcbkBAIC01NzYsNyAmIzQzOzYwMSw5IEBAIHN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIFx0LyogZmFpbGVkIHRvIHJlYXAgcGFydCBvZiB0aGUgYWRkcmVzcyBzcGFjZS4gVHJ5IGFnYWluIGxhdGVyICovXG4gXHRyZXQgPSBfX29vbV9yZWFwX3Rhc2tfbW0obW0pO1xuLVx0aWYgKCFyZXQpXG4mIzQzO1x0aWYgKHJldCA9PSAtRUFHQUlOKVx0LyogaGFuZGVkIHRoZSBsb2NrIG92ZXIsIGFscmVhZHkgZHJvcHBlZCAqL1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9maW5pc2g7XG4gXG4gXHRwcl9pbmZvKFwmIzM0O29vbV9yZWFwZXI6IHJlYXBlZCBwcm9jZXNzICVkICglcyksIG5vdyBhbm9uLXJzczolbHVrQiwgZmlsZS1yc3M6JWx1a0IsIHNobWVtLXJzczolbHVrQlxcblwmIzM0OyxcbkBAIC01OTUsMTUgJiM0Mzs2MjIsMTUgQEAgc3RhdGljIGJvb2wgb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gI2RlZmluZSBNQVhfT09NX1JFQVBfUkVUUklFUyAxMFxuIHN0YXRpYyB2b2lkIG9vbV9yZWFwX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4ge1xuLVx0aW50IGF0dGVtcHRzID0gMDtcbiYjNDM7XHRpbnQgYXR0ZW1wdHMgPSAwLCByZXQ7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay1cdTAwM2VzaWduYWwtXHUwMDNlb29tX21tO1xuIFxuLVx0LyogUmV0cnkgdGhlIG1tYXBfcmVhZF90cnlsb2NrKG1tKSBhIGZldyB0aW1lcyAqL1xuLVx0d2hpbGUgKGF0dGVtcHRzJiM0MzsmIzQzOyBcdTAwM2MgTUFYX09PTV9SRUFQX1JFVFJJRVMgXHUwMDI2XHUwMDI2ICFvb21fcmVhcF90YXNrX21tKHRzaywgbW0pKVxuJiM0MztcdC8qIFJldHJ5IHRoZSBtbWFwX3JlYWRfdHJ5bG9jayhtbSkgYSBmZXcgdGltZXM7IGhhbmRpbmcgdGhlIGxvY2sgb3ZlciBpcyBub3QgYW4gYXR0ZW1wdCAqL1xuJiM0MztcdHdoaWxlICgocmV0ID0gb29tX3JlYXBfdGFza19tbSh0c2ssIG1tKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIChyZXQgPT0gLUVBR0FJTiB8fCAmIzQzOyYjNDM7YXR0ZW1wdHMgXHUwMDNjIE1BWF9PT01fUkVBUF9SRVRSSUVTKSlcbiBcdFx0c2NoZWR1bGVfdGltZW91dF9pZGxlKEhaLzEwKTtcbiBcbi1cdGlmIChhdHRlbXB0cyBcdTAwM2M9IE1BWF9PT01fUkVBUF9SRVRSSUVTIHx8XG4tXHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSlcbiYjNDM7XHRpZiAoIXJldCB8fCBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVxuIFx0XHRnb3RvIGRvbmU7XG4gXG4gXHRwcl9pbmZvKFwmIzM0O29vbV9yZWFwZXI6IHVuYWJsZSB0byByZWFwIHBpZDolZCAoJXMpXFxuXCYjMzQ7LFxuQEAgLTEyMjcsNiAmIzQzOzEyNTQsNyBAQCBTWVNDQUxMX0RFRklORTIocHJvY2Vzc19tcmVsZWFzZSwgaW50LCBwaWRmZCwgdW5zaWduZWQgaW50LCBmbGFncylcbiBcdGlmICghcmVhcClcbiBcdFx0Z290byBkcm9wX21tO1xuIFxuJiM0MzthZ2FpbjpcbiBcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpIHtcbiBcdFx0cmV0ID0gLUVJTlRSO1xuIFx0XHRnb3RvIGRyb3BfbW07XG5AQCAtMTIzNSw4ICYjNDM7MTI2MywxNSBAQCBTWVNDQUxMX0RFRklORTIocHJvY2Vzc19tcmVsZWFzZSwgaW50LCBwaWRmZCwgdW5zaWduZWQgaW50LCBmbGFncylcbiBcdCAqIENoZWNrIE1NRl9PT01fU0tJUCBhZ2FpbiB1bmRlciBtbWFwX3JlYWRfbG9jayBwcm90ZWN0aW9uIHRvIGVuc3VyZVxuIFx0ICogcG9zc2libGUgY2hhbmdlIGluIGV4aXRfbW1hcCBpcyBzZWVuXG4gXHQgKi9cbi1cdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSBcdTAwMjZcdTAwMjYgIV9fb29tX3JlYXBfdGFza19tbShtbSkpXG4tXHRcdHJldCA9IC1FQUdBSU47XG4mIzQzO1x0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKSB7XG4mIzQzO1x0XHRyZXQgPSBfX29vbV9yZWFwX3Rhc2tfbW0obW0pO1xuJiM0MztcdFx0aWYgKHJldCA9PSAtRUFHQUlOKSB7XHQvKiBhIHdyaXRlciBnb3QgdGhlIGxvY2ssIHF1ZXVlIHVwIGFnYWluICovXG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdGdvdG8gYWdhaW47XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAocmV0ID09IC1FQlVTWSlcbiYjNDM7XHRcdFx0cmV0ID0gLUVBR0FJTjtcbiYjNDM7XHR9XG4gXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcbiBkcm9wX21tOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3phcF92bWFfZm9yX3JlYXBpbmcmIzM0OywKICAgICYjMzQ7X19vb21fcmVhcF90YXNrX21tJiMzNDssCiAgICAmIzM0O29vbV9yZWFwX3Rhc2tfbW0mIzM0OywKICAgICYjMzQ7b29tX3JlYXBfdGFzayYjMzQ7LAogICAgJiMzNDtfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFZNQSB1bm1hcHBpbmcgbG9naWMgZm9yIE9PTSByZWFwaW5nIGFuZCB0aGUgcHJvY2Vzc19tcmVsZWFzZSBzeXNjYWxsLCBzcGxpdHRpbmcgVk1BIHphcHBpbmcgaW50byAxR0IgY2h1bmtzIGFuZCB5aWVsZGluZyBtbWFwX2xvY2sgd2hlbiBjb250ZW5kZWQuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgc2VtYW50aWNzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2sgaW52ZXJzaW9ucywgb3Igc3RhdGUgaW5jb25zaXN0ZW5jeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdhYmZhMDNiODEyM2Q5YzI5ZTUyM2E4NDMzY2NlMTQxZGI5NGFlYmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAxMjo0MTowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDA1MTc5YzRiMjA5MGUuLjdhYzE3MjhhNTdjMjkgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtNTkzLDcgJiM0Mzs1OTMsOCBAQCBzdHJ1Y3QgemFwX2RldGFpbHM7CiB2b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQl1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscyk7Ci1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiYjNDM7aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiYjNDM7CQkJdW5zaWduZWQgbG9uZyBlbmQpOwogaW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQkgICBnZnBfdCBnZnApOwogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDkyNjI3NmQ0MTkyMDIuLjI1YzM1YTI4YTM5ZDEgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC0yMjA3LDE1ICYjNDM7MjIwNywxOCBAQCBzdGF0aWMgdm9pZCBfX3phcF92bWFfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiB9CiAKIC8qKgotICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhbGwgcGFnZSB0YWJsZSBlbnRyaWVzIGluIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZwomIzQzOyAqIHphcF92bWFfZm9yX3JlYXBpbmcgLSB6YXAgYSByYW5nZSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmcKICAqIEB2bWE6IFRoZSB2bWEgdG8gemFwLgomIzQzOyAqIEBzdGFydDogVGhlIGZpcnN0IGFkZHJlc3MgdG8gemFwLgomIzQzOyAqIEBlbmQ6IE9uZSBwYXN0IHRoZSBsYXN0IGFkZHJlc3MgdG8gemFwLgogICoKLSAqIFphcCBhbGwgcGFnZSB0YWJsZSBlbnRyaWVzIGluIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZyBmb3IgdXNlIGJ5IHRoZSBvb20KLSAqIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLgomIzQzOyAqIFphcCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIGluIFtAc3RhcnQsIEBlbmQpIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZwomIzQzOyAqIGZvciB1c2UgYnkgdGhlIG9vbSBraWxsZXIuIEh1Z2V0bGIgdm1hcyBhcmUgbm90IHN1cHBvcnRlZC4KICAqCiAgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiB3ZSB3b3VsZCBoYXZlIHRvIGJsb2NrLgogICovCi1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0MztpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKJiM0MzsJCQl1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlzdHJ1Y3QgemFwX2RldGFpbHMgZGV0YWlscyA9IHsKIAkJLnJlYXBpbmcgPSB0cnVlLApAQCAtMjIyNCw3ICYjNDM7MjIyNyw3IEBAIGludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogCXN0cnVjdCBtbXVfZ2F0aGVyIHRsYjsKIAogCW1tdV9ub3RpZmllcl9yYW5nZV9pbml0KCZhbXA7cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS0mZ3Q7dm1fbW0sCi0JCQkJdm1hLSZndDt2bV9zdGFydCwgdm1hLSZndDt2bV9lbmQpOwomIzQzOwkJCQlzdGFydCwgZW5kKTsKIAl0bGJfZ2F0aGVyX21tdSgmYW1wO3RsYiwgdm1hLSZndDt2bV9tbSk7CiAJaWYgKG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X25vbmJsb2NrKCZhbXA7cmFuZ2UpKSB7CiAJCXRsYl9maW5pc2hfbW11KCZhbXA7dGxiKTsKZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jCmluZGV4IDVkNDhiZDg2MmMyN2IuLmNlZTBhMGY3YjRmMjggMTAwNjQ0Ci0tLSBhL21tL29vbV9raWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vb29tX2tpbGwuYwpAQCAtNTAzLDEwICYjNDM7NTAzLDE3IEBAIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChvb21fcmVhcGVyX3dhaXQpOwogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb29tX3JlYXBlcl9saXN0Owogc3RhdGljIERFRklORV9TUElOTE9DSyhvb21fcmVhcGVyX2xvY2spOwogCi1zdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiYjNDM7LyoKJiM0MzsgKiBDYWxsZWQgd2l0aCBtbWFwX2xvY2sgaGVsZCBmb3IgcmVhZC4gIFJldHVybnMgd2l0aCBpdCBzdGlsbCBoZWxkIG9uIDAKJiM0MzsgKiAoZG9uZSkgb3IgLUVCVVNZIChwYXJ0IGNvdWxkIG5vdCBiZSByZWFwZWQsIHRyeSBhZ2FpbiBsYXRlciksIGFuZCBkcm9wcwomIzQzOyAqIGl0IG9ubHkgb24gLUVBR0FJTiwgd2hlbiBpdCB3YXMgaGFuZGVkIG92ZXIgdG8gYSBxdWV1ZWQgd3JpdGVyIGFuZCB0aGUKJiM0MzsgKiBjYWxsZXIgc2hvdWxkIHJldGFrZSBpdCBhbmQgc3RhcnQgb3Zlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9fb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlib29sIHJldCA9IHRydWU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciwgZW5kOwomIzQzOwlpbnQgcmV0ID0gMDsKIAlNQV9TVEFURShtYXMsICZhbXA7bW0tJmd0O21tX210LCBVTE9OR19NQVgsIFVMT05HX01BWCk7CiAKIAkvKgpAQCAtNTM4LDggJiM0Mzs1NDUsMjUgQEAgc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCQkgKiBjb3VudCBlbGV2YXRlZCB3aXRob3V0IGEgZ29vZCByZWFzb24uCiAJCSAqLwogCQlpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9TSEFSRUQpKSB7Ci0JCQlpZiAoemFwX3ZtYV9mb3JfcmVhcGluZyh2bWEpKQotCQkJCXJldCA9IGZhbHNlOwomIzQzOwkJCS8qCiYjNDM7CQkJICogWmFwIGluIDFHIGNodW5rcyBhbmQgaGFuZCBtbWFwX2xvY2sgb3ZlciB3aGVuZXZlciBhCiYjNDM7CQkJICogd3JpdGVyIGlzIHF1ZXVlZCBvbiBpdCwgc28gaXQgZG9lcyBub3Qgd2FpdCBmb3IgdGhlCiYjNDM7CQkJICogd2hvbGUgcmVhcC4KJiM0MzsJCQkgKi8KJiM0MzsJCQllbmQgPSB2bWEtJmd0O3ZtX2VuZDsKJiM0MzsJCQl3aGlsZSAoZW5kICZndDsgdm1hLSZndDt2bV9zdGFydCkgewomIzQzOwkJCQlhZGRyID0gbWF4KHZtYS0mZ3Q7dm1fc3RhcnQsIEFMSUdOX0RPV04oZW5kIC0gMSwgU1pfMUcpKTsKJiM0MzsJCQkJaWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hLCBhZGRyLCBlbmQpKSB7CiYjNDM7CQkJCQlyZXQgPSAtRUJVU1k7CiYjNDM7CQkJCQlicmVhazsKJiM0MzsJCQkJfQomIzQzOwkJCQllbmQgPSBhZGRyOwomIzQzOwkJCQlpZiAoIW1tYXBfbG9ja19pc19jb250ZW5kZWQobW0pKQomIzQzOwkJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJCW1tYXBfcmVhZF91bmxvY2sobW0pOwomIzQzOwkJCQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJCQl9CiAJCX0KIAl9CiAKQEAgLTU0OSwxNiAmIzQzOzU3MywxNyBAQCBzdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAvKgogICogUmVhcHMgdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGdpdmVuIHRhc2suCiAgKgotICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MgYW5kIGZhbHNlIGlmIG5vbmUgb3IgcGFydCBvZiB0aGUgYWRkcmVzcyBzcGFjZQotICogaGFzIGJlZW4gcmVjbGFpbWVkIGFuZCB0aGUgY2FsbGVyIHNob3VsZCByZXRyeSBsYXRlci4KJiM0MzsgKiBSZXR1cm5zIDAgd2hlbiBkb25lLCAtRUFHQUlOIGlmIG1tYXBfbG9jayB3YXMgaGFuZGVkIG92ZXIgdG8gYSB3cml0ZXIKJiM0MzsgKiBhbmQgdGhlIGNhbGxlciBzaG91bGQgc3RhcnQgb3ZlciwgYW5kIC1FQlVTWSBpZiBub25lIG9yIHBhcnQgb2YgdGhlCiYjNDM7ICogYWRkcmVzcyBzcGFjZSBoYXMgYmVlbiByZWNsYWltZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5IGxhdGVyLgogICovCi1zdGF0aWMgYm9vbCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0MztzdGF0aWMgaW50IG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCWJvb2wgcmV0ID0gdHJ1ZTsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlpZiAoIW1tYXBfcmVhZF90cnlsb2NrKG1tKSkgewogCQl0cmFjZV9za2lwX3Rhc2tfcmVhcGluZyh0c2stJmd0O3BpZCk7Ci0JCXJldHVybiBmYWxzZTsKJiM0MzsJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJLyoKQEAgLTU3Niw3ICYjNDM7NjAxLDkgQEAgc3RhdGljIGJvb2wgb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIAkvKiBmYWlsZWQgdG8gcmVhcCBwYXJ0IG9mIHRoZSBhZGRyZXNzIHNwYWNlLiBUcnkgYWdhaW4gbGF0ZXIgKi8KIAlyZXQgPSBfX29vbV9yZWFwX3Rhc2tfbW0obW0pOwotCWlmICghcmV0KQomIzQzOwlpZiAocmV0ID09IC1FQUdBSU4pCS8qIGhhbmRlZCB0aGUgbG9jayBvdmVyLCBhbHJlYWR5IGRyb3BwZWQgKi8KJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChyZXQpCiAJCWdvdG8gb3V0X2ZpbmlzaDsKIAogCXByX2luZm8oJiMzNDtvb21fcmVhcGVyOiByZWFwZWQgcHJvY2VzcyAlZCAoJXMpLCBub3cgYW5vbi1yc3M6JWx1a0IsIGZpbGUtcnNzOiVsdWtCLCBzaG1lbS1yc3M6JWx1a0JcbiYjMzQ7LApAQCAtNTk1LDE1ICYjNDM7NjIyLDE1IEBAIHN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogI2RlZmluZSBNQVhfT09NX1JFQVBfUkVUUklFUyAxMAogc3RhdGljIHZvaWQgb29tX3JlYXBfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQlpbnQgYXR0ZW1wdHMgPSAwOwomIzQzOwlpbnQgYXR0ZW1wdHMgPSAwLCByZXQ7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stJmd0O3NpZ25hbC0mZ3Q7b29tX21tOwogCi0JLyogUmV0cnkgdGhlIG1tYXBfcmVhZF90cnlsb2NrKG1tKSBhIGZldyB0aW1lcyAqLwotCXdoaWxlIChhdHRlbXB0cyYjNDM7JiM0MzsgJmx0OyBNQVhfT09NX1JFQVBfUkVUUklFUyAmYW1wOyZhbXA7ICFvb21fcmVhcF90YXNrX21tKHRzaywgbW0pKQomIzQzOwkvKiBSZXRyeSB0aGUgbW1hcF9yZWFkX3RyeWxvY2sobW0pIGEgZmV3IHRpbWVzOyBoYW5kaW5nIHRoZSBsb2NrIG92ZXIgaXMgbm90IGFuIGF0dGVtcHQgKi8KJiM0MzsJd2hpbGUgKChyZXQgPSBvb21fcmVhcF90YXNrX21tKHRzaywgbW0pKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAocmV0ID09IC1FQUdBSU4gfHwgJiM0MzsmIzQzO2F0dGVtcHRzICZsdDsgTUFYX09PTV9SRUFQX1JFVFJJRVMpKQogCQlzY2hlZHVsZV90aW1lb3V0X2lkbGUoSFovMTApOwogCi0JaWYgKGF0dGVtcHRzICZsdDs9IE1BWF9PT01fUkVBUF9SRVRSSUVTIHx8Ci0JICAgIG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBtbSkpCiYjNDM7CWlmICghcmV0IHx8IG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBtbSkpCiAJCWdvdG8gZG9uZTsKIAogCXByX2luZm8oJiMzNDtvb21fcmVhcGVyOiB1bmFibGUgdG8gcmVhcCBwaWQ6JWQgKCVzKVxuJiMzNDssCkBAIC0xMjI3LDYgJiM0MzsxMjU0LDcgQEAgU1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpCiAJaWYgKCFyZWFwKQogCQlnb3RvIGRyb3BfbW07CiAKJiM0MzthZ2FpbjoKIAlpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKSB7CiAJCXJldCA9IC1FSU5UUjsKIAkJZ290byBkcm9wX21tOwpAQCAtMTIzNSw4ICYjNDM7MTI2MywxNSBAQCBTWVNDQUxMX0RFRklORTIocHJvY2Vzc19tcmVsZWFzZSwgaW50LCBwaWRmZCwgdW5zaWduZWQgaW50LCBmbGFncykKIAkgKiBDaGVjayBNTUZfT09NX1NLSVAgYWdhaW4gdW5kZXIgbW1hcF9yZWFkX2xvY2sgcHJvdGVjdGlvbiB0byBlbnN1cmUKIAkgKiBwb3NzaWJsZSBjaGFuZ2UgaW4gZXhpdF9tbWFwIGlzIHNlZW4KIAkgKi8KLQlpZiAoIW1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBtbSkgJmFtcDsmYW1wOyAhX19vb21fcmVhcF90YXNrX21tKG1tKSkKLQkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJaWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKSB7CiYjNDM7CQlyZXQgPSBfX29vbV9yZWFwX3Rhc2tfbW0obW0pOwomIzQzOwkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CS8qIGEgd3JpdGVyIGdvdCB0aGUgbG9jaywgcXVldWUgdXAgYWdhaW4gKi8KJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJCWdvdG8gYWdhaW47CiYjNDM7CQl9CiYjNDM7CQlpZiAocmV0ID09IC1FQlVTWSkKJiM0MzsJCQlyZXQgPSAtRUFHQUlOOwomIzQzOwl9CiAJbW1hcF9yZWFkX3VubG9jayhtbSk7CiAKIGRyb3BfbW06CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyODEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBEZWZpbml0ZWx5IFdvcnRoIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBwYXRjaCBhbmQgcmVxdWlyZW1lbnRzIHNjcmVhbXMsICYjMzQ7ZnV6eiBtZSEmIzM0OyBUaGUgZ2l0IGRpZmYgaW5kaWNhdGVzIHNpZ25pZmljYW50IGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgdGhhdCYjMzk7cyAqYWx3YXlzKiBhIHJlZCBmbGFnIChpbiBhIGdvb2Qgd2F5LCBmb3IgZnV6emluZykuIFdlJiMzOTtyZSBsb29raW5nIGF0IG1vZGlmaWNhdGlvbnMgdG8gYG1tL2ludGVybmFsLmhgLCBgbW0vbWVtb3J5LmNgLCBhbmQgYG1tL29vbV9raWxsLmNgIOKAkyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhpbmdzLgoKU3BlY2lmaWNhbGx5LCBgemFwX3ZtYV9mb3JfcmVhcGluZ2AgaW4gYG1tL21lbW9yeS5jYCBoYXMgYmVlbiB1cGRhdGVkIHdpdGggc3RhcnQgYW5kIGVuZCBwYXJhbWV0ZXJzIHdoaWNoIGFmZmVjdHMgdGhlIG1tdSBub3RpZmllci4gVGhlIGJpZ2dlciBjaGFuZ2UgaXMgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiBgX19vb21fcmVhcF90YXNrX21tYCBpbiBgbW0vb29tX2tpbGwuY2AsIGdvaW5nIGZyb20gYSBib29sZWFuIHRvIGFuIGludGVnZXIuIFRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSB0d2VhazsgaXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBlcnJvciBoYW5kbGluZyBhbmQgY29udHJvbCBmbG93IHdpdGhpbiB0aGUgT09NIHJlYXBlci4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBjaHVua2luZyBWTUEgemFwcGluZyBpbnRvIDFHQiBibG9ja3MgYW5kIGludHJvZHVjaW5nIGEgbG9ja2luZyBjaGVjayB3aXRoIGAtRUFHQUlOYCBpZiB0aGUgbW1hcCBsb2NrIGlzIGNvbnRlbmRlZC4gVGhpcyBpbmNsdWRlcyBwb3RlbnRpYWxseSBoYW5kaW5nIHRoZSBtbWFwIGxvY2sgb2ZmIHRvIGFueSB3cml0ZXJzIHdhaXRpbmcgb24gaXQuCgpUaGUgaW50ZXJlc3RpbmcgcGllY2UgaXMgdGhlIGBwcm9jZXNzX21yZWxlYXNlYCBzeXNjYWxsLCB3aGljaCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgaXQmIzM5O3MgYmVlbiB1cGRhdGVkIHRvIGhhbmRsZSB0aGUgbmV3IHJldHVybiB2YWx1ZXMgZnJvbSBgX19vb21fcmVhcF90YXNrX21tYC4gVGhpcyBtZWFucyB3ZSBoYXZlIGEgZGlyZWN0IHBhdGggZnJvbSB1c2Vyc3BhY2UgdG8gdGhlc2Ugc2Vuc2l0aXZlIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzLiBUaGUgT09NIHJlYXBlciBpdHNlbGYgaXMgYWxzbyBhIGNsZWFyIGVudHJ5IHBvaW50LCBzaW5jZSBpdCBydW5zIGluIHRoZSBrZXJuZWwgd2hlbiBPT00gb2NjdXJzLgoKQ29uc2lkZXJpbmcgdGhlICYjMzQ7Q29yZSBTdWJzeXN0ZW1zJiMzNDsgc2VjdGlvbiBvZiB0aGUgcmVxdWlyZW1lbnRzLCB0aGlzIHBlcmZlY3RseSBmaXRzIHRoZSBiaWxsOiBtZW1vcnkgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHN5c2NhbGwgaGFuZGxpbmcgYXJlIGFsbCBkaXJlY3RseSB0b3VjaGVkLiBgcHJvY2Vzc19tcmVsZWFzZWAgaXMgYSBzeXNjYWxsISBBbmQgdGhlIE9PTSByZWFwZXIgaXMgdHJpZ2dlcmVkIGJ5IE9PTSBldmVudHMuIEl0JiMzOTtzIGEgaGlnaC12YWx1ZSB0YXJnZXQuCgpUbyBjb25maXJtIHRoZSBkZXRhaWxzLCBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGBtbS9vb21fa2lsbC5jYCBhbmQgYG1tL21lbW9yeS5jYCBjb2RlIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgbnVhbmNlIEkgbWlnaHQgaGF2ZSBtaXNzZWQuIEkmIzM5O2xsIHByb2JhYmx5IGJlIHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBkaXZlIGludG8gdGhlIGZ1bmN0aW9ucyBhbmQgc3ltYm9scyBpbnZvbHZlZCBhbmQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLCBidXQgSSBhbSBjb25maWRlbnQgdGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gY29uY2VudHJhdGUgZnV6emluZyByZXNvdXJjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9vb21fa2lsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0XG4xMjExOlx0XHRpZiAoX19yYXRlbGltaXQoXHUwMDI2cGZvb21fcnMpKVxuMTIxMjpcdFx0XHRwcl93YXJuKFwmIzM0O0h1aCBWTV9GQVVMVF9PT00gbGVha2VkIG91dCB0byB0aGUgI1BGIGhhbmRsZXIuIFJldHJ5aW5nIFBGXFxuXCYjMzQ7KTtcbjEyMTM6XHR9XG4xMjE0Olx0XG4xMjE1Olx0U1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpXG4xMjE2Olx0e1xuMTIxNzpcdCNpZmRlZiBDT05GSUdfTU1VXG4xMjE4Olx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IE5VTEw7XG4xMjE5Olx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4xMjIwOlx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7XG4xMjIxOlx0XHR1bnNpZ25lZCBpbnQgZl9mbGFncztcbjEyMjI6XHRcdGJvb2wgcmVhcCA9IGZhbHNlO1xuMTIyMzpcdFx0bG9uZyByZXQgPSAwO1xuMTIyNDpcdFxuMTIyNTpcdFx0aWYgKGZsYWdzKVxuMTIyNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyMjc6XHRcbjEyMjg6XHRcdHRhc2sgPSBwaWRmZF9nZXRfdGFzayhwaWRmZCwgXHUwMDI2Zl9mbGFncyk7XG4xMjI5Olx0XHRpZiAoSVNfRVJSKHRhc2spKVxuMTIzMDpcdFx0XHRyZXR1cm4gUFRSX0VSUih0YXNrKTtcbjEyMzE6XHRcbjEyMzI6XHRcdC8qXG4xMjMzOlx0XHQgKiBNYWtlIHN1cmUgdG8gY2hvb3NlIGEgdGhyZWFkIHdoaWNoIHN0aWxsIGhhcyBhIHJlZmVyZW5jZSB0byBtbVxuMTIzNDpcdFx0ICogZHVyaW5nIHRoZSBncm91cCBleGl0XG4xMjM1Olx0XHQgKi9cbjEyMzY6XHRcdHAgPSBmaW5kX2xvY2tfdGFza19tbSh0YXNrKTtcbjEyMzc6XHRcdGlmICghcCkge1xuMTIzODpcdFx0XHRyZXQgPSAtRVNSQ0g7XG4xMjM5Olx0XHRcdGdvdG8gcHV0X3Rhc2s7XG4xMjQwOlx0XHR9XG4xMjQxOlx0XG4xMjQyOlx0XHRtbSA9IHAtXHUwMDNlbW07XG4xMjQzOlx0XHRtbWdyYWIobW0pO1xuMTI0NDpcdFxuMTI0NTpcdFx0aWYgKHRhc2tfd2lsbF9mcmVlX21lbShwKSlcbjEyNDY6XHRcdFx0cmVhcCA9IHRydWU7XG4xMjQ3Olx0XHRlbHNlIHtcbjEyNDg6XHRcdFx0LyogRXJyb3Igb25seSBpZiB0aGUgd29yayBoYXMgbm90IGJlZW4gZG9uZSBhbHJlYWR5ICovXG4xMjQ5Olx0XHRcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSlcbjEyNTA6XHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuMTI1MTpcdFx0fVxuMTI1MjpcdFx0dGFza191bmxvY2socCk7XG4xMjUzOlx0XG4xMjU0Olx0XHRpZiAoIXJlYXApXG4xMjU1Olx0XHRcdGdvdG8gZHJvcF9tbTtcbjEyNTY6XHRcbjEyNTc6XHRhZ2FpbjpcbjEyNTg6XHRcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpIHtcbjEyNTk6XHRcdFx0cmV0ID0gLUVJTlRSO1xuMTI2MDpcdFx0XHRnb3RvIGRyb3BfbW07XG4xMjYxOlx0XHR9XG4xMjYyOlx0XHQvKlxuMTI2MzpcdFx0ICogQ2hlY2sgTU1GX09PTV9TS0lQIGFnYWluIHVuZGVyIG1tYXBfcmVhZF9sb2NrIHByb3RlY3Rpb24gdG8gZW5zdXJlXG4xMjY0Olx0XHQgKiBwb3NzaWJsZSBjaGFuZ2UgaW4gZXhpdF9tbWFwIGlzIHNlZW5cbjEyNjU6XHRcdCAqL1xuMTI2NjpcdFx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKSB7XG4xMjY3Olx0XHRcdHJldCA9IF9fb29tX3JlYXBfdGFza19tbShtbSk7XG4xMjY4Olx0XHRcdGlmIChyZXQgPT0gLUVBR0FJTikge1x0LyogYSB3cml0ZXIgZ290IHRoZSBsb2NrLCBxdWV1ZSB1cCBhZ2FpbiAqL1xuMTI2OTpcdFx0XHRcdHJldCA9IDA7XG4xMjcwOlx0XHRcdFx0Z290byBhZ2FpbjtcbjEyNzE6XHRcdFx0fVxuMTI3MjpcdFx0XHRpZiAocmV0ID09IC1FQlVTWSlcbjEyNzM6XHRcdFx0XHRyZXQgPSAtRUFHQUlOO1xuMTI3NDpcdFx0fVxuMTI3NTpcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4xMjc2Olx0XG4xMjc3Olx0ZHJvcF9tbTpcbjEyNzg6XHRcdG1tZHJvcChtbSk7XG4xMjc5Olx0cHV0X3Rhc2s6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIGEgTWVtb3J5IFJlbGVhc2UgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBwcm9jZXNzX21yZWxlYXNlYC4gVGhlIGZpcnN0IHRoaW5nIEkgc2hvdWxkIGRvIGlzIGVzdGFibGlzaCBpdHMgb3JpZ2luIOKAkyBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBtbS9vb21fa2lsbC5jYC4gR29vZCwgdGhhdCBuYXJyb3dzIG15IGZvY3VzLiBOb3csIEkgc3VzcGVjdCB0aGF0IHJlbGF0ZWQgZnVuY3Rpb25zIG9yIGNvbnRleHRzIGFyZSBkZWZpbmVkIG5lYXJieS4gU28sIGxldCBtZSBqdW1wIG92ZXIgdG8gYG1tL21lbW9yeS5jYC4gSSYjMzk7bGwgc3RhcnQgbG9va2luZyBhcm91bmQgbGluZSAyMjAwIGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIGFuZCBwb3RlbnRpYWxseSByZXZlYWwgaG93IGBwcm9jZXNzX21yZWxlYXNlYCBpbnRlcmFjdHMgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gYXNzZXNzIHRoZSBmdW5jdGlvbiYjMzk7cyBvdmVyYWxsIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMDU6XHRcdFx0dGxiX2VuZF92bWEodGxiLCB2bWEpO1xuMjIwNjpcdFx0fVxuMjIwNzpcdH1cbjIyMDg6XHRcbjIyMDk6XHQvKipcbjIyMTA6XHQgKiB6YXBfdm1hX2Zvcl9yZWFwaW5nIC0gemFwIGEgcmFuZ2Ugb2YgdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nXG4yMjExOlx0ICogQHZtYTogVGhlIHZtYSB0byB6YXAuXG4yMjEyOlx0ICogQHN0YXJ0OiBUaGUgZmlyc3QgYWRkcmVzcyB0byB6YXAuXG4yMjEzOlx0ICogQGVuZDogT25lIHBhc3QgdGhlIGxhc3QgYWRkcmVzcyB0byB6YXAuXG4yMjE0Olx0ICpcbjIyMTU6XHQgKiBaYXAgdGhlIHBhZ2UgdGFibGUgZW50cmllcyBpbiBbQHN0YXJ0LCBAZW5kKSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmdcbjIyMTY6XHQgKiBmb3IgdXNlIGJ5IHRoZSBvb20ga2lsbGVyLiBIdWdldGxiIHZtYXMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4yMjE3Olx0ICpcbjIyMTg6XHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiB3ZSB3b3VsZCBoYXZlIHRvIGJsb2NrLlxuMjIxOTpcdCAqL1xuMjIyMDpcdGludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuMjIyMTpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kKVxuMjIyMjpcdHtcbjIyMjM6XHRcdHN0cnVjdCB6YXBfZGV0YWlscyBkZXRhaWxzID0ge1xuMjIyNDpcdFx0XHQucmVhcGluZyA9IHRydWUsXG4yMjI1Olx0XHR9O1xuMjIyNjpcdFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbjIyMjc6XHRcdHN0cnVjdCBtbXVfZ2F0aGVyIHRsYjtcbjIyMjg6XHRcbjIyMjk6XHRcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXHUwMDNldm1fbW0sXG4yMjMwOlx0XHRcdFx0XHRzdGFydCwgZW5kKTtcbjIyMzE6XHRcdHRsYl9nYXRoZXJfbW11KFx1MDAyNnRsYiwgdm1hLVx1MDAzZXZtX21tKTtcbjIyMzI6XHRcdGlmIChtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9ub25ibG9jayhcdTAwMjZyYW5nZSkpIHtcbjIyMzM6XHRcdFx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbjIyMzQ6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjIyMzU6XHRcdH1cbjIyMzY6XHRcdF9femFwX3ZtYV9yYW5nZShcdTAwMjZ0bGIsIHZtYSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCwgXHUwMDI2ZGV0YWlscyk7XG4yMjM3Olx0XHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXHUwMDI2cmFuZ2UpO1xuMjIzODpcdFx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbjIyMzk6XHRcdHJldHVybiAwO1xuMjI0MDpcdH1cbjIyNDE6XHRcbjIyNDI6XHQvKipcbjIyNDM6XHQgKiB1bm1hcF92bWFzIC0gdW5tYXAgYSByYW5nZSBvZiBtZW1vcnkgY292ZXJlZCBieSBhIGxpc3Qgb2Ygdm1hJiMzOTtzXG4yMjQ0Olx0ICogQHRsYjogYWRkcmVzcyBvZiB0aGUgY2FsbGVyJiMzOTtzIHN0cnVjdCBtbXVfZ2F0aGVyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIE9PTSBLaWxsZXImIzM5O3MgTWVtb3J5IFJlY2xhbWF0aW9uIExvZ2ljKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIE9PTSBraWxsZXIuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBtZW1vcnkgaXMgcmVjbGFpbWVkIHdoZW4gdGhpbmdzIGdvIHNvdXRoIGFuZCBhIHRhc2sgaXMgdGFyZ2V0ZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgbW0vb29tX2tpbGwuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSBjb2RlIGFyb3VuZCB0aGUgYG9vbV9yZWFwX3Rhc2tfbW1gIGFuZCB0aGUgYF9fb29tX3JlYXBfdGFza19tbWAgZnVuY3Rpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0aGVzZSBhcmUga2V5IGFyZWFzIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNsZWFudXAgcmVsYXRlZCB0byB0aGUgdmljdGltIHRhc2smIzM5O3MgbWVtb3J5IHNwYWNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIGluIGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIGRpZmZlcmVudCBtZW1vcnkgbWFuYWdlbWVudCBzY2VuYXJpb3MuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL29vbV9raWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdCAqL1xuIDUwMTpcdHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9vbV9yZWFwZXJfdGg7XG4gNTAyOlx0c3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG9vbV9yZWFwZXJfd2FpdCk7XG4gNTAzOlx0c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb29tX3JlYXBlcl9saXN0O1xuIDUwNDpcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob29tX3JlYXBlcl9sb2NrKTtcbiA1MDU6XHRcbiA1MDY6XHQvKlxuIDUwNzpcdCAqIENhbGxlZCB3aXRoIG1tYXBfbG9jayBoZWxkIGZvciByZWFkLiAgUmV0dXJucyB3aXRoIGl0IHN0aWxsIGhlbGQgb24gMFxuIDUwODpcdCAqIChkb25lKSBvciAtRUJVU1kgKHBhcnQgY291bGQgbm90IGJlIHJlYXBlZCwgdHJ5IGFnYWluIGxhdGVyKSwgYW5kIGRyb3BzXG4gNTA5Olx0ICogaXQgb25seSBvbiAtRUFHQUlOLCB3aGVuIGl0IHdhcyBoYW5kZWQgb3ZlciB0byBhIHF1ZXVlZCB3cml0ZXIgYW5kIHRoZVxuIDUxMDpcdCAqIGNhbGxlciBzaG91bGQgcmV0YWtlIGl0IGFuZCBzdGFydCBvdmVyLlxuIDUxMTpcdCAqL1xuIDUxMjpcdHN0YXRpYyBpbnQgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIDUxMzpcdHtcbiA1MTQ6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIDUxNTpcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBlbmQ7XG4gNTE2Olx0XHRpbnQgcmV0ID0gMDtcbiA1MTc6XHRcdE1BX1NUQVRFKG1hcywgXHUwMDI2bW0tXHUwMDNlbW1fbXQsIFVMT05HX01BWCwgVUxPTkdfTUFYKTtcbiA1MTg6XHRcbiA1MTk6XHRcdC8qXG4gNTIwOlx0XHQgKiBUZWxsIGFsbCB1c2VycyBvZiBnZXRfdXNlci9jb3B5X2Zyb21fdXNlciBldGMuLi4gdGhhdCB0aGUgY29udGVudFxuIDUyMTpcdFx0ICogaXMgbm8gbG9uZ2VyIHN0YWJsZS4gTm8gYmFycmllcnMgcmVhbGx5IG5lZWRlZCBiZWNhdXNlIHVubWFwcGluZ1xuIDUyMjpcdFx0ICogc2hvdWxkIGltcGx5IGJhcnJpZXJzIGFscmVhZHkgYW5kIHRoZSByZWFkZXIgd291bGQgaGl0IGEgcGFnZSBmYXVsdFxuIDUyMzpcdFx0ICogaWYgaXQgc3R1bWJsZWQgb3ZlciBhIHJlYXBlZCBtZW1vcnkuXG4gNTI0Olx0XHQgKi9cbiA1MjU6XHRcdG1tX2ZsYWdzX3NldChNTUZfVU5TVEFCTEUsIG1tKTtcbiA1MjY6XHRcbiA1Mjc6XHRcdC8qXG4gNTI4Olx0XHQgKiBJdCBtaWdodCBzdGFydCByYWNpbmcgd2l0aCB0aGUgZHlpbmcgdGFzayBhbmQgY29tcGV0ZSBmb3Igc2hhcmVkXG4gNTI5Olx0XHQgKiByZXNvdXJjZXMgLSBlLmcuIHBhZ2UgdGFibGUgbG9jayBjb250ZW50aW9uIGhhcyBiZWVuIG9ic2VydmVkLlxuIDUzMDpcdFx0ICogUmVkdWNlIHRob3NlIHJhY2VzIGJ5IHJlYXBpbmcgdGhlIG9vbSB2aWN0aW0gZnJvbSB0aGUgb3RoZXIgZW5kXG4gNTMxOlx0XHQgKiBvZiB0aGUgYWRkcmVzcyBzcGFjZS5cbiA1MzI6XHRcdCAqL1xuIDUzMzpcdFx0bWFzX2Zvcl9lYWNoX3JldihcdTAwMjZtYXMsIHZtYSwgMCkge1xuIDUzNDpcdFx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fSFVHRVRMQnxWTV9QRk5NQVApKVxuIDUzNTpcdFx0XHRcdGNvbnRpbnVlO1xuIDUzNjpcdFxuIDUzNzpcdFx0XHQvKlxuIDUzODpcdFx0XHQgKiBPbmx5IGFub255bW91cyBwYWdlcyBoYXZlIGEgZ29vZCBjaGFuY2UgdG8gYmUgZHJvcHBlZFxuIDUzOTpcdFx0XHQgKiB3aXRob3V0IGFkZGl0aW9uYWwgc3RlcHMgd2hpY2ggd2UgY2Fubm90IGFmZm9yZCBhcyB3ZVxuIDU0MDpcdFx0XHQgKiBhcmUgT09NIGFscmVhZHkuXG4gNTQxOlx0XHRcdCAqXG4gNTQyOlx0XHRcdCAqIFdlIGRvIG5vdCBldmVuIGNhcmUgYWJvdXQgZnMgYmFja2VkIHBhZ2VzIGJlY2F1c2UgYWxsXG4gNTQzOlx0XHRcdCAqIHdoaWNoIGFyZSByZWNsYWltYWJsZSBoYXZlIGFscmVhZHkgYmVlbiByZWNsYWltZWQgYW5kXG4gNTQ0Olx0XHRcdCAqIHdlIGRvIG5vdCB3YW50IHRvIGJsb2NrIGV4aXRfbW1hcCBieSBrZWVwaW5nIG1tIHJlZlxuIDU0NTpcdFx0XHQgKiBjb3VudCBlbGV2YXRlZCB3aXRob3V0IGEgZ29vZCByZWFzb24uXG4gNTQ2Olx0XHRcdCAqL1xuIDU0NzpcdFx0XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKSB7XG4gNTQ4Olx0XHRcdFx0LypcbiA1NDk6XHRcdFx0XHQgKiBaYXAgaW4gMUcgY2h1bmtzIGFuZCBoYW5kIG1tYXBfbG9jayBvdmVyIHdoZW5ldmVyIGFcbiA1NTA6XHRcdFx0XHQgKiB3cml0ZXIgaXMgcXVldWVkIG9uIGl0LCBzbyBpdCBkb2VzIG5vdCB3YWl0IGZvciB0aGVcbiA1NTE6XHRcdFx0XHQgKiB3aG9sZSByZWFwLlxuIDU1MjpcdFx0XHRcdCAqL1xuIDU1MzpcdFx0XHRcdGVuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4gNTU0Olx0XHRcdFx0d2hpbGUgKGVuZCBcdTAwM2Ugdm1hLVx1MDAzZXZtX3N0YXJ0KSB7XG4gNTU1Olx0XHRcdFx0XHRhZGRyID0gbWF4KHZtYS1cdTAwM2V2bV9zdGFydCwgQUxJR05fRE9XTihlbmQgLSAxLCBTWl8xRykpO1xuIDU1NjpcdFx0XHRcdFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hLCBhZGRyLCBlbmQpKSB7XG4gNTU3Olx0XHRcdFx0XHRcdHJldCA9IC1FQlVTWTtcbiA1NTg6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNTU5Olx0XHRcdFx0XHR9XG4gNTYwOlx0XHRcdFx0XHRlbmQgPSBhZGRyO1xuIDU2MTpcdFx0XHRcdFx0aWYgKCFtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKSlcbiA1NjI6XHRcdFx0XHRcdFx0Y29udGludWU7XG4gNTYzOlx0XG4gNTY0Olx0XHRcdFx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiA1NjU6XHRcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIDU2NjpcdFx0XHRcdH1cbiA1Njc6XHRcdFx0fVxuIDU2ODpcdFx0fVxuIDU2OTpcdFxuIDU3MDpcdFx0cmV0dXJuIHJldDtcbiA1NzE6XHR9XG4gNTcyOlx0XG4gNTczOlx0LypcbiA1NzQ6XHQgKiBSZWFwcyB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgZ2l2ZW4gdGFzay5cbiA1NzU6XHQgKlxuIDU3NjpcdCAqIFJldHVybnMgMCB3aGVuIGRvbmUsIC1FQUdBSU4gaWYgbW1hcF9sb2NrIHdhcyBoYW5kZWQgb3ZlciB0byBhIHdyaXRlclxuIDU3NzpcdCAqIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBzdGFydCBvdmVyLCBhbmQgLUVCVVNZIGlmIG5vbmUgb3IgcGFydCBvZiB0aGVcbiA1Nzg6XHQgKiBhZGRyZXNzIHNwYWNlIGhhcyBiZWVuIHJlY2xhaW1lZCBhbmQgdGhlIGNhbGxlciBzaG91bGQgcmV0cnkgbGF0ZXIuXG4gNTc5Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg1MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4KCioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBpbiBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBpbiB0aGlzIHNlY3Rpb24gb2YgY29kZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGBDT05GSUdfYCBmbGFncyB0aGF0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgdGhlIE9PTSBraWxsZXIgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbW0vb29tX2tpbGwuY2AgZmlsZS4gSSByZW1lbWJlciBzZWVpbmcgYSBwb3RlbnRpYWwgZGVwZW5kZW5jeSBvbiBgQ09ORklHX01NVWAgaW4gYHByb2Nlc3NfbXJlbGVhc2VgLCB3aXRoIHRoZSB1c2Ugb2YgYCNpZmRlZmAuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBrbm93IGlmIGBvb21fcmVhcGVyYCBkZXBlbmRzIG9uIGFueXRoaW5nLiBUbyBkbyB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgaW4gdGhlIGZpbGUsIG1heWJlIDUwMCBsaW5lcyBvciBzbywgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoZSBkZWZpbml0aW9uLiBJZiB0aGF0JiMzOTtzIG5vdCBmcnVpdGZ1bCwgSSYjMzk7bGwgaGF2ZSB0byBkbyBhIG1vcmUgZ2VuZXJhbCBzZWFyY2ggZm9yIGBDT05GSUdfYCB3aXRoaW4gYG1tL29vbV9raWxsLmNgIHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL29vbV9raWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vb29tX2tpbGwuYz03Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbWVtY2dfb29tKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4tLVxubW0vb29tX2tpbGwuYy03Ni1cbm1tL29vbV9raWxsLmM6Nzc6I2lmZGVmIENPTkZJR19OVU1BXG5tbS9vb21fa2lsbC5jLTc4LS8qKlxuLS1cbm1tL29vbV9raWxsLmM9MTIyPXN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4tLVxubW0vb29tX2tpbGwuYy0xMjUtfVxubW0vb29tX2tpbGwuYzoxMjY6I2VuZGlmIC8qIENPTkZJR19OVU1BICovXG5tbS9vb21fa2lsbC5jLTEyNy1cbi0tXG5tbS9vb21fa2lsbC5jPTI0OT1zdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxuLS1cbm1tL29vbV9raWxsLmMtMjY0LVxubW0vb29tX2tpbGwuYzoyNjU6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxubW0vb29tX2tpbGwuYy0yNjYtXHRcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XG4tLVxubW0vb29tX2tpbGwuYz00NDk9c3RhdGljIHZvaWQgZHVtcF9oZWFkZXIoc3RydWN0IG9vbV9jb250cm9sICpvYylcbi0tXG5tbS9vb21fa2lsbC5jLTQ1My1cdFx0XHRjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2Vvb21fc2NvcmVfYWRqKTtcbm1tL29vbV9raWxsLmM6NDU0Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSBcdTAwMjZcdTAwMjYgb2MtXHUwMDNlb3JkZXIpXG5tbS9vb21fa2lsbC5jLTQ1NS1cdFx0cHJfd2FybihcJiMzNDtDT01QQUNUSU9OIGlzIGRpc2FibGVkISEhXFxuXCYjMzQ7KTtcbi0tXG5tbS9vb21fa2lsbC5jPTQ4ND1ib29sIHByb2Nlc3Nfc2hhcmVzX21tKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vb29tX2tpbGwuYy00OTUtXG5tbS9vb21fa2lsbC5jOjQ5NjojaWZkZWYgQ09ORklHX01NVVxubW0vb29tX2tpbGwuYy00OTctLypcbi0tXG5tbS9vb21fa2lsbC5jPTcwNj1zdGF0aWMgdm9pZCBxdWV1ZV9vb21fcmVhcGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbm1tL29vbV9raWxsLmMtNzE3LVxubW0vb29tX2tpbGwuYzo3MTg6I2lmZGVmIENPTkZJR19TWVNDVExcbm1tL29vbV9raWxsLmMtNzE5LXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZtX29vbV9raWxsX3RhYmxlW10gPSB7XG4tLVxubW0vb29tX2tpbGwuYz03NDY9c3RhdGljIGludCBfX2luaXQgb29tX2luaXQodm9pZClcbi0tXG5tbS9vb21fa2lsbC5jLTc0OC1cdG9vbV9yZWFwZXJfdGggPSBrdGhyZWFkX3J1bihvb21fcmVhcGVyLCBOVUxMLCBcJiMzNDtvb21fcmVhcGVyXCYjMzQ7KTtcbm1tL29vbV9raWxsLmM6NzQ5OiNpZmRlZiBDT05GSUdfU1lTQ1RMXG5tbS9vb21fa2lsbC5jLTc1MC1cdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFwmIzM0O3ZtXCYjMzQ7LCB2bV9vb21fa2lsbF90YWJsZSk7XG4tLVxubW0vb29tX2tpbGwuYz03NTY9c3RhdGljIGlubGluZSB2b2lkIHF1ZXVlX29vbV9yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxubW0vb29tX2tpbGwuYy03NTgtfVxubW0vb29tX2tpbGwuYzo3NTk6I2VuZGlmIC8qIENPTkZJR19NTVUgKi9cbm1tL29vbV9raWxsLmMtNzYwLVxuLS1cbm1tL29vbV9raWxsLmM9MTIxNT1TWVNDQUxMX0RFRklORTIocHJvY2Vzc19tcmVsZWFzZSwgaW50LCBwaWRmZCwgdW5zaWduZWQgaW50LCBmbGFncylcbm1tL29vbV9raWxsLmMtMTIxNi17XG5tbS9vb21fa2lsbC5jOjEyMTc6I2lmZGVmIENPTkZJR19NTVVcbm1tL29vbV9raWxsLmMtMTIxOC1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDtcbi0tXG5tbS9vb21fa2lsbC5jLTEyODMtXHRyZXR1cm4gLUVOT1NZUztcbm1tL29vbV9raWxsLmM6MTI4NDojZW5kaWYgLyogQ09ORklHX01NVSAqL1xubW0vb29tX2tpbGwuYy0xMjg1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwOTYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1NVSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfTU1VYCBpcyBwcmV0dHkgbXVjaCBhIGdpdmVuIG9uIGFtZDY0LCByaWdodD8gSXQmIzM5O3MgdGhlIGRlZmF1bHQsIGl0JiMzOTtzIGV4cGVjdGVkLiBCdXQgSSYjMzk7bSBmZWVsaW5nIGEgbGl0dGxlIHBhcmFub2lkIHRvZGF5LiBJcyB0aGVyZSAqYWN0dWFsbHkqIGFueSBzY2VuYXJpbyB3aGVyZSBpdCYjMzk7cyAqbm90KiBlbmFibGVkLCBvciBhIHJlbGF0ZWQgY29uZmlndXJhdGlvbiB0aGF0JiMzOTtzIHN1YnRseSBkaWZmZXJlbnQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgpMZXQmIzM5O3MgZGl2ZSBpbiBhbmQgY29uZmlybS4gSSYjMzk7bSBnb2luZyB0byBjaGVjayBob3cgYHByb2Nlc3NfbXJlbGVhc2VgIGlzIGhhbmRsZWQuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBib3RoIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIHRoZSByZWxldmFudCBgTWFrZWZpbGVgIGVudHJpZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB0aGUgcmVsZWFzZSBvZiBtZW1vcnkgcmVzb3VyY2VzLiBEaWdnaW5nIGludG8gdGhvc2UgZmlsZXMgaXMgdGhlIGtleSB0byBmdWxseSB1bmRlcnN0YW5kaW5nIHRoZSBNTVUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgaW4gdGhpcyBwYXJ0aWN1bGFyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvY2Vzc19tcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzU2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGFuIGV4cGVydCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGllZCBjb250ZXh0OgoKKipEaXZpbmcgaW50byB0aGUgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gaXMgY3J5c3RhbCBjbGVhcjogJiMzNDtMZXQmIzM5O3MgY2hlY2sgYG1tL01ha2VmaWxlYC4mIzM0OyBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHNvbWV0aGluZyB3aXRoaW4gdGhlIGBtbWAgZGlyZWN0b3J5JiMzOTtzIE1ha2VmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZywgZGVidWdnaW5nLCBvciBtb2RpZnlpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGNvbXBvbmVudC4gVGhpcyBwcm9iYWJseSBpc24mIzM5O3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSYjMzk7bSBsaWtlbHkgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBidWlsZCB0YXJnZXRzLCBjb21waWxlciBmbGFncywgYW5kIHRoZSBvdmVyYWxsIHN0cnVjdHVyZS4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgaXNzdWVzLCBib3R0bGVuZWNrcywgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBmaWxlbmFtZTsgaXQgc2NyZWFtcyAmIzM0O21lbW9yeSBtYW5hZ2VtZW50JiMzNDsgb3IgcGVyaGFwcyBzb21lIHNvcnQgb2YgJiMzNDttb2R1bGUmIzM0OyB0aGF0JiMzOTtzIGNyaXRpY2FsIHRvIG1lbW9yeSBvcGVyYXRpb25zLCBzbyB0aGF0IGNvbnRleHQgZ3VpZGVzIG15IGluaXRpYWwgc2VhcmNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b29tX2tpbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT00OT1lbmRpZlxubW0vTWFrZWZpbGUtNTAtXG5tbS9NYWtlZmlsZTo1MTpvYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbm1tL01ha2VmaWxlLTUyLVx0XHRcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjcyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE9PTSBSZWFwZXIgU3ltYm9sIFZpc2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgT09NIHJlYXBlciYjMzk7cyBzeW1ib2xzIGFyZSBoYW5kbGVkIGluIHRoZSBrZXJuZWwgYnVpbGQuIGBvb21fa2lsbC5vYCBpcyBhbHdheXMgYnVpbHQsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIChgb2JqLXlgKS4gSW5zaWRlIGBtbS9vb21fa2lsbC5jYCwgdGhlIE1NVSBpcyB0aGUga2V5IGVuYWJsZXIgZm9yIHRoZSByZWFwZXIgYW5kIGBwcm9jZXNzX21yZWxlYXNlYC4gT24gYW1kNjQsIHRoZSBNTVUgaXMgKmFsd2F5cyogZW5hYmxlZCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIEFsdGhvdWdoIGl0JiMzOTtzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiAoYENPTkZJR19NTVU9eWApLCBpdCBzdGlsbCBmZWVscyBsaWtlIGl0JiMzOTtzIHdvcnRoIGV4cGxpY2l0bHkgaW5jbHVkaW5nICYjMzQ7TU1VJiMzNDsgaW4gb3VyIGNvbmZpZ3VyYXRpb24gY29uc2lkZXJhdGlvbnMsIGl0IGFkZHMgY2xhcml0eS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBiZXlvbmQgdGhlIE1NVS4gYENPTkZJR19QSURGRGAgaXNuJiMzOTt0IGEgZmFjdG9yIGhlcmUsIGFzIGl0JiMzOTtzIGEgY29yZSBrZXJuZWwgZmVhdHVyZS4KClRvIGNvbmZpcm0gdGhlIE1NVSBzaXR1YXRpb24sIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgYGluaXQvS2NvbmZpZ2AgYW5kIGBhcmNoL3g4Ni9LY29uZmlnYCB0byBiZSBzdXJlLiBZZXAsIE1NVSBpcyBkZWZpbml0ZWx5IHN0YW5kYXJkLiBJIHRoaW5rIGluY2x1ZGluZyAmIzM0O01NVSYjMzQ7IGluIGBFbmFibGVDb25maWdzYCBpcyB0aGUgYmVzdCBhcHByb2FjaDsgaXQmIzM5O3Mgc2FmZSBhbmQgYWNjdXJhdGUsIGV2ZW4gaWYgaXQmIzM5O3MgYWx3YXlzICYjMzk7eSYjMzk7LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgRm9jdXNTeW1ib2xzYCB0byBzZWUgd2hhdCBjaGFuZ2VkLiBGaXJzdCwgSSBzZWUgYHphcF92bWFfZm9yX3JlYXBpbmdgIGluIGBtbS9tZW1vcnkuY2AuIFRoaXMgaXNuJiMzOTt0IHViaXF1aXRvdXMsIGFuZCBpdCYjMzk7cyBiZWVuIGRpcmVjdGx5IG1vZGlmaWVkLCBzbyBpdCYjMzk7cyBhIHByaW1lIGNhbmRpZGF0ZS4gTGV0JiMzOTtzIGRpZyBkZWVwZXI6IHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpcyBgaW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKWAuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBpcyBpdCBzdGF0aWMsIGV4cG9ydGVkLCBvciBmaWxlLXNjb3BlPyBOb3BlLCBpdCYjMzk7cyBub3Qgc3RhdGljOyBpdCYjMzk7cyBkZWNsYXJlZCBpbiBgbW0vaW50ZXJuYWwuaGAgYXMgYGludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKC4uLilgLiBTbywgYHphcF92bWFfZm9yX3JlYXBpbmdgICp3aWxsKiBiZSBhIHN5bWJvbCBpbiBgdm1saW51eGAuCgpOZXh0LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBzeW1ib2xzIGluIGBtbS9vb21fa2lsbC5jYC4gSSBzZWUgYF9fb29tX3JlYXBfdGFza19tbWAsIGBvb21fcmVhcF90YXNrX21tYCwgYW5kIGBvb21fcmVhcF90YXNrYC4gVGhvc2UgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLCBzbyB0aGV5IHdvbiYjMzk7dCBiZSB2aXNpYmxlIG91dHNpZGUgdGhlIGZpbGUuIEhvd2V2ZXIsIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCAvIGBwcm9jZXNzX21yZWxlYXNlYCBhcmUgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgYFNZU0NBTExfREVGSU5FMihwcm9jZXNzX21yZWxlYXNlLCAuLi4pYCBkZWZpbmVzIHRoZSBzeXNjYWxsIHZhcmlhbnRzOiBgX19zZV9zeXNfcHJvY2Vzc19tcmVsZWFzZWAsIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCwgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCBhbmQgYHByb2Nlc3NfbXJlbGVhc2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvZiB0aG9zZSB0aGUgc3l6a2FsbGVyIHN5bWJvbCBmaWx0ZXJzIHVzZSwgYmVjYXVzZSBzeXprYWxsZXImIzM5O3MgdXN1YWxseSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgIG9yIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCBvciBwbGFpbiBgcHJvY2Vzc19tcmVsZWFzZWAuIEkmIzM5O2xsIGNyb3NzLXJlZmVyZW5jZSB3aXRoIGhvdyBzeXprYWxsZXIgaGFuZGxlcyBzeXNjYWxscywgb3IgY2hlY2sgd2hhdCBleGlzdHMgaW4gYG9vbV9raWxsLmNgLiBBIHF1aWNrIGdyZXAgb2YgdGhlIGNvZGViYXNlIGZvciBgcHJvY2Vzc19tcmVsZWFzZWAgc2hvdWxkIGNsZWFyIHRoaW5ncyB1cCBhbmQgY29uZmlybSB3aGF0IGV4YWN0bHkgaXMgZXhwb3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvY2Vzc19tcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9vb21fa2lsbC5jPTEyMDA9dm9pZCBwYWdlZmF1bHRfb3V0X29mX21lbW9yeSh2b2lkKVxuLS1cbm1tL29vbV9raWxsLmMtMTIxNC1cbm1tL29vbV9raWxsLmM6MTIxNTpTWVNDQUxMX0RFRklORTIocHJvY2Vzc19tcmVsZWFzZSwgaW50LCBwaWRmZCwgdW5zaWduZWQgaW50LCBmbGFncylcbm1tL29vbV9raWxsLmMtMTIxNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDY4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBKdXN0aWZpY2F0aW9uIGZvciBPT00gUmVhcGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGludmVzdGlnYXRpbmcgaG93IHRoZSBgU1lTQ0FMTF9ERUZJTkVgIG1hY3JvIHdvcmtzIG9uIHg4Nl82NCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoZSBgcHJvY2Vzc19tcmVsZWFzZWAgc3lzdGVtIGNhbGwgaXMgaW1wbGVtZW50ZWQuIEkmIzM5O20gc2VlaW5nIGZ1bmN0aW9ucyBsaWtlIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCBhbmQgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCBhcmUgZ2VuZXJhdGVkLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHN5bWJvbHMgYXJlICphY3R1YWxseSogYmVpbmcgY2hhbmdlZCB3aXRoaW4gYG1tL29vbV9raWxsLmNgLiBJJiMzOTt2ZSBpZGVudGlmaWVkIGEgZmV3IGtleSBvbmVzOiBgemFwX3ZtYV9mb3JfcmVhcGluZ2AsIGBfX29vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza19tbWAsIGBvb21fcmVhcF90YXNrYCwgYW5kIHRob3NlIGBwcm9jZXNzX21yZWxlYXNlYCBzeXN0ZW0gY2FsbCBoYW5kbGVycy4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3c6IGFyZSB0aGVzZSBmdW5jdGlvbnMgKnViaXF1aXRvdXMqPyBJZiB0aGV5JiMzOTtyZSBjYWxsZWQgZXZlcnl3aGVyZSwgdGhleSYjMzk7cmUgbm9pc2UsIGFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcyBpbiBTZWN0aW9uIDQuIFdlIHdhbnQgdG8gaWRlbnRpZnkgdGhlIGNvcmUgY2hhbmdlcywgbm90IGZsb29kIHRoZSBmdXp6ZXIgd2l0aCBpcnJlbGV2YW50IGluZm9ybWF0aW9uLiBTZWN0aW9uIDQgY2xlYXJseSBzdGF0ZXMgdGhhdCAmIzM0O3ViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyYjMzQ7IHNob3VsZCBiZSBhdm9pZGVkLiBXZSBuZWVkICYjMzQ7VEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTJiMzNDsuCgpMZXQmIzM5O3MgbG9vayBhdCBgemFwX3ZtYV9mb3JfcmVhcGluZ2AuIEl0JiMzOTtzIG9ubHkgY2FsbGVkIGJ5IGBfX29vbV9yZWFwX3Rhc2tfbW1gLiBJdCYjMzk7cyBub3QgYSBnZW5lcmljIGZ1bmN0aW9uIGxpa2UgYGtmcmVlYCBvciBgZXhpdF9tbWFwYC4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgZm9yICpyZWFwaW5nKi4gVGhlbiBgX19vb21fcmVhcF90YXNrX21tYCBpcyBjYWxsZWQgb25seSBkdXJpbmcgT09NIHJlYXBpbmcgb3IgYHByb2Nlc3NfbXJlbGVhc2VgLCBhbmQgYG9vbV9yZWFwX3Rhc2tfbW1gIGlzIG9ubHkgY2FsbGVkIGJ5IGBvb21fcmVhcF90YXNrYC4gYG9vbV9yZWFwX3Rhc2tgIGlzIGl0c2VsZiBjYWxsZWQgYnkgdGhlIE9PTSByZWFwZXIga3RocmVhZC4gRmluYWxseSwgd2UgaGF2ZSB0aGUgc3lzdGVtIGNhbGwgZW50cnlwb2ludHMsIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCBhbmQgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCwgd2hpY2ggYXJlIHRoZSBhY2Nlc3MgcG9pbnRzIGZvciB0aGUgYHByb2Nlc3NfbXJlbGVhc2VgIHN5c2NhbGwuCgpTbywgYXJlIHRoZXNlIHViaXF1aXRvdXM/IEFic29sdXRlbHkgbm90ISBUaGVzZSBmdW5jdGlvbnMgYXJlIGhpZ2hseSBzcGVjaWFsaXplZCBmb3IgT09NIHJlYXBpbmcgYW5kIHRoZSBgcHJvY2Vzc19tcmVsZWFzZWAgbWVjaGFuaXNtLiBUaGV5JiMzOTtyZSByYXJlbHkgaW52b2tlZCB1bmxlc3MgdGhlcmUmIzM5O3MgYW4gT09NIHNpdHVhdGlvbiBvciBgcHJvY2Vzc19tcmVsZWFzZWAgaXMgZXhwbGljaXRseSBjYWxsZWQuIFRoaXMgaXMgKnBlcmZlY3QqLiBUaGlzIG1ha2VzIHRoZW0gaWRlYWwgY2FuZGlkYXRlcyBmb3Igd2hhdCB3ZSBjYWxsICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDssIGFzIHRoZXkgYXJlIGhpZ2hseSBzcGVjaWZpYyB0byB0aGUgYmVoYXZpb3Igd2UmIzM5O3JlIHRhcmdldGluZy4KCk5vdywganVzdCB0byBiZSBwcmVjaXNlLCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IHN5bWJvbCBuYW1lcyBnZW5lcmF0ZWQgYnkgdGhlIGBTWVNDQUxMX0RFRklORWAgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvc3lzY2FsbHMuaGAuIFdlIHdhbnQgbm8gYW1iaWd1aXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgU1lTQ0FMTF9ERUZJTkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTIxMT1zdGF0aWMgaW5saW5lIGludCBpc19zeXNjYWxsX3RyYWNlX2V2ZW50KHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICp0cF9ldmVudClcbi0tXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMjE3LSNpZm5kZWYgU1lTQ0FMTF9ERUZJTkUwXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjE4OiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUwKHNuYW1lKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTIxOS1cdFNZU0NBTExfTUVUQURBVEEoXyMjc25hbWUsIDApO1x0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMjI0LVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjIyNTojZGVmaW5lIFNZU0NBTExfREVGSU5FMShuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCgxLCBfIyNuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoyMjY6I2RlZmluZSBTWVNDQUxMX0RFRklORTIobmFtZSwgLi4uKSBTWVNDQUxMX0RFRklORXgoMiwgXyMjbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjI3OiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUzKG5hbWUsIC4uLikgU1lTQ0FMTF9ERUZJTkV4KDMsIF8jI25hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjIyODojZGVmaW5lIFNZU0NBTExfREVGSU5FNChuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCg0LCBfIyNuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoyMjk6I2RlZmluZSBTWVNDQUxMX0RFRklORTUobmFtZSwgLi4uKSBTWVNDQUxMX0RFRklORXgoNSwgXyMjbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjMwOiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkU2KG5hbWUsIC4uLikgU1lTQ0FMTF9ERUZJTkV4KDYsIF8jI25hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTIzMS1cbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoyMzI6I2RlZmluZSBTWVNDQUxMX0RFRklORV9NQVhBUkdTXHQ2XG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMjMzLVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjIzNDojZGVmaW5lIFNZU0NBTExfREVGSU5FeCh4LCBzbmFtZSwgLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0yMzUtXHRTWVNDQUxMX01FVEFEQVRBKHNuYW1lLCB4LCBfX1ZBX0FSR1NfXylcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc1MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFN5c3RlbSBDYWxsIERlZmluaXRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHN5c3RlbSBjYWxscy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzZWUuLi4gdGhlIGRlZmluaXRpdmUgZGVjbGFyYXRpb24gb2Ygc3lzdGVtIGNhbGwgbnVtYmVycyBhbmQgcHJvdG90eXBlcyBzaG91bGQgYmUgaW4gYGluY2x1ZGUvbGludXgvc3lzY2FsbHMuaGAuIE5vdywgSSByZWNhbGwgaGF2aW5nIHRvIHJlZmVyIHRvIHRoaXMgc2VjdGlvbiBvZiBjb2RlIGJlZm9yZS4gVG8gYmUgc3BlY2lmaWMsIG15IGluaXRpYWwgaW5xdWlyeSB3aWxsIHN0YXJ0IHdpdGggbGluZXMgMjM1LTI1NS4gSSYjMzk7bSBob3BpbmcgSSBjYW4gZmluZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLCBvciBhdCBsZWFzdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24sIGluIHRoYXQgc2VnbWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zeXNjYWxscy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzA6XHQjZGVmaW5lIFNZU0NBTExfREVGSU5FNihuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCg2LCBfIyNuYW1lLCBfX1ZBX0FSR1NfXylcbiAyMzE6XHRcbiAyMzI6XHQjZGVmaW5lIFNZU0NBTExfREVGSU5FX01BWEFSR1NcdDZcbiAyMzM6XHRcbiAyMzQ6XHQjZGVmaW5lIFNZU0NBTExfREVGSU5FeCh4LCBzbmFtZSwgLi4uKVx0XHRcdFx0XFxcbiAyMzU6XHRcdFNZU0NBTExfTUVUQURBVEEoc25hbWUsIHgsIF9fVkFfQVJHU19fKVx0XHRcdFxcXG4gMjM2Olx0XHRfX1NZU0NBTExfREVGSU5FeCh4LCBzbmFtZSwgX19WQV9BUkdTX18pXG4gMjM3Olx0XG4gMjM4Olx0I2RlZmluZSBfX1BST1RFQ1QoLi4uKSBhc21saW5rYWdlX3Byb3RlY3QoX19WQV9BUkdTX18pXG4gMjM5Olx0XG4gMjQwOlx0LypcbiAyNDE6XHQgKiBUaGUgYXNtbGlua2FnZSBzdHViIGlzIGFsaWFzZWQgdG8gYSBmdW5jdGlvbiBuYW1lZCBfX3NlX3N5c18qKCkgd2hpY2hcbiAyNDI6XHQgKiBzaWduLWV4dGVuZHMgMzItYml0IGludHMgdG8gbG9uZ3Mgd2hlbmV2ZXIgbmVlZGVkLiBUaGUgYWN0dWFsIHdvcmsgaXNcbiAyNDM6XHQgKiBkb25lIHdpdGhpbiBfX2RvX3N5c18qKCkuXG4gMjQ0Olx0ICovXG4gMjQ1Olx0I2lmbmRlZiBfX1NZU0NBTExfREVGSU5FeFxuIDI0NjpcdCNkZWZpbmUgX19TWVNDQUxMX0RFRklORXgoeCwgbmFtZSwgLi4uKVx0XHRcdFx0XHRcXFxuIDI0NzpcdFx0X19kaWFnX3B1c2goKTtcdFx0XHRcdFx0XHRcdFxcXG4gMjQ4Olx0XHRfX2RpYWdfaWdub3JlKEdDQywgOCwgXCYjMzQ7LVdhdHRyaWJ1dGUtYWxpYXNcJiMzNDssXHRcdFx0XFxcbiAyNDk6XHRcdFx0ICAgICAgXCYjMzQ7VHlwZSBhbGlhc2luZyBpcyB1c2VkIHRvIHNhbml0aXplIHN5c2NhbGwgYXJndW1lbnRzXCYjMzQ7KTtcXFxuIDI1MDpcdFx0X19kaWFnX2lnbm9yZShjbGFuZywgMjMsIFwmIzM0Oy1XdW5rbm93bi13YXJuaW5nLW9wdGlvblwmIzM0OyxcdFx0XFxcbiAyNTE6XHRcdFx0ICAgICAgXCYjMzQ7QXZvaWQgYnJlYWtpbmcgdmVyc2lvbnMgd2l0aG91dCAtV2F0dHJpYnV0ZS1hbGlhc1wmIzM0Oyk7XFxcbiAyNTI6XHRcdF9fZGlhZ19pZ25vcmUoY2xhbmcsIDIzLCBcJiMzNDstV2F0dHJpYnV0ZS1hbGlhc1wmIzM0OyxcdFx0XHRcXFxuIDI1MzpcdFx0XHQgICAgICBcJiMzNDtUeXBlIGFsaWFzaW5nIGlzIHVzZWQgdG8gc2FuaXRpemUgc3lzY2FsbCBhcmd1bWVudHNcJiMzNDspO1xcXG4gMjU0Olx0XHRhc21saW5rYWdlIGxvbmcgc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSlcdFxcXG4gMjU1Olx0XHRcdF9fYXR0cmlidXRlX18oKGFsaWFzKF9fc3RyaW5naWZ5KF9fc2Vfc3lzIyNuYW1lKSkpKTtcdFxcXG4gMjU2Olx0XHRBTExPV19FUlJPUl9JTkpFQ1RJT04oc3lzIyNuYW1lLCBFUlJOTyk7XHRcdFx0XFxcbiAyNTc6XHRcdHN0YXRpYyBpbmxpbmUgbG9uZyBfX2RvX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVDTCxfX1ZBX0FSR1NfXykpO1xcXG4gMjU4Olx0XHRhc21saW5rYWdlIGxvbmcgX19zZV9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0xPTkcsX19WQV9BUkdTX18pKTtcdFxcXG4gMjU5Olx0XHRhc21saW5rYWdlIGxvbmcgX19zZV9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0xPTkcsX19WQV9BUkdTX18pKVx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSB4ODZfNjQgU3lzdGVtIENhbGwgV3JhcHBlcioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIGluIG9uIHRoZSB4ODZfNjQgYXJjaGl0ZWN0dXJlIG5vdy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc3lzdGVtIGNhbGxzIGFyZSBoYW5kbGVkIGF0IHRoZSBhc3NlbWJseSBsZXZlbCwgcGFydGljdWxhcmx5IGhvdyB0aGV5JiMzOTtyZSB3cmFwcGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBsb2NhdGlvbiBmb3IgdGhlIGtleSBkZWZpbml0aW9ucyBhbmQgbWFjcm9zIHJlbGF0ZWQgdG8gc3lzdGVtIGNhbGwgaW52b2NhdGlvbiBhbmQgbWFuYWdlbWVudCBvbiB0aGlzIHBsYXRmb3JtLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzbyBsZXQmIzM5O3MgZ2V0IHN0YXJ0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaW4gdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19feDY0X3N5c18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM9Mzc9c3RhdGljIG5vaW5saW5lIGxvbmcgeDY0X3N5c19jYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jLTQwLVx0I2luY2x1ZGUgXHUwMDNjYXNtL3N5c2NhbGxzXzY0LmhcdTAwM2VcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYzo0MTpcdGRlZmF1bHQ6IHJldHVybiBfX3g2NF9zeXNfbmlfc3lzY2FsbChyZWdzKTtcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYy00Mi1cdH1cbi0tXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM9NDU9c3RhdGljIG5vaW5saW5lIGxvbmcgeDMyX3N5c19jYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jLTQ5LVx0I2luY2x1ZGUgXHUwMDNjYXNtL3N5c2NhbGxzX3gzMi5oXHUwMDNlXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM6NTA6XHRkZWZhdWx0OiByZXR1cm4gX194NjRfc3lzX25pX3N5c2NhbGwocmVncyk7XG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmMtNTEtXHR9XG4tLVxuYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwtNy0jXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibDo4OiMgVGhlIF9feDY0X3N5c18qKCkgc3R1YnMgYXJlIGNyZWF0ZWQgb24tdGhlLWZseSBmb3Igc3lzXyooKSBzeXN0ZW0gY2FsbHNcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTktI1xuLS1cbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmM9MTE5PXN0YXRpYyBib29sIF9fZW11bGF0ZV92c3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLS1cbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjE3LVx0XHQvKiB0aGlzIGRlY29kZXMgcmVncy1cdTAwM2VkaSBhbmQgcmVncy1cdTAwM2VzaSBvbiBpdHMgb3duICovXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIxODpcdFx0cmV0ID0gX194NjRfc3lzX2dldHRpbWVvZmRheShyZWdzKTtcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjE5LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTIyMi1cdFx0LyogdGhpcyBkZWNvZGVzIHJlZ3MtXHUwMDNlZGkgb24gaXRzIG93biAqL1xuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYzoyMjM6XHRcdHJldCA9IF9feDY0X3N5c190aW1lKHJlZ3MpO1xuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yMjQtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjMwLVx0XHQvKiB0aGlzIGRlY29kZXMgcmVncy1cdTAwM2VkaSwgcmVncy1cdTAwM2VzaSBhbmQgcmVncy1cdTAwM2VkeCBvbiBpdHMgb3duICovXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIzMTpcdFx0cmV0ID0gX194NjRfc3lzX2dldGNwdShyZWdzKTtcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjMyLVx0XHRyZWdzLVx1MDAzZWR4ID0gb3JpZ19keDtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xMC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjExOmV4dGVybiBsb25nIF9feDY0X3N5c19uaV9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTEyLWV4dGVybiBsb25nIF9faWEzMl9zeXNfbmlfc3lzY2FsbChjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMTYtICogc3RydWN0IHB0X3JlZ3MgKnJlZ3MgYXMgdGhlIG9ubHkgYXJndW1lbnQgb2YgdGhlIHN5c2NhbGwgc3R1YihzKSBuYW1lZCBhczpcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjE3OiAqIF9feDY0X3N5c18qKCkgICAgICAgICAtIDY0LWJpdCBuYXRpdmUgc3lzY2FsbFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMTgtICogX19pYTMyX3N5c18qKCkgICAgICAgIC0gMzItYml0IG5hdGl2ZSBzeXNjYWxsIG9yIGNvbW1vbiBjb21wYXQgc3lzY2FsbFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTMzLSAqXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaDozNDogKiBcdTAwM2NfX3g2NF9zeXNfcmVjdlx1MDAzZTpcdFx0XHUwMDNjLS0gc3lzY2FsbCB3aXRoIDQgcGFyYW1ldGVyc1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMzUtICpcdGNhbGxxXHRcdTAwM2NfX2ZlbnRyeV9fXHUwMDNlXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMjU5LSAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYwOmxvbmcgX194NjRfc3lzX2dldGNwdShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaDoyNjE6bG9uZyBfX3g2NF9zeXNfZ2V0dGltZW9mZGF5KGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjI2Mjpsb25nIF9feDY0X3N5c190aW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTI2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNjYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG1yZWxlYXNlYCBTeXN0ZW0gQ2FsbCBXcmFwcGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Ugc3lzdGVtIGNhbGxzOiBgX19kb19zeXNfcHJvY2Vzc19tcmVsZWFzZWAgYW5kIGBfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZWAuIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBhcmUgaW1wbGVtZW50ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGFyY2hpdGVjdHVyZS4gVGltZSB0byBjaGVjayB0aGUgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYCBoZWFkZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGxpbmVzIDE4MCB0aHJvdWdoIDIyMC4gSSBhbnRpY2lwYXRlIHRoaXMgc2VjdGlvbiB3aWxsIGRlZmluZSB0aGUgd3JhcHBlcnMgb3IgdGhlIGxvdy1sZXZlbCBnbHVlIHRoYXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgYWN0dWFsIGBtcmVsZWFzZWAgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBhcmd1bWVudHMgYXJlIHBhc3NlZCwgYW55IG5lY2Vzc2FyeSBjb250ZXh0IHN3aXRjaGluZywgb3IgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkZXRhaWxzIHJlbGV2YW50IHRvIHRoZSBgbXJlbGVhc2VgIGNhbGwuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBiYXNlIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGtlcm5lbCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcbiAxODE6XHQjZWxzZSAvKiBDT05GSUdfWDg2X1gzMl9BQkkgKi9cbiAxODI6XHQjZGVmaW5lIF9fWDMyX0NPTVBBVF9TWVNfU1RVQjAobmFtZSlcbiAxODM6XHQjZGVmaW5lIF9fWDMyX0NPTVBBVF9TWVNfU1RVQngoeCwgbmFtZSwgLi4uKVxuIDE4NDpcdCNkZWZpbmUgX19YMzJfQ09NUEFUX0NPTkRfU1lTQ0FMTChuYW1lKVxuIDE4NTpcdCNlbmRpZiAvKiBDT05GSUdfWDg2X1gzMl9BQkkgKi9cbiAxODY6XHRcbiAxODc6XHRcbiAxODg6XHQjaWZkZWYgQ09ORklHX0NPTVBBVFxuIDE4OTpcdC8qXG4gMTkwOlx0ICogQ29tcGF0IG1lYW5zIElBMzJfRU1VTEFUSU9OIGFuZC9vciBYODZfWDMyLiBBcyB0aGV5IHVzZSBhIGRpZmZlcmVudFxuIDE5MTpcdCAqIG1hcHBpbmcgb2YgcmVnaXN0ZXJzIHRvIHBhcmFtZXRlcnMsIHdlIG5lZWQgdG8gZ2VuZXJhdGUgc3R1YnMgZm9yIGVhY2hcbiAxOTI6XHQgKiBvZiB0aGVtLlxuIDE5MzpcdCAqL1xuIDE5NDpcdCNkZWZpbmUgQ09NUEFUX1NZU0NBTExfREVGSU5FMChuYW1lKVx0XHRcdFx0XHRcXFxuIDE5NTpcdFx0c3RhdGljIGxvbmdcdFx0XHRcdFx0XHRcdFxcXG4gMTk2Olx0XHRfX2RvX2NvbXBhdF9zeXNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpfX3VudXNlZCk7XHRcdFxcXG4gMTk3Olx0XHRfX0lBMzJfQ09NUEFUX1NZU19TVFVCMChuYW1lKVx0XHRcdFx0XHRcXFxuIDE5ODpcdFx0X19YMzJfQ09NUEFUX1NZU19TVFVCMChuYW1lKVx0XHRcdFx0XHRcXFxuIDE5OTpcdFx0c3RhdGljIGxvbmdcdFx0XHRcdFx0XHRcdFxcXG4gMjAwOlx0XHRfX2RvX2NvbXBhdF9zeXNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpfX3VudXNlZClcbiAyMDE6XHRcbiAyMDI6XHQjZGVmaW5lIENPTVBBVF9TWVNDQUxMX0RFRklORXgoeCwgbmFtZSwgLi4uKVx0XHRcdFx0XHRcXFxuIDIwMzpcdFx0c3RhdGljIGxvbmcgX19zZV9jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSk7XHRcXFxuIDIwNDpcdFx0c3RhdGljIGlubGluZSBsb25nIF9fZG9fY29tcGF0X3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVDTCxfX1ZBX0FSR1NfXykpO1xcXG4gMjA1Olx0XHRfX0lBMzJfQ09NUEFUX1NZU19TVFVCeCh4LCBuYW1lLCBfX1ZBX0FSR1NfXylcdFx0XHRcdFxcXG4gMjA2Olx0XHRfX1gzMl9DT01QQVRfU1lTX1NUVUJ4KHgsIG5hbWUsIF9fVkFfQVJHU19fKVx0XHRcdFx0XFxcbiAyMDc6XHRcdHN0YXRpYyBsb25nIF9fc2VfY29tcGF0X3N5cyMjbmFtZShfX01BUCh4LF9fU0NfTE9ORyxfX1ZBX0FSR1NfXykpXHRcXFxuIDIwODpcdFx0e1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gMjA5Olx0XHRcdHJldHVybiBfX2RvX2NvbXBhdF9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0RFTE9VU0UsX19WQV9BUkdTX18pKTtcXFxuIDIxMDpcdFx0fVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gMjExOlx0XHRzdGF0aWMgaW5saW5lIGxvbmcgX19kb19jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSlcbiAyMTI6XHRcbiAyMTM6XHQvKlxuIDIxNDpcdCAqIEFzIHNvbWUgY29tcGF0IHN5c2NhbGxzIG1heSBub3QgYmUgaW1wbGVtZW50ZWQsIHdlIG5lZWQgdG8gZXhwYW5kXG4gMjE1Olx0ICogQ09ORF9TWVNDQUxMX0NPTVBBVCBpbiBrZXJuZWwvc3lzX25pLmMgdG8gY292ZXIgdGhpcyBjYXNlIGFzIHdlbGwuXG4gMjE2Olx0ICovXG4gMjE3Olx0I2RlZmluZSBDT05EX1NZU0NBTExfQ09NUEFUKG5hbWUpIFx0XHRcdFx0XHRcXFxuIDIxODpcdFx0X19JQTMyX0NPTVBBVF9DT05EX1NZU0NBTEwobmFtZSlcdFx0XHRcdFxcXG4gMjE5Olx0XHRfX1gzMl9DT01QQVRfQ09ORF9TWVNDQUxMKG5hbWUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTkyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyB4ODYgTmF0aXZlIFN5c2NhbGwgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBuYXRpdmUgc3lzY2FsbHMgYXJlIGhhbmRsZWQgb24geDg2LiBMZXQmIzM5O3MgZGlnIGludG8gdGhpczsgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGNhbGwgd3JhcHBlcnMgd29yay4gUmlnaHQsIGxldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaGAuIEkgcmVjYWxsIHRoYXQgdGhlIGNyaXRpY2FsIGRlZmluaXRpb25zIGFyZSB0eXBpY2FsbHkgaW4gdGhhdCBoZWFkZXIgZmlsZS4gTm93LCBhY2NvcmRpbmcgdG8gbXkgbWVudGFsIG1hcCwgbGluZXMgMjIwIHRocm91Z2ggMjU4IHNob3VsZCBiZSB3aGVyZSB0aGUga2V5IHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGZvdW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZCB3aXRoaW4gdGhhdCByYW5nZS4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBhbmQgcmVtZW1iZXIgd2hhdCBJIHdhcyBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0XG4gMjIxOlx0I2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi9cbiAyMjI6XHRcbiAyMjM6XHQjZGVmaW5lIF9fU1lTQ0FMTF9ERUZJTkV4KHgsIG5hbWUsIC4uLilcdFx0XHRcdFx0XFxcbiAyMjQ6XHRcdHN0YXRpYyBsb25nIF9fc2Vfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSk7XHRcXFxuIDIyNTpcdFx0c3RhdGljIGlubGluZSBsb25nIF9fZG9fc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSk7XFxcbiAyMjY6XHRcdF9fWDY0X1NZU19TVFVCeCh4LCBuYW1lLCBfX1ZBX0FSR1NfXylcdFx0XHRcdFxcXG4gMjI3Olx0XHRfX0lBMzJfU1lTX1NUVUJ4KHgsIG5hbWUsIF9fVkFfQVJHU19fKVx0XHRcdFx0XFxcbiAyMjg6XHRcdHN0YXRpYyBsb25nIF9fc2Vfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSlcdFxcXG4gMjI5Olx0XHR7XHRcdFx0XHRcdFx0XHRcdFxcXG4gMjMwOlx0XHRcdGxvbmcgcmV0ID0gX19kb19zeXMjI25hbWUoX19NQVAoeCxfX1NDX0NBU1QsX19WQV9BUkdTX18pKTtcXFxuIDIzMTpcdFx0XHRfX01BUCh4LF9fU0NfVEVTVCxfX1ZBX0FSR1NfXyk7XHRcdFx0XHRcXFxuIDIzMjpcdFx0XHRfX1BST1RFQ1QoeCwgcmV0LF9fTUFQKHgsX19TQ19BUkdTLF9fVkFfQVJHU19fKSk7XHRcXFxuIDIzMzpcdFx0XHRyZXR1cm4gcmV0O1x0XHRcdFx0XHRcdFxcXG4gMjM0Olx0XHR9XHRcdFx0XHRcdFx0XHRcdFxcXG4gMjM1Olx0XHRzdGF0aWMgaW5saW5lIGxvbmcgX19kb19zeXMjI25hbWUoX19NQVAoeCxfX1NDX0RFQ0wsX19WQV9BUkdTX18pKVxuIDIzNjpcdFxuIDIzNzpcdC8qXG4gMjM4Olx0ICogQXMgdGhlIGdlbmVyaWMgU1lTQ0FMTF9ERUZJTkUwKCkgbWFjcm8gZG9lcyBub3QgZGVjb2RlIGFueSBwYXJhbWV0ZXJzIGZvclxuIDIzOTpcdCAqIG9idmlvdXMgcmVhc29ucywgYW5kIHBhc3Npbmcgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgdG8gaXQgaW4gJXJkaSBkb2VzIG5vdFxuIDI0MDpcdCAqIGh1cnQsIHdlIG9ubHkgbmVlZCB0byByZS1kZWZpbmUgaXQgaGVyZSB0byBrZWVwIHRoZSBuYW1pbmcgY29uZ3J1ZW50IHRvXG4gMjQxOlx0ICogU1lTQ0FMTF9ERUZJTkV4KCkgLS0gd2hpY2ggaXMgZXNzZW50aWFsIGZvciB0aGUgQ09ORF9TWVNDQUxMKCkgbWFjcm9cbiAyNDI6XHQgKiB0byB3b3JrIGNvcnJlY3RseS5cbiAyNDM6XHQgKi9cbiAyNDQ6XHQjZGVmaW5lIFNZU0NBTExfREVGSU5FMChzbmFtZSlcdFx0XHRcdFx0XHRcXFxuIDI0NTpcdFx0U1lTQ0FMTF9NRVRBREFUQShfIyNzbmFtZSwgMCk7XHRcdFx0XHRcdFxcXG4gMjQ2Olx0XHRzdGF0aWMgbG9uZyBfX2RvX3N5c18jI3NuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpfX3VudXNlZCk7XHRcXFxuIDI0NzpcdFx0X19YNjRfU1lTX1NUVUIwKHNuYW1lKVx0XHRcdFx0XHRcdFxcXG4gMjQ4Olx0XHRfX0lBMzJfU1lTX1NUVUIwKHNuYW1lKVx0XHRcdFx0XHRcdFxcXG4gMjQ5Olx0XHRzdGF0aWMgbG9uZyBfX2RvX3N5c18jI3NuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpfX3VudXNlZClcbiAyNTA6XHRcbiAyNTE6XHQjZGVmaW5lIENPTkRfU1lTQ0FMTChuYW1lKVx0XHRcdFx0XHRcdFxcXG4gMjUyOlx0XHRfX1g2NF9DT05EX1NZU0NBTEwobmFtZSlcdFx0XHRcdFx0XFxcbiAyNTM6XHRcdF9fSUEzMl9DT05EX1NZU0NBTEwobmFtZSlcbiAyNTQ6XHRcbiAyNTU6XHRcbiAyNTY6XHQvKlxuIDI1NzpcdCAqIEZvciBWU1lTQ0FMTFMsIHdlIG5lZWQgdG8gZGVjbGFyZSB0aGVzZSB0aHJlZSBzeXNjYWxscyB3aXRoIHRoZSBuZXdcbiAyNTg6XHQgKiBwdF9yZWdzLWJhc2VkIGNhbGxpbmcgY29udmVudGlvbiBmb3IgaW4ta2VybmVsIHVzZS5cbiAyNTk6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyMzAKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipTeXN0ZW0gQ2FsbCBTdHViIE9ic2VydmF0aW9ucyoqCgpPa2F5LCBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlc2Ugc3lzdGVtIGNhbGwgc3R1YnMgYW5kIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpcyBqdW1waW5nIG91dCBhdCBtZS4gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgYF9fZG9fc3lzIyNuYW1lYCBtYWNybyBpcyBkZWZpbmVkIGFzIGBzdGF0aWMgaW5saW5lYCwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdCBmb3IgYSBmYXN0IHBhdGggb3B0aW1pemF0aW9uLiBCdXQgdGhlbiBJJiMzOTttIG5vdGljaW5nIHRoYXQgdGhlIGBfX3NlX3N5cyMjbmFtZWAgYW5kIGBfX3g2NF9zeXNfIyNuYW1lYCB2ZXJzaW9ucywgd2hpY2ggZ2V0IGV4cGFuZGVkIHZpYSBgX19YNjRfU1lTX1NUVUJ4YCwgYXJlICpmdW5jdGlvbnMqIOKAkyBhY3R1YWwsIGNhbGxhYmxlIGZ1bmN0aW9ucy4gVGhhdCBjb250cmFzdCBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhlIGRlc2lnbiBjaG9pY2Ugd2FzIG1hZGUgdG8gaGFuZGxlIHRoZW0gZGlmZmVyZW50bHkuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19YNjRfU1lTX1NUVUJ4YCB0byBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCwgSSYjMzk7bGwgZmluZCBpdCBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhgLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgdGhhdCBtYWNybyBpcyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIF9fWDY0X1NZU19TVFVCeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oPTEyPWV4dGVybiBsb25nIF9faWEzMl9zeXNfbmlfc3lzY2FsbChjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMTA5LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MTEwOiNkZWZpbmUgX19YNjRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcdFx0XHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTExMS1cdF9fU1lTX1NUVUJ4KHg2NCwgc3lzIyNuYW1lLFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTExOC0jZGVmaW5lIF9fWDY0X1NZU19TVFVCMChuYW1lKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MTE5OiNkZWZpbmUgX19YNjRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTEyMC0jZGVmaW5lIF9fWDY0X0NPTkRfU1lTQ0FMTChuYW1lKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg1NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBhbmQgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMgb2YgYHByb2Nlc3NfbXJlbGVhc2VgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiAgTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2VudCBsaWtlIHRoaXM6IGBfX1NZU19TVFVCeGAgY3JlYXRlcyBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgLiBJIGNvbmZpcm1lZCB0aGF0LiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgc3lzdGVtIGNhbGwgaXRzZWxmLCBgcHJvY2Vzc19tcmVsZWFzZWAuIFRoZW4gSSBuZWVkZWQgdG8gdmVyaWZ5IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gSSBrbm93IGBTWVNDQUxMX0RFRklORTJgIHVsdGltYXRlbHkgZGVmaW5lcyBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgLiBJIGFsc28gcmVtZW1iZXJlZCBgX19zZV9zeXNfcHJvY2Vzc19tcmVsZWFzZWAgZ2V0cyBkZWZpbmVkIGFzIHdlbGwuCgpJIGZvY3VzZWQgb24gYF9fb29tX3JlYXBfdGFza19tbWAsIGEgc3RhdGljIGZ1bmN0aW9uIGluIGBtbS9vb21fa2lsbC5jYC4gQmVjYXVzZSBpdCYjMzk7cyBzdGF0aWMgYW5kIGhhcyBtdWx0aXBsZSBjYWxsIHNpdGVzIChgb29tX3JlYXBfdGFza19tbWAgYW5kIGBwcm9jZXNzX21yZWxlYXNlYCksIGl0IGNvdWxkIGJlIGlubGluZWQsIGJ1dCBnaXZlbiBpdHMgc2l6ZSBhbmQgbXVsdGlwbGUgdXNlcywgbGlrZWx5IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBFdmVuIGlmIGl0IGlzLCB0aGUgc3RhdGljIGZ1bmN0aW9uIHdpbGwgc3RpbGwgYmUgYSBzeW1ib2wgaWYgbm90IG9wdGltaXplZCBhd2F5LCBvciBpbiBhbnkgY2FzZSwgYm90aCBjYWxsZXJzIHBsdXMgdGhlIGZ1bmN0aW9uIGJvZHkgd2lsbCBiZSBwcm92aWRlZC4KClRoZW4sIEkgcmV2aWV3ZWQgdGhlIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBmb3IgYSBmdWxsZXIgcGljdHVyZTogYHphcF92bWFfZm9yX3JlYXBpbmdgLCBgX19vb21fcmVhcF90YXNrX21tYCwgYG9vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza2AsIGFuZCBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgLiBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSBpZiB0aGV5JiMzOTtyZSBjYWxsZWQgdWJpcXVpdG91c2x5LiBUdXJucyBvdXQsIG5vbmUgb2YgdGhlc2UgYXJlIHVuaXZlcnNhbGx5IGNhbGxlZC4gRWFjaCBpcyB0aWVkIHRvIHRoZSBvb20gcmVhcGVyIGZ1bmN0aW9uYWxpdHkgb3IgdGhlIGBwcm9jZXNzX21yZWxlYXNlYCBzeXN0ZW0gY2FsbC4KCkkgdGhlbiBjb25maXJtZWQgdGhhdCBzeXprYWxsZXIgY2FuIGluZGVlZCBjYWxsIGBwcm9jZXNzX21yZWxlYXNlYC4gSSBrbm93IGl0JiMzOTtzIGEgc3VwcG9ydGVkIHN5c2NhbGwgYW5kIHRoYXQgaXQgZ2VuZXJhdGVzIHRoZSBjb3JyZWN0IGNhbGwuIEkgdGhvdWdodCBhYm91dCB0aGUgbGlrZWx5IHNjZW5hcmlvIHdoZW4gYHByb2Nlc3NfbXJlbGVhc2VgIGlzIGludm9rZWQgY29uY3VycmVudGx5IHdpdGggYSB3cml0ZXIgY29udGVuZGluZyBvbiBgbW1hcF9sb2NrYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGl0IGV4ZXJjaXNlcyB0aGUgbmV3IGNvZGUgcGF0aHMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guIEkgcmVtZW1iZXJlZCB0aGUgY29kZSB1c2VzIGBtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKWAsIGRyb3BzIGBtbWFwX3JlYWRfdW5sb2NrKG1tKWAsIHJldHVybnMgYC1FQUdBSU5gLCBhbmQgcmV0cmllcy4gSSYjMzk7bSBhbHNvIGNvbnNjaW91cyBvZiB0aGUgMUdCIGNodW5raW5nIGxvb3AgdGhhdCBraWNrcyBpbiBkdXJpbmcgVk1BIHJlYXBpbmcuCgpDb25maWctd2lzZSwgbXkgcHJpbWFyeSBjb25jZXJuIGlzIGBDT05GSUdfTU1VYC4gQ2hlY2tpbmcgdGhlIHNvdXJjZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYENPTkZJR19NTVVgIGlzIHRoZSBnYXRla2VlcGVyIGZvciB0aGUgb29tIHJlYXBlci4gV2l0aG91dCBpdCwgYHByb2Nlc3NfbXJlbGVhc2VgIHJldHVybnMgYC1FTk9TWVNgLCBhbmQgdGhlIHJlYXBlciBkb2VzbiYjMzk7dCBleGlzdC4gVGhlIG90aGVyIGZ1bmN0aW9uIHRoYXQgaXMgcGFydCBvZiB0aGlzIGlzIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYC4gSSB2ZXJpZmllZCB0aGF0IGB6YXBfdm1hX2Zvcl9yZWFwaW5nYCBpcyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aGluIHRoZSBgbW0vbWVtb3J5LmNgIGZpbGUsIHdoaWNoIGl0c2VsZiBpcyBvbmx5IGJ1aWx0IHdoZW4gYENPTkZJR19NTVU9eWAuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O01NVSYjMzQ7XWAuIEFuZCBhZnRlciBhIGZpbmFsIGNoZWNrIG9mIGFsbCBLY29uZmlnIGZpbGVzLCBJIGNvbmZpcm0gdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIGhpZGluZyBvciBkaXNhYmxpbmcgYHByb2Nlc3NfbXJlbGVhc2VgIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jZXNzX21yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7S2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODQ3CgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDUzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmlhZ2UgQW5hbHlzaXM6IE9PTS9gcHJvY2Vzc19tcmVsZWFzZWAqKgoKT2theSwgc28gdGhlcmUgYXJlIG5vIGV4cGxpY2l0IGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIGhlcmU7IGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBidWlsdCBpZiBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgYSBwcmV0dHkgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGUgdHJpYWdlIGluc3RydWN0aW9ucyBjb3JyZWN0bHkuIEkgbmVlZCB0byBuYWlsIGRvd246IGBXb3J0aEZ1enppbmdgLCBgUmVhc29uaW5nYCwgYEVuYWJsZUNvbmZpZ3NgLCBhbmQgYEZvY3VzU3ltYm9sc2AuCgpUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHdoZXJlIEkgbmVlZCB0byBmb2N1cy4gTGV0JiMzOTtzIGxpc3QgdGhvc2Ugb3V0LiBJIHNlZSBgemFwX3ZtYV9mb3JfcmVhcGluZ2AsIGBfX29vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza19tbWAsIGBvb21fcmVhcF90YXNrYCwgYW5kIGBfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZWAuIFdhaXQsIGhhbmcgb24uLi4gaXMgaXQgYF9fZG9fc3lzX3Byb2Nlc3NfbXJlbGVhc2VgIG9yIGBfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZWA/IEFoLCByaWdodCwgb24geDg2XzY0LCBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgIGlzIHRoZSBhY3R1YWwgZW50cnkgcG9pbnQsIHdoaWNoIGlzIHdoYXQgSSYjMzk7bSB0YXJnZXRpbmcgZ2l2ZW4gdGhlIGBhbWQ2NGAgdGFyZ2V0LiBXaGF0IGFib3V0IG90aGVyIGFyY2hpdGVjdHVyZXMgbGlrZSBhcm02ND8gV2VsbCwgSSBkb24mIzM5O3QgY2FyZSBhdCB0aGUgbW9tZW50IGFzIHRoZSBwcm9tcHQgc3BlY2lmaWVzIGBhbWQ2NGAuIE9uIGFtZDY0LCBJIGtub3cgdGhhdCBib3RoIGBfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZWAgYW5kIGBfX3NlX3N5c19wcm9jZXNzX21yZWxlYXNlYCBhcmUgZ2VuZXJhdGVkLiBTbywgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCBpdCBpcy4gTm93LCBjYW4gSSBpbmNsdWRlIGl0PyBZZXMuIFdoYXQgYWJvdXQgYWxsIHRoZSBvdGhlcnM/IGB6YXBfdm1hX2Zvcl9yZWFwaW5nYCwgYF9fb29tX3JlYXBfdGFza19tbWAsIGBvb21fcmVhcF90YXNrX21tYCwgYW5kIGBvb21fcmVhcF90YXNrYCwgYWxsIG9mIHRob3NlIGFyZSB2YWxpZCBjaG9pY2VzIGFzIHdlbGwuIE9rYXksIGdvb2QuIEkmIzM5O20gY29uZmlkZW50IGluIHRoZXNlIGNob2ljZXMuCgpMZXQmIzM5O3MgZG8gYSBmaW5hbCBjaGVjayBhZ2FpbnN0IHRoZSBpbnN0cnVjdGlvbnMuIFJlYWNoYWJpbGl0eTogdGhpcyBhcmVhIGlzIGNvcmUgTU0sIHNvIHJlYWNoYWJsZSB2aWEgMSkgdGhlIGBwcm9jZXNzX21yZWxlYXNlYCBzeXNjYWxsLCBhbmQgMikgdGhlIE9PTSBraWxsZXIgcmVhcGVyIHRocmVhZC4gQm90aCBhcmUgdHJpdmlhbCB0byByZWFjaCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIENoZWNrLiBgV29ydGhGdXp6aW5nYDogRGVmaW5pdGVseSB0cnVlLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgdGhlIGBGb2N1c1N5bWJvbHNgOiBgemFwX3ZtYV9mb3JfcmVhcGluZ2AsIGBfX29vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza19tbWAsIGBvb21fcmVhcF90YXNrYCwgYW5kIGBfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZWAuIE5vbmUgb2YgdGhlc2UgYXJlIHViaXF1aXRvdXM7IHRoZXkmIzM5O3JlIHZlcnkgc3BlY2lmaWMgdG8gdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgdG8gdGhlIE9PTSByZWFwaW5nIGFuZCBgcHJvY2Vzc19tcmVsZWFzZWAgbWVjaGFuaXNtcy4gQmluZ28uCgpPa2F5LCBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNTVUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6YXBfdm1hX2Zvcl9yZWFwaW5nJiMzNDssCiAgICAmIzM0O19fb29tX3JlYXBfdGFza19tbSYjMzQ7LAogICAgJiMzNDtvb21fcmVhcF90YXNrX21tJiMzNDssCiAgICAmIzM0O29vbV9yZWFwX3Rhc2smIzM0OywKICAgICYjMzQ7X194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBWTUEgdW5tYXBwaW5nIGxvZ2ljIGZvciBPT00gcmVhcGluZyBhbmQgdGhlIHByb2Nlc3NfbXJlbGVhc2Ugc3lzY2FsbCwgc3BsaXR0aW5nIFZNQSB6YXBwaW5nIGludG8gMUdCIGNodW5rcyBhbmQgeWllbGRpbmcgbW1hcF9sb2NrIHdoZW4gY29udGVuZGVkLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29udHJvbCBmbG93IGFuZCBsb2NraW5nIHNlbWFudGljcyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NrIGludmVyc2lvbnMsIG9yIHN0YXRlIGluY29uc2lzdGVuY3kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3phcF92bWFfZm9yX3JlYXBpbmcmIzM0OywKICAgICYjMzQ7X19vb21fcmVhcF90YXNrX21tJiMzNDssCiAgICAmIzM0O29vbV9yZWFwX3Rhc2tfbW0mIzM0OywKICAgICYjMzQ7b29tX3JlYXBfdGFzayYjMzQ7LAogICAgJiMzNDtfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFZNQSB1bm1hcHBpbmcgbG9naWMgZm9yIE9PTSByZWFwaW5nIGFuZCB0aGUgcHJvY2Vzc19tcmVsZWFzZSBzeXNjYWxsLCBzcGxpdHRpbmcgVk1BIHphcHBpbmcgaW50byAxR0IgY2h1bmtzIGFuZCB5aWVsZGluZyBtbWFwX2xvY2sgd2hlbiBjb250ZW5kZWQuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgc2VtYW50aWNzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2sgaW52ZXJzaW9ucywgb3Igc3RhdGUgaW5jb25zaXN0ZW5jeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00gcmVhcGVyIGxvZ2ljIGluIG1tL29vbV9raWxsLmMgYW5kIG1tL21lbW9yeS5jIHNvIHRoYXQgVk1BcyBhcmUgemFwcGVkIGluIDFHQiBjaHVua3MsIGFsbG93aW5nIG1tYXBfbG9jayB0byBiZSB5aWVsZGVkIHRvIHdhaXRpbmcgd3JpdGVycyB1cG9uIGNvbnRlbnRpb24uIEl0IGFsc28gdXBkYXRlcyBlcnJvciBoYW5kbGluZyBhY3Jvc3MgemFwX3ZtYV9mb3JfcmVhcGluZywgX19vb21fcmVhcF90YXNrX21tLCBvb21fcmVhcF90YXNrLCBhbmQgdGhlIHByb2Nlc3NfbXJlbGVhc2Ugc3lzY2FsbC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChhZGRyLCBlbmQsIHJldCwgYXR0ZW1wdHMpIGFyZSBzY2FsYXIgdHlwZXMgYW5kIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHByaW9yIHRvIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBoZWFwL3N0YWNrIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgb3Igc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocyBhZmZlY3RpbmcgcmVhZHMgb2YgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIGludm9sdmUgbG9jayBtYW5hZ2VtZW50LCBsb2NrIGNvbnRlbnRpb24sIFZNQSBpdGVyYXRpb24sIG9yIHBhZ2UgdGFibGUgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YWJmYTAzYjgxMjNkOWMyOWU1MjNhODQzM2NjZTE0MWRiOTRhZWJjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMTI6NDE6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCAwNTE3OWM0YjIwOTBlLi43YWMxNzI4YTU3YzI5IDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTU5Myw3ICYjNDM7NTkzLDggQEAgc3RydWN0IHphcF9kZXRhaWxzOwogdm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpOwotaW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwomIzQzO2ludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAomIzQzOwkJCXVuc2lnbmVkIGxvbmcgZW5kKTsKIGludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJICAgZ2ZwX3QgZ2ZwKTsKIApkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA5MjYyNzZkNDE5MjAyLi4yNWMzNWEyOGEzOWQxIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtMjIwNywxNSAmIzQzOzIyMDcsMTggQEAgc3RhdGljIHZvaWQgX196YXBfdm1hX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogfQogCiAvKioKLSAqIHphcF92bWFfZm9yX3JlYXBpbmcgLSB6YXAgYWxsIHBhZ2UgdGFibGUgZW50cmllcyBpbiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmcKJiM0MzsgKiB6YXBfdm1hX2Zvcl9yZWFwaW5nIC0gemFwIGEgcmFuZ2Ugb2YgdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nCiAgKiBAdm1hOiBUaGUgdm1hIHRvIHphcC4KJiM0MzsgKiBAc3RhcnQ6IFRoZSBmaXJzdCBhZGRyZXNzIHRvIHphcC4KJiM0MzsgKiBAZW5kOiBPbmUgcGFzdCB0aGUgbGFzdCBhZGRyZXNzIHRvIHphcC4KICAqCi0gKiBaYXAgYWxsIHBhZ2UgdGFibGUgZW50cmllcyBpbiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmcgZm9yIHVzZSBieSB0aGUgb29tCi0gKiBraWxsZXIuIEh1Z2V0bGIgdm1hcyBhcmUgbm90IHN1cHBvcnRlZC4KJiM0MzsgKiBaYXAgdGhlIHBhZ2UgdGFibGUgZW50cmllcyBpbiBbQHN0YXJ0LCBAZW5kKSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmcKJiM0MzsgKiBmb3IgdXNlIGJ5IHRoZSBvb20ga2lsbGVyLiBIdWdldGxiIHZtYXMgYXJlIG5vdCBzdXBwb3J0ZWQuCiAgKgogICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgd2Ugd291bGQgaGF2ZSB0byBibG9jay4KICAqLwotaW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiYjNDM7aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiYjNDM7CQkJdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJc3RydWN0IHphcF9kZXRhaWxzIGRldGFpbHMgPSB7CiAJCS5yZWFwaW5nID0gdHJ1ZSwKQEAgLTIyMjQsNyAmIzQzOzIyMjcsNyBAQCBpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlzdHJ1Y3QgbW11X2dhdGhlciB0bGI7CiAKIAltbXVfbm90aWZpZXJfcmFuZ2VfaW5pdCgmYW1wO3JhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtJmd0O3ZtX21tLAotCQkJCXZtYS0mZ3Q7dm1fc3RhcnQsIHZtYS0mZ3Q7dm1fZW5kKTsKJiM0MzsJCQkJc3RhcnQsIGVuZCk7CiAJdGxiX2dhdGhlcl9tbXUoJmFtcDt0bGIsIHZtYS0mZ3Q7dm1fbW0pOwogCWlmIChtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9ub25ibG9jaygmYW1wO3JhbmdlKSkgewogCQl0bGJfZmluaXNoX21tdSgmYW1wO3RsYik7CmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCA1ZDQ4YmQ4NjJjMjdiLi5jZWUwYTBmN2I0ZjI4IDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL29vbV9raWxsLmMKQEAgLTUwMywxMCAmIzQzOzUwMywxNyBAQCBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQob29tX3JlYXBlcl93YWl0KTsKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9vbV9yZWFwZXJfbGlzdDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob29tX3JlYXBlcl9sb2NrKTsKIAotc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQomIzQzOy8qCiYjNDM7ICogQ2FsbGVkIHdpdGggbW1hcF9sb2NrIGhlbGQgZm9yIHJlYWQuICBSZXR1cm5zIHdpdGggaXQgc3RpbGwgaGVsZCBvbiAwCiYjNDM7ICogKGRvbmUpIG9yIC1FQlVTWSAocGFydCBjb3VsZCBub3QgYmUgcmVhcGVkLCB0cnkgYWdhaW4gbGF0ZXIpLCBhbmQgZHJvcHMKJiM0MzsgKiBpdCBvbmx5IG9uIC1FQUdBSU4sIHdoZW4gaXQgd2FzIGhhbmRlZCBvdmVyIHRvIGEgcXVldWVkIHdyaXRlciBhbmQgdGhlCiYjNDM7ICogY2FsbGVyIHNob3VsZCByZXRha2UgaXQgYW5kIHN0YXJ0IG92ZXIuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0JYm9vbCByZXQgPSB0cnVlOwomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHIsIGVuZDsKJiM0MzsJaW50IHJldCA9IDA7CiAJTUFfU1RBVEUobWFzLCAmYW1wO21tLSZndDttbV9tdCwgVUxPTkdfTUFYLCBVTE9OR19NQVgpOwogCiAJLyoKQEAgLTUzOCw4ICYjNDM7NTQ1LDI1IEBAIHN0YXRpYyBib29sIF9fb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAkJICogY291bnQgZWxldmF0ZWQgd2l0aG91dCBhIGdvb2QgcmVhc29uLgogCQkgKi8KIAkJaWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSB8fCAhKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fU0hBUkVEKSkgewotCQkJaWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hKSkKLQkJCQlyZXQgPSBmYWxzZTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFphcCBpbiAxRyBjaHVua3MgYW5kIGhhbmQgbW1hcF9sb2NrIG92ZXIgd2hlbmV2ZXIgYQomIzQzOwkJCSAqIHdyaXRlciBpcyBxdWV1ZWQgb24gaXQsIHNvIGl0IGRvZXMgbm90IHdhaXQgZm9yIHRoZQomIzQzOwkJCSAqIHdob2xlIHJlYXAuCiYjNDM7CQkJICovCiYjNDM7CQkJZW5kID0gdm1hLSZndDt2bV9lbmQ7CiYjNDM7CQkJd2hpbGUgKGVuZCAmZ3Q7IHZtYS0mZ3Q7dm1fc3RhcnQpIHsKJiM0MzsJCQkJYWRkciA9IG1heCh2bWEtJmd0O3ZtX3N0YXJ0LCBBTElHTl9ET1dOKGVuZCAtIDEsIFNaXzFHKSk7CiYjNDM7CQkJCWlmICh6YXBfdm1hX2Zvcl9yZWFwaW5nKHZtYSwgYWRkciwgZW5kKSkgewomIzQzOwkJCQkJcmV0ID0gLUVCVVNZOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KJiM0MzsJCQkJZW5kID0gYWRkcjsKJiM0MzsJCQkJaWYgKCFtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKJiM0MzsJCQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CQkJfQogCQl9CiAJfQogCkBAIC01NDksMTYgJiM0Mzs1NzMsMTcgQEAgc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogLyoKICAqIFJlYXBzIHRoZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBnaXZlbiB0YXNrLgogICoKLSAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzIGFuZCBmYWxzZSBpZiBub25lIG9yIHBhcnQgb2YgdGhlIGFkZHJlc3Mgc3BhY2UKLSAqIGhhcyBiZWVuIHJlY2xhaW1lZCBhbmQgdGhlIGNhbGxlciBzaG91bGQgcmV0cnkgbGF0ZXIuCiYjNDM7ICogUmV0dXJucyAwIHdoZW4gZG9uZSwgLUVBR0FJTiBpZiBtbWFwX2xvY2sgd2FzIGhhbmRlZCBvdmVyIHRvIGEgd3JpdGVyCiYjNDM7ICogYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHN0YXJ0IG92ZXIsIGFuZCAtRUJVU1kgaWYgbm9uZSBvciBwYXJ0IG9mIHRoZQomIzQzOyAqIGFkZHJlc3Mgc3BhY2UgaGFzIGJlZW4gcmVjbGFpbWVkIGFuZCB0aGUgY2FsbGVyIHNob3VsZCByZXRyeSBsYXRlci4KICAqLwotc3RhdGljIGJvb2wgb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiYjNDM7c3RhdGljIGludCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlib29sIHJldCA9IHRydWU7CiYjNDM7CWludCByZXQgPSAwOwogCiAJaWYgKCFtbWFwX3JlYWRfdHJ5bG9jayhtbSkpIHsKIAkJdHJhY2Vfc2tpcF90YXNrX3JlYXBpbmcodHNrLSZndDtwaWQpOwotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCS8qCkBAIC01NzYsNyAmIzQzOzYwMSw5IEBAIHN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiAJLyogZmFpbGVkIHRvIHJlYXAgcGFydCBvZiB0aGUgYWRkcmVzcyBzcGFjZS4gVHJ5IGFnYWluIGxhdGVyICovCiAJcmV0ID0gX19vb21fcmVhcF90YXNrX21tKG1tKTsKLQlpZiAoIXJldCkKJiM0MzsJaWYgKHJldCA9PSAtRUFHQUlOKQkvKiBoYW5kZWQgdGhlIGxvY2sgb3ZlciwgYWxyZWFkeSBkcm9wcGVkICovCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmV0KQogCQlnb3RvIG91dF9maW5pc2g7CiAKIAlwcl9pbmZvKCYjMzQ7b29tX3JlYXBlcjogcmVhcGVkIHByb2Nlc3MgJWQgKCVzKSwgbm93IGFub24tcnNzOiVsdWtCLCBmaWxlLXJzczolbHVrQiwgc2htZW0tcnNzOiVsdWtCXG4mIzM0OywKQEAgLTU5NSwxNSAmIzQzOzYyMiwxNSBAQCBzdGF0aWMgYm9vbCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKICNkZWZpbmUgTUFYX09PTV9SRUFQX1JFVFJJRVMgMTAKIHN0YXRpYyB2b2lkIG9vbV9yZWFwX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JaW50IGF0dGVtcHRzID0gMDsKJiM0MzsJaW50IGF0dGVtcHRzID0gMCwgcmV0OwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLSZndDtzaWduYWwtJmd0O29vbV9tbTsKIAotCS8qIFJldHJ5IHRoZSBtbWFwX3JlYWRfdHJ5bG9jayhtbSkgYSBmZXcgdGltZXMgKi8KLQl3aGlsZSAoYXR0ZW1wdHMmIzQzOyYjNDM7ICZsdDsgTUFYX09PTV9SRUFQX1JFVFJJRVMgJmFtcDsmYW1wOyAhb29tX3JlYXBfdGFza19tbSh0c2ssIG1tKSkKJiM0MzsJLyogUmV0cnkgdGhlIG1tYXBfcmVhZF90cnlsb2NrKG1tKSBhIGZldyB0aW1lczsgaGFuZGluZyB0aGUgbG9jayBvdmVyIGlzIG5vdCBhbiBhdHRlbXB0ICovCiYjNDM7CXdoaWxlICgocmV0ID0gb29tX3JlYXBfdGFza19tbSh0c2ssIG1tKSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgKHJldCA9PSAtRUFHQUlOIHx8ICYjNDM7JiM0MzthdHRlbXB0cyAmbHQ7IE1BWF9PT01fUkVBUF9SRVRSSUVTKSkKIAkJc2NoZWR1bGVfdGltZW91dF9pZGxlKEhaLzEwKTsKIAotCWlmIChhdHRlbXB0cyAmbHQ7PSBNQVhfT09NX1JFQVBfUkVUUklFUyB8fAotCSAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKQomIzQzOwlpZiAoIXJldCB8fCBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKQogCQlnb3RvIGRvbmU7CiAKIAlwcl9pbmZvKCYjMzQ7b29tX3JlYXBlcjogdW5hYmxlIHRvIHJlYXAgcGlkOiVkICglcylcbiYjMzQ7LApAQCAtMTIyNyw2ICYjNDM7MTI1NCw3IEBAIFNZU0NBTExfREVGSU5FMihwcm9jZXNzX21yZWxlYXNlLCBpbnQsIHBpZGZkLCB1bnNpZ25lZCBpbnQsIGZsYWdzKQogCWlmICghcmVhcCkKIAkJZ290byBkcm9wX21tOwogCiYjNDM7YWdhaW46CiAJaWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSkgewogCQlyZXQgPSAtRUlOVFI7CiAJCWdvdG8gZHJvcF9tbTsKQEAgLTEyMzUsOCAmIzQzOzEyNjMsMTUgQEAgU1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpCiAJICogQ2hlY2sgTU1GX09PTV9TS0lQIGFnYWluIHVuZGVyIG1tYXBfcmVhZF9sb2NrIHByb3RlY3Rpb24gdG8gZW5zdXJlCiAJICogcG9zc2libGUgY2hhbmdlIGluIGV4aXRfbW1hcCBpcyBzZWVuCiAJICovCi0JaWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pICZhbXA7JmFtcDsgIV9fb29tX3JlYXBfdGFza19tbShtbSkpCi0JCXJldCA9IC1FQUdBSU47CiYjNDM7CWlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSkgewomIzQzOwkJcmV0ID0gX19vb21fcmVhcF90YXNrX21tKG1tKTsKJiM0MzsJCWlmIChyZXQgPT0gLUVBR0FJTikgewkvKiBhIHdyaXRlciBnb3QgdGhlIGxvY2ssIHF1ZXVlIHVwIGFnYWluICovCiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJCQlnb3RvIGFnYWluOwomIzQzOwkJfQomIzQzOwkJaWYgKHJldCA9PSAtRUJVU1kpCiYjNDM7CQkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJfQogCW1tYXBfcmVhZF91bmxvY2sobW0pOwogCiBkcm9wX21tOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBvb21fcmVhcGVyYCBJbXByb3ZlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyB0aGUgbmVlZCBmb3IgS01TQU4gZnV6emluZy4gVGhlIGRlc2NyaXB0aW9uIGluZGljYXRlcyBhbiBvcHRpbWl6YXRpb24gdG8gYG9vbV9yZWFwZXJgIGFuZCBgcHJvY2Vzc19tcmVsZWFzZWAsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgaG93IG1lbW9yeSBpcyB6YXBwZWQuIFRoZSBjaGFuZ2UgcHJvcG9zZXMgemFwcGluZyBtZW1vcnkgaW4gMUdCIGNodW5rcyBpbnN0ZWFkIG9mIHRoZSBlbnRpcmUgVk1BIGF0IG9uY2UsIGFuZCBpdCBhdHRlbXB0cyB0byB5aWVsZCBgbW1hcF9sb2NrYCBpZiBhIHdyaXRlciBpcyBjb250ZW5kaW5nLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIG1pdGlnYXRlIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24gYW5kIGltcHJvdmUgcmVzcG9uc2l2ZW5lc3MgZHVyaW5nIE9PTSBzaXR1YXRpb25zLgoKRmlyc3QsIEkmIzM5O2xsIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoZSBjb2RlIGNoYW5nZXMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSB3aXRoaW4gYG1tL2ludGVybmFsLmhgIGFuZCBgbW0vbWVtb3J5LmNgLiBJIHNlZSB0aGF0IHRoZSBgemFwX3ZtYV9mb3JfcmVhcGluZ2AgZnVuY3Rpb24gc2lnbmF0dXJlIG5vdyBpbmNsdWRlcyBgc3RhcnRgIGFuZCBgZW5kYCBwYXJhbWV0ZXJzOgoKYGBgYwotaW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwomIzQzO2ludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAomIzQzOwkJCXVuc2lnbmVkIGxvbmcgZW5kKTsKYGBgCgpBbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyBpbiBgbW0vbWVtb3J5LmNgIGNvbmZpcm0gdGhpcy4gVGhlIGBtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdGAgY2FsbCBpcyB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGBzdGFydGAgYW5kIGBlbmRgIGFyZ3VtZW50cywgd2hpY2ggc3VnZ2VzdHMgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGFkYXB0ZWQgdG8gb3BlcmF0ZSBvbiByZWdpb25zIHdpdGhpbiB0aGUgVk1BLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCBjYWxsIHNpdGVzIGNvcnJlY3RseSB1c2UgYHN0YXJ0YCBhbmQgYGVuZGAgcGFyYW1ldGVycyB0byBkZXRlcm1pbmUgdGhlIGltcGFjdC4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV3IGBzdGFydGAgYW5kIGBlbmRgIGFyZ3VtZW50cyBhcmUgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiBjYWxscyB1c2UgdGhlIG5ldyBhcmd1bWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3phcF92bWFfZm9yX3JlYXBpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD01OTM9dm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9pbnRlcm5hbC5oLTU5NS1cdFx0dW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpO1xubW0vaW50ZXJuYWwuaDo1OTY6aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9pbnRlcm5hbC5oLTU5Ny1cdFx0XHR1bnNpZ25lZCBsb25nIGVuZCk7XG4tLVxubW0vbWVtb3J5LmM9MjE2OT1zdGF0aWMgdm9pZCBfX3phcF92bWFfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtb3J5LmMtMjIwOS0vKipcbm1tL21lbW9yeS5jOjIyMTA6ICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhIHJhbmdlIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xubW0vbWVtb3J5LmMtMjIxMS0gKiBAdm1hOiBUaGUgdm1hIHRvIHphcC5cbi0tXG5tbS9tZW1vcnkuYy0yMjE5LSAqL1xubW0vbWVtb3J5LmM6MjIyMDppbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL21lbW9yeS5jLTIyMjEtXHRcdFx0dW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vb29tX2tpbGwuYz01MTI9c3RhdGljIGludCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vb29tX2tpbGwuYy01NTUtXHRcdFx0XHRhZGRyID0gbWF4KHZtYS1cdTAwM2V2bV9zdGFydCwgQUxJR05fRE9XTihlbmQgLSAxLCBTWl8xRykpO1xubW0vb29tX2tpbGwuYzo1NTY6XHRcdFx0XHRpZiAoemFwX3ZtYV9mb3JfcmVhcGluZyh2bWEsIGFkZHIsIGVuZCkpIHtcbm1tL29vbV9raWxsLmMtNTU3LVx0XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYCBpbiBgbW0vbWVtb3J5LmNgKioKCk9rYXksIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgemFwX3ZtYV9mb3JfcmVhcGluZ2AgZnVuY3Rpb24gaW4gZGV0YWlsLiBUbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBJJiMzOTtsbCBzdGFydCBieSBsb29raW5nIGF0IGBtbS9tZW1vcnkuY2AgYW5kIHNwZWNpZmljYWxseSBwaW5wb2ludCBsaW5lIDIyMjAuIFRoYXQgc2hvdWxkIGJlIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgZnVsbCBkZWZpbml0aW9uLiBJJiMzOTttIGhvcGluZyB0aGF0IGJ5IHRyYWNpbmcgdGhyb3VnaCB0aGUgY29tcGxldGUgZnVuY3Rpb24sIEkgY2FuIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIG1lY2hhbmljcy4gVGhpcyBhcHByb2FjaCB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGFuYWx5emUgdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjEwOlx0ICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhIHJhbmdlIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xuMjIxMTpcdCAqIEB2bWE6IFRoZSB2bWEgdG8gemFwLlxuMjIxMjpcdCAqIEBzdGFydDogVGhlIGZpcnN0IGFkZHJlc3MgdG8gemFwLlxuMjIxMzpcdCAqIEBlbmQ6IE9uZSBwYXN0IHRoZSBsYXN0IGFkZHJlc3MgdG8gemFwLlxuMjIxNDpcdCAqXG4yMjE1Olx0ICogWmFwIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMgaW4gW0BzdGFydCwgQGVuZCkgb2YgdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nXG4yMjE2Olx0ICogZm9yIHVzZSBieSB0aGUgb29tIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxuMjIxNzpcdCAqXG4yMjE4Olx0ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgd2Ugd291bGQgaGF2ZSB0byBibG9jay5cbjIyMTk6XHQgKi9cbjIyMjA6XHRpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbjIyMjE6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZClcbjIyMjI6XHR7XG4yMjIzOlx0XHRzdHJ1Y3QgemFwX2RldGFpbHMgZGV0YWlscyA9IHtcbjIyMjQ6XHRcdFx0LnJlYXBpbmcgPSB0cnVlLFxuMjIyNTpcdFx0fTtcbjIyMjY6XHRcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4yMjI3Olx0XHRzdHJ1Y3QgbW11X2dhdGhlciB0bGI7XG4yMjI4Olx0XG4yMjI5Olx0XHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuMjIzMDpcdFx0XHRcdFx0c3RhcnQsIGVuZCk7XG4yMjMxOlx0XHR0bGJfZ2F0aGVyX21tdShcdTAwMjZ0bGIsIHZtYS1cdTAwM2V2bV9tbSk7XG4yMjMyOlx0XHRpZiAobW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbm9uYmxvY2soXHUwMDI2cmFuZ2UpKSB7XG4yMjMzOlx0XHRcdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4yMjM0Olx0XHRcdHJldHVybiAtRUJVU1k7XG4yMjM1Olx0XHR9XG4yMjM2Olx0XHRfX3phcF92bWFfcmFuZ2UoXHUwMDI2dGxiLCB2bWEsIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQsIFx1MDAyNmRldGFpbHMpO1xuMjIzNzpcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbjIyMzg6XHRcdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4yMjM5Olx0XHRyZXR1cm4gMDtcbjIyNDA6XHR9XG4yMjQxOlx0XG4yMjQyOlx0LyoqXG4yMjQzOlx0ICogdW5tYXBfdm1hcyAtIHVubWFwIGEgcmFuZ2Ugb2YgbWVtb3J5IGNvdmVyZWQgYnkgYSBsaXN0IG9mIHZtYSYjMzk7c1xuMjI0NDpcdCAqIEB0bGI6IGFkZHJlc3Mgb2YgdGhlIGNhbGxlciYjMzk7cyBzdHJ1Y3QgbW11X2dhdGhlclxuMjI0NTpcdCAqIEB1bm1hcDogVGhlIHVubWFwX2Rlc2NcbjIyNDY6XHQgKlxuMjI0NzpcdCAqIFVubWFwIGFsbCBwYWdlcyBpbiB0aGUgdm1hIGxpc3QuXG4yMjQ4Olx0ICpcbjIyNDk6XHQgKiBPbmx5IGFkZHJlc3NlcyBiZXR3ZWVuIGBzdGFydCYjMzk7IGFuZCBgZW5kJiMzOTsgd2lsbCBiZSB1bm1hcHBlZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY3NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1tL29vbV9raWxsLmNgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIE9PTSBraWxsZXImIzM5O3MgY29yZS4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbW0vb29tX2tpbGwuY2Agbm93LiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGRlY2lzaW9uLW1ha2luZyBoYXBwZW5zIOKAkyB3aGljaCBwcm9jZXNzIGdldHMgc2FjcmlmaWNlZCBhbmQgaG93IHdlIGhhbmRsZSB0aGUgYWZ0ZXJtYXRoLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgdGhlIHNlbGVjdGlvbiBhbGdvcml0aG0sIHRoZSBzY29yaW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgY3J1Y2lhbCBhc3BlY3RzIG9mIHByZXZlbnRpbmcgY2FzY2FkaW5nIGZhaWx1cmVzLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBpZiB0aGVyZSYjMzk7cyBiZWVuIGFueSByZWNlbnQgdHdlYWtpbmcgb2YgdGhlIGhldXJpc3RpY3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUmIzM5O3MgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIHRvIHBpbnBvaW50IHBvc3NpYmxlIGNvbnRlbnRpb24gcG9pbnRzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgc2lnbmFsIGRlbGl2ZXJ5IHdpdGhpbiB0aGlzIGNyaXRpY2FsIHBhdGguIEFueSByZWNlbnQgY2hhbmdlcyB0byBob3cgYG9vbV9iYWRuZXNzYCBpcyBjYWxjdWxhdGVkLCBvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG9vbV9raWxsX3Byb2Nlc3NgLCBhcmUgdG9wIG9mIG1pbmQuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL29vbV9raWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxMDpcdCAqIGNhbGxlciBzaG91bGQgcmV0YWtlIGl0IGFuZCBzdGFydCBvdmVyLlxuIDUxMTpcdCAqL1xuIDUxMjpcdHN0YXRpYyBpbnQgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIDUxMzpcdHtcbiA1MTQ6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIDUxNTpcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBlbmQ7XG4gNTE2Olx0XHRpbnQgcmV0ID0gMDtcbiA1MTc6XHRcdE1BX1NUQVRFKG1hcywgXHUwMDI2bW0tXHUwMDNlbW1fbXQsIFVMT05HX01BWCwgVUxPTkdfTUFYKTtcbiA1MTg6XHRcbiA1MTk6XHRcdC8qXG4gNTIwOlx0XHQgKiBUZWxsIGFsbCB1c2VycyBvZiBnZXRfdXNlci9jb3B5X2Zyb21fdXNlciBldGMuLi4gdGhhdCB0aGUgY29udGVudFxuIDUyMTpcdFx0ICogaXMgbm8gbG9uZ2VyIHN0YWJsZS4gTm8gYmFycmllcnMgcmVhbGx5IG5lZWRlZCBiZWNhdXNlIHVubWFwcGluZ1xuIDUyMjpcdFx0ICogc2hvdWxkIGltcGx5IGJhcnJpZXJzIGFscmVhZHkgYW5kIHRoZSByZWFkZXIgd291bGQgaGl0IGEgcGFnZSBmYXVsdFxuIDUyMzpcdFx0ICogaWYgaXQgc3R1bWJsZWQgb3ZlciBhIHJlYXBlZCBtZW1vcnkuXG4gNTI0Olx0XHQgKi9cbiA1MjU6XHRcdG1tX2ZsYWdzX3NldChNTUZfVU5TVEFCTEUsIG1tKTtcbiA1MjY6XHRcbiA1Mjc6XHRcdC8qXG4gNTI4Olx0XHQgKiBJdCBtaWdodCBzdGFydCByYWNpbmcgd2l0aCB0aGUgZHlpbmcgdGFzayBhbmQgY29tcGV0ZSBmb3Igc2hhcmVkXG4gNTI5Olx0XHQgKiByZXNvdXJjZXMgLSBlLmcuIHBhZ2UgdGFibGUgbG9jayBjb250ZW50aW9uIGhhcyBiZWVuIG9ic2VydmVkLlxuIDUzMDpcdFx0ICogUmVkdWNlIHRob3NlIHJhY2VzIGJ5IHJlYXBpbmcgdGhlIG9vbSB2aWN0aW0gZnJvbSB0aGUgb3RoZXIgZW5kXG4gNTMxOlx0XHQgKiBvZiB0aGUgYWRkcmVzcyBzcGFjZS5cbiA1MzI6XHRcdCAqL1xuIDUzMzpcdFx0bWFzX2Zvcl9lYWNoX3JldihcdTAwMjZtYXMsIHZtYSwgMCkge1xuIDUzNDpcdFx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fSFVHRVRMQnxWTV9QRk5NQVApKVxuIDUzNTpcdFx0XHRcdGNvbnRpbnVlO1xuIDUzNjpcdFxuIDUzNzpcdFx0XHQvKlxuIDUzODpcdFx0XHQgKiBPbmx5IGFub255bW91cyBwYWdlcyBoYXZlIGEgZ29vZCBjaGFuY2UgdG8gYmUgZHJvcHBlZFxuIDUzOTpcdFx0XHQgKiB3aXRob3V0IGFkZGl0aW9uYWwgc3RlcHMgd2hpY2ggd2UgY2Fubm90IGFmZm9yZCBhcyB3ZVxuIDU0MDpcdFx0XHQgKiBhcmUgT09NIGFscmVhZHkuXG4gNTQxOlx0XHRcdCAqXG4gNTQyOlx0XHRcdCAqIFdlIGRvIG5vdCBldmVuIGNhcmUgYWJvdXQgZnMgYmFja2VkIHBhZ2VzIGJlY2F1c2UgYWxsXG4gNTQzOlx0XHRcdCAqIHdoaWNoIGFyZSByZWNsYWltYWJsZSBoYXZlIGFscmVhZHkgYmVlbiByZWNsYWltZWQgYW5kXG4gNTQ0Olx0XHRcdCAqIHdlIGRvIG5vdCB3YW50IHRvIGJsb2NrIGV4aXRfbW1hcCBieSBrZWVwaW5nIG1tIHJlZlxuIDU0NTpcdFx0XHQgKiBjb3VudCBlbGV2YXRlZCB3aXRob3V0IGEgZ29vZCByZWFzb24uXG4gNTQ2Olx0XHRcdCAqL1xuIDU0NzpcdFx0XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKSB7XG4gNTQ4Olx0XHRcdFx0LypcbiA1NDk6XHRcdFx0XHQgKiBaYXAgaW4gMUcgY2h1bmtzIGFuZCBoYW5kIG1tYXBfbG9jayBvdmVyIHdoZW5ldmVyIGFcbiA1NTA6XHRcdFx0XHQgKiB3cml0ZXIgaXMgcXVldWVkIG9uIGl0LCBzbyBpdCBkb2VzIG5vdCB3YWl0IGZvciB0aGVcbiA1NTE6XHRcdFx0XHQgKiB3aG9sZSByZWFwLlxuIDU1MjpcdFx0XHRcdCAqL1xuIDU1MzpcdFx0XHRcdGVuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4gNTU0Olx0XHRcdFx0d2hpbGUgKGVuZCBcdTAwM2Ugdm1hLVx1MDAzZXZtX3N0YXJ0KSB7XG4gNTU1Olx0XHRcdFx0XHRhZGRyID0gbWF4KHZtYS1cdTAwM2V2bV9zdGFydCwgQUxJR05fRE9XTihlbmQgLSAxLCBTWl8xRykpO1xuIDU1NjpcdFx0XHRcdFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hLCBhZGRyLCBlbmQpKSB7XG4gNTU3Olx0XHRcdFx0XHRcdHJldCA9IC1FQlVTWTtcbiA1NTg6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNTU5Olx0XHRcdFx0XHR9XG4gNTYwOlx0XHRcdFx0XHRlbmQgPSBhZGRyO1xuIDU2MTpcdFx0XHRcdFx0aWYgKCFtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKSlcbiA1NjI6XHRcdFx0XHRcdFx0Y29udGludWU7XG4gNTYzOlx0XG4gNTY0Olx0XHRcdFx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiA1NjU6XHRcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIDU2NjpcdFx0XHRcdH1cbiA1Njc6XHRcdFx0fVxuIDU2ODpcdFx0fVxuIDU2OTpcdFxuIDU3MDpcdFx0cmV0dXJuIHJldDtcbiA1NzE6XHR9XG4gNTcyOlx0XG4gNTczOlx0LypcbiA1NzQ6XHQgKiBSZWFwcyB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgZ2l2ZW4gdGFzay5cbiA1NzU6XHQgKlxuIDU3NjpcdCAqIFJldHVybnMgMCB3aGVuIGRvbmUsIC1FQUdBSU4gaWYgbW1hcF9sb2NrIHdhcyBoYW5kZWQgb3ZlciB0byBhIHdyaXRlclxuIDU3NzpcdCAqIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBzdGFydCBvdmVyLCBhbmQgLUVCVVNZIGlmIG5vbmUgb3IgcGFydCBvZiB0aGVcbiA1Nzg6XHQgKiBhZGRyZXNzIHNwYWNlIGhhcyBiZWVuIHJlY2xhaW1lZCBhbmQgdGhlIGNhbGxlciBzaG91bGQgcmV0cnkgbGF0ZXIuXG4gNTc5Olx0ICovXG4gNTgwOlx0c3RhdGljIGludCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiA1ODE6XHR7XG4gNTgyOlx0XHRpbnQgcmV0ID0gMDtcbiA1ODM6XHRcbiA1ODQ6XHRcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sobW0pKSB7XG4gNTg1Olx0XHRcdHRyYWNlX3NraXBfdGFza19yZWFwaW5nKHRzay1cdTAwM2VwaWQpO1xuIDU4NjpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDU4NzpcdFx0fVxuIDU4ODpcdFxuIDU4OTpcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEzNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG1tL29vbV9raWxsLmNgIGZvciBPT00gRGlhZ25vc3RpY3MqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBPT00gc2l0dWF0aW9uLCBhbmQgSSYjMzk7bSB0aGlua2luZywgJiMzNDtMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZSBoZWFydCBvZiB0aGUgT09NIGtpbGxlciBpdHNlbGYuJiMzNDsgSSYjMzk7dmUgZ290IGEgc3Ryb25nIHN1c3BpY2lvbiB0aGF0IHRoZSBjb3JlIGlzc3VlIGlzIGdvaW5nIHRvIGJlIHJldmVhbGVkIHdpdGhpbiBgbW0vb29tX2tpbGwuY2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IHplcm9pbmcgaW4gb24gbGluZXMgNjIwIHRocm91Z2ggNjQ1LiBUaGF0IHNlY3Rpb24gaXMgdXN1YWxseSBhIGNydWNpYWwgYXJlYSBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggcHJvY2Vzc2VzIGFyZSBzZWxlY3RlZCBmb3IgdGVybWluYXRpb24sIGFuZCBob3cgdGhlIGtlcm5lbCBtYWtlcyB0aG9zZSBjcml0aWNhbCBkZWNpc2lvbnMgZHVyaW5nIG1lbW9yeSBwcmVzc3VyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0IHNlY3Rpb24gaGFzIHRoZSBkZXRhaWxzIEkgYW0gbG9va2luZyBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vb29tX2tpbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjIwOlx0fVxuIDYyMTpcdFxuIDYyMjpcdCNkZWZpbmUgTUFYX09PTV9SRUFQX1JFVFJJRVMgMTBcbiA2MjM6XHRzdGF0aWMgdm9pZCBvb21fcmVhcF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIDYyNDpcdHtcbiA2MjU6XHRcdGludCBhdHRlbXB0cyA9IDAsIHJldDtcbiA2MjY6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLVx1MDAzZXNpZ25hbC1cdTAwM2Vvb21fbW07XG4gNjI3Olx0XG4gNjI4Olx0XHQvKiBSZXRyeSB0aGUgbW1hcF9yZWFkX3RyeWxvY2sobW0pIGEgZmV3IHRpbWVzOyBoYW5kaW5nIHRoZSBsb2NrIG92ZXIgaXMgbm90IGFuIGF0dGVtcHQgKi9cbiA2Mjk6XHRcdHdoaWxlICgocmV0ID0gb29tX3JlYXBfdGFza19tbSh0c2ssIG1tKSkgXHUwMDI2XHUwMDI2XG4gNjMwOlx0XHQgICAgICAgKHJldCA9PSAtRUFHQUlOIHx8ICYjNDM7JiM0MzthdHRlbXB0cyBcdTAwM2MgTUFYX09PTV9SRUFQX1JFVFJJRVMpKVxuIDYzMTpcdFx0XHRzY2hlZHVsZV90aW1lb3V0X2lkbGUoSFovMTApO1xuIDYzMjpcdFxuIDYzMzpcdFx0aWYgKCFyZXQgfHwgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSlcbiA2MzQ6XHRcdFx0Z290byBkb25lO1xuIDYzNTpcdFxuIDYzNjpcdFx0cHJfaW5mbyhcJiMzNDtvb21fcmVhcGVyOiB1bmFibGUgdG8gcmVhcCBwaWQ6JWQgKCVzKVxcblwmIzM0OyxcbiA2Mzc6XHRcdFx0dGFza19waWRfbnIodHNrKSwgdHNrLVx1MDAzZWNvbW0pO1xuIDYzODpcdFx0c2NoZWRfc2hvd190YXNrKHRzayk7XG4gNjM5Olx0XHRkZWJ1Z19zaG93X2FsbF9sb2NrcygpO1xuIDY0MDpcdFxuIDY0MTpcdGRvbmU6XG4gNjQyOlx0XHR0c2stXHUwMDNlb29tX3JlYXBlcl9saXN0ID0gTlVMTDtcbiA2NDM6XHRcbiA2NDQ6XHRcdC8qXG4gNjQ1Olx0XHQgKiBIaWRlIHRoaXMgbW0gZnJvbSBPT00ga2lsbGVyIGJlY2F1c2UgaXQgaGFzIGJlZW4gZWl0aGVyIHJlYXBlZCBvclxuIDY0NjpcdFx0ICogc29tZWJvZHkgY2FuJiMzOTt0IGNhbGwgbW1hcF93cml0ZV91bmxvY2sobW0pLlxuIDY0NzpcdFx0ICovXG4gNjQ4Olx0XHRtbV9mbGFnc19zZXQoTU1GX09PTV9TS0lQLCBtbSk7XG4gNjQ5Olx0XG4gNjUwOlx0XHQvKiBEcm9wIGEgcmVmZXJlbmNlIHRha2VuIGJ5IHF1ZXVlX29vbV9yZWFwZXIgKi9cbiA2NTE6XHRcdHB1dF90YXNrX3N0cnVjdCh0c2spO1xuIDY1MjpcdH1cbiA2NTM6XHRcbiA2NTQ6XHRzdGF0aWMgaW50IG9vbV9yZWFwZXIodm9pZCAqdW51c2VkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTE1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gT09NIEtpbGxlciBCZWhhdmlvcioqCgpPa2F5LCBJJiMzOTttIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgd2l0aCB0aGlzIE9PTSBraWxsZXIgaW52ZXN0aWdhdGlvbiwgYW5kIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLiBJJiMzOTt2ZSBiZWVuIHRyYWNpbmcgdGhlIGtpbGwgc2lnbmFscyBhbmQgbWVtb3J5IHByZXNzdXJlIGJ1dCBJJiMzOTttIGp1c3QgZ2V0dGluZyBzdGFydGVkLiBJIGtub3cgdGhlIE9PTSBraWxsZXIgaGFzIGNvbXBsZXggZGVjaXNpb24tbWFraW5nLCBhbmQgSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUga2VybmVsIGRlY2lkZXMgd2hhdCB0byBhY3R1YWxseSAqcmVsZWFzZSogd2hlbiBpdCBnZXRzIGRlc3BlcmF0ZS4gSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgem9vbSBpbiBvbiB0aGUgYHByb2Nlc3NfbXJlbGVhc2VgIGZ1bmN0aW9uIG5vdywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEyNTAgaW4gYG1tL29vbV9raWxsLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWMgbWVtb3J5IHJlbGVhc2UgbWVjaGFuaXNtcyBpbiBwbGF5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggcG90ZW50aWFsIG1lbW9yeSByZWxlYXNlcy4gSSYjMzk7bSBob3BpbmcgSSBjYW4gY29ycmVsYXRlIHRoZSBmdW5jdGlvbnMgdGhlcmUgd2l0aCBteSB0ZXN0IG1lbW9yeSBsb2FkcyB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgT09NIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL29vbV9raWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDA6XHRcdH1cbjEyNDE6XHRcbjEyNDI6XHRcdG1tID0gcC1cdTAwM2VtbTtcbjEyNDM6XHRcdG1tZ3JhYihtbSk7XG4xMjQ0Olx0XG4xMjQ1Olx0XHRpZiAodGFza193aWxsX2ZyZWVfbWVtKHApKVxuMTI0NjpcdFx0XHRyZWFwID0gdHJ1ZTtcbjEyNDc6XHRcdGVsc2Uge1xuMTI0ODpcdFx0XHQvKiBFcnJvciBvbmx5IGlmIHRoZSB3b3JrIGhhcyBub3QgYmVlbiBkb25lIGFscmVhZHkgKi9cbjEyNDk6XHRcdFx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVxuMTI1MDpcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4xMjUxOlx0XHR9XG4xMjUyOlx0XHR0YXNrX3VubG9jayhwKTtcbjEyNTM6XHRcbjEyNTQ6XHRcdGlmICghcmVhcClcbjEyNTU6XHRcdFx0Z290byBkcm9wX21tO1xuMTI1NjpcdFxuMTI1NzpcdGFnYWluOlxuMTI1ODpcdFx0aWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSkge1xuMTI1OTpcdFx0XHRyZXQgPSAtRUlOVFI7XG4xMjYwOlx0XHRcdGdvdG8gZHJvcF9tbTtcbjEyNjE6XHRcdH1cbjEyNjI6XHRcdC8qXG4xMjYzOlx0XHQgKiBDaGVjayBNTUZfT09NX1NLSVAgYWdhaW4gdW5kZXIgbW1hcF9yZWFkX2xvY2sgcHJvdGVjdGlvbiB0byBlbnN1cmVcbjEyNjQ6XHRcdCAqIHBvc3NpYmxlIGNoYW5nZSBpbiBleGl0X21tYXAgaXMgc2VlblxuMTI2NTpcdFx0ICovXG4xMjY2Olx0XHRpZiAoIW1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBtbSkpIHtcbjEyNjc6XHRcdFx0cmV0ID0gX19vb21fcmVhcF90YXNrX21tKG1tKTtcbjEyNjg6XHRcdFx0aWYgKHJldCA9PSAtRUFHQUlOKSB7XHQvKiBhIHdyaXRlciBnb3QgdGhlIGxvY2ssIHF1ZXVlIHVwIGFnYWluICovXG4xMjY5Olx0XHRcdFx0cmV0ID0gMDtcbjEyNzA6XHRcdFx0XHRnb3RvIGFnYWluO1xuMTI3MTpcdFx0XHR9XG4xMjcyOlx0XHRcdGlmIChyZXQgPT0gLUVCVVNZKVxuMTI3MzpcdFx0XHRcdHJldCA9IC1FQUdBSU47XG4xMjc0Olx0XHR9XG4xMjc1Olx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbjEyNzY6XHRcbjEyNzc6XHRkcm9wX21tOlxuMTI3ODpcdFx0bW1kcm9wKG1tKTtcbjEyNzk6XHRwdXRfdGFzazpcbjEyODA6XHRcdHB1dF90YXNrX3N0cnVjdCh0YXNrKTtcbjEyODE6XHRcdHJldHVybiByZXQ7XG4xMjgyOlx0I2Vsc2VcbjEyODM6XHRcdHJldHVybiAtRU5PU1lTO1xuMTI4NDpcdCNlbmRpZiAvKiBDT05GSUdfTU1VICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3ODUKCQkJCQkJCW91dHB1dDogMjM3CgkJCQkJCQl0aG91Z2h0czogMTIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSZWFzb25pbmc6IE9PTSBSZWFwZXIgYW5kIFZNQSBaYXBwaW5nIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgdGVsbHMgbWUgdGhhdCB0aGlzIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBPT00gcmVhcGVyIGFuZCB0aGUgVk1BIHphcHBpbmcgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYF9fb29tX3JlYXBfdGFza19tbWAgYW5kIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYC4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgdG8gbWFrZSB0aGUgcmVhcGluZyBwcm9jZXNzIG1vcmUgZWZmaWNpZW50IGFuZCBsZXNzIHByb25lIHRvIGJsb2NraW5nLCBwYXJ0aWN1bGFybHkgaW4gdGhlIHByZXNlbmNlIG9mIGNvbnRlbnRpb24gb24gdGhlIGBtbWFwX2xvY2tgLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUgaGF2ZSBiZWVuIHNvbWUgcmV0dXJuIHZhbHVlIGFuZCBlcnJvciBoYW5kbGluZyBpbXByb3ZlbWVudHMgaW4gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gVGhlIGNodW5raW5nIG9mIHRoZSBWTUEgcmVhcGluZyB0byAxR0IgaXMgdGhlIHNpZ25pZmljYW50IGNoYW5nZSB0aGF0IGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQuCgpNeSBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRmlyc3QsIHRoZSBgemFwX3ZtYV9mb3JfcmVhcGluZ2AgZnVuY3Rpb24gbG9va3MgbGlrZSBpdOKAmXMgYmVpbmcgbWFkZSBzYWZlci4gSXQgbm93IHRha2VzIGV4cGxpY2l0IGBzdGFydGAgYW5kIGBlbmRgIGJvdW5kcywgaW5pdGlhbGl6ZXMgYSBgemFwX2RldGFpbHNgIHN0cnVjdCwgc2V0cyB1cCBhbiBgbW11X25vdGlmaWVyX3JhbmdlYCwgYW5kIGNhbGxzIGEgc2VyaWVzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCAqbm90aGluZyogaW4gdGhpcyBzZXF1ZW5jZSB0b3VjaGVzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIHRoZSB2YXJpYWJsZXMgdXNlZCwgbGlrZSBgZGV0YWlsc2AgYW5kIGByYW5nZWAsIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLgoKSW4gYF9fb29tX3JlYXBfdGFza19tbWAsIHRoZSBsb29waW5nIHN0cmF0ZWd5IGlzIGNoYW5naW5nLiBJbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBtZXRob2QsIHdlIGFyZSBsb29waW5nIGRvd253YXJkcyBpbiAxR0IgY2h1bmtzIGNoZWNraW5nIGZvciBgbW1hcF9sb2NrX2lzX2NvbnRlbmRlZGAuIElmIGl0JiMzOTtzIGNvbnRlbmRlZCwgdGhlIGxvY2sgaXMgZHJvcHBlZCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zLiBBbGwgbG9jYWwgdmFyaWFibGVzIGhlcmUgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFdlJiMzOTtyZSBub3QgYWxsb2NhdGluZyBhbnl0aGluZyBuZXcsIGFuZCBub3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIGEgbWFqb3IgcG9pbnQgb2YgY29uc2lkZXJhdGlvbiB3aGVuIHRoaW5raW5nIGFib3V0IGxlYWtzLiBUaGUgc2FtZSBwYXR0ZXJuIGNvbnRpbnVlcyBpbiBgb29tX3JlYXBfdGFza19tbWAsIHdoZXJlIHdlIGhhdmUgYW4gYGludGAgcmV0dXJuIHZhbHVlIGFuZCBpbml0aWFsaXplZCBgcmV0YCB2YXJpYWJsZS4gRmluYWxseSwgdGhlIHJldHJ5IGhhbmRsaW5nIGluIGBvb21fcmVhcF90YXNrYCBhbmQgdGhlIHJlYWNxdWlzaXRpb24gb2YgdGhlIGxvY2sgaW4gYHByb2Nlc3NfbXJlbGVhc2VgIGFyZSBjYXJlZnVsbHkgc3RydWN0dXJlZC4KClNvLCBhbSBJIHNlZWluZyBhbnl0aGluZyB0aGF0IGp1bXBzIG91dCBhcyBhIEtNU0FOIGNvbmNlcm4/IExldCBtZSByZXZpZXcgdGhlIHF1ZXN0aW9uczoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBObywgbm90aGluZyYjMzk7cyBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGF04oCZcyBhIGdvb2Qgc2lnbi4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIEFic29sdXRlbHkgbm90LiBBbGwgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLgozLiAgKipOZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgYmVpbmcgbWFkZS4KNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGE/KiogVGhpcyBpcyB6YXBwaW5nIHBhZ2UgdGFibGUgZW50cmllcy4gTm90IGFwcGxpY2FibGUuCgpUaGUgYXJlYXMgb2YgY29uY2VybiBhcmUgbW9yZSBhcm91bmQgcG90ZW50aWFsOgoKKiAgIExvY2tpbmcgaXNzdWVzOiBEcm9wcGVkIGxvY2tzIHZzLiBoZWxkIGxvY2tzLCBkZWFkbG9ja3MsIGxvY2sgY29udGVudGlvbi4gVGhlc2Ugc2hvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQLgoqICAgVk1BIGl0ZXJhdG9yIC8gcmFjZSBjb25kaXRpb25zOiBDb3VsZCB0aGUgVk1BIGJlIG1vZGlmaWVkIHdoaWxlIHRoZSBsb2NrIGlzIGRyb3BwZWQ/IFJldHVybmluZyBgLUVBR0FJTmAgYW5kIHJlc3RhcnRpbmcgZnJvbSBzY3JhdGNoIHNob3VsZCBoYW5kbGUgaXQuIEtBU0FOL0xPQ0tERVAvZ2VuZXJhbCBrZXJuZWwgYXNzZXJ0cyBzaG91bGQgY2F0Y2ggaXQuCiogICBBcml0aG1ldGljIG9yIGluZmluaXRlIGxvb3BzIGZyb20gYSBicm9rZW4gYGVuZGAvYGFkZHJgIGNhbGN1bGF0aW9uLgoKSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyAqbm90KiBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIHdvdWxkbiYjMzk7dCBjYXRjaCBhbnl0aGluZyB1bmlxdWUgaGVyZS4gTE9DS0RFUCBhbmQgS0FTQU4gYXJlIG1vcmUgYXBwcm9wcmlhdGUuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuCgpJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSByZWFwZXIgbG9naWMgaW4gbW0vb29tX2tpbGwuYyBhbmQgbW0vbWVtb3J5LmMgc28gdGhhdCBWTUFzIGFyZSB6YXBwZWQgaW4gMUdCIGNodW5rcywgYWxsb3dpbmcgbW1hcF9sb2NrIHRvIGJlIHlpZWxkZWQgdG8gd2FpdGluZyB3cml0ZXJzIHVwb24gY29udGVudGlvbi4gSXQgYWxzbyB1cGRhdGVzIGVycm9yIGhhbmRsaW5nIGFjcm9zcyB6YXBfdm1hX2Zvcl9yZWFwaW5nLCBfX29vbV9yZWFwX3Rhc2tfbW0sIG9vbV9yZWFwX3Rhc2ssIGFuZCB0aGUgcHJvY2Vzc19tcmVsZWFzZSBzeXNjYWxsLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgKGFkZHIsIGVuZCwgcmV0LCBhdHRlbXB0cykgYXJlIHNjYWxhciB0eXBlcyBhbmQgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb3IgYXNzaWduZWQgcHJpb3IgdG8gdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IGhlYXAvc3RhY2sgYnVmZmVycywgZG9lcyBub3QgY29weSBhbnkgZGF0YSBvciBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzIGFmZmVjdGluZyByZWFkcyBvZiBtZW1vcnkuIEFueSBwb3RlbnRpYWwgZGVmZWN0cyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgaW52b2x2ZSBsb2NrIG1hbmFnZW1lbnQsIGxvY2sgY29udGVudGlvbiwgVk1BIGl0ZXJhdGlvbiwgb3IgcGFnZSB0YWJsZSB0ZWFyZG93biwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00gcmVhcGVyIGxvZ2ljIGluIG1tL29vbV9raWxsLmMgYW5kIG1tL21lbW9yeS5jIHNvIHRoYXQgVk1BcyBhcmUgemFwcGVkIGluIDFHQiBjaHVua3MsIGFsbG93aW5nIG1tYXBfbG9jayB0byBiZSB5aWVsZGVkIHRvIHdhaXRpbmcgd3JpdGVycyB1cG9uIGNvbnRlbnRpb24uIEl0IGFsc28gdXBkYXRlcyBlcnJvciBoYW5kbGluZyBhY3Jvc3MgemFwX3ZtYV9mb3JfcmVhcGluZywgX19vb21fcmVhcF90YXNrX21tLCBvb21fcmVhcF90YXNrLCBhbmQgdGhlIHByb2Nlc3NfbXJlbGVhc2Ugc3lzY2FsbC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChhZGRyLCBlbmQsIHJldCwgYXR0ZW1wdHMpIGFyZSBzY2FsYXIgdHlwZXMgYW5kIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHByaW9yIHRvIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBoZWFwL3N0YWNrIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgb3Igc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocyBhZmZlY3RpbmcgcmVhZHMgb2YgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIGludm9sdmUgbG9jayBtYW5hZ2VtZW50LCBsb2NrIGNvbnRlbnRpb24sIFZNQSBpdGVyYXRpb24sIG9yIHBhZ2UgdGFibGUgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjAyLjA5Nzk4MzczOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTA4MzA0ODA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNTVVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6YXBfdm1hX2Zvcl9yZWFwaW5nXCIsXG4gICAgXCJfX29vbV9yZWFwX3Rhc2tfbW1cIixcbiAgICBcIm9vbV9yZWFwX3Rhc2tfbW1cIixcbiAgICBcIm9vbV9yZWFwX3Rhc2tcIixcbiAgICBcIl9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT09NIHJlYXBlciBsb2dpYyBpbiBtbS9vb21fa2lsbC5jIGFuZCBtbS9tZW1vcnkuYyBzbyB0aGF0IFZNQXMgYXJlIHphcHBlZCBpbiAxR0IgY2h1bmtzLCBhbGxvd2luZyBtbWFwX2xvY2sgdG8gYmUgeWllbGRlZCB0byB3YWl0aW5nIHdyaXRlcnMgdXBvbiBjb250ZW50aW9uLiBJdCBhbHNvIHVwZGF0ZXMgZXJyb3IgaGFuZGxpbmcgYWNyb3NzIHphcF92bWFfZm9yX3JlYXBpbmcsIF9fb29tX3JlYXBfdGFza19tbSwgb29tX3JlYXBfdGFzaywgYW5kIHRoZSBwcm9jZXNzX21yZWxlYXNlIHN5c2NhbGwuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChhZGRyLCBlbmQsIHJldCwgYXR0ZW1wdHMpIGFyZSBzY2FsYXIgdHlwZXMgYW5kIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHByaW9yIHRvIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBoZWFwL3N0YWNrIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgb3Igc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocyBhZmZlY3RpbmcgcmVhZHMgb2YgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIGludm9sdmUgbG9jayBtYW5hZ2VtZW50LCBsb2NrIGNvbnRlbnRpb24sIFZNQSBpdGVyYXRpb24sIG9yIHBhZ2UgdGFibGUgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBWTUEgdW5tYXBwaW5nIGxvZ2ljIGZvciBPT00gcmVhcGluZyBhbmQgdGhlIHByb2Nlc3NfbXJlbGVhc2Ugc3lzY2FsbCwgc3BsaXR0aW5nIFZNQSB6YXBwaW5nIGludG8gMUdCIGNodW5rcyBhbmQgeWllbGRpbmcgbW1hcF9sb2NrIHdoZW4gY29udGVuZGVkLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29udHJvbCBmbG93IGFuZCBsb2NraW5nIHNlbWFudGljcyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NrIGludmVyc2lvbnMsIG9yIHN0YXRlIGluY29uc2lzdGVuY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjAyLjA5Nzk4ODI3OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzMzE0Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2FiZmEwM2I4MTIzZDljMjllNTIzYTg0MzNjY2UxNDFkYjk0YWViY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAxMjo0MTowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDA1MTc5YzRiMjA5MGUuLjdhYzE3MjhhNTdjMjkgMTAwNjQ0XFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxcbisrKyBiL21tL2ludGVybmFsLmhcXG5AQCAtNTkzLDcgKzU5Myw4IEBAIHN0cnVjdCB6YXBfZGV0YWlscztcXG4gdm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4gXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpO1xcbi1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuK2ludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCk7XFxuIGludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHQgICBnZnBfdCBnZnApO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IDkyNjI3NmQ0MTkyMDIuLjI1YzM1YTI4YTM5ZDEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC0yMjA3LDE1ICsyMjA3LDE4IEBAIHN0YXRpYyB2b2lkIF9femFwX3ZtYV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIHphcF92bWFfZm9yX3JlYXBpbmcgLSB6YXAgYWxsIHBhZ2UgdGFibGUgZW50cmllcyBpbiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmdcXG4rICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhIHJhbmdlIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xcbiAgKiBAdm1hOiBUaGUgdm1hIHRvIHphcC5cXG4rICogQHN0YXJ0OiBUaGUgZmlyc3QgYWRkcmVzcyB0byB6YXAuXFxuKyAqIEBlbmQ6IE9uZSBwYXN0IHRoZSBsYXN0IGFkZHJlc3MgdG8gemFwLlxcbiAgKlxcbi0gKiBaYXAgYWxsIHBhZ2UgdGFibGUgZW50cmllcyBpbiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmcgZm9yIHVzZSBieSB0aGUgb29tXFxuLSAqIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxcbisgKiBaYXAgdGhlIHBhZ2UgdGFibGUgZW50cmllcyBpbiBbQHN0YXJ0LCBAZW5kKSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmdcXG4rICogZm9yIHVzZSBieSB0aGUgb29tIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxcbiAgKlxcbiAgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiB3ZSB3b3VsZCBoYXZlIHRvIGJsb2NrLlxcbiAgKi9cXG4taW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuK2ludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZClcXG4ge1xcbiBcXHRzdHJ1Y3QgemFwX2RldGFpbHMgZGV0YWlscyA9IHtcXG4gXFx0XFx0LnJlYXBpbmcgPSB0cnVlLFxcbkBAIC0yMjI0LDcgKzIyMjcsNyBAQCBpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xcbiBcXG4gXFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbi1cXHRcXHRcXHRcXHR2bWEtXFx1MDAzZXZtX3N0YXJ0LCB2bWEtXFx1MDAzZXZtX2VuZCk7XFxuK1xcdFxcdFxcdFxcdHN0YXJ0LCBlbmQpO1xcbiBcXHR0bGJfZ2F0aGVyX21tdShcXHUwMDI2dGxiLCB2bWEtXFx1MDAzZXZtX21tKTtcXG4gXFx0aWYgKG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X25vbmJsb2NrKFxcdTAwMjZyYW5nZSkpIHtcXG4gXFx0XFx0dGxiX2ZpbmlzaF9tbXUoXFx1MDAyNnRsYik7XFxuZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jXFxuaW5kZXggNWQ0OGJkODYyYzI3Yi4uY2VlMGEwZjdiNGYyOCAxMDA2NDRcXG4tLS0gYS9tbS9vb21fa2lsbC5jXFxuKysrIGIvbW0vb29tX2tpbGwuY1xcbkBAIC01MDMsMTAgKzUwMywxNyBAQCBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQob29tX3JlYXBlcl93YWl0KTtcXG4gc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb29tX3JlYXBlcl9saXN0O1xcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG9vbV9yZWFwZXJfbG9jayk7XFxuIFxcbi1zdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuKy8qXFxuKyAqIENhbGxlZCB3aXRoIG1tYXBfbG9jayBoZWxkIGZvciByZWFkLiAgUmV0dXJucyB3aXRoIGl0IHN0aWxsIGhlbGQgb24gMFxcbisgKiAoZG9uZSkgb3IgLUVCVVNZIChwYXJ0IGNvdWxkIG5vdCBiZSByZWFwZWQsIHRyeSBhZ2FpbiBsYXRlciksIGFuZCBkcm9wc1xcbisgKiBpdCBvbmx5IG9uIC1FQUdBSU4sIHdoZW4gaXQgd2FzIGhhbmRlZCBvdmVyIHRvIGEgcXVldWVkIHdyaXRlciBhbmQgdGhlXFxuKyAqIGNhbGxlciBzaG91bGQgcmV0YWtlIGl0IGFuZCBzdGFydCBvdmVyLlxcbisgKi9cXG4rc3RhdGljIGludCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIHtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuLVxcdGJvb2wgcmV0ID0gdHJ1ZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyLCBlbmQ7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXHRNQV9TVEFURShtYXMsIFxcdTAwMjZtbS1cXHUwMDNlbW1fbXQsIFVMT05HX01BWCwgVUxPTkdfTUFYKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTUzOCw4ICs1NDUsMjUgQEAgc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXHRcXHQgKiBjb3VudCBlbGV2YXRlZCB3aXRob3V0IGEgZ29vZCByZWFzb24uXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NIQVJFRCkpIHtcXG4tXFx0XFx0XFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hKSlcXG4tXFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFphcCBpbiAxRyBjaHVua3MgYW5kIGhhbmQgbW1hcF9sb2NrIG92ZXIgd2hlbmV2ZXIgYVxcbitcXHRcXHRcXHQgKiB3cml0ZXIgaXMgcXVldWVkIG9uIGl0LCBzbyBpdCBkb2VzIG5vdCB3YWl0IGZvciB0aGVcXG4rXFx0XFx0XFx0ICogd2hvbGUgcmVhcC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGVuZCA9IHZtYS1cXHUwMDNldm1fZW5kO1xcbitcXHRcXHRcXHR3aGlsZSAoZW5kIFxcdTAwM2Ugdm1hLVxcdTAwM2V2bV9zdGFydCkge1xcbitcXHRcXHRcXHRcXHRhZGRyID0gbWF4KHZtYS1cXHUwMDNldm1fc3RhcnQsIEFMSUdOX0RPV04oZW5kIC0gMSwgU1pfMUcpKTtcXG4rXFx0XFx0XFx0XFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hLCBhZGRyLCBlbmQpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0XFx0ZW5kID0gYWRkcjtcXG4rXFx0XFx0XFx0XFx0aWYgKCFtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKSlcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC01NDksMTYgKzU3MywxNyBAQCBzdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIC8qXFxuICAqIFJlYXBzIHRoZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBnaXZlbiB0YXNrLlxcbiAgKlxcbi0gKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcyBhbmQgZmFsc2UgaWYgbm9uZSBvciBwYXJ0IG9mIHRoZSBhZGRyZXNzIHNwYWNlXFxuLSAqIGhhcyBiZWVuIHJlY2xhaW1lZCBhbmQgdGhlIGNhbGxlciBzaG91bGQgcmV0cnkgbGF0ZXIuXFxuKyAqIFJldHVybnMgMCB3aGVuIGRvbmUsIC1FQUdBSU4gaWYgbW1hcF9sb2NrIHdhcyBoYW5kZWQgb3ZlciB0byBhIHdyaXRlclxcbisgKiBhbmQgdGhlIGNhbGxlciBzaG91bGQgc3RhcnQgb3ZlciwgYW5kIC1FQlVTWSBpZiBub25lIG9yIHBhcnQgb2YgdGhlXFxuKyAqIGFkZHJlc3Mgc3BhY2UgaGFzIGJlZW4gcmVjbGFpbWVkIGFuZCB0aGUgY2FsbGVyIHNob3VsZCByZXRyeSBsYXRlci5cXG4gICovXFxuLXN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbitzdGF0aWMgaW50IG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiB7XFxuLVxcdGJvb2wgcmV0ID0gdHJ1ZTtcXG4rXFx0aW50IHJldCA9IDA7XFxuIFxcbiBcXHRpZiAoIW1tYXBfcmVhZF90cnlsb2NrKG1tKSkge1xcbiBcXHRcXHR0cmFjZV9za2lwX3Rhc2tfcmVhcGluZyh0c2stXFx1MDAzZXBpZCk7XFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG5AQCAtNTc2LDcgKzYwMSw5IEBAIHN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXG4gXFx0LyogZmFpbGVkIHRvIHJlYXAgcGFydCBvZiB0aGUgYWRkcmVzcyBzcGFjZS4gVHJ5IGFnYWluIGxhdGVyICovXFxuIFxcdHJldCA9IF9fb29tX3JlYXBfdGFza19tbShtbSk7XFxuLVxcdGlmICghcmV0KVxcbitcXHRpZiAocmV0ID09IC1FQUdBSU4pXFx0LyogaGFuZGVkIHRoZSBsb2NrIG92ZXIsIGFscmVhZHkgZHJvcHBlZCAqL1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIG91dF9maW5pc2g7XFxuIFxcbiBcXHRwcl9pbmZvKFxcXCJvb21fcmVhcGVyOiByZWFwZWQgcHJvY2VzcyAlZCAoJXMpLCBub3cgYW5vbi1yc3M6JWx1a0IsIGZpbGUtcnNzOiVsdWtCLCBzaG1lbS1yc3M6JWx1a0JcXFxcblxcXCIsXFxuQEAgLTU5NSwxNSArNjIyLDE1IEBAIHN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiAjZGVmaW5lIE1BWF9PT01fUkVBUF9SRVRSSUVTIDEwXFxuIHN0YXRpYyB2b2lkIG9vbV9yZWFwX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuIHtcXG4tXFx0aW50IGF0dGVtcHRzID0gMDtcXG4rXFx0aW50IGF0dGVtcHRzID0gMCwgcmV0O1xcbiBcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay1cXHUwMDNlc2lnbmFsLVxcdTAwM2Vvb21fbW07XFxuIFxcbi1cXHQvKiBSZXRyeSB0aGUgbW1hcF9yZWFkX3RyeWxvY2sobW0pIGEgZmV3IHRpbWVzICovXFxuLVxcdHdoaWxlIChhdHRlbXB0cysrIFxcdTAwM2MgTUFYX09PTV9SRUFQX1JFVFJJRVMgXFx1MDAyNlxcdTAwMjYgIW9vbV9yZWFwX3Rhc2tfbW0odHNrLCBtbSkpXFxuK1xcdC8qIFJldHJ5IHRoZSBtbWFwX3JlYWRfdHJ5bG9jayhtbSkgYSBmZXcgdGltZXM7IGhhbmRpbmcgdGhlIGxvY2sgb3ZlciBpcyBub3QgYW4gYXR0ZW1wdCAqL1xcbitcXHR3aGlsZSAoKHJldCA9IG9vbV9yZWFwX3Rhc2tfbW0odHNrLCBtbSkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICAocmV0ID09IC1FQUdBSU4gfHwgKythdHRlbXB0cyBcXHUwMDNjIE1BWF9PT01fUkVBUF9SRVRSSUVTKSlcXG4gXFx0XFx0c2NoZWR1bGVfdGltZW91dF9pZGxlKEhaLzEwKTtcXG4gXFxuLVxcdGlmIChhdHRlbXB0cyBcXHUwMDNjPSBNQVhfT09NX1JFQVBfUkVUUklFUyB8fFxcbi1cXHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSlcXG4rXFx0aWYgKCFyZXQgfHwgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSlcXG4gXFx0XFx0Z290byBkb25lO1xcbiBcXG4gXFx0cHJfaW5mbyhcXFwib29tX3JlYXBlcjogdW5hYmxlIHRvIHJlYXAgcGlkOiVkICglcylcXFxcblxcXCIsXFxuQEAgLTEyMjcsNiArMTI1NCw3IEBAIFNZU0NBTExfREVGSU5FMihwcm9jZXNzX21yZWxlYXNlLCBpbnQsIHBpZGZkLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxcbiBcXHRpZiAoIXJlYXApXFxuIFxcdFxcdGdvdG8gZHJvcF9tbTtcXG4gXFxuK2FnYWluOlxcbiBcXHRpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKSB7XFxuIFxcdFxcdHJldCA9IC1FSU5UUjtcXG4gXFx0XFx0Z290byBkcm9wX21tO1xcbkBAIC0xMjM1LDggKzEyNjMsMTUgQEAgU1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpXFxuIFxcdCAqIENoZWNrIE1NRl9PT01fU0tJUCBhZ2FpbiB1bmRlciBtbWFwX3JlYWRfbG9jayBwcm90ZWN0aW9uIHRvIGVuc3VyZVxcbiBcXHQgKiBwb3NzaWJsZSBjaGFuZ2UgaW4gZXhpdF9tbWFwIGlzIHNlZW5cXG4gXFx0ICovXFxuLVxcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSBcXHUwMDI2XFx1MDAyNiAhX19vb21fcmVhcF90YXNrX21tKG1tKSlcXG4tXFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4rXFx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKSB7XFxuK1xcdFxcdHJldCA9IF9fb29tX3JlYXBfdGFza19tbShtbSk7XFxuK1xcdFxcdGlmIChyZXQgPT0gLUVBR0FJTikge1xcdC8qIGEgd3JpdGVyIGdvdCB0aGUgbG9jaywgcXVldWUgdXAgYWdhaW4gKi9cXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0Z290byBhZ2FpbjtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocmV0ID09IC1FQlVTWSlcXG4rXFx0XFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4rXFx0fVxcbiBcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4gXFxuIGRyb3BfbW06XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjAyLjU4MjA1MTM4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTE5MzUxOTc5MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInphcF92bWFfZm9yX3JlYXBpbmdcIixcbiAgICBcIl9fb29tX3JlYXBfdGFza19tbVwiLFxuICAgIFwib29tX3JlYXBfdGFza19tbVwiLFxuICAgIFwib29tX3JlYXBfdGFza1wiLFxuICAgIFwiX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFZNQSB1bm1hcHBpbmcgbG9naWMgZm9yIE9PTSByZWFwaW5nIGFuZCB0aGUgcHJvY2Vzc19tcmVsZWFzZSBzeXNjYWxsLCBzcGxpdHRpbmcgVk1BIHphcHBpbmcgaW50byAxR0IgY2h1bmtzIGFuZCB5aWVsZGluZyBtbWFwX2xvY2sgd2hlbiBjb250ZW5kZWQuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgc2VtYW50aWNzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2sgaW52ZXJzaW9ucywgb3Igc3RhdGUgaW5jb25zaXN0ZW5jeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YWJmYTAzYjgxMjNkOWMyOWU1MjNhODQzM2NjZTE0MWRiOTRhZWJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTI6NDE6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMDUxNzljNGIyMDkwZS4uN2FjMTcyOGE1N2MyOSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC01OTMsNyArNTkzLDggQEAgc3RydWN0IHphcF9kZXRhaWxzO1xuIHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKTtcbi1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4raW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBlbmQpO1xuIGludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdCAgIGdmcF90IGdmcCk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggOTI2Mjc2ZDQxOTIwMi4uMjVjMzVhMjhhMzlkMSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTIyMDcsMTUgKzIyMDcsMTggQEAgc3RhdGljIHZvaWQgX196YXBfdm1hX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiBcbiAvKipcbi0gKiB6YXBfdm1hX2Zvcl9yZWFwaW5nIC0gemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nXG4rICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhIHJhbmdlIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xuICAqIEB2bWE6IFRoZSB2bWEgdG8gemFwLlxuKyAqIEBzdGFydDogVGhlIGZpcnN0IGFkZHJlc3MgdG8gemFwLlxuKyAqIEBlbmQ6IE9uZSBwYXN0IHRoZSBsYXN0IGFkZHJlc3MgdG8gemFwLlxuICAqXG4tICogWmFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nIGZvciB1c2UgYnkgdGhlIG9vbVxuLSAqIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxuKyAqIFphcCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIGluIFtAc3RhcnQsIEBlbmQpIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xuKyAqIGZvciB1c2UgYnkgdGhlIG9vbSBraWxsZXIuIEh1Z2V0bGIgdm1hcyBhcmUgbm90IHN1cHBvcnRlZC5cbiAgKlxuICAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHdlIHdvdWxkIGhhdmUgdG8gYmxvY2suXG4gICovXG4taW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4raW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBlbmQpXG4ge1xuIFx0c3RydWN0IHphcF9kZXRhaWxzIGRldGFpbHMgPSB7XG4gXHRcdC5yZWFwaW5nID0gdHJ1ZSxcbkBAIC0yMjI0LDcgKzIyMjcsNyBAQCBpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHN0cnVjdCBtbXVfZ2F0aGVyIHRsYjtcbiBcbiBcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXHUwMDNldm1fbW0sXG4tXHRcdFx0XHR2bWEtXHUwMDNldm1fc3RhcnQsIHZtYS1cdTAwM2V2bV9lbmQpO1xuK1x0XHRcdFx0c3RhcnQsIGVuZCk7XG4gXHR0bGJfZ2F0aGVyX21tdShcdTAwMjZ0bGIsIHZtYS1cdTAwM2V2bV9tbSk7XG4gXHRpZiAobW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbm9uYmxvY2soXHUwMDI2cmFuZ2UpKSB7XG4gXHRcdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcbmluZGV4IDVkNDhiZDg2MmMyN2IuLmNlZTBhMGY3YjRmMjggMTAwNjQ0XG4tLS0gYS9tbS9vb21fa2lsbC5jXG4rKysgYi9tbS9vb21fa2lsbC5jXG5AQCAtNTAzLDEwICs1MDMsMTcgQEAgc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG9vbV9yZWFwZXJfd2FpdCk7XG4gc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb29tX3JlYXBlcl9saXN0O1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob29tX3JlYXBlcl9sb2NrKTtcbiBcbi1zdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4rLypcbisgKiBDYWxsZWQgd2l0aCBtbWFwX2xvY2sgaGVsZCBmb3IgcmVhZC4gIFJldHVybnMgd2l0aCBpdCBzdGlsbCBoZWxkIG9uIDBcbisgKiAoZG9uZSkgb3IgLUVCVVNZIChwYXJ0IGNvdWxkIG5vdCBiZSByZWFwZWQsIHRyeSBhZ2FpbiBsYXRlciksIGFuZCBkcm9wc1xuKyAqIGl0IG9ubHkgb24gLUVBR0FJTiwgd2hlbiBpdCB3YXMgaGFuZGVkIG92ZXIgdG8gYSBxdWV1ZWQgd3JpdGVyIGFuZCB0aGVcbisgKiBjYWxsZXIgc2hvdWxkIHJldGFrZSBpdCBhbmQgc3RhcnQgb3Zlci5cbisgKi9cbitzdGF0aWMgaW50IF9fb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdGJvb2wgcmV0ID0gdHJ1ZTtcbitcdHVuc2lnbmVkIGxvbmcgYWRkciwgZW5kO1xuK1x0aW50IHJldCA9IDA7XG4gXHRNQV9TVEFURShtYXMsIFx1MDAyNm1tLVx1MDAzZW1tX210LCBVTE9OR19NQVgsIFVMT05HX01BWCk7XG4gXG4gXHQvKlxuQEAgLTUzOCw4ICs1NDUsMjUgQEAgc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0XHQgKiBjb3VudCBlbGV2YXRlZCB3aXRob3V0IGEgZ29vZCByZWFzb24uXG4gXHRcdCAqL1xuIFx0XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKSB7XG4tXHRcdFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hKSlcbi1cdFx0XHRcdHJldCA9IGZhbHNlO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogWmFwIGluIDFHIGNodW5rcyBhbmQgaGFuZCBtbWFwX2xvY2sgb3ZlciB3aGVuZXZlciBhXG4rXHRcdFx0ICogd3JpdGVyIGlzIHF1ZXVlZCBvbiBpdCwgc28gaXQgZG9lcyBub3Qgd2FpdCBmb3IgdGhlXG4rXHRcdFx0ICogd2hvbGUgcmVhcC5cbitcdFx0XHQgKi9cbitcdFx0XHRlbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuK1x0XHRcdHdoaWxlIChlbmQgXHUwMDNlIHZtYS1cdTAwM2V2bV9zdGFydCkge1xuK1x0XHRcdFx0YWRkciA9IG1heCh2bWEtXHUwMDNldm1fc3RhcnQsIEFMSUdOX0RPV04oZW5kIC0gMSwgU1pfMUcpKTtcbitcdFx0XHRcdGlmICh6YXBfdm1hX2Zvcl9yZWFwaW5nKHZtYSwgYWRkciwgZW5kKSkge1xuK1x0XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdFx0ZW5kID0gYWRkcjtcbitcdFx0XHRcdGlmICghbW1hcF9sb2NrX2lzX2NvbnRlbmRlZChtbSkpXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC01NDksMTYgKzU3MywxNyBAQCBzdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gLypcbiAgKiBSZWFwcyB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgZ2l2ZW4gdGFzay5cbiAgKlxuLSAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzIGFuZCBmYWxzZSBpZiBub25lIG9yIHBhcnQgb2YgdGhlIGFkZHJlc3Mgc3BhY2Vcbi0gKiBoYXMgYmVlbiByZWNsYWltZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5IGxhdGVyLlxuKyAqIFJldHVybnMgMCB3aGVuIGRvbmUsIC1FQUdBSU4gaWYgbW1hcF9sb2NrIHdhcyBoYW5kZWQgb3ZlciB0byBhIHdyaXRlclxuKyAqIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBzdGFydCBvdmVyLCBhbmQgLUVCVVNZIGlmIG5vbmUgb3IgcGFydCBvZiB0aGVcbisgKiBhZGRyZXNzIHNwYWNlIGhhcyBiZWVuIHJlY2xhaW1lZCBhbmQgdGhlIGNhbGxlciBzaG91bGQgcmV0cnkgbGF0ZXIuXG4gICovXG4tc3RhdGljIGJvb2wgb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4rc3RhdGljIGludCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4tXHRib29sIHJldCA9IHRydWU7XG4rXHRpbnQgcmV0ID0gMDtcbiBcbiBcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sobW0pKSB7XG4gXHRcdHRyYWNlX3NraXBfdGFza19yZWFwaW5nKHRzay1cdTAwM2VwaWQpO1xuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTU3Niw3ICs2MDEsOSBAQCBzdGF0aWMgYm9vbCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBcdC8qIGZhaWxlZCB0byByZWFwIHBhcnQgb2YgdGhlIGFkZHJlc3Mgc3BhY2UuIFRyeSBhZ2FpbiBsYXRlciAqL1xuIFx0cmV0ID0gX19vb21fcmVhcF90YXNrX21tKG1tKTtcbi1cdGlmICghcmV0KVxuK1x0aWYgKHJldCA9PSAtRUFHQUlOKVx0LyogaGFuZGVkIHRoZSBsb2NrIG92ZXIsIGFscmVhZHkgZHJvcHBlZCAqL1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJldClcbiBcdFx0Z290byBvdXRfZmluaXNoO1xuIFxuIFx0cHJfaW5mbyhcIm9vbV9yZWFwZXI6IHJlYXBlZCBwcm9jZXNzICVkICglcyksIG5vdyBhbm9uLXJzczolbHVrQiwgZmlsZS1yc3M6JWx1a0IsIHNobWVtLXJzczolbHVrQlxcblwiLFxuQEAgLTU5NSwxNSArNjIyLDE1IEBAIHN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuICNkZWZpbmUgTUFYX09PTV9SRUFQX1JFVFJJRVMgMTBcbiBzdGF0aWMgdm9pZCBvb21fcmVhcF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIHtcbi1cdGludCBhdHRlbXB0cyA9IDA7XG4rXHRpbnQgYXR0ZW1wdHMgPSAwLCByZXQ7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay1cdTAwM2VzaWduYWwtXHUwMDNlb29tX21tO1xuIFxuLVx0LyogUmV0cnkgdGhlIG1tYXBfcmVhZF90cnlsb2NrKG1tKSBhIGZldyB0aW1lcyAqL1xuLVx0d2hpbGUgKGF0dGVtcHRzKysgXHUwMDNjIE1BWF9PT01fUkVBUF9SRVRSSUVTIFx1MDAyNlx1MDAyNiAhb29tX3JlYXBfdGFza19tbSh0c2ssIG1tKSlcbitcdC8qIFJldHJ5IHRoZSBtbWFwX3JlYWRfdHJ5bG9jayhtbSkgYSBmZXcgdGltZXM7IGhhbmRpbmcgdGhlIGxvY2sgb3ZlciBpcyBub3QgYW4gYXR0ZW1wdCAqL1xuK1x0d2hpbGUgKChyZXQgPSBvb21fcmVhcF90YXNrX21tKHRzaywgbW0pKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAocmV0ID09IC1FQUdBSU4gfHwgKythdHRlbXB0cyBcdTAwM2MgTUFYX09PTV9SRUFQX1JFVFJJRVMpKVxuIFx0XHRzY2hlZHVsZV90aW1lb3V0X2lkbGUoSFovMTApO1xuIFxuLVx0aWYgKGF0dGVtcHRzIFx1MDAzYz0gTUFYX09PTV9SRUFQX1JFVFJJRVMgfHxcbi1cdCAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVxuK1x0aWYgKCFyZXQgfHwgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSlcbiBcdFx0Z290byBkb25lO1xuIFxuIFx0cHJfaW5mbyhcIm9vbV9yZWFwZXI6IHVuYWJsZSB0byByZWFwIHBpZDolZCAoJXMpXFxuXCIsXG5AQCAtMTIyNyw2ICsxMjU0LDcgQEAgU1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpXG4gXHRpZiAoIXJlYXApXG4gXHRcdGdvdG8gZHJvcF9tbTtcbiBcbithZ2FpbjpcbiBcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpIHtcbiBcdFx0cmV0ID0gLUVJTlRSO1xuIFx0XHRnb3RvIGRyb3BfbW07XG5AQCAtMTIzNSw4ICsxMjYzLDE1IEBAIFNZU0NBTExfREVGSU5FMihwcm9jZXNzX21yZWxlYXNlLCBpbnQsIHBpZGZkLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxuIFx0ICogQ2hlY2sgTU1GX09PTV9TS0lQIGFnYWluIHVuZGVyIG1tYXBfcmVhZF9sb2NrIHByb3RlY3Rpb24gdG8gZW5zdXJlXG4gXHQgKiBwb3NzaWJsZSBjaGFuZ2UgaW4gZXhpdF9tbWFwIGlzIHNlZW5cbiBcdCAqL1xuLVx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pIFx1MDAyNlx1MDAyNiAhX19vb21fcmVhcF90YXNrX21tKG1tKSlcbi1cdFx0cmV0ID0gLUVBR0FJTjtcbitcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSkge1xuK1x0XHRyZXQgPSBfX29vbV9yZWFwX3Rhc2tfbW0obW0pO1xuK1x0XHRpZiAocmV0ID09IC1FQUdBSU4pIHtcdC8qIGEgd3JpdGVyIGdvdCB0aGUgbG9jaywgcXVldWUgdXAgYWdhaW4gKi9cbitcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdGdvdG8gYWdhaW47XG4rXHRcdH1cbitcdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4rXHRcdFx0cmV0ID0gLUVBR0FJTjtcbitcdH1cbiBcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFxuIGRyb3BfbW06XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MTowMi41ODIwNTM1NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODk4MzgxNDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggaXMgRGVmaW5pdGVseSBXb3J0aCBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIHBhdGNoIGFuZCByZXF1aXJlbWVudHMgc2NyZWFtcywgXCJmdXp6IG1lIVwiIFRoZSBnaXQgZGlmZiBpbmRpY2F0ZXMgc2lnbmlmaWNhbnQgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCB0aGF0J3MgKmFsd2F5cyogYSByZWQgZmxhZyAoaW4gYSBnb29kIHdheSwgZm9yIGZ1enppbmcpLiBXZSdyZSBsb29raW5nIGF0IG1vZGlmaWNhdGlvbnMgdG8gYG1tL2ludGVybmFsLmhgLCBgbW0vbWVtb3J5LmNgLCBhbmQgYG1tL29vbV9raWxsLmNgIOKAkyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhpbmdzLlxuXG5TcGVjaWZpY2FsbHksIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYCBpbiBgbW0vbWVtb3J5LmNgIGhhcyBiZWVuIHVwZGF0ZWQgd2l0aCBzdGFydCBhbmQgZW5kIHBhcmFtZXRlcnMgd2hpY2ggYWZmZWN0cyB0aGUgbW11IG5vdGlmaWVyLiBUaGUgYmlnZ2VyIGNoYW5nZSBpcyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIGBfX29vbV9yZWFwX3Rhc2tfbW1gIGluIGBtbS9vb21fa2lsbC5jYCwgZ29pbmcgZnJvbSBhIGJvb2xlYW4gdG8gYW4gaW50ZWdlci4gVGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIHR3ZWFrOyBpdCdzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gZXJyb3IgaGFuZGxpbmcgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhlIE9PTSByZWFwZXIuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBjaHVua2luZyBWTUEgemFwcGluZyBpbnRvIDFHQiBibG9ja3MgYW5kIGludHJvZHVjaW5nIGEgbG9ja2luZyBjaGVjayB3aXRoIGAtRUFHQUlOYCBpZiB0aGUgbW1hcCBsb2NrIGlzIGNvbnRlbmRlZC4gVGhpcyBpbmNsdWRlcyBwb3RlbnRpYWxseSBoYW5kaW5nIHRoZSBtbWFwIGxvY2sgb2ZmIHRvIGFueSB3cml0ZXJzIHdhaXRpbmcgb24gaXQuXG5cblRoZSBpbnRlcmVzdGluZyBwaWVjZSBpcyB0aGUgYHByb2Nlc3NfbXJlbGVhc2VgIHN5c2NhbGwsIHdoaWNoIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIGFuZCBpdCdzIGJlZW4gdXBkYXRlZCB0byBoYW5kbGUgdGhlIG5ldyByZXR1cm4gdmFsdWVzIGZyb20gYF9fb29tX3JlYXBfdGFza19tbWAuIFRoaXMgbWVhbnMgd2UgaGF2ZSBhIGRpcmVjdCBwYXRoIGZyb20gdXNlcnNwYWNlIHRvIHRoZXNlIHNlbnNpdGl2ZSBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcy4gVGhlIE9PTSByZWFwZXIgaXRzZWxmIGlzIGFsc28gYSBjbGVhciBlbnRyeSBwb2ludCwgc2luY2UgaXQgcnVucyBpbiB0aGUga2VybmVsIHdoZW4gT09NIG9jY3Vycy5cblxuQ29uc2lkZXJpbmcgdGhlIFwiQ29yZSBTdWJzeXN0ZW1zXCIgc2VjdGlvbiBvZiB0aGUgcmVxdWlyZW1lbnRzLCB0aGlzIHBlcmZlY3RseSBmaXRzIHRoZSBiaWxsOiBtZW1vcnkgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHN5c2NhbGwgaGFuZGxpbmcgYXJlIGFsbCBkaXJlY3RseSB0b3VjaGVkLiBgcHJvY2Vzc19tcmVsZWFzZWAgaXMgYSBzeXNjYWxsISBBbmQgdGhlIE9PTSByZWFwZXIgaXMgdHJpZ2dlcmVkIGJ5IE9PTSBldmVudHMuIEl0J3MgYSBoaWdoLXZhbHVlIHRhcmdldC5cblxuVG8gY29uZmlybSB0aGUgZGV0YWlscywgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIGBtbS9vb21fa2lsbC5jYCBhbmQgYG1tL21lbW9yeS5jYCBjb2RlIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgbnVhbmNlIEkgbWlnaHQgaGF2ZSBtaXNzZWQuIEknbGwgcHJvYmFibHkgYmUgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGRpdmUgaW50byB0aGUgZnVuY3Rpb25zIGFuZCBzeW1ib2xzIGludm9sdmVkIGFuZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMsIGJ1dCBJIGFtIGNvbmZpZGVudCB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBjb25jZW50cmF0ZSBmdXp6aW5nIHJlc291cmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI4MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjA5LjQ4MDQzNzk3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9vb21fa2lsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMTAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMTA6XFx0XFxuMTIxMTpcXHRcXHRpZiAoX19yYXRlbGltaXQoXFx1MDAyNnBmb29tX3JzKSlcXG4xMjEyOlxcdFxcdFxcdHByX3dhcm4oXFxcIkh1aCBWTV9GQVVMVF9PT00gbGVha2VkIG91dCB0byB0aGUgI1BGIGhhbmRsZXIuIFJldHJ5aW5nIFBGXFxcXG5cXFwiKTtcXG4xMjEzOlxcdH1cXG4xMjE0OlxcdFxcbjEyMTU6XFx0U1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpXFxuMTIxNjpcXHR7XFxuMTIxNzpcXHQjaWZkZWYgQ09ORklHX01NVVxcbjEyMTg6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xcbjEyMTk6XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbjEyMjA6XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICpwO1xcbjEyMjE6XFx0XFx0dW5zaWduZWQgaW50IGZfZmxhZ3M7XFxuMTIyMjpcXHRcXHRib29sIHJlYXAgPSBmYWxzZTtcXG4xMjIzOlxcdFxcdGxvbmcgcmV0ID0gMDtcXG4xMjI0OlxcdFxcbjEyMjU6XFx0XFx0aWYgKGZsYWdzKVxcbjEyMjY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTIyNzpcXHRcXG4xMjI4OlxcdFxcdHRhc2sgPSBwaWRmZF9nZXRfdGFzayhwaWRmZCwgXFx1MDAyNmZfZmxhZ3MpO1xcbjEyMjk6XFx0XFx0aWYgKElTX0VSUih0YXNrKSlcXG4xMjMwOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHRhc2spO1xcbjEyMzE6XFx0XFxuMTIzMjpcXHRcXHQvKlxcbjEyMzM6XFx0XFx0ICogTWFrZSBzdXJlIHRvIGNob29zZSBhIHRocmVhZCB3aGljaCBzdGlsbCBoYXMgYSByZWZlcmVuY2UgdG8gbW1cXG4xMjM0OlxcdFxcdCAqIGR1cmluZyB0aGUgZ3JvdXAgZXhpdFxcbjEyMzU6XFx0XFx0ICovXFxuMTIzNjpcXHRcXHRwID0gZmluZF9sb2NrX3Rhc2tfbW0odGFzayk7XFxuMTIzNzpcXHRcXHRpZiAoIXApIHtcXG4xMjM4OlxcdFxcdFxcdHJldCA9IC1FU1JDSDtcXG4xMjM5OlxcdFxcdFxcdGdvdG8gcHV0X3Rhc2s7XFxuMTI0MDpcXHRcXHR9XFxuMTI0MTpcXHRcXG4xMjQyOlxcdFxcdG1tID0gcC1cXHUwMDNlbW07XFxuMTI0MzpcXHRcXHRtbWdyYWIobW0pO1xcbjEyNDQ6XFx0XFxuMTI0NTpcXHRcXHRpZiAodGFza193aWxsX2ZyZWVfbWVtKHApKVxcbjEyNDY6XFx0XFx0XFx0cmVhcCA9IHRydWU7XFxuMTI0NzpcXHRcXHRlbHNlIHtcXG4xMjQ4OlxcdFxcdFxcdC8qIEVycm9yIG9ubHkgaWYgdGhlIHdvcmsgaGFzIG5vdCBiZWVuIGRvbmUgYWxyZWFkeSAqL1xcbjEyNDk6XFx0XFx0XFx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVxcbjEyNTA6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xMjUxOlxcdFxcdH1cXG4xMjUyOlxcdFxcdHRhc2tfdW5sb2NrKHApO1xcbjEyNTM6XFx0XFxuMTI1NDpcXHRcXHRpZiAoIXJlYXApXFxuMTI1NTpcXHRcXHRcXHRnb3RvIGRyb3BfbW07XFxuMTI1NjpcXHRcXG4xMjU3OlxcdGFnYWluOlxcbjEyNTg6XFx0XFx0aWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSkge1xcbjEyNTk6XFx0XFx0XFx0cmV0ID0gLUVJTlRSO1xcbjEyNjA6XFx0XFx0XFx0Z290byBkcm9wX21tO1xcbjEyNjE6XFx0XFx0fVxcbjEyNjI6XFx0XFx0LypcXG4xMjYzOlxcdFxcdCAqIENoZWNrIE1NRl9PT01fU0tJUCBhZ2FpbiB1bmRlciBtbWFwX3JlYWRfbG9jayBwcm90ZWN0aW9uIHRvIGVuc3VyZVxcbjEyNjQ6XFx0XFx0ICogcG9zc2libGUgY2hhbmdlIGluIGV4aXRfbW1hcCBpcyBzZWVuXFxuMTI2NTpcXHRcXHQgKi9cXG4xMjY2OlxcdFxcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSkge1xcbjEyNjc6XFx0XFx0XFx0cmV0ID0gX19vb21fcmVhcF90YXNrX21tKG1tKTtcXG4xMjY4OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTikge1xcdC8qIGEgd3JpdGVyIGdvdCB0aGUgbG9jaywgcXVldWUgdXAgYWdhaW4gKi9cXG4xMjY5OlxcdFxcdFxcdFxcdHJldCA9IDA7XFxuMTI3MDpcXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcbjEyNzE6XFx0XFx0XFx0fVxcbjEyNzI6XFx0XFx0XFx0aWYgKHJldCA9PSAtRUJVU1kpXFxuMTI3MzpcXHRcXHRcXHRcXHRyZXQgPSAtRUFHQUlOO1xcbjEyNzQ6XFx0XFx0fVxcbjEyNzU6XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuMTI3NjpcXHRcXG4xMjc3OlxcdGRyb3BfbW06XFxuMTI3ODpcXHRcXHRtbWRyb3AobW0pO1xcbjEyNzk6XFx0cHV0X3Rhc2s6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjA5LjQ4MDU0NTAyNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMTA3NDY3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIGEgTWVtb3J5IFJlbGVhc2UgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYHByb2Nlc3NfbXJlbGVhc2VgLiBUaGUgZmlyc3QgdGhpbmcgSSBzaG91bGQgZG8gaXMgZXN0YWJsaXNoIGl0cyBvcmlnaW4g4oCTIGl0IGxvb2tzIGxpa2UgaXQncyBkZWZpbmVkIHdpdGhpbiBgbW0vb29tX2tpbGwuY2AuIEdvb2QsIHRoYXQgbmFycm93cyBteSBmb2N1cy4gTm93LCBJIHN1c3BlY3QgdGhhdCByZWxhdGVkIGZ1bmN0aW9ucyBvciBjb250ZXh0cyBhcmUgZGVmaW5lZCBuZWFyYnkuIFNvLCBsZXQgbWUganVtcCBvdmVyIHRvIGBtbS9tZW1vcnkuY2AuIEknbGwgc3RhcnQgbG9va2luZyBhcm91bmQgbGluZSAyMjAwIGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIGFuZCBwb3RlbnRpYWxseSByZXZlYWwgaG93IGBwcm9jZXNzX21yZWxlYXNlYCBpbnRlcmFjdHMgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gYXNzZXNzIHRoZSBmdW5jdGlvbidzIG92ZXJhbGwgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjExLjY5MTI5MzU5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMDU6XFx0XFx0XFx0dGxiX2VuZF92bWEodGxiLCB2bWEpO1xcbjIyMDY6XFx0XFx0fVxcbjIyMDc6XFx0fVxcbjIyMDg6XFx0XFxuMjIwOTpcXHQvKipcXG4yMjEwOlxcdCAqIHphcF92bWFfZm9yX3JlYXBpbmcgLSB6YXAgYSByYW5nZSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmdcXG4yMjExOlxcdCAqIEB2bWE6IFRoZSB2bWEgdG8gemFwLlxcbjIyMTI6XFx0ICogQHN0YXJ0OiBUaGUgZmlyc3QgYWRkcmVzcyB0byB6YXAuXFxuMjIxMzpcXHQgKiBAZW5kOiBPbmUgcGFzdCB0aGUgbGFzdCBhZGRyZXNzIHRvIHphcC5cXG4yMjE0OlxcdCAqXFxuMjIxNTpcXHQgKiBaYXAgdGhlIHBhZ2UgdGFibGUgZW50cmllcyBpbiBbQHN0YXJ0LCBAZW5kKSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmdcXG4yMjE2OlxcdCAqIGZvciB1c2UgYnkgdGhlIG9vbSBraWxsZXIuIEh1Z2V0bGIgdm1hcyBhcmUgbm90IHN1cHBvcnRlZC5cXG4yMjE3OlxcdCAqXFxuMjIxODpcXHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiB3ZSB3b3VsZCBoYXZlIHRvIGJsb2NrLlxcbjIyMTk6XFx0ICovXFxuMjIyMDpcXHRpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4yMjIxOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kKVxcbjIyMjI6XFx0e1xcbjIyMjM6XFx0XFx0c3RydWN0IHphcF9kZXRhaWxzIGRldGFpbHMgPSB7XFxuMjIyNDpcXHRcXHRcXHQucmVhcGluZyA9IHRydWUsXFxuMjIyNTpcXHRcXHR9O1xcbjIyMjY6XFx0XFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4yMjI3OlxcdFxcdHN0cnVjdCBtbXVfZ2F0aGVyIHRsYjtcXG4yMjI4OlxcdFxcbjIyMjk6XFx0XFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbjIyMzA6XFx0XFx0XFx0XFx0XFx0c3RhcnQsIGVuZCk7XFxuMjIzMTpcXHRcXHR0bGJfZ2F0aGVyX21tdShcXHUwMDI2dGxiLCB2bWEtXFx1MDAzZXZtX21tKTtcXG4yMjMyOlxcdFxcdGlmIChtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9ub25ibG9jayhcXHUwMDI2cmFuZ2UpKSB7XFxuMjIzMzpcXHRcXHRcXHR0bGJfZmluaXNoX21tdShcXHUwMDI2dGxiKTtcXG4yMjM0OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjIzNTpcXHRcXHR9XFxuMjIzNjpcXHRcXHRfX3phcF92bWFfcmFuZ2UoXFx1MDAyNnRsYiwgdm1hLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kLCBcXHUwMDI2ZGV0YWlscyk7XFxuMjIzNzpcXHRcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXFx1MDAyNnJhbmdlKTtcXG4yMjM4OlxcdFxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbjIyMzk6XFx0XFx0cmV0dXJuIDA7XFxuMjI0MDpcXHR9XFxuMjI0MTpcXHRcXG4yMjQyOlxcdC8qKlxcbjIyNDM6XFx0ICogdW5tYXBfdm1hcyAtIHVubWFwIGEgcmFuZ2Ugb2YgbWVtb3J5IGNvdmVyZWQgYnkgYSBsaXN0IG9mIHZtYSdzXFxuMjI0NDpcXHQgKiBAdGxiOiBhZGRyZXNzIG9mIHRoZSBjYWxsZXIncyBzdHJ1Y3QgbW11X2dhdGhlclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MToxMS42OTE1NDU1MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzMTM1NzExNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBPT00gS2lsbGVyJ3MgTWVtb3J5IFJlY2xhbWF0aW9uIExvZ2ljKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiB0aGUgT09NIGtpbGxlci4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IG1lbW9yeSBpcyByZWNsYWltZWQgd2hlbiB0aGluZ3MgZ28gc291dGggYW5kIGEgdGFzayBpcyB0YXJnZXRlZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBtbS9vb21fa2lsbC5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgY29kZSBhcm91bmQgdGhlIGBvb21fcmVhcF90YXNrX21tYCBhbmQgdGhlIGBfX29vbV9yZWFwX3Rhc2tfbW1gIGZ1bmN0aW9ucy4gSSdtIGV4cGVjdGluZyB0aGVzZSBhcmUga2V5IGFyZWFzIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNsZWFudXAgcmVsYXRlZCB0byB0aGUgdmljdGltIHRhc2sncyBtZW1vcnkgc3BhY2UuIEknbGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyBpbiBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBkaWZmZXJlbnQgbWVtb3J5IG1hbmFnZW1lbnQgc2NlbmFyaW9zLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6ODM0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDE6MjQuODI3MjYwMzgyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL29vbV9raWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdCAqL1xcbiA1MDE6XFx0c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb29tX3JlYXBlcl90aDtcXG4gNTAyOlxcdHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChvb21fcmVhcGVyX3dhaXQpO1xcbiA1MDM6XFx0c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb29tX3JlYXBlcl9saXN0O1xcbiA1MDQ6XFx0c3RhdGljIERFRklORV9TUElOTE9DSyhvb21fcmVhcGVyX2xvY2spO1xcbiA1MDU6XFx0XFxuIDUwNjpcXHQvKlxcbiA1MDc6XFx0ICogQ2FsbGVkIHdpdGggbW1hcF9sb2NrIGhlbGQgZm9yIHJlYWQuICBSZXR1cm5zIHdpdGggaXQgc3RpbGwgaGVsZCBvbiAwXFxuIDUwODpcXHQgKiAoZG9uZSkgb3IgLUVCVVNZIChwYXJ0IGNvdWxkIG5vdCBiZSByZWFwZWQsIHRyeSBhZ2FpbiBsYXRlciksIGFuZCBkcm9wc1xcbiA1MDk6XFx0ICogaXQgb25seSBvbiAtRUFHQUlOLCB3aGVuIGl0IHdhcyBoYW5kZWQgb3ZlciB0byBhIHF1ZXVlZCB3cml0ZXIgYW5kIHRoZVxcbiA1MTA6XFx0ICogY2FsbGVyIHNob3VsZCByZXRha2UgaXQgYW5kIHN0YXJ0IG92ZXIuXFxuIDUxMTpcXHQgKi9cXG4gNTEyOlxcdHN0YXRpYyBpbnQgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiA1MTM6XFx0e1xcbiA1MTQ6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDUxNTpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIGVuZDtcXG4gNTE2OlxcdFxcdGludCByZXQgPSAwO1xcbiA1MTc6XFx0XFx0TUFfU1RBVEUobWFzLCBcXHUwMDI2bW0tXFx1MDAzZW1tX210LCBVTE9OR19NQVgsIFVMT05HX01BWCk7XFxuIDUxODpcXHRcXG4gNTE5OlxcdFxcdC8qXFxuIDUyMDpcXHRcXHQgKiBUZWxsIGFsbCB1c2VycyBvZiBnZXRfdXNlci9jb3B5X2Zyb21fdXNlciBldGMuLi4gdGhhdCB0aGUgY29udGVudFxcbiA1MjE6XFx0XFx0ICogaXMgbm8gbG9uZ2VyIHN0YWJsZS4gTm8gYmFycmllcnMgcmVhbGx5IG5lZWRlZCBiZWNhdXNlIHVubWFwcGluZ1xcbiA1MjI6XFx0XFx0ICogc2hvdWxkIGltcGx5IGJhcnJpZXJzIGFscmVhZHkgYW5kIHRoZSByZWFkZXIgd291bGQgaGl0IGEgcGFnZSBmYXVsdFxcbiA1MjM6XFx0XFx0ICogaWYgaXQgc3R1bWJsZWQgb3ZlciBhIHJlYXBlZCBtZW1vcnkuXFxuIDUyNDpcXHRcXHQgKi9cXG4gNTI1OlxcdFxcdG1tX2ZsYWdzX3NldChNTUZfVU5TVEFCTEUsIG1tKTtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0LypcXG4gNTI4OlxcdFxcdCAqIEl0IG1pZ2h0IHN0YXJ0IHJhY2luZyB3aXRoIHRoZSBkeWluZyB0YXNrIGFuZCBjb21wZXRlIGZvciBzaGFyZWRcXG4gNTI5OlxcdFxcdCAqIHJlc291cmNlcyAtIGUuZy4gcGFnZSB0YWJsZSBsb2NrIGNvbnRlbnRpb24gaGFzIGJlZW4gb2JzZXJ2ZWQuXFxuIDUzMDpcXHRcXHQgKiBSZWR1Y2UgdGhvc2UgcmFjZXMgYnkgcmVhcGluZyB0aGUgb29tIHZpY3RpbSBmcm9tIHRoZSBvdGhlciBlbmRcXG4gNTMxOlxcdFxcdCAqIG9mIHRoZSBhZGRyZXNzIHNwYWNlLlxcbiA1MzI6XFx0XFx0ICovXFxuIDUzMzpcXHRcXHRtYXNfZm9yX2VhY2hfcmV2KFxcdTAwMjZtYXMsIHZtYSwgMCkge1xcbiA1MzQ6XFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fSFVHRVRMQnxWTV9QRk5NQVApKVxcbiA1MzU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDUzNjpcXHRcXG4gNTM3OlxcdFxcdFxcdC8qXFxuIDUzODpcXHRcXHRcXHQgKiBPbmx5IGFub255bW91cyBwYWdlcyBoYXZlIGEgZ29vZCBjaGFuY2UgdG8gYmUgZHJvcHBlZFxcbiA1Mzk6XFx0XFx0XFx0ICogd2l0aG91dCBhZGRpdGlvbmFsIHN0ZXBzIHdoaWNoIHdlIGNhbm5vdCBhZmZvcmQgYXMgd2VcXG4gNTQwOlxcdFxcdFxcdCAqIGFyZSBPT00gYWxyZWFkeS5cXG4gNTQxOlxcdFxcdFxcdCAqXFxuIDU0MjpcXHRcXHRcXHQgKiBXZSBkbyBub3QgZXZlbiBjYXJlIGFib3V0IGZzIGJhY2tlZCBwYWdlcyBiZWNhdXNlIGFsbFxcbiA1NDM6XFx0XFx0XFx0ICogd2hpY2ggYXJlIHJlY2xhaW1hYmxlIGhhdmUgYWxyZWFkeSBiZWVuIHJlY2xhaW1lZCBhbmRcXG4gNTQ0OlxcdFxcdFxcdCAqIHdlIGRvIG5vdCB3YW50IHRvIGJsb2NrIGV4aXRfbW1hcCBieSBrZWVwaW5nIG1tIHJlZlxcbiA1NDU6XFx0XFx0XFx0ICogY291bnQgZWxldmF0ZWQgd2l0aG91dCBhIGdvb2QgcmVhc29uLlxcbiA1NDY6XFx0XFx0XFx0ICovXFxuIDU0NzpcXHRcXHRcXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NIQVJFRCkpIHtcXG4gNTQ4OlxcdFxcdFxcdFxcdC8qXFxuIDU0OTpcXHRcXHRcXHRcXHQgKiBaYXAgaW4gMUcgY2h1bmtzIGFuZCBoYW5kIG1tYXBfbG9jayBvdmVyIHdoZW5ldmVyIGFcXG4gNTUwOlxcdFxcdFxcdFxcdCAqIHdyaXRlciBpcyBxdWV1ZWQgb24gaXQsIHNvIGl0IGRvZXMgbm90IHdhaXQgZm9yIHRoZVxcbiA1NTE6XFx0XFx0XFx0XFx0ICogd2hvbGUgcmVhcC5cXG4gNTUyOlxcdFxcdFxcdFxcdCAqL1xcbiA1NTM6XFx0XFx0XFx0XFx0ZW5kID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxuIDU1NDpcXHRcXHRcXHRcXHR3aGlsZSAoZW5kIFxcdTAwM2Ugdm1hLVxcdTAwM2V2bV9zdGFydCkge1xcbiA1NTU6XFx0XFx0XFx0XFx0XFx0YWRkciA9IG1heCh2bWEtXFx1MDAzZXZtX3N0YXJ0LCBBTElHTl9ET1dOKGVuZCAtIDEsIFNaXzFHKSk7XFxuIDU1NjpcXHRcXHRcXHRcXHRcXHRpZiAoemFwX3ZtYV9mb3JfcmVhcGluZyh2bWEsIGFkZHIsIGVuZCkpIHtcXG4gNTU3OlxcdFxcdFxcdFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4gNTU4OlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NTk6XFx0XFx0XFx0XFx0XFx0fVxcbiA1NjA6XFx0XFx0XFx0XFx0XFx0ZW5kID0gYWRkcjtcXG4gNTYxOlxcdFxcdFxcdFxcdFxcdGlmICghbW1hcF9sb2NrX2lzX2NvbnRlbmRlZChtbSkpXFxuIDU2MjpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNTYzOlxcdFxcbiA1NjQ6XFx0XFx0XFx0XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuIDU2NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gNTY2OlxcdFxcdFxcdFxcdH1cXG4gNTY3OlxcdFxcdFxcdH1cXG4gNTY4OlxcdFxcdH1cXG4gNTY5OlxcdFxcbiA1NzA6XFx0XFx0cmV0dXJuIHJldDtcXG4gNTcxOlxcdH1cXG4gNTcyOlxcdFxcbiA1NzM6XFx0LypcXG4gNTc0OlxcdCAqIFJlYXBzIHRoZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBnaXZlbiB0YXNrLlxcbiA1NzU6XFx0ICpcXG4gNTc2OlxcdCAqIFJldHVybnMgMCB3aGVuIGRvbmUsIC1FQUdBSU4gaWYgbW1hcF9sb2NrIHdhcyBoYW5kZWQgb3ZlciB0byBhIHdyaXRlclxcbiA1Nzc6XFx0ICogYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHN0YXJ0IG92ZXIsIGFuZCAtRUJVU1kgaWYgbm9uZSBvciBwYXJ0IG9mIHRoZVxcbiA1Nzg6XFx0ICogYWRkcmVzcyBzcGFjZSBoYXMgYmVlbiByZWNsYWltZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5IGxhdGVyLlxcbiA1Nzk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjI0LjgyNzM3MjMzMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM4OTA2NjYxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaGVyZS5cblxuKipJbnZlc3RpZ2F0aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGluIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgaW4gdGhpcyBzZWN0aW9uIG9mIGNvZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBgQ09ORklHX2AgZmxhZ3MgdGhhdCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBPT00ga2lsbGVyIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgbW0vb29tX2tpbGwuY2AgZmlsZS4gSSByZW1lbWJlciBzZWVpbmcgYSBwb3RlbnRpYWwgZGVwZW5kZW5jeSBvbiBgQ09ORklHX01NVWAgaW4gYHByb2Nlc3NfbXJlbGVhc2VgLCB3aXRoIHRoZSB1c2Ugb2YgYCNpZmRlZmAuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBrbm93IGlmIGBvb21fcmVhcGVyYCBkZXBlbmRzIG9uIGFueXRoaW5nLiBUbyBkbyB0aGF0LCBJJ2xsIG5lZWQgdG8gZ28gYmFjayBpbiB0aGUgZmlsZSwgbWF5YmUgNTAwIGxpbmVzIG9yIHNvLCB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhlIGRlZmluaXRpb24uIElmIHRoYXQncyBub3QgZnJ1aXRmdWwsIEknbGwgaGF2ZSB0byBkbyBhIG1vcmUgZ2VuZXJhbCBzZWFyY2ggZm9yIGBDT05GSUdfYCB3aXRoaW4gYG1tL29vbV9raWxsLmNgIHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg1MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDE6MjguNzE4MDQyMTA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg2MTgwMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9vb21fa2lsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL29vbV9raWxsLmM9NzI9c3RhdGljIGlubGluZSBib29sIGlzX21lbWNnX29vbShzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxcbi0tXFxubW0vb29tX2tpbGwuYy03Ni1cXG5tbS9vb21fa2lsbC5jOjc3OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL29vbV9raWxsLmMtNzgtLyoqXFxuLS1cXG5tbS9vb21fa2lsbC5jPTEyMj1zdGF0aWMgYm9vbCBvb21fY3B1c2V0X2VsaWdpYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxcbi0tXFxubW0vb29tX2tpbGwuYy0xMjUtfVxcbm1tL29vbV9raWxsLmM6MTI2OiNlbmRpZiAvKiBDT05GSUdfTlVNQSAqL1xcbm1tL29vbV9raWxsLmMtMTI3LVxcbi0tXFxubW0vb29tX2tpbGwuYz0yNDk9c3RhdGljIGVudW0gb29tX2NvbnN0cmFpbnQgY29uc3RyYWluZWRfYWxsb2Moc3RydWN0IG9vbV9jb250cm9sICpvYylcXG4tLVxcbm1tL29vbV9raWxsLmMtMjY0LVxcbm1tL29vbV9raWxsLmM6MjY1OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXFxubW0vb29tX2tpbGwuYy0yNjYtXFx0XFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcXG4tLVxcbm1tL29vbV9raWxsLmM9NDQ5PXN0YXRpYyB2b2lkIGR1bXBfaGVhZGVyKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxuLS1cXG5tbS9vb21fa2lsbC5jLTQ1My1cXHRcXHRcXHRjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZW9vbV9zY29yZV9hZGopO1xcbm1tL29vbV9raWxsLmM6NDU0OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikgXFx1MDAyNlxcdTAwMjYgb2MtXFx1MDAzZW9yZGVyKVxcbm1tL29vbV9raWxsLmMtNDU1LVxcdFxcdHByX3dhcm4oXFxcIkNPTVBBQ1RJT04gaXMgZGlzYWJsZWQhISFcXFxcblxcXCIpO1xcbi0tXFxubW0vb29tX2tpbGwuYz00ODQ9Ym9vbCBwcm9jZXNzX3NoYXJlc19tbShjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vb29tX2tpbGwuYy00OTUtXFxubW0vb29tX2tpbGwuYzo0OTY6I2lmZGVmIENPTkZJR19NTVVcXG5tbS9vb21fa2lsbC5jLTQ5Ny0vKlxcbi0tXFxubW0vb29tX2tpbGwuYz03MDY9c3RhdGljIHZvaWQgcXVldWVfb29tX3JlYXBlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbm1tL29vbV9raWxsLmMtNzE3LVxcbm1tL29vbV9raWxsLmM6NzE4OiNpZmRlZiBDT05GSUdfU1lTQ1RMXFxubW0vb29tX2tpbGwuYy03MTktc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1fb29tX2tpbGxfdGFibGVbXSA9IHtcXG4tLVxcbm1tL29vbV9raWxsLmM9NzQ2PXN0YXRpYyBpbnQgX19pbml0IG9vbV9pbml0KHZvaWQpXFxuLS1cXG5tbS9vb21fa2lsbC5jLTc0OC1cXHRvb21fcmVhcGVyX3RoID0ga3RocmVhZF9ydW4ob29tX3JlYXBlciwgTlVMTCwgXFxcIm9vbV9yZWFwZXJcXFwiKTtcXG5tbS9vb21fa2lsbC5jOjc0OTojaWZkZWYgQ09ORklHX1NZU0NUTFxcbm1tL29vbV9raWxsLmMtNzUwLVxcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFxcXCJ2bVxcXCIsIHZtX29vbV9raWxsX3RhYmxlKTtcXG4tLVxcbm1tL29vbV9raWxsLmM9NzU2PXN0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV9vb21fcmVhcGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxubW0vb29tX2tpbGwuYy03NTgtfVxcbm1tL29vbV9raWxsLmM6NzU5OiNlbmRpZiAvKiBDT05GSUdfTU1VICovXFxubW0vb29tX2tpbGwuYy03NjAtXFxuLS1cXG5tbS9vb21fa2lsbC5jPTEyMTU9U1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpXFxubW0vb29tX2tpbGwuYy0xMjE2LXtcXG5tbS9vb21fa2lsbC5jOjEyMTc6I2lmZGVmIENPTkZJR19NTVVcXG5tbS9vb21fa2lsbC5jLTEyMTgtXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xcbi0tXFxubW0vb29tX2tpbGwuYy0xMjgzLVxcdHJldHVybiAtRU5PU1lTO1xcbm1tL29vbV9raWxsLmM6MTI4NDojZW5kaWYgLyogQ09ORklHX01NVSAqL1xcbm1tL29vbV9raWxsLmMtMTI4NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjI4Ljg5NjY2NzMwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NzcyODk5MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTU1VIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgQ09ORklHX01NVWAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiBvbiBhbWQ2NCwgcmlnaHQ/IEl0J3MgdGhlIGRlZmF1bHQsIGl0J3MgZXhwZWN0ZWQuIEJ1dCBJJ20gZmVlbGluZyBhIGxpdHRsZSBwYXJhbm9pZCB0b2RheS4gSXMgdGhlcmUgKmFjdHVhbGx5KiBhbnkgc2NlbmFyaW8gd2hlcmUgaXQncyAqbm90KiBlbmFibGVkLCBvciBhIHJlbGF0ZWQgY29uZmlndXJhdGlvbiB0aGF0J3Mgc3VidGx5IGRpZmZlcmVudD8gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuTGV0J3MgZGl2ZSBpbiBhbmQgY29uZmlybS4gSSdtIGdvaW5nIHRvIGNoZWNrIGhvdyBgcHJvY2Vzc19tcmVsZWFzZWAgaXMgaGFuZGxlZC4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYm90aCB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBlbnRyaWVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdGhlIHJlbGVhc2Ugb2YgbWVtb3J5IHJlc291cmNlcy4gRGlnZ2luZyBpbnRvIHRob3NlIGZpbGVzIGlzIHRoZSBrZXkgdG8gZnVsbHkgdW5kZXJzdGFuZGluZyB0aGUgTU1VIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA5NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjMzLjY2OTU2ODc2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NzMzODUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nlc3NfbXJlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MTozMy43MTU1NDgzOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODU3NTg2ODY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEknbSBhbiBleHBlcnQgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpZWQgY29udGV4dDpcblxuKipEaXZpbmcgaW50byB0aGUgQnVpbGQgUHJvY2VzcyoqXG5cbk9rYXksIHNvIHRoZSBpbnN0cnVjdGlvbiBpcyBjcnlzdGFsIGNsZWFyOiBcIkxldCdzIGNoZWNrIGBtbS9NYWtlZmlsZWAuXCIgTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCBzb21ldGhpbmcgd2l0aGluIHRoZSBgbW1gIGRpcmVjdG9yeSdzIE1ha2VmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZywgZGVidWdnaW5nLCBvciBtb2RpZnlpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGNvbXBvbmVudC4gVGhpcyBwcm9iYWJseSBpc24ndCBhIGNhc3VhbCBnbGFuY2U7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcuIEknbSBsaWtlbHkgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBidWlsZCB0YXJnZXRzLCBjb21waWxlciBmbGFncywgYW5kIHRoZSBvdmVyYWxsIHN0cnVjdHVyZS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGlzc3VlcywgYm90dGxlbmVja3MsIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBmaWxlbmFtZTsgaXQgc2NyZWFtcyBcIm1lbW9yeSBtYW5hZ2VtZW50XCIgb3IgcGVyaGFwcyBzb21lIHNvcnQgb2YgXCJtb2R1bGVcIiB0aGF0J3MgY3JpdGljYWwgdG8gbWVtb3J5IG9wZXJhdGlvbnMsIHNvIHRoYXQgY29udGV4dCBndWlkZXMgbXkgaW5pdGlhbCBzZWFyY2guIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNTYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjUyLjI5MTQyMDQ2M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4MTE4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib29tX2tpbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NDk9ZW5kaWZcXG5tbS9NYWtlZmlsZS01MC1cXG5tbS9NYWtlZmlsZTo1MTpvYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbm1tL01ha2VmaWxlLTUyLVxcdFxcdFxcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDE6NTIuMzUyMjQ1MTYyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgxMjkyODc1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgT09NIFJlYXBlciBTeW1ib2wgVmlzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgT09NIHJlYXBlcidzIHN5bWJvbHMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCBidWlsZC4gYG9vbV9raWxsLm9gIGlzIGFsd2F5cyBidWlsdCwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCAoYG9iai15YCkuIEluc2lkZSBgbW0vb29tX2tpbGwuY2AsIHRoZSBNTVUgaXMgdGhlIGtleSBlbmFibGVyIGZvciB0aGUgcmVhcGVyIGFuZCBgcHJvY2Vzc19tcmVsZWFzZWAuIE9uIGFtZDY0LCB0aGUgTU1VIGlzICphbHdheXMqIGVuYWJsZWQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBBbHRob3VnaCBpdCdzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiAoYENPTkZJR19NTVU9eWApLCBpdCBzdGlsbCBmZWVscyBsaWtlIGl0J3Mgd29ydGggZXhwbGljaXRseSBpbmNsdWRpbmcgXCJNTVVcIiBpbiBvdXIgY29uZmlndXJhdGlvbiBjb25zaWRlcmF0aW9ucywgaXQgYWRkcyBjbGFyaXR5LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYmV5b25kIHRoZSBNTVUuIGBDT05GSUdfUElERkRgIGlzbid0IGEgZmFjdG9yIGhlcmUsIGFzIGl0J3MgYSBjb3JlIGtlcm5lbCBmZWF0dXJlLlxuXG5UbyBjb25maXJtIHRoZSBNTVUgc2l0dWF0aW9uLCBJJ2xsIHF1aWNrbHkgY2hlY2sgYGluaXQvS2NvbmZpZ2AgYW5kIGBhcmNoL3g4Ni9LY29uZmlnYCB0byBiZSBzdXJlLiBZZXAsIE1NVSBpcyBkZWZpbml0ZWx5IHN0YW5kYXJkLiBJIHRoaW5rIGluY2x1ZGluZyBcIk1NVVwiIGluIGBFbmFibGVDb25maWdzYCBpcyB0aGUgYmVzdCBhcHByb2FjaDsgaXQncyBzYWZlIGFuZCBhY2N1cmF0ZSwgZXZlbiBpZiBpdCdzIGFsd2F5cyAneScuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgRm9jdXNTeW1ib2xzYCB0byBzZWUgd2hhdCBjaGFuZ2VkLiBGaXJzdCwgSSBzZWUgYHphcF92bWFfZm9yX3JlYXBpbmdgIGluIGBtbS9tZW1vcnkuY2AuIFRoaXMgaXNuJ3QgdWJpcXVpdG91cywgYW5kIGl0J3MgYmVlbiBkaXJlY3RseSBtb2RpZmllZCwgc28gaXQncyBhIHByaW1lIGNhbmRpZGF0ZS4gTGV0J3MgZGlnIGRlZXBlcjogdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGlzIGBpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpYC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXM6IGlzIGl0IHN0YXRpYywgZXhwb3J0ZWQsIG9yIGZpbGUtc2NvcGU/IE5vcGUsIGl0J3Mgbm90IHN0YXRpYzsgaXQncyBkZWNsYXJlZCBpbiBgbW0vaW50ZXJuYWwuaGAgYXMgYGludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKC4uLilgLiBTbywgYHphcF92bWFfZm9yX3JlYXBpbmdgICp3aWxsKiBiZSBhIHN5bWJvbCBpbiBgdm1saW51eGAuXG5cbk5leHQsIEknbGwgZXhhbWluZSB0aGUgc3ltYm9scyBpbiBgbW0vb29tX2tpbGwuY2AuIEkgc2VlIGBfX29vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza19tbWAsIGFuZCBgb29tX3JlYXBfdGFza2AuIFRob3NlIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucywgc28gdGhleSB3b24ndCBiZSB2aXNpYmxlIG91dHNpZGUgdGhlIGZpbGUuIEhvd2V2ZXIsIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCAvIGBwcm9jZXNzX21yZWxlYXNlYCBhcmUgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgYFNZU0NBTExfREVGSU5FMihwcm9jZXNzX21yZWxlYXNlLCAuLi4pYCBkZWZpbmVzIHRoZSBzeXNjYWxsIHZhcmlhbnRzOiBgX19zZV9zeXNfcHJvY2Vzc19tcmVsZWFzZWAsIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCwgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCBhbmQgYHByb2Nlc3NfbXJlbGVhc2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvZiB0aG9zZSB0aGUgc3l6a2FsbGVyIHN5bWJvbCBmaWx0ZXJzIHVzZSwgYmVjYXVzZSBzeXprYWxsZXIncyB1c3VhbGx5IGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGBfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZWAgb3IgYF9fZG9fc3lzX3Byb2Nlc3NfbXJlbGVhc2VgIG9yIHBsYWluIGBwcm9jZXNzX21yZWxlYXNlYC4gSSdsbCBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBob3cgc3l6a2FsbGVyIGhhbmRsZXMgc3lzY2FsbHMsIG9yIGNoZWNrIHdoYXQgZXhpc3RzIGluIGBvb21fa2lsbC5jYC4gQSBxdWljayBncmVwIG9mIHRoZSBjb2RlYmFzZSBmb3IgYHByb2Nlc3NfbXJlbGVhc2VgIHNob3VsZCBjbGVhciB0aGluZ3MgdXAgYW5kIGNvbmZpcm0gd2hhdCBleGFjdGx5IGlzIGV4cG9zZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjcyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjAwLjQ4MTUzNTE0OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwNzE2MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nlc3NfbXJlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL29vbV9raWxsLmM9MTIwMD12b2lkIHBhZ2VmYXVsdF9vdXRfb2ZfbWVtb3J5KHZvaWQpXFxuLS1cXG5tbS9vb21fa2lsbC5jLTEyMTQtXFxubW0vb29tX2tpbGwuYzoxMjE1OlNZU0NBTExfREVGSU5FMihwcm9jZXNzX21yZWxlYXNlLCBpbnQsIHBpZGZkLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxcbm1tL29vbV9raWxsLmMtMTIxNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjAwLjc4MjI2MDYxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDUwNTk1NTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgSnVzdGlmaWNhdGlvbiBmb3IgT09NIFJlYXBpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBpbnZlc3RpZ2F0aW5nIGhvdyB0aGUgYFNZU0NBTExfREVGSU5FYCBtYWNybyB3b3JrcyBvbiB4ODZfNjQsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGUgYHByb2Nlc3NfbXJlbGVhc2VgIHN5c3RlbSBjYWxsIGlzIGltcGxlbWVudGVkLiBJJ20gc2VlaW5nIGZ1bmN0aW9ucyBsaWtlIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCBhbmQgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCBhcmUgZ2VuZXJhdGVkLlxuXG5Ob3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgc3ltYm9scyBhcmUgKmFjdHVhbGx5KiBiZWluZyBjaGFuZ2VkIHdpdGhpbiBgbW0vb29tX2tpbGwuY2AuIEkndmUgaWRlbnRpZmllZCBhIGZldyBrZXkgb25lczogYHphcF92bWFfZm9yX3JlYXBpbmdgLCBgX19vb21fcmVhcF90YXNrX21tYCwgYG9vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza2AsIGFuZCB0aG9zZSBgcHJvY2Vzc19tcmVsZWFzZWAgc3lzdGVtIGNhbGwgaGFuZGxlcnMuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3c6IGFyZSB0aGVzZSBmdW5jdGlvbnMgKnViaXF1aXRvdXMqPyBJZiB0aGV5J3JlIGNhbGxlZCBldmVyeXdoZXJlLCB0aGV5J3JlIG5vaXNlLCBhY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMgaW4gU2VjdGlvbiA0LiBXZSB3YW50IHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNoYW5nZXMsIG5vdCBmbG9vZCB0aGUgZnV6emVyIHdpdGggaXJyZWxldmFudCBpbmZvcm1hdGlvbi4gU2VjdGlvbiA0IGNsZWFybHkgc3RhdGVzIHRoYXQgXCJ1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHNcIiBzaG91bGQgYmUgYXZvaWRlZC4gV2UgbmVlZCBcIlRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UU1wiLlxuXG5MZXQncyBsb29rIGF0IGB6YXBfdm1hX2Zvcl9yZWFwaW5nYC4gSXQncyBvbmx5IGNhbGxlZCBieSBgX19vb21fcmVhcF90YXNrX21tYC4gSXQncyBub3QgYSBnZW5lcmljIGZ1bmN0aW9uIGxpa2UgYGtmcmVlYCBvciBgZXhpdF9tbWFwYC4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgZm9yICpyZWFwaW5nKi4gVGhlbiBgX19vb21fcmVhcF90YXNrX21tYCBpcyBjYWxsZWQgb25seSBkdXJpbmcgT09NIHJlYXBpbmcgb3IgYHByb2Nlc3NfbXJlbGVhc2VgLCBhbmQgYG9vbV9yZWFwX3Rhc2tfbW1gIGlzIG9ubHkgY2FsbGVkIGJ5IGBvb21fcmVhcF90YXNrYC4gYG9vbV9yZWFwX3Rhc2tgIGlzIGl0c2VsZiBjYWxsZWQgYnkgdGhlIE9PTSByZWFwZXIga3RocmVhZC4gRmluYWxseSwgd2UgaGF2ZSB0aGUgc3lzdGVtIGNhbGwgZW50cnlwb2ludHMsIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCBhbmQgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCwgd2hpY2ggYXJlIHRoZSBhY2Nlc3MgcG9pbnRzIGZvciB0aGUgYHByb2Nlc3NfbXJlbGVhc2VgIHN5c2NhbGwuXG5cblNvLCBhcmUgdGhlc2UgdWJpcXVpdG91cz8gQWJzb2x1dGVseSBub3QhIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaGlnaGx5IHNwZWNpYWxpemVkIGZvciBPT00gcmVhcGluZyBhbmQgdGhlIGBwcm9jZXNzX21yZWxlYXNlYCBtZWNoYW5pc20uIFRoZXkncmUgcmFyZWx5IGludm9rZWQgdW5sZXNzIHRoZXJlJ3MgYW4gT09NIHNpdHVhdGlvbiBvciBgcHJvY2Vzc19tcmVsZWFzZWAgaXMgZXhwbGljaXRseSBjYWxsZWQuIFRoaXMgaXMgKnBlcmZlY3QqLiBUaGlzIG1ha2VzIHRoZW0gaWRlYWwgY2FuZGlkYXRlcyBmb3Igd2hhdCB3ZSBjYWxsIFwiRm9jdXNTeW1ib2xzXCIsIGFzIHRoZXkgYXJlIGhpZ2hseSBzcGVjaWZpYyB0byB0aGUgYmVoYXZpb3Igd2UncmUgdGFyZ2V0aW5nLlxuXG5Ob3csIGp1c3QgdG8gYmUgcHJlY2lzZSwgSSdsbCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IHN5bWJvbCBuYW1lcyBnZW5lcmF0ZWQgYnkgdGhlIGBTWVNDQUxMX0RFRklORWAgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvc3lzY2FsbHMuaGAuIFdlIHdhbnQgbm8gYW1iaWd1aXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA2OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MjoxMS4yODgyMjAwMTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzkwMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBTWVNDQUxMX0RFRklORVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTIxMT1zdGF0aWMgaW5saW5lIGludCBpc19zeXNjYWxsX3RyYWNlX2V2ZW50KHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICp0cF9ldmVudClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0yMTctI2lmbmRlZiBTWVNDQUxMX0RFRklORTBcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjE4OiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUwKHNuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMjE5LVxcdFNZU0NBTExfTUVUQURBVEEoXyMjc25hbWUsIDApO1xcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0yMjQtXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjIyNTojZGVmaW5lIFNZU0NBTExfREVGSU5FMShuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCgxLCBfIyNuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjI2OiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUyKG5hbWUsIC4uLikgU1lTQ0FMTF9ERUZJTkV4KDIsIF8jI25hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoyMjc6I2RlZmluZSBTWVNDQUxMX0RFRklORTMobmFtZSwgLi4uKSBTWVNDQUxMX0RFRklORXgoMywgXyMjbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjIyODojZGVmaW5lIFNZU0NBTExfREVGSU5FNChuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCg0LCBfIyNuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjI5OiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkU1KG5hbWUsIC4uLikgU1lTQ0FMTF9ERUZJTkV4KDUsIF8jI25hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoyMzA6I2RlZmluZSBTWVNDQUxMX0RFRklORTYobmFtZSwgLi4uKSBTWVNDQUxMX0RFRklORXgoNiwgXyMjbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTIzMS1cXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjMyOiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkVfTUFYQVJHU1xcdDZcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMjMzLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoyMzQ6I2RlZmluZSBTWVNDQUxMX0RFRklORXgoeCwgc25hbWUsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTIzNS1cXHRTWVNDQUxMX01FVEFEQVRBKHNuYW1lLCB4LCBfX1ZBX0FSR1NfXylcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjExLjMzNjYxNjgwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDQ5NDg1NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTeXN0ZW0gQ2FsbCBEZWZpbml0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHN5c3RlbSBjYWxscy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIHNlZS4uLiB0aGUgZGVmaW5pdGl2ZSBkZWNsYXJhdGlvbiBvZiBzeXN0ZW0gY2FsbCBudW1iZXJzIGFuZCBwcm90b3R5cGVzIHNob3VsZCBiZSBpbiBgaW5jbHVkZS9saW51eC9zeXNjYWxscy5oYC4gTm93LCBJIHJlY2FsbCBoYXZpbmcgdG8gcmVmZXIgdG8gdGhpcyBzZWN0aW9uIG9mIGNvZGUgYmVmb3JlLiBUbyBiZSBzcGVjaWZpYywgbXkgaW5pdGlhbCBpbnF1aXJ5IHdpbGwgc3RhcnQgd2l0aCBsaW5lcyAyMzUtMjU1LiBJJ20gaG9waW5nIEkgY2FuIGZpbmQgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCwgb3IgYXQgbGVhc3QgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLCBpbiB0aGF0IHNlZ21lbnQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MjoxMy43ODYxMDUyMTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc3lzY2FsbHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMzA6XFx0I2RlZmluZSBTWVNDQUxMX0RFRklORTYobmFtZSwgLi4uKSBTWVNDQUxMX0RFRklORXgoNiwgXyMjbmFtZSwgX19WQV9BUkdTX18pXFxuIDIzMTpcXHRcXG4gMjMyOlxcdCNkZWZpbmUgU1lTQ0FMTF9ERUZJTkVfTUFYQVJHU1xcdDZcXG4gMjMzOlxcdFxcbiAyMzQ6XFx0I2RlZmluZSBTWVNDQUxMX0RFRklORXgoeCwgc25hbWUsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuIDIzNTpcXHRcXHRTWVNDQUxMX01FVEFEQVRBKHNuYW1lLCB4LCBfX1ZBX0FSR1NfXylcXHRcXHRcXHRcXFxcXFxuIDIzNjpcXHRcXHRfX1NZU0NBTExfREVGSU5FeCh4LCBzbmFtZSwgX19WQV9BUkdTX18pXFxuIDIzNzpcXHRcXG4gMjM4OlxcdCNkZWZpbmUgX19QUk9URUNUKC4uLikgYXNtbGlua2FnZV9wcm90ZWN0KF9fVkFfQVJHU19fKVxcbiAyMzk6XFx0XFxuIDI0MDpcXHQvKlxcbiAyNDE6XFx0ICogVGhlIGFzbWxpbmthZ2Ugc3R1YiBpcyBhbGlhc2VkIHRvIGEgZnVuY3Rpb24gbmFtZWQgX19zZV9zeXNfKigpIHdoaWNoXFxuIDI0MjpcXHQgKiBzaWduLWV4dGVuZHMgMzItYml0IGludHMgdG8gbG9uZ3Mgd2hlbmV2ZXIgbmVlZGVkLiBUaGUgYWN0dWFsIHdvcmsgaXNcXG4gMjQzOlxcdCAqIGRvbmUgd2l0aGluIF9fZG9fc3lzXyooKS5cXG4gMjQ0OlxcdCAqL1xcbiAyNDU6XFx0I2lmbmRlZiBfX1NZU0NBTExfREVGSU5FeFxcbiAyNDY6XFx0I2RlZmluZSBfX1NZU0NBTExfREVGSU5FeCh4LCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyNDc6XFx0XFx0X19kaWFnX3B1c2goKTtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDI0ODpcXHRcXHRfX2RpYWdfaWdub3JlKEdDQywgOCwgXFxcIi1XYXR0cmlidXRlLWFsaWFzXFxcIixcXHRcXHRcXHRcXFxcXFxuIDI0OTpcXHRcXHRcXHQgICAgICBcXFwiVHlwZSBhbGlhc2luZyBpcyB1c2VkIHRvIHNhbml0aXplIHN5c2NhbGwgYXJndW1lbnRzXFxcIik7XFxcXFxcbiAyNTA6XFx0XFx0X19kaWFnX2lnbm9yZShjbGFuZywgMjMsIFxcXCItV3Vua25vd24td2FybmluZy1vcHRpb25cXFwiLFxcdFxcdFxcXFxcXG4gMjUxOlxcdFxcdFxcdCAgICAgIFxcXCJBdm9pZCBicmVha2luZyB2ZXJzaW9ucyB3aXRob3V0IC1XYXR0cmlidXRlLWFsaWFzXFxcIik7XFxcXFxcbiAyNTI6XFx0XFx0X19kaWFnX2lnbm9yZShjbGFuZywgMjMsIFxcXCItV2F0dHJpYnV0ZS1hbGlhc1xcXCIsXFx0XFx0XFx0XFxcXFxcbiAyNTM6XFx0XFx0XFx0ICAgICAgXFxcIlR5cGUgYWxpYXNpbmcgaXMgdXNlZCB0byBzYW5pdGl6ZSBzeXNjYWxsIGFyZ3VtZW50c1xcXCIpO1xcXFxcXG4gMjU0OlxcdFxcdGFzbWxpbmthZ2UgbG9uZyBzeXMjI25hbWUoX19NQVAoeCxfX1NDX0RFQ0wsX19WQV9BUkdTX18pKVxcdFxcXFxcXG4gMjU1OlxcdFxcdFxcdF9fYXR0cmlidXRlX18oKGFsaWFzKF9fc3RyaW5naWZ5KF9fc2Vfc3lzIyNuYW1lKSkpKTtcXHRcXFxcXFxuIDI1NjpcXHRcXHRBTExPV19FUlJPUl9JTkpFQ1RJT04oc3lzIyNuYW1lLCBFUlJOTyk7XFx0XFx0XFx0XFxcXFxcbiAyNTc6XFx0XFx0c3RhdGljIGlubGluZSBsb25nIF9fZG9fc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSk7XFxcXFxcbiAyNTg6XFx0XFx0YXNtbGlua2FnZSBsb25nIF9fc2Vfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSk7XFx0XFxcXFxcbiAyNTk6XFx0XFx0YXNtbGlua2FnZSBsb25nIF9fc2Vfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSlcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjEzLjc4NjIxOTY0NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjI4ODMxMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB4ODZfNjQgU3lzdGVtIENhbGwgV3JhcHBlcioqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBpbiBvbiB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZSBub3cuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHN5c3RlbSBjYWxscyBhcmUgaGFuZGxlZCBhdCB0aGUgYXNzZW1ibHkgbGV2ZWwsIHBhcnRpY3VsYXJseSBob3cgdGhleSdyZSB3cmFwcGVkLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaGAgZmlsZS4gVGhhdCdzIHRoZSBsaWtlbHkgbG9jYXRpb24gZm9yIHRoZSBrZXkgZGVmaW5pdGlvbnMgYW5kIG1hY3JvcyByZWxhdGVkIHRvIHN5c3RlbSBjYWxsIGludm9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb24gdGhpcyBwbGF0Zm9ybS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gbGV0J3MgZ2V0IHN0YXJ0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBpbiB0aGVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjE2LjQxNTA1OTE5MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyNzgzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX194NjRfc3lzX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM9Mzc9c3RhdGljIG5vaW5saW5lIGxvbmcgeDY0X3N5c19jYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmMtNDAtXFx0I2luY2x1ZGUgXFx1MDAzY2FzbS9zeXNjYWxsc182NC5oXFx1MDAzZVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYzo0MTpcXHRkZWZhdWx0OiByZXR1cm4gX194NjRfc3lzX25pX3N5c2NhbGwocmVncyk7XFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jLTQyLVxcdH1cXG4tLVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYz00NT1zdGF0aWMgbm9pbmxpbmUgbG9uZyB4MzJfc3lzX2NhbGwoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBucilcXG4tLVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYy00OS1cXHQjaW5jbHVkZSBcXHUwMDNjYXNtL3N5c2NhbGxzX3gzMi5oXFx1MDAzZVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYzo1MDpcXHRkZWZhdWx0OiByZXR1cm4gX194NjRfc3lzX25pX3N5c2NhbGwocmVncyk7XFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jLTUxLVxcdH1cXG4tLVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTctI1xcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsOjg6IyBUaGUgX194NjRfc3lzXyooKSBzdHVicyBhcmUgY3JlYXRlZCBvbi10aGUtZmx5IGZvciBzeXNfKigpIHN5c3RlbSBjYWxsc1xcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTktI1xcbi0tXFxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYz0xMTk9c3RhdGljIGJvb2wgX19lbXVsYXRlX3ZzeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTIxNy1cXHRcXHQvKiB0aGlzIGRlY29kZXMgcmVncy1cXHUwMDNlZGkgYW5kIHJlZ3MtXFx1MDAzZXNpIG9uIGl0cyBvd24gKi9cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIxODpcXHRcXHRyZXQgPSBfX3g2NF9zeXNfZ2V0dGltZW9mZGF5KHJlZ3MpO1xcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjE5LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yMjItXFx0XFx0LyogdGhpcyBkZWNvZGVzIHJlZ3MtXFx1MDAzZWRpIG9uIGl0cyBvd24gKi9cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIyMzpcXHRcXHRyZXQgPSBfX3g2NF9zeXNfdGltZShyZWdzKTtcXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTIyNC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjMwLVxcdFxcdC8qIHRoaXMgZGVjb2RlcyByZWdzLVxcdTAwM2VkaSwgcmVncy1cXHUwMDNlc2kgYW5kIHJlZ3MtXFx1MDAzZWR4IG9uIGl0cyBvd24gKi9cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIzMTpcXHRcXHRyZXQgPSBfX3g2NF9zeXNfZ2V0Y3B1KHJlZ3MpO1xcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjMyLVxcdFxcdHJlZ3MtXFx1MDAzZWR4ID0gb3JpZ19keDtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTEwLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjExOmV4dGVybiBsb25nIF9feDY0X3N5c19uaV9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xMi1leHRlcm4gbG9uZyBfX2lhMzJfc3lzX25pX3N5c2NhbGwoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMTYtICogc3RydWN0IHB0X3JlZ3MgKnJlZ3MgYXMgdGhlIG9ubHkgYXJndW1lbnQgb2YgdGhlIHN5c2NhbGwgc3R1YihzKSBuYW1lZCBhczpcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaDoxNzogKiBfX3g2NF9zeXNfKigpICAgICAgICAgLSA2NC1iaXQgbmF0aXZlIHN5c2NhbGxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xOC0gKiBfX2lhMzJfc3lzXyooKSAgICAgICAgLSAzMi1iaXQgbmF0aXZlIHN5c2NhbGwgb3IgY29tbW9uIGNvbXBhdCBzeXNjYWxsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0zMy0gKlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjM0OiAqIFxcdTAwM2NfX3g2NF9zeXNfcmVjdlxcdTAwM2U6XFx0XFx0XFx1MDAzYy0tIHN5c2NhbGwgd2l0aCA0IHBhcmFtZXRlcnNcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0zNS0gKlxcdGNhbGxxXFx0XFx1MDAzY19fZmVudHJ5X19cXHUwMDNlXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0yNTktICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYwOmxvbmcgX194NjRfc3lzX2dldGNwdShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYxOmxvbmcgX194NjRfc3lzX2dldHRpbWVvZmRheShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYyOmxvbmcgX194NjRfc3lzX3RpbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTI2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDI6MTYuNDc3MzQzNDcyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYwNjQ5MDk2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbXJlbGVhc2VgIFN5c3RlbSBDYWxsIFdyYXBwZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Ugc3lzdGVtIGNhbGxzOiBgX19kb19zeXNfcHJvY2Vzc19tcmVsZWFzZWAgYW5kIGBfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZWAuIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBhcmUgaW1wbGVtZW50ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGFyY2hpdGVjdHVyZS4gVGltZSB0byBjaGVjayB0aGUgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYCBoZWFkZXIuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gbGluZXMgMTgwIHRocm91Z2ggMjIwLiBJIGFudGljaXBhdGUgdGhpcyBzZWN0aW9uIHdpbGwgZGVmaW5lIHRoZSB3cmFwcGVycyBvciB0aGUgbG93LWxldmVsIGdsdWUgdGhhdCBpbnRlcmZhY2VzIHdpdGggdGhlIGtlcm5lbCdzIGFjdHVhbCBgbXJlbGVhc2VgIGltcGxlbWVudGF0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBhcmd1bWVudHMgYXJlIHBhc3NlZCwgYW55IG5lY2Vzc2FyeSBjb250ZXh0IHN3aXRjaGluZywgb3IgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkZXRhaWxzIHJlbGV2YW50IHRvIHRoZSBgbXJlbGVhc2VgIGNhbGwuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBiYXNlIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGtlcm5lbCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA2NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjIyLjU0MjI1NTI1NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFxuIDE4MTpcXHQjZWxzZSAvKiBDT05GSUdfWDg2X1gzMl9BQkkgKi9cXG4gMTgyOlxcdCNkZWZpbmUgX19YMzJfQ09NUEFUX1NZU19TVFVCMChuYW1lKVxcbiAxODM6XFx0I2RlZmluZSBfX1gzMl9DT01QQVRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcXG4gMTg0OlxcdCNkZWZpbmUgX19YMzJfQ09NUEFUX0NPTkRfU1lTQ0FMTChuYW1lKVxcbiAxODU6XFx0I2VuZGlmIC8qIENPTkZJR19YODZfWDMyX0FCSSAqL1xcbiAxODY6XFx0XFxuIDE4NzpcXHRcXG4gMTg4OlxcdCNpZmRlZiBDT05GSUdfQ09NUEFUXFxuIDE4OTpcXHQvKlxcbiAxOTA6XFx0ICogQ29tcGF0IG1lYW5zIElBMzJfRU1VTEFUSU9OIGFuZC9vciBYODZfWDMyLiBBcyB0aGV5IHVzZSBhIGRpZmZlcmVudFxcbiAxOTE6XFx0ICogbWFwcGluZyBvZiByZWdpc3RlcnMgdG8gcGFyYW1ldGVycywgd2UgbmVlZCB0byBnZW5lcmF0ZSBzdHVicyBmb3IgZWFjaFxcbiAxOTI6XFx0ICogb2YgdGhlbS5cXG4gMTkzOlxcdCAqL1xcbiAxOTQ6XFx0I2RlZmluZSBDT01QQVRfU1lTQ0FMTF9ERUZJTkUwKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxOTU6XFx0XFx0c3RhdGljIGxvbmdcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE5NjpcXHRcXHRfX2RvX2NvbXBhdF9zeXNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpfX3VudXNlZCk7XFx0XFx0XFxcXFxcbiAxOTc6XFx0XFx0X19JQTMyX0NPTVBBVF9TWVNfU1RVQjAobmFtZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE5ODpcXHRcXHRfX1gzMl9DT01QQVRfU1lTX1NUVUIwKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxOTk6XFx0XFx0c3RhdGljIGxvbmdcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIwMDpcXHRcXHRfX2RvX2NvbXBhdF9zeXNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpfX3VudXNlZClcXG4gMjAxOlxcdFxcbiAyMDI6XFx0I2RlZmluZSBDT01QQVRfU1lTQ0FMTF9ERUZJTkV4KHgsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIwMzpcXHRcXHRzdGF0aWMgbG9uZyBfX3NlX2NvbXBhdF9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0xPTkcsX19WQV9BUkdTX18pKTtcXHRcXFxcXFxuIDIwNDpcXHRcXHRzdGF0aWMgaW5saW5lIGxvbmcgX19kb19jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSk7XFxcXFxcbiAyMDU6XFx0XFx0X19JQTMyX0NPTVBBVF9TWVNfU1RVQngoeCwgbmFtZSwgX19WQV9BUkdTX18pXFx0XFx0XFx0XFx0XFxcXFxcbiAyMDY6XFx0XFx0X19YMzJfQ09NUEFUX1NZU19TVFVCeCh4LCBuYW1lLCBfX1ZBX0FSR1NfXylcXHRcXHRcXHRcXHRcXFxcXFxuIDIwNzpcXHRcXHRzdGF0aWMgbG9uZyBfX3NlX2NvbXBhdF9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0xPTkcsX19WQV9BUkdTX18pKVxcdFxcXFxcXG4gMjA4OlxcdFxcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIwOTpcXHRcXHRcXHRyZXR1cm4gX19kb19jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUxPVVNFLF9fVkFfQVJHU19fKSk7XFxcXFxcbiAyMTA6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjExOlxcdFxcdHN0YXRpYyBpbmxpbmUgbG9uZyBfX2RvX2NvbXBhdF9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0RFQ0wsX19WQV9BUkdTX18pKVxcbiAyMTI6XFx0XFxuIDIxMzpcXHQvKlxcbiAyMTQ6XFx0ICogQXMgc29tZSBjb21wYXQgc3lzY2FsbHMgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCwgd2UgbmVlZCB0byBleHBhbmRcXG4gMjE1OlxcdCAqIENPTkRfU1lTQ0FMTF9DT01QQVQgaW4ga2VybmVsL3N5c19uaS5jIHRvIGNvdmVyIHRoaXMgY2FzZSBhcyB3ZWxsLlxcbiAyMTY6XFx0ICovXFxuIDIxNzpcXHQjZGVmaW5lIENPTkRfU1lTQ0FMTF9DT01QQVQobmFtZSkgXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMTg6XFx0XFx0X19JQTMyX0NPTVBBVF9DT05EX1NZU0NBTEwobmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuIDIxOTpcXHRcXHRfX1gzMl9DT01QQVRfQ09ORF9TWVNDQUxMKG5hbWUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjIyLjU0MjMyNDgwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MDcwODkzNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIHg4NiBOYXRpdmUgU3lzY2FsbCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgbmF0aXZlIHN5c2NhbGxzIGFyZSBoYW5kbGVkIG9uIHg4Ni4gTGV0J3MgZGlnIGludG8gdGhpczsgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGNhbGwgd3JhcHBlcnMgd29yay4gUmlnaHQsIGxldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYC4gSSByZWNhbGwgdGhhdCB0aGUgY3JpdGljYWwgZGVmaW5pdGlvbnMgYXJlIHR5cGljYWxseSBpbiB0aGF0IGhlYWRlciBmaWxlLiBOb3csIGFjY29yZGluZyB0byBteSBtZW50YWwgbWFwLCBsaW5lcyAyMjAgdGhyb3VnaCAyNTggc2hvdWxkIGJlIHdoZXJlIHRoZSBrZXkgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgZm91bmQuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgd2l0aGluIHRoYXQgcmFuZ2UuIEknbGwgbmVlZCB0byBmb2N1cyBhbmQgcmVtZW1iZXIgd2hhdCBJIHdhcyBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxOTIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjI4LjYxMzIyMDkyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjA6XFx0XFxuIDIyMTpcXHQjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqL1xcbiAyMjI6XFx0XFxuIDIyMzpcXHQjZGVmaW5lIF9fU1lTQ0FMTF9ERUZJTkV4KHgsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIyNDpcXHRcXHRzdGF0aWMgbG9uZyBfX3NlX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfTE9ORyxfX1ZBX0FSR1NfXykpO1xcdFxcXFxcXG4gMjI1OlxcdFxcdHN0YXRpYyBpbmxpbmUgbG9uZyBfX2RvX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVDTCxfX1ZBX0FSR1NfXykpO1xcXFxcXG4gMjI2OlxcdFxcdF9fWDY0X1NZU19TVFVCeCh4LCBuYW1lLCBfX1ZBX0FSR1NfXylcXHRcXHRcXHRcXHRcXFxcXFxuIDIyNzpcXHRcXHRfX0lBMzJfU1lTX1NUVUJ4KHgsIG5hbWUsIF9fVkFfQVJHU19fKVxcdFxcdFxcdFxcdFxcXFxcXG4gMjI4OlxcdFxcdHN0YXRpYyBsb25nIF9fc2Vfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSlcXHRcXFxcXFxuIDIyOTpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMzA6XFx0XFx0XFx0bG9uZyByZXQgPSBfX2RvX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfQ0FTVCxfX1ZBX0FSR1NfXykpO1xcXFxcXG4gMjMxOlxcdFxcdFxcdF9fTUFQKHgsX19TQ19URVNULF9fVkFfQVJHU19fKTtcXHRcXHRcXHRcXHRcXFxcXFxuIDIzMjpcXHRcXHRcXHRfX1BST1RFQ1QoeCwgcmV0LF9fTUFQKHgsX19TQ19BUkdTLF9fVkFfQVJHU19fKSk7XFx0XFxcXFxcbiAyMzM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIzNDpcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMzU6XFx0XFx0c3RhdGljIGlubGluZSBsb25nIF9fZG9fc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSlcXG4gMjM2OlxcdFxcbiAyMzc6XFx0LypcXG4gMjM4OlxcdCAqIEFzIHRoZSBnZW5lcmljIFNZU0NBTExfREVGSU5FMCgpIG1hY3JvIGRvZXMgbm90IGRlY29kZSBhbnkgcGFyYW1ldGVycyBmb3JcXG4gMjM5OlxcdCAqIG9idmlvdXMgcmVhc29ucywgYW5kIHBhc3Npbmcgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgdG8gaXQgaW4gJXJkaSBkb2VzIG5vdFxcbiAyNDA6XFx0ICogaHVydCwgd2Ugb25seSBuZWVkIHRvIHJlLWRlZmluZSBpdCBoZXJlIHRvIGtlZXAgdGhlIG5hbWluZyBjb25ncnVlbnQgdG9cXG4gMjQxOlxcdCAqIFNZU0NBTExfREVGSU5FeCgpIC0tIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgdGhlIENPTkRfU1lTQ0FMTCgpIG1hY3JvXFxuIDI0MjpcXHQgKiB0byB3b3JrIGNvcnJlY3RseS5cXG4gMjQzOlxcdCAqL1xcbiAyNDQ6XFx0I2RlZmluZSBTWVNDQUxMX0RFRklORTAoc25hbWUpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyNDU6XFx0XFx0U1lTQ0FMTF9NRVRBREFUQShfIyNzbmFtZSwgMCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyNDY6XFx0XFx0c3RhdGljIGxvbmcgX19kb19zeXNfIyNzbmFtZShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqX191bnVzZWQpO1xcdFxcXFxcXG4gMjQ3OlxcdFxcdF9fWDY0X1NZU19TVFVCMChzbmFtZSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDI0ODpcXHRcXHRfX0lBMzJfU1lTX1NUVUIwKHNuYW1lKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjQ5OlxcdFxcdHN0YXRpYyBsb25nIF9fZG9fc3lzXyMjc25hbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKl9fdW51c2VkKVxcbiAyNTA6XFx0XFxuIDI1MTpcXHQjZGVmaW5lIENPTkRfU1lTQ0FMTChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjUyOlxcdFxcdF9fWDY0X0NPTkRfU1lTQ0FMTChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjUzOlxcdFxcdF9fSUEzMl9DT05EX1NZU0NBTEwobmFtZSlcXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFxuIDI1NjpcXHQvKlxcbiAyNTc6XFx0ICogRm9yIFZTWVNDQUxMUywgd2UgbmVlZCB0byBkZWNsYXJlIHRoZXNlIHRocmVlIHN5c2NhbGxzIHdpdGggdGhlIG5ld1xcbiAyNTg6XFx0ICogcHRfcmVncy1iYXNlZCBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIGluLWtlcm5lbCB1c2UuXFxuIDI1OTpcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDI6MjguNjEzMzE3OTEyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjczMzYyNDU5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqU3lzdGVtIENhbGwgU3R1YiBPYnNlcnZhdGlvbnMqKlxuXG5Pa2F5LCBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBzeXN0ZW0gY2FsbCBzdHVicyBhbmQgc29tZXRoaW5nIGludGVyZXN0aW5nIGlzIGp1bXBpbmcgb3V0IGF0IG1lLiBJJ20gc2VlaW5nIHRoYXQgdGhlIGBfX2RvX3N5cyMjbmFtZWAgbWFjcm8gaXMgZGVmaW5lZCBhcyBgc3RhdGljIGlubGluZWAsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGEgZmFzdCBwYXRoIG9wdGltaXphdGlvbi4gQnV0IHRoZW4gSSdtIG5vdGljaW5nIHRoYXQgdGhlIGBfX3NlX3N5cyMjbmFtZWAgYW5kIGBfX3g2NF9zeXNfIyNuYW1lYCB2ZXJzaW9ucywgd2hpY2ggZ2V0IGV4cGFuZGVkIHZpYSBgX19YNjRfU1lTX1NUVUJ4YCwgYXJlICpmdW5jdGlvbnMqIOKAkyBhY3R1YWwsIGNhbGxhYmxlIGZ1bmN0aW9ucy4gVGhhdCBjb250cmFzdCBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhlIGRlc2lnbiBjaG9pY2Ugd2FzIG1hZGUgdG8gaGFuZGxlIHRoZW0gZGlmZmVyZW50bHkuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19YNjRfU1lTX1NUVUJ4YCB0byBzZWUgd2hhdCdzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLCBJJ2xsIGZpbmQgaXQgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYC4gTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgdGhhdCBtYWNybyBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyMzAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjM1Ljk0OTU2NzgwN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4OTU5NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBfX1g2NF9TWVNfU1RVQnhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg9MTI9ZXh0ZXJuIGxvbmcgX19pYTMyX3N5c19uaV9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTEwOS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaDoxMTA6I2RlZmluZSBfX1g2NF9TWVNfU1RVQngoeCwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xMTEtXFx0X19TWVNfU1RVQngoeDY0LCBzeXMjI25hbWUsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMTE4LSNkZWZpbmUgX19YNjRfU1lTX1NUVUIwKG5hbWUpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MTE5OiNkZWZpbmUgX19YNjRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xMjAtI2RlZmluZSBfX1g2NF9DT05EX1NZU0NBTEwobmFtZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDI6MzYuMTM4NTM4NTQ5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg4MzI0MzE1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY29wZSBhbmQgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMgb2YgYHByb2Nlc3NfbXJlbGVhc2VgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdlbnQgbGlrZSB0aGlzOiBgX19TWVNfU1RVQnhgIGNyZWF0ZXMgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYC4gSSBjb25maXJtZWQgdGhhdC4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIHN5c3RlbSBjYWxsIGl0c2VsZiwgYHByb2Nlc3NfbXJlbGVhc2VgLiBUaGVuIEkgbmVlZGVkIHRvIHZlcmlmeSB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuIEkga25vdyBgU1lTQ0FMTF9ERUZJTkUyYCB1bHRpbWF0ZWx5IGRlZmluZXMgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYC4gSSBhbHNvIHJlbWVtYmVyZWQgYF9fc2Vfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgIGdldHMgZGVmaW5lZCBhcyB3ZWxsLlxuXG5JIGZvY3VzZWQgb24gYF9fb29tX3JlYXBfdGFza19tbWAsIGEgc3RhdGljIGZ1bmN0aW9uIGluIGBtbS9vb21fa2lsbC5jYC4gQmVjYXVzZSBpdCdzIHN0YXRpYyBhbmQgaGFzIG11bHRpcGxlIGNhbGwgc2l0ZXMgKGBvb21fcmVhcF90YXNrX21tYCBhbmQgYHByb2Nlc3NfbXJlbGVhc2VgKSwgaXQgY291bGQgYmUgaW5saW5lZCwgYnV0IGdpdmVuIGl0cyBzaXplIGFuZCBtdWx0aXBsZSB1c2VzLCBsaWtlbHkgd29uJ3QgYmUgaW5saW5lZC4gRXZlbiBpZiBpdCBpcywgdGhlIHN0YXRpYyBmdW5jdGlvbiB3aWxsIHN0aWxsIGJlIGEgc3ltYm9sIGlmIG5vdCBvcHRpbWl6ZWQgYXdheSwgb3IgaW4gYW55IGNhc2UsIGJvdGggY2FsbGVycyBwbHVzIHRoZSBmdW5jdGlvbiBib2R5IHdpbGwgYmUgcHJvdmlkZWQuXG5cblRoZW4sIEkgcmV2aWV3ZWQgdGhlIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBmb3IgYSBmdWxsZXIgcGljdHVyZTogYHphcF92bWFfZm9yX3JlYXBpbmdgLCBgX19vb21fcmVhcF90YXNrX21tYCwgYG9vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza2AsIGFuZCBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZXkncmUgY2FsbGVkIHViaXF1aXRvdXNseS4gVHVybnMgb3V0LCBub25lIG9mIHRoZXNlIGFyZSB1bml2ZXJzYWxseSBjYWxsZWQuIEVhY2ggaXMgdGllZCB0byB0aGUgb29tIHJlYXBlciBmdW5jdGlvbmFsaXR5IG9yIHRoZSBgcHJvY2Vzc19tcmVsZWFzZWAgc3lzdGVtIGNhbGwuXG5cbkkgdGhlbiBjb25maXJtZWQgdGhhdCBzeXprYWxsZXIgY2FuIGluZGVlZCBjYWxsIGBwcm9jZXNzX21yZWxlYXNlYC4gSSBrbm93IGl0J3MgYSBzdXBwb3J0ZWQgc3lzY2FsbCBhbmQgdGhhdCBpdCBnZW5lcmF0ZXMgdGhlIGNvcnJlY3QgY2FsbC4gSSB0aG91Z2h0IGFib3V0IHRoZSBsaWtlbHkgc2NlbmFyaW8gd2hlbiBgcHJvY2Vzc19tcmVsZWFzZWAgaXMgaW52b2tlZCBjb25jdXJyZW50bHkgd2l0aCBhIHdyaXRlciBjb250ZW5kaW5nIG9uIGBtbWFwX2xvY2tgLiBUaGlzIGlzIGltcG9ydGFudCwgYXMgaXQgZXhlcmNpc2VzIHRoZSBuZXcgY29kZSBwYXRocyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaC4gSSByZW1lbWJlcmVkIHRoZSBjb2RlIHVzZXMgYG1tYXBfbG9ja19pc19jb250ZW5kZWQobW0pYCwgZHJvcHMgYG1tYXBfcmVhZF91bmxvY2sobW0pYCwgcmV0dXJucyBgLUVBR0FJTmAsIGFuZCByZXRyaWVzLiBJJ20gYWxzbyBjb25zY2lvdXMgb2YgdGhlIDFHQiBjaHVua2luZyBsb29wIHRoYXQga2lja3MgaW4gZHVyaW5nIFZNQSByZWFwaW5nLlxuXG5Db25maWctd2lzZSwgbXkgcHJpbWFyeSBjb25jZXJuIGlzIGBDT05GSUdfTU1VYC4gQ2hlY2tpbmcgdGhlIHNvdXJjZSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgQ09ORklHX01NVWAgaXMgdGhlIGdhdGVrZWVwZXIgZm9yIHRoZSBvb20gcmVhcGVyLiBXaXRob3V0IGl0LCBgcHJvY2Vzc19tcmVsZWFzZWAgcmV0dXJucyBgLUVOT1NZU2AsIGFuZCB0aGUgcmVhcGVyIGRvZXNuJ3QgZXhpc3QuIFRoZSBvdGhlciBmdW5jdGlvbiB0aGF0IGlzIHBhcnQgb2YgdGhpcyBpcyBgemFwX3ZtYV9mb3JfcmVhcGluZ2AuIEkgdmVyaWZpZWQgdGhhdCBgemFwX3ZtYV9mb3JfcmVhcGluZ2AgaXMgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGhpbiB0aGUgYG1tL21lbW9yeS5jYCBmaWxlLCB3aGljaCBpdHNlbGYgaXMgb25seSBidWlsdCB3aGVuIGBDT05GSUdfTU1VPXlgLlxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgRW5hYmxlQ29uZmlnczogW1wiTU1VXCJdYC4gQW5kIGFmdGVyIGEgZmluYWwgY2hlY2sgb2YgYWxsIEtjb25maWcgZmlsZXMsIEkgY29uZmlybSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgcmVsZXZhbnQgdG8gaGlkaW5nIG9yIGRpc2FibGluZyBgcHJvY2Vzc19tcmVsZWFzZWAgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg1NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDI6NDQuOTcwOTczMDYzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQwNDg2NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY2Vzc19tcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJLY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0Mjo0NS4wMTczOTA0ODdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTY4MzM5NjM2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJpYWdlIEFuYWx5c2lzOiBPT00vYHByb2Nlc3NfbXJlbGVhc2VgKipcblxuT2theSwgc28gdGhlcmUgYXJlIG5vIGV4cGxpY2l0IGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIGhlcmU7IGl0J3MgdW5jb25kaXRpb25hbGx5IGJ1aWx0IGlmIGBDT05GSUdfTU1VYCBpcyBlbmFibGVkLCB3aGljaCBpcyBhIHByZXR0eSBzdGFuZGFyZCBjb25maWd1cmF0aW9uLiBMZXQncyBtYWtlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgdHJpYWdlIGluc3RydWN0aW9ucyBjb3JyZWN0bHkuIEkgbmVlZCB0byBuYWlsIGRvd246IGBXb3J0aEZ1enppbmdgLCBgUmVhc29uaW5nYCwgYEVuYWJsZUNvbmZpZ3NgLCBhbmQgYEZvY3VzU3ltYm9sc2AuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBMZXQncyBsaXN0IHRob3NlIG91dC4gSSBzZWUgYHphcF92bWFfZm9yX3JlYXBpbmdgLCBgX19vb21fcmVhcF90YXNrX21tYCwgYG9vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza2AsIGFuZCBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgLiBXYWl0LCBoYW5nIG9uLi4uIGlzIGl0IGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCBvciBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgPyBBaCwgcmlnaHQsIG9uIHg4Nl82NCwgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCBpcyB0aGUgYWN0dWFsIGVudHJ5IHBvaW50LCB3aGljaCBpcyB3aGF0IEknbSB0YXJnZXRpbmcgZ2l2ZW4gdGhlIGBhbWQ2NGAgdGFyZ2V0LiBXaGF0IGFib3V0IG90aGVyIGFyY2hpdGVjdHVyZXMgbGlrZSBhcm02ND8gV2VsbCwgSSBkb24ndCBjYXJlIGF0IHRoZSBtb21lbnQgYXMgdGhlIHByb21wdCBzcGVjaWZpZXMgYGFtZDY0YC4gT24gYW1kNjQsIEkga25vdyB0aGF0IGJvdGggYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCBhbmQgYF9fc2Vfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgIGFyZSBnZW5lcmF0ZWQuIFNvLCBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgIGl0IGlzLiBOb3csIGNhbiBJIGluY2x1ZGUgaXQ/IFllcy4gV2hhdCBhYm91dCBhbGwgdGhlIG90aGVycz8gYHphcF92bWFfZm9yX3JlYXBpbmdgLCBgX19vb21fcmVhcF90YXNrX21tYCwgYG9vbV9yZWFwX3Rhc2tfbW1gLCBhbmQgYG9vbV9yZWFwX3Rhc2tgLCBhbGwgb2YgdGhvc2UgYXJlIHZhbGlkIGNob2ljZXMgYXMgd2VsbC4gT2theSwgZ29vZC4gSSdtIGNvbmZpZGVudCBpbiB0aGVzZSBjaG9pY2VzLlxuXG5MZXQncyBkbyBhIGZpbmFsIGNoZWNrIGFnYWluc3QgdGhlIGluc3RydWN0aW9ucy4gUmVhY2hhYmlsaXR5OiB0aGlzIGFyZWEgaXMgY29yZSBNTSwgc28gcmVhY2hhYmxlIHZpYSAxKSB0aGUgYHByb2Nlc3NfbXJlbGVhc2VgIHN5c2NhbGwsIGFuZCAyKSB0aGUgT09NIGtpbGxlciByZWFwZXIgdGhyZWFkLiBCb3RoIGFyZSB0cml2aWFsIHRvIHJlYWNoIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gQ2hlY2suIGBXb3J0aEZ1enppbmdgOiBEZWZpbml0ZWx5IHRydWUuIFRoYXQncyBhIGdpdmVuLiBOb3csIHRoZSBgRm9jdXNTeW1ib2xzYDogYHphcF92bWFfZm9yX3JlYXBpbmdgLCBgX19vb21fcmVhcF90YXNrX21tYCwgYG9vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza2AsIGFuZCBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgLiBOb25lIG9mIHRoZXNlIGFyZSB1YmlxdWl0b3VzOyB0aGV5J3JlIHZlcnkgc3BlY2lmaWMgdG8gdGhlIHBhdGNoJ3MgY2hhbmdlcyB0byB0aGUgT09NIHJlYXBpbmcgYW5kIGBwcm9jZXNzX21yZWxlYXNlYCBtZWNoYW5pc21zLiBCaW5nby5cblxuT2theSwgSSdtIHNhdGlzZmllZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODQ3LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzowMS44NTEzNTY1OTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjY2OTEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTU1VXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemFwX3ZtYV9mb3JfcmVhcGluZ1wiLFxuICAgIFwiX19vb21fcmVhcF90YXNrX21tXCIsXG4gICAgXCJvb21fcmVhcF90YXNrX21tXCIsXG4gICAgXCJvb21fcmVhcF90YXNrXCIsXG4gICAgXCJfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVk1BIHVubWFwcGluZyBsb2dpYyBmb3IgT09NIHJlYXBpbmcgYW5kIHRoZSBwcm9jZXNzX21yZWxlYXNlIHN5c2NhbGwsIHNwbGl0dGluZyBWTUEgemFwcGluZyBpbnRvIDFHQiBjaHVua3MgYW5kIHlpZWxkaW5nIG1tYXBfbG9jayB3aGVuIGNvbnRlbmRlZC4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRyb2wgZmxvdyBhbmQgbG9ja2luZyBzZW1hbnRpY3MgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbG9jayBpbnZlcnNpb25zLCBvciBzdGF0ZSBpbmNvbnNpc3RlbmN5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInphcF92bWFfZm9yX3JlYXBpbmdcIixcbiAgICBcIl9fb29tX3JlYXBfdGFza19tbVwiLFxuICAgIFwib29tX3JlYXBfdGFza19tbVwiLFxuICAgIFwib29tX3JlYXBfdGFza1wiLFxuICAgIFwiX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFZNQSB1bm1hcHBpbmcgbG9naWMgZm9yIE9PTSByZWFwaW5nIGFuZCB0aGUgcHJvY2Vzc19tcmVsZWFzZSBzeXNjYWxsLCBzcGxpdHRpbmcgVk1BIHphcHBpbmcgaW50byAxR0IgY2h1bmtzIGFuZCB5aWVsZGluZyBtbWFwX2xvY2sgd2hlbiBjb250ZW5kZWQuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgc2VtYW50aWNzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2sgaW52ZXJzaW9ucywgb3Igc3RhdGUgaW5jb25zaXN0ZW5jeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDM6MDEuOTM0MDM1OTA2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUyNDY5ODAzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzowMS45MzQ1MTY5MzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMTUyNDY0OTU3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00gcmVhcGVyIGxvZ2ljIGluIG1tL29vbV9raWxsLmMgYW5kIG1tL21lbW9yeS5jIHNvIHRoYXQgVk1BcyBhcmUgemFwcGVkIGluIDFHQiBjaHVua3MsIGFsbG93aW5nIG1tYXBfbG9jayB0byBiZSB5aWVsZGVkIHRvIHdhaXRpbmcgd3JpdGVycyB1cG9uIGNvbnRlbnRpb24uIEl0IGFsc28gdXBkYXRlcyBlcnJvciBoYW5kbGluZyBhY3Jvc3MgemFwX3ZtYV9mb3JfcmVhcGluZywgX19vb21fcmVhcF90YXNrX21tLCBvb21fcmVhcF90YXNrLCBhbmQgdGhlIHByb2Nlc3NfbXJlbGVhc2Ugc3lzY2FsbC5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgKGFkZHIsIGVuZCwgcmV0LCBhdHRlbXB0cykgYXJlIHNjYWxhciB0eXBlcyBhbmQgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb3IgYXNzaWduZWQgcHJpb3IgdG8gdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IGhlYXAvc3RhY2sgYnVmZmVycywgZG9lcyBub3QgY29weSBhbnkgZGF0YSBvciBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzIGFmZmVjdGluZyByZWFkcyBvZiBtZW1vcnkuIEFueSBwb3RlbnRpYWwgZGVmZWN0cyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgaW52b2x2ZSBsb2NrIG1hbmFnZW1lbnQsIGxvY2sgY29udGVudGlvbiwgVk1BIGl0ZXJhdGlvbiwgb3IgcGFnZSB0YWJsZSB0ZWFyZG93biwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YWJmYTAzYjgxMjNkOWMyOWU1MjNhODQzM2NjZTE0MWRiOTRhZWJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTI6NDE6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMDUxNzljNGIyMDkwZS4uN2FjMTcyOGE1N2MyOSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC01OTMsNyArNTkzLDggQEAgc3RydWN0IHphcF9kZXRhaWxzO1xuIHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKTtcbi1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4raW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBlbmQpO1xuIGludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdCAgIGdmcF90IGdmcCk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggOTI2Mjc2ZDQxOTIwMi4uMjVjMzVhMjhhMzlkMSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTIyMDcsMTUgKzIyMDcsMTggQEAgc3RhdGljIHZvaWQgX196YXBfdm1hX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiBcbiAvKipcbi0gKiB6YXBfdm1hX2Zvcl9yZWFwaW5nIC0gemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nXG4rICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhIHJhbmdlIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xuICAqIEB2bWE6IFRoZSB2bWEgdG8gemFwLlxuKyAqIEBzdGFydDogVGhlIGZpcnN0IGFkZHJlc3MgdG8gemFwLlxuKyAqIEBlbmQ6IE9uZSBwYXN0IHRoZSBsYXN0IGFkZHJlc3MgdG8gemFwLlxuICAqXG4tICogWmFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nIGZvciB1c2UgYnkgdGhlIG9vbVxuLSAqIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxuKyAqIFphcCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIGluIFtAc3RhcnQsIEBlbmQpIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xuKyAqIGZvciB1c2UgYnkgdGhlIG9vbSBraWxsZXIuIEh1Z2V0bGIgdm1hcyBhcmUgbm90IHN1cHBvcnRlZC5cbiAgKlxuICAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHdlIHdvdWxkIGhhdmUgdG8gYmxvY2suXG4gICovXG4taW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4raW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBlbmQpXG4ge1xuIFx0c3RydWN0IHphcF9kZXRhaWxzIGRldGFpbHMgPSB7XG4gXHRcdC5yZWFwaW5nID0gdHJ1ZSxcbkBAIC0yMjI0LDcgKzIyMjcsNyBAQCBpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHN0cnVjdCBtbXVfZ2F0aGVyIHRsYjtcbiBcbiBcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXHUwMDNldm1fbW0sXG4tXHRcdFx0XHR2bWEtXHUwMDNldm1fc3RhcnQsIHZtYS1cdTAwM2V2bV9lbmQpO1xuK1x0XHRcdFx0c3RhcnQsIGVuZCk7XG4gXHR0bGJfZ2F0aGVyX21tdShcdTAwMjZ0bGIsIHZtYS1cdTAwM2V2bV9tbSk7XG4gXHRpZiAobW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbm9uYmxvY2soXHUwMDI2cmFuZ2UpKSB7XG4gXHRcdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcbmluZGV4IDVkNDhiZDg2MmMyN2IuLmNlZTBhMGY3YjRmMjggMTAwNjQ0XG4tLS0gYS9tbS9vb21fa2lsbC5jXG4rKysgYi9tbS9vb21fa2lsbC5jXG5AQCAtNTAzLDEwICs1MDMsMTcgQEAgc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG9vbV9yZWFwZXJfd2FpdCk7XG4gc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb29tX3JlYXBlcl9saXN0O1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob29tX3JlYXBlcl9sb2NrKTtcbiBcbi1zdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4rLypcbisgKiBDYWxsZWQgd2l0aCBtbWFwX2xvY2sgaGVsZCBmb3IgcmVhZC4gIFJldHVybnMgd2l0aCBpdCBzdGlsbCBoZWxkIG9uIDBcbisgKiAoZG9uZSkgb3IgLUVCVVNZIChwYXJ0IGNvdWxkIG5vdCBiZSByZWFwZWQsIHRyeSBhZ2FpbiBsYXRlciksIGFuZCBkcm9wc1xuKyAqIGl0IG9ubHkgb24gLUVBR0FJTiwgd2hlbiBpdCB3YXMgaGFuZGVkIG92ZXIgdG8gYSBxdWV1ZWQgd3JpdGVyIGFuZCB0aGVcbisgKiBjYWxsZXIgc2hvdWxkIHJldGFrZSBpdCBhbmQgc3RhcnQgb3Zlci5cbisgKi9cbitzdGF0aWMgaW50IF9fb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdGJvb2wgcmV0ID0gdHJ1ZTtcbitcdHVuc2lnbmVkIGxvbmcgYWRkciwgZW5kO1xuK1x0aW50IHJldCA9IDA7XG4gXHRNQV9TVEFURShtYXMsIFx1MDAyNm1tLVx1MDAzZW1tX210LCBVTE9OR19NQVgsIFVMT05HX01BWCk7XG4gXG4gXHQvKlxuQEAgLTUzOCw4ICs1NDUsMjUgQEAgc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0XHQgKiBjb3VudCBlbGV2YXRlZCB3aXRob3V0IGEgZ29vZCByZWFzb24uXG4gXHRcdCAqL1xuIFx0XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKSB7XG4tXHRcdFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hKSlcbi1cdFx0XHRcdHJldCA9IGZhbHNlO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogWmFwIGluIDFHIGNodW5rcyBhbmQgaGFuZCBtbWFwX2xvY2sgb3ZlciB3aGVuZXZlciBhXG4rXHRcdFx0ICogd3JpdGVyIGlzIHF1ZXVlZCBvbiBpdCwgc28gaXQgZG9lcyBub3Qgd2FpdCBmb3IgdGhlXG4rXHRcdFx0ICogd2hvbGUgcmVhcC5cbitcdFx0XHQgKi9cbitcdFx0XHRlbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuK1x0XHRcdHdoaWxlIChlbmQgXHUwMDNlIHZtYS1cdTAwM2V2bV9zdGFydCkge1xuK1x0XHRcdFx0YWRkciA9IG1heCh2bWEtXHUwMDNldm1fc3RhcnQsIEFMSUdOX0RPV04oZW5kIC0gMSwgU1pfMUcpKTtcbitcdFx0XHRcdGlmICh6YXBfdm1hX2Zvcl9yZWFwaW5nKHZtYSwgYWRkciwgZW5kKSkge1xuK1x0XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdFx0ZW5kID0gYWRkcjtcbitcdFx0XHRcdGlmICghbW1hcF9sb2NrX2lzX2NvbnRlbmRlZChtbSkpXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC01NDksMTYgKzU3MywxNyBAQCBzdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gLypcbiAgKiBSZWFwcyB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgZ2l2ZW4gdGFzay5cbiAgKlxuLSAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzIGFuZCBmYWxzZSBpZiBub25lIG9yIHBhcnQgb2YgdGhlIGFkZHJlc3Mgc3BhY2Vcbi0gKiBoYXMgYmVlbiByZWNsYWltZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5IGxhdGVyLlxuKyAqIFJldHVybnMgMCB3aGVuIGRvbmUsIC1FQUdBSU4gaWYgbW1hcF9sb2NrIHdhcyBoYW5kZWQgb3ZlciB0byBhIHdyaXRlclxuKyAqIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBzdGFydCBvdmVyLCBhbmQgLUVCVVNZIGlmIG5vbmUgb3IgcGFydCBvZiB0aGVcbisgKiBhZGRyZXNzIHNwYWNlIGhhcyBiZWVuIHJlY2xhaW1lZCBhbmQgdGhlIGNhbGxlciBzaG91bGQgcmV0cnkgbGF0ZXIuXG4gICovXG4tc3RhdGljIGJvb2wgb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4rc3RhdGljIGludCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4tXHRib29sIHJldCA9IHRydWU7XG4rXHRpbnQgcmV0ID0gMDtcbiBcbiBcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sobW0pKSB7XG4gXHRcdHRyYWNlX3NraXBfdGFza19yZWFwaW5nKHRzay1cdTAwM2VwaWQpO1xuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTU3Niw3ICs2MDEsOSBAQCBzdGF0aWMgYm9vbCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBcdC8qIGZhaWxlZCB0byByZWFwIHBhcnQgb2YgdGhlIGFkZHJlc3Mgc3BhY2UuIFRyeSBhZ2FpbiBsYXRlciAqL1xuIFx0cmV0ID0gX19vb21fcmVhcF90YXNrX21tKG1tKTtcbi1cdGlmICghcmV0KVxuK1x0aWYgKHJldCA9PSAtRUFHQUlOKVx0LyogaGFuZGVkIHRoZSBsb2NrIG92ZXIsIGFscmVhZHkgZHJvcHBlZCAqL1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJldClcbiBcdFx0Z290byBvdXRfZmluaXNoO1xuIFxuIFx0cHJfaW5mbyhcIm9vbV9yZWFwZXI6IHJlYXBlZCBwcm9jZXNzICVkICglcyksIG5vdyBhbm9uLXJzczolbHVrQiwgZmlsZS1yc3M6JWx1a0IsIHNobWVtLXJzczolbHVrQlxcblwiLFxuQEAgLTU5NSwxNSArNjIyLDE1IEBAIHN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuICNkZWZpbmUgTUFYX09PTV9SRUFQX1JFVFJJRVMgMTBcbiBzdGF0aWMgdm9pZCBvb21fcmVhcF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIHtcbi1cdGludCBhdHRlbXB0cyA9IDA7XG4rXHRpbnQgYXR0ZW1wdHMgPSAwLCByZXQ7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay1cdTAwM2VzaWduYWwtXHUwMDNlb29tX21tO1xuIFxuLVx0LyogUmV0cnkgdGhlIG1tYXBfcmVhZF90cnlsb2NrKG1tKSBhIGZldyB0aW1lcyAqL1xuLVx0d2hpbGUgKGF0dGVtcHRzKysgXHUwMDNjIE1BWF9PT01fUkVBUF9SRVRSSUVTIFx1MDAyNlx1MDAyNiAhb29tX3JlYXBfdGFza19tbSh0c2ssIG1tKSlcbitcdC8qIFJldHJ5IHRoZSBtbWFwX3JlYWRfdHJ5bG9jayhtbSkgYSBmZXcgdGltZXM7IGhhbmRpbmcgdGhlIGxvY2sgb3ZlciBpcyBub3QgYW4gYXR0ZW1wdCAqL1xuK1x0d2hpbGUgKChyZXQgPSBvb21fcmVhcF90YXNrX21tKHRzaywgbW0pKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAocmV0ID09IC1FQUdBSU4gfHwgKythdHRlbXB0cyBcdTAwM2MgTUFYX09PTV9SRUFQX1JFVFJJRVMpKVxuIFx0XHRzY2hlZHVsZV90aW1lb3V0X2lkbGUoSFovMTApO1xuIFxuLVx0aWYgKGF0dGVtcHRzIFx1MDAzYz0gTUFYX09PTV9SRUFQX1JFVFJJRVMgfHxcbi1cdCAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVxuK1x0aWYgKCFyZXQgfHwgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSlcbiBcdFx0Z290byBkb25lO1xuIFxuIFx0cHJfaW5mbyhcIm9vbV9yZWFwZXI6IHVuYWJsZSB0byByZWFwIHBpZDolZCAoJXMpXFxuXCIsXG5AQCAtMTIyNyw2ICsxMjU0LDcgQEAgU1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpXG4gXHRpZiAoIXJlYXApXG4gXHRcdGdvdG8gZHJvcF9tbTtcbiBcbithZ2FpbjpcbiBcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpIHtcbiBcdFx0cmV0ID0gLUVJTlRSO1xuIFx0XHRnb3RvIGRyb3BfbW07XG5AQCAtMTIzNSw4ICsxMjYzLDE1IEBAIFNZU0NBTExfREVGSU5FMihwcm9jZXNzX21yZWxlYXNlLCBpbnQsIHBpZGZkLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxuIFx0ICogQ2hlY2sgTU1GX09PTV9TS0lQIGFnYWluIHVuZGVyIG1tYXBfcmVhZF9sb2NrIHByb3RlY3Rpb24gdG8gZW5zdXJlXG4gXHQgKiBwb3NzaWJsZSBjaGFuZ2UgaW4gZXhpdF9tbWFwIGlzIHNlZW5cbiBcdCAqL1xuLVx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pIFx1MDAyNlx1MDAyNiAhX19vb21fcmVhcF90YXNrX21tKG1tKSlcbi1cdFx0cmV0ID0gLUVBR0FJTjtcbitcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSkge1xuK1x0XHRyZXQgPSBfX29vbV9yZWFwX3Rhc2tfbW0obW0pO1xuK1x0XHRpZiAocmV0ID09IC1FQUdBSU4pIHtcdC8qIGEgd3JpdGVyIGdvdCB0aGUgbG9jaywgcXVldWUgdXAgYWdhaW4gKi9cbitcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdGdvdG8gYWdhaW47XG4rXHRcdH1cbitcdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4rXHRcdFx0cmV0ID0gLUVBR0FJTjtcbitcdH1cbiBcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFxuIGRyb3BfbW06XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzowMS45MzQ1MTc3NjZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDk2NDMyMDA0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBvb21fcmVhcGVyYCBJbXByb3ZlbWVudCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBhc3Nlc3MgdGhlIG5lZWQgZm9yIEtNU0FOIGZ1enppbmcuIFRoZSBkZXNjcmlwdGlvbiBpbmRpY2F0ZXMgYW4gb3B0aW1pemF0aW9uIHRvIGBvb21fcmVhcGVyYCBhbmQgYHByb2Nlc3NfbXJlbGVhc2VgLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGhvdyBtZW1vcnkgaXMgemFwcGVkLiBUaGUgY2hhbmdlIHByb3Bvc2VzIHphcHBpbmcgbWVtb3J5IGluIDFHQiBjaHVua3MgaW5zdGVhZCBvZiB0aGUgZW50aXJlIFZNQSBhdCBvbmNlLCBhbmQgaXQgYXR0ZW1wdHMgdG8geWllbGQgYG1tYXBfbG9ja2AgaWYgYSB3cml0ZXIgaXMgY29udGVuZGluZy4gVGhpcyBzb3VuZHMgbGlrZSBpdCBjb3VsZCBtaXRpZ2F0ZSBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIGFuZCBpbXByb3ZlIHJlc3BvbnNpdmVuZXNzIGR1cmluZyBPT00gc2l0dWF0aW9ucy5cblxuRmlyc3QsIEknbGwgdGFrZSBhIGNsb3NlIGxvb2sgYXQgdGhlIGNvZGUgY2hhbmdlcy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHdpdGhpbiBgbW0vaW50ZXJuYWwuaGAgYW5kIGBtbS9tZW1vcnkuY2AuIEkgc2VlIHRoYXQgdGhlIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYCBmdW5jdGlvbiBzaWduYXR1cmUgbm93IGluY2x1ZGVzIGBzdGFydGAgYW5kIGBlbmRgIHBhcmFtZXRlcnM6XG5cbmBgYGNcbi1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4raW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBlbmQpO1xuYGBgXG5cbkFuZCB0aGUgY29ycmVzcG9uZGluZyBjaGFuZ2VzIGluIGBtbS9tZW1vcnkuY2AgY29uZmlybSB0aGlzLiBUaGUgYG1tdV9ub3RpZmllcl9yYW5nZV9pbml0YCBjYWxsIGlzIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgYHN0YXJ0YCBhbmQgYGVuZGAgYXJndW1lbnRzLCB3aGljaCBzdWdnZXN0cyB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgYWRhcHRlZCB0byBvcGVyYXRlIG9uIHJlZ2lvbnMgd2l0aGluIHRoZSBWTUEuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgY2FsbCBzaXRlcyBjb3JyZWN0bHkgdXNlIGBzdGFydGAgYW5kIGBlbmRgIHBhcmFtZXRlcnMgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3QuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBgc3RhcnRgIGFuZCBgZW5kYCBhcmd1bWVudHMgYXJlIGFjdHVhbGx5IGJlaW5nIHVzZWQuIEknbGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiBjYWxscyB1c2UgdGhlIG5ldyBhcmd1bWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzowNi44OTg4Mzk3OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5NDEzNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInphcF92bWFfZm9yX3JlYXBpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9NTkzPXZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTU5NS1cXHRcXHR1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscyk7XFxubW0vaW50ZXJuYWwuaDo1OTY6aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vaW50ZXJuYWwuaC01OTctXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQpO1xcbi0tXFxubW0vbWVtb3J5LmM9MjE2OT1zdGF0aWMgdm9pZCBfX3phcF92bWFfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1vcnkuYy0yMjA5LS8qKlxcbm1tL21lbW9yeS5jOjIyMTA6ICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhIHJhbmdlIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xcbm1tL21lbW9yeS5jLTIyMTEtICogQHZtYTogVGhlIHZtYSB0byB6YXAuXFxuLS1cXG5tbS9tZW1vcnkuYy0yMjE5LSAqL1xcbm1tL21lbW9yeS5jOjIyMjA6aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vbWVtb3J5LmMtMjIyMS1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbm1tL29vbV9raWxsLmM9NTEyPXN0YXRpYyBpbnQgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vb29tX2tpbGwuYy01NTUtXFx0XFx0XFx0XFx0YWRkciA9IG1heCh2bWEtXFx1MDAzZXZtX3N0YXJ0LCBBTElHTl9ET1dOKGVuZCAtIDEsIFNaXzFHKSk7XFxubW0vb29tX2tpbGwuYzo1NTY6XFx0XFx0XFx0XFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hLCBhZGRyLCBlbmQpKSB7XFxubW0vb29tX2tpbGwuYy01NTctXFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVCVVNZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzowNy4xODgyNTkwMThaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzQxMjc3MzU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgemFwX3ZtYV9mb3JfcmVhcGluZ2AgaW4gYG1tL21lbW9yeS5jYCoqXG5cbk9rYXksIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYCBmdW5jdGlvbiBpbiBkZXRhaWwuIFRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEknbGwgc3RhcnQgYnkgbG9va2luZyBhdCBgbW0vbWVtb3J5LmNgIGFuZCBzcGVjaWZpY2FsbHkgcGlucG9pbnQgbGluZSAyMjIwLiBUaGF0IHNob3VsZCBiZSB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIGZ1bGwgZGVmaW5pdGlvbi4gSSdtIGhvcGluZyB0aGF0IGJ5IHRyYWNpbmcgdGhyb3VnaCB0aGUgY29tcGxldGUgZnVuY3Rpb24sIEkgY2FuIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIG1lY2hhbmljcy4gVGhpcyBhcHByb2FjaCB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGFuYWx5emUgdGhlIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzg3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDM6MTAuNjAxMDM0NzRaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ1NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMTA6XFx0ICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhIHJhbmdlIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xcbjIyMTE6XFx0ICogQHZtYTogVGhlIHZtYSB0byB6YXAuXFxuMjIxMjpcXHQgKiBAc3RhcnQ6IFRoZSBmaXJzdCBhZGRyZXNzIHRvIHphcC5cXG4yMjEzOlxcdCAqIEBlbmQ6IE9uZSBwYXN0IHRoZSBsYXN0IGFkZHJlc3MgdG8gemFwLlxcbjIyMTQ6XFx0ICpcXG4yMjE1OlxcdCAqIFphcCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIGluIFtAc3RhcnQsIEBlbmQpIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xcbjIyMTY6XFx0ICogZm9yIHVzZSBieSB0aGUgb29tIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxcbjIyMTc6XFx0ICpcXG4yMjE4OlxcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHdlIHdvdWxkIGhhdmUgdG8gYmxvY2suXFxuMjIxOTpcXHQgKi9cXG4yMjIwOlxcdGludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbjIyMjE6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQpXFxuMjIyMjpcXHR7XFxuMjIyMzpcXHRcXHRzdHJ1Y3QgemFwX2RldGFpbHMgZGV0YWlscyA9IHtcXG4yMjI0OlxcdFxcdFxcdC5yZWFwaW5nID0gdHJ1ZSxcXG4yMjI1OlxcdFxcdH07XFxuMjIyNjpcXHRcXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xcbjIyMjc6XFx0XFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xcbjIyMjg6XFx0XFxuMjIyOTpcXHRcXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cXHUwMDNldm1fbW0sXFxuMjIzMDpcXHRcXHRcXHRcXHRcXHRzdGFydCwgZW5kKTtcXG4yMjMxOlxcdFxcdHRsYl9nYXRoZXJfbW11KFxcdTAwMjZ0bGIsIHZtYS1cXHUwMDNldm1fbW0pO1xcbjIyMzI6XFx0XFx0aWYgKG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X25vbmJsb2NrKFxcdTAwMjZyYW5nZSkpIHtcXG4yMjMzOlxcdFxcdFxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbjIyMzQ6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yMjM1OlxcdFxcdH1cXG4yMjM2OlxcdFxcdF9femFwX3ZtYV9yYW5nZShcXHUwMDI2dGxiLCB2bWEsIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQsIFxcdTAwMjZkZXRhaWxzKTtcXG4yMjM3OlxcdFxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChcXHUwMDI2cmFuZ2UpO1xcbjIyMzg6XFx0XFx0dGxiX2ZpbmlzaF9tbXUoXFx1MDAyNnRsYik7XFxuMjIzOTpcXHRcXHRyZXR1cm4gMDtcXG4yMjQwOlxcdH1cXG4yMjQxOlxcdFxcbjIyNDI6XFx0LyoqXFxuMjI0MzpcXHQgKiB1bm1hcF92bWFzIC0gdW5tYXAgYSByYW5nZSBvZiBtZW1vcnkgY292ZXJlZCBieSBhIGxpc3Qgb2Ygdm1hJ3NcXG4yMjQ0OlxcdCAqIEB0bGI6IGFkZHJlc3Mgb2YgdGhlIGNhbGxlcidzIHN0cnVjdCBtbXVfZ2F0aGVyXFxuMjI0NTpcXHQgKiBAdW5tYXA6IFRoZSB1bm1hcF9kZXNjXFxuMjI0NjpcXHQgKlxcbjIyNDc6XFx0ICogVW5tYXAgYWxsIHBhZ2VzIGluIHRoZSB2bWEgbGlzdC5cXG4yMjQ4OlxcdCAqXFxuMjI0OTpcXHQgKiBPbmx5IGFkZHJlc3NlcyBiZXR3ZWVuIGBzdGFydCcgYW5kIGBlbmQnIHdpbGwgYmUgdW5tYXBwZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQzOjEwLjYwMTU4MzMwMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MDc4NTU4MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9vb21fa2lsbC5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIE9PTSBraWxsZXIncyBjb3JlLiBJJ20gZm9jdXNpbmcgb24gYG1tL29vbV9raWxsLmNgIG5vdy4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBkZWNpc2lvbi1tYWtpbmcgaGFwcGVucyDigJMgd2hpY2ggcHJvY2VzcyBnZXRzIHNhY3JpZmljZWQgYW5kIGhvdyB3ZSBoYW5kbGUgdGhlIGFmdGVybWF0aC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBzZWxlY3Rpb24gYWxnb3JpdGhtLCB0aGUgc2NvcmluZyBtZWNoYW5pc21zLCBhbmQgdGhlIGNydWNpYWwgYXNwZWN0cyBvZiBwcmV2ZW50aW5nIGNhc2NhZGluZyBmYWlsdXJlcy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBpZiB0aGVyZSdzIGJlZW4gYW55IHJlY2VudCB0d2Vha2luZyBvZiB0aGUgaGV1cmlzdGljcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSdzIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiB0byBwaW5wb2ludCBwb3NzaWJsZSBjb250ZW50aW9uIHBvaW50cy4gTGV0J3Mgc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIG1lbW9yeSByZWNsYWltIGFuZCBzaWduYWwgZGVsaXZlcnkgd2l0aGluIHRoaXMgY3JpdGljYWwgcGF0aC4gQW55IHJlY2VudCBjaGFuZ2VzIHRvIGhvdyBgb29tX2JhZG5lc3NgIGlzIGNhbGN1bGF0ZWQsIG9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgb29tX2tpbGxfcHJvY2Vzc2AsIGFyZSB0b3Agb2YgbWluZC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQzOjE1LjY4MDE0MzkyNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk1OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vb29tX2tpbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTA6XFx0ICogY2FsbGVyIHNob3VsZCByZXRha2UgaXQgYW5kIHN0YXJ0IG92ZXIuXFxuIDUxMTpcXHQgKi9cXG4gNTEyOlxcdHN0YXRpYyBpbnQgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiA1MTM6XFx0e1xcbiA1MTQ6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDUxNTpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIGVuZDtcXG4gNTE2OlxcdFxcdGludCByZXQgPSAwO1xcbiA1MTc6XFx0XFx0TUFfU1RBVEUobWFzLCBcXHUwMDI2bW0tXFx1MDAzZW1tX210LCBVTE9OR19NQVgsIFVMT05HX01BWCk7XFxuIDUxODpcXHRcXG4gNTE5OlxcdFxcdC8qXFxuIDUyMDpcXHRcXHQgKiBUZWxsIGFsbCB1c2VycyBvZiBnZXRfdXNlci9jb3B5X2Zyb21fdXNlciBldGMuLi4gdGhhdCB0aGUgY29udGVudFxcbiA1MjE6XFx0XFx0ICogaXMgbm8gbG9uZ2VyIHN0YWJsZS4gTm8gYmFycmllcnMgcmVhbGx5IG5lZWRlZCBiZWNhdXNlIHVubWFwcGluZ1xcbiA1MjI6XFx0XFx0ICogc2hvdWxkIGltcGx5IGJhcnJpZXJzIGFscmVhZHkgYW5kIHRoZSByZWFkZXIgd291bGQgaGl0IGEgcGFnZSBmYXVsdFxcbiA1MjM6XFx0XFx0ICogaWYgaXQgc3R1bWJsZWQgb3ZlciBhIHJlYXBlZCBtZW1vcnkuXFxuIDUyNDpcXHRcXHQgKi9cXG4gNTI1OlxcdFxcdG1tX2ZsYWdzX3NldChNTUZfVU5TVEFCTEUsIG1tKTtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0LypcXG4gNTI4OlxcdFxcdCAqIEl0IG1pZ2h0IHN0YXJ0IHJhY2luZyB3aXRoIHRoZSBkeWluZyB0YXNrIGFuZCBjb21wZXRlIGZvciBzaGFyZWRcXG4gNTI5OlxcdFxcdCAqIHJlc291cmNlcyAtIGUuZy4gcGFnZSB0YWJsZSBsb2NrIGNvbnRlbnRpb24gaGFzIGJlZW4gb2JzZXJ2ZWQuXFxuIDUzMDpcXHRcXHQgKiBSZWR1Y2UgdGhvc2UgcmFjZXMgYnkgcmVhcGluZyB0aGUgb29tIHZpY3RpbSBmcm9tIHRoZSBvdGhlciBlbmRcXG4gNTMxOlxcdFxcdCAqIG9mIHRoZSBhZGRyZXNzIHNwYWNlLlxcbiA1MzI6XFx0XFx0ICovXFxuIDUzMzpcXHRcXHRtYXNfZm9yX2VhY2hfcmV2KFxcdTAwMjZtYXMsIHZtYSwgMCkge1xcbiA1MzQ6XFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fSFVHRVRMQnxWTV9QRk5NQVApKVxcbiA1MzU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDUzNjpcXHRcXG4gNTM3OlxcdFxcdFxcdC8qXFxuIDUzODpcXHRcXHRcXHQgKiBPbmx5IGFub255bW91cyBwYWdlcyBoYXZlIGEgZ29vZCBjaGFuY2UgdG8gYmUgZHJvcHBlZFxcbiA1Mzk6XFx0XFx0XFx0ICogd2l0aG91dCBhZGRpdGlvbmFsIHN0ZXBzIHdoaWNoIHdlIGNhbm5vdCBhZmZvcmQgYXMgd2VcXG4gNTQwOlxcdFxcdFxcdCAqIGFyZSBPT00gYWxyZWFkeS5cXG4gNTQxOlxcdFxcdFxcdCAqXFxuIDU0MjpcXHRcXHRcXHQgKiBXZSBkbyBub3QgZXZlbiBjYXJlIGFib3V0IGZzIGJhY2tlZCBwYWdlcyBiZWNhdXNlIGFsbFxcbiA1NDM6XFx0XFx0XFx0ICogd2hpY2ggYXJlIHJlY2xhaW1hYmxlIGhhdmUgYWxyZWFkeSBiZWVuIHJlY2xhaW1lZCBhbmRcXG4gNTQ0OlxcdFxcdFxcdCAqIHdlIGRvIG5vdCB3YW50IHRvIGJsb2NrIGV4aXRfbW1hcCBieSBrZWVwaW5nIG1tIHJlZlxcbiA1NDU6XFx0XFx0XFx0ICogY291bnQgZWxldmF0ZWQgd2l0aG91dCBhIGdvb2QgcmVhc29uLlxcbiA1NDY6XFx0XFx0XFx0ICovXFxuIDU0NzpcXHRcXHRcXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NIQVJFRCkpIHtcXG4gNTQ4OlxcdFxcdFxcdFxcdC8qXFxuIDU0OTpcXHRcXHRcXHRcXHQgKiBaYXAgaW4gMUcgY2h1bmtzIGFuZCBoYW5kIG1tYXBfbG9jayBvdmVyIHdoZW5ldmVyIGFcXG4gNTUwOlxcdFxcdFxcdFxcdCAqIHdyaXRlciBpcyBxdWV1ZWQgb24gaXQsIHNvIGl0IGRvZXMgbm90IHdhaXQgZm9yIHRoZVxcbiA1NTE6XFx0XFx0XFx0XFx0ICogd2hvbGUgcmVhcC5cXG4gNTUyOlxcdFxcdFxcdFxcdCAqL1xcbiA1NTM6XFx0XFx0XFx0XFx0ZW5kID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxuIDU1NDpcXHRcXHRcXHRcXHR3aGlsZSAoZW5kIFxcdTAwM2Ugdm1hLVxcdTAwM2V2bV9zdGFydCkge1xcbiA1NTU6XFx0XFx0XFx0XFx0XFx0YWRkciA9IG1heCh2bWEtXFx1MDAzZXZtX3N0YXJ0LCBBTElHTl9ET1dOKGVuZCAtIDEsIFNaXzFHKSk7XFxuIDU1NjpcXHRcXHRcXHRcXHRcXHRpZiAoemFwX3ZtYV9mb3JfcmVhcGluZyh2bWEsIGFkZHIsIGVuZCkpIHtcXG4gNTU3OlxcdFxcdFxcdFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4gNTU4OlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NTk6XFx0XFx0XFx0XFx0XFx0fVxcbiA1NjA6XFx0XFx0XFx0XFx0XFx0ZW5kID0gYWRkcjtcXG4gNTYxOlxcdFxcdFxcdFxcdFxcdGlmICghbW1hcF9sb2NrX2lzX2NvbnRlbmRlZChtbSkpXFxuIDU2MjpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNTYzOlxcdFxcbiA1NjQ6XFx0XFx0XFx0XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuIDU2NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gNTY2OlxcdFxcdFxcdFxcdH1cXG4gNTY3OlxcdFxcdFxcdH1cXG4gNTY4OlxcdFxcdH1cXG4gNTY5OlxcdFxcbiA1NzA6XFx0XFx0cmV0dXJuIHJldDtcXG4gNTcxOlxcdH1cXG4gNTcyOlxcdFxcbiA1NzM6XFx0LypcXG4gNTc0OlxcdCAqIFJlYXBzIHRoZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBnaXZlbiB0YXNrLlxcbiA1NzU6XFx0ICpcXG4gNTc2OlxcdCAqIFJldHVybnMgMCB3aGVuIGRvbmUsIC1FQUdBSU4gaWYgbW1hcF9sb2NrIHdhcyBoYW5kZWQgb3ZlciB0byBhIHdyaXRlclxcbiA1Nzc6XFx0ICogYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHN0YXJ0IG92ZXIsIGFuZCAtRUJVU1kgaWYgbm9uZSBvciBwYXJ0IG9mIHRoZVxcbiA1Nzg6XFx0ICogYWRkcmVzcyBzcGFjZSBoYXMgYmVlbiByZWNsYWltZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5IGxhdGVyLlxcbiA1Nzk6XFx0ICovXFxuIDU4MDpcXHRzdGF0aWMgaW50IG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiA1ODE6XFx0e1xcbiA1ODI6XFx0XFx0aW50IHJldCA9IDA7XFxuIDU4MzpcXHRcXG4gNTg0OlxcdFxcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sobW0pKSB7XFxuIDU4NTpcXHRcXHRcXHR0cmFjZV9za2lwX3Rhc2tfcmVhcGluZyh0c2stXFx1MDAzZXBpZCk7XFxuIDU4NjpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA1ODc6XFx0XFx0fVxcbiA1ODg6XFx0XFxuIDU4OTpcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzoxNS42ODAzMjU2MTVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE5NDM3OTA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbW0vb29tX2tpbGwuY2AgZm9yIE9PTSBEaWFnbm9zdGljcyoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBPT00gc2l0dWF0aW9uLCBhbmQgSSdtIHRoaW5raW5nLCBcIkxldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZSBoZWFydCBvZiB0aGUgT09NIGtpbGxlciBpdHNlbGYuXCIgSSd2ZSBnb3QgYSBzdHJvbmcgc3VzcGljaW9uIHRoYXQgdGhlIGNvcmUgaXNzdWUgaXMgZ29pbmcgdG8gYmUgcmV2ZWFsZWQgd2l0aGluIGBtbS9vb21fa2lsbC5jYC4gSSdtIHNwZWNpZmljYWxseSB6ZXJvaW5nIGluIG9uIGxpbmVzIDYyMCB0aHJvdWdoIDY0NS4gVGhhdCBzZWN0aW9uIGlzIHVzdWFsbHkgYSBjcnVjaWFsIGFyZWEgZm9yIGRldGVybWluaW5nIHdoaWNoIHByb2Nlc3NlcyBhcmUgc2VsZWN0ZWQgZm9yIHRlcm1pbmF0aW9uLCBhbmQgaG93IHRoZSBrZXJuZWwgbWFrZXMgdGhvc2UgY3JpdGljYWwgZGVjaXNpb25zIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUuIExldCdzIHNlZSBpZiB0aGF0IHNlY3Rpb24gaGFzIHRoZSBkZXRhaWxzIEkgYW0gbG9va2luZyBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQzOjE4Ljg3NDcwODQxN1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vb29tX2tpbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MjA6XFx0fVxcbiA2MjE6XFx0XFxuIDYyMjpcXHQjZGVmaW5lIE1BWF9PT01fUkVBUF9SRVRSSUVTIDEwXFxuIDYyMzpcXHRzdGF0aWMgdm9pZCBvb21fcmVhcF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbiA2MjQ6XFx0e1xcbiA2MjU6XFx0XFx0aW50IGF0dGVtcHRzID0gMCwgcmV0O1xcbiA2MjY6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stXFx1MDAzZXNpZ25hbC1cXHUwMDNlb29tX21tO1xcbiA2Mjc6XFx0XFxuIDYyODpcXHRcXHQvKiBSZXRyeSB0aGUgbW1hcF9yZWFkX3RyeWxvY2sobW0pIGEgZmV3IHRpbWVzOyBoYW5kaW5nIHRoZSBsb2NrIG92ZXIgaXMgbm90IGFuIGF0dGVtcHQgKi9cXG4gNjI5OlxcdFxcdHdoaWxlICgocmV0ID0gb29tX3JlYXBfdGFza19tbSh0c2ssIG1tKSkgXFx1MDAyNlxcdTAwMjZcXG4gNjMwOlxcdFxcdCAgICAgICAocmV0ID09IC1FQUdBSU4gfHwgKythdHRlbXB0cyBcXHUwMDNjIE1BWF9PT01fUkVBUF9SRVRSSUVTKSlcXG4gNjMxOlxcdFxcdFxcdHNjaGVkdWxlX3RpbWVvdXRfaWRsZShIWi8xMCk7XFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdGlmICghcmV0IHx8IG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBtbSkpXFxuIDYzNDpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDYzNTpcXHRcXG4gNjM2OlxcdFxcdHByX2luZm8oXFxcIm9vbV9yZWFwZXI6IHVuYWJsZSB0byByZWFwIHBpZDolZCAoJXMpXFxcXG5cXFwiLFxcbiA2Mzc6XFx0XFx0XFx0dGFza19waWRfbnIodHNrKSwgdHNrLVxcdTAwM2Vjb21tKTtcXG4gNjM4OlxcdFxcdHNjaGVkX3Nob3dfdGFzayh0c2spO1xcbiA2Mzk6XFx0XFx0ZGVidWdfc2hvd19hbGxfbG9ja3MoKTtcXG4gNjQwOlxcdFxcbiA2NDE6XFx0ZG9uZTpcXG4gNjQyOlxcdFxcdHRzay1cXHUwMDNlb29tX3JlYXBlcl9saXN0ID0gTlVMTDtcXG4gNjQzOlxcdFxcbiA2NDQ6XFx0XFx0LypcXG4gNjQ1OlxcdFxcdCAqIEhpZGUgdGhpcyBtbSBmcm9tIE9PTSBraWxsZXIgYmVjYXVzZSBpdCBoYXMgYmVlbiBlaXRoZXIgcmVhcGVkIG9yXFxuIDY0NjpcXHRcXHQgKiBzb21lYm9keSBjYW4ndCBjYWxsIG1tYXBfd3JpdGVfdW5sb2NrKG1tKS5cXG4gNjQ3OlxcdFxcdCAqL1xcbiA2NDg6XFx0XFx0bW1fZmxhZ3Nfc2V0KE1NRl9PT01fU0tJUCwgbW0pO1xcbiA2NDk6XFx0XFxuIDY1MDpcXHRcXHQvKiBEcm9wIGEgcmVmZXJlbmNlIHRha2VuIGJ5IHF1ZXVlX29vbV9yZWFwZXIgKi9cXG4gNjUxOlxcdFxcdHB1dF90YXNrX3N0cnVjdCh0c2spO1xcbiA2NTI6XFx0fVxcbiA2NTM6XFx0XFxuIDY1NDpcXHRzdGF0aWMgaW50IG9vbV9yZWFwZXIodm9pZCAqdW51c2VkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzoxOC44NzQ4ODU2OTdaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjcyOTI2NTIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gT09NIEtpbGxlciBCZWhhdmlvcioqXG5cbk9rYXksIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggdGhpcyBPT00ga2lsbGVyIGludmVzdGlnYXRpb24sIGFuZCBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gSSd2ZSBiZWVuIHRyYWNpbmcgdGhlIGtpbGwgc2lnbmFscyBhbmQgbWVtb3J5IHByZXNzdXJlIGJ1dCBJJ20ganVzdCBnZXR0aW5nIHN0YXJ0ZWQuIEkga25vdyB0aGUgT09NIGtpbGxlciBoYXMgY29tcGxleCBkZWNpc2lvbi1tYWtpbmcsIGFuZCBJJ20gbG9va2luZyBhdCBob3cgdGhlIGtlcm5lbCBkZWNpZGVzIHdoYXQgdG8gYWN0dWFsbHkgKnJlbGVhc2UqIHdoZW4gaXQgZ2V0cyBkZXNwZXJhdGUuIEknbSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgem9vbSBpbiBvbiB0aGUgYHByb2Nlc3NfbXJlbGVhc2VgIGZ1bmN0aW9uIG5vdywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEyNTAgaW4gYG1tL29vbV9raWxsLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBtZW1vcnkgcmVsZWFzZSBtZWNoYW5pc21zIGluIHBsYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQncyBkb2luZyB3aXRoIHBvdGVudGlhbCBtZW1vcnkgcmVsZWFzZXMuIEknbSBob3BpbmcgSSBjYW4gY29ycmVsYXRlIHRoZSBmdW5jdGlvbnMgdGhlcmUgd2l0aCBteSB0ZXN0IG1lbW9yeSBsb2FkcyB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgT09NIGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzoyMS42MDQxNTI3ODJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL29vbV9raWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI0MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI0MDpcXHRcXHR9XFxuMTI0MTpcXHRcXG4xMjQyOlxcdFxcdG1tID0gcC1cXHUwMDNlbW07XFxuMTI0MzpcXHRcXHRtbWdyYWIobW0pO1xcbjEyNDQ6XFx0XFxuMTI0NTpcXHRcXHRpZiAodGFza193aWxsX2ZyZWVfbWVtKHApKVxcbjEyNDY6XFx0XFx0XFx0cmVhcCA9IHRydWU7XFxuMTI0NzpcXHRcXHRlbHNlIHtcXG4xMjQ4OlxcdFxcdFxcdC8qIEVycm9yIG9ubHkgaWYgdGhlIHdvcmsgaGFzIG5vdCBiZWVuIGRvbmUgYWxyZWFkeSAqL1xcbjEyNDk6XFx0XFx0XFx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVxcbjEyNTA6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xMjUxOlxcdFxcdH1cXG4xMjUyOlxcdFxcdHRhc2tfdW5sb2NrKHApO1xcbjEyNTM6XFx0XFxuMTI1NDpcXHRcXHRpZiAoIXJlYXApXFxuMTI1NTpcXHRcXHRcXHRnb3RvIGRyb3BfbW07XFxuMTI1NjpcXHRcXG4xMjU3OlxcdGFnYWluOlxcbjEyNTg6XFx0XFx0aWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSkge1xcbjEyNTk6XFx0XFx0XFx0cmV0ID0gLUVJTlRSO1xcbjEyNjA6XFx0XFx0XFx0Z290byBkcm9wX21tO1xcbjEyNjE6XFx0XFx0fVxcbjEyNjI6XFx0XFx0LypcXG4xMjYzOlxcdFxcdCAqIENoZWNrIE1NRl9PT01fU0tJUCBhZ2FpbiB1bmRlciBtbWFwX3JlYWRfbG9jayBwcm90ZWN0aW9uIHRvIGVuc3VyZVxcbjEyNjQ6XFx0XFx0ICogcG9zc2libGUgY2hhbmdlIGluIGV4aXRfbW1hcCBpcyBzZWVuXFxuMTI2NTpcXHRcXHQgKi9cXG4xMjY2OlxcdFxcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSkge1xcbjEyNjc6XFx0XFx0XFx0cmV0ID0gX19vb21fcmVhcF90YXNrX21tKG1tKTtcXG4xMjY4OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTikge1xcdC8qIGEgd3JpdGVyIGdvdCB0aGUgbG9jaywgcXVldWUgdXAgYWdhaW4gKi9cXG4xMjY5OlxcdFxcdFxcdFxcdHJldCA9IDA7XFxuMTI3MDpcXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcbjEyNzE6XFx0XFx0XFx0fVxcbjEyNzI6XFx0XFx0XFx0aWYgKHJldCA9PSAtRUJVU1kpXFxuMTI3MzpcXHRcXHRcXHRcXHRyZXQgPSAtRUFHQUlOO1xcbjEyNzQ6XFx0XFx0fVxcbjEyNzU6XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuMTI3NjpcXHRcXG4xMjc3OlxcdGRyb3BfbW06XFxuMTI3ODpcXHRcXHRtbWRyb3AobW0pO1xcbjEyNzk6XFx0cHV0X3Rhc2s6XFxuMTI4MDpcXHRcXHRwdXRfdGFza19zdHJ1Y3QodGFzayk7XFxuMTI4MTpcXHRcXHRyZXR1cm4gcmV0O1xcbjEyODI6XFx0I2Vsc2VcXG4xMjgzOlxcdFxcdHJldHVybiAtRU5PU1lTO1xcbjEyODQ6XFx0I2VuZGlmIC8qIENPTkZJR19NTVUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDM6MjEuNjA0Mjg0MTcyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NTU3NjcwNjkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSZWFzb25pbmc6IE9PTSBSZWFwZXIgYW5kIFZNQSBaYXBwaW5nIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIHRlbGxzIG1lIHRoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgT09NIHJlYXBlciBhbmQgdGhlIFZNQSB6YXBwaW5nIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBfX29vbV9yZWFwX3Rhc2tfbW1gIGFuZCBgemFwX3ZtYV9mb3JfcmVhcGluZ2AuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIG1ha2UgdGhlIHJlYXBpbmcgcHJvY2VzcyBtb3JlIGVmZmljaWVudCBhbmQgbGVzcyBwcm9uZSB0byBibG9ja2luZywgcGFydGljdWxhcmx5IGluIHRoZSBwcmVzZW5jZSBvZiBjb250ZW50aW9uIG9uIHRoZSBgbW1hcF9sb2NrYC4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZXJlIGhhdmUgYmVlbiBzb21lIHJldHVybiB2YWx1ZSBhbmQgZXJyb3IgaGFuZGxpbmcgaW1wcm92ZW1lbnRzIGluIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIFRoZSBjaHVua2luZyBvZiB0aGUgVk1BIHJlYXBpbmcgdG8gMUdCIGlzIHRoZSBzaWduaWZpY2FudCBjaGFuZ2UgdGhhdCBhZmZlY3RzIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5NeSBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRmlyc3QsIHRoZSBgemFwX3ZtYV9mb3JfcmVhcGluZ2AgZnVuY3Rpb24gbG9va3MgbGlrZSBpdOKAmXMgYmVpbmcgbWFkZSBzYWZlci4gSXQgbm93IHRha2VzIGV4cGxpY2l0IGBzdGFydGAgYW5kIGBlbmRgIGJvdW5kcywgaW5pdGlhbGl6ZXMgYSBgemFwX2RldGFpbHNgIHN0cnVjdCwgc2V0cyB1cCBhbiBgbW11X25vdGlmaWVyX3JhbmdlYCwgYW5kIGNhbGxzIGEgc2VyaWVzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCAqbm90aGluZyogaW4gdGhpcyBzZXF1ZW5jZSB0b3VjaGVzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIHRoZSB2YXJpYWJsZXMgdXNlZCwgbGlrZSBgZGV0YWlsc2AgYW5kIGByYW5nZWAsIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuXG5JbiBgX19vb21fcmVhcF90YXNrX21tYCwgdGhlIGxvb3Bpbmcgc3RyYXRlZ3kgaXMgY2hhbmdpbmcuIEluc3RlYWQgb2YgdGhlIHByZXZpb3VzIG1ldGhvZCwgd2UgYXJlIGxvb3BpbmcgZG93bndhcmRzIGluIDFHQiBjaHVua3MgY2hlY2tpbmcgZm9yIGBtbWFwX2xvY2tfaXNfY29udGVuZGVkYC4gSWYgaXQncyBjb250ZW5kZWQsIHRoZSBsb2NrIGlzIGRyb3BwZWQsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBoZXJlIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBXZSdyZSBub3QgYWxsb2NhdGluZyBhbnl0aGluZyBuZXcsIGFuZCBub3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIGEgbWFqb3IgcG9pbnQgb2YgY29uc2lkZXJhdGlvbiB3aGVuIHRoaW5raW5nIGFib3V0IGxlYWtzLiBUaGUgc2FtZSBwYXR0ZXJuIGNvbnRpbnVlcyBpbiBgb29tX3JlYXBfdGFza19tbWAsIHdoZXJlIHdlIGhhdmUgYW4gYGludGAgcmV0dXJuIHZhbHVlIGFuZCBpbml0aWFsaXplZCBgcmV0YCB2YXJpYWJsZS4gRmluYWxseSwgdGhlIHJldHJ5IGhhbmRsaW5nIGluIGBvb21fcmVhcF90YXNrYCBhbmQgdGhlIHJlYWNxdWlzaXRpb24gb2YgdGhlIGxvY2sgaW4gYHByb2Nlc3NfbXJlbGVhc2VgIGFyZSBjYXJlZnVsbHkgc3RydWN0dXJlZC5cblxuU28sIGFtIEkgc2VlaW5nIGFueXRoaW5nIHRoYXQganVtcHMgb3V0IGFzIGEgS01TQU4gY29uY2Vybj8gTGV0IG1lIHJldmlldyB0aGUgcXVlc3Rpb25zOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm8sIG5vdGhpbmcncyBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGF04oCZcyBhIGdvb2Qgc2lnbi5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBBYnNvbHV0ZWx5IG5vdC4gQWxsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbjMuICAqKk5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8gbmV3IGFsbG9jYXRpb25zIGFyZSBiZWluZyBtYWRlLlxuNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGE/KiogVGhpcyBpcyB6YXBwaW5nIHBhZ2UgdGFibGUgZW50cmllcy4gTm90IGFwcGxpY2FibGUuXG5cblRoZSBhcmVhcyBvZiBjb25jZXJuIGFyZSBtb3JlIGFyb3VuZCBwb3RlbnRpYWw6XG5cbiogICBMb2NraW5nIGlzc3VlczogRHJvcHBlZCBsb2NrcyB2cy4gaGVsZCBsb2NrcywgZGVhZGxvY2tzLCBsb2NrIGNvbnRlbnRpb24uIFRoZXNlIHNob3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUC5cbiogICBWTUEgaXRlcmF0b3IgLyByYWNlIGNvbmRpdGlvbnM6IENvdWxkIHRoZSBWTUEgYmUgbW9kaWZpZWQgd2hpbGUgdGhlIGxvY2sgaXMgZHJvcHBlZD8gUmV0dXJuaW5nIGAtRUFHQUlOYCBhbmQgcmVzdGFydGluZyBmcm9tIHNjcmF0Y2ggc2hvdWxkIGhhbmRsZSBpdC4gS0FTQU4vTE9DS0RFUC9nZW5lcmFsIGtlcm5lbCBhc3NlcnRzIHNob3VsZCBjYXRjaCBpdC5cbiogICBBcml0aG1ldGljIG9yIGluZmluaXRlIGxvb3BzIGZyb20gYSBicm9rZW4gYGVuZGAvYGFkZHJgIGNhbGN1bGF0aW9uLlxuXG5JbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzICpub3QqIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gd291bGRuJ3QgY2F0Y2ggYW55dGhpbmcgdW5pcXVlIGhlcmUuIExPQ0tERVAgYW5kIEtBU0FOIGFyZSBtb3JlIGFwcHJvcHJpYXRlLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzg1LCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0NjozNy4xODA5OTQ0MDVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00gcmVhcGVyIGxvZ2ljIGluIG1tL29vbV9raWxsLmMgYW5kIG1tL21lbW9yeS5jIHNvIHRoYXQgVk1BcyBhcmUgemFwcGVkIGluIDFHQiBjaHVua3MsIGFsbG93aW5nIG1tYXBfbG9jayB0byBiZSB5aWVsZGVkIHRvIHdhaXRpbmcgd3JpdGVycyB1cG9uIGNvbnRlbnRpb24uIEl0IGFsc28gdXBkYXRlcyBlcnJvciBoYW5kbGluZyBhY3Jvc3MgemFwX3ZtYV9mb3JfcmVhcGluZywgX19vb21fcmVhcF90YXNrX21tLCBvb21fcmVhcF90YXNrLCBhbmQgdGhlIHByb2Nlc3NfbXJlbGVhc2Ugc3lzY2FsbC5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgKGFkZHIsIGVuZCwgcmV0LCBhdHRlbXB0cykgYXJlIHNjYWxhciB0eXBlcyBhbmQgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb3IgYXNzaWduZWQgcHJpb3IgdG8gdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IGhlYXAvc3RhY2sgYnVmZmVycywgZG9lcyBub3QgY29weSBhbnkgZGF0YSBvciBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzIGFmZmVjdGluZyByZWFkcyBvZiBtZW1vcnkuIEFueSBwb3RlbnRpYWwgZGVmZWN0cyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgaW52b2x2ZSBsb2NrIG1hbmFnZW1lbnQsIGxvY2sgY29udGVudGlvbiwgVk1BIGl0ZXJhdGlvbiwgb3IgcGFnZSB0YWJsZSB0ZWFyZG93biwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT09NIHJlYXBlciBsb2dpYyBpbiBtbS9vb21fa2lsbC5jIGFuZCBtbS9tZW1vcnkuYyBzbyB0aGF0IFZNQXMgYXJlIHphcHBlZCBpbiAxR0IgY2h1bmtzLCBhbGxvd2luZyBtbWFwX2xvY2sgdG8gYmUgeWllbGRlZCB0byB3YWl0aW5nIHdyaXRlcnMgdXBvbiBjb250ZW50aW9uLiBJdCBhbHNvIHVwZGF0ZXMgZXJyb3IgaGFuZGxpbmcgYWNyb3NzIHphcF92bWFfZm9yX3JlYXBpbmcsIF9fb29tX3JlYXBfdGFza19tbSwgb29tX3JlYXBfdGFzaywgYW5kIHRoZSBwcm9jZXNzX21yZWxlYXNlIHN5c2NhbGwuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChhZGRyLCBlbmQsIHJldCwgYXR0ZW1wdHMpIGFyZSBzY2FsYXIgdHlwZXMgYW5kIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHByaW9yIHRvIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBoZWFwL3N0YWNrIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgb3Igc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocyBhZmZlY3RpbmcgcmVhZHMgb2YgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIGludm9sdmUgbG9jayBtYW5hZ2VtZW50LCBsb2NrIGNvbnRlbnRpb24sIFZNQSBpdGVyYXRpb24sIG9yIHBhZ2UgdGFibGUgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowlzlp5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 12:20:48 +0000 UTC FinishedAt: 2026-09-14 12:46:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "baa8de2f3448d1466a888a805c18d01c998fe052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "baa8de2f3448d1466a888a805c18d01c998fe052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU" ], "series_id": "6e9c0e39-b3ad-4dea-a85b-045e25222844" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zap_vma_for_reaping", "__oom_reap_task_mm", "oom_reap_task_mm", "oom_reap_task", "__x64_sys_process_mrelease" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "baa8de2f3448d1466a888a805c18d01c998fe052", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3phcF92bWFfZm9yX3JlYXBpbmcmIzM0OywKICAgICYjMzQ7X19vb21fcmVhcF90YXNrX21tJiMzNDssCiAgICAmIzM0O29vbV9yZWFwX3Rhc2tfbW0mIzM0OywKICAgICYjMzQ7b29tX3JlYXBfdGFzayYjMzQ7LAogICAgJiMzNDtfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00gcmVhcGVyIGxvZ2ljIGluIG1tL29vbV9raWxsLmMgYW5kIG1tL21lbW9yeS5jIHNvIHRoYXQgVk1BcyBhcmUgemFwcGVkIGluIDFHQiBjaHVua3MsIGFsbG93aW5nIG1tYXBfbG9jayB0byBiZSB5aWVsZGVkIHRvIHdhaXRpbmcgd3JpdGVycyB1cG9uIGNvbnRlbnRpb24uIEl0IGFsc28gdXBkYXRlcyBlcnJvciBoYW5kbGluZyBhY3Jvc3MgemFwX3ZtYV9mb3JfcmVhcGluZywgX19vb21fcmVhcF90YXNrX21tLCBvb21fcmVhcF90YXNrLCBhbmQgdGhlIHByb2Nlc3NfbXJlbGVhc2Ugc3lzY2FsbC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChhZGRyLCBlbmQsIHJldCwgYXR0ZW1wdHMpIGFyZSBzY2FsYXIgdHlwZXMgYW5kIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHByaW9yIHRvIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBoZWFwL3N0YWNrIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgb3Igc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocyBhZmZlY3RpbmcgcmVhZHMgb2YgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIGludm9sdmUgbG9jayBtYW5hZ2VtZW50LCBsb2NrIGNvbnRlbnRpb24sIFZNQSBpdGVyYXRpb24sIG9yIHBhZ2UgdGFibGUgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVk1BIHVubWFwcGluZyBsb2dpYyBmb3IgT09NIHJlYXBpbmcgYW5kIHRoZSBwcm9jZXNzX21yZWxlYXNlIHN5c2NhbGwsIHNwbGl0dGluZyBWTUEgemFwcGluZyBpbnRvIDFHQiBjaHVua3MgYW5kIHlpZWxkaW5nIG1tYXBfbG9jayB3aGVuIGNvbnRlbmRlZC4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRyb2wgZmxvdyBhbmQgbG9ja2luZyBzZW1hbnRpY3MgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbG9jayBpbnZlcnNpb25zLCBvciBzdGF0ZSBpbmNvbnNpc3RlbmN5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2FiZmEwM2I4MTIzZDljMjllNTIzYTg0MzNjY2UxNDFkYjk0YWViY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDEyOjQxOjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAwNTE3OWM0YjIwOTBlLi43YWMxNzI4YTU3YzI5IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaFxuQEAgLTU5Myw3ICYjNDM7NTkzLDggQEAgc3RydWN0IHphcF9kZXRhaWxzO1xuIHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKTtcbi1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4mIzQzO2ludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCk7XG4gaW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0ICAgZ2ZwX3QgZ2ZwKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA5MjYyNzZkNDE5MjAyLi4yNWMzNWEyOGEzOWQxIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtMjIwNywxNSAmIzQzOzIyMDcsMTggQEAgc3RhdGljIHZvaWQgX196YXBfdm1hX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiBcbiAvKipcbi0gKiB6YXBfdm1hX2Zvcl9yZWFwaW5nIC0gemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nXG4mIzQzOyAqIHphcF92bWFfZm9yX3JlYXBpbmcgLSB6YXAgYSByYW5nZSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmdcbiAgKiBAdm1hOiBUaGUgdm1hIHRvIHphcC5cbiYjNDM7ICogQHN0YXJ0OiBUaGUgZmlyc3QgYWRkcmVzcyB0byB6YXAuXG4mIzQzOyAqIEBlbmQ6IE9uZSBwYXN0IHRoZSBsYXN0IGFkZHJlc3MgdG8gemFwLlxuICAqXG4tICogWmFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nIGZvciB1c2UgYnkgdGhlIG9vbVxuLSAqIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxuJiM0MzsgKiBaYXAgdGhlIHBhZ2UgdGFibGUgZW50cmllcyBpbiBbQHN0YXJ0LCBAZW5kKSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmdcbiYjNDM7ICogZm9yIHVzZSBieSB0aGUgb29tIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxuICAqXG4gICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgd2Ugd291bGQgaGF2ZSB0byBibG9jay5cbiAgKi9cbi1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiYjNDM7aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgZW5kKVxuIHtcbiBcdHN0cnVjdCB6YXBfZGV0YWlscyBkZXRhaWxzID0ge1xuIFx0XHQucmVhcGluZyA9IHRydWUsXG5AQCAtMjIyNCw3ICYjNDM7MjIyNyw3IEBAIGludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xuIFxuIFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cdTAwM2V2bV9tbSxcbi1cdFx0XHRcdHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCk7XG4mIzQzO1x0XHRcdFx0c3RhcnQsIGVuZCk7XG4gXHR0bGJfZ2F0aGVyX21tdShcdTAwMjZ0bGIsIHZtYS1cdTAwM2V2bV9tbSk7XG4gXHRpZiAobW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbm9uYmxvY2soXHUwMDI2cmFuZ2UpKSB7XG4gXHRcdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcbmluZGV4IDVkNDhiZDg2MmMyN2IuLmNlZTBhMGY3YjRmMjggMTAwNjQ0XG4tLS0gYS9tbS9vb21fa2lsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9vb21fa2lsbC5jXG5AQCAtNTAzLDEwICYjNDM7NTAzLDE3IEBAIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChvb21fcmVhcGVyX3dhaXQpO1xuIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9vbV9yZWFwZXJfbGlzdDtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG9vbV9yZWFwZXJfbG9jayk7XG4gXG4tc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuJiM0MzsvKlxuJiM0MzsgKiBDYWxsZWQgd2l0aCBtbWFwX2xvY2sgaGVsZCBmb3IgcmVhZC4gIFJldHVybnMgd2l0aCBpdCBzdGlsbCBoZWxkIG9uIDBcbiYjNDM7ICogKGRvbmUpIG9yIC1FQlVTWSAocGFydCBjb3VsZCBub3QgYmUgcmVhcGVkLCB0cnkgYWdhaW4gbGF0ZXIpLCBhbmQgZHJvcHNcbiYjNDM7ICogaXQgb25seSBvbiAtRUFHQUlOLCB3aGVuIGl0IHdhcyBoYW5kZWQgb3ZlciB0byBhIHF1ZXVlZCB3cml0ZXIgYW5kIHRoZVxuJiM0MzsgKiBjYWxsZXIgc2hvdWxkIHJldGFrZSBpdCBhbmQgc3RhcnQgb3Zlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuLVx0Ym9vbCByZXQgPSB0cnVlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWRkciwgZW5kO1xuJiM0MztcdGludCByZXQgPSAwO1xuIFx0TUFfU1RBVEUobWFzLCBcdTAwMjZtbS1cdTAwM2VtbV9tdCwgVUxPTkdfTUFYLCBVTE9OR19NQVgpO1xuIFxuIFx0LypcbkBAIC01MzgsOCAmIzQzOzU0NSwyNSBAQCBzdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRcdCAqIGNvdW50IGVsZXZhdGVkIHdpdGhvdXQgYSBnb29kIHJlYXNvbi5cbiBcdFx0ICovXG4gXHRcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRCkpIHtcbi1cdFx0XHRpZiAoemFwX3ZtYV9mb3JfcmVhcGluZyh2bWEpKVxuLVx0XHRcdFx0cmV0ID0gZmFsc2U7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFphcCBpbiAxRyBjaHVua3MgYW5kIGhhbmQgbW1hcF9sb2NrIG92ZXIgd2hlbmV2ZXIgYVxuJiM0MztcdFx0XHQgKiB3cml0ZXIgaXMgcXVldWVkIG9uIGl0LCBzbyBpdCBkb2VzIG5vdCB3YWl0IGZvciB0aGVcbiYjNDM7XHRcdFx0ICogd2hvbGUgcmVhcC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGVuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4mIzQzO1x0XHRcdHdoaWxlIChlbmQgXHUwMDNlIHZtYS1cdTAwM2V2bV9zdGFydCkge1xuJiM0MztcdFx0XHRcdGFkZHIgPSBtYXgodm1hLVx1MDAzZXZtX3N0YXJ0LCBBTElHTl9ET1dOKGVuZCAtIDEsIFNaXzFHKSk7XG4mIzQzO1x0XHRcdFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hLCBhZGRyLCBlbmQpKSB7XG4mIzQzO1x0XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4mIzQzO1x0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0ZW5kID0gYWRkcjtcbiYjNDM7XHRcdFx0XHRpZiAoIW1tYXBfbG9ja19pc19jb250ZW5kZWQobW0pKVxuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC01NDksMTYgJiM0Mzs1NzMsMTcgQEAgc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIC8qXG4gICogUmVhcHMgdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGdpdmVuIHRhc2suXG4gICpcbi0gKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcyBhbmQgZmFsc2UgaWYgbm9uZSBvciBwYXJ0IG9mIHRoZSBhZGRyZXNzIHNwYWNlXG4tICogaGFzIGJlZW4gcmVjbGFpbWVkIGFuZCB0aGUgY2FsbGVyIHNob3VsZCByZXRyeSBsYXRlci5cbiYjNDM7ICogUmV0dXJucyAwIHdoZW4gZG9uZSwgLUVBR0FJTiBpZiBtbWFwX2xvY2sgd2FzIGhhbmRlZCBvdmVyIHRvIGEgd3JpdGVyXG4mIzQzOyAqIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBzdGFydCBvdmVyLCBhbmQgLUVCVVNZIGlmIG5vbmUgb3IgcGFydCBvZiB0aGVcbiYjNDM7ICogYWRkcmVzcyBzcGFjZSBoYXMgYmVlbiByZWNsYWltZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5IGxhdGVyLlxuICAqL1xuLXN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuJiM0MztzdGF0aWMgaW50IG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbi1cdGJvb2wgcmV0ID0gdHJ1ZTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sobW0pKSB7XG4gXHRcdHRyYWNlX3NraXBfdGFza19yZWFwaW5nKHRzay1cdTAwM2VwaWQpO1xuLVx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuIFx0fVxuIFxuIFx0LypcbkBAIC01NzYsNyAmIzQzOzYwMSw5IEBAIHN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIFx0LyogZmFpbGVkIHRvIHJlYXAgcGFydCBvZiB0aGUgYWRkcmVzcyBzcGFjZS4gVHJ5IGFnYWluIGxhdGVyICovXG4gXHRyZXQgPSBfX29vbV9yZWFwX3Rhc2tfbW0obW0pO1xuLVx0aWYgKCFyZXQpXG4mIzQzO1x0aWYgKHJldCA9PSAtRUFHQUlOKVx0LyogaGFuZGVkIHRoZSBsb2NrIG92ZXIsIGFscmVhZHkgZHJvcHBlZCAqL1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9maW5pc2g7XG4gXG4gXHRwcl9pbmZvKFwmIzM0O29vbV9yZWFwZXI6IHJlYXBlZCBwcm9jZXNzICVkICglcyksIG5vdyBhbm9uLXJzczolbHVrQiwgZmlsZS1yc3M6JWx1a0IsIHNobWVtLXJzczolbHVrQlxcblwmIzM0OyxcbkBAIC01OTUsMTUgJiM0Mzs2MjIsMTUgQEAgc3RhdGljIGJvb2wgb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gI2RlZmluZSBNQVhfT09NX1JFQVBfUkVUUklFUyAxMFxuIHN0YXRpYyB2b2lkIG9vbV9yZWFwX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4ge1xuLVx0aW50IGF0dGVtcHRzID0gMDtcbiYjNDM7XHRpbnQgYXR0ZW1wdHMgPSAwLCByZXQ7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay1cdTAwM2VzaWduYWwtXHUwMDNlb29tX21tO1xuIFxuLVx0LyogUmV0cnkgdGhlIG1tYXBfcmVhZF90cnlsb2NrKG1tKSBhIGZldyB0aW1lcyAqL1xuLVx0d2hpbGUgKGF0dGVtcHRzJiM0MzsmIzQzOyBcdTAwM2MgTUFYX09PTV9SRUFQX1JFVFJJRVMgXHUwMDI2XHUwMDI2ICFvb21fcmVhcF90YXNrX21tKHRzaywgbW0pKVxuJiM0MztcdC8qIFJldHJ5IHRoZSBtbWFwX3JlYWRfdHJ5bG9jayhtbSkgYSBmZXcgdGltZXM7IGhhbmRpbmcgdGhlIGxvY2sgb3ZlciBpcyBub3QgYW4gYXR0ZW1wdCAqL1xuJiM0MztcdHdoaWxlICgocmV0ID0gb29tX3JlYXBfdGFza19tbSh0c2ssIG1tKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIChyZXQgPT0gLUVBR0FJTiB8fCAmIzQzOyYjNDM7YXR0ZW1wdHMgXHUwMDNjIE1BWF9PT01fUkVBUF9SRVRSSUVTKSlcbiBcdFx0c2NoZWR1bGVfdGltZW91dF9pZGxlKEhaLzEwKTtcbiBcbi1cdGlmIChhdHRlbXB0cyBcdTAwM2M9IE1BWF9PT01fUkVBUF9SRVRSSUVTIHx8XG4tXHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSlcbiYjNDM7XHRpZiAoIXJldCB8fCBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVxuIFx0XHRnb3RvIGRvbmU7XG4gXG4gXHRwcl9pbmZvKFwmIzM0O29vbV9yZWFwZXI6IHVuYWJsZSB0byByZWFwIHBpZDolZCAoJXMpXFxuXCYjMzQ7LFxuQEAgLTEyMjcsNiAmIzQzOzEyNTQsNyBAQCBTWVNDQUxMX0RFRklORTIocHJvY2Vzc19tcmVsZWFzZSwgaW50LCBwaWRmZCwgdW5zaWduZWQgaW50LCBmbGFncylcbiBcdGlmICghcmVhcClcbiBcdFx0Z290byBkcm9wX21tO1xuIFxuJiM0MzthZ2FpbjpcbiBcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpIHtcbiBcdFx0cmV0ID0gLUVJTlRSO1xuIFx0XHRnb3RvIGRyb3BfbW07XG5AQCAtMTIzNSw4ICYjNDM7MTI2MywxNSBAQCBTWVNDQUxMX0RFRklORTIocHJvY2Vzc19tcmVsZWFzZSwgaW50LCBwaWRmZCwgdW5zaWduZWQgaW50LCBmbGFncylcbiBcdCAqIENoZWNrIE1NRl9PT01fU0tJUCBhZ2FpbiB1bmRlciBtbWFwX3JlYWRfbG9jayBwcm90ZWN0aW9uIHRvIGVuc3VyZVxuIFx0ICogcG9zc2libGUgY2hhbmdlIGluIGV4aXRfbW1hcCBpcyBzZWVuXG4gXHQgKi9cbi1cdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSBcdTAwMjZcdTAwMjYgIV9fb29tX3JlYXBfdGFza19tbShtbSkpXG4tXHRcdHJldCA9IC1FQUdBSU47XG4mIzQzO1x0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKSB7XG4mIzQzO1x0XHRyZXQgPSBfX29vbV9yZWFwX3Rhc2tfbW0obW0pO1xuJiM0MztcdFx0aWYgKHJldCA9PSAtRUFHQUlOKSB7XHQvKiBhIHdyaXRlciBnb3QgdGhlIGxvY2ssIHF1ZXVlIHVwIGFnYWluICovXG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdGdvdG8gYWdhaW47XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAocmV0ID09IC1FQlVTWSlcbiYjNDM7XHRcdFx0cmV0ID0gLUVBR0FJTjtcbiYjNDM7XHR9XG4gXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcbiBkcm9wX21tOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3phcF92bWFfZm9yX3JlYXBpbmcmIzM0OywKICAgICYjMzQ7X19vb21fcmVhcF90YXNrX21tJiMzNDssCiAgICAmIzM0O29vbV9yZWFwX3Rhc2tfbW0mIzM0OywKICAgICYjMzQ7b29tX3JlYXBfdGFzayYjMzQ7LAogICAgJiMzNDtfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFZNQSB1bm1hcHBpbmcgbG9naWMgZm9yIE9PTSByZWFwaW5nIGFuZCB0aGUgcHJvY2Vzc19tcmVsZWFzZSBzeXNjYWxsLCBzcGxpdHRpbmcgVk1BIHphcHBpbmcgaW50byAxR0IgY2h1bmtzIGFuZCB5aWVsZGluZyBtbWFwX2xvY2sgd2hlbiBjb250ZW5kZWQuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgc2VtYW50aWNzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2sgaW52ZXJzaW9ucywgb3Igc3RhdGUgaW5jb25zaXN0ZW5jeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdhYmZhMDNiODEyM2Q5YzI5ZTUyM2E4NDMzY2NlMTQxZGI5NGFlYmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAxMjo0MTowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDA1MTc5YzRiMjA5MGUuLjdhYzE3MjhhNTdjMjkgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtNTkzLDcgJiM0Mzs1OTMsOCBAQCBzdHJ1Y3QgemFwX2RldGFpbHM7CiB2b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQl1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscyk7Ci1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiYjNDM7aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiYjNDM7CQkJdW5zaWduZWQgbG9uZyBlbmQpOwogaW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQkgICBnZnBfdCBnZnApOwogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDkyNjI3NmQ0MTkyMDIuLjI1YzM1YTI4YTM5ZDEgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC0yMjA3LDE1ICYjNDM7MjIwNywxOCBAQCBzdGF0aWMgdm9pZCBfX3phcF92bWFfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiB9CiAKIC8qKgotICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhbGwgcGFnZSB0YWJsZSBlbnRyaWVzIGluIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZwomIzQzOyAqIHphcF92bWFfZm9yX3JlYXBpbmcgLSB6YXAgYSByYW5nZSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmcKICAqIEB2bWE6IFRoZSB2bWEgdG8gemFwLgomIzQzOyAqIEBzdGFydDogVGhlIGZpcnN0IGFkZHJlc3MgdG8gemFwLgomIzQzOyAqIEBlbmQ6IE9uZSBwYXN0IHRoZSBsYXN0IGFkZHJlc3MgdG8gemFwLgogICoKLSAqIFphcCBhbGwgcGFnZSB0YWJsZSBlbnRyaWVzIGluIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZyBmb3IgdXNlIGJ5IHRoZSBvb20KLSAqIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLgomIzQzOyAqIFphcCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIGluIFtAc3RhcnQsIEBlbmQpIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZwomIzQzOyAqIGZvciB1c2UgYnkgdGhlIG9vbSBraWxsZXIuIEh1Z2V0bGIgdm1hcyBhcmUgbm90IHN1cHBvcnRlZC4KICAqCiAgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiB3ZSB3b3VsZCBoYXZlIHRvIGJsb2NrLgogICovCi1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0MztpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKJiM0MzsJCQl1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlzdHJ1Y3QgemFwX2RldGFpbHMgZGV0YWlscyA9IHsKIAkJLnJlYXBpbmcgPSB0cnVlLApAQCAtMjIyNCw3ICYjNDM7MjIyNyw3IEBAIGludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogCXN0cnVjdCBtbXVfZ2F0aGVyIHRsYjsKIAogCW1tdV9ub3RpZmllcl9yYW5nZV9pbml0KCZhbXA7cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS0mZ3Q7dm1fbW0sCi0JCQkJdm1hLSZndDt2bV9zdGFydCwgdm1hLSZndDt2bV9lbmQpOwomIzQzOwkJCQlzdGFydCwgZW5kKTsKIAl0bGJfZ2F0aGVyX21tdSgmYW1wO3RsYiwgdm1hLSZndDt2bV9tbSk7CiAJaWYgKG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X25vbmJsb2NrKCZhbXA7cmFuZ2UpKSB7CiAJCXRsYl9maW5pc2hfbW11KCZhbXA7dGxiKTsKZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jCmluZGV4IDVkNDhiZDg2MmMyN2IuLmNlZTBhMGY3YjRmMjggMTAwNjQ0Ci0tLSBhL21tL29vbV9raWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vb29tX2tpbGwuYwpAQCAtNTAzLDEwICYjNDM7NTAzLDE3IEBAIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChvb21fcmVhcGVyX3dhaXQpOwogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb29tX3JlYXBlcl9saXN0Owogc3RhdGljIERFRklORV9TUElOTE9DSyhvb21fcmVhcGVyX2xvY2spOwogCi1zdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiYjNDM7LyoKJiM0MzsgKiBDYWxsZWQgd2l0aCBtbWFwX2xvY2sgaGVsZCBmb3IgcmVhZC4gIFJldHVybnMgd2l0aCBpdCBzdGlsbCBoZWxkIG9uIDAKJiM0MzsgKiAoZG9uZSkgb3IgLUVCVVNZIChwYXJ0IGNvdWxkIG5vdCBiZSByZWFwZWQsIHRyeSBhZ2FpbiBsYXRlciksIGFuZCBkcm9wcwomIzQzOyAqIGl0IG9ubHkgb24gLUVBR0FJTiwgd2hlbiBpdCB3YXMgaGFuZGVkIG92ZXIgdG8gYSBxdWV1ZWQgd3JpdGVyIGFuZCB0aGUKJiM0MzsgKiBjYWxsZXIgc2hvdWxkIHJldGFrZSBpdCBhbmQgc3RhcnQgb3Zlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9fb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlib29sIHJldCA9IHRydWU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciwgZW5kOwomIzQzOwlpbnQgcmV0ID0gMDsKIAlNQV9TVEFURShtYXMsICZhbXA7bW0tJmd0O21tX210LCBVTE9OR19NQVgsIFVMT05HX01BWCk7CiAKIAkvKgpAQCAtNTM4LDggJiM0Mzs1NDUsMjUgQEAgc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCQkgKiBjb3VudCBlbGV2YXRlZCB3aXRob3V0IGEgZ29vZCByZWFzb24uCiAJCSAqLwogCQlpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9TSEFSRUQpKSB7Ci0JCQlpZiAoemFwX3ZtYV9mb3JfcmVhcGluZyh2bWEpKQotCQkJCXJldCA9IGZhbHNlOwomIzQzOwkJCS8qCiYjNDM7CQkJICogWmFwIGluIDFHIGNodW5rcyBhbmQgaGFuZCBtbWFwX2xvY2sgb3ZlciB3aGVuZXZlciBhCiYjNDM7CQkJICogd3JpdGVyIGlzIHF1ZXVlZCBvbiBpdCwgc28gaXQgZG9lcyBub3Qgd2FpdCBmb3IgdGhlCiYjNDM7CQkJICogd2hvbGUgcmVhcC4KJiM0MzsJCQkgKi8KJiM0MzsJCQllbmQgPSB2bWEtJmd0O3ZtX2VuZDsKJiM0MzsJCQl3aGlsZSAoZW5kICZndDsgdm1hLSZndDt2bV9zdGFydCkgewomIzQzOwkJCQlhZGRyID0gbWF4KHZtYS0mZ3Q7dm1fc3RhcnQsIEFMSUdOX0RPV04oZW5kIC0gMSwgU1pfMUcpKTsKJiM0MzsJCQkJaWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hLCBhZGRyLCBlbmQpKSB7CiYjNDM7CQkJCQlyZXQgPSAtRUJVU1k7CiYjNDM7CQkJCQlicmVhazsKJiM0MzsJCQkJfQomIzQzOwkJCQllbmQgPSBhZGRyOwomIzQzOwkJCQlpZiAoIW1tYXBfbG9ja19pc19jb250ZW5kZWQobW0pKQomIzQzOwkJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJCW1tYXBfcmVhZF91bmxvY2sobW0pOwomIzQzOwkJCQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJCQl9CiAJCX0KIAl9CiAKQEAgLTU0OSwxNiAmIzQzOzU3MywxNyBAQCBzdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAvKgogICogUmVhcHMgdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGdpdmVuIHRhc2suCiAgKgotICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MgYW5kIGZhbHNlIGlmIG5vbmUgb3IgcGFydCBvZiB0aGUgYWRkcmVzcyBzcGFjZQotICogaGFzIGJlZW4gcmVjbGFpbWVkIGFuZCB0aGUgY2FsbGVyIHNob3VsZCByZXRyeSBsYXRlci4KJiM0MzsgKiBSZXR1cm5zIDAgd2hlbiBkb25lLCAtRUFHQUlOIGlmIG1tYXBfbG9jayB3YXMgaGFuZGVkIG92ZXIgdG8gYSB3cml0ZXIKJiM0MzsgKiBhbmQgdGhlIGNhbGxlciBzaG91bGQgc3RhcnQgb3ZlciwgYW5kIC1FQlVTWSBpZiBub25lIG9yIHBhcnQgb2YgdGhlCiYjNDM7ICogYWRkcmVzcyBzcGFjZSBoYXMgYmVlbiByZWNsYWltZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5IGxhdGVyLgogICovCi1zdGF0aWMgYm9vbCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0MztzdGF0aWMgaW50IG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCWJvb2wgcmV0ID0gdHJ1ZTsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlpZiAoIW1tYXBfcmVhZF90cnlsb2NrKG1tKSkgewogCQl0cmFjZV9za2lwX3Rhc2tfcmVhcGluZyh0c2stJmd0O3BpZCk7Ci0JCXJldHVybiBmYWxzZTsKJiM0MzsJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJLyoKQEAgLTU3Niw3ICYjNDM7NjAxLDkgQEAgc3RhdGljIGJvb2wgb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIAkvKiBmYWlsZWQgdG8gcmVhcCBwYXJ0IG9mIHRoZSBhZGRyZXNzIHNwYWNlLiBUcnkgYWdhaW4gbGF0ZXIgKi8KIAlyZXQgPSBfX29vbV9yZWFwX3Rhc2tfbW0obW0pOwotCWlmICghcmV0KQomIzQzOwlpZiAocmV0ID09IC1FQUdBSU4pCS8qIGhhbmRlZCB0aGUgbG9jayBvdmVyLCBhbHJlYWR5IGRyb3BwZWQgKi8KJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChyZXQpCiAJCWdvdG8gb3V0X2ZpbmlzaDsKIAogCXByX2luZm8oJiMzNDtvb21fcmVhcGVyOiByZWFwZWQgcHJvY2VzcyAlZCAoJXMpLCBub3cgYW5vbi1yc3M6JWx1a0IsIGZpbGUtcnNzOiVsdWtCLCBzaG1lbS1yc3M6JWx1a0JcbiYjMzQ7LApAQCAtNTk1LDE1ICYjNDM7NjIyLDE1IEBAIHN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogI2RlZmluZSBNQVhfT09NX1JFQVBfUkVUUklFUyAxMAogc3RhdGljIHZvaWQgb29tX3JlYXBfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQlpbnQgYXR0ZW1wdHMgPSAwOwomIzQzOwlpbnQgYXR0ZW1wdHMgPSAwLCByZXQ7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stJmd0O3NpZ25hbC0mZ3Q7b29tX21tOwogCi0JLyogUmV0cnkgdGhlIG1tYXBfcmVhZF90cnlsb2NrKG1tKSBhIGZldyB0aW1lcyAqLwotCXdoaWxlIChhdHRlbXB0cyYjNDM7JiM0MzsgJmx0OyBNQVhfT09NX1JFQVBfUkVUUklFUyAmYW1wOyZhbXA7ICFvb21fcmVhcF90YXNrX21tKHRzaywgbW0pKQomIzQzOwkvKiBSZXRyeSB0aGUgbW1hcF9yZWFkX3RyeWxvY2sobW0pIGEgZmV3IHRpbWVzOyBoYW5kaW5nIHRoZSBsb2NrIG92ZXIgaXMgbm90IGFuIGF0dGVtcHQgKi8KJiM0MzsJd2hpbGUgKChyZXQgPSBvb21fcmVhcF90YXNrX21tKHRzaywgbW0pKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAocmV0ID09IC1FQUdBSU4gfHwgJiM0MzsmIzQzO2F0dGVtcHRzICZsdDsgTUFYX09PTV9SRUFQX1JFVFJJRVMpKQogCQlzY2hlZHVsZV90aW1lb3V0X2lkbGUoSFovMTApOwogCi0JaWYgKGF0dGVtcHRzICZsdDs9IE1BWF9PT01fUkVBUF9SRVRSSUVTIHx8Ci0JICAgIG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBtbSkpCiYjNDM7CWlmICghcmV0IHx8IG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBtbSkpCiAJCWdvdG8gZG9uZTsKIAogCXByX2luZm8oJiMzNDtvb21fcmVhcGVyOiB1bmFibGUgdG8gcmVhcCBwaWQ6JWQgKCVzKVxuJiMzNDssCkBAIC0xMjI3LDYgJiM0MzsxMjU0LDcgQEAgU1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpCiAJaWYgKCFyZWFwKQogCQlnb3RvIGRyb3BfbW07CiAKJiM0MzthZ2FpbjoKIAlpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKSB7CiAJCXJldCA9IC1FSU5UUjsKIAkJZ290byBkcm9wX21tOwpAQCAtMTIzNSw4ICYjNDM7MTI2MywxNSBAQCBTWVNDQUxMX0RFRklORTIocHJvY2Vzc19tcmVsZWFzZSwgaW50LCBwaWRmZCwgdW5zaWduZWQgaW50LCBmbGFncykKIAkgKiBDaGVjayBNTUZfT09NX1NLSVAgYWdhaW4gdW5kZXIgbW1hcF9yZWFkX2xvY2sgcHJvdGVjdGlvbiB0byBlbnN1cmUKIAkgKiBwb3NzaWJsZSBjaGFuZ2UgaW4gZXhpdF9tbWFwIGlzIHNlZW4KIAkgKi8KLQlpZiAoIW1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBtbSkgJmFtcDsmYW1wOyAhX19vb21fcmVhcF90YXNrX21tKG1tKSkKLQkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJaWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKSB7CiYjNDM7CQlyZXQgPSBfX29vbV9yZWFwX3Rhc2tfbW0obW0pOwomIzQzOwkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CS8qIGEgd3JpdGVyIGdvdCB0aGUgbG9jaywgcXVldWUgdXAgYWdhaW4gKi8KJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJCWdvdG8gYWdhaW47CiYjNDM7CQl9CiYjNDM7CQlpZiAocmV0ID09IC1FQlVTWSkKJiM0MzsJCQlyZXQgPSAtRUFHQUlOOwomIzQzOwl9CiAJbW1hcF9yZWFkX3VubG9jayhtbSk7CiAKIGRyb3BfbW06CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyODEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBEZWZpbml0ZWx5IFdvcnRoIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBwYXRjaCBhbmQgcmVxdWlyZW1lbnRzIHNjcmVhbXMsICYjMzQ7ZnV6eiBtZSEmIzM0OyBUaGUgZ2l0IGRpZmYgaW5kaWNhdGVzIHNpZ25pZmljYW50IGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgdGhhdCYjMzk7cyAqYWx3YXlzKiBhIHJlZCBmbGFnIChpbiBhIGdvb2Qgd2F5LCBmb3IgZnV6emluZykuIFdlJiMzOTtyZSBsb29raW5nIGF0IG1vZGlmaWNhdGlvbnMgdG8gYG1tL2ludGVybmFsLmhgLCBgbW0vbWVtb3J5LmNgLCBhbmQgYG1tL29vbV9raWxsLmNgIOKAkyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhpbmdzLgoKU3BlY2lmaWNhbGx5LCBgemFwX3ZtYV9mb3JfcmVhcGluZ2AgaW4gYG1tL21lbW9yeS5jYCBoYXMgYmVlbiB1cGRhdGVkIHdpdGggc3RhcnQgYW5kIGVuZCBwYXJhbWV0ZXJzIHdoaWNoIGFmZmVjdHMgdGhlIG1tdSBub3RpZmllci4gVGhlIGJpZ2dlciBjaGFuZ2UgaXMgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiBgX19vb21fcmVhcF90YXNrX21tYCBpbiBgbW0vb29tX2tpbGwuY2AsIGdvaW5nIGZyb20gYSBib29sZWFuIHRvIGFuIGludGVnZXIuIFRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSB0d2VhazsgaXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBlcnJvciBoYW5kbGluZyBhbmQgY29udHJvbCBmbG93IHdpdGhpbiB0aGUgT09NIHJlYXBlci4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBjaHVua2luZyBWTUEgemFwcGluZyBpbnRvIDFHQiBibG9ja3MgYW5kIGludHJvZHVjaW5nIGEgbG9ja2luZyBjaGVjayB3aXRoIGAtRUFHQUlOYCBpZiB0aGUgbW1hcCBsb2NrIGlzIGNvbnRlbmRlZC4gVGhpcyBpbmNsdWRlcyBwb3RlbnRpYWxseSBoYW5kaW5nIHRoZSBtbWFwIGxvY2sgb2ZmIHRvIGFueSB3cml0ZXJzIHdhaXRpbmcgb24gaXQuCgpUaGUgaW50ZXJlc3RpbmcgcGllY2UgaXMgdGhlIGBwcm9jZXNzX21yZWxlYXNlYCBzeXNjYWxsLCB3aGljaCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgaXQmIzM5O3MgYmVlbiB1cGRhdGVkIHRvIGhhbmRsZSB0aGUgbmV3IHJldHVybiB2YWx1ZXMgZnJvbSBgX19vb21fcmVhcF90YXNrX21tYC4gVGhpcyBtZWFucyB3ZSBoYXZlIGEgZGlyZWN0IHBhdGggZnJvbSB1c2Vyc3BhY2UgdG8gdGhlc2Ugc2Vuc2l0aXZlIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzLiBUaGUgT09NIHJlYXBlciBpdHNlbGYgaXMgYWxzbyBhIGNsZWFyIGVudHJ5IHBvaW50LCBzaW5jZSBpdCBydW5zIGluIHRoZSBrZXJuZWwgd2hlbiBPT00gb2NjdXJzLgoKQ29uc2lkZXJpbmcgdGhlICYjMzQ7Q29yZSBTdWJzeXN0ZW1zJiMzNDsgc2VjdGlvbiBvZiB0aGUgcmVxdWlyZW1lbnRzLCB0aGlzIHBlcmZlY3RseSBmaXRzIHRoZSBiaWxsOiBtZW1vcnkgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHN5c2NhbGwgaGFuZGxpbmcgYXJlIGFsbCBkaXJlY3RseSB0b3VjaGVkLiBgcHJvY2Vzc19tcmVsZWFzZWAgaXMgYSBzeXNjYWxsISBBbmQgdGhlIE9PTSByZWFwZXIgaXMgdHJpZ2dlcmVkIGJ5IE9PTSBldmVudHMuIEl0JiMzOTtzIGEgaGlnaC12YWx1ZSB0YXJnZXQuCgpUbyBjb25maXJtIHRoZSBkZXRhaWxzLCBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGBtbS9vb21fa2lsbC5jYCBhbmQgYG1tL21lbW9yeS5jYCBjb2RlIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgbnVhbmNlIEkgbWlnaHQgaGF2ZSBtaXNzZWQuIEkmIzM5O2xsIHByb2JhYmx5IGJlIHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBkaXZlIGludG8gdGhlIGZ1bmN0aW9ucyBhbmQgc3ltYm9scyBpbnZvbHZlZCBhbmQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLCBidXQgSSBhbSBjb25maWRlbnQgdGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gY29uY2VudHJhdGUgZnV6emluZyByZXNvdXJjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9vb21fa2lsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0XG4xMjExOlx0XHRpZiAoX19yYXRlbGltaXQoXHUwMDI2cGZvb21fcnMpKVxuMTIxMjpcdFx0XHRwcl93YXJuKFwmIzM0O0h1aCBWTV9GQVVMVF9PT00gbGVha2VkIG91dCB0byB0aGUgI1BGIGhhbmRsZXIuIFJldHJ5aW5nIFBGXFxuXCYjMzQ7KTtcbjEyMTM6XHR9XG4xMjE0Olx0XG4xMjE1Olx0U1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpXG4xMjE2Olx0e1xuMTIxNzpcdCNpZmRlZiBDT05GSUdfTU1VXG4xMjE4Olx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IE5VTEw7XG4xMjE5Olx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4xMjIwOlx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7XG4xMjIxOlx0XHR1bnNpZ25lZCBpbnQgZl9mbGFncztcbjEyMjI6XHRcdGJvb2wgcmVhcCA9IGZhbHNlO1xuMTIyMzpcdFx0bG9uZyByZXQgPSAwO1xuMTIyNDpcdFxuMTIyNTpcdFx0aWYgKGZsYWdzKVxuMTIyNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyMjc6XHRcbjEyMjg6XHRcdHRhc2sgPSBwaWRmZF9nZXRfdGFzayhwaWRmZCwgXHUwMDI2Zl9mbGFncyk7XG4xMjI5Olx0XHRpZiAoSVNfRVJSKHRhc2spKVxuMTIzMDpcdFx0XHRyZXR1cm4gUFRSX0VSUih0YXNrKTtcbjEyMzE6XHRcbjEyMzI6XHRcdC8qXG4xMjMzOlx0XHQgKiBNYWtlIHN1cmUgdG8gY2hvb3NlIGEgdGhyZWFkIHdoaWNoIHN0aWxsIGhhcyBhIHJlZmVyZW5jZSB0byBtbVxuMTIzNDpcdFx0ICogZHVyaW5nIHRoZSBncm91cCBleGl0XG4xMjM1Olx0XHQgKi9cbjEyMzY6XHRcdHAgPSBmaW5kX2xvY2tfdGFza19tbSh0YXNrKTtcbjEyMzc6XHRcdGlmICghcCkge1xuMTIzODpcdFx0XHRyZXQgPSAtRVNSQ0g7XG4xMjM5Olx0XHRcdGdvdG8gcHV0X3Rhc2s7XG4xMjQwOlx0XHR9XG4xMjQxOlx0XG4xMjQyOlx0XHRtbSA9IHAtXHUwMDNlbW07XG4xMjQzOlx0XHRtbWdyYWIobW0pO1xuMTI0NDpcdFxuMTI0NTpcdFx0aWYgKHRhc2tfd2lsbF9mcmVlX21lbShwKSlcbjEyNDY6XHRcdFx0cmVhcCA9IHRydWU7XG4xMjQ3Olx0XHRlbHNlIHtcbjEyNDg6XHRcdFx0LyogRXJyb3Igb25seSBpZiB0aGUgd29yayBoYXMgbm90IGJlZW4gZG9uZSBhbHJlYWR5ICovXG4xMjQ5Olx0XHRcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSlcbjEyNTA6XHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuMTI1MTpcdFx0fVxuMTI1MjpcdFx0dGFza191bmxvY2socCk7XG4xMjUzOlx0XG4xMjU0Olx0XHRpZiAoIXJlYXApXG4xMjU1Olx0XHRcdGdvdG8gZHJvcF9tbTtcbjEyNTY6XHRcbjEyNTc6XHRhZ2FpbjpcbjEyNTg6XHRcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpIHtcbjEyNTk6XHRcdFx0cmV0ID0gLUVJTlRSO1xuMTI2MDpcdFx0XHRnb3RvIGRyb3BfbW07XG4xMjYxOlx0XHR9XG4xMjYyOlx0XHQvKlxuMTI2MzpcdFx0ICogQ2hlY2sgTU1GX09PTV9TS0lQIGFnYWluIHVuZGVyIG1tYXBfcmVhZF9sb2NrIHByb3RlY3Rpb24gdG8gZW5zdXJlXG4xMjY0Olx0XHQgKiBwb3NzaWJsZSBjaGFuZ2UgaW4gZXhpdF9tbWFwIGlzIHNlZW5cbjEyNjU6XHRcdCAqL1xuMTI2NjpcdFx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKSB7XG4xMjY3Olx0XHRcdHJldCA9IF9fb29tX3JlYXBfdGFza19tbShtbSk7XG4xMjY4Olx0XHRcdGlmIChyZXQgPT0gLUVBR0FJTikge1x0LyogYSB3cml0ZXIgZ290IHRoZSBsb2NrLCBxdWV1ZSB1cCBhZ2FpbiAqL1xuMTI2OTpcdFx0XHRcdHJldCA9IDA7XG4xMjcwOlx0XHRcdFx0Z290byBhZ2FpbjtcbjEyNzE6XHRcdFx0fVxuMTI3MjpcdFx0XHRpZiAocmV0ID09IC1FQlVTWSlcbjEyNzM6XHRcdFx0XHRyZXQgPSAtRUFHQUlOO1xuMTI3NDpcdFx0fVxuMTI3NTpcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4xMjc2Olx0XG4xMjc3Olx0ZHJvcF9tbTpcbjEyNzg6XHRcdG1tZHJvcChtbSk7XG4xMjc5Olx0cHV0X3Rhc2s6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIGEgTWVtb3J5IFJlbGVhc2UgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBwcm9jZXNzX21yZWxlYXNlYC4gVGhlIGZpcnN0IHRoaW5nIEkgc2hvdWxkIGRvIGlzIGVzdGFibGlzaCBpdHMgb3JpZ2luIOKAkyBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBtbS9vb21fa2lsbC5jYC4gR29vZCwgdGhhdCBuYXJyb3dzIG15IGZvY3VzLiBOb3csIEkgc3VzcGVjdCB0aGF0IHJlbGF0ZWQgZnVuY3Rpb25zIG9yIGNvbnRleHRzIGFyZSBkZWZpbmVkIG5lYXJieS4gU28sIGxldCBtZSBqdW1wIG92ZXIgdG8gYG1tL21lbW9yeS5jYC4gSSYjMzk7bGwgc3RhcnQgbG9va2luZyBhcm91bmQgbGluZSAyMjAwIGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIGFuZCBwb3RlbnRpYWxseSByZXZlYWwgaG93IGBwcm9jZXNzX21yZWxlYXNlYCBpbnRlcmFjdHMgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gYXNzZXNzIHRoZSBmdW5jdGlvbiYjMzk7cyBvdmVyYWxsIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMDU6XHRcdFx0dGxiX2VuZF92bWEodGxiLCB2bWEpO1xuMjIwNjpcdFx0fVxuMjIwNzpcdH1cbjIyMDg6XHRcbjIyMDk6XHQvKipcbjIyMTA6XHQgKiB6YXBfdm1hX2Zvcl9yZWFwaW5nIC0gemFwIGEgcmFuZ2Ugb2YgdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nXG4yMjExOlx0ICogQHZtYTogVGhlIHZtYSB0byB6YXAuXG4yMjEyOlx0ICogQHN0YXJ0OiBUaGUgZmlyc3QgYWRkcmVzcyB0byB6YXAuXG4yMjEzOlx0ICogQGVuZDogT25lIHBhc3QgdGhlIGxhc3QgYWRkcmVzcyB0byB6YXAuXG4yMjE0Olx0ICpcbjIyMTU6XHQgKiBaYXAgdGhlIHBhZ2UgdGFibGUgZW50cmllcyBpbiBbQHN0YXJ0LCBAZW5kKSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmdcbjIyMTY6XHQgKiBmb3IgdXNlIGJ5IHRoZSBvb20ga2lsbGVyLiBIdWdldGxiIHZtYXMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4yMjE3Olx0ICpcbjIyMTg6XHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiB3ZSB3b3VsZCBoYXZlIHRvIGJsb2NrLlxuMjIxOTpcdCAqL1xuMjIyMDpcdGludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuMjIyMTpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kKVxuMjIyMjpcdHtcbjIyMjM6XHRcdHN0cnVjdCB6YXBfZGV0YWlscyBkZXRhaWxzID0ge1xuMjIyNDpcdFx0XHQucmVhcGluZyA9IHRydWUsXG4yMjI1Olx0XHR9O1xuMjIyNjpcdFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbjIyMjc6XHRcdHN0cnVjdCBtbXVfZ2F0aGVyIHRsYjtcbjIyMjg6XHRcbjIyMjk6XHRcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXHUwMDNldm1fbW0sXG4yMjMwOlx0XHRcdFx0XHRzdGFydCwgZW5kKTtcbjIyMzE6XHRcdHRsYl9nYXRoZXJfbW11KFx1MDAyNnRsYiwgdm1hLVx1MDAzZXZtX21tKTtcbjIyMzI6XHRcdGlmIChtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9ub25ibG9jayhcdTAwMjZyYW5nZSkpIHtcbjIyMzM6XHRcdFx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbjIyMzQ6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjIyMzU6XHRcdH1cbjIyMzY6XHRcdF9femFwX3ZtYV9yYW5nZShcdTAwMjZ0bGIsIHZtYSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCwgXHUwMDI2ZGV0YWlscyk7XG4yMjM3Olx0XHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXHUwMDI2cmFuZ2UpO1xuMjIzODpcdFx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbjIyMzk6XHRcdHJldHVybiAwO1xuMjI0MDpcdH1cbjIyNDE6XHRcbjIyNDI6XHQvKipcbjIyNDM6XHQgKiB1bm1hcF92bWFzIC0gdW5tYXAgYSByYW5nZSBvZiBtZW1vcnkgY292ZXJlZCBieSBhIGxpc3Qgb2Ygdm1hJiMzOTtzXG4yMjQ0Olx0ICogQHRsYjogYWRkcmVzcyBvZiB0aGUgY2FsbGVyJiMzOTtzIHN0cnVjdCBtbXVfZ2F0aGVyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIE9PTSBLaWxsZXImIzM5O3MgTWVtb3J5IFJlY2xhbWF0aW9uIExvZ2ljKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIE9PTSBraWxsZXIuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBtZW1vcnkgaXMgcmVjbGFpbWVkIHdoZW4gdGhpbmdzIGdvIHNvdXRoIGFuZCBhIHRhc2sgaXMgdGFyZ2V0ZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgbW0vb29tX2tpbGwuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSBjb2RlIGFyb3VuZCB0aGUgYG9vbV9yZWFwX3Rhc2tfbW1gIGFuZCB0aGUgYF9fb29tX3JlYXBfdGFza19tbWAgZnVuY3Rpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0aGVzZSBhcmUga2V5IGFyZWFzIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNsZWFudXAgcmVsYXRlZCB0byB0aGUgdmljdGltIHRhc2smIzM5O3MgbWVtb3J5IHNwYWNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIGluIGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIGRpZmZlcmVudCBtZW1vcnkgbWFuYWdlbWVudCBzY2VuYXJpb3MuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL29vbV9raWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdCAqL1xuIDUwMTpcdHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9vbV9yZWFwZXJfdGg7XG4gNTAyOlx0c3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG9vbV9yZWFwZXJfd2FpdCk7XG4gNTAzOlx0c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb29tX3JlYXBlcl9saXN0O1xuIDUwNDpcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob29tX3JlYXBlcl9sb2NrKTtcbiA1MDU6XHRcbiA1MDY6XHQvKlxuIDUwNzpcdCAqIENhbGxlZCB3aXRoIG1tYXBfbG9jayBoZWxkIGZvciByZWFkLiAgUmV0dXJucyB3aXRoIGl0IHN0aWxsIGhlbGQgb24gMFxuIDUwODpcdCAqIChkb25lKSBvciAtRUJVU1kgKHBhcnQgY291bGQgbm90IGJlIHJlYXBlZCwgdHJ5IGFnYWluIGxhdGVyKSwgYW5kIGRyb3BzXG4gNTA5Olx0ICogaXQgb25seSBvbiAtRUFHQUlOLCB3aGVuIGl0IHdhcyBoYW5kZWQgb3ZlciB0byBhIHF1ZXVlZCB3cml0ZXIgYW5kIHRoZVxuIDUxMDpcdCAqIGNhbGxlciBzaG91bGQgcmV0YWtlIGl0IGFuZCBzdGFydCBvdmVyLlxuIDUxMTpcdCAqL1xuIDUxMjpcdHN0YXRpYyBpbnQgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIDUxMzpcdHtcbiA1MTQ6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIDUxNTpcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBlbmQ7XG4gNTE2Olx0XHRpbnQgcmV0ID0gMDtcbiA1MTc6XHRcdE1BX1NUQVRFKG1hcywgXHUwMDI2bW0tXHUwMDNlbW1fbXQsIFVMT05HX01BWCwgVUxPTkdfTUFYKTtcbiA1MTg6XHRcbiA1MTk6XHRcdC8qXG4gNTIwOlx0XHQgKiBUZWxsIGFsbCB1c2VycyBvZiBnZXRfdXNlci9jb3B5X2Zyb21fdXNlciBldGMuLi4gdGhhdCB0aGUgY29udGVudFxuIDUyMTpcdFx0ICogaXMgbm8gbG9uZ2VyIHN0YWJsZS4gTm8gYmFycmllcnMgcmVhbGx5IG5lZWRlZCBiZWNhdXNlIHVubWFwcGluZ1xuIDUyMjpcdFx0ICogc2hvdWxkIGltcGx5IGJhcnJpZXJzIGFscmVhZHkgYW5kIHRoZSByZWFkZXIgd291bGQgaGl0IGEgcGFnZSBmYXVsdFxuIDUyMzpcdFx0ICogaWYgaXQgc3R1bWJsZWQgb3ZlciBhIHJlYXBlZCBtZW1vcnkuXG4gNTI0Olx0XHQgKi9cbiA1MjU6XHRcdG1tX2ZsYWdzX3NldChNTUZfVU5TVEFCTEUsIG1tKTtcbiA1MjY6XHRcbiA1Mjc6XHRcdC8qXG4gNTI4Olx0XHQgKiBJdCBtaWdodCBzdGFydCByYWNpbmcgd2l0aCB0aGUgZHlpbmcgdGFzayBhbmQgY29tcGV0ZSBmb3Igc2hhcmVkXG4gNTI5Olx0XHQgKiByZXNvdXJjZXMgLSBlLmcuIHBhZ2UgdGFibGUgbG9jayBjb250ZW50aW9uIGhhcyBiZWVuIG9ic2VydmVkLlxuIDUzMDpcdFx0ICogUmVkdWNlIHRob3NlIHJhY2VzIGJ5IHJlYXBpbmcgdGhlIG9vbSB2aWN0aW0gZnJvbSB0aGUgb3RoZXIgZW5kXG4gNTMxOlx0XHQgKiBvZiB0aGUgYWRkcmVzcyBzcGFjZS5cbiA1MzI6XHRcdCAqL1xuIDUzMzpcdFx0bWFzX2Zvcl9lYWNoX3JldihcdTAwMjZtYXMsIHZtYSwgMCkge1xuIDUzNDpcdFx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fSFVHRVRMQnxWTV9QRk5NQVApKVxuIDUzNTpcdFx0XHRcdGNvbnRpbnVlO1xuIDUzNjpcdFxuIDUzNzpcdFx0XHQvKlxuIDUzODpcdFx0XHQgKiBPbmx5IGFub255bW91cyBwYWdlcyBoYXZlIGEgZ29vZCBjaGFuY2UgdG8gYmUgZHJvcHBlZFxuIDUzOTpcdFx0XHQgKiB3aXRob3V0IGFkZGl0aW9uYWwgc3RlcHMgd2hpY2ggd2UgY2Fubm90IGFmZm9yZCBhcyB3ZVxuIDU0MDpcdFx0XHQgKiBhcmUgT09NIGFscmVhZHkuXG4gNTQxOlx0XHRcdCAqXG4gNTQyOlx0XHRcdCAqIFdlIGRvIG5vdCBldmVuIGNhcmUgYWJvdXQgZnMgYmFja2VkIHBhZ2VzIGJlY2F1c2UgYWxsXG4gNTQzOlx0XHRcdCAqIHdoaWNoIGFyZSByZWNsYWltYWJsZSBoYXZlIGFscmVhZHkgYmVlbiByZWNsYWltZWQgYW5kXG4gNTQ0Olx0XHRcdCAqIHdlIGRvIG5vdCB3YW50IHRvIGJsb2NrIGV4aXRfbW1hcCBieSBrZWVwaW5nIG1tIHJlZlxuIDU0NTpcdFx0XHQgKiBjb3VudCBlbGV2YXRlZCB3aXRob3V0IGEgZ29vZCByZWFzb24uXG4gNTQ2Olx0XHRcdCAqL1xuIDU0NzpcdFx0XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKSB7XG4gNTQ4Olx0XHRcdFx0LypcbiA1NDk6XHRcdFx0XHQgKiBaYXAgaW4gMUcgY2h1bmtzIGFuZCBoYW5kIG1tYXBfbG9jayBvdmVyIHdoZW5ldmVyIGFcbiA1NTA6XHRcdFx0XHQgKiB3cml0ZXIgaXMgcXVldWVkIG9uIGl0LCBzbyBpdCBkb2VzIG5vdCB3YWl0IGZvciB0aGVcbiA1NTE6XHRcdFx0XHQgKiB3aG9sZSByZWFwLlxuIDU1MjpcdFx0XHRcdCAqL1xuIDU1MzpcdFx0XHRcdGVuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4gNTU0Olx0XHRcdFx0d2hpbGUgKGVuZCBcdTAwM2Ugdm1hLVx1MDAzZXZtX3N0YXJ0KSB7XG4gNTU1Olx0XHRcdFx0XHRhZGRyID0gbWF4KHZtYS1cdTAwM2V2bV9zdGFydCwgQUxJR05fRE9XTihlbmQgLSAxLCBTWl8xRykpO1xuIDU1NjpcdFx0XHRcdFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hLCBhZGRyLCBlbmQpKSB7XG4gNTU3Olx0XHRcdFx0XHRcdHJldCA9IC1FQlVTWTtcbiA1NTg6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNTU5Olx0XHRcdFx0XHR9XG4gNTYwOlx0XHRcdFx0XHRlbmQgPSBhZGRyO1xuIDU2MTpcdFx0XHRcdFx0aWYgKCFtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKSlcbiA1NjI6XHRcdFx0XHRcdFx0Y29udGludWU7XG4gNTYzOlx0XG4gNTY0Olx0XHRcdFx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiA1NjU6XHRcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIDU2NjpcdFx0XHRcdH1cbiA1Njc6XHRcdFx0fVxuIDU2ODpcdFx0fVxuIDU2OTpcdFxuIDU3MDpcdFx0cmV0dXJuIHJldDtcbiA1NzE6XHR9XG4gNTcyOlx0XG4gNTczOlx0LypcbiA1NzQ6XHQgKiBSZWFwcyB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgZ2l2ZW4gdGFzay5cbiA1NzU6XHQgKlxuIDU3NjpcdCAqIFJldHVybnMgMCB3aGVuIGRvbmUsIC1FQUdBSU4gaWYgbW1hcF9sb2NrIHdhcyBoYW5kZWQgb3ZlciB0byBhIHdyaXRlclxuIDU3NzpcdCAqIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBzdGFydCBvdmVyLCBhbmQgLUVCVVNZIGlmIG5vbmUgb3IgcGFydCBvZiB0aGVcbiA1Nzg6XHQgKiBhZGRyZXNzIHNwYWNlIGhhcyBiZWVuIHJlY2xhaW1lZCBhbmQgdGhlIGNhbGxlciBzaG91bGQgcmV0cnkgbGF0ZXIuXG4gNTc5Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg1MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4KCioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBpbiBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBpbiB0aGlzIHNlY3Rpb24gb2YgY29kZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGBDT05GSUdfYCBmbGFncyB0aGF0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgdGhlIE9PTSBraWxsZXIgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbW0vb29tX2tpbGwuY2AgZmlsZS4gSSByZW1lbWJlciBzZWVpbmcgYSBwb3RlbnRpYWwgZGVwZW5kZW5jeSBvbiBgQ09ORklHX01NVWAgaW4gYHByb2Nlc3NfbXJlbGVhc2VgLCB3aXRoIHRoZSB1c2Ugb2YgYCNpZmRlZmAuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBrbm93IGlmIGBvb21fcmVhcGVyYCBkZXBlbmRzIG9uIGFueXRoaW5nLiBUbyBkbyB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgaW4gdGhlIGZpbGUsIG1heWJlIDUwMCBsaW5lcyBvciBzbywgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoZSBkZWZpbml0aW9uLiBJZiB0aGF0JiMzOTtzIG5vdCBmcnVpdGZ1bCwgSSYjMzk7bGwgaGF2ZSB0byBkbyBhIG1vcmUgZ2VuZXJhbCBzZWFyY2ggZm9yIGBDT05GSUdfYCB3aXRoaW4gYG1tL29vbV9raWxsLmNgIHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL29vbV9raWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vb29tX2tpbGwuYz03Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbWVtY2dfb29tKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4tLVxubW0vb29tX2tpbGwuYy03Ni1cbm1tL29vbV9raWxsLmM6Nzc6I2lmZGVmIENPTkZJR19OVU1BXG5tbS9vb21fa2lsbC5jLTc4LS8qKlxuLS1cbm1tL29vbV9raWxsLmM9MTIyPXN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4tLVxubW0vb29tX2tpbGwuYy0xMjUtfVxubW0vb29tX2tpbGwuYzoxMjY6I2VuZGlmIC8qIENPTkZJR19OVU1BICovXG5tbS9vb21fa2lsbC5jLTEyNy1cbi0tXG5tbS9vb21fa2lsbC5jPTI0OT1zdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxuLS1cbm1tL29vbV9raWxsLmMtMjY0LVxubW0vb29tX2tpbGwuYzoyNjU6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxubW0vb29tX2tpbGwuYy0yNjYtXHRcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XG4tLVxubW0vb29tX2tpbGwuYz00NDk9c3RhdGljIHZvaWQgZHVtcF9oZWFkZXIoc3RydWN0IG9vbV9jb250cm9sICpvYylcbi0tXG5tbS9vb21fa2lsbC5jLTQ1My1cdFx0XHRjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2Vvb21fc2NvcmVfYWRqKTtcbm1tL29vbV9raWxsLmM6NDU0Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSBcdTAwMjZcdTAwMjYgb2MtXHUwMDNlb3JkZXIpXG5tbS9vb21fa2lsbC5jLTQ1NS1cdFx0cHJfd2FybihcJiMzNDtDT01QQUNUSU9OIGlzIGRpc2FibGVkISEhXFxuXCYjMzQ7KTtcbi0tXG5tbS9vb21fa2lsbC5jPTQ4ND1ib29sIHByb2Nlc3Nfc2hhcmVzX21tKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vb29tX2tpbGwuYy00OTUtXG5tbS9vb21fa2lsbC5jOjQ5NjojaWZkZWYgQ09ORklHX01NVVxubW0vb29tX2tpbGwuYy00OTctLypcbi0tXG5tbS9vb21fa2lsbC5jPTcwNj1zdGF0aWMgdm9pZCBxdWV1ZV9vb21fcmVhcGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbm1tL29vbV9raWxsLmMtNzE3LVxubW0vb29tX2tpbGwuYzo3MTg6I2lmZGVmIENPTkZJR19TWVNDVExcbm1tL29vbV9raWxsLmMtNzE5LXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZtX29vbV9raWxsX3RhYmxlW10gPSB7XG4tLVxubW0vb29tX2tpbGwuYz03NDY9c3RhdGljIGludCBfX2luaXQgb29tX2luaXQodm9pZClcbi0tXG5tbS9vb21fa2lsbC5jLTc0OC1cdG9vbV9yZWFwZXJfdGggPSBrdGhyZWFkX3J1bihvb21fcmVhcGVyLCBOVUxMLCBcJiMzNDtvb21fcmVhcGVyXCYjMzQ7KTtcbm1tL29vbV9raWxsLmM6NzQ5OiNpZmRlZiBDT05GSUdfU1lTQ1RMXG5tbS9vb21fa2lsbC5jLTc1MC1cdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFwmIzM0O3ZtXCYjMzQ7LCB2bV9vb21fa2lsbF90YWJsZSk7XG4tLVxubW0vb29tX2tpbGwuYz03NTY9c3RhdGljIGlubGluZSB2b2lkIHF1ZXVlX29vbV9yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxubW0vb29tX2tpbGwuYy03NTgtfVxubW0vb29tX2tpbGwuYzo3NTk6I2VuZGlmIC8qIENPTkZJR19NTVUgKi9cbm1tL29vbV9raWxsLmMtNzYwLVxuLS1cbm1tL29vbV9raWxsLmM9MTIxNT1TWVNDQUxMX0RFRklORTIocHJvY2Vzc19tcmVsZWFzZSwgaW50LCBwaWRmZCwgdW5zaWduZWQgaW50LCBmbGFncylcbm1tL29vbV9raWxsLmMtMTIxNi17XG5tbS9vb21fa2lsbC5jOjEyMTc6I2lmZGVmIENPTkZJR19NTVVcbm1tL29vbV9raWxsLmMtMTIxOC1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDtcbi0tXG5tbS9vb21fa2lsbC5jLTEyODMtXHRyZXR1cm4gLUVOT1NZUztcbm1tL29vbV9raWxsLmM6MTI4NDojZW5kaWYgLyogQ09ORklHX01NVSAqL1xubW0vb29tX2tpbGwuYy0xMjg1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwOTYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1NVSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfTU1VYCBpcyBwcmV0dHkgbXVjaCBhIGdpdmVuIG9uIGFtZDY0LCByaWdodD8gSXQmIzM5O3MgdGhlIGRlZmF1bHQsIGl0JiMzOTtzIGV4cGVjdGVkLiBCdXQgSSYjMzk7bSBmZWVsaW5nIGEgbGl0dGxlIHBhcmFub2lkIHRvZGF5LiBJcyB0aGVyZSAqYWN0dWFsbHkqIGFueSBzY2VuYXJpbyB3aGVyZSBpdCYjMzk7cyAqbm90KiBlbmFibGVkLCBvciBhIHJlbGF0ZWQgY29uZmlndXJhdGlvbiB0aGF0JiMzOTtzIHN1YnRseSBkaWZmZXJlbnQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgpMZXQmIzM5O3MgZGl2ZSBpbiBhbmQgY29uZmlybS4gSSYjMzk7bSBnb2luZyB0byBjaGVjayBob3cgYHByb2Nlc3NfbXJlbGVhc2VgIGlzIGhhbmRsZWQuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBib3RoIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIHRoZSByZWxldmFudCBgTWFrZWZpbGVgIGVudHJpZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB0aGUgcmVsZWFzZSBvZiBtZW1vcnkgcmVzb3VyY2VzLiBEaWdnaW5nIGludG8gdGhvc2UgZmlsZXMgaXMgdGhlIGtleSB0byBmdWxseSB1bmRlcnN0YW5kaW5nIHRoZSBNTVUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgaW4gdGhpcyBwYXJ0aWN1bGFyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvY2Vzc19tcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzU2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGFuIGV4cGVydCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGllZCBjb250ZXh0OgoKKipEaXZpbmcgaW50byB0aGUgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gaXMgY3J5c3RhbCBjbGVhcjogJiMzNDtMZXQmIzM5O3MgY2hlY2sgYG1tL01ha2VmaWxlYC4mIzM0OyBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHNvbWV0aGluZyB3aXRoaW4gdGhlIGBtbWAgZGlyZWN0b3J5JiMzOTtzIE1ha2VmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZywgZGVidWdnaW5nLCBvciBtb2RpZnlpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGNvbXBvbmVudC4gVGhpcyBwcm9iYWJseSBpc24mIzM5O3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSYjMzk7bSBsaWtlbHkgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBidWlsZCB0YXJnZXRzLCBjb21waWxlciBmbGFncywgYW5kIHRoZSBvdmVyYWxsIHN0cnVjdHVyZS4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgaXNzdWVzLCBib3R0bGVuZWNrcywgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBmaWxlbmFtZTsgaXQgc2NyZWFtcyAmIzM0O21lbW9yeSBtYW5hZ2VtZW50JiMzNDsgb3IgcGVyaGFwcyBzb21lIHNvcnQgb2YgJiMzNDttb2R1bGUmIzM0OyB0aGF0JiMzOTtzIGNyaXRpY2FsIHRvIG1lbW9yeSBvcGVyYXRpb25zLCBzbyB0aGF0IGNvbnRleHQgZ3VpZGVzIG15IGluaXRpYWwgc2VhcmNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b29tX2tpbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT00OT1lbmRpZlxubW0vTWFrZWZpbGUtNTAtXG5tbS9NYWtlZmlsZTo1MTpvYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbm1tL01ha2VmaWxlLTUyLVx0XHRcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjcyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE9PTSBSZWFwZXIgU3ltYm9sIFZpc2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgT09NIHJlYXBlciYjMzk7cyBzeW1ib2xzIGFyZSBoYW5kbGVkIGluIHRoZSBrZXJuZWwgYnVpbGQuIGBvb21fa2lsbC5vYCBpcyBhbHdheXMgYnVpbHQsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIChgb2JqLXlgKS4gSW5zaWRlIGBtbS9vb21fa2lsbC5jYCwgdGhlIE1NVSBpcyB0aGUga2V5IGVuYWJsZXIgZm9yIHRoZSByZWFwZXIgYW5kIGBwcm9jZXNzX21yZWxlYXNlYC4gT24gYW1kNjQsIHRoZSBNTVUgaXMgKmFsd2F5cyogZW5hYmxlZCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIEFsdGhvdWdoIGl0JiMzOTtzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiAoYENPTkZJR19NTVU9eWApLCBpdCBzdGlsbCBmZWVscyBsaWtlIGl0JiMzOTtzIHdvcnRoIGV4cGxpY2l0bHkgaW5jbHVkaW5nICYjMzQ7TU1VJiMzNDsgaW4gb3VyIGNvbmZpZ3VyYXRpb24gY29uc2lkZXJhdGlvbnMsIGl0IGFkZHMgY2xhcml0eS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBiZXlvbmQgdGhlIE1NVS4gYENPTkZJR19QSURGRGAgaXNuJiMzOTt0IGEgZmFjdG9yIGhlcmUsIGFzIGl0JiMzOTtzIGEgY29yZSBrZXJuZWwgZmVhdHVyZS4KClRvIGNvbmZpcm0gdGhlIE1NVSBzaXR1YXRpb24sIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgYGluaXQvS2NvbmZpZ2AgYW5kIGBhcmNoL3g4Ni9LY29uZmlnYCB0byBiZSBzdXJlLiBZZXAsIE1NVSBpcyBkZWZpbml0ZWx5IHN0YW5kYXJkLiBJIHRoaW5rIGluY2x1ZGluZyAmIzM0O01NVSYjMzQ7IGluIGBFbmFibGVDb25maWdzYCBpcyB0aGUgYmVzdCBhcHByb2FjaDsgaXQmIzM5O3Mgc2FmZSBhbmQgYWNjdXJhdGUsIGV2ZW4gaWYgaXQmIzM5O3MgYWx3YXlzICYjMzk7eSYjMzk7LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgRm9jdXNTeW1ib2xzYCB0byBzZWUgd2hhdCBjaGFuZ2VkLiBGaXJzdCwgSSBzZWUgYHphcF92bWFfZm9yX3JlYXBpbmdgIGluIGBtbS9tZW1vcnkuY2AuIFRoaXMgaXNuJiMzOTt0IHViaXF1aXRvdXMsIGFuZCBpdCYjMzk7cyBiZWVuIGRpcmVjdGx5IG1vZGlmaWVkLCBzbyBpdCYjMzk7cyBhIHByaW1lIGNhbmRpZGF0ZS4gTGV0JiMzOTtzIGRpZyBkZWVwZXI6IHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpcyBgaW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKWAuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBpcyBpdCBzdGF0aWMsIGV4cG9ydGVkLCBvciBmaWxlLXNjb3BlPyBOb3BlLCBpdCYjMzk7cyBub3Qgc3RhdGljOyBpdCYjMzk7cyBkZWNsYXJlZCBpbiBgbW0vaW50ZXJuYWwuaGAgYXMgYGludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKC4uLilgLiBTbywgYHphcF92bWFfZm9yX3JlYXBpbmdgICp3aWxsKiBiZSBhIHN5bWJvbCBpbiBgdm1saW51eGAuCgpOZXh0LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBzeW1ib2xzIGluIGBtbS9vb21fa2lsbC5jYC4gSSBzZWUgYF9fb29tX3JlYXBfdGFza19tbWAsIGBvb21fcmVhcF90YXNrX21tYCwgYW5kIGBvb21fcmVhcF90YXNrYC4gVGhvc2UgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLCBzbyB0aGV5IHdvbiYjMzk7dCBiZSB2aXNpYmxlIG91dHNpZGUgdGhlIGZpbGUuIEhvd2V2ZXIsIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCAvIGBwcm9jZXNzX21yZWxlYXNlYCBhcmUgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgYFNZU0NBTExfREVGSU5FMihwcm9jZXNzX21yZWxlYXNlLCAuLi4pYCBkZWZpbmVzIHRoZSBzeXNjYWxsIHZhcmlhbnRzOiBgX19zZV9zeXNfcHJvY2Vzc19tcmVsZWFzZWAsIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCwgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCBhbmQgYHByb2Nlc3NfbXJlbGVhc2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvZiB0aG9zZSB0aGUgc3l6a2FsbGVyIHN5bWJvbCBmaWx0ZXJzIHVzZSwgYmVjYXVzZSBzeXprYWxsZXImIzM5O3MgdXN1YWxseSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgIG9yIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCBvciBwbGFpbiBgcHJvY2Vzc19tcmVsZWFzZWAuIEkmIzM5O2xsIGNyb3NzLXJlZmVyZW5jZSB3aXRoIGhvdyBzeXprYWxsZXIgaGFuZGxlcyBzeXNjYWxscywgb3IgY2hlY2sgd2hhdCBleGlzdHMgaW4gYG9vbV9raWxsLmNgLiBBIHF1aWNrIGdyZXAgb2YgdGhlIGNvZGViYXNlIGZvciBgcHJvY2Vzc19tcmVsZWFzZWAgc2hvdWxkIGNsZWFyIHRoaW5ncyB1cCBhbmQgY29uZmlybSB3aGF0IGV4YWN0bHkgaXMgZXhwb3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvY2Vzc19tcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9vb21fa2lsbC5jPTEyMDA9dm9pZCBwYWdlZmF1bHRfb3V0X29mX21lbW9yeSh2b2lkKVxuLS1cbm1tL29vbV9raWxsLmMtMTIxNC1cbm1tL29vbV9raWxsLmM6MTIxNTpTWVNDQUxMX0RFRklORTIocHJvY2Vzc19tcmVsZWFzZSwgaW50LCBwaWRmZCwgdW5zaWduZWQgaW50LCBmbGFncylcbm1tL29vbV9raWxsLmMtMTIxNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDY4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBKdXN0aWZpY2F0aW9uIGZvciBPT00gUmVhcGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGludmVzdGlnYXRpbmcgaG93IHRoZSBgU1lTQ0FMTF9ERUZJTkVgIG1hY3JvIHdvcmtzIG9uIHg4Nl82NCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoZSBgcHJvY2Vzc19tcmVsZWFzZWAgc3lzdGVtIGNhbGwgaXMgaW1wbGVtZW50ZWQuIEkmIzM5O20gc2VlaW5nIGZ1bmN0aW9ucyBsaWtlIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCBhbmQgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCBhcmUgZ2VuZXJhdGVkLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHN5bWJvbHMgYXJlICphY3R1YWxseSogYmVpbmcgY2hhbmdlZCB3aXRoaW4gYG1tL29vbV9raWxsLmNgLiBJJiMzOTt2ZSBpZGVudGlmaWVkIGEgZmV3IGtleSBvbmVzOiBgemFwX3ZtYV9mb3JfcmVhcGluZ2AsIGBfX29vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza19tbWAsIGBvb21fcmVhcF90YXNrYCwgYW5kIHRob3NlIGBwcm9jZXNzX21yZWxlYXNlYCBzeXN0ZW0gY2FsbCBoYW5kbGVycy4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3c6IGFyZSB0aGVzZSBmdW5jdGlvbnMgKnViaXF1aXRvdXMqPyBJZiB0aGV5JiMzOTtyZSBjYWxsZWQgZXZlcnl3aGVyZSwgdGhleSYjMzk7cmUgbm9pc2UsIGFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcyBpbiBTZWN0aW9uIDQuIFdlIHdhbnQgdG8gaWRlbnRpZnkgdGhlIGNvcmUgY2hhbmdlcywgbm90IGZsb29kIHRoZSBmdXp6ZXIgd2l0aCBpcnJlbGV2YW50IGluZm9ybWF0aW9uLiBTZWN0aW9uIDQgY2xlYXJseSBzdGF0ZXMgdGhhdCAmIzM0O3ViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyYjMzQ7IHNob3VsZCBiZSBhdm9pZGVkLiBXZSBuZWVkICYjMzQ7VEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTJiMzNDsuCgpMZXQmIzM5O3MgbG9vayBhdCBgemFwX3ZtYV9mb3JfcmVhcGluZ2AuIEl0JiMzOTtzIG9ubHkgY2FsbGVkIGJ5IGBfX29vbV9yZWFwX3Rhc2tfbW1gLiBJdCYjMzk7cyBub3QgYSBnZW5lcmljIGZ1bmN0aW9uIGxpa2UgYGtmcmVlYCBvciBgZXhpdF9tbWFwYC4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgZm9yICpyZWFwaW5nKi4gVGhlbiBgX19vb21fcmVhcF90YXNrX21tYCBpcyBjYWxsZWQgb25seSBkdXJpbmcgT09NIHJlYXBpbmcgb3IgYHByb2Nlc3NfbXJlbGVhc2VgLCBhbmQgYG9vbV9yZWFwX3Rhc2tfbW1gIGlzIG9ubHkgY2FsbGVkIGJ5IGBvb21fcmVhcF90YXNrYC4gYG9vbV9yZWFwX3Rhc2tgIGlzIGl0c2VsZiBjYWxsZWQgYnkgdGhlIE9PTSByZWFwZXIga3RocmVhZC4gRmluYWxseSwgd2UgaGF2ZSB0aGUgc3lzdGVtIGNhbGwgZW50cnlwb2ludHMsIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCBhbmQgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCwgd2hpY2ggYXJlIHRoZSBhY2Nlc3MgcG9pbnRzIGZvciB0aGUgYHByb2Nlc3NfbXJlbGVhc2VgIHN5c2NhbGwuCgpTbywgYXJlIHRoZXNlIHViaXF1aXRvdXM/IEFic29sdXRlbHkgbm90ISBUaGVzZSBmdW5jdGlvbnMgYXJlIGhpZ2hseSBzcGVjaWFsaXplZCBmb3IgT09NIHJlYXBpbmcgYW5kIHRoZSBgcHJvY2Vzc19tcmVsZWFzZWAgbWVjaGFuaXNtLiBUaGV5JiMzOTtyZSByYXJlbHkgaW52b2tlZCB1bmxlc3MgdGhlcmUmIzM5O3MgYW4gT09NIHNpdHVhdGlvbiBvciBgcHJvY2Vzc19tcmVsZWFzZWAgaXMgZXhwbGljaXRseSBjYWxsZWQuIFRoaXMgaXMgKnBlcmZlY3QqLiBUaGlzIG1ha2VzIHRoZW0gaWRlYWwgY2FuZGlkYXRlcyBmb3Igd2hhdCB3ZSBjYWxsICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDssIGFzIHRoZXkgYXJlIGhpZ2hseSBzcGVjaWZpYyB0byB0aGUgYmVoYXZpb3Igd2UmIzM5O3JlIHRhcmdldGluZy4KCk5vdywganVzdCB0byBiZSBwcmVjaXNlLCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IHN5bWJvbCBuYW1lcyBnZW5lcmF0ZWQgYnkgdGhlIGBTWVNDQUxMX0RFRklORWAgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvc3lzY2FsbHMuaGAuIFdlIHdhbnQgbm8gYW1iaWd1aXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgU1lTQ0FMTF9ERUZJTkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTIxMT1zdGF0aWMgaW5saW5lIGludCBpc19zeXNjYWxsX3RyYWNlX2V2ZW50KHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICp0cF9ldmVudClcbi0tXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMjE3LSNpZm5kZWYgU1lTQ0FMTF9ERUZJTkUwXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjE4OiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUwKHNuYW1lKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTIxOS1cdFNZU0NBTExfTUVUQURBVEEoXyMjc25hbWUsIDApO1x0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMjI0LVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjIyNTojZGVmaW5lIFNZU0NBTExfREVGSU5FMShuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCgxLCBfIyNuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoyMjY6I2RlZmluZSBTWVNDQUxMX0RFRklORTIobmFtZSwgLi4uKSBTWVNDQUxMX0RFRklORXgoMiwgXyMjbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjI3OiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUzKG5hbWUsIC4uLikgU1lTQ0FMTF9ERUZJTkV4KDMsIF8jI25hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjIyODojZGVmaW5lIFNZU0NBTExfREVGSU5FNChuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCg0LCBfIyNuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoyMjk6I2RlZmluZSBTWVNDQUxMX0RFRklORTUobmFtZSwgLi4uKSBTWVNDQUxMX0RFRklORXgoNSwgXyMjbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjMwOiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkU2KG5hbWUsIC4uLikgU1lTQ0FMTF9ERUZJTkV4KDYsIF8jI25hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTIzMS1cbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoyMzI6I2RlZmluZSBTWVNDQUxMX0RFRklORV9NQVhBUkdTXHQ2XG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMjMzLVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjIzNDojZGVmaW5lIFNZU0NBTExfREVGSU5FeCh4LCBzbmFtZSwgLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0yMzUtXHRTWVNDQUxMX01FVEFEQVRBKHNuYW1lLCB4LCBfX1ZBX0FSR1NfXylcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc1MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFN5c3RlbSBDYWxsIERlZmluaXRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHN5c3RlbSBjYWxscy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzZWUuLi4gdGhlIGRlZmluaXRpdmUgZGVjbGFyYXRpb24gb2Ygc3lzdGVtIGNhbGwgbnVtYmVycyBhbmQgcHJvdG90eXBlcyBzaG91bGQgYmUgaW4gYGluY2x1ZGUvbGludXgvc3lzY2FsbHMuaGAuIE5vdywgSSByZWNhbGwgaGF2aW5nIHRvIHJlZmVyIHRvIHRoaXMgc2VjdGlvbiBvZiBjb2RlIGJlZm9yZS4gVG8gYmUgc3BlY2lmaWMsIG15IGluaXRpYWwgaW5xdWlyeSB3aWxsIHN0YXJ0IHdpdGggbGluZXMgMjM1LTI1NS4gSSYjMzk7bSBob3BpbmcgSSBjYW4gZmluZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLCBvciBhdCBsZWFzdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24sIGluIHRoYXQgc2VnbWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zeXNjYWxscy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzA6XHQjZGVmaW5lIFNZU0NBTExfREVGSU5FNihuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCg2LCBfIyNuYW1lLCBfX1ZBX0FSR1NfXylcbiAyMzE6XHRcbiAyMzI6XHQjZGVmaW5lIFNZU0NBTExfREVGSU5FX01BWEFSR1NcdDZcbiAyMzM6XHRcbiAyMzQ6XHQjZGVmaW5lIFNZU0NBTExfREVGSU5FeCh4LCBzbmFtZSwgLi4uKVx0XHRcdFx0XFxcbiAyMzU6XHRcdFNZU0NBTExfTUVUQURBVEEoc25hbWUsIHgsIF9fVkFfQVJHU19fKVx0XHRcdFxcXG4gMjM2Olx0XHRfX1NZU0NBTExfREVGSU5FeCh4LCBzbmFtZSwgX19WQV9BUkdTX18pXG4gMjM3Olx0XG4gMjM4Olx0I2RlZmluZSBfX1BST1RFQ1QoLi4uKSBhc21saW5rYWdlX3Byb3RlY3QoX19WQV9BUkdTX18pXG4gMjM5Olx0XG4gMjQwOlx0LypcbiAyNDE6XHQgKiBUaGUgYXNtbGlua2FnZSBzdHViIGlzIGFsaWFzZWQgdG8gYSBmdW5jdGlvbiBuYW1lZCBfX3NlX3N5c18qKCkgd2hpY2hcbiAyNDI6XHQgKiBzaWduLWV4dGVuZHMgMzItYml0IGludHMgdG8gbG9uZ3Mgd2hlbmV2ZXIgbmVlZGVkLiBUaGUgYWN0dWFsIHdvcmsgaXNcbiAyNDM6XHQgKiBkb25lIHdpdGhpbiBfX2RvX3N5c18qKCkuXG4gMjQ0Olx0ICovXG4gMjQ1Olx0I2lmbmRlZiBfX1NZU0NBTExfREVGSU5FeFxuIDI0NjpcdCNkZWZpbmUgX19TWVNDQUxMX0RFRklORXgoeCwgbmFtZSwgLi4uKVx0XHRcdFx0XHRcXFxuIDI0NzpcdFx0X19kaWFnX3B1c2goKTtcdFx0XHRcdFx0XHRcdFxcXG4gMjQ4Olx0XHRfX2RpYWdfaWdub3JlKEdDQywgOCwgXCYjMzQ7LVdhdHRyaWJ1dGUtYWxpYXNcJiMzNDssXHRcdFx0XFxcbiAyNDk6XHRcdFx0ICAgICAgXCYjMzQ7VHlwZSBhbGlhc2luZyBpcyB1c2VkIHRvIHNhbml0aXplIHN5c2NhbGwgYXJndW1lbnRzXCYjMzQ7KTtcXFxuIDI1MDpcdFx0X19kaWFnX2lnbm9yZShjbGFuZywgMjMsIFwmIzM0Oy1XdW5rbm93bi13YXJuaW5nLW9wdGlvblwmIzM0OyxcdFx0XFxcbiAyNTE6XHRcdFx0ICAgICAgXCYjMzQ7QXZvaWQgYnJlYWtpbmcgdmVyc2lvbnMgd2l0aG91dCAtV2F0dHJpYnV0ZS1hbGlhc1wmIzM0Oyk7XFxcbiAyNTI6XHRcdF9fZGlhZ19pZ25vcmUoY2xhbmcsIDIzLCBcJiMzNDstV2F0dHJpYnV0ZS1hbGlhc1wmIzM0OyxcdFx0XHRcXFxuIDI1MzpcdFx0XHQgICAgICBcJiMzNDtUeXBlIGFsaWFzaW5nIGlzIHVzZWQgdG8gc2FuaXRpemUgc3lzY2FsbCBhcmd1bWVudHNcJiMzNDspO1xcXG4gMjU0Olx0XHRhc21saW5rYWdlIGxvbmcgc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSlcdFxcXG4gMjU1Olx0XHRcdF9fYXR0cmlidXRlX18oKGFsaWFzKF9fc3RyaW5naWZ5KF9fc2Vfc3lzIyNuYW1lKSkpKTtcdFxcXG4gMjU2Olx0XHRBTExPV19FUlJPUl9JTkpFQ1RJT04oc3lzIyNuYW1lLCBFUlJOTyk7XHRcdFx0XFxcbiAyNTc6XHRcdHN0YXRpYyBpbmxpbmUgbG9uZyBfX2RvX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVDTCxfX1ZBX0FSR1NfXykpO1xcXG4gMjU4Olx0XHRhc21saW5rYWdlIGxvbmcgX19zZV9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0xPTkcsX19WQV9BUkdTX18pKTtcdFxcXG4gMjU5Olx0XHRhc21saW5rYWdlIGxvbmcgX19zZV9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0xPTkcsX19WQV9BUkdTX18pKVx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSB4ODZfNjQgU3lzdGVtIENhbGwgV3JhcHBlcioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIGluIG9uIHRoZSB4ODZfNjQgYXJjaGl0ZWN0dXJlIG5vdy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc3lzdGVtIGNhbGxzIGFyZSBoYW5kbGVkIGF0IHRoZSBhc3NlbWJseSBsZXZlbCwgcGFydGljdWxhcmx5IGhvdyB0aGV5JiMzOTtyZSB3cmFwcGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBsb2NhdGlvbiBmb3IgdGhlIGtleSBkZWZpbml0aW9ucyBhbmQgbWFjcm9zIHJlbGF0ZWQgdG8gc3lzdGVtIGNhbGwgaW52b2NhdGlvbiBhbmQgbWFuYWdlbWVudCBvbiB0aGlzIHBsYXRmb3JtLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzbyBsZXQmIzM5O3MgZ2V0IHN0YXJ0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaW4gdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19feDY0X3N5c18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM9Mzc9c3RhdGljIG5vaW5saW5lIGxvbmcgeDY0X3N5c19jYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jLTQwLVx0I2luY2x1ZGUgXHUwMDNjYXNtL3N5c2NhbGxzXzY0LmhcdTAwM2VcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYzo0MTpcdGRlZmF1bHQ6IHJldHVybiBfX3g2NF9zeXNfbmlfc3lzY2FsbChyZWdzKTtcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYy00Mi1cdH1cbi0tXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM9NDU9c3RhdGljIG5vaW5saW5lIGxvbmcgeDMyX3N5c19jYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jLTQ5LVx0I2luY2x1ZGUgXHUwMDNjYXNtL3N5c2NhbGxzX3gzMi5oXHUwMDNlXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM6NTA6XHRkZWZhdWx0OiByZXR1cm4gX194NjRfc3lzX25pX3N5c2NhbGwocmVncyk7XG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmMtNTEtXHR9XG4tLVxuYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwtNy0jXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibDo4OiMgVGhlIF9feDY0X3N5c18qKCkgc3R1YnMgYXJlIGNyZWF0ZWQgb24tdGhlLWZseSBmb3Igc3lzXyooKSBzeXN0ZW0gY2FsbHNcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTktI1xuLS1cbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmM9MTE5PXN0YXRpYyBib29sIF9fZW11bGF0ZV92c3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLS1cbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjE3LVx0XHQvKiB0aGlzIGRlY29kZXMgcmVncy1cdTAwM2VkaSBhbmQgcmVncy1cdTAwM2VzaSBvbiBpdHMgb3duICovXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIxODpcdFx0cmV0ID0gX194NjRfc3lzX2dldHRpbWVvZmRheShyZWdzKTtcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjE5LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTIyMi1cdFx0LyogdGhpcyBkZWNvZGVzIHJlZ3MtXHUwMDNlZGkgb24gaXRzIG93biAqL1xuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYzoyMjM6XHRcdHJldCA9IF9feDY0X3N5c190aW1lKHJlZ3MpO1xuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yMjQtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjMwLVx0XHQvKiB0aGlzIGRlY29kZXMgcmVncy1cdTAwM2VkaSwgcmVncy1cdTAwM2VzaSBhbmQgcmVncy1cdTAwM2VkeCBvbiBpdHMgb3duICovXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIzMTpcdFx0cmV0ID0gX194NjRfc3lzX2dldGNwdShyZWdzKTtcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjMyLVx0XHRyZWdzLVx1MDAzZWR4ID0gb3JpZ19keDtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xMC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjExOmV4dGVybiBsb25nIF9feDY0X3N5c19uaV9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTEyLWV4dGVybiBsb25nIF9faWEzMl9zeXNfbmlfc3lzY2FsbChjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMTYtICogc3RydWN0IHB0X3JlZ3MgKnJlZ3MgYXMgdGhlIG9ubHkgYXJndW1lbnQgb2YgdGhlIHN5c2NhbGwgc3R1YihzKSBuYW1lZCBhczpcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjE3OiAqIF9feDY0X3N5c18qKCkgICAgICAgICAtIDY0LWJpdCBuYXRpdmUgc3lzY2FsbFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMTgtICogX19pYTMyX3N5c18qKCkgICAgICAgIC0gMzItYml0IG5hdGl2ZSBzeXNjYWxsIG9yIGNvbW1vbiBjb21wYXQgc3lzY2FsbFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTMzLSAqXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaDozNDogKiBcdTAwM2NfX3g2NF9zeXNfcmVjdlx1MDAzZTpcdFx0XHUwMDNjLS0gc3lzY2FsbCB3aXRoIDQgcGFyYW1ldGVyc1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMzUtICpcdGNhbGxxXHRcdTAwM2NfX2ZlbnRyeV9fXHUwMDNlXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMjU5LSAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYwOmxvbmcgX194NjRfc3lzX2dldGNwdShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaDoyNjE6bG9uZyBfX3g2NF9zeXNfZ2V0dGltZW9mZGF5KGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjI2Mjpsb25nIF9feDY0X3N5c190aW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTI2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNjYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG1yZWxlYXNlYCBTeXN0ZW0gQ2FsbCBXcmFwcGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Ugc3lzdGVtIGNhbGxzOiBgX19kb19zeXNfcHJvY2Vzc19tcmVsZWFzZWAgYW5kIGBfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZWAuIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBhcmUgaW1wbGVtZW50ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGFyY2hpdGVjdHVyZS4gVGltZSB0byBjaGVjayB0aGUgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYCBoZWFkZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGxpbmVzIDE4MCB0aHJvdWdoIDIyMC4gSSBhbnRpY2lwYXRlIHRoaXMgc2VjdGlvbiB3aWxsIGRlZmluZSB0aGUgd3JhcHBlcnMgb3IgdGhlIGxvdy1sZXZlbCBnbHVlIHRoYXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgYWN0dWFsIGBtcmVsZWFzZWAgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBhcmd1bWVudHMgYXJlIHBhc3NlZCwgYW55IG5lY2Vzc2FyeSBjb250ZXh0IHN3aXRjaGluZywgb3IgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkZXRhaWxzIHJlbGV2YW50IHRvIHRoZSBgbXJlbGVhc2VgIGNhbGwuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBiYXNlIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGtlcm5lbCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcbiAxODE6XHQjZWxzZSAvKiBDT05GSUdfWDg2X1gzMl9BQkkgKi9cbiAxODI6XHQjZGVmaW5lIF9fWDMyX0NPTVBBVF9TWVNfU1RVQjAobmFtZSlcbiAxODM6XHQjZGVmaW5lIF9fWDMyX0NPTVBBVF9TWVNfU1RVQngoeCwgbmFtZSwgLi4uKVxuIDE4NDpcdCNkZWZpbmUgX19YMzJfQ09NUEFUX0NPTkRfU1lTQ0FMTChuYW1lKVxuIDE4NTpcdCNlbmRpZiAvKiBDT05GSUdfWDg2X1gzMl9BQkkgKi9cbiAxODY6XHRcbiAxODc6XHRcbiAxODg6XHQjaWZkZWYgQ09ORklHX0NPTVBBVFxuIDE4OTpcdC8qXG4gMTkwOlx0ICogQ29tcGF0IG1lYW5zIElBMzJfRU1VTEFUSU9OIGFuZC9vciBYODZfWDMyLiBBcyB0aGV5IHVzZSBhIGRpZmZlcmVudFxuIDE5MTpcdCAqIG1hcHBpbmcgb2YgcmVnaXN0ZXJzIHRvIHBhcmFtZXRlcnMsIHdlIG5lZWQgdG8gZ2VuZXJhdGUgc3R1YnMgZm9yIGVhY2hcbiAxOTI6XHQgKiBvZiB0aGVtLlxuIDE5MzpcdCAqL1xuIDE5NDpcdCNkZWZpbmUgQ09NUEFUX1NZU0NBTExfREVGSU5FMChuYW1lKVx0XHRcdFx0XHRcXFxuIDE5NTpcdFx0c3RhdGljIGxvbmdcdFx0XHRcdFx0XHRcdFxcXG4gMTk2Olx0XHRfX2RvX2NvbXBhdF9zeXNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpfX3VudXNlZCk7XHRcdFxcXG4gMTk3Olx0XHRfX0lBMzJfQ09NUEFUX1NZU19TVFVCMChuYW1lKVx0XHRcdFx0XHRcXFxuIDE5ODpcdFx0X19YMzJfQ09NUEFUX1NZU19TVFVCMChuYW1lKVx0XHRcdFx0XHRcXFxuIDE5OTpcdFx0c3RhdGljIGxvbmdcdFx0XHRcdFx0XHRcdFxcXG4gMjAwOlx0XHRfX2RvX2NvbXBhdF9zeXNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpfX3VudXNlZClcbiAyMDE6XHRcbiAyMDI6XHQjZGVmaW5lIENPTVBBVF9TWVNDQUxMX0RFRklORXgoeCwgbmFtZSwgLi4uKVx0XHRcdFx0XHRcXFxuIDIwMzpcdFx0c3RhdGljIGxvbmcgX19zZV9jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSk7XHRcXFxuIDIwNDpcdFx0c3RhdGljIGlubGluZSBsb25nIF9fZG9fY29tcGF0X3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVDTCxfX1ZBX0FSR1NfXykpO1xcXG4gMjA1Olx0XHRfX0lBMzJfQ09NUEFUX1NZU19TVFVCeCh4LCBuYW1lLCBfX1ZBX0FSR1NfXylcdFx0XHRcdFxcXG4gMjA2Olx0XHRfX1gzMl9DT01QQVRfU1lTX1NUVUJ4KHgsIG5hbWUsIF9fVkFfQVJHU19fKVx0XHRcdFx0XFxcbiAyMDc6XHRcdHN0YXRpYyBsb25nIF9fc2VfY29tcGF0X3N5cyMjbmFtZShfX01BUCh4LF9fU0NfTE9ORyxfX1ZBX0FSR1NfXykpXHRcXFxuIDIwODpcdFx0e1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gMjA5Olx0XHRcdHJldHVybiBfX2RvX2NvbXBhdF9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0RFTE9VU0UsX19WQV9BUkdTX18pKTtcXFxuIDIxMDpcdFx0fVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gMjExOlx0XHRzdGF0aWMgaW5saW5lIGxvbmcgX19kb19jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSlcbiAyMTI6XHRcbiAyMTM6XHQvKlxuIDIxNDpcdCAqIEFzIHNvbWUgY29tcGF0IHN5c2NhbGxzIG1heSBub3QgYmUgaW1wbGVtZW50ZWQsIHdlIG5lZWQgdG8gZXhwYW5kXG4gMjE1Olx0ICogQ09ORF9TWVNDQUxMX0NPTVBBVCBpbiBrZXJuZWwvc3lzX25pLmMgdG8gY292ZXIgdGhpcyBjYXNlIGFzIHdlbGwuXG4gMjE2Olx0ICovXG4gMjE3Olx0I2RlZmluZSBDT05EX1NZU0NBTExfQ09NUEFUKG5hbWUpIFx0XHRcdFx0XHRcXFxuIDIxODpcdFx0X19JQTMyX0NPTVBBVF9DT05EX1NZU0NBTEwobmFtZSlcdFx0XHRcdFxcXG4gMjE5Olx0XHRfX1gzMl9DT01QQVRfQ09ORF9TWVNDQUxMKG5hbWUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTkyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyB4ODYgTmF0aXZlIFN5c2NhbGwgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBuYXRpdmUgc3lzY2FsbHMgYXJlIGhhbmRsZWQgb24geDg2LiBMZXQmIzM5O3MgZGlnIGludG8gdGhpczsgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGNhbGwgd3JhcHBlcnMgd29yay4gUmlnaHQsIGxldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaGAuIEkgcmVjYWxsIHRoYXQgdGhlIGNyaXRpY2FsIGRlZmluaXRpb25zIGFyZSB0eXBpY2FsbHkgaW4gdGhhdCBoZWFkZXIgZmlsZS4gTm93LCBhY2NvcmRpbmcgdG8gbXkgbWVudGFsIG1hcCwgbGluZXMgMjIwIHRocm91Z2ggMjU4IHNob3VsZCBiZSB3aGVyZSB0aGUga2V5IHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGZvdW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZCB3aXRoaW4gdGhhdCByYW5nZS4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBhbmQgcmVtZW1iZXIgd2hhdCBJIHdhcyBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0XG4gMjIxOlx0I2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi9cbiAyMjI6XHRcbiAyMjM6XHQjZGVmaW5lIF9fU1lTQ0FMTF9ERUZJTkV4KHgsIG5hbWUsIC4uLilcdFx0XHRcdFx0XFxcbiAyMjQ6XHRcdHN0YXRpYyBsb25nIF9fc2Vfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSk7XHRcXFxuIDIyNTpcdFx0c3RhdGljIGlubGluZSBsb25nIF9fZG9fc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSk7XFxcbiAyMjY6XHRcdF9fWDY0X1NZU19TVFVCeCh4LCBuYW1lLCBfX1ZBX0FSR1NfXylcdFx0XHRcdFxcXG4gMjI3Olx0XHRfX0lBMzJfU1lTX1NUVUJ4KHgsIG5hbWUsIF9fVkFfQVJHU19fKVx0XHRcdFx0XFxcbiAyMjg6XHRcdHN0YXRpYyBsb25nIF9fc2Vfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSlcdFxcXG4gMjI5Olx0XHR7XHRcdFx0XHRcdFx0XHRcdFxcXG4gMjMwOlx0XHRcdGxvbmcgcmV0ID0gX19kb19zeXMjI25hbWUoX19NQVAoeCxfX1NDX0NBU1QsX19WQV9BUkdTX18pKTtcXFxuIDIzMTpcdFx0XHRfX01BUCh4LF9fU0NfVEVTVCxfX1ZBX0FSR1NfXyk7XHRcdFx0XHRcXFxuIDIzMjpcdFx0XHRfX1BST1RFQ1QoeCwgcmV0LF9fTUFQKHgsX19TQ19BUkdTLF9fVkFfQVJHU19fKSk7XHRcXFxuIDIzMzpcdFx0XHRyZXR1cm4gcmV0O1x0XHRcdFx0XHRcdFxcXG4gMjM0Olx0XHR9XHRcdFx0XHRcdFx0XHRcdFxcXG4gMjM1Olx0XHRzdGF0aWMgaW5saW5lIGxvbmcgX19kb19zeXMjI25hbWUoX19NQVAoeCxfX1NDX0RFQ0wsX19WQV9BUkdTX18pKVxuIDIzNjpcdFxuIDIzNzpcdC8qXG4gMjM4Olx0ICogQXMgdGhlIGdlbmVyaWMgU1lTQ0FMTF9ERUZJTkUwKCkgbWFjcm8gZG9lcyBub3QgZGVjb2RlIGFueSBwYXJhbWV0ZXJzIGZvclxuIDIzOTpcdCAqIG9idmlvdXMgcmVhc29ucywgYW5kIHBhc3Npbmcgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgdG8gaXQgaW4gJXJkaSBkb2VzIG5vdFxuIDI0MDpcdCAqIGh1cnQsIHdlIG9ubHkgbmVlZCB0byByZS1kZWZpbmUgaXQgaGVyZSB0byBrZWVwIHRoZSBuYW1pbmcgY29uZ3J1ZW50IHRvXG4gMjQxOlx0ICogU1lTQ0FMTF9ERUZJTkV4KCkgLS0gd2hpY2ggaXMgZXNzZW50aWFsIGZvciB0aGUgQ09ORF9TWVNDQUxMKCkgbWFjcm9cbiAyNDI6XHQgKiB0byB3b3JrIGNvcnJlY3RseS5cbiAyNDM6XHQgKi9cbiAyNDQ6XHQjZGVmaW5lIFNZU0NBTExfREVGSU5FMChzbmFtZSlcdFx0XHRcdFx0XHRcXFxuIDI0NTpcdFx0U1lTQ0FMTF9NRVRBREFUQShfIyNzbmFtZSwgMCk7XHRcdFx0XHRcdFxcXG4gMjQ2Olx0XHRzdGF0aWMgbG9uZyBfX2RvX3N5c18jI3NuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpfX3VudXNlZCk7XHRcXFxuIDI0NzpcdFx0X19YNjRfU1lTX1NUVUIwKHNuYW1lKVx0XHRcdFx0XHRcdFxcXG4gMjQ4Olx0XHRfX0lBMzJfU1lTX1NUVUIwKHNuYW1lKVx0XHRcdFx0XHRcdFxcXG4gMjQ5Olx0XHRzdGF0aWMgbG9uZyBfX2RvX3N5c18jI3NuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpfX3VudXNlZClcbiAyNTA6XHRcbiAyNTE6XHQjZGVmaW5lIENPTkRfU1lTQ0FMTChuYW1lKVx0XHRcdFx0XHRcdFxcXG4gMjUyOlx0XHRfX1g2NF9DT05EX1NZU0NBTEwobmFtZSlcdFx0XHRcdFx0XFxcbiAyNTM6XHRcdF9fSUEzMl9DT05EX1NZU0NBTEwobmFtZSlcbiAyNTQ6XHRcbiAyNTU6XHRcbiAyNTY6XHQvKlxuIDI1NzpcdCAqIEZvciBWU1lTQ0FMTFMsIHdlIG5lZWQgdG8gZGVjbGFyZSB0aGVzZSB0aHJlZSBzeXNjYWxscyB3aXRoIHRoZSBuZXdcbiAyNTg6XHQgKiBwdF9yZWdzLWJhc2VkIGNhbGxpbmcgY29udmVudGlvbiBmb3IgaW4ta2VybmVsIHVzZS5cbiAyNTk6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyMzAKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipTeXN0ZW0gQ2FsbCBTdHViIE9ic2VydmF0aW9ucyoqCgpPa2F5LCBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlc2Ugc3lzdGVtIGNhbGwgc3R1YnMgYW5kIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpcyBqdW1waW5nIG91dCBhdCBtZS4gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgYF9fZG9fc3lzIyNuYW1lYCBtYWNybyBpcyBkZWZpbmVkIGFzIGBzdGF0aWMgaW5saW5lYCwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdCBmb3IgYSBmYXN0IHBhdGggb3B0aW1pemF0aW9uLiBCdXQgdGhlbiBJJiMzOTttIG5vdGljaW5nIHRoYXQgdGhlIGBfX3NlX3N5cyMjbmFtZWAgYW5kIGBfX3g2NF9zeXNfIyNuYW1lYCB2ZXJzaW9ucywgd2hpY2ggZ2V0IGV4cGFuZGVkIHZpYSBgX19YNjRfU1lTX1NUVUJ4YCwgYXJlICpmdW5jdGlvbnMqIOKAkyBhY3R1YWwsIGNhbGxhYmxlIGZ1bmN0aW9ucy4gVGhhdCBjb250cmFzdCBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhlIGRlc2lnbiBjaG9pY2Ugd2FzIG1hZGUgdG8gaGFuZGxlIHRoZW0gZGlmZmVyZW50bHkuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19YNjRfU1lTX1NUVUJ4YCB0byBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCwgSSYjMzk7bGwgZmluZCBpdCBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhgLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgdGhhdCBtYWNybyBpcyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIF9fWDY0X1NZU19TVFVCeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oPTEyPWV4dGVybiBsb25nIF9faWEzMl9zeXNfbmlfc3lzY2FsbChjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMTA5LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MTEwOiNkZWZpbmUgX19YNjRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcdFx0XHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTExMS1cdF9fU1lTX1NUVUJ4KHg2NCwgc3lzIyNuYW1lLFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTExOC0jZGVmaW5lIF9fWDY0X1NZU19TVFVCMChuYW1lKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MTE5OiNkZWZpbmUgX19YNjRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTEyMC0jZGVmaW5lIF9fWDY0X0NPTkRfU1lTQ0FMTChuYW1lKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg1NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBhbmQgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMgb2YgYHByb2Nlc3NfbXJlbGVhc2VgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiAgTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2VudCBsaWtlIHRoaXM6IGBfX1NZU19TVFVCeGAgY3JlYXRlcyBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgLiBJIGNvbmZpcm1lZCB0aGF0LiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgc3lzdGVtIGNhbGwgaXRzZWxmLCBgcHJvY2Vzc19tcmVsZWFzZWAuIFRoZW4gSSBuZWVkZWQgdG8gdmVyaWZ5IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gSSBrbm93IGBTWVNDQUxMX0RFRklORTJgIHVsdGltYXRlbHkgZGVmaW5lcyBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgLiBJIGFsc28gcmVtZW1iZXJlZCBgX19zZV9zeXNfcHJvY2Vzc19tcmVsZWFzZWAgZ2V0cyBkZWZpbmVkIGFzIHdlbGwuCgpJIGZvY3VzZWQgb24gYF9fb29tX3JlYXBfdGFza19tbWAsIGEgc3RhdGljIGZ1bmN0aW9uIGluIGBtbS9vb21fa2lsbC5jYC4gQmVjYXVzZSBpdCYjMzk7cyBzdGF0aWMgYW5kIGhhcyBtdWx0aXBsZSBjYWxsIHNpdGVzIChgb29tX3JlYXBfdGFza19tbWAgYW5kIGBwcm9jZXNzX21yZWxlYXNlYCksIGl0IGNvdWxkIGJlIGlubGluZWQsIGJ1dCBnaXZlbiBpdHMgc2l6ZSBhbmQgbXVsdGlwbGUgdXNlcywgbGlrZWx5IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBFdmVuIGlmIGl0IGlzLCB0aGUgc3RhdGljIGZ1bmN0aW9uIHdpbGwgc3RpbGwgYmUgYSBzeW1ib2wgaWYgbm90IG9wdGltaXplZCBhd2F5LCBvciBpbiBhbnkgY2FzZSwgYm90aCBjYWxsZXJzIHBsdXMgdGhlIGZ1bmN0aW9uIGJvZHkgd2lsbCBiZSBwcm92aWRlZC4KClRoZW4sIEkgcmV2aWV3ZWQgdGhlIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBmb3IgYSBmdWxsZXIgcGljdHVyZTogYHphcF92bWFfZm9yX3JlYXBpbmdgLCBgX19vb21fcmVhcF90YXNrX21tYCwgYG9vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza2AsIGFuZCBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgLiBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSBpZiB0aGV5JiMzOTtyZSBjYWxsZWQgdWJpcXVpdG91c2x5LiBUdXJucyBvdXQsIG5vbmUgb2YgdGhlc2UgYXJlIHVuaXZlcnNhbGx5IGNhbGxlZC4gRWFjaCBpcyB0aWVkIHRvIHRoZSBvb20gcmVhcGVyIGZ1bmN0aW9uYWxpdHkgb3IgdGhlIGBwcm9jZXNzX21yZWxlYXNlYCBzeXN0ZW0gY2FsbC4KCkkgdGhlbiBjb25maXJtZWQgdGhhdCBzeXprYWxsZXIgY2FuIGluZGVlZCBjYWxsIGBwcm9jZXNzX21yZWxlYXNlYC4gSSBrbm93IGl0JiMzOTtzIGEgc3VwcG9ydGVkIHN5c2NhbGwgYW5kIHRoYXQgaXQgZ2VuZXJhdGVzIHRoZSBjb3JyZWN0IGNhbGwuIEkgdGhvdWdodCBhYm91dCB0aGUgbGlrZWx5IHNjZW5hcmlvIHdoZW4gYHByb2Nlc3NfbXJlbGVhc2VgIGlzIGludm9rZWQgY29uY3VycmVudGx5IHdpdGggYSB3cml0ZXIgY29udGVuZGluZyBvbiBgbW1hcF9sb2NrYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGl0IGV4ZXJjaXNlcyB0aGUgbmV3IGNvZGUgcGF0aHMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guIEkgcmVtZW1iZXJlZCB0aGUgY29kZSB1c2VzIGBtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKWAsIGRyb3BzIGBtbWFwX3JlYWRfdW5sb2NrKG1tKWAsIHJldHVybnMgYC1FQUdBSU5gLCBhbmQgcmV0cmllcy4gSSYjMzk7bSBhbHNvIGNvbnNjaW91cyBvZiB0aGUgMUdCIGNodW5raW5nIGxvb3AgdGhhdCBraWNrcyBpbiBkdXJpbmcgVk1BIHJlYXBpbmcuCgpDb25maWctd2lzZSwgbXkgcHJpbWFyeSBjb25jZXJuIGlzIGBDT05GSUdfTU1VYC4gQ2hlY2tpbmcgdGhlIHNvdXJjZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYENPTkZJR19NTVVgIGlzIHRoZSBnYXRla2VlcGVyIGZvciB0aGUgb29tIHJlYXBlci4gV2l0aG91dCBpdCwgYHByb2Nlc3NfbXJlbGVhc2VgIHJldHVybnMgYC1FTk9TWVNgLCBhbmQgdGhlIHJlYXBlciBkb2VzbiYjMzk7dCBleGlzdC4gVGhlIG90aGVyIGZ1bmN0aW9uIHRoYXQgaXMgcGFydCBvZiB0aGlzIGlzIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYC4gSSB2ZXJpZmllZCB0aGF0IGB6YXBfdm1hX2Zvcl9yZWFwaW5nYCBpcyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aGluIHRoZSBgbW0vbWVtb3J5LmNgIGZpbGUsIHdoaWNoIGl0c2VsZiBpcyBvbmx5IGJ1aWx0IHdoZW4gYENPTkZJR19NTVU9eWAuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O01NVSYjMzQ7XWAuIEFuZCBhZnRlciBhIGZpbmFsIGNoZWNrIG9mIGFsbCBLY29uZmlnIGZpbGVzLCBJIGNvbmZpcm0gdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIGhpZGluZyBvciBkaXNhYmxpbmcgYHByb2Nlc3NfbXJlbGVhc2VgIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jZXNzX21yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7S2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODQ3CgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDUzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmlhZ2UgQW5hbHlzaXM6IE9PTS9gcHJvY2Vzc19tcmVsZWFzZWAqKgoKT2theSwgc28gdGhlcmUgYXJlIG5vIGV4cGxpY2l0IGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIGhlcmU7IGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBidWlsdCBpZiBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgYSBwcmV0dHkgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGUgdHJpYWdlIGluc3RydWN0aW9ucyBjb3JyZWN0bHkuIEkgbmVlZCB0byBuYWlsIGRvd246IGBXb3J0aEZ1enppbmdgLCBgUmVhc29uaW5nYCwgYEVuYWJsZUNvbmZpZ3NgLCBhbmQgYEZvY3VzU3ltYm9sc2AuCgpUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHdoZXJlIEkgbmVlZCB0byBmb2N1cy4gTGV0JiMzOTtzIGxpc3QgdGhvc2Ugb3V0LiBJIHNlZSBgemFwX3ZtYV9mb3JfcmVhcGluZ2AsIGBfX29vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza19tbWAsIGBvb21fcmVhcF90YXNrYCwgYW5kIGBfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZWAuIFdhaXQsIGhhbmcgb24uLi4gaXMgaXQgYF9fZG9fc3lzX3Byb2Nlc3NfbXJlbGVhc2VgIG9yIGBfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZWA/IEFoLCByaWdodCwgb24geDg2XzY0LCBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgIGlzIHRoZSBhY3R1YWwgZW50cnkgcG9pbnQsIHdoaWNoIGlzIHdoYXQgSSYjMzk7bSB0YXJnZXRpbmcgZ2l2ZW4gdGhlIGBhbWQ2NGAgdGFyZ2V0LiBXaGF0IGFib3V0IG90aGVyIGFyY2hpdGVjdHVyZXMgbGlrZSBhcm02ND8gV2VsbCwgSSBkb24mIzM5O3QgY2FyZSBhdCB0aGUgbW9tZW50IGFzIHRoZSBwcm9tcHQgc3BlY2lmaWVzIGBhbWQ2NGAuIE9uIGFtZDY0LCBJIGtub3cgdGhhdCBib3RoIGBfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZWAgYW5kIGBfX3NlX3N5c19wcm9jZXNzX21yZWxlYXNlYCBhcmUgZ2VuZXJhdGVkLiBTbywgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCBpdCBpcy4gTm93LCBjYW4gSSBpbmNsdWRlIGl0PyBZZXMuIFdoYXQgYWJvdXQgYWxsIHRoZSBvdGhlcnM/IGB6YXBfdm1hX2Zvcl9yZWFwaW5nYCwgYF9fb29tX3JlYXBfdGFza19tbWAsIGBvb21fcmVhcF90YXNrX21tYCwgYW5kIGBvb21fcmVhcF90YXNrYCwgYWxsIG9mIHRob3NlIGFyZSB2YWxpZCBjaG9pY2VzIGFzIHdlbGwuIE9rYXksIGdvb2QuIEkmIzM5O20gY29uZmlkZW50IGluIHRoZXNlIGNob2ljZXMuCgpMZXQmIzM5O3MgZG8gYSBmaW5hbCBjaGVjayBhZ2FpbnN0IHRoZSBpbnN0cnVjdGlvbnMuIFJlYWNoYWJpbGl0eTogdGhpcyBhcmVhIGlzIGNvcmUgTU0sIHNvIHJlYWNoYWJsZSB2aWEgMSkgdGhlIGBwcm9jZXNzX21yZWxlYXNlYCBzeXNjYWxsLCBhbmQgMikgdGhlIE9PTSBraWxsZXIgcmVhcGVyIHRocmVhZC4gQm90aCBhcmUgdHJpdmlhbCB0byByZWFjaCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIENoZWNrLiBgV29ydGhGdXp6aW5nYDogRGVmaW5pdGVseSB0cnVlLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgdGhlIGBGb2N1c1N5bWJvbHNgOiBgemFwX3ZtYV9mb3JfcmVhcGluZ2AsIGBfX29vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza19tbWAsIGBvb21fcmVhcF90YXNrYCwgYW5kIGBfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZWAuIE5vbmUgb2YgdGhlc2UgYXJlIHViaXF1aXRvdXM7IHRoZXkmIzM5O3JlIHZlcnkgc3BlY2lmaWMgdG8gdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgdG8gdGhlIE9PTSByZWFwaW5nIGFuZCBgcHJvY2Vzc19tcmVsZWFzZWAgbWVjaGFuaXNtcy4gQmluZ28uCgpPa2F5LCBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNTVUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6YXBfdm1hX2Zvcl9yZWFwaW5nJiMzNDssCiAgICAmIzM0O19fb29tX3JlYXBfdGFza19tbSYjMzQ7LAogICAgJiMzNDtvb21fcmVhcF90YXNrX21tJiMzNDssCiAgICAmIzM0O29vbV9yZWFwX3Rhc2smIzM0OywKICAgICYjMzQ7X194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBWTUEgdW5tYXBwaW5nIGxvZ2ljIGZvciBPT00gcmVhcGluZyBhbmQgdGhlIHByb2Nlc3NfbXJlbGVhc2Ugc3lzY2FsbCwgc3BsaXR0aW5nIFZNQSB6YXBwaW5nIGludG8gMUdCIGNodW5rcyBhbmQgeWllbGRpbmcgbW1hcF9sb2NrIHdoZW4gY29udGVuZGVkLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29udHJvbCBmbG93IGFuZCBsb2NraW5nIHNlbWFudGljcyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NrIGludmVyc2lvbnMsIG9yIHN0YXRlIGluY29uc2lzdGVuY3kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3phcF92bWFfZm9yX3JlYXBpbmcmIzM0OywKICAgICYjMzQ7X19vb21fcmVhcF90YXNrX21tJiMzNDssCiAgICAmIzM0O29vbV9yZWFwX3Rhc2tfbW0mIzM0OywKICAgICYjMzQ7b29tX3JlYXBfdGFzayYjMzQ7LAogICAgJiMzNDtfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFZNQSB1bm1hcHBpbmcgbG9naWMgZm9yIE9PTSByZWFwaW5nIGFuZCB0aGUgcHJvY2Vzc19tcmVsZWFzZSBzeXNjYWxsLCBzcGxpdHRpbmcgVk1BIHphcHBpbmcgaW50byAxR0IgY2h1bmtzIGFuZCB5aWVsZGluZyBtbWFwX2xvY2sgd2hlbiBjb250ZW5kZWQuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgc2VtYW50aWNzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2sgaW52ZXJzaW9ucywgb3Igc3RhdGUgaW5jb25zaXN0ZW5jeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00gcmVhcGVyIGxvZ2ljIGluIG1tL29vbV9raWxsLmMgYW5kIG1tL21lbW9yeS5jIHNvIHRoYXQgVk1BcyBhcmUgemFwcGVkIGluIDFHQiBjaHVua3MsIGFsbG93aW5nIG1tYXBfbG9jayB0byBiZSB5aWVsZGVkIHRvIHdhaXRpbmcgd3JpdGVycyB1cG9uIGNvbnRlbnRpb24uIEl0IGFsc28gdXBkYXRlcyBlcnJvciBoYW5kbGluZyBhY3Jvc3MgemFwX3ZtYV9mb3JfcmVhcGluZywgX19vb21fcmVhcF90YXNrX21tLCBvb21fcmVhcF90YXNrLCBhbmQgdGhlIHByb2Nlc3NfbXJlbGVhc2Ugc3lzY2FsbC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChhZGRyLCBlbmQsIHJldCwgYXR0ZW1wdHMpIGFyZSBzY2FsYXIgdHlwZXMgYW5kIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHByaW9yIHRvIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBoZWFwL3N0YWNrIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgb3Igc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocyBhZmZlY3RpbmcgcmVhZHMgb2YgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIGludm9sdmUgbG9jayBtYW5hZ2VtZW50LCBsb2NrIGNvbnRlbnRpb24sIFZNQSBpdGVyYXRpb24sIG9yIHBhZ2UgdGFibGUgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YWJmYTAzYjgxMjNkOWMyOWU1MjNhODQzM2NjZTE0MWRiOTRhZWJjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMTI6NDE6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCAwNTE3OWM0YjIwOTBlLi43YWMxNzI4YTU3YzI5IDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTU5Myw3ICYjNDM7NTkzLDggQEAgc3RydWN0IHphcF9kZXRhaWxzOwogdm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpOwotaW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwomIzQzO2ludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAomIzQzOwkJCXVuc2lnbmVkIGxvbmcgZW5kKTsKIGludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJICAgZ2ZwX3QgZ2ZwKTsKIApkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA5MjYyNzZkNDE5MjAyLi4yNWMzNWEyOGEzOWQxIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtMjIwNywxNSAmIzQzOzIyMDcsMTggQEAgc3RhdGljIHZvaWQgX196YXBfdm1hX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogfQogCiAvKioKLSAqIHphcF92bWFfZm9yX3JlYXBpbmcgLSB6YXAgYWxsIHBhZ2UgdGFibGUgZW50cmllcyBpbiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmcKJiM0MzsgKiB6YXBfdm1hX2Zvcl9yZWFwaW5nIC0gemFwIGEgcmFuZ2Ugb2YgdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nCiAgKiBAdm1hOiBUaGUgdm1hIHRvIHphcC4KJiM0MzsgKiBAc3RhcnQ6IFRoZSBmaXJzdCBhZGRyZXNzIHRvIHphcC4KJiM0MzsgKiBAZW5kOiBPbmUgcGFzdCB0aGUgbGFzdCBhZGRyZXNzIHRvIHphcC4KICAqCi0gKiBaYXAgYWxsIHBhZ2UgdGFibGUgZW50cmllcyBpbiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmcgZm9yIHVzZSBieSB0aGUgb29tCi0gKiBraWxsZXIuIEh1Z2V0bGIgdm1hcyBhcmUgbm90IHN1cHBvcnRlZC4KJiM0MzsgKiBaYXAgdGhlIHBhZ2UgdGFibGUgZW50cmllcyBpbiBbQHN0YXJ0LCBAZW5kKSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmcKJiM0MzsgKiBmb3IgdXNlIGJ5IHRoZSBvb20ga2lsbGVyLiBIdWdldGxiIHZtYXMgYXJlIG5vdCBzdXBwb3J0ZWQuCiAgKgogICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgd2Ugd291bGQgaGF2ZSB0byBibG9jay4KICAqLwotaW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiYjNDM7aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiYjNDM7CQkJdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJc3RydWN0IHphcF9kZXRhaWxzIGRldGFpbHMgPSB7CiAJCS5yZWFwaW5nID0gdHJ1ZSwKQEAgLTIyMjQsNyAmIzQzOzIyMjcsNyBAQCBpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlzdHJ1Y3QgbW11X2dhdGhlciB0bGI7CiAKIAltbXVfbm90aWZpZXJfcmFuZ2VfaW5pdCgmYW1wO3JhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtJmd0O3ZtX21tLAotCQkJCXZtYS0mZ3Q7dm1fc3RhcnQsIHZtYS0mZ3Q7dm1fZW5kKTsKJiM0MzsJCQkJc3RhcnQsIGVuZCk7CiAJdGxiX2dhdGhlcl9tbXUoJmFtcDt0bGIsIHZtYS0mZ3Q7dm1fbW0pOwogCWlmIChtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9ub25ibG9jaygmYW1wO3JhbmdlKSkgewogCQl0bGJfZmluaXNoX21tdSgmYW1wO3RsYik7CmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCA1ZDQ4YmQ4NjJjMjdiLi5jZWUwYTBmN2I0ZjI4IDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL29vbV9raWxsLmMKQEAgLTUwMywxMCAmIzQzOzUwMywxNyBAQCBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQob29tX3JlYXBlcl93YWl0KTsKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9vbV9yZWFwZXJfbGlzdDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob29tX3JlYXBlcl9sb2NrKTsKIAotc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQomIzQzOy8qCiYjNDM7ICogQ2FsbGVkIHdpdGggbW1hcF9sb2NrIGhlbGQgZm9yIHJlYWQuICBSZXR1cm5zIHdpdGggaXQgc3RpbGwgaGVsZCBvbiAwCiYjNDM7ICogKGRvbmUpIG9yIC1FQlVTWSAocGFydCBjb3VsZCBub3QgYmUgcmVhcGVkLCB0cnkgYWdhaW4gbGF0ZXIpLCBhbmQgZHJvcHMKJiM0MzsgKiBpdCBvbmx5IG9uIC1FQUdBSU4sIHdoZW4gaXQgd2FzIGhhbmRlZCBvdmVyIHRvIGEgcXVldWVkIHdyaXRlciBhbmQgdGhlCiYjNDM7ICogY2FsbGVyIHNob3VsZCByZXRha2UgaXQgYW5kIHN0YXJ0IG92ZXIuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0JYm9vbCByZXQgPSB0cnVlOwomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHIsIGVuZDsKJiM0MzsJaW50IHJldCA9IDA7CiAJTUFfU1RBVEUobWFzLCAmYW1wO21tLSZndDttbV9tdCwgVUxPTkdfTUFYLCBVTE9OR19NQVgpOwogCiAJLyoKQEAgLTUzOCw4ICYjNDM7NTQ1LDI1IEBAIHN0YXRpYyBib29sIF9fb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAkJICogY291bnQgZWxldmF0ZWQgd2l0aG91dCBhIGdvb2QgcmVhc29uLgogCQkgKi8KIAkJaWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSB8fCAhKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fU0hBUkVEKSkgewotCQkJaWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hKSkKLQkJCQlyZXQgPSBmYWxzZTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFphcCBpbiAxRyBjaHVua3MgYW5kIGhhbmQgbW1hcF9sb2NrIG92ZXIgd2hlbmV2ZXIgYQomIzQzOwkJCSAqIHdyaXRlciBpcyBxdWV1ZWQgb24gaXQsIHNvIGl0IGRvZXMgbm90IHdhaXQgZm9yIHRoZQomIzQzOwkJCSAqIHdob2xlIHJlYXAuCiYjNDM7CQkJICovCiYjNDM7CQkJZW5kID0gdm1hLSZndDt2bV9lbmQ7CiYjNDM7CQkJd2hpbGUgKGVuZCAmZ3Q7IHZtYS0mZ3Q7dm1fc3RhcnQpIHsKJiM0MzsJCQkJYWRkciA9IG1heCh2bWEtJmd0O3ZtX3N0YXJ0LCBBTElHTl9ET1dOKGVuZCAtIDEsIFNaXzFHKSk7CiYjNDM7CQkJCWlmICh6YXBfdm1hX2Zvcl9yZWFwaW5nKHZtYSwgYWRkciwgZW5kKSkgewomIzQzOwkJCQkJcmV0ID0gLUVCVVNZOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KJiM0MzsJCQkJZW5kID0gYWRkcjsKJiM0MzsJCQkJaWYgKCFtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKJiM0MzsJCQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CQkJfQogCQl9CiAJfQogCkBAIC01NDksMTYgJiM0Mzs1NzMsMTcgQEAgc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogLyoKICAqIFJlYXBzIHRoZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBnaXZlbiB0YXNrLgogICoKLSAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzIGFuZCBmYWxzZSBpZiBub25lIG9yIHBhcnQgb2YgdGhlIGFkZHJlc3Mgc3BhY2UKLSAqIGhhcyBiZWVuIHJlY2xhaW1lZCBhbmQgdGhlIGNhbGxlciBzaG91bGQgcmV0cnkgbGF0ZXIuCiYjNDM7ICogUmV0dXJucyAwIHdoZW4gZG9uZSwgLUVBR0FJTiBpZiBtbWFwX2xvY2sgd2FzIGhhbmRlZCBvdmVyIHRvIGEgd3JpdGVyCiYjNDM7ICogYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHN0YXJ0IG92ZXIsIGFuZCAtRUJVU1kgaWYgbm9uZSBvciBwYXJ0IG9mIHRoZQomIzQzOyAqIGFkZHJlc3Mgc3BhY2UgaGFzIGJlZW4gcmVjbGFpbWVkIGFuZCB0aGUgY2FsbGVyIHNob3VsZCByZXRyeSBsYXRlci4KICAqLwotc3RhdGljIGJvb2wgb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiYjNDM7c3RhdGljIGludCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlib29sIHJldCA9IHRydWU7CiYjNDM7CWludCByZXQgPSAwOwogCiAJaWYgKCFtbWFwX3JlYWRfdHJ5bG9jayhtbSkpIHsKIAkJdHJhY2Vfc2tpcF90YXNrX3JlYXBpbmcodHNrLSZndDtwaWQpOwotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCS8qCkBAIC01NzYsNyAmIzQzOzYwMSw5IEBAIHN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiAJLyogZmFpbGVkIHRvIHJlYXAgcGFydCBvZiB0aGUgYWRkcmVzcyBzcGFjZS4gVHJ5IGFnYWluIGxhdGVyICovCiAJcmV0ID0gX19vb21fcmVhcF90YXNrX21tKG1tKTsKLQlpZiAoIXJldCkKJiM0MzsJaWYgKHJldCA9PSAtRUFHQUlOKQkvKiBoYW5kZWQgdGhlIGxvY2sgb3ZlciwgYWxyZWFkeSBkcm9wcGVkICovCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmV0KQogCQlnb3RvIG91dF9maW5pc2g7CiAKIAlwcl9pbmZvKCYjMzQ7b29tX3JlYXBlcjogcmVhcGVkIHByb2Nlc3MgJWQgKCVzKSwgbm93IGFub24tcnNzOiVsdWtCLCBmaWxlLXJzczolbHVrQiwgc2htZW0tcnNzOiVsdWtCXG4mIzM0OywKQEAgLTU5NSwxNSAmIzQzOzYyMiwxNSBAQCBzdGF0aWMgYm9vbCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKICNkZWZpbmUgTUFYX09PTV9SRUFQX1JFVFJJRVMgMTAKIHN0YXRpYyB2b2lkIG9vbV9yZWFwX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JaW50IGF0dGVtcHRzID0gMDsKJiM0MzsJaW50IGF0dGVtcHRzID0gMCwgcmV0OwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLSZndDtzaWduYWwtJmd0O29vbV9tbTsKIAotCS8qIFJldHJ5IHRoZSBtbWFwX3JlYWRfdHJ5bG9jayhtbSkgYSBmZXcgdGltZXMgKi8KLQl3aGlsZSAoYXR0ZW1wdHMmIzQzOyYjNDM7ICZsdDsgTUFYX09PTV9SRUFQX1JFVFJJRVMgJmFtcDsmYW1wOyAhb29tX3JlYXBfdGFza19tbSh0c2ssIG1tKSkKJiM0MzsJLyogUmV0cnkgdGhlIG1tYXBfcmVhZF90cnlsb2NrKG1tKSBhIGZldyB0aW1lczsgaGFuZGluZyB0aGUgbG9jayBvdmVyIGlzIG5vdCBhbiBhdHRlbXB0ICovCiYjNDM7CXdoaWxlICgocmV0ID0gb29tX3JlYXBfdGFza19tbSh0c2ssIG1tKSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgKHJldCA9PSAtRUFHQUlOIHx8ICYjNDM7JiM0MzthdHRlbXB0cyAmbHQ7IE1BWF9PT01fUkVBUF9SRVRSSUVTKSkKIAkJc2NoZWR1bGVfdGltZW91dF9pZGxlKEhaLzEwKTsKIAotCWlmIChhdHRlbXB0cyAmbHQ7PSBNQVhfT09NX1JFQVBfUkVUUklFUyB8fAotCSAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKQomIzQzOwlpZiAoIXJldCB8fCBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKQogCQlnb3RvIGRvbmU7CiAKIAlwcl9pbmZvKCYjMzQ7b29tX3JlYXBlcjogdW5hYmxlIHRvIHJlYXAgcGlkOiVkICglcylcbiYjMzQ7LApAQCAtMTIyNyw2ICYjNDM7MTI1NCw3IEBAIFNZU0NBTExfREVGSU5FMihwcm9jZXNzX21yZWxlYXNlLCBpbnQsIHBpZGZkLCB1bnNpZ25lZCBpbnQsIGZsYWdzKQogCWlmICghcmVhcCkKIAkJZ290byBkcm9wX21tOwogCiYjNDM7YWdhaW46CiAJaWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSkgewogCQlyZXQgPSAtRUlOVFI7CiAJCWdvdG8gZHJvcF9tbTsKQEAgLTEyMzUsOCAmIzQzOzEyNjMsMTUgQEAgU1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpCiAJICogQ2hlY2sgTU1GX09PTV9TS0lQIGFnYWluIHVuZGVyIG1tYXBfcmVhZF9sb2NrIHByb3RlY3Rpb24gdG8gZW5zdXJlCiAJICogcG9zc2libGUgY2hhbmdlIGluIGV4aXRfbW1hcCBpcyBzZWVuCiAJICovCi0JaWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pICZhbXA7JmFtcDsgIV9fb29tX3JlYXBfdGFza19tbShtbSkpCi0JCXJldCA9IC1FQUdBSU47CiYjNDM7CWlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSkgewomIzQzOwkJcmV0ID0gX19vb21fcmVhcF90YXNrX21tKG1tKTsKJiM0MzsJCWlmIChyZXQgPT0gLUVBR0FJTikgewkvKiBhIHdyaXRlciBnb3QgdGhlIGxvY2ssIHF1ZXVlIHVwIGFnYWluICovCiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJCQlnb3RvIGFnYWluOwomIzQzOwkJfQomIzQzOwkJaWYgKHJldCA9PSAtRUJVU1kpCiYjNDM7CQkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJfQogCW1tYXBfcmVhZF91bmxvY2sobW0pOwogCiBkcm9wX21tOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBvb21fcmVhcGVyYCBJbXByb3ZlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyB0aGUgbmVlZCBmb3IgS01TQU4gZnV6emluZy4gVGhlIGRlc2NyaXB0aW9uIGluZGljYXRlcyBhbiBvcHRpbWl6YXRpb24gdG8gYG9vbV9yZWFwZXJgIGFuZCBgcHJvY2Vzc19tcmVsZWFzZWAsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgaG93IG1lbW9yeSBpcyB6YXBwZWQuIFRoZSBjaGFuZ2UgcHJvcG9zZXMgemFwcGluZyBtZW1vcnkgaW4gMUdCIGNodW5rcyBpbnN0ZWFkIG9mIHRoZSBlbnRpcmUgVk1BIGF0IG9uY2UsIGFuZCBpdCBhdHRlbXB0cyB0byB5aWVsZCBgbW1hcF9sb2NrYCBpZiBhIHdyaXRlciBpcyBjb250ZW5kaW5nLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIG1pdGlnYXRlIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24gYW5kIGltcHJvdmUgcmVzcG9uc2l2ZW5lc3MgZHVyaW5nIE9PTSBzaXR1YXRpb25zLgoKRmlyc3QsIEkmIzM5O2xsIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoZSBjb2RlIGNoYW5nZXMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSB3aXRoaW4gYG1tL2ludGVybmFsLmhgIGFuZCBgbW0vbWVtb3J5LmNgLiBJIHNlZSB0aGF0IHRoZSBgemFwX3ZtYV9mb3JfcmVhcGluZ2AgZnVuY3Rpb24gc2lnbmF0dXJlIG5vdyBpbmNsdWRlcyBgc3RhcnRgIGFuZCBgZW5kYCBwYXJhbWV0ZXJzOgoKYGBgYwotaW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwomIzQzO2ludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAomIzQzOwkJCXVuc2lnbmVkIGxvbmcgZW5kKTsKYGBgCgpBbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyBpbiBgbW0vbWVtb3J5LmNgIGNvbmZpcm0gdGhpcy4gVGhlIGBtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdGAgY2FsbCBpcyB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGBzdGFydGAgYW5kIGBlbmRgIGFyZ3VtZW50cywgd2hpY2ggc3VnZ2VzdHMgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGFkYXB0ZWQgdG8gb3BlcmF0ZSBvbiByZWdpb25zIHdpdGhpbiB0aGUgVk1BLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCBjYWxsIHNpdGVzIGNvcnJlY3RseSB1c2UgYHN0YXJ0YCBhbmQgYGVuZGAgcGFyYW1ldGVycyB0byBkZXRlcm1pbmUgdGhlIGltcGFjdC4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV3IGBzdGFydGAgYW5kIGBlbmRgIGFyZ3VtZW50cyBhcmUgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiBjYWxscyB1c2UgdGhlIG5ldyBhcmd1bWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3phcF92bWFfZm9yX3JlYXBpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD01OTM9dm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9pbnRlcm5hbC5oLTU5NS1cdFx0dW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpO1xubW0vaW50ZXJuYWwuaDo1OTY6aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9pbnRlcm5hbC5oLTU5Ny1cdFx0XHR1bnNpZ25lZCBsb25nIGVuZCk7XG4tLVxubW0vbWVtb3J5LmM9MjE2OT1zdGF0aWMgdm9pZCBfX3phcF92bWFfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtb3J5LmMtMjIwOS0vKipcbm1tL21lbW9yeS5jOjIyMTA6ICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhIHJhbmdlIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xubW0vbWVtb3J5LmMtMjIxMS0gKiBAdm1hOiBUaGUgdm1hIHRvIHphcC5cbi0tXG5tbS9tZW1vcnkuYy0yMjE5LSAqL1xubW0vbWVtb3J5LmM6MjIyMDppbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL21lbW9yeS5jLTIyMjEtXHRcdFx0dW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vb29tX2tpbGwuYz01MTI9c3RhdGljIGludCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vb29tX2tpbGwuYy01NTUtXHRcdFx0XHRhZGRyID0gbWF4KHZtYS1cdTAwM2V2bV9zdGFydCwgQUxJR05fRE9XTihlbmQgLSAxLCBTWl8xRykpO1xubW0vb29tX2tpbGwuYzo1NTY6XHRcdFx0XHRpZiAoemFwX3ZtYV9mb3JfcmVhcGluZyh2bWEsIGFkZHIsIGVuZCkpIHtcbm1tL29vbV9raWxsLmMtNTU3LVx0XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYCBpbiBgbW0vbWVtb3J5LmNgKioKCk9rYXksIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgemFwX3ZtYV9mb3JfcmVhcGluZ2AgZnVuY3Rpb24gaW4gZGV0YWlsLiBUbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBJJiMzOTtsbCBzdGFydCBieSBsb29raW5nIGF0IGBtbS9tZW1vcnkuY2AgYW5kIHNwZWNpZmljYWxseSBwaW5wb2ludCBsaW5lIDIyMjAuIFRoYXQgc2hvdWxkIGJlIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgZnVsbCBkZWZpbml0aW9uLiBJJiMzOTttIGhvcGluZyB0aGF0IGJ5IHRyYWNpbmcgdGhyb3VnaCB0aGUgY29tcGxldGUgZnVuY3Rpb24sIEkgY2FuIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIG1lY2hhbmljcy4gVGhpcyBhcHByb2FjaCB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGFuYWx5emUgdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjEwOlx0ICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhIHJhbmdlIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xuMjIxMTpcdCAqIEB2bWE6IFRoZSB2bWEgdG8gemFwLlxuMjIxMjpcdCAqIEBzdGFydDogVGhlIGZpcnN0IGFkZHJlc3MgdG8gemFwLlxuMjIxMzpcdCAqIEBlbmQ6IE9uZSBwYXN0IHRoZSBsYXN0IGFkZHJlc3MgdG8gemFwLlxuMjIxNDpcdCAqXG4yMjE1Olx0ICogWmFwIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMgaW4gW0BzdGFydCwgQGVuZCkgb2YgdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nXG4yMjE2Olx0ICogZm9yIHVzZSBieSB0aGUgb29tIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxuMjIxNzpcdCAqXG4yMjE4Olx0ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgd2Ugd291bGQgaGF2ZSB0byBibG9jay5cbjIyMTk6XHQgKi9cbjIyMjA6XHRpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbjIyMjE6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZClcbjIyMjI6XHR7XG4yMjIzOlx0XHRzdHJ1Y3QgemFwX2RldGFpbHMgZGV0YWlscyA9IHtcbjIyMjQ6XHRcdFx0LnJlYXBpbmcgPSB0cnVlLFxuMjIyNTpcdFx0fTtcbjIyMjY6XHRcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4yMjI3Olx0XHRzdHJ1Y3QgbW11X2dhdGhlciB0bGI7XG4yMjI4Olx0XG4yMjI5Olx0XHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuMjIzMDpcdFx0XHRcdFx0c3RhcnQsIGVuZCk7XG4yMjMxOlx0XHR0bGJfZ2F0aGVyX21tdShcdTAwMjZ0bGIsIHZtYS1cdTAwM2V2bV9tbSk7XG4yMjMyOlx0XHRpZiAobW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbm9uYmxvY2soXHUwMDI2cmFuZ2UpKSB7XG4yMjMzOlx0XHRcdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4yMjM0Olx0XHRcdHJldHVybiAtRUJVU1k7XG4yMjM1Olx0XHR9XG4yMjM2Olx0XHRfX3phcF92bWFfcmFuZ2UoXHUwMDI2dGxiLCB2bWEsIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQsIFx1MDAyNmRldGFpbHMpO1xuMjIzNzpcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbjIyMzg6XHRcdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4yMjM5Olx0XHRyZXR1cm4gMDtcbjIyNDA6XHR9XG4yMjQxOlx0XG4yMjQyOlx0LyoqXG4yMjQzOlx0ICogdW5tYXBfdm1hcyAtIHVubWFwIGEgcmFuZ2Ugb2YgbWVtb3J5IGNvdmVyZWQgYnkgYSBsaXN0IG9mIHZtYSYjMzk7c1xuMjI0NDpcdCAqIEB0bGI6IGFkZHJlc3Mgb2YgdGhlIGNhbGxlciYjMzk7cyBzdHJ1Y3QgbW11X2dhdGhlclxuMjI0NTpcdCAqIEB1bm1hcDogVGhlIHVubWFwX2Rlc2NcbjIyNDY6XHQgKlxuMjI0NzpcdCAqIFVubWFwIGFsbCBwYWdlcyBpbiB0aGUgdm1hIGxpc3QuXG4yMjQ4Olx0ICpcbjIyNDk6XHQgKiBPbmx5IGFkZHJlc3NlcyBiZXR3ZWVuIGBzdGFydCYjMzk7IGFuZCBgZW5kJiMzOTsgd2lsbCBiZSB1bm1hcHBlZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY3NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1tL29vbV9raWxsLmNgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIE9PTSBraWxsZXImIzM5O3MgY29yZS4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbW0vb29tX2tpbGwuY2Agbm93LiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGRlY2lzaW9uLW1ha2luZyBoYXBwZW5zIOKAkyB3aGljaCBwcm9jZXNzIGdldHMgc2FjcmlmaWNlZCBhbmQgaG93IHdlIGhhbmRsZSB0aGUgYWZ0ZXJtYXRoLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgdGhlIHNlbGVjdGlvbiBhbGdvcml0aG0sIHRoZSBzY29yaW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgY3J1Y2lhbCBhc3BlY3RzIG9mIHByZXZlbnRpbmcgY2FzY2FkaW5nIGZhaWx1cmVzLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBpZiB0aGVyZSYjMzk7cyBiZWVuIGFueSByZWNlbnQgdHdlYWtpbmcgb2YgdGhlIGhldXJpc3RpY3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUmIzM5O3MgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIHRvIHBpbnBvaW50IHBvc3NpYmxlIGNvbnRlbnRpb24gcG9pbnRzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgc2lnbmFsIGRlbGl2ZXJ5IHdpdGhpbiB0aGlzIGNyaXRpY2FsIHBhdGguIEFueSByZWNlbnQgY2hhbmdlcyB0byBob3cgYG9vbV9iYWRuZXNzYCBpcyBjYWxjdWxhdGVkLCBvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG9vbV9raWxsX3Byb2Nlc3NgLCBhcmUgdG9wIG9mIG1pbmQuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL29vbV9raWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxMDpcdCAqIGNhbGxlciBzaG91bGQgcmV0YWtlIGl0IGFuZCBzdGFydCBvdmVyLlxuIDUxMTpcdCAqL1xuIDUxMjpcdHN0YXRpYyBpbnQgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIDUxMzpcdHtcbiA1MTQ6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIDUxNTpcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBlbmQ7XG4gNTE2Olx0XHRpbnQgcmV0ID0gMDtcbiA1MTc6XHRcdE1BX1NUQVRFKG1hcywgXHUwMDI2bW0tXHUwMDNlbW1fbXQsIFVMT05HX01BWCwgVUxPTkdfTUFYKTtcbiA1MTg6XHRcbiA1MTk6XHRcdC8qXG4gNTIwOlx0XHQgKiBUZWxsIGFsbCB1c2VycyBvZiBnZXRfdXNlci9jb3B5X2Zyb21fdXNlciBldGMuLi4gdGhhdCB0aGUgY29udGVudFxuIDUyMTpcdFx0ICogaXMgbm8gbG9uZ2VyIHN0YWJsZS4gTm8gYmFycmllcnMgcmVhbGx5IG5lZWRlZCBiZWNhdXNlIHVubWFwcGluZ1xuIDUyMjpcdFx0ICogc2hvdWxkIGltcGx5IGJhcnJpZXJzIGFscmVhZHkgYW5kIHRoZSByZWFkZXIgd291bGQgaGl0IGEgcGFnZSBmYXVsdFxuIDUyMzpcdFx0ICogaWYgaXQgc3R1bWJsZWQgb3ZlciBhIHJlYXBlZCBtZW1vcnkuXG4gNTI0Olx0XHQgKi9cbiA1MjU6XHRcdG1tX2ZsYWdzX3NldChNTUZfVU5TVEFCTEUsIG1tKTtcbiA1MjY6XHRcbiA1Mjc6XHRcdC8qXG4gNTI4Olx0XHQgKiBJdCBtaWdodCBzdGFydCByYWNpbmcgd2l0aCB0aGUgZHlpbmcgdGFzayBhbmQgY29tcGV0ZSBmb3Igc2hhcmVkXG4gNTI5Olx0XHQgKiByZXNvdXJjZXMgLSBlLmcuIHBhZ2UgdGFibGUgbG9jayBjb250ZW50aW9uIGhhcyBiZWVuIG9ic2VydmVkLlxuIDUzMDpcdFx0ICogUmVkdWNlIHRob3NlIHJhY2VzIGJ5IHJlYXBpbmcgdGhlIG9vbSB2aWN0aW0gZnJvbSB0aGUgb3RoZXIgZW5kXG4gNTMxOlx0XHQgKiBvZiB0aGUgYWRkcmVzcyBzcGFjZS5cbiA1MzI6XHRcdCAqL1xuIDUzMzpcdFx0bWFzX2Zvcl9lYWNoX3JldihcdTAwMjZtYXMsIHZtYSwgMCkge1xuIDUzNDpcdFx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fSFVHRVRMQnxWTV9QRk5NQVApKVxuIDUzNTpcdFx0XHRcdGNvbnRpbnVlO1xuIDUzNjpcdFxuIDUzNzpcdFx0XHQvKlxuIDUzODpcdFx0XHQgKiBPbmx5IGFub255bW91cyBwYWdlcyBoYXZlIGEgZ29vZCBjaGFuY2UgdG8gYmUgZHJvcHBlZFxuIDUzOTpcdFx0XHQgKiB3aXRob3V0IGFkZGl0aW9uYWwgc3RlcHMgd2hpY2ggd2UgY2Fubm90IGFmZm9yZCBhcyB3ZVxuIDU0MDpcdFx0XHQgKiBhcmUgT09NIGFscmVhZHkuXG4gNTQxOlx0XHRcdCAqXG4gNTQyOlx0XHRcdCAqIFdlIGRvIG5vdCBldmVuIGNhcmUgYWJvdXQgZnMgYmFja2VkIHBhZ2VzIGJlY2F1c2UgYWxsXG4gNTQzOlx0XHRcdCAqIHdoaWNoIGFyZSByZWNsYWltYWJsZSBoYXZlIGFscmVhZHkgYmVlbiByZWNsYWltZWQgYW5kXG4gNTQ0Olx0XHRcdCAqIHdlIGRvIG5vdCB3YW50IHRvIGJsb2NrIGV4aXRfbW1hcCBieSBrZWVwaW5nIG1tIHJlZlxuIDU0NTpcdFx0XHQgKiBjb3VudCBlbGV2YXRlZCB3aXRob3V0IGEgZ29vZCByZWFzb24uXG4gNTQ2Olx0XHRcdCAqL1xuIDU0NzpcdFx0XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKSB7XG4gNTQ4Olx0XHRcdFx0LypcbiA1NDk6XHRcdFx0XHQgKiBaYXAgaW4gMUcgY2h1bmtzIGFuZCBoYW5kIG1tYXBfbG9jayBvdmVyIHdoZW5ldmVyIGFcbiA1NTA6XHRcdFx0XHQgKiB3cml0ZXIgaXMgcXVldWVkIG9uIGl0LCBzbyBpdCBkb2VzIG5vdCB3YWl0IGZvciB0aGVcbiA1NTE6XHRcdFx0XHQgKiB3aG9sZSByZWFwLlxuIDU1MjpcdFx0XHRcdCAqL1xuIDU1MzpcdFx0XHRcdGVuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4gNTU0Olx0XHRcdFx0d2hpbGUgKGVuZCBcdTAwM2Ugdm1hLVx1MDAzZXZtX3N0YXJ0KSB7XG4gNTU1Olx0XHRcdFx0XHRhZGRyID0gbWF4KHZtYS1cdTAwM2V2bV9zdGFydCwgQUxJR05fRE9XTihlbmQgLSAxLCBTWl8xRykpO1xuIDU1NjpcdFx0XHRcdFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hLCBhZGRyLCBlbmQpKSB7XG4gNTU3Olx0XHRcdFx0XHRcdHJldCA9IC1FQlVTWTtcbiA1NTg6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNTU5Olx0XHRcdFx0XHR9XG4gNTYwOlx0XHRcdFx0XHRlbmQgPSBhZGRyO1xuIDU2MTpcdFx0XHRcdFx0aWYgKCFtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKSlcbiA1NjI6XHRcdFx0XHRcdFx0Y29udGludWU7XG4gNTYzOlx0XG4gNTY0Olx0XHRcdFx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiA1NjU6XHRcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIDU2NjpcdFx0XHRcdH1cbiA1Njc6XHRcdFx0fVxuIDU2ODpcdFx0fVxuIDU2OTpcdFxuIDU3MDpcdFx0cmV0dXJuIHJldDtcbiA1NzE6XHR9XG4gNTcyOlx0XG4gNTczOlx0LypcbiA1NzQ6XHQgKiBSZWFwcyB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgZ2l2ZW4gdGFzay5cbiA1NzU6XHQgKlxuIDU3NjpcdCAqIFJldHVybnMgMCB3aGVuIGRvbmUsIC1FQUdBSU4gaWYgbW1hcF9sb2NrIHdhcyBoYW5kZWQgb3ZlciB0byBhIHdyaXRlclxuIDU3NzpcdCAqIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBzdGFydCBvdmVyLCBhbmQgLUVCVVNZIGlmIG5vbmUgb3IgcGFydCBvZiB0aGVcbiA1Nzg6XHQgKiBhZGRyZXNzIHNwYWNlIGhhcyBiZWVuIHJlY2xhaW1lZCBhbmQgdGhlIGNhbGxlciBzaG91bGQgcmV0cnkgbGF0ZXIuXG4gNTc5Olx0ICovXG4gNTgwOlx0c3RhdGljIGludCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiA1ODE6XHR7XG4gNTgyOlx0XHRpbnQgcmV0ID0gMDtcbiA1ODM6XHRcbiA1ODQ6XHRcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sobW0pKSB7XG4gNTg1Olx0XHRcdHRyYWNlX3NraXBfdGFza19yZWFwaW5nKHRzay1cdTAwM2VwaWQpO1xuIDU4NjpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDU4NzpcdFx0fVxuIDU4ODpcdFxuIDU4OTpcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEzNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG1tL29vbV9raWxsLmNgIGZvciBPT00gRGlhZ25vc3RpY3MqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBPT00gc2l0dWF0aW9uLCBhbmQgSSYjMzk7bSB0aGlua2luZywgJiMzNDtMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZSBoZWFydCBvZiB0aGUgT09NIGtpbGxlciBpdHNlbGYuJiMzNDsgSSYjMzk7dmUgZ290IGEgc3Ryb25nIHN1c3BpY2lvbiB0aGF0IHRoZSBjb3JlIGlzc3VlIGlzIGdvaW5nIHRvIGJlIHJldmVhbGVkIHdpdGhpbiBgbW0vb29tX2tpbGwuY2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IHplcm9pbmcgaW4gb24gbGluZXMgNjIwIHRocm91Z2ggNjQ1LiBUaGF0IHNlY3Rpb24gaXMgdXN1YWxseSBhIGNydWNpYWwgYXJlYSBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggcHJvY2Vzc2VzIGFyZSBzZWxlY3RlZCBmb3IgdGVybWluYXRpb24sIGFuZCBob3cgdGhlIGtlcm5lbCBtYWtlcyB0aG9zZSBjcml0aWNhbCBkZWNpc2lvbnMgZHVyaW5nIG1lbW9yeSBwcmVzc3VyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0IHNlY3Rpb24gaGFzIHRoZSBkZXRhaWxzIEkgYW0gbG9va2luZyBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vb29tX2tpbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjIwOlx0fVxuIDYyMTpcdFxuIDYyMjpcdCNkZWZpbmUgTUFYX09PTV9SRUFQX1JFVFJJRVMgMTBcbiA2MjM6XHRzdGF0aWMgdm9pZCBvb21fcmVhcF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIDYyNDpcdHtcbiA2MjU6XHRcdGludCBhdHRlbXB0cyA9IDAsIHJldDtcbiA2MjY6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLVx1MDAzZXNpZ25hbC1cdTAwM2Vvb21fbW07XG4gNjI3Olx0XG4gNjI4Olx0XHQvKiBSZXRyeSB0aGUgbW1hcF9yZWFkX3RyeWxvY2sobW0pIGEgZmV3IHRpbWVzOyBoYW5kaW5nIHRoZSBsb2NrIG92ZXIgaXMgbm90IGFuIGF0dGVtcHQgKi9cbiA2Mjk6XHRcdHdoaWxlICgocmV0ID0gb29tX3JlYXBfdGFza19tbSh0c2ssIG1tKSkgXHUwMDI2XHUwMDI2XG4gNjMwOlx0XHQgICAgICAgKHJldCA9PSAtRUFHQUlOIHx8ICYjNDM7JiM0MzthdHRlbXB0cyBcdTAwM2MgTUFYX09PTV9SRUFQX1JFVFJJRVMpKVxuIDYzMTpcdFx0XHRzY2hlZHVsZV90aW1lb3V0X2lkbGUoSFovMTApO1xuIDYzMjpcdFxuIDYzMzpcdFx0aWYgKCFyZXQgfHwgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSlcbiA2MzQ6XHRcdFx0Z290byBkb25lO1xuIDYzNTpcdFxuIDYzNjpcdFx0cHJfaW5mbyhcJiMzNDtvb21fcmVhcGVyOiB1bmFibGUgdG8gcmVhcCBwaWQ6JWQgKCVzKVxcblwmIzM0OyxcbiA2Mzc6XHRcdFx0dGFza19waWRfbnIodHNrKSwgdHNrLVx1MDAzZWNvbW0pO1xuIDYzODpcdFx0c2NoZWRfc2hvd190YXNrKHRzayk7XG4gNjM5Olx0XHRkZWJ1Z19zaG93X2FsbF9sb2NrcygpO1xuIDY0MDpcdFxuIDY0MTpcdGRvbmU6XG4gNjQyOlx0XHR0c2stXHUwMDNlb29tX3JlYXBlcl9saXN0ID0gTlVMTDtcbiA2NDM6XHRcbiA2NDQ6XHRcdC8qXG4gNjQ1Olx0XHQgKiBIaWRlIHRoaXMgbW0gZnJvbSBPT00ga2lsbGVyIGJlY2F1c2UgaXQgaGFzIGJlZW4gZWl0aGVyIHJlYXBlZCBvclxuIDY0NjpcdFx0ICogc29tZWJvZHkgY2FuJiMzOTt0IGNhbGwgbW1hcF93cml0ZV91bmxvY2sobW0pLlxuIDY0NzpcdFx0ICovXG4gNjQ4Olx0XHRtbV9mbGFnc19zZXQoTU1GX09PTV9TS0lQLCBtbSk7XG4gNjQ5Olx0XG4gNjUwOlx0XHQvKiBEcm9wIGEgcmVmZXJlbmNlIHRha2VuIGJ5IHF1ZXVlX29vbV9yZWFwZXIgKi9cbiA2NTE6XHRcdHB1dF90YXNrX3N0cnVjdCh0c2spO1xuIDY1MjpcdH1cbiA2NTM6XHRcbiA2NTQ6XHRzdGF0aWMgaW50IG9vbV9yZWFwZXIodm9pZCAqdW51c2VkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTE1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gT09NIEtpbGxlciBCZWhhdmlvcioqCgpPa2F5LCBJJiMzOTttIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgd2l0aCB0aGlzIE9PTSBraWxsZXIgaW52ZXN0aWdhdGlvbiwgYW5kIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLiBJJiMzOTt2ZSBiZWVuIHRyYWNpbmcgdGhlIGtpbGwgc2lnbmFscyBhbmQgbWVtb3J5IHByZXNzdXJlIGJ1dCBJJiMzOTttIGp1c3QgZ2V0dGluZyBzdGFydGVkLiBJIGtub3cgdGhlIE9PTSBraWxsZXIgaGFzIGNvbXBsZXggZGVjaXNpb24tbWFraW5nLCBhbmQgSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUga2VybmVsIGRlY2lkZXMgd2hhdCB0byBhY3R1YWxseSAqcmVsZWFzZSogd2hlbiBpdCBnZXRzIGRlc3BlcmF0ZS4gSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgem9vbSBpbiBvbiB0aGUgYHByb2Nlc3NfbXJlbGVhc2VgIGZ1bmN0aW9uIG5vdywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEyNTAgaW4gYG1tL29vbV9raWxsLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWMgbWVtb3J5IHJlbGVhc2UgbWVjaGFuaXNtcyBpbiBwbGF5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggcG90ZW50aWFsIG1lbW9yeSByZWxlYXNlcy4gSSYjMzk7bSBob3BpbmcgSSBjYW4gY29ycmVsYXRlIHRoZSBmdW5jdGlvbnMgdGhlcmUgd2l0aCBteSB0ZXN0IG1lbW9yeSBsb2FkcyB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgT09NIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL29vbV9raWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDA6XHRcdH1cbjEyNDE6XHRcbjEyNDI6XHRcdG1tID0gcC1cdTAwM2VtbTtcbjEyNDM6XHRcdG1tZ3JhYihtbSk7XG4xMjQ0Olx0XG4xMjQ1Olx0XHRpZiAodGFza193aWxsX2ZyZWVfbWVtKHApKVxuMTI0NjpcdFx0XHRyZWFwID0gdHJ1ZTtcbjEyNDc6XHRcdGVsc2Uge1xuMTI0ODpcdFx0XHQvKiBFcnJvciBvbmx5IGlmIHRoZSB3b3JrIGhhcyBub3QgYmVlbiBkb25lIGFscmVhZHkgKi9cbjEyNDk6XHRcdFx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVxuMTI1MDpcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4xMjUxOlx0XHR9XG4xMjUyOlx0XHR0YXNrX3VubG9jayhwKTtcbjEyNTM6XHRcbjEyNTQ6XHRcdGlmICghcmVhcClcbjEyNTU6XHRcdFx0Z290byBkcm9wX21tO1xuMTI1NjpcdFxuMTI1NzpcdGFnYWluOlxuMTI1ODpcdFx0aWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSkge1xuMTI1OTpcdFx0XHRyZXQgPSAtRUlOVFI7XG4xMjYwOlx0XHRcdGdvdG8gZHJvcF9tbTtcbjEyNjE6XHRcdH1cbjEyNjI6XHRcdC8qXG4xMjYzOlx0XHQgKiBDaGVjayBNTUZfT09NX1NLSVAgYWdhaW4gdW5kZXIgbW1hcF9yZWFkX2xvY2sgcHJvdGVjdGlvbiB0byBlbnN1cmVcbjEyNjQ6XHRcdCAqIHBvc3NpYmxlIGNoYW5nZSBpbiBleGl0X21tYXAgaXMgc2VlblxuMTI2NTpcdFx0ICovXG4xMjY2Olx0XHRpZiAoIW1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBtbSkpIHtcbjEyNjc6XHRcdFx0cmV0ID0gX19vb21fcmVhcF90YXNrX21tKG1tKTtcbjEyNjg6XHRcdFx0aWYgKHJldCA9PSAtRUFHQUlOKSB7XHQvKiBhIHdyaXRlciBnb3QgdGhlIGxvY2ssIHF1ZXVlIHVwIGFnYWluICovXG4xMjY5Olx0XHRcdFx0cmV0ID0gMDtcbjEyNzA6XHRcdFx0XHRnb3RvIGFnYWluO1xuMTI3MTpcdFx0XHR9XG4xMjcyOlx0XHRcdGlmIChyZXQgPT0gLUVCVVNZKVxuMTI3MzpcdFx0XHRcdHJldCA9IC1FQUdBSU47XG4xMjc0Olx0XHR9XG4xMjc1Olx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbjEyNzY6XHRcbjEyNzc6XHRkcm9wX21tOlxuMTI3ODpcdFx0bW1kcm9wKG1tKTtcbjEyNzk6XHRwdXRfdGFzazpcbjEyODA6XHRcdHB1dF90YXNrX3N0cnVjdCh0YXNrKTtcbjEyODE6XHRcdHJldHVybiByZXQ7XG4xMjgyOlx0I2Vsc2VcbjEyODM6XHRcdHJldHVybiAtRU5PU1lTO1xuMTI4NDpcdCNlbmRpZiAvKiBDT05GSUdfTU1VICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3ODUKCQkJCQkJCW91dHB1dDogMjM3CgkJCQkJCQl0aG91Z2h0czogMTIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSZWFzb25pbmc6IE9PTSBSZWFwZXIgYW5kIFZNQSBaYXBwaW5nIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgdGVsbHMgbWUgdGhhdCB0aGlzIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBPT00gcmVhcGVyIGFuZCB0aGUgVk1BIHphcHBpbmcgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYF9fb29tX3JlYXBfdGFza19tbWAgYW5kIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYC4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgdG8gbWFrZSB0aGUgcmVhcGluZyBwcm9jZXNzIG1vcmUgZWZmaWNpZW50IGFuZCBsZXNzIHByb25lIHRvIGJsb2NraW5nLCBwYXJ0aWN1bGFybHkgaW4gdGhlIHByZXNlbmNlIG9mIGNvbnRlbnRpb24gb24gdGhlIGBtbWFwX2xvY2tgLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUgaGF2ZSBiZWVuIHNvbWUgcmV0dXJuIHZhbHVlIGFuZCBlcnJvciBoYW5kbGluZyBpbXByb3ZlbWVudHMgaW4gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gVGhlIGNodW5raW5nIG9mIHRoZSBWTUEgcmVhcGluZyB0byAxR0IgaXMgdGhlIHNpZ25pZmljYW50IGNoYW5nZSB0aGF0IGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQuCgpNeSBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRmlyc3QsIHRoZSBgemFwX3ZtYV9mb3JfcmVhcGluZ2AgZnVuY3Rpb24gbG9va3MgbGlrZSBpdOKAmXMgYmVpbmcgbWFkZSBzYWZlci4gSXQgbm93IHRha2VzIGV4cGxpY2l0IGBzdGFydGAgYW5kIGBlbmRgIGJvdW5kcywgaW5pdGlhbGl6ZXMgYSBgemFwX2RldGFpbHNgIHN0cnVjdCwgc2V0cyB1cCBhbiBgbW11X25vdGlmaWVyX3JhbmdlYCwgYW5kIGNhbGxzIGEgc2VyaWVzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCAqbm90aGluZyogaW4gdGhpcyBzZXF1ZW5jZSB0b3VjaGVzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIHRoZSB2YXJpYWJsZXMgdXNlZCwgbGlrZSBgZGV0YWlsc2AgYW5kIGByYW5nZWAsIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLgoKSW4gYF9fb29tX3JlYXBfdGFza19tbWAsIHRoZSBsb29waW5nIHN0cmF0ZWd5IGlzIGNoYW5naW5nLiBJbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBtZXRob2QsIHdlIGFyZSBsb29waW5nIGRvd253YXJkcyBpbiAxR0IgY2h1bmtzIGNoZWNraW5nIGZvciBgbW1hcF9sb2NrX2lzX2NvbnRlbmRlZGAuIElmIGl0JiMzOTtzIGNvbnRlbmRlZCwgdGhlIGxvY2sgaXMgZHJvcHBlZCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zLiBBbGwgbG9jYWwgdmFyaWFibGVzIGhlcmUgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFdlJiMzOTtyZSBub3QgYWxsb2NhdGluZyBhbnl0aGluZyBuZXcsIGFuZCBub3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIGEgbWFqb3IgcG9pbnQgb2YgY29uc2lkZXJhdGlvbiB3aGVuIHRoaW5raW5nIGFib3V0IGxlYWtzLiBUaGUgc2FtZSBwYXR0ZXJuIGNvbnRpbnVlcyBpbiBgb29tX3JlYXBfdGFza19tbWAsIHdoZXJlIHdlIGhhdmUgYW4gYGludGAgcmV0dXJuIHZhbHVlIGFuZCBpbml0aWFsaXplZCBgcmV0YCB2YXJpYWJsZS4gRmluYWxseSwgdGhlIHJldHJ5IGhhbmRsaW5nIGluIGBvb21fcmVhcF90YXNrYCBhbmQgdGhlIHJlYWNxdWlzaXRpb24gb2YgdGhlIGxvY2sgaW4gYHByb2Nlc3NfbXJlbGVhc2VgIGFyZSBjYXJlZnVsbHkgc3RydWN0dXJlZC4KClNvLCBhbSBJIHNlZWluZyBhbnl0aGluZyB0aGF0IGp1bXBzIG91dCBhcyBhIEtNU0FOIGNvbmNlcm4/IExldCBtZSByZXZpZXcgdGhlIHF1ZXN0aW9uczoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBObywgbm90aGluZyYjMzk7cyBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGF04oCZcyBhIGdvb2Qgc2lnbi4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIEFic29sdXRlbHkgbm90LiBBbGwgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLgozLiAgKipOZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgYmVpbmcgbWFkZS4KNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGE/KiogVGhpcyBpcyB6YXBwaW5nIHBhZ2UgdGFibGUgZW50cmllcy4gTm90IGFwcGxpY2FibGUuCgpUaGUgYXJlYXMgb2YgY29uY2VybiBhcmUgbW9yZSBhcm91bmQgcG90ZW50aWFsOgoKKiAgIExvY2tpbmcgaXNzdWVzOiBEcm9wcGVkIGxvY2tzIHZzLiBoZWxkIGxvY2tzLCBkZWFkbG9ja3MsIGxvY2sgY29udGVudGlvbi4gVGhlc2Ugc2hvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQLgoqICAgVk1BIGl0ZXJhdG9yIC8gcmFjZSBjb25kaXRpb25zOiBDb3VsZCB0aGUgVk1BIGJlIG1vZGlmaWVkIHdoaWxlIHRoZSBsb2NrIGlzIGRyb3BwZWQ/IFJldHVybmluZyBgLUVBR0FJTmAgYW5kIHJlc3RhcnRpbmcgZnJvbSBzY3JhdGNoIHNob3VsZCBoYW5kbGUgaXQuIEtBU0FOL0xPQ0tERVAvZ2VuZXJhbCBrZXJuZWwgYXNzZXJ0cyBzaG91bGQgY2F0Y2ggaXQuCiogICBBcml0aG1ldGljIG9yIGluZmluaXRlIGxvb3BzIGZyb20gYSBicm9rZW4gYGVuZGAvYGFkZHJgIGNhbGN1bGF0aW9uLgoKSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyAqbm90KiBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIHdvdWxkbiYjMzk7dCBjYXRjaCBhbnl0aGluZyB1bmlxdWUgaGVyZS4gTE9DS0RFUCBhbmQgS0FTQU4gYXJlIG1vcmUgYXBwcm9wcmlhdGUuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuCgpJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSByZWFwZXIgbG9naWMgaW4gbW0vb29tX2tpbGwuYyBhbmQgbW0vbWVtb3J5LmMgc28gdGhhdCBWTUFzIGFyZSB6YXBwZWQgaW4gMUdCIGNodW5rcywgYWxsb3dpbmcgbW1hcF9sb2NrIHRvIGJlIHlpZWxkZWQgdG8gd2FpdGluZyB3cml0ZXJzIHVwb24gY29udGVudGlvbi4gSXQgYWxzbyB1cGRhdGVzIGVycm9yIGhhbmRsaW5nIGFjcm9zcyB6YXBfdm1hX2Zvcl9yZWFwaW5nLCBfX29vbV9yZWFwX3Rhc2tfbW0sIG9vbV9yZWFwX3Rhc2ssIGFuZCB0aGUgcHJvY2Vzc19tcmVsZWFzZSBzeXNjYWxsLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgKGFkZHIsIGVuZCwgcmV0LCBhdHRlbXB0cykgYXJlIHNjYWxhciB0eXBlcyBhbmQgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb3IgYXNzaWduZWQgcHJpb3IgdG8gdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IGhlYXAvc3RhY2sgYnVmZmVycywgZG9lcyBub3QgY29weSBhbnkgZGF0YSBvciBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzIGFmZmVjdGluZyByZWFkcyBvZiBtZW1vcnkuIEFueSBwb3RlbnRpYWwgZGVmZWN0cyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgaW52b2x2ZSBsb2NrIG1hbmFnZW1lbnQsIGxvY2sgY29udGVudGlvbiwgVk1BIGl0ZXJhdGlvbiwgb3IgcGFnZSB0YWJsZSB0ZWFyZG93biwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00gcmVhcGVyIGxvZ2ljIGluIG1tL29vbV9raWxsLmMgYW5kIG1tL21lbW9yeS5jIHNvIHRoYXQgVk1BcyBhcmUgemFwcGVkIGluIDFHQiBjaHVua3MsIGFsbG93aW5nIG1tYXBfbG9jayB0byBiZSB5aWVsZGVkIHRvIHdhaXRpbmcgd3JpdGVycyB1cG9uIGNvbnRlbnRpb24uIEl0IGFsc28gdXBkYXRlcyBlcnJvciBoYW5kbGluZyBhY3Jvc3MgemFwX3ZtYV9mb3JfcmVhcGluZywgX19vb21fcmVhcF90YXNrX21tLCBvb21fcmVhcF90YXNrLCBhbmQgdGhlIHByb2Nlc3NfbXJlbGVhc2Ugc3lzY2FsbC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChhZGRyLCBlbmQsIHJldCwgYXR0ZW1wdHMpIGFyZSBzY2FsYXIgdHlwZXMgYW5kIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHByaW9yIHRvIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBoZWFwL3N0YWNrIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgb3Igc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocyBhZmZlY3RpbmcgcmVhZHMgb2YgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIGludm9sdmUgbG9jayBtYW5hZ2VtZW50LCBsb2NrIGNvbnRlbnRpb24sIFZNQSBpdGVyYXRpb24sIG9yIHBhZ2UgdGFibGUgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjAyLjA5Nzk4MzczOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTA4MzA0ODA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNTVVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6YXBfdm1hX2Zvcl9yZWFwaW5nXCIsXG4gICAgXCJfX29vbV9yZWFwX3Rhc2tfbW1cIixcbiAgICBcIm9vbV9yZWFwX3Rhc2tfbW1cIixcbiAgICBcIm9vbV9yZWFwX3Rhc2tcIixcbiAgICBcIl9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT09NIHJlYXBlciBsb2dpYyBpbiBtbS9vb21fa2lsbC5jIGFuZCBtbS9tZW1vcnkuYyBzbyB0aGF0IFZNQXMgYXJlIHphcHBlZCBpbiAxR0IgY2h1bmtzLCBhbGxvd2luZyBtbWFwX2xvY2sgdG8gYmUgeWllbGRlZCB0byB3YWl0aW5nIHdyaXRlcnMgdXBvbiBjb250ZW50aW9uLiBJdCBhbHNvIHVwZGF0ZXMgZXJyb3IgaGFuZGxpbmcgYWNyb3NzIHphcF92bWFfZm9yX3JlYXBpbmcsIF9fb29tX3JlYXBfdGFza19tbSwgb29tX3JlYXBfdGFzaywgYW5kIHRoZSBwcm9jZXNzX21yZWxlYXNlIHN5c2NhbGwuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChhZGRyLCBlbmQsIHJldCwgYXR0ZW1wdHMpIGFyZSBzY2FsYXIgdHlwZXMgYW5kIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHByaW9yIHRvIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBoZWFwL3N0YWNrIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgb3Igc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocyBhZmZlY3RpbmcgcmVhZHMgb2YgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIGludm9sdmUgbG9jayBtYW5hZ2VtZW50LCBsb2NrIGNvbnRlbnRpb24sIFZNQSBpdGVyYXRpb24sIG9yIHBhZ2UgdGFibGUgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBWTUEgdW5tYXBwaW5nIGxvZ2ljIGZvciBPT00gcmVhcGluZyBhbmQgdGhlIHByb2Nlc3NfbXJlbGVhc2Ugc3lzY2FsbCwgc3BsaXR0aW5nIFZNQSB6YXBwaW5nIGludG8gMUdCIGNodW5rcyBhbmQgeWllbGRpbmcgbW1hcF9sb2NrIHdoZW4gY29udGVuZGVkLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29udHJvbCBmbG93IGFuZCBsb2NraW5nIHNlbWFudGljcyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NrIGludmVyc2lvbnMsIG9yIHN0YXRlIGluY29uc2lzdGVuY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjAyLjA5Nzk4ODI3OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzMzE0Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2FiZmEwM2I4MTIzZDljMjllNTIzYTg0MzNjY2UxNDFkYjk0YWViY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAxMjo0MTowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDA1MTc5YzRiMjA5MGUuLjdhYzE3MjhhNTdjMjkgMTAwNjQ0XFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxcbisrKyBiL21tL2ludGVybmFsLmhcXG5AQCAtNTkzLDcgKzU5Myw4IEBAIHN0cnVjdCB6YXBfZGV0YWlscztcXG4gdm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4gXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpO1xcbi1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuK2ludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCk7XFxuIGludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHQgICBnZnBfdCBnZnApO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IDkyNjI3NmQ0MTkyMDIuLjI1YzM1YTI4YTM5ZDEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC0yMjA3LDE1ICsyMjA3LDE4IEBAIHN0YXRpYyB2b2lkIF9femFwX3ZtYV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIHphcF92bWFfZm9yX3JlYXBpbmcgLSB6YXAgYWxsIHBhZ2UgdGFibGUgZW50cmllcyBpbiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmdcXG4rICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhIHJhbmdlIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xcbiAgKiBAdm1hOiBUaGUgdm1hIHRvIHphcC5cXG4rICogQHN0YXJ0OiBUaGUgZmlyc3QgYWRkcmVzcyB0byB6YXAuXFxuKyAqIEBlbmQ6IE9uZSBwYXN0IHRoZSBsYXN0IGFkZHJlc3MgdG8gemFwLlxcbiAgKlxcbi0gKiBaYXAgYWxsIHBhZ2UgdGFibGUgZW50cmllcyBpbiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmcgZm9yIHVzZSBieSB0aGUgb29tXFxuLSAqIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxcbisgKiBaYXAgdGhlIHBhZ2UgdGFibGUgZW50cmllcyBpbiBbQHN0YXJ0LCBAZW5kKSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmdcXG4rICogZm9yIHVzZSBieSB0aGUgb29tIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxcbiAgKlxcbiAgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiB3ZSB3b3VsZCBoYXZlIHRvIGJsb2NrLlxcbiAgKi9cXG4taW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuK2ludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZClcXG4ge1xcbiBcXHRzdHJ1Y3QgemFwX2RldGFpbHMgZGV0YWlscyA9IHtcXG4gXFx0XFx0LnJlYXBpbmcgPSB0cnVlLFxcbkBAIC0yMjI0LDcgKzIyMjcsNyBAQCBpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xcbiBcXG4gXFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbi1cXHRcXHRcXHRcXHR2bWEtXFx1MDAzZXZtX3N0YXJ0LCB2bWEtXFx1MDAzZXZtX2VuZCk7XFxuK1xcdFxcdFxcdFxcdHN0YXJ0LCBlbmQpO1xcbiBcXHR0bGJfZ2F0aGVyX21tdShcXHUwMDI2dGxiLCB2bWEtXFx1MDAzZXZtX21tKTtcXG4gXFx0aWYgKG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X25vbmJsb2NrKFxcdTAwMjZyYW5nZSkpIHtcXG4gXFx0XFx0dGxiX2ZpbmlzaF9tbXUoXFx1MDAyNnRsYik7XFxuZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jXFxuaW5kZXggNWQ0OGJkODYyYzI3Yi4uY2VlMGEwZjdiNGYyOCAxMDA2NDRcXG4tLS0gYS9tbS9vb21fa2lsbC5jXFxuKysrIGIvbW0vb29tX2tpbGwuY1xcbkBAIC01MDMsMTAgKzUwMywxNyBAQCBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQob29tX3JlYXBlcl93YWl0KTtcXG4gc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb29tX3JlYXBlcl9saXN0O1xcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG9vbV9yZWFwZXJfbG9jayk7XFxuIFxcbi1zdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuKy8qXFxuKyAqIENhbGxlZCB3aXRoIG1tYXBfbG9jayBoZWxkIGZvciByZWFkLiAgUmV0dXJucyB3aXRoIGl0IHN0aWxsIGhlbGQgb24gMFxcbisgKiAoZG9uZSkgb3IgLUVCVVNZIChwYXJ0IGNvdWxkIG5vdCBiZSByZWFwZWQsIHRyeSBhZ2FpbiBsYXRlciksIGFuZCBkcm9wc1xcbisgKiBpdCBvbmx5IG9uIC1FQUdBSU4sIHdoZW4gaXQgd2FzIGhhbmRlZCBvdmVyIHRvIGEgcXVldWVkIHdyaXRlciBhbmQgdGhlXFxuKyAqIGNhbGxlciBzaG91bGQgcmV0YWtlIGl0IGFuZCBzdGFydCBvdmVyLlxcbisgKi9cXG4rc3RhdGljIGludCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIHtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuLVxcdGJvb2wgcmV0ID0gdHJ1ZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyLCBlbmQ7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXHRNQV9TVEFURShtYXMsIFxcdTAwMjZtbS1cXHUwMDNlbW1fbXQsIFVMT05HX01BWCwgVUxPTkdfTUFYKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTUzOCw4ICs1NDUsMjUgQEAgc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXHRcXHQgKiBjb3VudCBlbGV2YXRlZCB3aXRob3V0IGEgZ29vZCByZWFzb24uXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NIQVJFRCkpIHtcXG4tXFx0XFx0XFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hKSlcXG4tXFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFphcCBpbiAxRyBjaHVua3MgYW5kIGhhbmQgbW1hcF9sb2NrIG92ZXIgd2hlbmV2ZXIgYVxcbitcXHRcXHRcXHQgKiB3cml0ZXIgaXMgcXVldWVkIG9uIGl0LCBzbyBpdCBkb2VzIG5vdCB3YWl0IGZvciB0aGVcXG4rXFx0XFx0XFx0ICogd2hvbGUgcmVhcC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGVuZCA9IHZtYS1cXHUwMDNldm1fZW5kO1xcbitcXHRcXHRcXHR3aGlsZSAoZW5kIFxcdTAwM2Ugdm1hLVxcdTAwM2V2bV9zdGFydCkge1xcbitcXHRcXHRcXHRcXHRhZGRyID0gbWF4KHZtYS1cXHUwMDNldm1fc3RhcnQsIEFMSUdOX0RPV04oZW5kIC0gMSwgU1pfMUcpKTtcXG4rXFx0XFx0XFx0XFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hLCBhZGRyLCBlbmQpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0XFx0ZW5kID0gYWRkcjtcXG4rXFx0XFx0XFx0XFx0aWYgKCFtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKSlcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC01NDksMTYgKzU3MywxNyBAQCBzdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIC8qXFxuICAqIFJlYXBzIHRoZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBnaXZlbiB0YXNrLlxcbiAgKlxcbi0gKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcyBhbmQgZmFsc2UgaWYgbm9uZSBvciBwYXJ0IG9mIHRoZSBhZGRyZXNzIHNwYWNlXFxuLSAqIGhhcyBiZWVuIHJlY2xhaW1lZCBhbmQgdGhlIGNhbGxlciBzaG91bGQgcmV0cnkgbGF0ZXIuXFxuKyAqIFJldHVybnMgMCB3aGVuIGRvbmUsIC1FQUdBSU4gaWYgbW1hcF9sb2NrIHdhcyBoYW5kZWQgb3ZlciB0byBhIHdyaXRlclxcbisgKiBhbmQgdGhlIGNhbGxlciBzaG91bGQgc3RhcnQgb3ZlciwgYW5kIC1FQlVTWSBpZiBub25lIG9yIHBhcnQgb2YgdGhlXFxuKyAqIGFkZHJlc3Mgc3BhY2UgaGFzIGJlZW4gcmVjbGFpbWVkIGFuZCB0aGUgY2FsbGVyIHNob3VsZCByZXRyeSBsYXRlci5cXG4gICovXFxuLXN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbitzdGF0aWMgaW50IG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiB7XFxuLVxcdGJvb2wgcmV0ID0gdHJ1ZTtcXG4rXFx0aW50IHJldCA9IDA7XFxuIFxcbiBcXHRpZiAoIW1tYXBfcmVhZF90cnlsb2NrKG1tKSkge1xcbiBcXHRcXHR0cmFjZV9za2lwX3Rhc2tfcmVhcGluZyh0c2stXFx1MDAzZXBpZCk7XFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG5AQCAtNTc2LDcgKzYwMSw5IEBAIHN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXG4gXFx0LyogZmFpbGVkIHRvIHJlYXAgcGFydCBvZiB0aGUgYWRkcmVzcyBzcGFjZS4gVHJ5IGFnYWluIGxhdGVyICovXFxuIFxcdHJldCA9IF9fb29tX3JlYXBfdGFza19tbShtbSk7XFxuLVxcdGlmICghcmV0KVxcbitcXHRpZiAocmV0ID09IC1FQUdBSU4pXFx0LyogaGFuZGVkIHRoZSBsb2NrIG92ZXIsIGFscmVhZHkgZHJvcHBlZCAqL1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIG91dF9maW5pc2g7XFxuIFxcbiBcXHRwcl9pbmZvKFxcXCJvb21fcmVhcGVyOiByZWFwZWQgcHJvY2VzcyAlZCAoJXMpLCBub3cgYW5vbi1yc3M6JWx1a0IsIGZpbGUtcnNzOiVsdWtCLCBzaG1lbS1yc3M6JWx1a0JcXFxcblxcXCIsXFxuQEAgLTU5NSwxNSArNjIyLDE1IEBAIHN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiAjZGVmaW5lIE1BWF9PT01fUkVBUF9SRVRSSUVTIDEwXFxuIHN0YXRpYyB2b2lkIG9vbV9yZWFwX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuIHtcXG4tXFx0aW50IGF0dGVtcHRzID0gMDtcXG4rXFx0aW50IGF0dGVtcHRzID0gMCwgcmV0O1xcbiBcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay1cXHUwMDNlc2lnbmFsLVxcdTAwM2Vvb21fbW07XFxuIFxcbi1cXHQvKiBSZXRyeSB0aGUgbW1hcF9yZWFkX3RyeWxvY2sobW0pIGEgZmV3IHRpbWVzICovXFxuLVxcdHdoaWxlIChhdHRlbXB0cysrIFxcdTAwM2MgTUFYX09PTV9SRUFQX1JFVFJJRVMgXFx1MDAyNlxcdTAwMjYgIW9vbV9yZWFwX3Rhc2tfbW0odHNrLCBtbSkpXFxuK1xcdC8qIFJldHJ5IHRoZSBtbWFwX3JlYWRfdHJ5bG9jayhtbSkgYSBmZXcgdGltZXM7IGhhbmRpbmcgdGhlIGxvY2sgb3ZlciBpcyBub3QgYW4gYXR0ZW1wdCAqL1xcbitcXHR3aGlsZSAoKHJldCA9IG9vbV9yZWFwX3Rhc2tfbW0odHNrLCBtbSkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICAocmV0ID09IC1FQUdBSU4gfHwgKythdHRlbXB0cyBcXHUwMDNjIE1BWF9PT01fUkVBUF9SRVRSSUVTKSlcXG4gXFx0XFx0c2NoZWR1bGVfdGltZW91dF9pZGxlKEhaLzEwKTtcXG4gXFxuLVxcdGlmIChhdHRlbXB0cyBcXHUwMDNjPSBNQVhfT09NX1JFQVBfUkVUUklFUyB8fFxcbi1cXHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSlcXG4rXFx0aWYgKCFyZXQgfHwgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSlcXG4gXFx0XFx0Z290byBkb25lO1xcbiBcXG4gXFx0cHJfaW5mbyhcXFwib29tX3JlYXBlcjogdW5hYmxlIHRvIHJlYXAgcGlkOiVkICglcylcXFxcblxcXCIsXFxuQEAgLTEyMjcsNiArMTI1NCw3IEBAIFNZU0NBTExfREVGSU5FMihwcm9jZXNzX21yZWxlYXNlLCBpbnQsIHBpZGZkLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxcbiBcXHRpZiAoIXJlYXApXFxuIFxcdFxcdGdvdG8gZHJvcF9tbTtcXG4gXFxuK2FnYWluOlxcbiBcXHRpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKSB7XFxuIFxcdFxcdHJldCA9IC1FSU5UUjtcXG4gXFx0XFx0Z290byBkcm9wX21tO1xcbkBAIC0xMjM1LDggKzEyNjMsMTUgQEAgU1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpXFxuIFxcdCAqIENoZWNrIE1NRl9PT01fU0tJUCBhZ2FpbiB1bmRlciBtbWFwX3JlYWRfbG9jayBwcm90ZWN0aW9uIHRvIGVuc3VyZVxcbiBcXHQgKiBwb3NzaWJsZSBjaGFuZ2UgaW4gZXhpdF9tbWFwIGlzIHNlZW5cXG4gXFx0ICovXFxuLVxcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSBcXHUwMDI2XFx1MDAyNiAhX19vb21fcmVhcF90YXNrX21tKG1tKSlcXG4tXFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4rXFx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKSB7XFxuK1xcdFxcdHJldCA9IF9fb29tX3JlYXBfdGFza19tbShtbSk7XFxuK1xcdFxcdGlmIChyZXQgPT0gLUVBR0FJTikge1xcdC8qIGEgd3JpdGVyIGdvdCB0aGUgbG9jaywgcXVldWUgdXAgYWdhaW4gKi9cXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0Z290byBhZ2FpbjtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocmV0ID09IC1FQlVTWSlcXG4rXFx0XFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4rXFx0fVxcbiBcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4gXFxuIGRyb3BfbW06XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjAyLjU4MjA1MTM4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTE5MzUxOTc5MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInphcF92bWFfZm9yX3JlYXBpbmdcIixcbiAgICBcIl9fb29tX3JlYXBfdGFza19tbVwiLFxuICAgIFwib29tX3JlYXBfdGFza19tbVwiLFxuICAgIFwib29tX3JlYXBfdGFza1wiLFxuICAgIFwiX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFZNQSB1bm1hcHBpbmcgbG9naWMgZm9yIE9PTSByZWFwaW5nIGFuZCB0aGUgcHJvY2Vzc19tcmVsZWFzZSBzeXNjYWxsLCBzcGxpdHRpbmcgVk1BIHphcHBpbmcgaW50byAxR0IgY2h1bmtzIGFuZCB5aWVsZGluZyBtbWFwX2xvY2sgd2hlbiBjb250ZW5kZWQuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgc2VtYW50aWNzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2sgaW52ZXJzaW9ucywgb3Igc3RhdGUgaW5jb25zaXN0ZW5jeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YWJmYTAzYjgxMjNkOWMyOWU1MjNhODQzM2NjZTE0MWRiOTRhZWJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTI6NDE6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMDUxNzljNGIyMDkwZS4uN2FjMTcyOGE1N2MyOSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC01OTMsNyArNTkzLDggQEAgc3RydWN0IHphcF9kZXRhaWxzO1xuIHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKTtcbi1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4raW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBlbmQpO1xuIGludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdCAgIGdmcF90IGdmcCk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggOTI2Mjc2ZDQxOTIwMi4uMjVjMzVhMjhhMzlkMSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTIyMDcsMTUgKzIyMDcsMTggQEAgc3RhdGljIHZvaWQgX196YXBfdm1hX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiBcbiAvKipcbi0gKiB6YXBfdm1hX2Zvcl9yZWFwaW5nIC0gemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nXG4rICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhIHJhbmdlIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xuICAqIEB2bWE6IFRoZSB2bWEgdG8gemFwLlxuKyAqIEBzdGFydDogVGhlIGZpcnN0IGFkZHJlc3MgdG8gemFwLlxuKyAqIEBlbmQ6IE9uZSBwYXN0IHRoZSBsYXN0IGFkZHJlc3MgdG8gemFwLlxuICAqXG4tICogWmFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nIGZvciB1c2UgYnkgdGhlIG9vbVxuLSAqIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxuKyAqIFphcCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIGluIFtAc3RhcnQsIEBlbmQpIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xuKyAqIGZvciB1c2UgYnkgdGhlIG9vbSBraWxsZXIuIEh1Z2V0bGIgdm1hcyBhcmUgbm90IHN1cHBvcnRlZC5cbiAgKlxuICAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHdlIHdvdWxkIGhhdmUgdG8gYmxvY2suXG4gICovXG4taW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4raW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBlbmQpXG4ge1xuIFx0c3RydWN0IHphcF9kZXRhaWxzIGRldGFpbHMgPSB7XG4gXHRcdC5yZWFwaW5nID0gdHJ1ZSxcbkBAIC0yMjI0LDcgKzIyMjcsNyBAQCBpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHN0cnVjdCBtbXVfZ2F0aGVyIHRsYjtcbiBcbiBcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXHUwMDNldm1fbW0sXG4tXHRcdFx0XHR2bWEtXHUwMDNldm1fc3RhcnQsIHZtYS1cdTAwM2V2bV9lbmQpO1xuK1x0XHRcdFx0c3RhcnQsIGVuZCk7XG4gXHR0bGJfZ2F0aGVyX21tdShcdTAwMjZ0bGIsIHZtYS1cdTAwM2V2bV9tbSk7XG4gXHRpZiAobW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbm9uYmxvY2soXHUwMDI2cmFuZ2UpKSB7XG4gXHRcdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcbmluZGV4IDVkNDhiZDg2MmMyN2IuLmNlZTBhMGY3YjRmMjggMTAwNjQ0XG4tLS0gYS9tbS9vb21fa2lsbC5jXG4rKysgYi9tbS9vb21fa2lsbC5jXG5AQCAtNTAzLDEwICs1MDMsMTcgQEAgc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG9vbV9yZWFwZXJfd2FpdCk7XG4gc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb29tX3JlYXBlcl9saXN0O1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob29tX3JlYXBlcl9sb2NrKTtcbiBcbi1zdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4rLypcbisgKiBDYWxsZWQgd2l0aCBtbWFwX2xvY2sgaGVsZCBmb3IgcmVhZC4gIFJldHVybnMgd2l0aCBpdCBzdGlsbCBoZWxkIG9uIDBcbisgKiAoZG9uZSkgb3IgLUVCVVNZIChwYXJ0IGNvdWxkIG5vdCBiZSByZWFwZWQsIHRyeSBhZ2FpbiBsYXRlciksIGFuZCBkcm9wc1xuKyAqIGl0IG9ubHkgb24gLUVBR0FJTiwgd2hlbiBpdCB3YXMgaGFuZGVkIG92ZXIgdG8gYSBxdWV1ZWQgd3JpdGVyIGFuZCB0aGVcbisgKiBjYWxsZXIgc2hvdWxkIHJldGFrZSBpdCBhbmQgc3RhcnQgb3Zlci5cbisgKi9cbitzdGF0aWMgaW50IF9fb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdGJvb2wgcmV0ID0gdHJ1ZTtcbitcdHVuc2lnbmVkIGxvbmcgYWRkciwgZW5kO1xuK1x0aW50IHJldCA9IDA7XG4gXHRNQV9TVEFURShtYXMsIFx1MDAyNm1tLVx1MDAzZW1tX210LCBVTE9OR19NQVgsIFVMT05HX01BWCk7XG4gXG4gXHQvKlxuQEAgLTUzOCw4ICs1NDUsMjUgQEAgc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0XHQgKiBjb3VudCBlbGV2YXRlZCB3aXRob3V0IGEgZ29vZCByZWFzb24uXG4gXHRcdCAqL1xuIFx0XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKSB7XG4tXHRcdFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hKSlcbi1cdFx0XHRcdHJldCA9IGZhbHNlO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogWmFwIGluIDFHIGNodW5rcyBhbmQgaGFuZCBtbWFwX2xvY2sgb3ZlciB3aGVuZXZlciBhXG4rXHRcdFx0ICogd3JpdGVyIGlzIHF1ZXVlZCBvbiBpdCwgc28gaXQgZG9lcyBub3Qgd2FpdCBmb3IgdGhlXG4rXHRcdFx0ICogd2hvbGUgcmVhcC5cbitcdFx0XHQgKi9cbitcdFx0XHRlbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuK1x0XHRcdHdoaWxlIChlbmQgXHUwMDNlIHZtYS1cdTAwM2V2bV9zdGFydCkge1xuK1x0XHRcdFx0YWRkciA9IG1heCh2bWEtXHUwMDNldm1fc3RhcnQsIEFMSUdOX0RPV04oZW5kIC0gMSwgU1pfMUcpKTtcbitcdFx0XHRcdGlmICh6YXBfdm1hX2Zvcl9yZWFwaW5nKHZtYSwgYWRkciwgZW5kKSkge1xuK1x0XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdFx0ZW5kID0gYWRkcjtcbitcdFx0XHRcdGlmICghbW1hcF9sb2NrX2lzX2NvbnRlbmRlZChtbSkpXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC01NDksMTYgKzU3MywxNyBAQCBzdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gLypcbiAgKiBSZWFwcyB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgZ2l2ZW4gdGFzay5cbiAgKlxuLSAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzIGFuZCBmYWxzZSBpZiBub25lIG9yIHBhcnQgb2YgdGhlIGFkZHJlc3Mgc3BhY2Vcbi0gKiBoYXMgYmVlbiByZWNsYWltZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5IGxhdGVyLlxuKyAqIFJldHVybnMgMCB3aGVuIGRvbmUsIC1FQUdBSU4gaWYgbW1hcF9sb2NrIHdhcyBoYW5kZWQgb3ZlciB0byBhIHdyaXRlclxuKyAqIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBzdGFydCBvdmVyLCBhbmQgLUVCVVNZIGlmIG5vbmUgb3IgcGFydCBvZiB0aGVcbisgKiBhZGRyZXNzIHNwYWNlIGhhcyBiZWVuIHJlY2xhaW1lZCBhbmQgdGhlIGNhbGxlciBzaG91bGQgcmV0cnkgbGF0ZXIuXG4gICovXG4tc3RhdGljIGJvb2wgb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4rc3RhdGljIGludCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4tXHRib29sIHJldCA9IHRydWU7XG4rXHRpbnQgcmV0ID0gMDtcbiBcbiBcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sobW0pKSB7XG4gXHRcdHRyYWNlX3NraXBfdGFza19yZWFwaW5nKHRzay1cdTAwM2VwaWQpO1xuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTU3Niw3ICs2MDEsOSBAQCBzdGF0aWMgYm9vbCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBcdC8qIGZhaWxlZCB0byByZWFwIHBhcnQgb2YgdGhlIGFkZHJlc3Mgc3BhY2UuIFRyeSBhZ2FpbiBsYXRlciAqL1xuIFx0cmV0ID0gX19vb21fcmVhcF90YXNrX21tKG1tKTtcbi1cdGlmICghcmV0KVxuK1x0aWYgKHJldCA9PSAtRUFHQUlOKVx0LyogaGFuZGVkIHRoZSBsb2NrIG92ZXIsIGFscmVhZHkgZHJvcHBlZCAqL1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJldClcbiBcdFx0Z290byBvdXRfZmluaXNoO1xuIFxuIFx0cHJfaW5mbyhcIm9vbV9yZWFwZXI6IHJlYXBlZCBwcm9jZXNzICVkICglcyksIG5vdyBhbm9uLXJzczolbHVrQiwgZmlsZS1yc3M6JWx1a0IsIHNobWVtLXJzczolbHVrQlxcblwiLFxuQEAgLTU5NSwxNSArNjIyLDE1IEBAIHN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuICNkZWZpbmUgTUFYX09PTV9SRUFQX1JFVFJJRVMgMTBcbiBzdGF0aWMgdm9pZCBvb21fcmVhcF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIHtcbi1cdGludCBhdHRlbXB0cyA9IDA7XG4rXHRpbnQgYXR0ZW1wdHMgPSAwLCByZXQ7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay1cdTAwM2VzaWduYWwtXHUwMDNlb29tX21tO1xuIFxuLVx0LyogUmV0cnkgdGhlIG1tYXBfcmVhZF90cnlsb2NrKG1tKSBhIGZldyB0aW1lcyAqL1xuLVx0d2hpbGUgKGF0dGVtcHRzKysgXHUwMDNjIE1BWF9PT01fUkVBUF9SRVRSSUVTIFx1MDAyNlx1MDAyNiAhb29tX3JlYXBfdGFza19tbSh0c2ssIG1tKSlcbitcdC8qIFJldHJ5IHRoZSBtbWFwX3JlYWRfdHJ5bG9jayhtbSkgYSBmZXcgdGltZXM7IGhhbmRpbmcgdGhlIGxvY2sgb3ZlciBpcyBub3QgYW4gYXR0ZW1wdCAqL1xuK1x0d2hpbGUgKChyZXQgPSBvb21fcmVhcF90YXNrX21tKHRzaywgbW0pKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAocmV0ID09IC1FQUdBSU4gfHwgKythdHRlbXB0cyBcdTAwM2MgTUFYX09PTV9SRUFQX1JFVFJJRVMpKVxuIFx0XHRzY2hlZHVsZV90aW1lb3V0X2lkbGUoSFovMTApO1xuIFxuLVx0aWYgKGF0dGVtcHRzIFx1MDAzYz0gTUFYX09PTV9SRUFQX1JFVFJJRVMgfHxcbi1cdCAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVxuK1x0aWYgKCFyZXQgfHwgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSlcbiBcdFx0Z290byBkb25lO1xuIFxuIFx0cHJfaW5mbyhcIm9vbV9yZWFwZXI6IHVuYWJsZSB0byByZWFwIHBpZDolZCAoJXMpXFxuXCIsXG5AQCAtMTIyNyw2ICsxMjU0LDcgQEAgU1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpXG4gXHRpZiAoIXJlYXApXG4gXHRcdGdvdG8gZHJvcF9tbTtcbiBcbithZ2FpbjpcbiBcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpIHtcbiBcdFx0cmV0ID0gLUVJTlRSO1xuIFx0XHRnb3RvIGRyb3BfbW07XG5AQCAtMTIzNSw4ICsxMjYzLDE1IEBAIFNZU0NBTExfREVGSU5FMihwcm9jZXNzX21yZWxlYXNlLCBpbnQsIHBpZGZkLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxuIFx0ICogQ2hlY2sgTU1GX09PTV9TS0lQIGFnYWluIHVuZGVyIG1tYXBfcmVhZF9sb2NrIHByb3RlY3Rpb24gdG8gZW5zdXJlXG4gXHQgKiBwb3NzaWJsZSBjaGFuZ2UgaW4gZXhpdF9tbWFwIGlzIHNlZW5cbiBcdCAqL1xuLVx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pIFx1MDAyNlx1MDAyNiAhX19vb21fcmVhcF90YXNrX21tKG1tKSlcbi1cdFx0cmV0ID0gLUVBR0FJTjtcbitcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSkge1xuK1x0XHRyZXQgPSBfX29vbV9yZWFwX3Rhc2tfbW0obW0pO1xuK1x0XHRpZiAocmV0ID09IC1FQUdBSU4pIHtcdC8qIGEgd3JpdGVyIGdvdCB0aGUgbG9jaywgcXVldWUgdXAgYWdhaW4gKi9cbitcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdGdvdG8gYWdhaW47XG4rXHRcdH1cbitcdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4rXHRcdFx0cmV0ID0gLUVBR0FJTjtcbitcdH1cbiBcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFxuIGRyb3BfbW06XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MTowMi41ODIwNTM1NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODk4MzgxNDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggaXMgRGVmaW5pdGVseSBXb3J0aCBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIHBhdGNoIGFuZCByZXF1aXJlbWVudHMgc2NyZWFtcywgXCJmdXp6IG1lIVwiIFRoZSBnaXQgZGlmZiBpbmRpY2F0ZXMgc2lnbmlmaWNhbnQgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCB0aGF0J3MgKmFsd2F5cyogYSByZWQgZmxhZyAoaW4gYSBnb29kIHdheSwgZm9yIGZ1enppbmcpLiBXZSdyZSBsb29raW5nIGF0IG1vZGlmaWNhdGlvbnMgdG8gYG1tL2ludGVybmFsLmhgLCBgbW0vbWVtb3J5LmNgLCBhbmQgYG1tL29vbV9raWxsLmNgIOKAkyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhpbmdzLlxuXG5TcGVjaWZpY2FsbHksIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYCBpbiBgbW0vbWVtb3J5LmNgIGhhcyBiZWVuIHVwZGF0ZWQgd2l0aCBzdGFydCBhbmQgZW5kIHBhcmFtZXRlcnMgd2hpY2ggYWZmZWN0cyB0aGUgbW11IG5vdGlmaWVyLiBUaGUgYmlnZ2VyIGNoYW5nZSBpcyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIGBfX29vbV9yZWFwX3Rhc2tfbW1gIGluIGBtbS9vb21fa2lsbC5jYCwgZ29pbmcgZnJvbSBhIGJvb2xlYW4gdG8gYW4gaW50ZWdlci4gVGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIHR3ZWFrOyBpdCdzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gZXJyb3IgaGFuZGxpbmcgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhlIE9PTSByZWFwZXIuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBjaHVua2luZyBWTUEgemFwcGluZyBpbnRvIDFHQiBibG9ja3MgYW5kIGludHJvZHVjaW5nIGEgbG9ja2luZyBjaGVjayB3aXRoIGAtRUFHQUlOYCBpZiB0aGUgbW1hcCBsb2NrIGlzIGNvbnRlbmRlZC4gVGhpcyBpbmNsdWRlcyBwb3RlbnRpYWxseSBoYW5kaW5nIHRoZSBtbWFwIGxvY2sgb2ZmIHRvIGFueSB3cml0ZXJzIHdhaXRpbmcgb24gaXQuXG5cblRoZSBpbnRlcmVzdGluZyBwaWVjZSBpcyB0aGUgYHByb2Nlc3NfbXJlbGVhc2VgIHN5c2NhbGwsIHdoaWNoIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIGFuZCBpdCdzIGJlZW4gdXBkYXRlZCB0byBoYW5kbGUgdGhlIG5ldyByZXR1cm4gdmFsdWVzIGZyb20gYF9fb29tX3JlYXBfdGFza19tbWAuIFRoaXMgbWVhbnMgd2UgaGF2ZSBhIGRpcmVjdCBwYXRoIGZyb20gdXNlcnNwYWNlIHRvIHRoZXNlIHNlbnNpdGl2ZSBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcy4gVGhlIE9PTSByZWFwZXIgaXRzZWxmIGlzIGFsc28gYSBjbGVhciBlbnRyeSBwb2ludCwgc2luY2UgaXQgcnVucyBpbiB0aGUga2VybmVsIHdoZW4gT09NIG9jY3Vycy5cblxuQ29uc2lkZXJpbmcgdGhlIFwiQ29yZSBTdWJzeXN0ZW1zXCIgc2VjdGlvbiBvZiB0aGUgcmVxdWlyZW1lbnRzLCB0aGlzIHBlcmZlY3RseSBmaXRzIHRoZSBiaWxsOiBtZW1vcnkgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHN5c2NhbGwgaGFuZGxpbmcgYXJlIGFsbCBkaXJlY3RseSB0b3VjaGVkLiBgcHJvY2Vzc19tcmVsZWFzZWAgaXMgYSBzeXNjYWxsISBBbmQgdGhlIE9PTSByZWFwZXIgaXMgdHJpZ2dlcmVkIGJ5IE9PTSBldmVudHMuIEl0J3MgYSBoaWdoLXZhbHVlIHRhcmdldC5cblxuVG8gY29uZmlybSB0aGUgZGV0YWlscywgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIGBtbS9vb21fa2lsbC5jYCBhbmQgYG1tL21lbW9yeS5jYCBjb2RlIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgbnVhbmNlIEkgbWlnaHQgaGF2ZSBtaXNzZWQuIEknbGwgcHJvYmFibHkgYmUgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGRpdmUgaW50byB0aGUgZnVuY3Rpb25zIGFuZCBzeW1ib2xzIGludm9sdmVkIGFuZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMsIGJ1dCBJIGFtIGNvbmZpZGVudCB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBjb25jZW50cmF0ZSBmdXp6aW5nIHJlc291cmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI4MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjA5LjQ4MDQzNzk3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9vb21fa2lsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMTAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMTA6XFx0XFxuMTIxMTpcXHRcXHRpZiAoX19yYXRlbGltaXQoXFx1MDAyNnBmb29tX3JzKSlcXG4xMjEyOlxcdFxcdFxcdHByX3dhcm4oXFxcIkh1aCBWTV9GQVVMVF9PT00gbGVha2VkIG91dCB0byB0aGUgI1BGIGhhbmRsZXIuIFJldHJ5aW5nIFBGXFxcXG5cXFwiKTtcXG4xMjEzOlxcdH1cXG4xMjE0OlxcdFxcbjEyMTU6XFx0U1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpXFxuMTIxNjpcXHR7XFxuMTIxNzpcXHQjaWZkZWYgQ09ORklHX01NVVxcbjEyMTg6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xcbjEyMTk6XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbjEyMjA6XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICpwO1xcbjEyMjE6XFx0XFx0dW5zaWduZWQgaW50IGZfZmxhZ3M7XFxuMTIyMjpcXHRcXHRib29sIHJlYXAgPSBmYWxzZTtcXG4xMjIzOlxcdFxcdGxvbmcgcmV0ID0gMDtcXG4xMjI0OlxcdFxcbjEyMjU6XFx0XFx0aWYgKGZsYWdzKVxcbjEyMjY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTIyNzpcXHRcXG4xMjI4OlxcdFxcdHRhc2sgPSBwaWRmZF9nZXRfdGFzayhwaWRmZCwgXFx1MDAyNmZfZmxhZ3MpO1xcbjEyMjk6XFx0XFx0aWYgKElTX0VSUih0YXNrKSlcXG4xMjMwOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHRhc2spO1xcbjEyMzE6XFx0XFxuMTIzMjpcXHRcXHQvKlxcbjEyMzM6XFx0XFx0ICogTWFrZSBzdXJlIHRvIGNob29zZSBhIHRocmVhZCB3aGljaCBzdGlsbCBoYXMgYSByZWZlcmVuY2UgdG8gbW1cXG4xMjM0OlxcdFxcdCAqIGR1cmluZyB0aGUgZ3JvdXAgZXhpdFxcbjEyMzU6XFx0XFx0ICovXFxuMTIzNjpcXHRcXHRwID0gZmluZF9sb2NrX3Rhc2tfbW0odGFzayk7XFxuMTIzNzpcXHRcXHRpZiAoIXApIHtcXG4xMjM4OlxcdFxcdFxcdHJldCA9IC1FU1JDSDtcXG4xMjM5OlxcdFxcdFxcdGdvdG8gcHV0X3Rhc2s7XFxuMTI0MDpcXHRcXHR9XFxuMTI0MTpcXHRcXG4xMjQyOlxcdFxcdG1tID0gcC1cXHUwMDNlbW07XFxuMTI0MzpcXHRcXHRtbWdyYWIobW0pO1xcbjEyNDQ6XFx0XFxuMTI0NTpcXHRcXHRpZiAodGFza193aWxsX2ZyZWVfbWVtKHApKVxcbjEyNDY6XFx0XFx0XFx0cmVhcCA9IHRydWU7XFxuMTI0NzpcXHRcXHRlbHNlIHtcXG4xMjQ4OlxcdFxcdFxcdC8qIEVycm9yIG9ubHkgaWYgdGhlIHdvcmsgaGFzIG5vdCBiZWVuIGRvbmUgYWxyZWFkeSAqL1xcbjEyNDk6XFx0XFx0XFx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVxcbjEyNTA6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xMjUxOlxcdFxcdH1cXG4xMjUyOlxcdFxcdHRhc2tfdW5sb2NrKHApO1xcbjEyNTM6XFx0XFxuMTI1NDpcXHRcXHRpZiAoIXJlYXApXFxuMTI1NTpcXHRcXHRcXHRnb3RvIGRyb3BfbW07XFxuMTI1NjpcXHRcXG4xMjU3OlxcdGFnYWluOlxcbjEyNTg6XFx0XFx0aWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSkge1xcbjEyNTk6XFx0XFx0XFx0cmV0ID0gLUVJTlRSO1xcbjEyNjA6XFx0XFx0XFx0Z290byBkcm9wX21tO1xcbjEyNjE6XFx0XFx0fVxcbjEyNjI6XFx0XFx0LypcXG4xMjYzOlxcdFxcdCAqIENoZWNrIE1NRl9PT01fU0tJUCBhZ2FpbiB1bmRlciBtbWFwX3JlYWRfbG9jayBwcm90ZWN0aW9uIHRvIGVuc3VyZVxcbjEyNjQ6XFx0XFx0ICogcG9zc2libGUgY2hhbmdlIGluIGV4aXRfbW1hcCBpcyBzZWVuXFxuMTI2NTpcXHRcXHQgKi9cXG4xMjY2OlxcdFxcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSkge1xcbjEyNjc6XFx0XFx0XFx0cmV0ID0gX19vb21fcmVhcF90YXNrX21tKG1tKTtcXG4xMjY4OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTikge1xcdC8qIGEgd3JpdGVyIGdvdCB0aGUgbG9jaywgcXVldWUgdXAgYWdhaW4gKi9cXG4xMjY5OlxcdFxcdFxcdFxcdHJldCA9IDA7XFxuMTI3MDpcXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcbjEyNzE6XFx0XFx0XFx0fVxcbjEyNzI6XFx0XFx0XFx0aWYgKHJldCA9PSAtRUJVU1kpXFxuMTI3MzpcXHRcXHRcXHRcXHRyZXQgPSAtRUFHQUlOO1xcbjEyNzQ6XFx0XFx0fVxcbjEyNzU6XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuMTI3NjpcXHRcXG4xMjc3OlxcdGRyb3BfbW06XFxuMTI3ODpcXHRcXHRtbWRyb3AobW0pO1xcbjEyNzk6XFx0cHV0X3Rhc2s6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjA5LjQ4MDU0NTAyNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMTA3NDY3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIGEgTWVtb3J5IFJlbGVhc2UgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYHByb2Nlc3NfbXJlbGVhc2VgLiBUaGUgZmlyc3QgdGhpbmcgSSBzaG91bGQgZG8gaXMgZXN0YWJsaXNoIGl0cyBvcmlnaW4g4oCTIGl0IGxvb2tzIGxpa2UgaXQncyBkZWZpbmVkIHdpdGhpbiBgbW0vb29tX2tpbGwuY2AuIEdvb2QsIHRoYXQgbmFycm93cyBteSBmb2N1cy4gTm93LCBJIHN1c3BlY3QgdGhhdCByZWxhdGVkIGZ1bmN0aW9ucyBvciBjb250ZXh0cyBhcmUgZGVmaW5lZCBuZWFyYnkuIFNvLCBsZXQgbWUganVtcCBvdmVyIHRvIGBtbS9tZW1vcnkuY2AuIEknbGwgc3RhcnQgbG9va2luZyBhcm91bmQgbGluZSAyMjAwIGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIGFuZCBwb3RlbnRpYWxseSByZXZlYWwgaG93IGBwcm9jZXNzX21yZWxlYXNlYCBpbnRlcmFjdHMgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gYXNzZXNzIHRoZSBmdW5jdGlvbidzIG92ZXJhbGwgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjExLjY5MTI5MzU5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMDU6XFx0XFx0XFx0dGxiX2VuZF92bWEodGxiLCB2bWEpO1xcbjIyMDY6XFx0XFx0fVxcbjIyMDc6XFx0fVxcbjIyMDg6XFx0XFxuMjIwOTpcXHQvKipcXG4yMjEwOlxcdCAqIHphcF92bWFfZm9yX3JlYXBpbmcgLSB6YXAgYSByYW5nZSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmdcXG4yMjExOlxcdCAqIEB2bWE6IFRoZSB2bWEgdG8gemFwLlxcbjIyMTI6XFx0ICogQHN0YXJ0OiBUaGUgZmlyc3QgYWRkcmVzcyB0byB6YXAuXFxuMjIxMzpcXHQgKiBAZW5kOiBPbmUgcGFzdCB0aGUgbGFzdCBhZGRyZXNzIHRvIHphcC5cXG4yMjE0OlxcdCAqXFxuMjIxNTpcXHQgKiBaYXAgdGhlIHBhZ2UgdGFibGUgZW50cmllcyBpbiBbQHN0YXJ0LCBAZW5kKSBvZiB0aGUgdm1hIHdpdGhvdXQgYmxvY2tpbmdcXG4yMjE2OlxcdCAqIGZvciB1c2UgYnkgdGhlIG9vbSBraWxsZXIuIEh1Z2V0bGIgdm1hcyBhcmUgbm90IHN1cHBvcnRlZC5cXG4yMjE3OlxcdCAqXFxuMjIxODpcXHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiB3ZSB3b3VsZCBoYXZlIHRvIGJsb2NrLlxcbjIyMTk6XFx0ICovXFxuMjIyMDpcXHRpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4yMjIxOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kKVxcbjIyMjI6XFx0e1xcbjIyMjM6XFx0XFx0c3RydWN0IHphcF9kZXRhaWxzIGRldGFpbHMgPSB7XFxuMjIyNDpcXHRcXHRcXHQucmVhcGluZyA9IHRydWUsXFxuMjIyNTpcXHRcXHR9O1xcbjIyMjY6XFx0XFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4yMjI3OlxcdFxcdHN0cnVjdCBtbXVfZ2F0aGVyIHRsYjtcXG4yMjI4OlxcdFxcbjIyMjk6XFx0XFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbjIyMzA6XFx0XFx0XFx0XFx0XFx0c3RhcnQsIGVuZCk7XFxuMjIzMTpcXHRcXHR0bGJfZ2F0aGVyX21tdShcXHUwMDI2dGxiLCB2bWEtXFx1MDAzZXZtX21tKTtcXG4yMjMyOlxcdFxcdGlmIChtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9ub25ibG9jayhcXHUwMDI2cmFuZ2UpKSB7XFxuMjIzMzpcXHRcXHRcXHR0bGJfZmluaXNoX21tdShcXHUwMDI2dGxiKTtcXG4yMjM0OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjIzNTpcXHRcXHR9XFxuMjIzNjpcXHRcXHRfX3phcF92bWFfcmFuZ2UoXFx1MDAyNnRsYiwgdm1hLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kLCBcXHUwMDI2ZGV0YWlscyk7XFxuMjIzNzpcXHRcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXFx1MDAyNnJhbmdlKTtcXG4yMjM4OlxcdFxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbjIyMzk6XFx0XFx0cmV0dXJuIDA7XFxuMjI0MDpcXHR9XFxuMjI0MTpcXHRcXG4yMjQyOlxcdC8qKlxcbjIyNDM6XFx0ICogdW5tYXBfdm1hcyAtIHVubWFwIGEgcmFuZ2Ugb2YgbWVtb3J5IGNvdmVyZWQgYnkgYSBsaXN0IG9mIHZtYSdzXFxuMjI0NDpcXHQgKiBAdGxiOiBhZGRyZXNzIG9mIHRoZSBjYWxsZXIncyBzdHJ1Y3QgbW11X2dhdGhlclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MToxMS42OTE1NDU1MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzMTM1NzExNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBPT00gS2lsbGVyJ3MgTWVtb3J5IFJlY2xhbWF0aW9uIExvZ2ljKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiB0aGUgT09NIGtpbGxlci4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IG1lbW9yeSBpcyByZWNsYWltZWQgd2hlbiB0aGluZ3MgZ28gc291dGggYW5kIGEgdGFzayBpcyB0YXJnZXRlZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBtbS9vb21fa2lsbC5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgY29kZSBhcm91bmQgdGhlIGBvb21fcmVhcF90YXNrX21tYCBhbmQgdGhlIGBfX29vbV9yZWFwX3Rhc2tfbW1gIGZ1bmN0aW9ucy4gSSdtIGV4cGVjdGluZyB0aGVzZSBhcmUga2V5IGFyZWFzIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNsZWFudXAgcmVsYXRlZCB0byB0aGUgdmljdGltIHRhc2sncyBtZW1vcnkgc3BhY2UuIEknbGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyBpbiBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBkaWZmZXJlbnQgbWVtb3J5IG1hbmFnZW1lbnQgc2NlbmFyaW9zLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6ODM0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDE6MjQuODI3MjYwMzgyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL29vbV9raWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdCAqL1xcbiA1MDE6XFx0c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb29tX3JlYXBlcl90aDtcXG4gNTAyOlxcdHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChvb21fcmVhcGVyX3dhaXQpO1xcbiA1MDM6XFx0c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb29tX3JlYXBlcl9saXN0O1xcbiA1MDQ6XFx0c3RhdGljIERFRklORV9TUElOTE9DSyhvb21fcmVhcGVyX2xvY2spO1xcbiA1MDU6XFx0XFxuIDUwNjpcXHQvKlxcbiA1MDc6XFx0ICogQ2FsbGVkIHdpdGggbW1hcF9sb2NrIGhlbGQgZm9yIHJlYWQuICBSZXR1cm5zIHdpdGggaXQgc3RpbGwgaGVsZCBvbiAwXFxuIDUwODpcXHQgKiAoZG9uZSkgb3IgLUVCVVNZIChwYXJ0IGNvdWxkIG5vdCBiZSByZWFwZWQsIHRyeSBhZ2FpbiBsYXRlciksIGFuZCBkcm9wc1xcbiA1MDk6XFx0ICogaXQgb25seSBvbiAtRUFHQUlOLCB3aGVuIGl0IHdhcyBoYW5kZWQgb3ZlciB0byBhIHF1ZXVlZCB3cml0ZXIgYW5kIHRoZVxcbiA1MTA6XFx0ICogY2FsbGVyIHNob3VsZCByZXRha2UgaXQgYW5kIHN0YXJ0IG92ZXIuXFxuIDUxMTpcXHQgKi9cXG4gNTEyOlxcdHN0YXRpYyBpbnQgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiA1MTM6XFx0e1xcbiA1MTQ6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDUxNTpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIGVuZDtcXG4gNTE2OlxcdFxcdGludCByZXQgPSAwO1xcbiA1MTc6XFx0XFx0TUFfU1RBVEUobWFzLCBcXHUwMDI2bW0tXFx1MDAzZW1tX210LCBVTE9OR19NQVgsIFVMT05HX01BWCk7XFxuIDUxODpcXHRcXG4gNTE5OlxcdFxcdC8qXFxuIDUyMDpcXHRcXHQgKiBUZWxsIGFsbCB1c2VycyBvZiBnZXRfdXNlci9jb3B5X2Zyb21fdXNlciBldGMuLi4gdGhhdCB0aGUgY29udGVudFxcbiA1MjE6XFx0XFx0ICogaXMgbm8gbG9uZ2VyIHN0YWJsZS4gTm8gYmFycmllcnMgcmVhbGx5IG5lZWRlZCBiZWNhdXNlIHVubWFwcGluZ1xcbiA1MjI6XFx0XFx0ICogc2hvdWxkIGltcGx5IGJhcnJpZXJzIGFscmVhZHkgYW5kIHRoZSByZWFkZXIgd291bGQgaGl0IGEgcGFnZSBmYXVsdFxcbiA1MjM6XFx0XFx0ICogaWYgaXQgc3R1bWJsZWQgb3ZlciBhIHJlYXBlZCBtZW1vcnkuXFxuIDUyNDpcXHRcXHQgKi9cXG4gNTI1OlxcdFxcdG1tX2ZsYWdzX3NldChNTUZfVU5TVEFCTEUsIG1tKTtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0LypcXG4gNTI4OlxcdFxcdCAqIEl0IG1pZ2h0IHN0YXJ0IHJhY2luZyB3aXRoIHRoZSBkeWluZyB0YXNrIGFuZCBjb21wZXRlIGZvciBzaGFyZWRcXG4gNTI5OlxcdFxcdCAqIHJlc291cmNlcyAtIGUuZy4gcGFnZSB0YWJsZSBsb2NrIGNvbnRlbnRpb24gaGFzIGJlZW4gb2JzZXJ2ZWQuXFxuIDUzMDpcXHRcXHQgKiBSZWR1Y2UgdGhvc2UgcmFjZXMgYnkgcmVhcGluZyB0aGUgb29tIHZpY3RpbSBmcm9tIHRoZSBvdGhlciBlbmRcXG4gNTMxOlxcdFxcdCAqIG9mIHRoZSBhZGRyZXNzIHNwYWNlLlxcbiA1MzI6XFx0XFx0ICovXFxuIDUzMzpcXHRcXHRtYXNfZm9yX2VhY2hfcmV2KFxcdTAwMjZtYXMsIHZtYSwgMCkge1xcbiA1MzQ6XFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fSFVHRVRMQnxWTV9QRk5NQVApKVxcbiA1MzU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDUzNjpcXHRcXG4gNTM3OlxcdFxcdFxcdC8qXFxuIDUzODpcXHRcXHRcXHQgKiBPbmx5IGFub255bW91cyBwYWdlcyBoYXZlIGEgZ29vZCBjaGFuY2UgdG8gYmUgZHJvcHBlZFxcbiA1Mzk6XFx0XFx0XFx0ICogd2l0aG91dCBhZGRpdGlvbmFsIHN0ZXBzIHdoaWNoIHdlIGNhbm5vdCBhZmZvcmQgYXMgd2VcXG4gNTQwOlxcdFxcdFxcdCAqIGFyZSBPT00gYWxyZWFkeS5cXG4gNTQxOlxcdFxcdFxcdCAqXFxuIDU0MjpcXHRcXHRcXHQgKiBXZSBkbyBub3QgZXZlbiBjYXJlIGFib3V0IGZzIGJhY2tlZCBwYWdlcyBiZWNhdXNlIGFsbFxcbiA1NDM6XFx0XFx0XFx0ICogd2hpY2ggYXJlIHJlY2xhaW1hYmxlIGhhdmUgYWxyZWFkeSBiZWVuIHJlY2xhaW1lZCBhbmRcXG4gNTQ0OlxcdFxcdFxcdCAqIHdlIGRvIG5vdCB3YW50IHRvIGJsb2NrIGV4aXRfbW1hcCBieSBrZWVwaW5nIG1tIHJlZlxcbiA1NDU6XFx0XFx0XFx0ICogY291bnQgZWxldmF0ZWQgd2l0aG91dCBhIGdvb2QgcmVhc29uLlxcbiA1NDY6XFx0XFx0XFx0ICovXFxuIDU0NzpcXHRcXHRcXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NIQVJFRCkpIHtcXG4gNTQ4OlxcdFxcdFxcdFxcdC8qXFxuIDU0OTpcXHRcXHRcXHRcXHQgKiBaYXAgaW4gMUcgY2h1bmtzIGFuZCBoYW5kIG1tYXBfbG9jayBvdmVyIHdoZW5ldmVyIGFcXG4gNTUwOlxcdFxcdFxcdFxcdCAqIHdyaXRlciBpcyBxdWV1ZWQgb24gaXQsIHNvIGl0IGRvZXMgbm90IHdhaXQgZm9yIHRoZVxcbiA1NTE6XFx0XFx0XFx0XFx0ICogd2hvbGUgcmVhcC5cXG4gNTUyOlxcdFxcdFxcdFxcdCAqL1xcbiA1NTM6XFx0XFx0XFx0XFx0ZW5kID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxuIDU1NDpcXHRcXHRcXHRcXHR3aGlsZSAoZW5kIFxcdTAwM2Ugdm1hLVxcdTAwM2V2bV9zdGFydCkge1xcbiA1NTU6XFx0XFx0XFx0XFx0XFx0YWRkciA9IG1heCh2bWEtXFx1MDAzZXZtX3N0YXJ0LCBBTElHTl9ET1dOKGVuZCAtIDEsIFNaXzFHKSk7XFxuIDU1NjpcXHRcXHRcXHRcXHRcXHRpZiAoemFwX3ZtYV9mb3JfcmVhcGluZyh2bWEsIGFkZHIsIGVuZCkpIHtcXG4gNTU3OlxcdFxcdFxcdFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4gNTU4OlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NTk6XFx0XFx0XFx0XFx0XFx0fVxcbiA1NjA6XFx0XFx0XFx0XFx0XFx0ZW5kID0gYWRkcjtcXG4gNTYxOlxcdFxcdFxcdFxcdFxcdGlmICghbW1hcF9sb2NrX2lzX2NvbnRlbmRlZChtbSkpXFxuIDU2MjpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNTYzOlxcdFxcbiA1NjQ6XFx0XFx0XFx0XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuIDU2NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gNTY2OlxcdFxcdFxcdFxcdH1cXG4gNTY3OlxcdFxcdFxcdH1cXG4gNTY4OlxcdFxcdH1cXG4gNTY5OlxcdFxcbiA1NzA6XFx0XFx0cmV0dXJuIHJldDtcXG4gNTcxOlxcdH1cXG4gNTcyOlxcdFxcbiA1NzM6XFx0LypcXG4gNTc0OlxcdCAqIFJlYXBzIHRoZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBnaXZlbiB0YXNrLlxcbiA1NzU6XFx0ICpcXG4gNTc2OlxcdCAqIFJldHVybnMgMCB3aGVuIGRvbmUsIC1FQUdBSU4gaWYgbW1hcF9sb2NrIHdhcyBoYW5kZWQgb3ZlciB0byBhIHdyaXRlclxcbiA1Nzc6XFx0ICogYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHN0YXJ0IG92ZXIsIGFuZCAtRUJVU1kgaWYgbm9uZSBvciBwYXJ0IG9mIHRoZVxcbiA1Nzg6XFx0ICogYWRkcmVzcyBzcGFjZSBoYXMgYmVlbiByZWNsYWltZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5IGxhdGVyLlxcbiA1Nzk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjI0LjgyNzM3MjMzMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM4OTA2NjYxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaGVyZS5cblxuKipJbnZlc3RpZ2F0aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGluIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgaW4gdGhpcyBzZWN0aW9uIG9mIGNvZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBgQ09ORklHX2AgZmxhZ3MgdGhhdCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBPT00ga2lsbGVyIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgbW0vb29tX2tpbGwuY2AgZmlsZS4gSSByZW1lbWJlciBzZWVpbmcgYSBwb3RlbnRpYWwgZGVwZW5kZW5jeSBvbiBgQ09ORklHX01NVWAgaW4gYHByb2Nlc3NfbXJlbGVhc2VgLCB3aXRoIHRoZSB1c2Ugb2YgYCNpZmRlZmAuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBrbm93IGlmIGBvb21fcmVhcGVyYCBkZXBlbmRzIG9uIGFueXRoaW5nLiBUbyBkbyB0aGF0LCBJJ2xsIG5lZWQgdG8gZ28gYmFjayBpbiB0aGUgZmlsZSwgbWF5YmUgNTAwIGxpbmVzIG9yIHNvLCB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhlIGRlZmluaXRpb24uIElmIHRoYXQncyBub3QgZnJ1aXRmdWwsIEknbGwgaGF2ZSB0byBkbyBhIG1vcmUgZ2VuZXJhbCBzZWFyY2ggZm9yIGBDT05GSUdfYCB3aXRoaW4gYG1tL29vbV9raWxsLmNgIHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg1MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDE6MjguNzE4MDQyMTA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg2MTgwMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9vb21fa2lsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL29vbV9raWxsLmM9NzI9c3RhdGljIGlubGluZSBib29sIGlzX21lbWNnX29vbShzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxcbi0tXFxubW0vb29tX2tpbGwuYy03Ni1cXG5tbS9vb21fa2lsbC5jOjc3OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL29vbV9raWxsLmMtNzgtLyoqXFxuLS1cXG5tbS9vb21fa2lsbC5jPTEyMj1zdGF0aWMgYm9vbCBvb21fY3B1c2V0X2VsaWdpYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxcbi0tXFxubW0vb29tX2tpbGwuYy0xMjUtfVxcbm1tL29vbV9raWxsLmM6MTI2OiNlbmRpZiAvKiBDT05GSUdfTlVNQSAqL1xcbm1tL29vbV9raWxsLmMtMTI3LVxcbi0tXFxubW0vb29tX2tpbGwuYz0yNDk9c3RhdGljIGVudW0gb29tX2NvbnN0cmFpbnQgY29uc3RyYWluZWRfYWxsb2Moc3RydWN0IG9vbV9jb250cm9sICpvYylcXG4tLVxcbm1tL29vbV9raWxsLmMtMjY0LVxcbm1tL29vbV9raWxsLmM6MjY1OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXFxubW0vb29tX2tpbGwuYy0yNjYtXFx0XFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcXG4tLVxcbm1tL29vbV9raWxsLmM9NDQ5PXN0YXRpYyB2b2lkIGR1bXBfaGVhZGVyKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxuLS1cXG5tbS9vb21fa2lsbC5jLTQ1My1cXHRcXHRcXHRjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZW9vbV9zY29yZV9hZGopO1xcbm1tL29vbV9raWxsLmM6NDU0OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikgXFx1MDAyNlxcdTAwMjYgb2MtXFx1MDAzZW9yZGVyKVxcbm1tL29vbV9raWxsLmMtNDU1LVxcdFxcdHByX3dhcm4oXFxcIkNPTVBBQ1RJT04gaXMgZGlzYWJsZWQhISFcXFxcblxcXCIpO1xcbi0tXFxubW0vb29tX2tpbGwuYz00ODQ9Ym9vbCBwcm9jZXNzX3NoYXJlc19tbShjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vb29tX2tpbGwuYy00OTUtXFxubW0vb29tX2tpbGwuYzo0OTY6I2lmZGVmIENPTkZJR19NTVVcXG5tbS9vb21fa2lsbC5jLTQ5Ny0vKlxcbi0tXFxubW0vb29tX2tpbGwuYz03MDY9c3RhdGljIHZvaWQgcXVldWVfb29tX3JlYXBlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbm1tL29vbV9raWxsLmMtNzE3LVxcbm1tL29vbV9raWxsLmM6NzE4OiNpZmRlZiBDT05GSUdfU1lTQ1RMXFxubW0vb29tX2tpbGwuYy03MTktc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1fb29tX2tpbGxfdGFibGVbXSA9IHtcXG4tLVxcbm1tL29vbV9raWxsLmM9NzQ2PXN0YXRpYyBpbnQgX19pbml0IG9vbV9pbml0KHZvaWQpXFxuLS1cXG5tbS9vb21fa2lsbC5jLTc0OC1cXHRvb21fcmVhcGVyX3RoID0ga3RocmVhZF9ydW4ob29tX3JlYXBlciwgTlVMTCwgXFxcIm9vbV9yZWFwZXJcXFwiKTtcXG5tbS9vb21fa2lsbC5jOjc0OTojaWZkZWYgQ09ORklHX1NZU0NUTFxcbm1tL29vbV9raWxsLmMtNzUwLVxcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFxcXCJ2bVxcXCIsIHZtX29vbV9raWxsX3RhYmxlKTtcXG4tLVxcbm1tL29vbV9raWxsLmM9NzU2PXN0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV9vb21fcmVhcGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxubW0vb29tX2tpbGwuYy03NTgtfVxcbm1tL29vbV9raWxsLmM6NzU5OiNlbmRpZiAvKiBDT05GSUdfTU1VICovXFxubW0vb29tX2tpbGwuYy03NjAtXFxuLS1cXG5tbS9vb21fa2lsbC5jPTEyMTU9U1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpXFxubW0vb29tX2tpbGwuYy0xMjE2LXtcXG5tbS9vb21fa2lsbC5jOjEyMTc6I2lmZGVmIENPTkZJR19NTVVcXG5tbS9vb21fa2lsbC5jLTEyMTgtXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xcbi0tXFxubW0vb29tX2tpbGwuYy0xMjgzLVxcdHJldHVybiAtRU5PU1lTO1xcbm1tL29vbV9raWxsLmM6MTI4NDojZW5kaWYgLyogQ09ORklHX01NVSAqL1xcbm1tL29vbV9raWxsLmMtMTI4NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjI4Ljg5NjY2NzMwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NzcyODk5MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTU1VIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgQ09ORklHX01NVWAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiBvbiBhbWQ2NCwgcmlnaHQ/IEl0J3MgdGhlIGRlZmF1bHQsIGl0J3MgZXhwZWN0ZWQuIEJ1dCBJJ20gZmVlbGluZyBhIGxpdHRsZSBwYXJhbm9pZCB0b2RheS4gSXMgdGhlcmUgKmFjdHVhbGx5KiBhbnkgc2NlbmFyaW8gd2hlcmUgaXQncyAqbm90KiBlbmFibGVkLCBvciBhIHJlbGF0ZWQgY29uZmlndXJhdGlvbiB0aGF0J3Mgc3VidGx5IGRpZmZlcmVudD8gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuTGV0J3MgZGl2ZSBpbiBhbmQgY29uZmlybS4gSSdtIGdvaW5nIHRvIGNoZWNrIGhvdyBgcHJvY2Vzc19tcmVsZWFzZWAgaXMgaGFuZGxlZC4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYm90aCB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBlbnRyaWVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdGhlIHJlbGVhc2Ugb2YgbWVtb3J5IHJlc291cmNlcy4gRGlnZ2luZyBpbnRvIHRob3NlIGZpbGVzIGlzIHRoZSBrZXkgdG8gZnVsbHkgdW5kZXJzdGFuZGluZyB0aGUgTU1VIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA5NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjMzLjY2OTU2ODc2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NzMzODUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nlc3NfbXJlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MTozMy43MTU1NDgzOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODU3NTg2ODY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEknbSBhbiBleHBlcnQgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpZWQgY29udGV4dDpcblxuKipEaXZpbmcgaW50byB0aGUgQnVpbGQgUHJvY2VzcyoqXG5cbk9rYXksIHNvIHRoZSBpbnN0cnVjdGlvbiBpcyBjcnlzdGFsIGNsZWFyOiBcIkxldCdzIGNoZWNrIGBtbS9NYWtlZmlsZWAuXCIgTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCBzb21ldGhpbmcgd2l0aGluIHRoZSBgbW1gIGRpcmVjdG9yeSdzIE1ha2VmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZywgZGVidWdnaW5nLCBvciBtb2RpZnlpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGNvbXBvbmVudC4gVGhpcyBwcm9iYWJseSBpc24ndCBhIGNhc3VhbCBnbGFuY2U7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcuIEknbSBsaWtlbHkgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBidWlsZCB0YXJnZXRzLCBjb21waWxlciBmbGFncywgYW5kIHRoZSBvdmVyYWxsIHN0cnVjdHVyZS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGlzc3VlcywgYm90dGxlbmVja3MsIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBmaWxlbmFtZTsgaXQgc2NyZWFtcyBcIm1lbW9yeSBtYW5hZ2VtZW50XCIgb3IgcGVyaGFwcyBzb21lIHNvcnQgb2YgXCJtb2R1bGVcIiB0aGF0J3MgY3JpdGljYWwgdG8gbWVtb3J5IG9wZXJhdGlvbnMsIHNvIHRoYXQgY29udGV4dCBndWlkZXMgbXkgaW5pdGlhbCBzZWFyY2guIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNTYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQxOjUyLjI5MTQyMDQ2M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4MTE4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib29tX2tpbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NDk9ZW5kaWZcXG5tbS9NYWtlZmlsZS01MC1cXG5tbS9NYWtlZmlsZTo1MTpvYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbm1tL01ha2VmaWxlLTUyLVxcdFxcdFxcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDE6NTIuMzUyMjQ1MTYyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgxMjkyODc1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgT09NIFJlYXBlciBTeW1ib2wgVmlzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgT09NIHJlYXBlcidzIHN5bWJvbHMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCBidWlsZC4gYG9vbV9raWxsLm9gIGlzIGFsd2F5cyBidWlsdCwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCAoYG9iai15YCkuIEluc2lkZSBgbW0vb29tX2tpbGwuY2AsIHRoZSBNTVUgaXMgdGhlIGtleSBlbmFibGVyIGZvciB0aGUgcmVhcGVyIGFuZCBgcHJvY2Vzc19tcmVsZWFzZWAuIE9uIGFtZDY0LCB0aGUgTU1VIGlzICphbHdheXMqIGVuYWJsZWQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBBbHRob3VnaCBpdCdzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiAoYENPTkZJR19NTVU9eWApLCBpdCBzdGlsbCBmZWVscyBsaWtlIGl0J3Mgd29ydGggZXhwbGljaXRseSBpbmNsdWRpbmcgXCJNTVVcIiBpbiBvdXIgY29uZmlndXJhdGlvbiBjb25zaWRlcmF0aW9ucywgaXQgYWRkcyBjbGFyaXR5LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYmV5b25kIHRoZSBNTVUuIGBDT05GSUdfUElERkRgIGlzbid0IGEgZmFjdG9yIGhlcmUsIGFzIGl0J3MgYSBjb3JlIGtlcm5lbCBmZWF0dXJlLlxuXG5UbyBjb25maXJtIHRoZSBNTVUgc2l0dWF0aW9uLCBJJ2xsIHF1aWNrbHkgY2hlY2sgYGluaXQvS2NvbmZpZ2AgYW5kIGBhcmNoL3g4Ni9LY29uZmlnYCB0byBiZSBzdXJlLiBZZXAsIE1NVSBpcyBkZWZpbml0ZWx5IHN0YW5kYXJkLiBJIHRoaW5rIGluY2x1ZGluZyBcIk1NVVwiIGluIGBFbmFibGVDb25maWdzYCBpcyB0aGUgYmVzdCBhcHByb2FjaDsgaXQncyBzYWZlIGFuZCBhY2N1cmF0ZSwgZXZlbiBpZiBpdCdzIGFsd2F5cyAneScuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgRm9jdXNTeW1ib2xzYCB0byBzZWUgd2hhdCBjaGFuZ2VkLiBGaXJzdCwgSSBzZWUgYHphcF92bWFfZm9yX3JlYXBpbmdgIGluIGBtbS9tZW1vcnkuY2AuIFRoaXMgaXNuJ3QgdWJpcXVpdG91cywgYW5kIGl0J3MgYmVlbiBkaXJlY3RseSBtb2RpZmllZCwgc28gaXQncyBhIHByaW1lIGNhbmRpZGF0ZS4gTGV0J3MgZGlnIGRlZXBlcjogdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGlzIGBpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpYC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXM6IGlzIGl0IHN0YXRpYywgZXhwb3J0ZWQsIG9yIGZpbGUtc2NvcGU/IE5vcGUsIGl0J3Mgbm90IHN0YXRpYzsgaXQncyBkZWNsYXJlZCBpbiBgbW0vaW50ZXJuYWwuaGAgYXMgYGludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKC4uLilgLiBTbywgYHphcF92bWFfZm9yX3JlYXBpbmdgICp3aWxsKiBiZSBhIHN5bWJvbCBpbiBgdm1saW51eGAuXG5cbk5leHQsIEknbGwgZXhhbWluZSB0aGUgc3ltYm9scyBpbiBgbW0vb29tX2tpbGwuY2AuIEkgc2VlIGBfX29vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza19tbWAsIGFuZCBgb29tX3JlYXBfdGFza2AuIFRob3NlIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucywgc28gdGhleSB3b24ndCBiZSB2aXNpYmxlIG91dHNpZGUgdGhlIGZpbGUuIEhvd2V2ZXIsIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCAvIGBwcm9jZXNzX21yZWxlYXNlYCBhcmUgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgYFNZU0NBTExfREVGSU5FMihwcm9jZXNzX21yZWxlYXNlLCAuLi4pYCBkZWZpbmVzIHRoZSBzeXNjYWxsIHZhcmlhbnRzOiBgX19zZV9zeXNfcHJvY2Vzc19tcmVsZWFzZWAsIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCwgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCBhbmQgYHByb2Nlc3NfbXJlbGVhc2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvZiB0aG9zZSB0aGUgc3l6a2FsbGVyIHN5bWJvbCBmaWx0ZXJzIHVzZSwgYmVjYXVzZSBzeXprYWxsZXIncyB1c3VhbGx5IGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGBfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZWAgb3IgYF9fZG9fc3lzX3Byb2Nlc3NfbXJlbGVhc2VgIG9yIHBsYWluIGBwcm9jZXNzX21yZWxlYXNlYC4gSSdsbCBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBob3cgc3l6a2FsbGVyIGhhbmRsZXMgc3lzY2FsbHMsIG9yIGNoZWNrIHdoYXQgZXhpc3RzIGluIGBvb21fa2lsbC5jYC4gQSBxdWljayBncmVwIG9mIHRoZSBjb2RlYmFzZSBmb3IgYHByb2Nlc3NfbXJlbGVhc2VgIHNob3VsZCBjbGVhciB0aGluZ3MgdXAgYW5kIGNvbmZpcm0gd2hhdCBleGFjdGx5IGlzIGV4cG9zZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjcyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjAwLjQ4MTUzNTE0OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwNzE2MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nlc3NfbXJlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL29vbV9raWxsLmM9MTIwMD12b2lkIHBhZ2VmYXVsdF9vdXRfb2ZfbWVtb3J5KHZvaWQpXFxuLS1cXG5tbS9vb21fa2lsbC5jLTEyMTQtXFxubW0vb29tX2tpbGwuYzoxMjE1OlNZU0NBTExfREVGSU5FMihwcm9jZXNzX21yZWxlYXNlLCBpbnQsIHBpZGZkLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxcbm1tL29vbV9raWxsLmMtMTIxNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjAwLjc4MjI2MDYxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDUwNTk1NTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgSnVzdGlmaWNhdGlvbiBmb3IgT09NIFJlYXBpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBpbnZlc3RpZ2F0aW5nIGhvdyB0aGUgYFNZU0NBTExfREVGSU5FYCBtYWNybyB3b3JrcyBvbiB4ODZfNjQsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGUgYHByb2Nlc3NfbXJlbGVhc2VgIHN5c3RlbSBjYWxsIGlzIGltcGxlbWVudGVkLiBJJ20gc2VlaW5nIGZ1bmN0aW9ucyBsaWtlIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCBhbmQgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCBhcmUgZ2VuZXJhdGVkLlxuXG5Ob3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgc3ltYm9scyBhcmUgKmFjdHVhbGx5KiBiZWluZyBjaGFuZ2VkIHdpdGhpbiBgbW0vb29tX2tpbGwuY2AuIEkndmUgaWRlbnRpZmllZCBhIGZldyBrZXkgb25lczogYHphcF92bWFfZm9yX3JlYXBpbmdgLCBgX19vb21fcmVhcF90YXNrX21tYCwgYG9vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza2AsIGFuZCB0aG9zZSBgcHJvY2Vzc19tcmVsZWFzZWAgc3lzdGVtIGNhbGwgaGFuZGxlcnMuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3c6IGFyZSB0aGVzZSBmdW5jdGlvbnMgKnViaXF1aXRvdXMqPyBJZiB0aGV5J3JlIGNhbGxlZCBldmVyeXdoZXJlLCB0aGV5J3JlIG5vaXNlLCBhY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMgaW4gU2VjdGlvbiA0LiBXZSB3YW50IHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNoYW5nZXMsIG5vdCBmbG9vZCB0aGUgZnV6emVyIHdpdGggaXJyZWxldmFudCBpbmZvcm1hdGlvbi4gU2VjdGlvbiA0IGNsZWFybHkgc3RhdGVzIHRoYXQgXCJ1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHNcIiBzaG91bGQgYmUgYXZvaWRlZC4gV2UgbmVlZCBcIlRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UU1wiLlxuXG5MZXQncyBsb29rIGF0IGB6YXBfdm1hX2Zvcl9yZWFwaW5nYC4gSXQncyBvbmx5IGNhbGxlZCBieSBgX19vb21fcmVhcF90YXNrX21tYC4gSXQncyBub3QgYSBnZW5lcmljIGZ1bmN0aW9uIGxpa2UgYGtmcmVlYCBvciBgZXhpdF9tbWFwYC4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgZm9yICpyZWFwaW5nKi4gVGhlbiBgX19vb21fcmVhcF90YXNrX21tYCBpcyBjYWxsZWQgb25seSBkdXJpbmcgT09NIHJlYXBpbmcgb3IgYHByb2Nlc3NfbXJlbGVhc2VgLCBhbmQgYG9vbV9yZWFwX3Rhc2tfbW1gIGlzIG9ubHkgY2FsbGVkIGJ5IGBvb21fcmVhcF90YXNrYC4gYG9vbV9yZWFwX3Rhc2tgIGlzIGl0c2VsZiBjYWxsZWQgYnkgdGhlIE9PTSByZWFwZXIga3RocmVhZC4gRmluYWxseSwgd2UgaGF2ZSB0aGUgc3lzdGVtIGNhbGwgZW50cnlwb2ludHMsIGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCBhbmQgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCwgd2hpY2ggYXJlIHRoZSBhY2Nlc3MgcG9pbnRzIGZvciB0aGUgYHByb2Nlc3NfbXJlbGVhc2VgIHN5c2NhbGwuXG5cblNvLCBhcmUgdGhlc2UgdWJpcXVpdG91cz8gQWJzb2x1dGVseSBub3QhIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaGlnaGx5IHNwZWNpYWxpemVkIGZvciBPT00gcmVhcGluZyBhbmQgdGhlIGBwcm9jZXNzX21yZWxlYXNlYCBtZWNoYW5pc20uIFRoZXkncmUgcmFyZWx5IGludm9rZWQgdW5sZXNzIHRoZXJlJ3MgYW4gT09NIHNpdHVhdGlvbiBvciBgcHJvY2Vzc19tcmVsZWFzZWAgaXMgZXhwbGljaXRseSBjYWxsZWQuIFRoaXMgaXMgKnBlcmZlY3QqLiBUaGlzIG1ha2VzIHRoZW0gaWRlYWwgY2FuZGlkYXRlcyBmb3Igd2hhdCB3ZSBjYWxsIFwiRm9jdXNTeW1ib2xzXCIsIGFzIHRoZXkgYXJlIGhpZ2hseSBzcGVjaWZpYyB0byB0aGUgYmVoYXZpb3Igd2UncmUgdGFyZ2V0aW5nLlxuXG5Ob3csIGp1c3QgdG8gYmUgcHJlY2lzZSwgSSdsbCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IHN5bWJvbCBuYW1lcyBnZW5lcmF0ZWQgYnkgdGhlIGBTWVNDQUxMX0RFRklORWAgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvc3lzY2FsbHMuaGAuIFdlIHdhbnQgbm8gYW1iaWd1aXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA2OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MjoxMS4yODgyMjAwMTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzkwMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBTWVNDQUxMX0RFRklORVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTIxMT1zdGF0aWMgaW5saW5lIGludCBpc19zeXNjYWxsX3RyYWNlX2V2ZW50KHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICp0cF9ldmVudClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0yMTctI2lmbmRlZiBTWVNDQUxMX0RFRklORTBcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjE4OiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUwKHNuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMjE5LVxcdFNZU0NBTExfTUVUQURBVEEoXyMjc25hbWUsIDApO1xcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0yMjQtXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjIyNTojZGVmaW5lIFNZU0NBTExfREVGSU5FMShuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCgxLCBfIyNuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjI2OiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUyKG5hbWUsIC4uLikgU1lTQ0FMTF9ERUZJTkV4KDIsIF8jI25hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoyMjc6I2RlZmluZSBTWVNDQUxMX0RFRklORTMobmFtZSwgLi4uKSBTWVNDQUxMX0RFRklORXgoMywgXyMjbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjIyODojZGVmaW5lIFNZU0NBTExfREVGSU5FNChuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCg0LCBfIyNuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjI5OiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkU1KG5hbWUsIC4uLikgU1lTQ0FMTF9ERUZJTkV4KDUsIF8jI25hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoyMzA6I2RlZmluZSBTWVNDQUxMX0RFRklORTYobmFtZSwgLi4uKSBTWVNDQUxMX0RFRklORXgoNiwgXyMjbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTIzMS1cXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjMyOiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkVfTUFYQVJHU1xcdDZcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMjMzLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoyMzQ6I2RlZmluZSBTWVNDQUxMX0RFRklORXgoeCwgc25hbWUsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTIzNS1cXHRTWVNDQUxMX01FVEFEQVRBKHNuYW1lLCB4LCBfX1ZBX0FSR1NfXylcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjExLjMzNjYxNjgwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDQ5NDg1NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTeXN0ZW0gQ2FsbCBEZWZpbml0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHN5c3RlbSBjYWxscy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIHNlZS4uLiB0aGUgZGVmaW5pdGl2ZSBkZWNsYXJhdGlvbiBvZiBzeXN0ZW0gY2FsbCBudW1iZXJzIGFuZCBwcm90b3R5cGVzIHNob3VsZCBiZSBpbiBgaW5jbHVkZS9saW51eC9zeXNjYWxscy5oYC4gTm93LCBJIHJlY2FsbCBoYXZpbmcgdG8gcmVmZXIgdG8gdGhpcyBzZWN0aW9uIG9mIGNvZGUgYmVmb3JlLiBUbyBiZSBzcGVjaWZpYywgbXkgaW5pdGlhbCBpbnF1aXJ5IHdpbGwgc3RhcnQgd2l0aCBsaW5lcyAyMzUtMjU1LiBJJ20gaG9waW5nIEkgY2FuIGZpbmQgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCwgb3IgYXQgbGVhc3QgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLCBpbiB0aGF0IHNlZ21lbnQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MjoxMy43ODYxMDUyMTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc3lzY2FsbHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMzA6XFx0I2RlZmluZSBTWVNDQUxMX0RFRklORTYobmFtZSwgLi4uKSBTWVNDQUxMX0RFRklORXgoNiwgXyMjbmFtZSwgX19WQV9BUkdTX18pXFxuIDIzMTpcXHRcXG4gMjMyOlxcdCNkZWZpbmUgU1lTQ0FMTF9ERUZJTkVfTUFYQVJHU1xcdDZcXG4gMjMzOlxcdFxcbiAyMzQ6XFx0I2RlZmluZSBTWVNDQUxMX0RFRklORXgoeCwgc25hbWUsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuIDIzNTpcXHRcXHRTWVNDQUxMX01FVEFEQVRBKHNuYW1lLCB4LCBfX1ZBX0FSR1NfXylcXHRcXHRcXHRcXFxcXFxuIDIzNjpcXHRcXHRfX1NZU0NBTExfREVGSU5FeCh4LCBzbmFtZSwgX19WQV9BUkdTX18pXFxuIDIzNzpcXHRcXG4gMjM4OlxcdCNkZWZpbmUgX19QUk9URUNUKC4uLikgYXNtbGlua2FnZV9wcm90ZWN0KF9fVkFfQVJHU19fKVxcbiAyMzk6XFx0XFxuIDI0MDpcXHQvKlxcbiAyNDE6XFx0ICogVGhlIGFzbWxpbmthZ2Ugc3R1YiBpcyBhbGlhc2VkIHRvIGEgZnVuY3Rpb24gbmFtZWQgX19zZV9zeXNfKigpIHdoaWNoXFxuIDI0MjpcXHQgKiBzaWduLWV4dGVuZHMgMzItYml0IGludHMgdG8gbG9uZ3Mgd2hlbmV2ZXIgbmVlZGVkLiBUaGUgYWN0dWFsIHdvcmsgaXNcXG4gMjQzOlxcdCAqIGRvbmUgd2l0aGluIF9fZG9fc3lzXyooKS5cXG4gMjQ0OlxcdCAqL1xcbiAyNDU6XFx0I2lmbmRlZiBfX1NZU0NBTExfREVGSU5FeFxcbiAyNDY6XFx0I2RlZmluZSBfX1NZU0NBTExfREVGSU5FeCh4LCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyNDc6XFx0XFx0X19kaWFnX3B1c2goKTtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDI0ODpcXHRcXHRfX2RpYWdfaWdub3JlKEdDQywgOCwgXFxcIi1XYXR0cmlidXRlLWFsaWFzXFxcIixcXHRcXHRcXHRcXFxcXFxuIDI0OTpcXHRcXHRcXHQgICAgICBcXFwiVHlwZSBhbGlhc2luZyBpcyB1c2VkIHRvIHNhbml0aXplIHN5c2NhbGwgYXJndW1lbnRzXFxcIik7XFxcXFxcbiAyNTA6XFx0XFx0X19kaWFnX2lnbm9yZShjbGFuZywgMjMsIFxcXCItV3Vua25vd24td2FybmluZy1vcHRpb25cXFwiLFxcdFxcdFxcXFxcXG4gMjUxOlxcdFxcdFxcdCAgICAgIFxcXCJBdm9pZCBicmVha2luZyB2ZXJzaW9ucyB3aXRob3V0IC1XYXR0cmlidXRlLWFsaWFzXFxcIik7XFxcXFxcbiAyNTI6XFx0XFx0X19kaWFnX2lnbm9yZShjbGFuZywgMjMsIFxcXCItV2F0dHJpYnV0ZS1hbGlhc1xcXCIsXFx0XFx0XFx0XFxcXFxcbiAyNTM6XFx0XFx0XFx0ICAgICAgXFxcIlR5cGUgYWxpYXNpbmcgaXMgdXNlZCB0byBzYW5pdGl6ZSBzeXNjYWxsIGFyZ3VtZW50c1xcXCIpO1xcXFxcXG4gMjU0OlxcdFxcdGFzbWxpbmthZ2UgbG9uZyBzeXMjI25hbWUoX19NQVAoeCxfX1NDX0RFQ0wsX19WQV9BUkdTX18pKVxcdFxcXFxcXG4gMjU1OlxcdFxcdFxcdF9fYXR0cmlidXRlX18oKGFsaWFzKF9fc3RyaW5naWZ5KF9fc2Vfc3lzIyNuYW1lKSkpKTtcXHRcXFxcXFxuIDI1NjpcXHRcXHRBTExPV19FUlJPUl9JTkpFQ1RJT04oc3lzIyNuYW1lLCBFUlJOTyk7XFx0XFx0XFx0XFxcXFxcbiAyNTc6XFx0XFx0c3RhdGljIGlubGluZSBsb25nIF9fZG9fc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSk7XFxcXFxcbiAyNTg6XFx0XFx0YXNtbGlua2FnZSBsb25nIF9fc2Vfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSk7XFx0XFxcXFxcbiAyNTk6XFx0XFx0YXNtbGlua2FnZSBsb25nIF9fc2Vfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSlcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjEzLjc4NjIxOTY0NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjI4ODMxMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB4ODZfNjQgU3lzdGVtIENhbGwgV3JhcHBlcioqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBpbiBvbiB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZSBub3cuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHN5c3RlbSBjYWxscyBhcmUgaGFuZGxlZCBhdCB0aGUgYXNzZW1ibHkgbGV2ZWwsIHBhcnRpY3VsYXJseSBob3cgdGhleSdyZSB3cmFwcGVkLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaGAgZmlsZS4gVGhhdCdzIHRoZSBsaWtlbHkgbG9jYXRpb24gZm9yIHRoZSBrZXkgZGVmaW5pdGlvbnMgYW5kIG1hY3JvcyByZWxhdGVkIHRvIHN5c3RlbSBjYWxsIGludm9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb24gdGhpcyBwbGF0Zm9ybS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gbGV0J3MgZ2V0IHN0YXJ0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBpbiB0aGVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjE2LjQxNTA1OTE5MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyNzgzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX194NjRfc3lzX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM9Mzc9c3RhdGljIG5vaW5saW5lIGxvbmcgeDY0X3N5c19jYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmMtNDAtXFx0I2luY2x1ZGUgXFx1MDAzY2FzbS9zeXNjYWxsc182NC5oXFx1MDAzZVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYzo0MTpcXHRkZWZhdWx0OiByZXR1cm4gX194NjRfc3lzX25pX3N5c2NhbGwocmVncyk7XFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jLTQyLVxcdH1cXG4tLVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYz00NT1zdGF0aWMgbm9pbmxpbmUgbG9uZyB4MzJfc3lzX2NhbGwoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBucilcXG4tLVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYy00OS1cXHQjaW5jbHVkZSBcXHUwMDNjYXNtL3N5c2NhbGxzX3gzMi5oXFx1MDAzZVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYzo1MDpcXHRkZWZhdWx0OiByZXR1cm4gX194NjRfc3lzX25pX3N5c2NhbGwocmVncyk7XFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jLTUxLVxcdH1cXG4tLVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTctI1xcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsOjg6IyBUaGUgX194NjRfc3lzXyooKSBzdHVicyBhcmUgY3JlYXRlZCBvbi10aGUtZmx5IGZvciBzeXNfKigpIHN5c3RlbSBjYWxsc1xcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTktI1xcbi0tXFxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYz0xMTk9c3RhdGljIGJvb2wgX19lbXVsYXRlX3ZzeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTIxNy1cXHRcXHQvKiB0aGlzIGRlY29kZXMgcmVncy1cXHUwMDNlZGkgYW5kIHJlZ3MtXFx1MDAzZXNpIG9uIGl0cyBvd24gKi9cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIxODpcXHRcXHRyZXQgPSBfX3g2NF9zeXNfZ2V0dGltZW9mZGF5KHJlZ3MpO1xcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjE5LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yMjItXFx0XFx0LyogdGhpcyBkZWNvZGVzIHJlZ3MtXFx1MDAzZWRpIG9uIGl0cyBvd24gKi9cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIyMzpcXHRcXHRyZXQgPSBfX3g2NF9zeXNfdGltZShyZWdzKTtcXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTIyNC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjMwLVxcdFxcdC8qIHRoaXMgZGVjb2RlcyByZWdzLVxcdTAwM2VkaSwgcmVncy1cXHUwMDNlc2kgYW5kIHJlZ3MtXFx1MDAzZWR4IG9uIGl0cyBvd24gKi9cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIzMTpcXHRcXHRyZXQgPSBfX3g2NF9zeXNfZ2V0Y3B1KHJlZ3MpO1xcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjMyLVxcdFxcdHJlZ3MtXFx1MDAzZWR4ID0gb3JpZ19keDtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTEwLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjExOmV4dGVybiBsb25nIF9feDY0X3N5c19uaV9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xMi1leHRlcm4gbG9uZyBfX2lhMzJfc3lzX25pX3N5c2NhbGwoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMTYtICogc3RydWN0IHB0X3JlZ3MgKnJlZ3MgYXMgdGhlIG9ubHkgYXJndW1lbnQgb2YgdGhlIHN5c2NhbGwgc3R1YihzKSBuYW1lZCBhczpcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaDoxNzogKiBfX3g2NF9zeXNfKigpICAgICAgICAgLSA2NC1iaXQgbmF0aXZlIHN5c2NhbGxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xOC0gKiBfX2lhMzJfc3lzXyooKSAgICAgICAgLSAzMi1iaXQgbmF0aXZlIHN5c2NhbGwgb3IgY29tbW9uIGNvbXBhdCBzeXNjYWxsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0zMy0gKlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjM0OiAqIFxcdTAwM2NfX3g2NF9zeXNfcmVjdlxcdTAwM2U6XFx0XFx0XFx1MDAzYy0tIHN5c2NhbGwgd2l0aCA0IHBhcmFtZXRlcnNcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0zNS0gKlxcdGNhbGxxXFx0XFx1MDAzY19fZmVudHJ5X19cXHUwMDNlXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0yNTktICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYwOmxvbmcgX194NjRfc3lzX2dldGNwdShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYxOmxvbmcgX194NjRfc3lzX2dldHRpbWVvZmRheShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYyOmxvbmcgX194NjRfc3lzX3RpbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTI2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDI6MTYuNDc3MzQzNDcyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYwNjQ5MDk2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbXJlbGVhc2VgIFN5c3RlbSBDYWxsIFdyYXBwZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Ugc3lzdGVtIGNhbGxzOiBgX19kb19zeXNfcHJvY2Vzc19tcmVsZWFzZWAgYW5kIGBfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZWAuIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBhcmUgaW1wbGVtZW50ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGFyY2hpdGVjdHVyZS4gVGltZSB0byBjaGVjayB0aGUgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYCBoZWFkZXIuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gbGluZXMgMTgwIHRocm91Z2ggMjIwLiBJIGFudGljaXBhdGUgdGhpcyBzZWN0aW9uIHdpbGwgZGVmaW5lIHRoZSB3cmFwcGVycyBvciB0aGUgbG93LWxldmVsIGdsdWUgdGhhdCBpbnRlcmZhY2VzIHdpdGggdGhlIGtlcm5lbCdzIGFjdHVhbCBgbXJlbGVhc2VgIGltcGxlbWVudGF0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBhcmd1bWVudHMgYXJlIHBhc3NlZCwgYW55IG5lY2Vzc2FyeSBjb250ZXh0IHN3aXRjaGluZywgb3IgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkZXRhaWxzIHJlbGV2YW50IHRvIHRoZSBgbXJlbGVhc2VgIGNhbGwuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBiYXNlIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGtlcm5lbCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA2NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjIyLjU0MjI1NTI1NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFxuIDE4MTpcXHQjZWxzZSAvKiBDT05GSUdfWDg2X1gzMl9BQkkgKi9cXG4gMTgyOlxcdCNkZWZpbmUgX19YMzJfQ09NUEFUX1NZU19TVFVCMChuYW1lKVxcbiAxODM6XFx0I2RlZmluZSBfX1gzMl9DT01QQVRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcXG4gMTg0OlxcdCNkZWZpbmUgX19YMzJfQ09NUEFUX0NPTkRfU1lTQ0FMTChuYW1lKVxcbiAxODU6XFx0I2VuZGlmIC8qIENPTkZJR19YODZfWDMyX0FCSSAqL1xcbiAxODY6XFx0XFxuIDE4NzpcXHRcXG4gMTg4OlxcdCNpZmRlZiBDT05GSUdfQ09NUEFUXFxuIDE4OTpcXHQvKlxcbiAxOTA6XFx0ICogQ29tcGF0IG1lYW5zIElBMzJfRU1VTEFUSU9OIGFuZC9vciBYODZfWDMyLiBBcyB0aGV5IHVzZSBhIGRpZmZlcmVudFxcbiAxOTE6XFx0ICogbWFwcGluZyBvZiByZWdpc3RlcnMgdG8gcGFyYW1ldGVycywgd2UgbmVlZCB0byBnZW5lcmF0ZSBzdHVicyBmb3IgZWFjaFxcbiAxOTI6XFx0ICogb2YgdGhlbS5cXG4gMTkzOlxcdCAqL1xcbiAxOTQ6XFx0I2RlZmluZSBDT01QQVRfU1lTQ0FMTF9ERUZJTkUwKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxOTU6XFx0XFx0c3RhdGljIGxvbmdcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE5NjpcXHRcXHRfX2RvX2NvbXBhdF9zeXNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpfX3VudXNlZCk7XFx0XFx0XFxcXFxcbiAxOTc6XFx0XFx0X19JQTMyX0NPTVBBVF9TWVNfU1RVQjAobmFtZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE5ODpcXHRcXHRfX1gzMl9DT01QQVRfU1lTX1NUVUIwKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxOTk6XFx0XFx0c3RhdGljIGxvbmdcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIwMDpcXHRcXHRfX2RvX2NvbXBhdF9zeXNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpfX3VudXNlZClcXG4gMjAxOlxcdFxcbiAyMDI6XFx0I2RlZmluZSBDT01QQVRfU1lTQ0FMTF9ERUZJTkV4KHgsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIwMzpcXHRcXHRzdGF0aWMgbG9uZyBfX3NlX2NvbXBhdF9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0xPTkcsX19WQV9BUkdTX18pKTtcXHRcXFxcXFxuIDIwNDpcXHRcXHRzdGF0aWMgaW5saW5lIGxvbmcgX19kb19jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSk7XFxcXFxcbiAyMDU6XFx0XFx0X19JQTMyX0NPTVBBVF9TWVNfU1RVQngoeCwgbmFtZSwgX19WQV9BUkdTX18pXFx0XFx0XFx0XFx0XFxcXFxcbiAyMDY6XFx0XFx0X19YMzJfQ09NUEFUX1NZU19TVFVCeCh4LCBuYW1lLCBfX1ZBX0FSR1NfXylcXHRcXHRcXHRcXHRcXFxcXFxuIDIwNzpcXHRcXHRzdGF0aWMgbG9uZyBfX3NlX2NvbXBhdF9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0xPTkcsX19WQV9BUkdTX18pKVxcdFxcXFxcXG4gMjA4OlxcdFxcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIwOTpcXHRcXHRcXHRyZXR1cm4gX19kb19jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUxPVVNFLF9fVkFfQVJHU19fKSk7XFxcXFxcbiAyMTA6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjExOlxcdFxcdHN0YXRpYyBpbmxpbmUgbG9uZyBfX2RvX2NvbXBhdF9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0RFQ0wsX19WQV9BUkdTX18pKVxcbiAyMTI6XFx0XFxuIDIxMzpcXHQvKlxcbiAyMTQ6XFx0ICogQXMgc29tZSBjb21wYXQgc3lzY2FsbHMgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCwgd2UgbmVlZCB0byBleHBhbmRcXG4gMjE1OlxcdCAqIENPTkRfU1lTQ0FMTF9DT01QQVQgaW4ga2VybmVsL3N5c19uaS5jIHRvIGNvdmVyIHRoaXMgY2FzZSBhcyB3ZWxsLlxcbiAyMTY6XFx0ICovXFxuIDIxNzpcXHQjZGVmaW5lIENPTkRfU1lTQ0FMTF9DT01QQVQobmFtZSkgXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMTg6XFx0XFx0X19JQTMyX0NPTVBBVF9DT05EX1NZU0NBTEwobmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuIDIxOTpcXHRcXHRfX1gzMl9DT01QQVRfQ09ORF9TWVNDQUxMKG5hbWUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjIyLjU0MjMyNDgwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MDcwODkzNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIHg4NiBOYXRpdmUgU3lzY2FsbCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgbmF0aXZlIHN5c2NhbGxzIGFyZSBoYW5kbGVkIG9uIHg4Ni4gTGV0J3MgZGlnIGludG8gdGhpczsgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGNhbGwgd3JhcHBlcnMgd29yay4gUmlnaHQsIGxldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYC4gSSByZWNhbGwgdGhhdCB0aGUgY3JpdGljYWwgZGVmaW5pdGlvbnMgYXJlIHR5cGljYWxseSBpbiB0aGF0IGhlYWRlciBmaWxlLiBOb3csIGFjY29yZGluZyB0byBteSBtZW50YWwgbWFwLCBsaW5lcyAyMjAgdGhyb3VnaCAyNTggc2hvdWxkIGJlIHdoZXJlIHRoZSBrZXkgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgZm91bmQuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgd2l0aGluIHRoYXQgcmFuZ2UuIEknbGwgbmVlZCB0byBmb2N1cyBhbmQgcmVtZW1iZXIgd2hhdCBJIHdhcyBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxOTIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjI4LjYxMzIyMDkyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjA6XFx0XFxuIDIyMTpcXHQjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqL1xcbiAyMjI6XFx0XFxuIDIyMzpcXHQjZGVmaW5lIF9fU1lTQ0FMTF9ERUZJTkV4KHgsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIyNDpcXHRcXHRzdGF0aWMgbG9uZyBfX3NlX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfTE9ORyxfX1ZBX0FSR1NfXykpO1xcdFxcXFxcXG4gMjI1OlxcdFxcdHN0YXRpYyBpbmxpbmUgbG9uZyBfX2RvX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVDTCxfX1ZBX0FSR1NfXykpO1xcXFxcXG4gMjI2OlxcdFxcdF9fWDY0X1NZU19TVFVCeCh4LCBuYW1lLCBfX1ZBX0FSR1NfXylcXHRcXHRcXHRcXHRcXFxcXFxuIDIyNzpcXHRcXHRfX0lBMzJfU1lTX1NUVUJ4KHgsIG5hbWUsIF9fVkFfQVJHU19fKVxcdFxcdFxcdFxcdFxcXFxcXG4gMjI4OlxcdFxcdHN0YXRpYyBsb25nIF9fc2Vfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSlcXHRcXFxcXFxuIDIyOTpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMzA6XFx0XFx0XFx0bG9uZyByZXQgPSBfX2RvX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfQ0FTVCxfX1ZBX0FSR1NfXykpO1xcXFxcXG4gMjMxOlxcdFxcdFxcdF9fTUFQKHgsX19TQ19URVNULF9fVkFfQVJHU19fKTtcXHRcXHRcXHRcXHRcXFxcXFxuIDIzMjpcXHRcXHRcXHRfX1BST1RFQ1QoeCwgcmV0LF9fTUFQKHgsX19TQ19BUkdTLF9fVkFfQVJHU19fKSk7XFx0XFxcXFxcbiAyMzM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIzNDpcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMzU6XFx0XFx0c3RhdGljIGlubGluZSBsb25nIF9fZG9fc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSlcXG4gMjM2OlxcdFxcbiAyMzc6XFx0LypcXG4gMjM4OlxcdCAqIEFzIHRoZSBnZW5lcmljIFNZU0NBTExfREVGSU5FMCgpIG1hY3JvIGRvZXMgbm90IGRlY29kZSBhbnkgcGFyYW1ldGVycyBmb3JcXG4gMjM5OlxcdCAqIG9idmlvdXMgcmVhc29ucywgYW5kIHBhc3Npbmcgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgdG8gaXQgaW4gJXJkaSBkb2VzIG5vdFxcbiAyNDA6XFx0ICogaHVydCwgd2Ugb25seSBuZWVkIHRvIHJlLWRlZmluZSBpdCBoZXJlIHRvIGtlZXAgdGhlIG5hbWluZyBjb25ncnVlbnQgdG9cXG4gMjQxOlxcdCAqIFNZU0NBTExfREVGSU5FeCgpIC0tIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgdGhlIENPTkRfU1lTQ0FMTCgpIG1hY3JvXFxuIDI0MjpcXHQgKiB0byB3b3JrIGNvcnJlY3RseS5cXG4gMjQzOlxcdCAqL1xcbiAyNDQ6XFx0I2RlZmluZSBTWVNDQUxMX0RFRklORTAoc25hbWUpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyNDU6XFx0XFx0U1lTQ0FMTF9NRVRBREFUQShfIyNzbmFtZSwgMCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyNDY6XFx0XFx0c3RhdGljIGxvbmcgX19kb19zeXNfIyNzbmFtZShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqX191bnVzZWQpO1xcdFxcXFxcXG4gMjQ3OlxcdFxcdF9fWDY0X1NZU19TVFVCMChzbmFtZSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDI0ODpcXHRcXHRfX0lBMzJfU1lTX1NUVUIwKHNuYW1lKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjQ5OlxcdFxcdHN0YXRpYyBsb25nIF9fZG9fc3lzXyMjc25hbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKl9fdW51c2VkKVxcbiAyNTA6XFx0XFxuIDI1MTpcXHQjZGVmaW5lIENPTkRfU1lTQ0FMTChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjUyOlxcdFxcdF9fWDY0X0NPTkRfU1lTQ0FMTChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjUzOlxcdFxcdF9fSUEzMl9DT05EX1NZU0NBTEwobmFtZSlcXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFxuIDI1NjpcXHQvKlxcbiAyNTc6XFx0ICogRm9yIFZTWVNDQUxMUywgd2UgbmVlZCB0byBkZWNsYXJlIHRoZXNlIHRocmVlIHN5c2NhbGxzIHdpdGggdGhlIG5ld1xcbiAyNTg6XFx0ICogcHRfcmVncy1iYXNlZCBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIGluLWtlcm5lbCB1c2UuXFxuIDI1OTpcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDI6MjguNjEzMzE3OTEyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjczMzYyNDU5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqU3lzdGVtIENhbGwgU3R1YiBPYnNlcnZhdGlvbnMqKlxuXG5Pa2F5LCBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBzeXN0ZW0gY2FsbCBzdHVicyBhbmQgc29tZXRoaW5nIGludGVyZXN0aW5nIGlzIGp1bXBpbmcgb3V0IGF0IG1lLiBJJ20gc2VlaW5nIHRoYXQgdGhlIGBfX2RvX3N5cyMjbmFtZWAgbWFjcm8gaXMgZGVmaW5lZCBhcyBgc3RhdGljIGlubGluZWAsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGEgZmFzdCBwYXRoIG9wdGltaXphdGlvbi4gQnV0IHRoZW4gSSdtIG5vdGljaW5nIHRoYXQgdGhlIGBfX3NlX3N5cyMjbmFtZWAgYW5kIGBfX3g2NF9zeXNfIyNuYW1lYCB2ZXJzaW9ucywgd2hpY2ggZ2V0IGV4cGFuZGVkIHZpYSBgX19YNjRfU1lTX1NUVUJ4YCwgYXJlICpmdW5jdGlvbnMqIOKAkyBhY3R1YWwsIGNhbGxhYmxlIGZ1bmN0aW9ucy4gVGhhdCBjb250cmFzdCBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhlIGRlc2lnbiBjaG9pY2Ugd2FzIG1hZGUgdG8gaGFuZGxlIHRoZW0gZGlmZmVyZW50bHkuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19YNjRfU1lTX1NUVUJ4YCB0byBzZWUgd2hhdCdzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLCBJJ2xsIGZpbmQgaXQgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYC4gTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgdGhhdCBtYWNybyBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyMzAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQyOjM1Ljk0OTU2NzgwN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4OTU5NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBfX1g2NF9TWVNfU1RVQnhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg9MTI9ZXh0ZXJuIGxvbmcgX19pYTMyX3N5c19uaV9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTEwOS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaDoxMTA6I2RlZmluZSBfX1g2NF9TWVNfU1RVQngoeCwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xMTEtXFx0X19TWVNfU1RVQngoeDY0LCBzeXMjI25hbWUsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMTE4LSNkZWZpbmUgX19YNjRfU1lTX1NUVUIwKG5hbWUpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MTE5OiNkZWZpbmUgX19YNjRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xMjAtI2RlZmluZSBfX1g2NF9DT05EX1NZU0NBTEwobmFtZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDI6MzYuMTM4NTM4NTQ5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg4MzI0MzE1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY29wZSBhbmQgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMgb2YgYHByb2Nlc3NfbXJlbGVhc2VgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdlbnQgbGlrZSB0aGlzOiBgX19TWVNfU1RVQnhgIGNyZWF0ZXMgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYC4gSSBjb25maXJtZWQgdGhhdC4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIHN5c3RlbSBjYWxsIGl0c2VsZiwgYHByb2Nlc3NfbXJlbGVhc2VgLiBUaGVuIEkgbmVlZGVkIHRvIHZlcmlmeSB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuIEkga25vdyBgU1lTQ0FMTF9ERUZJTkUyYCB1bHRpbWF0ZWx5IGRlZmluZXMgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYC4gSSBhbHNvIHJlbWVtYmVyZWQgYF9fc2Vfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgIGdldHMgZGVmaW5lZCBhcyB3ZWxsLlxuXG5JIGZvY3VzZWQgb24gYF9fb29tX3JlYXBfdGFza19tbWAsIGEgc3RhdGljIGZ1bmN0aW9uIGluIGBtbS9vb21fa2lsbC5jYC4gQmVjYXVzZSBpdCdzIHN0YXRpYyBhbmQgaGFzIG11bHRpcGxlIGNhbGwgc2l0ZXMgKGBvb21fcmVhcF90YXNrX21tYCBhbmQgYHByb2Nlc3NfbXJlbGVhc2VgKSwgaXQgY291bGQgYmUgaW5saW5lZCwgYnV0IGdpdmVuIGl0cyBzaXplIGFuZCBtdWx0aXBsZSB1c2VzLCBsaWtlbHkgd29uJ3QgYmUgaW5saW5lZC4gRXZlbiBpZiBpdCBpcywgdGhlIHN0YXRpYyBmdW5jdGlvbiB3aWxsIHN0aWxsIGJlIGEgc3ltYm9sIGlmIG5vdCBvcHRpbWl6ZWQgYXdheSwgb3IgaW4gYW55IGNhc2UsIGJvdGggY2FsbGVycyBwbHVzIHRoZSBmdW5jdGlvbiBib2R5IHdpbGwgYmUgcHJvdmlkZWQuXG5cblRoZW4sIEkgcmV2aWV3ZWQgdGhlIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBmb3IgYSBmdWxsZXIgcGljdHVyZTogYHphcF92bWFfZm9yX3JlYXBpbmdgLCBgX19vb21fcmVhcF90YXNrX21tYCwgYG9vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza2AsIGFuZCBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZXkncmUgY2FsbGVkIHViaXF1aXRvdXNseS4gVHVybnMgb3V0LCBub25lIG9mIHRoZXNlIGFyZSB1bml2ZXJzYWxseSBjYWxsZWQuIEVhY2ggaXMgdGllZCB0byB0aGUgb29tIHJlYXBlciBmdW5jdGlvbmFsaXR5IG9yIHRoZSBgcHJvY2Vzc19tcmVsZWFzZWAgc3lzdGVtIGNhbGwuXG5cbkkgdGhlbiBjb25maXJtZWQgdGhhdCBzeXprYWxsZXIgY2FuIGluZGVlZCBjYWxsIGBwcm9jZXNzX21yZWxlYXNlYC4gSSBrbm93IGl0J3MgYSBzdXBwb3J0ZWQgc3lzY2FsbCBhbmQgdGhhdCBpdCBnZW5lcmF0ZXMgdGhlIGNvcnJlY3QgY2FsbC4gSSB0aG91Z2h0IGFib3V0IHRoZSBsaWtlbHkgc2NlbmFyaW8gd2hlbiBgcHJvY2Vzc19tcmVsZWFzZWAgaXMgaW52b2tlZCBjb25jdXJyZW50bHkgd2l0aCBhIHdyaXRlciBjb250ZW5kaW5nIG9uIGBtbWFwX2xvY2tgLiBUaGlzIGlzIGltcG9ydGFudCwgYXMgaXQgZXhlcmNpc2VzIHRoZSBuZXcgY29kZSBwYXRocyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaC4gSSByZW1lbWJlcmVkIHRoZSBjb2RlIHVzZXMgYG1tYXBfbG9ja19pc19jb250ZW5kZWQobW0pYCwgZHJvcHMgYG1tYXBfcmVhZF91bmxvY2sobW0pYCwgcmV0dXJucyBgLUVBR0FJTmAsIGFuZCByZXRyaWVzLiBJJ20gYWxzbyBjb25zY2lvdXMgb2YgdGhlIDFHQiBjaHVua2luZyBsb29wIHRoYXQga2lja3MgaW4gZHVyaW5nIFZNQSByZWFwaW5nLlxuXG5Db25maWctd2lzZSwgbXkgcHJpbWFyeSBjb25jZXJuIGlzIGBDT05GSUdfTU1VYC4gQ2hlY2tpbmcgdGhlIHNvdXJjZSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgQ09ORklHX01NVWAgaXMgdGhlIGdhdGVrZWVwZXIgZm9yIHRoZSBvb20gcmVhcGVyLiBXaXRob3V0IGl0LCBgcHJvY2Vzc19tcmVsZWFzZWAgcmV0dXJucyBgLUVOT1NZU2AsIGFuZCB0aGUgcmVhcGVyIGRvZXNuJ3QgZXhpc3QuIFRoZSBvdGhlciBmdW5jdGlvbiB0aGF0IGlzIHBhcnQgb2YgdGhpcyBpcyBgemFwX3ZtYV9mb3JfcmVhcGluZ2AuIEkgdmVyaWZpZWQgdGhhdCBgemFwX3ZtYV9mb3JfcmVhcGluZ2AgaXMgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGhpbiB0aGUgYG1tL21lbW9yeS5jYCBmaWxlLCB3aGljaCBpdHNlbGYgaXMgb25seSBidWlsdCB3aGVuIGBDT05GSUdfTU1VPXlgLlxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgRW5hYmxlQ29uZmlnczogW1wiTU1VXCJdYC4gQW5kIGFmdGVyIGEgZmluYWwgY2hlY2sgb2YgYWxsIEtjb25maWcgZmlsZXMsIEkgY29uZmlybSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgcmVsZXZhbnQgdG8gaGlkaW5nIG9yIGRpc2FibGluZyBgcHJvY2Vzc19tcmVsZWFzZWAgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg1NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDI6NDQuOTcwOTczMDYzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQwNDg2NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY2Vzc19tcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJLY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0Mjo0NS4wMTczOTA0ODdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTY4MzM5NjM2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJpYWdlIEFuYWx5c2lzOiBPT00vYHByb2Nlc3NfbXJlbGVhc2VgKipcblxuT2theSwgc28gdGhlcmUgYXJlIG5vIGV4cGxpY2l0IGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIGhlcmU7IGl0J3MgdW5jb25kaXRpb25hbGx5IGJ1aWx0IGlmIGBDT05GSUdfTU1VYCBpcyBlbmFibGVkLCB3aGljaCBpcyBhIHByZXR0eSBzdGFuZGFyZCBjb25maWd1cmF0aW9uLiBMZXQncyBtYWtlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgdHJpYWdlIGluc3RydWN0aW9ucyBjb3JyZWN0bHkuIEkgbmVlZCB0byBuYWlsIGRvd246IGBXb3J0aEZ1enppbmdgLCBgUmVhc29uaW5nYCwgYEVuYWJsZUNvbmZpZ3NgLCBhbmQgYEZvY3VzU3ltYm9sc2AuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBMZXQncyBsaXN0IHRob3NlIG91dC4gSSBzZWUgYHphcF92bWFfZm9yX3JlYXBpbmdgLCBgX19vb21fcmVhcF90YXNrX21tYCwgYG9vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza2AsIGFuZCBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgLiBXYWl0LCBoYW5nIG9uLi4uIGlzIGl0IGBfX2RvX3N5c19wcm9jZXNzX21yZWxlYXNlYCBvciBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgPyBBaCwgcmlnaHQsIG9uIHg4Nl82NCwgYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCBpcyB0aGUgYWN0dWFsIGVudHJ5IHBvaW50LCB3aGljaCBpcyB3aGF0IEknbSB0YXJnZXRpbmcgZ2l2ZW4gdGhlIGBhbWQ2NGAgdGFyZ2V0LiBXaGF0IGFib3V0IG90aGVyIGFyY2hpdGVjdHVyZXMgbGlrZSBhcm02ND8gV2VsbCwgSSBkb24ndCBjYXJlIGF0IHRoZSBtb21lbnQgYXMgdGhlIHByb21wdCBzcGVjaWZpZXMgYGFtZDY0YC4gT24gYW1kNjQsIEkga25vdyB0aGF0IGJvdGggYF9feDY0X3N5c19wcm9jZXNzX21yZWxlYXNlYCBhbmQgYF9fc2Vfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgIGFyZSBnZW5lcmF0ZWQuIFNvLCBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgIGl0IGlzLiBOb3csIGNhbiBJIGluY2x1ZGUgaXQ/IFllcy4gV2hhdCBhYm91dCBhbGwgdGhlIG90aGVycz8gYHphcF92bWFfZm9yX3JlYXBpbmdgLCBgX19vb21fcmVhcF90YXNrX21tYCwgYG9vbV9yZWFwX3Rhc2tfbW1gLCBhbmQgYG9vbV9yZWFwX3Rhc2tgLCBhbGwgb2YgdGhvc2UgYXJlIHZhbGlkIGNob2ljZXMgYXMgd2VsbC4gT2theSwgZ29vZC4gSSdtIGNvbmZpZGVudCBpbiB0aGVzZSBjaG9pY2VzLlxuXG5MZXQncyBkbyBhIGZpbmFsIGNoZWNrIGFnYWluc3QgdGhlIGluc3RydWN0aW9ucy4gUmVhY2hhYmlsaXR5OiB0aGlzIGFyZWEgaXMgY29yZSBNTSwgc28gcmVhY2hhYmxlIHZpYSAxKSB0aGUgYHByb2Nlc3NfbXJlbGVhc2VgIHN5c2NhbGwsIGFuZCAyKSB0aGUgT09NIGtpbGxlciByZWFwZXIgdGhyZWFkLiBCb3RoIGFyZSB0cml2aWFsIHRvIHJlYWNoIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gQ2hlY2suIGBXb3J0aEZ1enppbmdgOiBEZWZpbml0ZWx5IHRydWUuIFRoYXQncyBhIGdpdmVuLiBOb3csIHRoZSBgRm9jdXNTeW1ib2xzYDogYHphcF92bWFfZm9yX3JlYXBpbmdgLCBgX19vb21fcmVhcF90YXNrX21tYCwgYG9vbV9yZWFwX3Rhc2tfbW1gLCBgb29tX3JlYXBfdGFza2AsIGFuZCBgX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VgLiBOb25lIG9mIHRoZXNlIGFyZSB1YmlxdWl0b3VzOyB0aGV5J3JlIHZlcnkgc3BlY2lmaWMgdG8gdGhlIHBhdGNoJ3MgY2hhbmdlcyB0byB0aGUgT09NIHJlYXBpbmcgYW5kIGBwcm9jZXNzX21yZWxlYXNlYCBtZWNoYW5pc21zLiBCaW5nby5cblxuT2theSwgSSdtIHNhdGlzZmllZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODQ3LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzowMS44NTEzNTY1OTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjY2OTEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTU1VXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemFwX3ZtYV9mb3JfcmVhcGluZ1wiLFxuICAgIFwiX19vb21fcmVhcF90YXNrX21tXCIsXG4gICAgXCJvb21fcmVhcF90YXNrX21tXCIsXG4gICAgXCJvb21fcmVhcF90YXNrXCIsXG4gICAgXCJfX3g2NF9zeXNfcHJvY2Vzc19tcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVk1BIHVubWFwcGluZyBsb2dpYyBmb3IgT09NIHJlYXBpbmcgYW5kIHRoZSBwcm9jZXNzX21yZWxlYXNlIHN5c2NhbGwsIHNwbGl0dGluZyBWTUEgemFwcGluZyBpbnRvIDFHQiBjaHVua3MgYW5kIHlpZWxkaW5nIG1tYXBfbG9jayB3aGVuIGNvbnRlbmRlZC4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRyb2wgZmxvdyBhbmQgbG9ja2luZyBzZW1hbnRpY3MgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbG9jayBpbnZlcnNpb25zLCBvciBzdGF0ZSBpbmNvbnNpc3RlbmN5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInphcF92bWFfZm9yX3JlYXBpbmdcIixcbiAgICBcIl9fb29tX3JlYXBfdGFza19tbVwiLFxuICAgIFwib29tX3JlYXBfdGFza19tbVwiLFxuICAgIFwib29tX3JlYXBfdGFza1wiLFxuICAgIFwiX194NjRfc3lzX3Byb2Nlc3NfbXJlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFZNQSB1bm1hcHBpbmcgbG9naWMgZm9yIE9PTSByZWFwaW5nIGFuZCB0aGUgcHJvY2Vzc19tcmVsZWFzZSBzeXNjYWxsLCBzcGxpdHRpbmcgVk1BIHphcHBpbmcgaW50byAxR0IgY2h1bmtzIGFuZCB5aWVsZGluZyBtbWFwX2xvY2sgd2hlbiBjb250ZW5kZWQuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgc2VtYW50aWNzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2sgaW52ZXJzaW9ucywgb3Igc3RhdGUgaW5jb25zaXN0ZW5jeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDM6MDEuOTM0MDM1OTA2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUyNDY5ODAzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzowMS45MzQ1MTY5MzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMTUyNDY0OTU3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00gcmVhcGVyIGxvZ2ljIGluIG1tL29vbV9raWxsLmMgYW5kIG1tL21lbW9yeS5jIHNvIHRoYXQgVk1BcyBhcmUgemFwcGVkIGluIDFHQiBjaHVua3MsIGFsbG93aW5nIG1tYXBfbG9jayB0byBiZSB5aWVsZGVkIHRvIHdhaXRpbmcgd3JpdGVycyB1cG9uIGNvbnRlbnRpb24uIEl0IGFsc28gdXBkYXRlcyBlcnJvciBoYW5kbGluZyBhY3Jvc3MgemFwX3ZtYV9mb3JfcmVhcGluZywgX19vb21fcmVhcF90YXNrX21tLCBvb21fcmVhcF90YXNrLCBhbmQgdGhlIHByb2Nlc3NfbXJlbGVhc2Ugc3lzY2FsbC5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgKGFkZHIsIGVuZCwgcmV0LCBhdHRlbXB0cykgYXJlIHNjYWxhciB0eXBlcyBhbmQgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb3IgYXNzaWduZWQgcHJpb3IgdG8gdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IGhlYXAvc3RhY2sgYnVmZmVycywgZG9lcyBub3QgY29weSBhbnkgZGF0YSBvciBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzIGFmZmVjdGluZyByZWFkcyBvZiBtZW1vcnkuIEFueSBwb3RlbnRpYWwgZGVmZWN0cyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgaW52b2x2ZSBsb2NrIG1hbmFnZW1lbnQsIGxvY2sgY29udGVudGlvbiwgVk1BIGl0ZXJhdGlvbiwgb3IgcGFnZSB0YWJsZSB0ZWFyZG93biwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YWJmYTAzYjgxMjNkOWMyOWU1MjNhODQzM2NjZTE0MWRiOTRhZWJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTI6NDE6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMDUxNzljNGIyMDkwZS4uN2FjMTcyOGE1N2MyOSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC01OTMsNyArNTkzLDggQEAgc3RydWN0IHphcF9kZXRhaWxzO1xuIHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKTtcbi1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4raW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBlbmQpO1xuIGludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdCAgIGdmcF90IGdmcCk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggOTI2Mjc2ZDQxOTIwMi4uMjVjMzVhMjhhMzlkMSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTIyMDcsMTUgKzIyMDcsMTggQEAgc3RhdGljIHZvaWQgX196YXBfdm1hX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiBcbiAvKipcbi0gKiB6YXBfdm1hX2Zvcl9yZWFwaW5nIC0gemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nXG4rICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhIHJhbmdlIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xuICAqIEB2bWE6IFRoZSB2bWEgdG8gemFwLlxuKyAqIEBzdGFydDogVGhlIGZpcnN0IGFkZHJlc3MgdG8gemFwLlxuKyAqIEBlbmQ6IE9uZSBwYXN0IHRoZSBsYXN0IGFkZHJlc3MgdG8gemFwLlxuICAqXG4tICogWmFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gdGhlIHZtYSB3aXRob3V0IGJsb2NraW5nIGZvciB1c2UgYnkgdGhlIG9vbVxuLSAqIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxuKyAqIFphcCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIGluIFtAc3RhcnQsIEBlbmQpIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xuKyAqIGZvciB1c2UgYnkgdGhlIG9vbSBraWxsZXIuIEh1Z2V0bGIgdm1hcyBhcmUgbm90IHN1cHBvcnRlZC5cbiAgKlxuICAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHdlIHdvdWxkIGhhdmUgdG8gYmxvY2suXG4gICovXG4taW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4raW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBlbmQpXG4ge1xuIFx0c3RydWN0IHphcF9kZXRhaWxzIGRldGFpbHMgPSB7XG4gXHRcdC5yZWFwaW5nID0gdHJ1ZSxcbkBAIC0yMjI0LDcgKzIyMjcsNyBAQCBpbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHN0cnVjdCBtbXVfZ2F0aGVyIHRsYjtcbiBcbiBcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXHUwMDNldm1fbW0sXG4tXHRcdFx0XHR2bWEtXHUwMDNldm1fc3RhcnQsIHZtYS1cdTAwM2V2bV9lbmQpO1xuK1x0XHRcdFx0c3RhcnQsIGVuZCk7XG4gXHR0bGJfZ2F0aGVyX21tdShcdTAwMjZ0bGIsIHZtYS1cdTAwM2V2bV9tbSk7XG4gXHRpZiAobW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbm9uYmxvY2soXHUwMDI2cmFuZ2UpKSB7XG4gXHRcdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcbmluZGV4IDVkNDhiZDg2MmMyN2IuLmNlZTBhMGY3YjRmMjggMTAwNjQ0XG4tLS0gYS9tbS9vb21fa2lsbC5jXG4rKysgYi9tbS9vb21fa2lsbC5jXG5AQCAtNTAzLDEwICs1MDMsMTcgQEAgc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG9vbV9yZWFwZXJfd2FpdCk7XG4gc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb29tX3JlYXBlcl9saXN0O1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob29tX3JlYXBlcl9sb2NrKTtcbiBcbi1zdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4rLypcbisgKiBDYWxsZWQgd2l0aCBtbWFwX2xvY2sgaGVsZCBmb3IgcmVhZC4gIFJldHVybnMgd2l0aCBpdCBzdGlsbCBoZWxkIG9uIDBcbisgKiAoZG9uZSkgb3IgLUVCVVNZIChwYXJ0IGNvdWxkIG5vdCBiZSByZWFwZWQsIHRyeSBhZ2FpbiBsYXRlciksIGFuZCBkcm9wc1xuKyAqIGl0IG9ubHkgb24gLUVBR0FJTiwgd2hlbiBpdCB3YXMgaGFuZGVkIG92ZXIgdG8gYSBxdWV1ZWQgd3JpdGVyIGFuZCB0aGVcbisgKiBjYWxsZXIgc2hvdWxkIHJldGFrZSBpdCBhbmQgc3RhcnQgb3Zlci5cbisgKi9cbitzdGF0aWMgaW50IF9fb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdGJvb2wgcmV0ID0gdHJ1ZTtcbitcdHVuc2lnbmVkIGxvbmcgYWRkciwgZW5kO1xuK1x0aW50IHJldCA9IDA7XG4gXHRNQV9TVEFURShtYXMsIFx1MDAyNm1tLVx1MDAzZW1tX210LCBVTE9OR19NQVgsIFVMT05HX01BWCk7XG4gXG4gXHQvKlxuQEAgLTUzOCw4ICs1NDUsMjUgQEAgc3RhdGljIGJvb2wgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0XHQgKiBjb3VudCBlbGV2YXRlZCB3aXRob3V0IGEgZ29vZCByZWFzb24uXG4gXHRcdCAqL1xuIFx0XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKSB7XG4tXHRcdFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hKSlcbi1cdFx0XHRcdHJldCA9IGZhbHNlO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogWmFwIGluIDFHIGNodW5rcyBhbmQgaGFuZCBtbWFwX2xvY2sgb3ZlciB3aGVuZXZlciBhXG4rXHRcdFx0ICogd3JpdGVyIGlzIHF1ZXVlZCBvbiBpdCwgc28gaXQgZG9lcyBub3Qgd2FpdCBmb3IgdGhlXG4rXHRcdFx0ICogd2hvbGUgcmVhcC5cbitcdFx0XHQgKi9cbitcdFx0XHRlbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuK1x0XHRcdHdoaWxlIChlbmQgXHUwMDNlIHZtYS1cdTAwM2V2bV9zdGFydCkge1xuK1x0XHRcdFx0YWRkciA9IG1heCh2bWEtXHUwMDNldm1fc3RhcnQsIEFMSUdOX0RPV04oZW5kIC0gMSwgU1pfMUcpKTtcbitcdFx0XHRcdGlmICh6YXBfdm1hX2Zvcl9yZWFwaW5nKHZtYSwgYWRkciwgZW5kKSkge1xuK1x0XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdFx0ZW5kID0gYWRkcjtcbitcdFx0XHRcdGlmICghbW1hcF9sb2NrX2lzX2NvbnRlbmRlZChtbSkpXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC01NDksMTYgKzU3MywxNyBAQCBzdGF0aWMgYm9vbCBfX29vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gLypcbiAgKiBSZWFwcyB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgZ2l2ZW4gdGFzay5cbiAgKlxuLSAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzIGFuZCBmYWxzZSBpZiBub25lIG9yIHBhcnQgb2YgdGhlIGFkZHJlc3Mgc3BhY2Vcbi0gKiBoYXMgYmVlbiByZWNsYWltZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5IGxhdGVyLlxuKyAqIFJldHVybnMgMCB3aGVuIGRvbmUsIC1FQUdBSU4gaWYgbW1hcF9sb2NrIHdhcyBoYW5kZWQgb3ZlciB0byBhIHdyaXRlclxuKyAqIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBzdGFydCBvdmVyLCBhbmQgLUVCVVNZIGlmIG5vbmUgb3IgcGFydCBvZiB0aGVcbisgKiBhZGRyZXNzIHNwYWNlIGhhcyBiZWVuIHJlY2xhaW1lZCBhbmQgdGhlIGNhbGxlciBzaG91bGQgcmV0cnkgbGF0ZXIuXG4gICovXG4tc3RhdGljIGJvb2wgb29tX3JlYXBfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4rc3RhdGljIGludCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4tXHRib29sIHJldCA9IHRydWU7XG4rXHRpbnQgcmV0ID0gMDtcbiBcbiBcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sobW0pKSB7XG4gXHRcdHRyYWNlX3NraXBfdGFza19yZWFwaW5nKHRzay1cdTAwM2VwaWQpO1xuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTU3Niw3ICs2MDEsOSBAQCBzdGF0aWMgYm9vbCBvb21fcmVhcF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBcdC8qIGZhaWxlZCB0byByZWFwIHBhcnQgb2YgdGhlIGFkZHJlc3Mgc3BhY2UuIFRyeSBhZ2FpbiBsYXRlciAqL1xuIFx0cmV0ID0gX19vb21fcmVhcF90YXNrX21tKG1tKTtcbi1cdGlmICghcmV0KVxuK1x0aWYgKHJldCA9PSAtRUFHQUlOKVx0LyogaGFuZGVkIHRoZSBsb2NrIG92ZXIsIGFscmVhZHkgZHJvcHBlZCAqL1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJldClcbiBcdFx0Z290byBvdXRfZmluaXNoO1xuIFxuIFx0cHJfaW5mbyhcIm9vbV9yZWFwZXI6IHJlYXBlZCBwcm9jZXNzICVkICglcyksIG5vdyBhbm9uLXJzczolbHVrQiwgZmlsZS1yc3M6JWx1a0IsIHNobWVtLXJzczolbHVrQlxcblwiLFxuQEAgLTU5NSwxNSArNjIyLDE1IEBAIHN0YXRpYyBib29sIG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuICNkZWZpbmUgTUFYX09PTV9SRUFQX1JFVFJJRVMgMTBcbiBzdGF0aWMgdm9pZCBvb21fcmVhcF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIHtcbi1cdGludCBhdHRlbXB0cyA9IDA7XG4rXHRpbnQgYXR0ZW1wdHMgPSAwLCByZXQ7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay1cdTAwM2VzaWduYWwtXHUwMDNlb29tX21tO1xuIFxuLVx0LyogUmV0cnkgdGhlIG1tYXBfcmVhZF90cnlsb2NrKG1tKSBhIGZldyB0aW1lcyAqL1xuLVx0d2hpbGUgKGF0dGVtcHRzKysgXHUwMDNjIE1BWF9PT01fUkVBUF9SRVRSSUVTIFx1MDAyNlx1MDAyNiAhb29tX3JlYXBfdGFza19tbSh0c2ssIG1tKSlcbitcdC8qIFJldHJ5IHRoZSBtbWFwX3JlYWRfdHJ5bG9jayhtbSkgYSBmZXcgdGltZXM7IGhhbmRpbmcgdGhlIGxvY2sgb3ZlciBpcyBub3QgYW4gYXR0ZW1wdCAqL1xuK1x0d2hpbGUgKChyZXQgPSBvb21fcmVhcF90YXNrX21tKHRzaywgbW0pKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAocmV0ID09IC1FQUdBSU4gfHwgKythdHRlbXB0cyBcdTAwM2MgTUFYX09PTV9SRUFQX1JFVFJJRVMpKVxuIFx0XHRzY2hlZHVsZV90aW1lb3V0X2lkbGUoSFovMTApO1xuIFxuLVx0aWYgKGF0dGVtcHRzIFx1MDAzYz0gTUFYX09PTV9SRUFQX1JFVFJJRVMgfHxcbi1cdCAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVxuK1x0aWYgKCFyZXQgfHwgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSlcbiBcdFx0Z290byBkb25lO1xuIFxuIFx0cHJfaW5mbyhcIm9vbV9yZWFwZXI6IHVuYWJsZSB0byByZWFwIHBpZDolZCAoJXMpXFxuXCIsXG5AQCAtMTIyNyw2ICsxMjU0LDcgQEAgU1lTQ0FMTF9ERUZJTkUyKHByb2Nlc3NfbXJlbGVhc2UsIGludCwgcGlkZmQsIHVuc2lnbmVkIGludCwgZmxhZ3MpXG4gXHRpZiAoIXJlYXApXG4gXHRcdGdvdG8gZHJvcF9tbTtcbiBcbithZ2FpbjpcbiBcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpIHtcbiBcdFx0cmV0ID0gLUVJTlRSO1xuIFx0XHRnb3RvIGRyb3BfbW07XG5AQCAtMTIzNSw4ICsxMjYzLDE1IEBAIFNZU0NBTExfREVGSU5FMihwcm9jZXNzX21yZWxlYXNlLCBpbnQsIHBpZGZkLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxuIFx0ICogQ2hlY2sgTU1GX09PTV9TS0lQIGFnYWluIHVuZGVyIG1tYXBfcmVhZF9sb2NrIHByb3RlY3Rpb24gdG8gZW5zdXJlXG4gXHQgKiBwb3NzaWJsZSBjaGFuZ2UgaW4gZXhpdF9tbWFwIGlzIHNlZW5cbiBcdCAqL1xuLVx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pIFx1MDAyNlx1MDAyNiAhX19vb21fcmVhcF90YXNrX21tKG1tKSlcbi1cdFx0cmV0ID0gLUVBR0FJTjtcbitcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSkge1xuK1x0XHRyZXQgPSBfX29vbV9yZWFwX3Rhc2tfbW0obW0pO1xuK1x0XHRpZiAocmV0ID09IC1FQUdBSU4pIHtcdC8qIGEgd3JpdGVyIGdvdCB0aGUgbG9jaywgcXVldWUgdXAgYWdhaW4gKi9cbitcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdGdvdG8gYWdhaW47XG4rXHRcdH1cbitcdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4rXHRcdFx0cmV0ID0gLUVBR0FJTjtcbitcdH1cbiBcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFxuIGRyb3BfbW06XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzowMS45MzQ1MTc3NjZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDk2NDMyMDA0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBvb21fcmVhcGVyYCBJbXByb3ZlbWVudCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBhc3Nlc3MgdGhlIG5lZWQgZm9yIEtNU0FOIGZ1enppbmcuIFRoZSBkZXNjcmlwdGlvbiBpbmRpY2F0ZXMgYW4gb3B0aW1pemF0aW9uIHRvIGBvb21fcmVhcGVyYCBhbmQgYHByb2Nlc3NfbXJlbGVhc2VgLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGhvdyBtZW1vcnkgaXMgemFwcGVkLiBUaGUgY2hhbmdlIHByb3Bvc2VzIHphcHBpbmcgbWVtb3J5IGluIDFHQiBjaHVua3MgaW5zdGVhZCBvZiB0aGUgZW50aXJlIFZNQSBhdCBvbmNlLCBhbmQgaXQgYXR0ZW1wdHMgdG8geWllbGQgYG1tYXBfbG9ja2AgaWYgYSB3cml0ZXIgaXMgY29udGVuZGluZy4gVGhpcyBzb3VuZHMgbGlrZSBpdCBjb3VsZCBtaXRpZ2F0ZSBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIGFuZCBpbXByb3ZlIHJlc3BvbnNpdmVuZXNzIGR1cmluZyBPT00gc2l0dWF0aW9ucy5cblxuRmlyc3QsIEknbGwgdGFrZSBhIGNsb3NlIGxvb2sgYXQgdGhlIGNvZGUgY2hhbmdlcy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHdpdGhpbiBgbW0vaW50ZXJuYWwuaGAgYW5kIGBtbS9tZW1vcnkuY2AuIEkgc2VlIHRoYXQgdGhlIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYCBmdW5jdGlvbiBzaWduYXR1cmUgbm93IGluY2x1ZGVzIGBzdGFydGAgYW5kIGBlbmRgIHBhcmFtZXRlcnM6XG5cbmBgYGNcbi1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4raW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBlbmQpO1xuYGBgXG5cbkFuZCB0aGUgY29ycmVzcG9uZGluZyBjaGFuZ2VzIGluIGBtbS9tZW1vcnkuY2AgY29uZmlybSB0aGlzLiBUaGUgYG1tdV9ub3RpZmllcl9yYW5nZV9pbml0YCBjYWxsIGlzIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgYHN0YXJ0YCBhbmQgYGVuZGAgYXJndW1lbnRzLCB3aGljaCBzdWdnZXN0cyB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgYWRhcHRlZCB0byBvcGVyYXRlIG9uIHJlZ2lvbnMgd2l0aGluIHRoZSBWTUEuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgY2FsbCBzaXRlcyBjb3JyZWN0bHkgdXNlIGBzdGFydGAgYW5kIGBlbmRgIHBhcmFtZXRlcnMgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3QuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBgc3RhcnRgIGFuZCBgZW5kYCBhcmd1bWVudHMgYXJlIGFjdHVhbGx5IGJlaW5nIHVzZWQuIEknbGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiBjYWxscyB1c2UgdGhlIG5ldyBhcmd1bWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzowNi44OTg4Mzk3OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5NDEzNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInphcF92bWFfZm9yX3JlYXBpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9NTkzPXZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTU5NS1cXHRcXHR1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscyk7XFxubW0vaW50ZXJuYWwuaDo1OTY6aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vaW50ZXJuYWwuaC01OTctXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQpO1xcbi0tXFxubW0vbWVtb3J5LmM9MjE2OT1zdGF0aWMgdm9pZCBfX3phcF92bWFfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1vcnkuYy0yMjA5LS8qKlxcbm1tL21lbW9yeS5jOjIyMTA6ICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhIHJhbmdlIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xcbm1tL21lbW9yeS5jLTIyMTEtICogQHZtYTogVGhlIHZtYSB0byB6YXAuXFxuLS1cXG5tbS9tZW1vcnkuYy0yMjE5LSAqL1xcbm1tL21lbW9yeS5jOjIyMjA6aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vbWVtb3J5LmMtMjIyMS1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbm1tL29vbV9raWxsLmM9NTEyPXN0YXRpYyBpbnQgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vb29tX2tpbGwuYy01NTUtXFx0XFx0XFx0XFx0YWRkciA9IG1heCh2bWEtXFx1MDAzZXZtX3N0YXJ0LCBBTElHTl9ET1dOKGVuZCAtIDEsIFNaXzFHKSk7XFxubW0vb29tX2tpbGwuYzo1NTY6XFx0XFx0XFx0XFx0aWYgKHphcF92bWFfZm9yX3JlYXBpbmcodm1hLCBhZGRyLCBlbmQpKSB7XFxubW0vb29tX2tpbGwuYy01NTctXFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVCVVNZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzowNy4xODgyNTkwMThaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzQxMjc3MzU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgemFwX3ZtYV9mb3JfcmVhcGluZ2AgaW4gYG1tL21lbW9yeS5jYCoqXG5cbk9rYXksIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGB6YXBfdm1hX2Zvcl9yZWFwaW5nYCBmdW5jdGlvbiBpbiBkZXRhaWwuIFRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEknbGwgc3RhcnQgYnkgbG9va2luZyBhdCBgbW0vbWVtb3J5LmNgIGFuZCBzcGVjaWZpY2FsbHkgcGlucG9pbnQgbGluZSAyMjIwLiBUaGF0IHNob3VsZCBiZSB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIGZ1bGwgZGVmaW5pdGlvbi4gSSdtIGhvcGluZyB0aGF0IGJ5IHRyYWNpbmcgdGhyb3VnaCB0aGUgY29tcGxldGUgZnVuY3Rpb24sIEkgY2FuIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIG1lY2hhbmljcy4gVGhpcyBhcHByb2FjaCB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGFuYWx5emUgdGhlIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzg3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDM6MTAuNjAxMDM0NzRaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ1NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMTA6XFx0ICogemFwX3ZtYV9mb3JfcmVhcGluZyAtIHphcCBhIHJhbmdlIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xcbjIyMTE6XFx0ICogQHZtYTogVGhlIHZtYSB0byB6YXAuXFxuMjIxMjpcXHQgKiBAc3RhcnQ6IFRoZSBmaXJzdCBhZGRyZXNzIHRvIHphcC5cXG4yMjEzOlxcdCAqIEBlbmQ6IE9uZSBwYXN0IHRoZSBsYXN0IGFkZHJlc3MgdG8gemFwLlxcbjIyMTQ6XFx0ICpcXG4yMjE1OlxcdCAqIFphcCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIGluIFtAc3RhcnQsIEBlbmQpIG9mIHRoZSB2bWEgd2l0aG91dCBibG9ja2luZ1xcbjIyMTY6XFx0ICogZm9yIHVzZSBieSB0aGUgb29tIGtpbGxlci4gSHVnZXRsYiB2bWFzIGFyZSBub3Qgc3VwcG9ydGVkLlxcbjIyMTc6XFx0ICpcXG4yMjE4OlxcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHdlIHdvdWxkIGhhdmUgdG8gYmxvY2suXFxuMjIxOTpcXHQgKi9cXG4yMjIwOlxcdGludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbjIyMjE6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQpXFxuMjIyMjpcXHR7XFxuMjIyMzpcXHRcXHRzdHJ1Y3QgemFwX2RldGFpbHMgZGV0YWlscyA9IHtcXG4yMjI0OlxcdFxcdFxcdC5yZWFwaW5nID0gdHJ1ZSxcXG4yMjI1OlxcdFxcdH07XFxuMjIyNjpcXHRcXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xcbjIyMjc6XFx0XFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xcbjIyMjg6XFx0XFxuMjIyOTpcXHRcXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cXHUwMDNldm1fbW0sXFxuMjIzMDpcXHRcXHRcXHRcXHRcXHRzdGFydCwgZW5kKTtcXG4yMjMxOlxcdFxcdHRsYl9nYXRoZXJfbW11KFxcdTAwMjZ0bGIsIHZtYS1cXHUwMDNldm1fbW0pO1xcbjIyMzI6XFx0XFx0aWYgKG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X25vbmJsb2NrKFxcdTAwMjZyYW5nZSkpIHtcXG4yMjMzOlxcdFxcdFxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbjIyMzQ6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yMjM1OlxcdFxcdH1cXG4yMjM2OlxcdFxcdF9femFwX3ZtYV9yYW5nZShcXHUwMDI2dGxiLCB2bWEsIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQsIFxcdTAwMjZkZXRhaWxzKTtcXG4yMjM3OlxcdFxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChcXHUwMDI2cmFuZ2UpO1xcbjIyMzg6XFx0XFx0dGxiX2ZpbmlzaF9tbXUoXFx1MDAyNnRsYik7XFxuMjIzOTpcXHRcXHRyZXR1cm4gMDtcXG4yMjQwOlxcdH1cXG4yMjQxOlxcdFxcbjIyNDI6XFx0LyoqXFxuMjI0MzpcXHQgKiB1bm1hcF92bWFzIC0gdW5tYXAgYSByYW5nZSBvZiBtZW1vcnkgY292ZXJlZCBieSBhIGxpc3Qgb2Ygdm1hJ3NcXG4yMjQ0OlxcdCAqIEB0bGI6IGFkZHJlc3Mgb2YgdGhlIGNhbGxlcidzIHN0cnVjdCBtbXVfZ2F0aGVyXFxuMjI0NTpcXHQgKiBAdW5tYXA6IFRoZSB1bm1hcF9kZXNjXFxuMjI0NjpcXHQgKlxcbjIyNDc6XFx0ICogVW5tYXAgYWxsIHBhZ2VzIGluIHRoZSB2bWEgbGlzdC5cXG4yMjQ4OlxcdCAqXFxuMjI0OTpcXHQgKiBPbmx5IGFkZHJlc3NlcyBiZXR3ZWVuIGBzdGFydCcgYW5kIGBlbmQnIHdpbGwgYmUgdW5tYXBwZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQzOjEwLjYwMTU4MzMwMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MDc4NTU4MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9vb21fa2lsbC5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIE9PTSBraWxsZXIncyBjb3JlLiBJJ20gZm9jdXNpbmcgb24gYG1tL29vbV9raWxsLmNgIG5vdy4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBkZWNpc2lvbi1tYWtpbmcgaGFwcGVucyDigJMgd2hpY2ggcHJvY2VzcyBnZXRzIHNhY3JpZmljZWQgYW5kIGhvdyB3ZSBoYW5kbGUgdGhlIGFmdGVybWF0aC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBzZWxlY3Rpb24gYWxnb3JpdGhtLCB0aGUgc2NvcmluZyBtZWNoYW5pc21zLCBhbmQgdGhlIGNydWNpYWwgYXNwZWN0cyBvZiBwcmV2ZW50aW5nIGNhc2NhZGluZyBmYWlsdXJlcy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBpZiB0aGVyZSdzIGJlZW4gYW55IHJlY2VudCB0d2Vha2luZyBvZiB0aGUgaGV1cmlzdGljcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSdzIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiB0byBwaW5wb2ludCBwb3NzaWJsZSBjb250ZW50aW9uIHBvaW50cy4gTGV0J3Mgc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIG1lbW9yeSByZWNsYWltIGFuZCBzaWduYWwgZGVsaXZlcnkgd2l0aGluIHRoaXMgY3JpdGljYWwgcGF0aC4gQW55IHJlY2VudCBjaGFuZ2VzIHRvIGhvdyBgb29tX2JhZG5lc3NgIGlzIGNhbGN1bGF0ZWQsIG9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgb29tX2tpbGxfcHJvY2Vzc2AsIGFyZSB0b3Agb2YgbWluZC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQzOjE1LjY4MDE0MzkyNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk1OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vb29tX2tpbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTA6XFx0ICogY2FsbGVyIHNob3VsZCByZXRha2UgaXQgYW5kIHN0YXJ0IG92ZXIuXFxuIDUxMTpcXHQgKi9cXG4gNTEyOlxcdHN0YXRpYyBpbnQgX19vb21fcmVhcF90YXNrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiA1MTM6XFx0e1xcbiA1MTQ6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDUxNTpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIGVuZDtcXG4gNTE2OlxcdFxcdGludCByZXQgPSAwO1xcbiA1MTc6XFx0XFx0TUFfU1RBVEUobWFzLCBcXHUwMDI2bW0tXFx1MDAzZW1tX210LCBVTE9OR19NQVgsIFVMT05HX01BWCk7XFxuIDUxODpcXHRcXG4gNTE5OlxcdFxcdC8qXFxuIDUyMDpcXHRcXHQgKiBUZWxsIGFsbCB1c2VycyBvZiBnZXRfdXNlci9jb3B5X2Zyb21fdXNlciBldGMuLi4gdGhhdCB0aGUgY29udGVudFxcbiA1MjE6XFx0XFx0ICogaXMgbm8gbG9uZ2VyIHN0YWJsZS4gTm8gYmFycmllcnMgcmVhbGx5IG5lZWRlZCBiZWNhdXNlIHVubWFwcGluZ1xcbiA1MjI6XFx0XFx0ICogc2hvdWxkIGltcGx5IGJhcnJpZXJzIGFscmVhZHkgYW5kIHRoZSByZWFkZXIgd291bGQgaGl0IGEgcGFnZSBmYXVsdFxcbiA1MjM6XFx0XFx0ICogaWYgaXQgc3R1bWJsZWQgb3ZlciBhIHJlYXBlZCBtZW1vcnkuXFxuIDUyNDpcXHRcXHQgKi9cXG4gNTI1OlxcdFxcdG1tX2ZsYWdzX3NldChNTUZfVU5TVEFCTEUsIG1tKTtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0LypcXG4gNTI4OlxcdFxcdCAqIEl0IG1pZ2h0IHN0YXJ0IHJhY2luZyB3aXRoIHRoZSBkeWluZyB0YXNrIGFuZCBjb21wZXRlIGZvciBzaGFyZWRcXG4gNTI5OlxcdFxcdCAqIHJlc291cmNlcyAtIGUuZy4gcGFnZSB0YWJsZSBsb2NrIGNvbnRlbnRpb24gaGFzIGJlZW4gb2JzZXJ2ZWQuXFxuIDUzMDpcXHRcXHQgKiBSZWR1Y2UgdGhvc2UgcmFjZXMgYnkgcmVhcGluZyB0aGUgb29tIHZpY3RpbSBmcm9tIHRoZSBvdGhlciBlbmRcXG4gNTMxOlxcdFxcdCAqIG9mIHRoZSBhZGRyZXNzIHNwYWNlLlxcbiA1MzI6XFx0XFx0ICovXFxuIDUzMzpcXHRcXHRtYXNfZm9yX2VhY2hfcmV2KFxcdTAwMjZtYXMsIHZtYSwgMCkge1xcbiA1MzQ6XFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fSFVHRVRMQnxWTV9QRk5NQVApKVxcbiA1MzU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDUzNjpcXHRcXG4gNTM3OlxcdFxcdFxcdC8qXFxuIDUzODpcXHRcXHRcXHQgKiBPbmx5IGFub255bW91cyBwYWdlcyBoYXZlIGEgZ29vZCBjaGFuY2UgdG8gYmUgZHJvcHBlZFxcbiA1Mzk6XFx0XFx0XFx0ICogd2l0aG91dCBhZGRpdGlvbmFsIHN0ZXBzIHdoaWNoIHdlIGNhbm5vdCBhZmZvcmQgYXMgd2VcXG4gNTQwOlxcdFxcdFxcdCAqIGFyZSBPT00gYWxyZWFkeS5cXG4gNTQxOlxcdFxcdFxcdCAqXFxuIDU0MjpcXHRcXHRcXHQgKiBXZSBkbyBub3QgZXZlbiBjYXJlIGFib3V0IGZzIGJhY2tlZCBwYWdlcyBiZWNhdXNlIGFsbFxcbiA1NDM6XFx0XFx0XFx0ICogd2hpY2ggYXJlIHJlY2xhaW1hYmxlIGhhdmUgYWxyZWFkeSBiZWVuIHJlY2xhaW1lZCBhbmRcXG4gNTQ0OlxcdFxcdFxcdCAqIHdlIGRvIG5vdCB3YW50IHRvIGJsb2NrIGV4aXRfbW1hcCBieSBrZWVwaW5nIG1tIHJlZlxcbiA1NDU6XFx0XFx0XFx0ICogY291bnQgZWxldmF0ZWQgd2l0aG91dCBhIGdvb2QgcmVhc29uLlxcbiA1NDY6XFx0XFx0XFx0ICovXFxuIDU0NzpcXHRcXHRcXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NIQVJFRCkpIHtcXG4gNTQ4OlxcdFxcdFxcdFxcdC8qXFxuIDU0OTpcXHRcXHRcXHRcXHQgKiBaYXAgaW4gMUcgY2h1bmtzIGFuZCBoYW5kIG1tYXBfbG9jayBvdmVyIHdoZW5ldmVyIGFcXG4gNTUwOlxcdFxcdFxcdFxcdCAqIHdyaXRlciBpcyBxdWV1ZWQgb24gaXQsIHNvIGl0IGRvZXMgbm90IHdhaXQgZm9yIHRoZVxcbiA1NTE6XFx0XFx0XFx0XFx0ICogd2hvbGUgcmVhcC5cXG4gNTUyOlxcdFxcdFxcdFxcdCAqL1xcbiA1NTM6XFx0XFx0XFx0XFx0ZW5kID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxuIDU1NDpcXHRcXHRcXHRcXHR3aGlsZSAoZW5kIFxcdTAwM2Ugdm1hLVxcdTAwM2V2bV9zdGFydCkge1xcbiA1NTU6XFx0XFx0XFx0XFx0XFx0YWRkciA9IG1heCh2bWEtXFx1MDAzZXZtX3N0YXJ0LCBBTElHTl9ET1dOKGVuZCAtIDEsIFNaXzFHKSk7XFxuIDU1NjpcXHRcXHRcXHRcXHRcXHRpZiAoemFwX3ZtYV9mb3JfcmVhcGluZyh2bWEsIGFkZHIsIGVuZCkpIHtcXG4gNTU3OlxcdFxcdFxcdFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4gNTU4OlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NTk6XFx0XFx0XFx0XFx0XFx0fVxcbiA1NjA6XFx0XFx0XFx0XFx0XFx0ZW5kID0gYWRkcjtcXG4gNTYxOlxcdFxcdFxcdFxcdFxcdGlmICghbW1hcF9sb2NrX2lzX2NvbnRlbmRlZChtbSkpXFxuIDU2MjpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNTYzOlxcdFxcbiA1NjQ6XFx0XFx0XFx0XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuIDU2NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gNTY2OlxcdFxcdFxcdFxcdH1cXG4gNTY3OlxcdFxcdFxcdH1cXG4gNTY4OlxcdFxcdH1cXG4gNTY5OlxcdFxcbiA1NzA6XFx0XFx0cmV0dXJuIHJldDtcXG4gNTcxOlxcdH1cXG4gNTcyOlxcdFxcbiA1NzM6XFx0LypcXG4gNTc0OlxcdCAqIFJlYXBzIHRoZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBnaXZlbiB0YXNrLlxcbiA1NzU6XFx0ICpcXG4gNTc2OlxcdCAqIFJldHVybnMgMCB3aGVuIGRvbmUsIC1FQUdBSU4gaWYgbW1hcF9sb2NrIHdhcyBoYW5kZWQgb3ZlciB0byBhIHdyaXRlclxcbiA1Nzc6XFx0ICogYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHN0YXJ0IG92ZXIsIGFuZCAtRUJVU1kgaWYgbm9uZSBvciBwYXJ0IG9mIHRoZVxcbiA1Nzg6XFx0ICogYWRkcmVzcyBzcGFjZSBoYXMgYmVlbiByZWNsYWltZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5IGxhdGVyLlxcbiA1Nzk6XFx0ICovXFxuIDU4MDpcXHRzdGF0aWMgaW50IG9vbV9yZWFwX3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiA1ODE6XFx0e1xcbiA1ODI6XFx0XFx0aW50IHJldCA9IDA7XFxuIDU4MzpcXHRcXG4gNTg0OlxcdFxcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sobW0pKSB7XFxuIDU4NTpcXHRcXHRcXHR0cmFjZV9za2lwX3Rhc2tfcmVhcGluZyh0c2stXFx1MDAzZXBpZCk7XFxuIDU4NjpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA1ODc6XFx0XFx0fVxcbiA1ODg6XFx0XFxuIDU4OTpcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzoxNS42ODAzMjU2MTVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE5NDM3OTA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbW0vb29tX2tpbGwuY2AgZm9yIE9PTSBEaWFnbm9zdGljcyoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBPT00gc2l0dWF0aW9uLCBhbmQgSSdtIHRoaW5raW5nLCBcIkxldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZSBoZWFydCBvZiB0aGUgT09NIGtpbGxlciBpdHNlbGYuXCIgSSd2ZSBnb3QgYSBzdHJvbmcgc3VzcGljaW9uIHRoYXQgdGhlIGNvcmUgaXNzdWUgaXMgZ29pbmcgdG8gYmUgcmV2ZWFsZWQgd2l0aGluIGBtbS9vb21fa2lsbC5jYC4gSSdtIHNwZWNpZmljYWxseSB6ZXJvaW5nIGluIG9uIGxpbmVzIDYyMCB0aHJvdWdoIDY0NS4gVGhhdCBzZWN0aW9uIGlzIHVzdWFsbHkgYSBjcnVjaWFsIGFyZWEgZm9yIGRldGVybWluaW5nIHdoaWNoIHByb2Nlc3NlcyBhcmUgc2VsZWN0ZWQgZm9yIHRlcm1pbmF0aW9uLCBhbmQgaG93IHRoZSBrZXJuZWwgbWFrZXMgdGhvc2UgY3JpdGljYWwgZGVjaXNpb25zIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUuIExldCdzIHNlZSBpZiB0aGF0IHNlY3Rpb24gaGFzIHRoZSBkZXRhaWxzIEkgYW0gbG9va2luZyBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEyOjQzOjE4Ljg3NDcwODQxN1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vb29tX2tpbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MjA6XFx0fVxcbiA2MjE6XFx0XFxuIDYyMjpcXHQjZGVmaW5lIE1BWF9PT01fUkVBUF9SRVRSSUVTIDEwXFxuIDYyMzpcXHRzdGF0aWMgdm9pZCBvb21fcmVhcF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbiA2MjQ6XFx0e1xcbiA2MjU6XFx0XFx0aW50IGF0dGVtcHRzID0gMCwgcmV0O1xcbiA2MjY6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stXFx1MDAzZXNpZ25hbC1cXHUwMDNlb29tX21tO1xcbiA2Mjc6XFx0XFxuIDYyODpcXHRcXHQvKiBSZXRyeSB0aGUgbW1hcF9yZWFkX3RyeWxvY2sobW0pIGEgZmV3IHRpbWVzOyBoYW5kaW5nIHRoZSBsb2NrIG92ZXIgaXMgbm90IGFuIGF0dGVtcHQgKi9cXG4gNjI5OlxcdFxcdHdoaWxlICgocmV0ID0gb29tX3JlYXBfdGFza19tbSh0c2ssIG1tKSkgXFx1MDAyNlxcdTAwMjZcXG4gNjMwOlxcdFxcdCAgICAgICAocmV0ID09IC1FQUdBSU4gfHwgKythdHRlbXB0cyBcXHUwMDNjIE1BWF9PT01fUkVBUF9SRVRSSUVTKSlcXG4gNjMxOlxcdFxcdFxcdHNjaGVkdWxlX3RpbWVvdXRfaWRsZShIWi8xMCk7XFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdGlmICghcmV0IHx8IG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBtbSkpXFxuIDYzNDpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDYzNTpcXHRcXG4gNjM2OlxcdFxcdHByX2luZm8oXFxcIm9vbV9yZWFwZXI6IHVuYWJsZSB0byByZWFwIHBpZDolZCAoJXMpXFxcXG5cXFwiLFxcbiA2Mzc6XFx0XFx0XFx0dGFza19waWRfbnIodHNrKSwgdHNrLVxcdTAwM2Vjb21tKTtcXG4gNjM4OlxcdFxcdHNjaGVkX3Nob3dfdGFzayh0c2spO1xcbiA2Mzk6XFx0XFx0ZGVidWdfc2hvd19hbGxfbG9ja3MoKTtcXG4gNjQwOlxcdFxcbiA2NDE6XFx0ZG9uZTpcXG4gNjQyOlxcdFxcdHRzay1cXHUwMDNlb29tX3JlYXBlcl9saXN0ID0gTlVMTDtcXG4gNjQzOlxcdFxcbiA2NDQ6XFx0XFx0LypcXG4gNjQ1OlxcdFxcdCAqIEhpZGUgdGhpcyBtbSBmcm9tIE9PTSBraWxsZXIgYmVjYXVzZSBpdCBoYXMgYmVlbiBlaXRoZXIgcmVhcGVkIG9yXFxuIDY0NjpcXHRcXHQgKiBzb21lYm9keSBjYW4ndCBjYWxsIG1tYXBfd3JpdGVfdW5sb2NrKG1tKS5cXG4gNjQ3OlxcdFxcdCAqL1xcbiA2NDg6XFx0XFx0bW1fZmxhZ3Nfc2V0KE1NRl9PT01fU0tJUCwgbW0pO1xcbiA2NDk6XFx0XFxuIDY1MDpcXHRcXHQvKiBEcm9wIGEgcmVmZXJlbmNlIHRha2VuIGJ5IHF1ZXVlX29vbV9yZWFwZXIgKi9cXG4gNjUxOlxcdFxcdHB1dF90YXNrX3N0cnVjdCh0c2spO1xcbiA2NTI6XFx0fVxcbiA2NTM6XFx0XFxuIDY1NDpcXHRzdGF0aWMgaW50IG9vbV9yZWFwZXIodm9pZCAqdW51c2VkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzoxOC44NzQ4ODU2OTdaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjcyOTI2NTIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gT09NIEtpbGxlciBCZWhhdmlvcioqXG5cbk9rYXksIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggdGhpcyBPT00ga2lsbGVyIGludmVzdGlnYXRpb24sIGFuZCBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gSSd2ZSBiZWVuIHRyYWNpbmcgdGhlIGtpbGwgc2lnbmFscyBhbmQgbWVtb3J5IHByZXNzdXJlIGJ1dCBJJ20ganVzdCBnZXR0aW5nIHN0YXJ0ZWQuIEkga25vdyB0aGUgT09NIGtpbGxlciBoYXMgY29tcGxleCBkZWNpc2lvbi1tYWtpbmcsIGFuZCBJJ20gbG9va2luZyBhdCBob3cgdGhlIGtlcm5lbCBkZWNpZGVzIHdoYXQgdG8gYWN0dWFsbHkgKnJlbGVhc2UqIHdoZW4gaXQgZ2V0cyBkZXNwZXJhdGUuIEknbSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgem9vbSBpbiBvbiB0aGUgYHByb2Nlc3NfbXJlbGVhc2VgIGZ1bmN0aW9uIG5vdywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEyNTAgaW4gYG1tL29vbV9raWxsLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBtZW1vcnkgcmVsZWFzZSBtZWNoYW5pc21zIGluIHBsYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQncyBkb2luZyB3aXRoIHBvdGVudGlhbCBtZW1vcnkgcmVsZWFzZXMuIEknbSBob3BpbmcgSSBjYW4gY29ycmVsYXRlIHRoZSBmdW5jdGlvbnMgdGhlcmUgd2l0aCBteSB0ZXN0IG1lbW9yeSBsb2FkcyB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgT09NIGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0MzoyMS42MDQxNTI3ODJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL29vbV9raWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI0MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI0MDpcXHRcXHR9XFxuMTI0MTpcXHRcXG4xMjQyOlxcdFxcdG1tID0gcC1cXHUwMDNlbW07XFxuMTI0MzpcXHRcXHRtbWdyYWIobW0pO1xcbjEyNDQ6XFx0XFxuMTI0NTpcXHRcXHRpZiAodGFza193aWxsX2ZyZWVfbWVtKHApKVxcbjEyNDY6XFx0XFx0XFx0cmVhcCA9IHRydWU7XFxuMTI0NzpcXHRcXHRlbHNlIHtcXG4xMjQ4OlxcdFxcdFxcdC8qIEVycm9yIG9ubHkgaWYgdGhlIHdvcmsgaGFzIG5vdCBiZWVuIGRvbmUgYWxyZWFkeSAqL1xcbjEyNDk6XFx0XFx0XFx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVxcbjEyNTA6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xMjUxOlxcdFxcdH1cXG4xMjUyOlxcdFxcdHRhc2tfdW5sb2NrKHApO1xcbjEyNTM6XFx0XFxuMTI1NDpcXHRcXHRpZiAoIXJlYXApXFxuMTI1NTpcXHRcXHRcXHRnb3RvIGRyb3BfbW07XFxuMTI1NjpcXHRcXG4xMjU3OlxcdGFnYWluOlxcbjEyNTg6XFx0XFx0aWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSkge1xcbjEyNTk6XFx0XFx0XFx0cmV0ID0gLUVJTlRSO1xcbjEyNjA6XFx0XFx0XFx0Z290byBkcm9wX21tO1xcbjEyNjE6XFx0XFx0fVxcbjEyNjI6XFx0XFx0LypcXG4xMjYzOlxcdFxcdCAqIENoZWNrIE1NRl9PT01fU0tJUCBhZ2FpbiB1bmRlciBtbWFwX3JlYWRfbG9jayBwcm90ZWN0aW9uIHRvIGVuc3VyZVxcbjEyNjQ6XFx0XFx0ICogcG9zc2libGUgY2hhbmdlIGluIGV4aXRfbW1hcCBpcyBzZWVuXFxuMTI2NTpcXHRcXHQgKi9cXG4xMjY2OlxcdFxcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIG1tKSkge1xcbjEyNjc6XFx0XFx0XFx0cmV0ID0gX19vb21fcmVhcF90YXNrX21tKG1tKTtcXG4xMjY4OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTikge1xcdC8qIGEgd3JpdGVyIGdvdCB0aGUgbG9jaywgcXVldWUgdXAgYWdhaW4gKi9cXG4xMjY5OlxcdFxcdFxcdFxcdHJldCA9IDA7XFxuMTI3MDpcXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcbjEyNzE6XFx0XFx0XFx0fVxcbjEyNzI6XFx0XFx0XFx0aWYgKHJldCA9PSAtRUJVU1kpXFxuMTI3MzpcXHRcXHRcXHRcXHRyZXQgPSAtRUFHQUlOO1xcbjEyNzQ6XFx0XFx0fVxcbjEyNzU6XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuMTI3NjpcXHRcXG4xMjc3OlxcdGRyb3BfbW06XFxuMTI3ODpcXHRcXHRtbWRyb3AobW0pO1xcbjEyNzk6XFx0cHV0X3Rhc2s6XFxuMTI4MDpcXHRcXHRwdXRfdGFza19zdHJ1Y3QodGFzayk7XFxuMTI4MTpcXHRcXHRyZXR1cm4gcmV0O1xcbjEyODI6XFx0I2Vsc2VcXG4xMjgzOlxcdFxcdHJldHVybiAtRU5PU1lTO1xcbjEyODQ6XFx0I2VuZGlmIC8qIENPTkZJR19NTVUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NDM6MjEuNjA0Mjg0MTcyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NTU3NjcwNjkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSZWFzb25pbmc6IE9PTSBSZWFwZXIgYW5kIFZNQSBaYXBwaW5nIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIHRlbGxzIG1lIHRoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgT09NIHJlYXBlciBhbmQgdGhlIFZNQSB6YXBwaW5nIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBfX29vbV9yZWFwX3Rhc2tfbW1gIGFuZCBgemFwX3ZtYV9mb3JfcmVhcGluZ2AuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIG1ha2UgdGhlIHJlYXBpbmcgcHJvY2VzcyBtb3JlIGVmZmljaWVudCBhbmQgbGVzcyBwcm9uZSB0byBibG9ja2luZywgcGFydGljdWxhcmx5IGluIHRoZSBwcmVzZW5jZSBvZiBjb250ZW50aW9uIG9uIHRoZSBgbW1hcF9sb2NrYC4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZXJlIGhhdmUgYmVlbiBzb21lIHJldHVybiB2YWx1ZSBhbmQgZXJyb3IgaGFuZGxpbmcgaW1wcm92ZW1lbnRzIGluIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIFRoZSBjaHVua2luZyBvZiB0aGUgVk1BIHJlYXBpbmcgdG8gMUdCIGlzIHRoZSBzaWduaWZpY2FudCBjaGFuZ2UgdGhhdCBhZmZlY3RzIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5NeSBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRmlyc3QsIHRoZSBgemFwX3ZtYV9mb3JfcmVhcGluZ2AgZnVuY3Rpb24gbG9va3MgbGlrZSBpdOKAmXMgYmVpbmcgbWFkZSBzYWZlci4gSXQgbm93IHRha2VzIGV4cGxpY2l0IGBzdGFydGAgYW5kIGBlbmRgIGJvdW5kcywgaW5pdGlhbGl6ZXMgYSBgemFwX2RldGFpbHNgIHN0cnVjdCwgc2V0cyB1cCBhbiBgbW11X25vdGlmaWVyX3JhbmdlYCwgYW5kIGNhbGxzIGEgc2VyaWVzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCAqbm90aGluZyogaW4gdGhpcyBzZXF1ZW5jZSB0b3VjaGVzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIHRoZSB2YXJpYWJsZXMgdXNlZCwgbGlrZSBgZGV0YWlsc2AgYW5kIGByYW5nZWAsIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuXG5JbiBgX19vb21fcmVhcF90YXNrX21tYCwgdGhlIGxvb3Bpbmcgc3RyYXRlZ3kgaXMgY2hhbmdpbmcuIEluc3RlYWQgb2YgdGhlIHByZXZpb3VzIG1ldGhvZCwgd2UgYXJlIGxvb3BpbmcgZG93bndhcmRzIGluIDFHQiBjaHVua3MgY2hlY2tpbmcgZm9yIGBtbWFwX2xvY2tfaXNfY29udGVuZGVkYC4gSWYgaXQncyBjb250ZW5kZWQsIHRoZSBsb2NrIGlzIGRyb3BwZWQsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBoZXJlIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBXZSdyZSBub3QgYWxsb2NhdGluZyBhbnl0aGluZyBuZXcsIGFuZCBub3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIGEgbWFqb3IgcG9pbnQgb2YgY29uc2lkZXJhdGlvbiB3aGVuIHRoaW5raW5nIGFib3V0IGxlYWtzLiBUaGUgc2FtZSBwYXR0ZXJuIGNvbnRpbnVlcyBpbiBgb29tX3JlYXBfdGFza19tbWAsIHdoZXJlIHdlIGhhdmUgYW4gYGludGAgcmV0dXJuIHZhbHVlIGFuZCBpbml0aWFsaXplZCBgcmV0YCB2YXJpYWJsZS4gRmluYWxseSwgdGhlIHJldHJ5IGhhbmRsaW5nIGluIGBvb21fcmVhcF90YXNrYCBhbmQgdGhlIHJlYWNxdWlzaXRpb24gb2YgdGhlIGxvY2sgaW4gYHByb2Nlc3NfbXJlbGVhc2VgIGFyZSBjYXJlZnVsbHkgc3RydWN0dXJlZC5cblxuU28sIGFtIEkgc2VlaW5nIGFueXRoaW5nIHRoYXQganVtcHMgb3V0IGFzIGEgS01TQU4gY29uY2Vybj8gTGV0IG1lIHJldmlldyB0aGUgcXVlc3Rpb25zOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm8sIG5vdGhpbmcncyBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGF04oCZcyBhIGdvb2Qgc2lnbi5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBBYnNvbHV0ZWx5IG5vdC4gQWxsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbjMuICAqKk5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8gbmV3IGFsbG9jYXRpb25zIGFyZSBiZWluZyBtYWRlLlxuNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGE/KiogVGhpcyBpcyB6YXBwaW5nIHBhZ2UgdGFibGUgZW50cmllcy4gTm90IGFwcGxpY2FibGUuXG5cblRoZSBhcmVhcyBvZiBjb25jZXJuIGFyZSBtb3JlIGFyb3VuZCBwb3RlbnRpYWw6XG5cbiogICBMb2NraW5nIGlzc3VlczogRHJvcHBlZCBsb2NrcyB2cy4gaGVsZCBsb2NrcywgZGVhZGxvY2tzLCBsb2NrIGNvbnRlbnRpb24uIFRoZXNlIHNob3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUC5cbiogICBWTUEgaXRlcmF0b3IgLyByYWNlIGNvbmRpdGlvbnM6IENvdWxkIHRoZSBWTUEgYmUgbW9kaWZpZWQgd2hpbGUgdGhlIGxvY2sgaXMgZHJvcHBlZD8gUmV0dXJuaW5nIGAtRUFHQUlOYCBhbmQgcmVzdGFydGluZyBmcm9tIHNjcmF0Y2ggc2hvdWxkIGhhbmRsZSBpdC4gS0FTQU4vTE9DS0RFUC9nZW5lcmFsIGtlcm5lbCBhc3NlcnRzIHNob3VsZCBjYXRjaCBpdC5cbiogICBBcml0aG1ldGljIG9yIGluZmluaXRlIGxvb3BzIGZyb20gYSBicm9rZW4gYGVuZGAvYGFkZHJgIGNhbGN1bGF0aW9uLlxuXG5JbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzICpub3QqIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gd291bGRuJ3QgY2F0Y2ggYW55dGhpbmcgdW5pcXVlIGhlcmUuIExPQ0tERVAgYW5kIEtBU0FOIGFyZSBtb3JlIGFwcHJvcHJpYXRlLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzg1LCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo0NjozNy4xODA5OTQ0MDVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00gcmVhcGVyIGxvZ2ljIGluIG1tL29vbV9raWxsLmMgYW5kIG1tL21lbW9yeS5jIHNvIHRoYXQgVk1BcyBhcmUgemFwcGVkIGluIDFHQiBjaHVua3MsIGFsbG93aW5nIG1tYXBfbG9jayB0byBiZSB5aWVsZGVkIHRvIHdhaXRpbmcgd3JpdGVycyB1cG9uIGNvbnRlbnRpb24uIEl0IGFsc28gdXBkYXRlcyBlcnJvciBoYW5kbGluZyBhY3Jvc3MgemFwX3ZtYV9mb3JfcmVhcGluZywgX19vb21fcmVhcF90YXNrX21tLCBvb21fcmVhcF90YXNrLCBhbmQgdGhlIHByb2Nlc3NfbXJlbGVhc2Ugc3lzY2FsbC5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgKGFkZHIsIGVuZCwgcmV0LCBhdHRlbXB0cykgYXJlIHNjYWxhciB0eXBlcyBhbmQgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb3IgYXNzaWduZWQgcHJpb3IgdG8gdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IGhlYXAvc3RhY2sgYnVmZmVycywgZG9lcyBub3QgY29weSBhbnkgZGF0YSBvciBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzIGFmZmVjdGluZyByZWFkcyBvZiBtZW1vcnkuIEFueSBwb3RlbnRpYWwgZGVmZWN0cyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgaW52b2x2ZSBsb2NrIG1hbmFnZW1lbnQsIGxvY2sgY29udGVudGlvbiwgVk1BIGl0ZXJhdGlvbiwgb3IgcGFnZSB0YWJsZSB0ZWFyZG93biwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT09NIHJlYXBlciBsb2dpYyBpbiBtbS9vb21fa2lsbC5jIGFuZCBtbS9tZW1vcnkuYyBzbyB0aGF0IFZNQXMgYXJlIHphcHBlZCBpbiAxR0IgY2h1bmtzLCBhbGxvd2luZyBtbWFwX2xvY2sgdG8gYmUgeWllbGRlZCB0byB3YWl0aW5nIHdyaXRlcnMgdXBvbiBjb250ZW50aW9uLiBJdCBhbHNvIHVwZGF0ZXMgZXJyb3IgaGFuZGxpbmcgYWNyb3NzIHphcF92bWFfZm9yX3JlYXBpbmcsIF9fb29tX3JlYXBfdGFza19tbSwgb29tX3JlYXBfdGFzaywgYW5kIHRoZSBwcm9jZXNzX21yZWxlYXNlIHN5c2NhbGwuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChhZGRyLCBlbmQsIHJldCwgYXR0ZW1wdHMpIGFyZSBzY2FsYXIgdHlwZXMgYW5kIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG9yIGFzc2lnbmVkIHByaW9yIHRvIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBoZWFwL3N0YWNrIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgb3Igc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocyBhZmZlY3RpbmcgcmVhZHMgb2YgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIGludm9sdmUgbG9jayBtYW5hZ2VtZW50LCBsb2NrIGNvbnRlbnRpb24sIFZNQSBpdGVyYXRpb24sIG9yIHBhZ2UgdGFibGUgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowlzlp5[1] Phase: Succeeded StartedAt: 2026-09-14 12:46:48 +0000 UTC FinishedAt: 2026-09-14 12:46:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 12:46:48 +0000 UTC FinishedAt: 2026-09-14 12:46:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2] Phase: Succeeded StartedAt: 2026-09-14 12:46:48 +0000 UTC FinishedAt: 2026-09-14 16:39:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-14 12:46:48 +0000 UTC FinishedAt: 2026-09-14 16:39:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 12:46:48 +0000 UTC FinishedAt: 2026-09-14 12:46:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 12:46:48 +0000 UTC FinishedAt: 2026-09-14 12:46:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},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-workflowlzlp5/series-workflowlzlp5-convert-artifact-4088603565/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 12:46:58 +0000 UTC FinishedAt: 2026-09-14 13:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 12:46:58 +0000 UTC FinishedAt: 2026-09-14 13:03: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:*2cf9ad51-cb33-4453-8a14-6874668755b4,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-workflowlzlp5/series-workflowlzlp5-convert-artifact-4088603565/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": "47cc64a2-d691-4ee4-b9eb-3b8fd5ce94d1", "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-workflowlzlp5/series-workflowlzlp5-build-action-3216072611/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 12:46:58 +0000 UTC FinishedAt: 2026-09-14 13:03: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:*2cf9ad51-cb33-4453-8a14-6874668755b4,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-workflowlzlp5/series-workflowlzlp5-convert-artifact-4088603565/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": "47cc64a2-d691-4ee4-b9eb-3b8fd5ce94d1", "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-workflowlzlp5/series-workflowlzlp5-build-action-3216072611/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 13:03:18 +0000 UTC FinishedAt: 2026-09-14 13:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 13:03:18 +0000 UTC FinishedAt: 2026-09-14 13:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 13:03:18 +0000 UTC FinishedAt: 2026-09-14 13:03:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 13:03:18 +0000 UTC FinishedAt: 2026-09-14 13:03:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},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-workflowlzlp5/series-workflowlzlp5-convert-artifact-2946664456/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-14 13:03:28 +0000 UTC FinishedAt: 2026-09-14 13:05:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-14 13:03:28 +0000 UTC FinishedAt: 2026-09-14 13:05:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*47cc64a2-d691-4ee4-b9eb-3b8fd5ce94d1,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-workflowlzlp5/series-workflowlzlp5-build-action-3216072611/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-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-14 13:05:45 +0000 UTC FinishedAt: 2026-09-14 13:05:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-14 13:05:45 +0000 UTC FinishedAt: 2026-09-14 13:05:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-14 13:05:45 +0000 UTC FinishedAt: 2026-09-14 13:21:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-14 13:05:45 +0000 UTC FinishedAt: 2026-09-14 13:21:31 +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:*2cf9ad51-cb33-4453-8a14-6874668755b4,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-workflowlzlp5/series-workflowlzlp5-convert-artifact-2946664456/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": "d385a51a-ec31-416e-b5c0-ed025349365a", "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-workflowlzlp5/series-workflowlzlp5-build-action-2658872244/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-14 13:05:45 +0000 UTC FinishedAt: 2026-09-14 13:21:21 +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:*2cf9ad51-cb33-4453-8a14-6874668755b4,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-workflowlzlp5/series-workflowlzlp5-convert-artifact-2946664456/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": "d385a51a-ec31-416e-b5c0-ed025349365a", "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-workflowlzlp5/series-workflowlzlp5-build-action-2658872244/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-14 13:21:31 +0000 UTC FinishedAt: 2026-09-14 13:21:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-14 13:21:31 +0000 UTC FinishedAt: 2026-09-14 13:21:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-14 13:21:31 +0000 UTC FinishedAt: 2026-09-14 13:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-14 13:21:31 +0000 UTC FinishedAt: 2026-09-14 13:23:25 +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:*d385a51a-ec31-416e-b5c0-ed025349365a,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-workflowlzlp5/series-workflowlzlp5-build-action-2658872244/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-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-14 13:23:35 +0000 UTC FinishedAt: 2026-09-14 16:39:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-14 13:23:35 +0000 UTC FinishedAt: 2026-09-14 16:39:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},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:*47cc64a2-d691-4ee4-b9eb-3b8fd5ce94d1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d385a51a-ec31-416e-b5c0-ed025349365a,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-workflowlzlp5/series-workflowlzlp5-build-action-3216072611/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-workflowlzlp5/series-workflowlzlp5-build-action-2658872244/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-14 13:23:35 +0000 UTC FinishedAt: 2026-09-14 13:23:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-14 13:23:35 +0000 UTC FinishedAt: 2026-09-14 13:23:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},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-workflowlzlp5/series-workflowlzlp5-convert-artifact-3069286849/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-14 13:23:35 +0000 UTC FinishedAt: 2026-09-14 13:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-14 13:23:35 +0000 UTC FinishedAt: 2026-09-14 13:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-14 13:23:35 +0000 UTC FinishedAt: 2026-09-14 13:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-14 13:23:45 +0000 UTC FinishedAt: 2026-09-14 16:39:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzlp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_for_reaping","__oom_reap_task_mm","oom_reap_task_mm","oom_reap_task","__x64_sys_process_mrelease"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"6e9c0e39-b3ad-4dea-a85b-045e25222844","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-14 13:23:45 +0000 UTC FinishedAt: 2026-09-14 16:39:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*47cc64a2-d691-4ee4-b9eb-3b8fd5ce94d1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d385a51a-ec31-416e-b5c0-ed025349365a,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-workflowlzlp5/series-workflowlzlp5-build-action-3216072611/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-workflowlzlp5/series-workflowlzlp5-build-action-2658872244/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-workflowlzlp5/series-workflowlzlp5-convert-artifact-3069286849/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,}