Name: series-workflowrkwq6 Phase: Succeeded StartedAt: 2026-08-17 19:11:34 +0000 UTC FinishedAt: 2026-08-17 23:34:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[0] Phase: Succeeded StartedAt: 2026-08-17 19:11:34 +0000 UTC FinishedAt: 2026-08-17 19:55:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 19:11:34 +0000 UTC FinishedAt: 2026-08-17 19:55:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "XFRM_USER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "XFRM_USER" ], "series_id": "24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_state_add", "xfrm_state_update", "xfrm_nat_keepalive_state_updated", "xfrm_state_walk" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9zdGF0ZV9hZGQmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV91cGRhdGUmIzM0OywKICAgICYjMzQ7eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV93YWxrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbGlua2VkIGxpc3Qgd2l0aCBhIHN0YWNrLWFsbG9jYXRlZCBiYXRjaCBhcnJheSAoYGJhdGNoYCBpbnNpZGUgYHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4YCkgdG8gY29sbGVjdCBgeGZybV9zdGF0ZWAgcG9pbnRlcnMgZHVyaW5nIGEgc3RhdGUgd2Fsay4gVGhlIGBiYXRjaGAgYXJyYXkgYW5kIGBucmAgY291bnRlciBhcmUgdXNlZCBzdHJpY3RseSBsb2NhbGx5IHdpdGhpbiBgbmF0X2tlZXBhbGl2ZV93b3JrYCBhbmQgYG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0YC4gVGhlIGNvdW50ZXIgYGN0eC5ucmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGJlZm9yZSB0aGUgd2FsaywgYW5kIHRoZSBjb2RlIG9ubHkgcmVhZHMgdXAgdG8gYGN0eC5ucmAgZWxlbWVudHMgZnJvbSB0aGUgYGJhdGNoYCBhcnJheSwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgYWNjZXNzZWQuIEZ1cnRoZXJtb3JlLCBub25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG1lYW5pbmcgdGhlcmUgaXMgbm8gcmlzayBvZiBhbiBpbmZvLWxlYWsuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgWEZSTSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSB0byB1c2UgYSBmaXhlZC1zaXplIGJhdGNoIGFycmF5IGluc3RlYWQgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGluZyBzdGF0ZSBvYmplY3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgWEZSTSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBzdGF0ZXMgYXJlIGl0ZXJhdGVkIGFuZCBwcm9jZXNzZWQgZHVyaW5nIE5BVCBrZWVwYWxpdmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBjb25maWd1cmluZyBJUHNlYyBTZWN1cml0eSBBc3NvY2lhdGlvbnMgKFNBcykgd2l0aCBhIE5BVCBrZWVwYWxpdmUgaW50ZXJ2YWwgdmlhIG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNDg1ODIxYTQ4Nzk5ZGM5ZmY5N2RkMGZmZDRiNDgyMmQ0MWU1NzY1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTk6NTM6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xuaW5kZXggODY3OWM2OGMxMGExNi4uNWNkNmQ0MzE2NGRiYyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xuQEAgLTE1NSwzMiAmIzQzOzE1NSwzMCBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuIFx0fVxuIH1cbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0TkFUX0tFRVBBTElWRV9CQVRDSF9TSVpFID0gMTYsXG4mIzQzO1x0TkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMID0gMSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xuLVx0c3RydWN0IGxpc3RfaGVhZCBzdGF0ZXM7XG4mIzQzO1x0c3RydWN0IHhmcm1fc3RhdGUgKmJhdGNoW05BVF9LRUVQQUxJVkVfQkFUQ0hfU0laRV07XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yO1xuIFx0dGltZTY0X3QgbmV4dF9ydW47XG4gXHR0aW1lNjRfdCBub3c7XG4gfTtcbiBcbi1zdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4tXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbi19O1xuLVxuIHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuIHtcbiBcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XG4tXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGU7XG4gXG4gXHRpZiAoIVJFQURfT05DRSh4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHN0YXRlID0ga21hbGxvY19vYmooKnN0YXRlLCBHRlBfQVRPTUlDKTtcbi1cdGlmICghc3RhdGUpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGlmIChjdHgtXHUwMDNlbnIgPT0gQVJSQVlfU0laRShjdHgtXHUwMDNlYmF0Y2gpKVxuJiM0MztcdFx0cmV0dXJuIE5BVF9LRUVQQUxJVkVfQkFUQ0hfRlVMTDtcbiBcbiBcdHhmcm1fc3RhdGVfaG9sZCh4KTtcbi1cdHN0YXRlLVx1MDAzZXggPSB4O1xuLVx0bGlzdF9hZGRfdGFpbChcdTAwMjZzdGF0ZS1cdTAwM2VsaXN0LCBcdTAwMjZjdHgtXHUwMDNlc3RhdGVzKTtcbiYjNDM7XHRjdHgtXHUwMDNlYmF0Y2hbY3R4LVx1MDAzZW5yJiM0MzsmIzQzO10gPSB4O1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTIyNiwyOSAmIzQzOzIyNCwyNyBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFxuIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlLCAqdG1wO1xuIFx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4O1xuIFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuLVx0aW50IGVycjtcbiYjNDM7XHRpbnQgZXJyLCBpO1xuIFxuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LnN0YXRlcyk7XG4gXHRjdHgubmV4dF9ydW4gPSAwO1xuIFx0Y3R4Lm5vdyA9IGt0aW1lX2dldF9yZWFsX3NlY29uZHMoKTtcbiBcbiBcdG5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0LCB4ZnJtLm5hdF9rZWVwYWxpdmVfd29yay53b3JrKTtcbiBcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFx1MDAyNndhbGssIElQUFJPVE9fRVNQLCBOVUxMKTtcbi1cdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCBcdTAwMjZjdHgpO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGN0eC5uciA9IDA7XG4mIzQzO1x0XHRlcnIgPSB4ZnJtX3N0YXRlX3dhbGsobmV0LCBcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXHUwMDI2Y3R4KTtcbiYjNDM7XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGN0eC5ucjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0bmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShjdHguYmF0Y2hbaV0sIFx1MDAyNmN0eCk7XG4mIzQzO1x0XHRcdHhmcm1fc3RhdGVfcHV0KGN0eC5iYXRjaFtpXSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7XHR9IHdoaWxlIChlcnIgPT0gTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMKTtcbiBcdHhmcm1fc3RhdGVfd2Fsa19kb25lKFx1MDAyNndhbGssIG5ldCk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhdGUsIHRtcCwgXHUwMDI2Y3R4LnN0YXRlcywgbGlzdCkge1xuLVx0XHRuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0YXRlLVx1MDAzZXgsIFx1MDAyNmN0eCk7XG4tXHRcdHhmcm1fc3RhdGVfcHV0KHN0YXRlLVx1MDAzZXgpO1xuLVx0XHRrZnJlZShzdGF0ZSk7XG4tXHR9XG4tXHRpZiAoZXJyID09IC1FTk9NRU0pIHtcbi1cdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgMCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbiBcdGlmIChjdHgubmV4dF9ydW4pXG4gXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZuZXQtXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssXG4gXHRcdFx0XHQgICAgICAoY3R4Lm5leHRfcnVuIC0gY3R4Lm5vdykgKiBIWik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9zdGF0ZV9hZGQmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV91cGRhdGUmIzM0OywKICAgICYjMzQ7eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV93YWxrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBYRlJNIE5BVCBrZWVwYWxpdmUgd29ya3F1ZXVlIHRvIHVzZSBhIGZpeGVkLXNpemUgYmF0Y2ggYXJyYXkgaW5zdGVhZCBvZiBkeW5hbWljYWxseSBhbGxvY2F0aW5nIHN0YXRlIG9iamVjdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBYRlJNIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IHN0YXRlcyBhcmUgaXRlcmF0ZWQgYW5kIHByb2Nlc3NlZCBkdXJpbmcgTkFUIGtlZXBhbGl2ZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNvbmZpZ3VyaW5nIElQc2VjIFNlY3VyaXR5IEFzc29jaWF0aW9ucyAoU0FzKSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbCB2aWEgbmV0bGluay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0ODU4MjFhNDg3OTlkYzlmZjk3ZGQwZmZkNGI0ODIyZDQxZTU3NjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxOTo1MzoxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jIGIvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMKaW5kZXggODY3OWM2OGMxMGExNi4uNWNkNmQ0MzE2NGRiYyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMKQEAgLTE1NSwzMiAmIzQzOzE1NSwzMCBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKQogCX0KIH0KIAomIzQzO2VudW0gewomIzQzOwlOQVRfS0VFUEFMSVZFX0JBVENIX1NJWkUgPSAxNiwKJiM0MzsJTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMID0gMSwKJiM0Mzt9OwomIzQzOwogc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggewotCXN0cnVjdCBsaXN0X2hlYWQgc3RhdGVzOwomIzQzOwlzdHJ1Y3QgeGZybV9zdGF0ZSAqYmF0Y2hbTkFUX0tFRVBBTElWRV9CQVRDSF9TSVpFXTsKJiM0MzsJdW5zaWduZWQgaW50IG5yOwogCXRpbWU2NF90IG5leHRfcnVuOwogCXRpbWU2NF90IG5vdzsKIH07CiAKLXN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IHhmcm1fc3RhdGUgKng7Ci19OwotCiBzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgY291bnQsIHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCAqY3R4ID0gcHRyOwotCXN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZTsKIAogCWlmICghUkVBRF9PTkNFKHgtJmd0O25hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpKQogCQlyZXR1cm4gMDsKIAotCXN0YXRlID0ga21hbGxvY19vYmooKnN0YXRlLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXN0YXRlKQotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKGN0eC0mZ3Q7bnIgPT0gQVJSQVlfU0laRShjdHgtJmd0O2JhdGNoKSkKJiM0MzsJCXJldHVybiBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEw7CiAKIAl4ZnJtX3N0YXRlX2hvbGQoeCk7Ci0Jc3RhdGUtJmd0O3ggPSB4OwotCWxpc3RfYWRkX3RhaWwoJmFtcDtzdGF0ZS0mZ3Q7bGlzdCwgJmFtcDtjdHgtJmd0O3N0YXRlcyk7CiYjNDM7CWN0eC0mZ3Q7YmF0Y2hbY3R4LSZndDtuciYjNDM7JiM0MztdID0geDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI2LDI5ICYjNDM7MjI0LDI3IEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsCiAKIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlLCAqdG1wOwogCXN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDsKIAlzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrIHdhbGs7CiAJc3RydWN0IG5ldCAqbmV0OwotCWludCBlcnI7CiYjNDM7CWludCBlcnIsIGk7CiAKLQlJTklUX0xJU1RfSEVBRCgmYW1wO2N0eC5zdGF0ZXMpOwogCWN0eC5uZXh0X3J1biA9IDA7CiAJY3R4Lm5vdyA9IGt0aW1lX2dldF9yZWFsX3NlY29uZHMoKTsKIAogCW5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0LCB4ZnJtLm5hdF9rZWVwYWxpdmVfd29yay53b3JrKTsKIAl4ZnJtX3N0YXRlX3dhbGtfaW5pdCgmYW1wO3dhbGssIElQUFJPVE9fRVNQLCBOVUxMKTsKLQllcnIgPSB4ZnJtX3N0YXRlX3dhbGsobmV0LCAmYW1wO3dhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCAmYW1wO2N0eCk7CiYjNDM7CWRvIHsKJiM0MzsJCWN0eC5uciA9IDA7CiYjNDM7CQllcnIgPSB4ZnJtX3N0YXRlX3dhbGsobmV0LCAmYW1wO3dhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCAmYW1wO2N0eCk7CiYjNDM7CQlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgY3R4Lm5yOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCW5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoY3R4LmJhdGNoW2ldLCAmYW1wO2N0eCk7CiYjNDM7CQkJeGZybV9zdGF0ZV9wdXQoY3R4LmJhdGNoW2ldKTsKJiM0MzsJCX0KJiM0MzsJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwl9IHdoaWxlIChlcnIgPT0gTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMKTsKIAl4ZnJtX3N0YXRlX3dhbGtfZG9uZSgmYW1wO3dhbGssIG5ldCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YXRlLCB0bXAsICZhbXA7Y3R4LnN0YXRlcywgbGlzdCkgewotCQluYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0YXRlLSZndDt4LCAmYW1wO2N0eCk7Ci0JCXhmcm1fc3RhdGVfcHV0KHN0YXRlLSZndDt4KTsKLQkJa2ZyZWUoc3RhdGUpOwotCX0KLQlpZiAoZXJyID09IC1FTk9NRU0pIHsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bmV0LSZndDt4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgMCk7Ci0JCXJldHVybjsKLQl9CiAJaWYgKGN0eC5uZXh0X3J1bikKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bmV0LSZndDt4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywKIAkJCQkgICAgICAoY3R4Lm5leHRfcnVuIC0gY3R4Lm5vdykgKiBIWik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYRlJNIE5BVCBLZWVwYWxpdmUgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNgLCBhbmQgaXQmIzM5O3MgYSBwcmV0dHkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uLiBJbnN0ZWFkIG9mIHRoZSBkeW5hbWljIGFsbG9jYXRpb24gb2YgYG5hdF9rZWVwYWxpdmVfc3RhdGVgIHN0cnVjdHVyZXMgYW5kIGxpbmtlZCBsaXN0IG1hbmFnZW1lbnQsIHRoZXkmIzM5O3ZlIGdvbmUgd2l0aCBhIGZpeGVkLXNpemUgYmF0Y2ggYXBwcm9hY2ggdXNpbmcgYSBgYmF0Y2hbTkFUX0tFRVBBTElWRV9CQVRDSF9TSVpFXWAgYXJyYXksIHdoaWNoIGlzIHNldCB0byAxNiBlbGVtZW50cy4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIHNoaWZ0LiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpZiB0aGUgYmF0Y2ggZmlsbHMgdXAgZHVyaW5nIGNvbGxlY3Rpb24sIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgcmV0dXJucyBgTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMYC4gVGhlbiwgYG5hdF9rZWVwYWxpdmVfd29ya2AgaGFuZGxlcyBhIGxvb3AgdG8gcHJvY2VzcyB0aGF0IGJhdGNoIGFuZCBjb250aW51ZSBpdGVyYXRpbmcsIHdoaWNoIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIHRoZXNlIHNvcnRzIG9mIGJhdGNoZWQgb3BlcmF0aW9ucy4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBJdCYjMzk7cyBhIGNsZWFyIGVmZmljaWVuY3kgaW1wcm92ZW1lbnQgaW4gdGhlIFhGUk0gc3Vic3lzdGVtLCB3aGljaCwgb2YgY291cnNlLCBpcyBwYXJ0IG9mIElQc2VjLiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpbiBteSBtaW5kIGlzLCBob3cgcmVhY2hhYmxlIGlzIHRoaXMgY29kZT8gV2hhdCBhcmUgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzPyBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBxdWljayBncmVwIGZvciBgeGZybV9uYXRfa2VlcGFsaXZlLmNgIHdpdGhpbiB0aGUgYG5ldC94ZnJtL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb250ZXh0LiBUaGF0IHNob3VsZCBhdCBsZWFzdCBnaXZlIG1lIGEgc3RhcnRpbmcgcG9pbnQgZm9yIGRldGVybWluaW5nIGlmIHRoaXMgY29kZSBpcyBldmVuIGNvbXBpbGVkIGludG8gYSB0eXBpY2FsIGNvbmZpZ3VyYXRpb24uIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIEtjb25maWcgb3B0aW9ucyB0byBzZWUgd2hhdCB0cmlnZ2VycyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgTkFUIGtlZXBhbGl2ZSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fbmF0X2tlZXBhbGl2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZnJtLmg9MjM2NT1zdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl94ZnJtX3N0YXRlX2JwZih2b2lkKVxuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaC0yMzcwLVxuaW5jbHVkZS9uZXQveGZybS5oOjIzNzE6aW50IHhmcm1fbmF0X2tlZXBhbGl2ZV9pbml0KHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3Mjp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9maW5pKHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3MzppbnQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCk7XG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3NDppbnQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9maW5pKHN0cnVjdCBuZXQgKm5ldCk7XG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3NTp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMzc2LVxuLS1cbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jPTI4MD1pbnQgX19pbml0IHhmcm02X2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0yOTgtXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYzoyOTk6XHRyZXQgPSB4ZnJtX25hdF9rZWVwYWxpdmVfaW5pdChBRl9JTkVUNik7XG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0zMDAtXHRpZiAocmV0KVxuLS1cbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jPTMxNT12b2lkIHhmcm02X2Zpbmkodm9pZClcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTMxNi17XG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYzozMTc6XHR4ZnJtX25hdF9rZWVwYWxpdmVfZmluaShBRl9JTkVUNik7XG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0zMTgtXHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2eGZybTZfbmV0X29wcyk7XG4tLVxubmV0L3hmcm0vTWFrZWZpbGU9MTQ9b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXG4tLVxubmV0L3hmcm0vTWFrZWZpbGUtMTYtXHRcdCAgICAgIHhmcm1fc3lzY3RsLm8geGZybV9yZXBsYXkubyB4ZnJtX2RldmljZS5vIFxcXG5uZXQveGZybS9NYWtlZmlsZToxNzpcdFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cbm5ldC94ZnJtL01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19YRlJNX1NUQVRJU1RJQ1MpICYjNDM7PSB4ZnJtX3Byb2Mub1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTItLypcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjM6ICogeGZybV9uYXRfa2VlcGFsaXZlLmNcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTQtICpcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNzU9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9za19maW5pKHN0cnVjdCBzb2NrX2JoX2xvY2tlZCBfX3BlcmNwdSAqc29ja3MpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjgyLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjgzOnZvaWQgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yODQte1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI5My1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI5NDppbnQgX19uZXRfaW5pdCB4ZnJtX25hdF9rZWVwYWxpdmVfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjk1LXtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yOTktXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzozMDA6aW50IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfZmluaShzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMDEte1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMwNS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMwNjppbnQgeGZybV9uYXRfa2VlcGFsaXZlX2luaXQodW5zaWduZWQgc2hvcnQgZmFtaWx5KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzA3LXtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMjQtfVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MzI1OkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fbmF0X2tlZXBhbGl2ZV9pbml0KTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMyNi1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMyNzp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9maW5pKHVuc2lnbmVkIHNob3J0IGZhbWlseSlcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMyOC17XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzM5LX1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjM0MDpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX25hdF9rZWVwYWxpdmVfZmluaSk7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00MzEwPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQzMzUtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQzMzY6XHRydiA9IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfaW5pdChuZXQpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MzM3LVx0aWYgKHJ2IFx1MDAzYyAwKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDM1ND1zdGF0aWMgdm9pZCBfX25ldF9leGl0IHhmcm1fbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MzU1LXtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDM1NjpcdHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfZmluaShuZXQpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MzU3LVx0eGZybV9zeXNjdGxfZmluaShuZXQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDQwND12b2lkIF9faW5pdCB4ZnJtX2luaXQodm9pZClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MTgtXHRyZWdpc3Rlcl94ZnJtX3N0YXRlX2JwZigpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NDE5Olx0eGZybV9uYXRfa2VlcGFsaXZlX2luaXQoQUZfSU5FVCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MjAtfVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz04MTE9aW50IF9feGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTgzMi1cdFx0bmV0LVx1MDAzZXhmcm0uc3RhdGVfbnVtLS07XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6ODMzOlx0XHR4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZCh4KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MzQtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTE3MjM9c3RhdGljIHZvaWQgX194ZnJtX3N0YXRlX2luc2VydChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTc2Ny1cdHhmcm1faGFzaF9ncm93X2NoZWNrKG5ldCwgeC1cdTAwM2VieWRzdC5uZXh0ICE9IE5VTEwpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE3Njg6XHR4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZCh4KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNzY5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjkyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIChOQVQpIEtlZXBhbGl2ZSBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY2AuIFRoYXQmIzM5O3MgYSBjbGVhciBpbmRpY2F0b3IgdGhpcyByZXZvbHZlcyBhcm91bmQgdGhlIE5BVCBrZWVwYWxpdmUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIFhGUk0gKElQc2VjL1NlY3VyaXR5IFBvbGljeSBEYXRhYmFzZSkgZnJhbWV3b3JrLiBUaGUgY29kZSYjMzk7cyBnb2luZyB0byBiZSBjb21waWxlZCBvbmx5IGlmIGBDT05GSUdfWEZSTWAgaXMgZGVmaW5lZCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkga25vdyB0aGlzIGFyZWEgcXVpdGUgd2VsbC4KClRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBtb2RpZmljYXRpb25zIHRvIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBCYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgIGlzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBnYXRoZXJpbmcgZGF0YSBvciBwcmVwYXJpbmcgYSB0YXNrIHJlbGF0ZWQgdG8ga2VlcGFsaXZlLCBhbmQgYG5hdF9rZWVwYWxpdmVfd29ya2Agc291bmRzIGxpa2UgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmRvZXMqIHRoZSBrZWVwYWxpdmUgcHJvY2Vzc2luZywgbGlrZWx5IHNjaGVkdWxlZCBieSB0aGUgZm9ybWVyLiBOb3cgSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZWNoYW5pY3Mgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIGdyYXNwIHRoZSBpbXBhY3Qgb2YgdGhlIHBhdGNoLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb25zIGFuZCB1bmRlcnN0YW5kIHdoYXQgdGhleSBhcmUgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmF0X2tlZXBhbGl2ZV93b3JrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldG5zL3hmcm0uaD0zMj1zdHJ1Y3QgbmV0bnNfeGZybSB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0bnMveGZybS5oLTg1LVx0c3RydWN0IG11dGV4IHhmcm1fY2ZnX211dGV4O1xuaW5jbHVkZS9uZXQvbmV0bnMveGZybS5oOjg2Olx0c3RydWN0IGRlbGF5ZWRfd29ya1x0bmF0X2tlZXBhbGl2ZV93b3JrO1xuaW5jbHVkZS9uZXQvbmV0bnMveGZybS5oLTg3LX07XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTU4PWVudW0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2Mi1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE2MzpzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCB7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjQtXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqYmF0Y2hbTkFUX0tFRVBBTElWRV9CQVRDSF9TSVpFXTtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjktXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNzA6c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNzEte1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTcyOlx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggKmN0eCA9IHB0cjtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE3My1cbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODQtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxODU6c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE4NjpcdFx0XHRcdCAgICAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHgpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODcte1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIyNC1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIyNTpzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjI2LXtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIyNzpcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIyOC1cdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgd2Fsaztcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMzQtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyMzU6XHRuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMzYtXHR4ZnJtX3N0YXRlX3dhbGtfaW5pdChcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjM4LVx0XHRjdHgubnIgPSAwO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjM5Olx0XHRlcnIgPSB4ZnJtX3N0YXRlX3dhbGsobmV0LCBcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXHUwMDI2Y3R4KTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0MC1cdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjQxLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjdHgubnI7IGkmIzQzOyYjNDM7KSB7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNDI6XHRcdFx0bmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShjdHguYmF0Y2hbaV0sIFx1MDAyNmN0eCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNDMtXHRcdFx0eGZybV9zdGF0ZV9wdXQoY3R4LmJhdGNoW2ldKTtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNDgtXHRpZiAoY3R4Lm5leHRfcnVuKVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQ5Olx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjUwLVx0XHRcdFx0ICAgICAgKGN0eC5uZXh0X3J1biAtIGN0eC5ub3cpICogSFopO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTI4Mz12b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI5MC1cdG5ldCA9IHhzX25ldCh4KTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI5MTpcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZuZXQtXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssIDApO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjkyLX1cbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yOTQ9aW50IF9fbmV0X2luaXQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI5NS17XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyOTY6XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZuZXQtXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssIG5hdF9rZWVwYWxpdmVfd29yayk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yOTctXHRyZXR1cm4gMDtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0zMDA9aW50IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfZmluaShzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMDEte1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MzAyOlx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZuZXQtXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmspO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzAzLVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA5OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDU2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhGUk0gTkFUIEtlZXBhbGl2ZSBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBpcyBhbiBpbnRlcmVzdGluZyBtb2RpZmljYXRpb24gdG8gdGhlIFhGUk0gc3Vic3lzdGVtJiMzOTtzIE5BVCBrZWVwYWxpdmUgbWVjaGFuaXNtLiBCYXNpY2FsbHksIGBuYXRfa2VlcGFsaXZlX3dvcmtgIOKAkyB3aGljaCwgYXMgSSByZWNhbGwsIGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIOKAkyBoYXMgaGFkIGl0cyBzdGF0ZSB0cmF2ZXJzYWwgbG9naWMgcmV3b3JrZWQuIFRoZSB0cmlnZ2VyIGZvciB0aGlzIHdvcmtxdWV1ZSBpcyBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLCB3aGljaCBnZXRzIGNhbGxlZCBkdXJpbmcgWEZSTSBzdGF0ZSBpbnNlcnRpb25zIG9yIGRlbGV0aW9ucy4KClRoZSBnaXN0IG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyBgbmF0X2tlZXBhbGl2ZV93b3JrYCBpdGVyYXRlcyB0aHJvdWdoIFhGUk0gc3RhdGVzLiBOb3csIGluc3RlYWQgb2YgYSBwb3RlbnRpYWxseSB1bmJvdW5kZWQgd2FsaywgaXQgdXNlcyBgeGZybV9zdGF0ZV93YWxrYCB3aXRoIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYXMgYSBjYWxsYmFjay4gYHhmcm1fc3RhdGVfd2Fsa2AgY2FsbHMgYG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0YCBmb3IgZWFjaCBYRlJNIHN0YXRlLCBhbmQgaW1wb3J0YW50bHksIHRoZSB3YWxrIHN0b3BzIGlmIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgcmV0dXJucyBub24temVyby4gIFRoZSBtb2RpZmljYXRpb24gZW5zdXJlcyBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgIHJldHVybnMgYE5BVF9LRUVQQUxJVkVfQkFUQ0hfRlVMTGAgd2hlbiBhIGRlZmluZWQgYmF0Y2ggaXMgZnVsbCwgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtgIHdpbGwgbG9vcCB3aGlsZSB0aGlzIGVycm9yIGlzIHJldHVybmVkLgoKVGhpcyBzaWduYWxzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpdCBzbWVsbHMgbGlrZSBhIGZpeCBmb3IgYSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlLCBwcm9iYWJseSByZWxhdGVkIHRvIGEgc3RhY2sgYWxsb2NhdGlvbi4gU3BlY2lmaWNhbGx5LCBpbnN0ZWFkIG9mIGR5bmFtaWMgYWxsb2NhdGlvbiwgdGhpcyBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIG5vdyB1c2luZyBhIGZpeGVkLXNpemUgYXJyYXkgb24gdGhlIHN0YWNrLCB3aGljaCBpcyBhbG1vc3QgY2VydGFpbmx5IGRvbmUgdG8gYXZvaWQgT09NIGNvbmRpdGlvbnMgb3IgYWxsb2NhdGlvbiBmYWlsdXJlcy4gVGhpcyBtYWtlcyB0aGlzIGFyZWEgcmlwZSBmb3IgZnV6emluZyEKCkxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIFRoZSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBgbmF0X2tlZXBhbGl2ZV93b3JrYCBpdHNlbGYgaXMgYSB3b3JrcXVldWUgY2FsbGJhY2ssIHNvIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvc2VkIGJ5IHN5c3RlbSBjYWxscywgYnV0IGl0cyB0cmlnZ2VyZWQgYnkgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gRGlnZ2luZyBkZWVwZXIsIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgaXMgdHJpZ2dlcmVkIGJ5IGBfX3hmcm1fc3RhdGVfaW5zZXJ0YCBhbmQgYF9feGZybV9zdGF0ZV9kZWxldGVgLiBUaGF0IHN1Z2dlc3RzIGZ1enppbmcgWEZSTSBzdGF0ZSBpbnNlcnRpb24gYW5kIGRlbGV0aW9uIHRocm91Z2ggdGhlIG5ldGxpbmsgaW50ZXJmYWNlICh1c2luZyBgWEZSTV9NU0dfTkVXU0FgLCBgWEZSTV9NU0dfREVMU0FgLCBgWEZSTV9NU0dfVVBEU0FgKSBpcyB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gdHJpZ2dlciB0aGUgY29kZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi4KClRvIGJlIHByZWNpc2UsIHRoZSBwcmltYXJ5IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGZ1bmN0aW9uLCBhbG9uZyB3aXRoIGB4ZnJtX3N0YXRlX3dhbGtgLCBgeGZybV9hZGRfc2FgLCBhbmQgYHhmcm1fZGVsX3NhYC4KCkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgaXMgYWN0dWFsbHkgZXhwb3NlZC4gIFllcCwgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNgIGFuZCBpcyBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBgeGZybV9hZGRfc2FgIGFuZCBgeGZybV9kZWxfc2FgIGFyZSBhdmFpbGFibGUgaW4gYG5ldC94ZnJtL3hmcm1fdXNlci5jYCwgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fYWRkX3NhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTkwNz1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDM4LVxubmV0L3hmcm0veGZybV91c2VyLmM6MTAzOTpzdGF0aWMgaW50IHhmcm1fYWRkX3NhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L3hmcm0veGZybV91c2VyLmMtMTA0MC1cdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI5Mzc9c3RhdGljIGludCB4ZnJtX2FkZF9wb2xfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwMDMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDA0OnN0YXRpYyBpbnQgeGZybV9hZGRfc2FfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzAwNS1cdFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0OC19IHhmcm1fZGlzcGF0Y2hbWEZSTV9OUl9NU0dUWVBFU10gPSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzQ5Olx0W1hGUk1fTVNHX05FV1NBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2EgICAgICAgIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzUwLVx0W1hGUk1fTVNHX0RFTFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kZWxfc2EgICAgICAgIH0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2MS1cdFtYRlJNX01TR19BQ1FVSVJFICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX2FjcXVpcmUgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc2MjpcdFtYRlJNX01TR19FWFBJUkUgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhX2V4cGlyZSB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2My1cdFtYRlJNX01TR19VUERQT0xJQ1kgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3BvbGljeSAgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc2NDpcdFtYRlJNX01TR19VUERTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhICAgICAgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2NS1cdFtYRlJNX01TR19QT0xFWFBJUkUgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3BvbF9leHBpcmV9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgYW5kIENvZGUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBgWEZSTWAgY29uZmlnIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBCZWZvcmUgZGl2aW5nIGluIGRlZXBlciwgSSBhbHdheXMgbGlrZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSByZWxldmFudCBvciByZWxhdGVkLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UgdG8gY2FzdCBhIHdpZGUgbmV0IGluaXRpYWxseS4KCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNgLiBHb29kLCBpdCBjb25maXJtcyB0aGF0IGBDT05GSUdfWEZSTWAgKmlzKiB1c2VkIHRoZXJlLCB3aGljaCBhdCBsZWFzdCB2YWxpZGF0ZXMgbXkgaW5pdGlhbCB0aG91Z2h0LiBOb3csIEkgc2hvdWxkIGNoZWNrIHRoZSBgTWFrZWZpbGVgIGluIHRoYXQgZGlyZWN0b3J5IChgbmV0L3hmcm0vTWFrZWZpbGVgKS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhhdCBzdWJzeXN0ZW0uIEEgTWFrZWZpbGUgb2Z0ZW4gcHJvdmlkZXMgdml0YWwgY2x1ZXMgcmVnYXJkaW5nIG90aGVyIGNvbmZpZyBvcHRpb25zLCBjb25kaXRpb25hbCBjb21waWxhdGlvbnMsIG9yIGhvdyBldmVyeXRoaW5nIHRpZXMgdG9nZXRoZXIuIEl0JiMzOTtzIGxpa2UgdGhlIGFyY2hpdGVjdHVyYWwgYmx1ZXByaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX25hdF9rZWVwYWxpdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfWEZSTSkgOj0geGZybV9wb2xpY3kubyB4ZnJtX3N0YXRlLm8geGZybV9oYXNoLm8gXFxcbi0tXG5uZXQveGZybS9NYWtlZmlsZS0xNi1cdFx0ICAgICAgeGZybV9zeXNjdGwubyB4ZnJtX3JlcGxheS5vIHhmcm1fZGV2aWNlLm8gXFxcbm5ldC94ZnJtL01ha2VmaWxlOjE3Olx0XHQgICAgICB4ZnJtX25hdF9rZWVwYWxpdmUub1xubmV0L3hmcm0vTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1hGUk1fU1RBVElTVElDUykgJiM0Mzs9IHhmcm1fcHJvYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipYRlJNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYFhGUk1gLiBUaGF0JiMzOTtzIHRoZSBrZXkuIEkgbmVlZCB0byBiZSBzdXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIG5hdHVyYWxseSwgdGhhdCBgWEZSTWAgaXMgdGhlICpwcmltYXJ5KiBjb25maWd1cmF0aW9uIHBvaW50LiBIb3dldmVyLCBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIGFuZ2xlcy4gTXkgYnJhaW4gaW1tZWRpYXRlbHkganVtcHMgdG8gYFhGUk1fVVNFUmAuIENvdWxkIGNvbmZpZ3VyaW5nIGBYRlJNYCBmcm9tIHVzZXJzcGFjZSBiZSBhIGRlcGVuZGVuY3kgaGVyZT8gSXQgb2Z0ZW4gaXMuIE5vdyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uCgpMZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIGBuZXQveGZybS9NYWtlZmlsZWAgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gY2hlY2sgZm9yIHRoZSBvYmplY3QgZmlsZSBgeGZybV91c2VyLm9gLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgYnVpbGQgdGhlcmUsIGxpa2VseSBkcml2ZW4gYnkgdGhhdCBgWEZSTV9VU0VSYCBLY29uZmlnIG9wdGlvbi4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jeSBjaGFpbi4gSSBhbHJlYWR5IGhhdmUgYSBzdXNwaWNpb24uIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHNvbGlkaWZ5IHRoZSBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3VzZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfWEZSTV9BTEdPKSAmIzQzOz0geGZybV9hbGdvLm9cbm5ldC94ZnJtL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19YRlJNX1VTRVIpICYjNDM7PSB4ZnJtX3VzZXIub1xubmV0L3hmcm0vTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX1hGUk1fVVNFUl9DT01QQVQpICYjNDM7PSB4ZnJtX2NvbXBhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4OTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gYWRkIHNlY3VyaXR5IGFzc29jaWF0aW9ucyAoU0FzKSBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggbWVhbnMgSSYjMzk7bSBnb2luZyB0byBuZWVkIGBYRlJNX1VTRVJgLiBNYWtlcyBzZW5zZS4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggdGhpcywgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IHRoZSBhcmNoaXRlY3R1cmU6IERvZXMgdGhlIGBYRlJNYCBmcmFtZXdvcmsgaGF2ZSBhbiBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIHRoZSBgSU5FVGAgc3Vic3lzdGVtPyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIEJlc3QgdG8gYmUgc3VyZSB0aGlzIGZvdW5kYXRpb24gaXMgc29saWQgYmVmb3JlIEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWctNC0jXG5uZXQveGZybS9LY29uZmlnOjU6Y29uZmlnIFhGUk1cbm5ldC94ZnJtL0tjb25maWctNi1cdGJvb2xcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwLVxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXG5uZXQveGZybS9LY29uZmlnLTEyLVx0Ym9vbFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cbm5ldC94ZnJtL0tjb25maWc6MTQ6Y29uZmlnIFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy0xNS1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcbm5ldC94ZnJtL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0zMS1cbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbm5ldC94ZnJtL0tjb25maWctMzMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wYXRpYmxlIEFCSSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy00Mi1cbm5ldC94ZnJtL0tjb25maWc6NDM6Y29uZmlnIFhGUk1fSU5URVJGQUNFXG5uZXQveGZybS9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTUwLVxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy03MS1cbm5ldC94ZnJtL0tjb25maWc6NzI6Y29uZmlnIFhGUk1fU1RBVElTVElDU1xubmV0L3hmcm0vS2NvbmZpZy03My1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1wmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctODMtIyBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxubmV0L3hmcm0vS2NvbmZpZy04NS1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZy05Mi0jIGFsZ29yaXRobXMgdGhhdCBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxubmV0L3hmcm0vS2NvbmZpZzo5Mzpjb25maWcgWEZSTV9FU1Bcbm5ldC94ZnJtL0tjb25maWctOTQtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTA1LVxubmV0L3hmcm0vS2NvbmZpZzoxMDY6Y29uZmlnIFhGUk1fSVBDT01QXG5uZXQveGZybS9LY29uZmlnLTEwNy1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTQwLVxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcbm5ldC94ZnJtL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTE1Ni1cbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXG5uZXQveGZybS9LY29uZmlnLTE1OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgWEZSTSBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgVmlzaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBYRlJNYCBpcyB0aGlzIGludGVybmFsIGJvb2xlYW4sIGNvbnRyb2xsZWQgYnkgYFhGUk1fVVNFUmAgYW5kIHNvbWUgb3RoZXJzLiBTbywgaWYgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCBgWEZSTV9VU0VSYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiBJJiMzOTtkIG5lZWQgdG8gZW5hYmxlIHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgZ29pbmcuIEFuZCwgYmVjYXVzZSBgWEZSTV9VU0VSYCBpcyBuZXN0ZWQgdW5kZXIgYGlmIElORVRgLCBlbmFibGluZyBgSU5FVGAgaXMgYSBwcmVyZXF1aXNpdGUuIFNvLCBgSU5FVGAgYW5kIGBYRlJNX1VTRVJgIGFyZSB0aGUga2V5IGNvbmZpZ3MgZm9yIGVuYWJsaW5nIHRoaXMuIEdvdCBpdC4KCk5vdywgd2hhdCBhYm91dCB0aGUgc3ltYm9scyB0aGVtc2VsdmVzPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRob3NlIHNwZWNpZmljIGZ1bmN0aW9ucyDigJMgYHhmcm1fYWRkX3NhYCwgYHhmcm1fZGVsX3NhYCwgYHhmcm1fc3RhdGVfd2Fsa2AsIGFuZCBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLiBMZXQgbWUgZG91YmxlLWNoZWNrIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAuIElzIGl0IGV4cG9ydGVkPyBIbW0sIGl0JiMzOTtzIG5vdCBleHBvcnRlZC4gQnV0IHdhaXQsIGl0JiMzOTtzIGEgZ2xvYmFsIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBCZWNhdXNlIGl0JiMzOTtzIG5vdCBzdGF0aWMsIGl0IGhhcyBpdHMgb3duIGRpc3RpbmN0IHN5bWJvbCwgZGVzcGl0ZSBub3QgYmVpbmcgZXhwb3J0ZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2hpZnQgYmFjayB0byBgeGZybV9hZGRfc2FgIGFuZCBgeGZybV9kZWxfc2FgLiBBY2NvcmRpbmcgdG8gbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nLCB0aGV5JiMzOTtyZSBzdGF0aWMgd2l0aGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQuIEdvdHRhIGRvdWJsZS1jaGVjayBpZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGluZGVlZCBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fYWRkX3NhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9OTA3PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jb25zdHJ1Y3Qoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwMzgtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMDM5OnN0YXRpYyBpbnQgeGZybV9hZGRfc2Eoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDQwLVx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MjkzNz1zdGF0aWMgaW50IHhmcm1fYWRkX3BvbF9leHBpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzAwMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMwMDQ6c3RhdGljIGludCB4ZnJtX2FkZF9zYV9leHBpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDA1LVx0XHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNzQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzQ4LX0geGZybV9kaXNwYXRjaFtYRlJNX05SX01TR1RZUEVTXSA9IHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NDk6XHRbWEZSTV9NU0dfTkVXU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9zYSAgICAgICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NTAtXHRbWEZSTV9NU0dfREVMU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2RlbF9zYSAgICAgICAgfSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzYxLVx0W1hGUk1fTVNHX0FDUVVJUkUgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfYWNxdWlyZSAgIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzYyOlx0W1hGUk1fTVNHX0VYUElSRSAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2FfZXhwaXJlIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzYzLVx0W1hGUk1fTVNHX1VQRFBPTElDWSAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfcG9saWN5ICAgIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzY0Olx0W1hGUk1fTVNHX1VQRFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2EgICAgICAgIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzY1LVx0W1hGUk1fTVNHX1BPTEVYUElSRSAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfcG9sX2V4cGlyZX0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjAwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBBUEkgRGVzaWduOiBDb25zaWRlcmluZyBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGFuZCBgeGZybV9zdGF0ZV93YWxrYCoqCgpSaWdodCwgc28gdGhlIHByb21wdCBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGV2YWx1YXRlIHRoaXMgY29kZS4gVGhlIGdvYWwgaXMgdG8gbWFrZSB0aGVzZSBmdW5jdGlvbnMgYWNjZXNzaWJsZSBhbmQgbWFpbnRhaW5hYmxlIGluIHRoZSBsb25nIHJ1bi4KCmB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgbG9va3MgcHJvbWlzaW5nLCB0aGF0IGlzIGEgZ29vZCBjYW5kaWRhdGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dC4gVGhhdCBzZWVtcyB0byBmaXQgdGhlIHByb2ZpbGUgd2UmIzM5O3JlIGFpbWluZyBmb3IuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciBgeGZybV9zdGF0ZV93YWxrYC4gSXQmIzM5O3MgbG9jYXRlZCBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCwgd2hpY2ggaXMgYSBrZXkgYXJlYSBvZiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGZ1bGZpbGxzIHRoZSBub24tc3RhdGljLCBub24taW5saW5lZCBjcml0ZXJpYSwgYW5kIGlmIGl0IG1ha2VzIHNlbnNlIGFzIGFuIGFjY2Vzc2libGUgQVBJIGVuZHBvaW50LiBUaGUgbG9jYXRpb24gd2l0aGluIHRoYXQgZmlsZSwgc3VnZ2VzdHMgaXQgbGlrZWx5IGRvZXMgcGxheSBhbiBpbXBvcnRhbnQgcm9sZSwgYnV0IEkgbmVlZCB0byBkaXZlIGRlZXBlciB0byBkZXRlcm1pbmUgaXRzIHNwZWNpZmljIHVzZSBhbmQgc3VpdGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc3RhdGVfd2FsayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmM9MTY4Nz1zdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfYnlzcGkoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgc3BpLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjkwLVx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTY5MTpcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKnc7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTY5Mi1cbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MjY4ND1zdGF0aWMgYm9vbCBfX3hmcm1fc3RhdGVfZmlsdGVyX21hdGNoKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzAwLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MDE6aW50IHhmcm1fc3RhdGVfd2FsayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwMi1cdFx0ICAgIGludCAoKmZ1bmMpKHN0cnVjdCB4ZnJtX3N0YXRlICosIGludCwgdm9pZCopLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzA1LVx0c3RydWN0IHhmcm1fc3RhdGUgKnN0YXRlO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MDY6XHRzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp4O1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MDctXHRpbnQgZXJyID0gMDtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxMy1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNndhbGstXHUwMDNlYWxsKSlcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzE0Olx0XHR4ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZuZXQtXHUwMDNleGZybS5zdGF0ZV9hbGwsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGssIGFsbCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxNS1cdGVsc2Vcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzE2Olx0XHR4ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ3YWxrLVx1MDAzZWFsbCwgc3RydWN0IHhmcm1fc3RhdGVfd2FsaywgYWxsKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzE3LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKHgsIFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnN0YXRlX2FsbCwgYWxsKSB7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDAtfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NDE6RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3dhbGspO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDItXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc0Mzp2b2lkIHhmcm1fc3RhdGVfd2Fsa19pbml0KHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHU4IHByb3RvLFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDQtXHRcdFx0ICBzdHJ1Y3QgeGZybV9hZGRyZXNzX2ZpbHRlciAqZmlsdGVyKVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzUxLX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzUyOkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV93YWxrX2luaXQpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NTMtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc1NDp2b2lkIHhmcm1fc3RhdGVfd2Fsa19kb25lKHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHN0cnVjdCBuZXQgKm5ldClcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzU1LXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc2NC19XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc2NTpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfd2Fsa19kb25lKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzY2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQzMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZnJvbSBhIHRlY2huaWNhbCBwZXJzcGVjdGl2ZToKCioqTXkgUGVyc3BlY3RpdmUgb24gdGhlIFhGUk0gU3Vic3lzdGVtIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBYRlJNIHN1YnN5c3RlbSBoYW5kbGVzIGV4dGVybmFsIGNvbW11bmljYXRpb24uIEkgc2VlIHRoYXQgYHhmcm1fc3RhdGVfd2Fsa2AgaXMgYW4gKmV4cG9ydGVkKiBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHN1Z2dlc3RzIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIGFjY2Vzc2VkIGFuZCB1c2VkIGZyb20gKm91dHNpZGUqIHRoZSBjb3JlIFhGUk0gbW9kdWxlLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBsaWtlbHkgbWVhbnMgaXQgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBleGlzdGluZyBYRlJNIHN0YXRlcy4gVGhhdCYjMzk7cyB1c2VmdWwgZm9yIGEgdmFyaWV0eSBvZiB0YXNrcyDigJMgbWFuYWdlbWVudCwgbW9uaXRvcmluZywgb3IgcG9zc2libHkgZXZlbiBkZWJ1Z2dpbmcgdG9vbHMgdGhhdCBuZWVkIHRvIGluc3BlY3QgdGhlIGN1cnJlbnQgWEZSTSBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGl0cyB1c2FnZSB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXQgaXMgdXNlZCBmb3IgYW5kIGlmIGl0IGhhcyBhbnkgY2F2ZWF0cy4KClRoZW4gSSBzZWUgYHhmcm1fdXNlcl9yY3ZfbXNnYC4gQWhhISBUaGlzIGxvb2tzIGxpa2UgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBhbGwgTmV0bGluayBtZXNzYWdlcyByZWxhdGVkIHRvIFhGUk0uIFRoaXMgaXMgZXhhY3RseSB3aGF0IEkgZXhwZWN0ZWQuIE5ldGxpbmsgaXMgdGhlIHN0YW5kYXJkIGludGVyZmFjZSBmb3IgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBzbyBgeGZybV91c2VyX3Jjdl9tc2dgIGlzIGdvaW5nIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IHdoZXJlIGFsbCB0aGUgdXNlci1zcGFjZSByZXF1ZXN0cyDigJMgZm9yIGNyZWF0aW5nLCBtb2RpZnlpbmcsIG9yIHF1ZXJ5aW5nIFhGUk0gcG9saWNpZXMgYW5kIHN0YXRlcyDigJMgd2lsbCBjb21lIGluLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgZGlzcGF0Y2hlciwgcm91dGluZyB0aGVzZSBpbmNvbWluZyBOZXRsaW5rIG1lc3NhZ2VzIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVycyBmb3IgcHJvY2Vzc2luZy4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcyBpcyBnb2luZyB0byBiZSBjcml0aWNhbCB0byBzZWN1cml0eSBpbXBsaWNhdGlvbnMgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3VzZXJfcmN2X21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTM3ODE9c3RhdGljIGludCB4ZnJtX3JlamVjdF91bnVzZWRfYXR0cihpbnQgdHlwZSwgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4MzYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozODM3OnN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODM4LVx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM5MjQ9c3RhdGljIHZvaWQgeGZybV9uZXRsaW5rX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MjgtXHRtdXRleF9sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5Mjk6XHRuZXRsaW5rX3Jjdl9za2Ioc2tiLCBcdTAwMjZ4ZnJtX3VzZXJfcmN2X21zZyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTMwLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBQYXRoIEZvcndhcmQqKgoKT2theSwgc28gSSYjMzk7dmUgcGlucG9pbnRlZCBhIGZldyBwcm9taXNpbmcgZm9jdXMgc3ltYm9scyB0aGF0IEkgdGhpbmsgd2FycmFudCBpbW1lZGlhdGUgYXR0ZW50aW9uOiBgeGZybV91c2VyX3Jjdl9tc2dgLCBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLCBhbmQgYHhmcm1fc3RhdGVfd2Fsa2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIE5BVCBrZWVwYWxpdmUgZnVuY3Rpb25hbGl0eS4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHRoZSByZWFjaGFiaWxpdHkgb2YgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gQSBxdWljayBjaGVjayByZXZlYWxzIGl0JiMzOTtzIGluZGVlZCBjYWxsZWQgZnJvbSBgX194ZnJtX3N0YXRlX2luc2VydGAgYW5kIGBfX3hmcm1fc3RhdGVfZGVsZXRlYCwgbWVhbmluZyBpdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBTZWN1cml0eSBBc3NvY2lhdGlvbnMgKFNBcykgYXJlIGFkZGVkIG9yIHJlbW92ZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGUgd29ya3F1ZXVlIGlzIHNjaGVkdWxlZCBieSBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIHdoaWNoIGNhbGxzIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBUaGF0IHdvcmsgZnVuY3Rpb24gaXRlcmF0ZXMgdGhyb3VnaCBTQXMgdXNpbmcgYHhmcm1fc3RhdGVfd2Fsa2AgYW5kIGNhbGxzIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAuIFllcCwgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuIHNvIGZhciwgYElORVRgIGFuZCBgWEZSTV9VU0VSYCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IHBsYXllcnMuIEJ1dCwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgaW1wYWN0IHRoZSBOQVQga2VlcGFsaXZlIGZ1bmN0aW9uLgoKSSYjMzk7bGwgcXVpY2tseSByZXZpc2l0IGBuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY2AgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFhGUk1fVVNFUmAgYWxvbmUgaXMgc3VmZmljaWVudC4gYFhGUk1fVVNFUmAgZG9lcyBzZWxlY3QgYFhGUk1gIGFuZCBkZXBlbmRzIG9uIGBJTkVUYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm90IGFueSBvdGhlciBzdWJ0bGUgZGVwZW5kZW5jaWVzIGZvciBOQVQga2VlcGFsaXZlLCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0xMj1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNvY2tfYmhfbG9ja2VkLCBuYXRfa2VlcGFsaXZlX3NrX2lwdjQpID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0LX07XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2LXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQsIG5hdF9rZWVwYWxpdmVfc2tfaXB2NikgPSB7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9NDI9c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTczLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6NzQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy03NS1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTE4PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTQ2LVx0XHRicmVhaztcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0OC1cdGNhc2UgQUZfSU5FVDY6XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MzA2PWludCB4ZnJtX25hdF9rZWVwYWxpdmVfaW5pdCh1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzEzLVx0XHRicmVhaztcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMxNDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMxNS1cdGNhc2UgQUZfSU5FVDY6XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MzI3PXZvaWQgeGZybV9uYXRfa2VlcGFsaXZlX2ZpbmkodW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMzMi1cdFx0YnJlYWs7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzozMzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMzQtXHRjYXNlIEFGX0lORVQ2OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ4NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKlN0cmVhbWxpbmluZyB0aGUgSVB2NiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIElQdjYgY29uZmlndXJhdGlvbi4gVGhlIHdheSBJIHNlZSBpdCwgdGhlIGN1cnJlbnQgc2V0dXAgaXMgcmVseWluZyBvbiBgQ09ORklHX0lQVjZgLCB3aGljaCBpcyB1bmRlcnN0YW5kYWJsZS4gQnV0IGlmIHdlJiMzOTtyZSBhbHNvIG1ha2luZyBzdXJlIElQdjQgaXMgYXZhaWxhYmxlLCB3aGljaCBzZWVtcyB0byBoYXBwZW4gYXMgbG9uZyBhcyBgSU5FVGAgaXMgZW5hYmxlZCwgdGhlbiB3ZSYjMzk7cmUgcHJvYmFibHkgY2FycnlpbmcgYSBiaXQgbW9yZSBiYWdnYWdlIHRoYW4gbmVjZXNzYXJ5LiBgSU5FVGAgc2hvdWxkIGNvdmVyIElQdjQsIG9idmlvdXNseS4gQW5kIGlmIHdlJiMzOTtyZSBvbmx5IGZvY3VzZWQgb24gWEZSTS1yZWxhdGVkIGZ1bmN0aW9uYWxpdHksIGBJTkVUYCBhbG9uZyB3aXRoIGBYRlJNX1VTRVJgIHNob3VsZCBhY3R1YWxseSBjb3ZlciBpdC4KCkkgd29uZGVyIGlmIHRoZXJlJiMzOTtzIGEgcmVsYXRlZCBmbGFnIHRvIGNvbnNpZGVyLCBsaWtlIGBYRlJNX05BVGAgbWF5YmUsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB0aGF0IHdlIHNob3VsZCBiZSBjaGVja2luZyBhcyB3ZWxsPyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSByZWxhdGVkIGZpbGVzIGFuZCBzZWUgaWYgdGhhdCBpcyBjb3JyZWN0LiBUaGF0IG1pZ2h0IGJlIHRoZSBtaXNzaW5nIHBpZWNlIHRvIG9wdGltaXplIHRoaXMgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYRlJNX05BVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Nzg2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgWEZSTSBOQVQgS2VlcGFsaXZlIEludGVydmFsKioKCkFscmlnaHQsIG5vIGBYRlJNX05BVGAgZGVmaW5lLCBzbyBpdCYjMzk7cyBub3QgYSBjb21waWxlLXRpbWUgb3B0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIE5BVCBrZWVwYWxpdmUgaXMgY29uZmlndXJlZC4gTXkgbmV4dCBtb3ZlIGlzIHRvIGRpdmUgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIHNvdXJjZS4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgYHhmcm1fbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbGAgdmFyaWFibGUgdGhlcmUuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlZmluaXRpb24gYW5kIHBvdGVudGlhbCBkZWZhdWx0IHZhbHVlLCBvciBhbnkgc3lzY3RsIG9yIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiwgc2hvdWxkIGJlLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGtlZXBhbGl2ZSBpcyBjb250cm9sbGVkIGF0IHJ1bnRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25hdF9rZWVwYWxpdmVfaW50ZXJ2YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtOTc0LVx0aWYgKGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdKVxubmV0L3hmcm0veGZybV91c2VyLmM6OTc1Olx0XHR4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPVxubmV0L3hmcm0veGZybV91c2VyLmMtOTc2LVx0XHRcdG5sYV9nZXRfdTMyKGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdKTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xMzgzPXN0YXRpYyBpbnQgY29weV90b191c2VyX3N0YXRlX2V4dHJhKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0ODYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNDg3Olx0aWYgKHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkge1xubmV0L3hmcm0veGZybV91c2VyLmMtMTQ4OC1cdFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMLFxubmV0L3hmcm0veGZybV91c2VyLmM6MTQ4OTpcdFx0XHRcdCAgeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0OTAtXHRcdGlmIChyZXQpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzI0MT1zdGF0aWMgaW50IGJ1aWxkX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjg3LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzI4ODpcdGlmIChtLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyODktXHRcdGVyciA9IG5sYV9wdXRfdTMyKHNrYiwgWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyOTA6XHRcdFx0XHQgIG0tXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjkxLVx0XHRpZiAoZXJyKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMDk9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMTctXHRcdChtLVx1MDAzZW1hcHBpbmdfbWF4YWdlID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIDogMCkgJiM0Mztcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMTg6XHRcdChtLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgOiAwKSAmIzQzO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzMxOS1cdFx0KGRpciA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpIDogMCk7IC8qIFhGUk1BX1NBX0RJUiAqL1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzNDM9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzQ1MS1cdFx0XHRcdFx0ICAgICAgIHgtXHUwMDNlbWFwcGluZ19tYXhhZ2UpO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzQ1MjpcdG0ubmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IG5sYV9nZXRfdTMyX2RlZmF1bHQoYXR0cnNbWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTF0sXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDUzOlx0XHRcdFx0XHRcdCAgICAgICB4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzQ1NC1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTA0LVx0bS5tYXBwaW5nX21heGFnZSA9IHhjLVx1MDAzZW1hcHBpbmdfbWF4YWdlO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzUwNTpcdG0ubmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IHhjLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTA2LVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQwMzk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeGZybV9zYV9sZW4oc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDA4Ny1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwODg6XHRpZiAoeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKVxubmV0L3hmcm0veGZybV91c2VyLmM6NDA4OTpcdFx0bCAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDA5MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNDMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWEZSTSBOQVQgS2VlcGFsaXZlIFBhdGNoKioKCk9rYXksIHNvIHRoZSBrZWVwYWxpdmUgaW50ZXJ2YWwgZm9yIE5BVCBpcyBjb25maWd1cmVkIHRocm91Z2ggdGhlIGBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMYCBhdHRyaWJ1dGUgd2l0aGluIGVpdGhlciBgWEZSTV9NU0dfTkVXU0FgIG9yIGBYRlJNX01TR19VUERTQWAgbWVzc2FnZXMuIFRoaXMgaXMgY2xlYXJseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIOKAkyB0aGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyBwdXJwb3NlczoKCiogICAqKldvcnRoRnV6emluZzogVHJ1ZS4qKiBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgY29yZSBYRlJNIHN1YnN5c3RlbSBjaGFuZ2UuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZSBYRlJNIE5BVCBrZWVwYWxpdmUgd29ya3F1ZXVlIGhhbmRsZXMgc3RhdGUgb2JqZWN0cy4gSXTigJlzIG1vdmluZyBmcm9tIGR5bmFtaWMgYWxsb2NhdGlvbiB0byBhIGZpeGVkLXNpemUgYmF0Y2ggYXJyYXksIHdoaWNoIGltcGFjdHMgaXRlcmF0aW9uIGFuZCBwcm9jZXNzaW5nLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBzaGlmdCBhbmQgb3BlbnMgdGhlIGRvb3IgZm9yIHBvdGVudGlhbCBpc3N1ZXMuCiogICAqKkZvY3VzU3ltYm9sczoqKiBJIHNob3VsZCBiZSB0YXJnZXRpbmcgYHhmcm1fdXNlcl9yY3ZfbXNnYCwgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCwgYW5kIGB4ZnJtX3N0YXRlX3dhbGtgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2UuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogSSBzaG91bGQgYmUgdGVzdGluZyB3aXRoIGBJTkVUYCBhbmQgYFhGUk1fVVNFUmAgZW5hYmxlZC4KCkhhbmcgb24gYSBzZWNvbmTigKYgYHhmcm1fdXNlcl9yY3ZfbXNnYCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBwcm9ibGVtLCBnaXZlbiB0aGUgZ3VpZGVsaW5lIHRvIHByZWZlciBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gSSBzaG91bGQgYmUgbG9va2luZyBmb3IgYSBiZXR0ZXIgY2FuZGlkYXRlLiBUaGUgcHJvbXB0IHN1Z2dlc3RzICpub3QqIHVzaW5nIHN0YXRpYywgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLiBMZXQgbWUgY2hlY2vigKYgSXMgYHhmcm1fbmV0bGlua19yY3ZgIGFsc28gc3RhdGljPyBObywgd2FpdCEgT3IgbWF5YmUgYHhmcm1fdXNlcl9pbml0YD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGFuZCBtYWtlIHN1cmUgSSYjMzk7bSB0YXJnZXRpbmcgdGhlIHJpZ2h0IGVudHJ5IHBvaW50IGZvciB0aGlzIGZ1enppbmcgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX25ldGxpbmtfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzgzNz1zdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MjMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTI0OnN0YXRpYyB2b2lkIHhmcm1fbmV0bGlua19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MjUte1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2MTI9c3RhdGljIGludCBfX25ldF9pbml0IHhmcm1fdXNlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDYxNi1cdFx0Lmdyb3Vwc1x0PSBYRlJNTkxHUlBfTUFYLFxubmV0L3hmcm0veGZybV91c2VyLmM6NDYxNzpcdFx0LmlucHV0XHQ9IHhmcm1fbmV0bGlua19yY3YsXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjE4LVx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwODYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqVGhpbmtpbmcgVGhyb3VnaCBYRlJNIEZ1bmN0aW9uIFZpc2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIFhGUk0gZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZWlyIHNjb3BlLiBgeGZybV9uZXRsaW5rX3JjdmAuLi4gdGhhdCBvbmUmIzM5O3Mgc3RhdGljLiBSaWdodCwgdGhhdCBtZWFucyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIE5vIGJpZyBkZWFsLCBwcmV0dHkgc3RhbmRhcmQgZm9yIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuCgpOb3csIHdoYXQgYWJvdXQgYHhmcm1fc3RhdGVfd2Fsa2A/IEFoLCB5ZXMsIEkgcmVtZW1iZXIgdGhhdCBvbmUuIEl0ICppcyogZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBldmVuIHVzZXIgc3BhY2UsIHByb2JhYmx5IGZvciBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgc3RhdGVzLiBUaGF0IG1ha2VzIHNlbnNlLgoKTmV4dCBvbiB0aGUgbGlzdCwgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gSG1tLCBub3Qgc3RhdGljIGVpdGhlci4gVGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZXh0ZXJuYWxseSwgcGVyaGFwcyBieSBzb21lIG90aGVyIHBhcnQgb2YgdGhlIE5BVCBrZWVwYWxpdmUgbWVjaGFuaXNtLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgY2FsbHMgdG8gdGhhdCBhbmQgc2VlIHdoYXQmIzM5O3MgdXNpbmcgaXQuCgpBbmQgZmluYWxseSwgYHhmcm1fc3RhdGVfYWRkYC4gWWVhaCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBzdGF0aWMuIEl0IGlzIHByb2JhYmx5IHRoZSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgdG8gYWRkIG5ldyB4ZnJtIHN0YXRlcy4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgZnVuY3Rpb24uCgpTbywgaW4gZXNzZW5jZSwgSSYjMzk7bSBqdXN0IHF1aWNrbHkgYXNzZXNzaW5nIHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW50ZXJuYWwgYW5kIHdoaWNoIG9uZXMgYXJlIGludGVuZGVkIGZvciBicm9hZGVyIHVzZS4gVGhpcyBnaXZlcyBtZSBhIHF1aWNrIHNlbnNlIG9mIHRoZSBtb2R1bGUmIzM5O3MgYXJjaGl0ZWN0dXJlIGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gSXQgaW5mb3JtcyB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGxpZXMsIGFuZCB3aGVyZSB0aGUgZXh0ZW5zaW9uIHBvaW50cyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc3RhdGVfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzU2PXhmcm1fc3RhdGVfZmluZChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTM5My1cdFx0ICAgICEoeC1cdTAwM2Vwcm9wcy5mbGFncyBcdTAwMjYgWEZSTV9TVEFURV9XSUxEUkVDVikgXHUwMDI2XHUwMDI2XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTM5NDpcdFx0ICAgIHhmcm1fc3RhdGVfYWRkcl9jaGVjayh4LCBkYWRkciwgc2FkZHIsIGVuY2FwX2ZhbWlseSkgXHUwMDI2XHUwMDI2XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTM5NS1cdFx0ICAgIHRtcGwtXHUwMDNlbW9kZSA9PSB4LVx1MDAzZXByb3BzLm1vZGUgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE0NTEtXHRcdCAgICAhKHgtXHUwMDNlcHJvcHMuZmxhZ3MgXHUwMDI2IFhGUk1fU1RBVEVfV0lMRFJFQ1YpIFx1MDAyNlx1MDAyNlxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE0NTI6XHRcdCAgICB4ZnJtX3N0YXRlX2FkZHJfY2hlY2soeCwgZGFkZHIsIHNhZGRyLCBlbmNhcF9mYW1pbHkpIFx1MDAyNlx1MDAyNlxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE0NTMtXHRcdCAgICB0bXBsLVx1MDAzZW1vZGUgPT0geC1cdTAwM2Vwcm9wcy5tb2RlIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xNjU0PXhmcm1fc3RhdGVvbmx5X2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIGlmX2lkLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjY4LVx0XHQgICAgISh4LVx1MDAzZXByb3BzLmZsYWdzIFx1MDAyNiBYRlJNX1NUQVRFX1dJTERSRUNWKSBcdTAwMjZcdTAwMjZcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNjY5Olx0XHQgICAgeGZybV9zdGF0ZV9hZGRyX2NoZWNrKHgsIGRhZGRyLCBzYWRkciwgZmFtaWx5KSBcdTAwMjZcdTAwMjZcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjcwLVx0XHQgICAgbW9kZSA9PSB4LVx1MDAzZXByb3BzLm1vZGUgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTE4OTM9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fZmluZF9hY3FfYnlzZXEoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIHNlcSwgdTMyIHBjcHVfbnVtKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xODk0LVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE4OTU6aW50IHhmcm1fc3RhdGVfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE4OTYte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xOTQ4LX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxOTQ5OkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9hZGQpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE5NTAtXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTIxNzg9aW50IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMTkwLVx0fSBlbHNlIHtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyMTkxOlx0XHRpZiAoeGZybV9zdGF0ZV9hZGQoeGMpIFx1MDAzYyAwKSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjE5Mi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ZhaWxlZCB0byBhZGQgbWlncmF0ZWQgc3RhdGVcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI3NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGVzZSBmdW5jdGlvbnM6CgoqKkV4YW1pbmluZyB0aGUgWEZSTSBTdGF0ZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkgc2VlIGB4ZnJtX3N0YXRlX2FkZGAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgcmVhZGlseSBhdmFpbGFibGUgZm9yIGV4dGVybmFsIHVzZS4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uLiBBZGRpbmcgYSBzZWN1cml0eSBhc3NvY2lhdGlvbiBzdGF0ZSB0byB0aGUgWEZSTSBzdWJzeXN0ZW0gaXMgYSBjb3JlIG9wZXJhdGlvbi4gVGhhdCBnaXZlcyBtZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoZW4gSSBub3RpY2UgYHhmcm1fc3RhdGVfdXBkYXRlYCBpcyBhbHNvIGV4cG9ydGVkLiBJbnRlcmVzdGluZy4gVGhpcyBjb25maXJtcyB0aGF0IHRoaXMgc3Vic3lzdGVtIGFsbG93cyBzdGF0ZSBtb2RpZmljYXRpb24gYWZ0ZXIgY3JlYXRpb24uIFRoaXMgc3VnZ2VzdHMgYSBmbGV4aWJsZSwgZHluYW1pYyBkZXNpZ24uIEl0IGFsc28gaW1wbGllcyB0aGUgZXhpc3RlbmNlIG9mIGxvZ2ljIHRvIHZhbGlkYXRlIGFuZCBhcHBseSBzdGF0ZSBjaGFuZ2VzLCB3aGljaCBJJiMzOTtkIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBJIHdlcmUgdXNpbmcgaXQuIE9rYXksIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBkaXJlY3Rpb24gZm9yIGFuYWx5c2lzLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSB0d28gZnVuY3Rpb25zIGFuZCB3b3JrIG15IHdheSB0aHJvdWdoIHRoZSBzdXJyb3VuZGluZyBsb2dpYywgYW5kIGxvb2sgdG8gc2VlIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgdGhleSB3b3JrIHdpdGgsIGFuZCBob3cgdGhlaXIgaW50ZXJhY3Rpb25zLiBUaGlzIHNob3dzIHRoYXQgdGhlIHN0YXRlIG1hbmFnZW1lbnQgY2FuIGhhbmRsZSBib3RoIGluaXRpYWwgc2V0dXAgYW5kIHJ1bnRpbWUgbW9kaWZpY2F0aW9ucywgd2hpY2ggaXMgZ29vZC4gVGltZSB0byBkaXZlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zdGF0ZV91cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jPTIyMjM9RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX21pZ3JhdGUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMjI1LVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjIyMjY6aW50IHhmcm1fc3RhdGVfdXBkYXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTIyMjcte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMzI2LX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyMzI3OkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV91cGRhdGUpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTIzMjgtXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTIzNTY9RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2NoZWNrX2V4cGlyZSk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjM1Ny1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyMzU4OnZvaWQgeGZybV9zdGF0ZV91cGRhdGVfc3RhdHMoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTIzNTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgzOQoJCQkJCQkJb3V0cHV0OiAxNjEKCQkJCQkJCXRob3VnaHRzOiAyODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFhGUk0gTkFUIEtlZXBhbGl2ZSBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB0aGlzIFhGUk0gTkFUIGtlZXBhbGl2ZSBjaGFuZ2U6IGB4ZnJtX3N0YXRlX2FkZGAsIGB4ZnJtX3N0YXRlX3VwZGF0ZWAsIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAsIGFuZCBgeGZybV9zdGF0ZV93YWxrYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS4KCk15IHJlYXNvbmluZz8gVGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgbW9kaWZpZXMgaG93IHRoZSBYRlJNIE5BVCBrZWVwYWxpdmUgd29ya3F1ZXVlIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBzd2FwcGluZyBvdXQgZHluYW1pYyBhbGxvY2F0aW9uIG9mIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZWAgZm9yIGEgc3RhY2stYmFzZWQsIGZpeGVkLXNpemUgYXJyYXkuIFRoaXMgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHN0YXRlcyBhcmUgaXRlcmF0ZWQgdGhyb3VnaCBhbmQgbWFuYWdlZC4gSXQmIzM5O3MgYSBjb3JlIGNoYW5nZSB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBwZXJmb3JtYW5jZSBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoaXMgY2hhbmdlIGlzIHRyaWdnZXJlZCB0aHJvdWdoIG5ldGxpbmsgY29uZmlndXJhdGlvbiBvZiBJUHNlYyBTZWN1cml0eSBBc3NvY2lhdGlvbnMgKFNBcykgd2l0aCBhIE5BVCBrZWVwYWxpdmUgaW50ZXJ2YWw7IHNvLCB1c2VyIHNwYWNlIGNhbiB0cmlnZ2VyIHRoaXMgYmVoYXZpb3IuCgpOb3csIGEgcXVpY2sgY2hlY2sgdG8gZW5zdXJlIGJ1aWxkIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGp1c3QgYFhGUk1fVVNFUmAgaXMgc3VmZmljaWVudCB0byBjb21waWxlIGB4ZnJtX25hdF9rZWVwYWxpdmUuY2AuIEkgZXhwZWN0IGl0IHRvIGJlLCBiZWNhdXNlIGBYRlJNYCBpcyBzZWxlY3RlZCBieSBgWEZSTV9VU0VSYCwgYW5kIHRoZSBjb21waWxhdGlvbiBzaG91bGQgcHVsbCBpbiBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gdGhlIFhGUk0gZnJhbWV3b3JrLiBBbmQsIHllcCwgdGhhdCYjMzk7cyB0aGUgY2FzZS4KCk9rYXksIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUga2V5IGFzcGVjdHMgYW5kIGFtIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9zdGF0ZV9hZGQmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV91cGRhdGUmIzM0OywKICAgICYjMzQ7eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV93YWxrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBYRlJNIE5BVCBrZWVwYWxpdmUgd29ya3F1ZXVlIHRvIHVzZSBhIGZpeGVkLXNpemUgYmF0Y2ggYXJyYXkgaW5zdGVhZCBvZiBkeW5hbWljYWxseSBhbGxvY2F0aW5nIHN0YXRlIG9iamVjdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBYRlJNIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IHN0YXRlcyBhcmUgaXRlcmF0ZWQgYW5kIHByb2Nlc3NlZCBkdXJpbmcgTkFUIGtlZXBhbGl2ZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNvbmZpZ3VyaW5nIElQc2VjIFNlY3VyaXR5IEFzc29jaWF0aW9ucyAoU0FzKSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbCB2aWEgbmV0bGluay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3N0YXRlX2FkZCYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZCYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX3dhbGsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFhGUk0gTkFUIGtlZXBhbGl2ZSB3b3JrcXVldWUgdG8gdXNlIGEgZml4ZWQtc2l6ZSBiYXRjaCBhcnJheSBpbnN0ZWFkIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgc3RhdGUgb2JqZWN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFhGUk0gc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgc3RhdGVzIGFyZSBpdGVyYXRlZCBhbmQgcHJvY2Vzc2VkIGR1cmluZyBOQVQga2VlcGFsaXZlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgSVBzZWMgU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQXMpIHdpdGggYSBOQVQga2VlcGFsaXZlIGludGVydmFsIHZpYSBuZXRsaW5rLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGxpbmtlZCBsaXN0IHdpdGggYSBzdGFjay1hbGxvY2F0ZWQgYmF0Y2ggYXJyYXkgKGBiYXRjaGAgaW5zaWRlIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eGApIHRvIGNvbGxlY3QgYHhmcm1fc3RhdGVgIHBvaW50ZXJzIGR1cmluZyBhIHN0YXRlIHdhbGsuIFRoZSBgYmF0Y2hgIGFycmF5IGFuZCBgbnJgIGNvdW50ZXIgYXJlIHVzZWQgc3RyaWN0bHkgbG9jYWxseSB3aXRoaW4gYG5hdF9rZWVwYWxpdmVfd29ya2AgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAuIFRoZSBjb3VudGVyIGBjdHgubnJgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBiZWZvcmUgdGhlIHdhbGssIGFuZCB0aGUgY29kZSBvbmx5IHJlYWRzIHVwIHRvIGBjdHgubnJgIGVsZW1lbnRzIGZyb20gdGhlIGBiYXRjaGAgYXJyYXksIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIGFjY2Vzc2VkLiBGdXJ0aGVybW9yZSwgbm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjQ4NTgyMWE0ODc5OWRjOWZmOTdkZDBmZmQ0YjQ4MjJkNDFlNTc2NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDE5OjUzOjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYwppbmRleCA4Njc5YzY4YzEwYTE2Li41Y2Q2ZDQzMTY0ZGJjIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYwpAQCAtMTU1LDMyICYjNDM7MTU1LDMwIEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpCiAJfQogfQogCiYjNDM7ZW51bSB7CiYjNDM7CU5BVF9LRUVQQUxJVkVfQkFUQ0hfU0laRSA9IDE2LAomIzQzOwlOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEwgPSAxLAomIzQzO307CiYjNDM7CiBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBzdGF0ZXM7CiYjNDM7CXN0cnVjdCB4ZnJtX3N0YXRlICpiYXRjaFtOQVRfS0VFUEFMSVZFX0JBVENIX1NJWkVdOwomIzQzOwl1bnNpZ25lZCBpbnQgbnI7CiAJdGltZTY0X3QgbmV4dF9ydW47CiAJdGltZTY0X3Qgbm93OwogfTsKIAotc3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKLX07Ci0KIHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7Ci0Jc3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlOwogCiAJaWYgKCFSRUFEX09OQ0UoeC0mZ3Q7bmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkpCiAJCXJldHVybiAwOwogCi0Jc3RhdGUgPSBrbWFsbG9jX29iaigqc3RhdGUsIEdGUF9BVE9NSUMpOwotCWlmICghc3RhdGUpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwlpZiAoY3R4LSZndDtuciA9PSBBUlJBWV9TSVpFKGN0eC0mZ3Q7YmF0Y2gpKQomIzQzOwkJcmV0dXJuIE5BVF9LRUVQQUxJVkVfQkFUQ0hfRlVMTDsKIAogCXhmcm1fc3RhdGVfaG9sZCh4KTsKLQlzdGF0ZS0mZ3Q7eCA9IHg7Ci0JbGlzdF9hZGRfdGFpbCgmYW1wO3N0YXRlLSZndDtsaXN0LCAmYW1wO2N0eC0mZ3Q7c3RhdGVzKTsKJiM0MzsJY3R4LSZndDtiYXRjaFtjdHgtJmd0O25yJiM0MzsmIzQzO10gPSB4OwogCXJldHVybiAwOwogfQogCkBAIC0yMjYsMjkgJiM0MzsyMjQsMjcgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAogc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGUsICp0bXA7CiAJc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4OwogCXN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgd2FsazsKIAlzdHJ1Y3QgbmV0ICpuZXQ7Ci0JaW50IGVycjsKJiM0MzsJaW50IGVyciwgaTsKIAotCUlOSVRfTElTVF9IRUFEKCZhbXA7Y3R4LnN0YXRlcyk7CiAJY3R4Lm5leHRfcnVuID0gMDsKIAljdHgubm93ID0ga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpOwogCiAJbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLndvcmspOwogCXhmcm1fc3RhdGVfd2Fsa19pbml0KCZhbXA7d2FsaywgSVBQUk9UT19FU1AsIE5VTEwpOwotCWVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsICZhbXA7d2FsaywgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3QsICZhbXA7Y3R4KTsKJiM0MzsJZG8gewomIzQzOwkJY3R4Lm5yID0gMDsKJiM0MzsJCWVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsICZhbXA7d2FsaywgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3QsICZhbXA7Y3R4KTsKJiM0MzsJCWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBjdHgubnI7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShjdHguYmF0Y2hbaV0sICZhbXA7Y3R4KTsKJiM0MzsJCQl4ZnJtX3N0YXRlX3B1dChjdHguYmF0Y2hbaV0pOwomIzQzOwkJfQomIzQzOwkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CX0gd2hpbGUgKGVyciA9PSBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEwpOwogCXhmcm1fc3RhdGVfd2Fsa19kb25lKCZhbXA7d2FsaywgbmV0KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhdGUsIHRtcCwgJmFtcDtjdHguc3RhdGVzLCBsaXN0KSB7Ci0JCW5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RhdGUtJmd0O3gsICZhbXA7Y3R4KTsKLQkJeGZybV9zdGF0ZV9wdXQoc3RhdGUtJmd0O3gpOwotCQlrZnJlZShzdGF0ZSk7Ci0JfQotCWlmIChlcnIgPT0gLUVOT01FTSkgewotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtuZXQtJmd0O3hmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTsKLQkJcmV0dXJuOwotCX0KIAlpZiAoY3R4Lm5leHRfcnVuKQogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtuZXQtJmd0O3hmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLAogCQkJCSAgICAgIChjdHgubmV4dF9ydW4gLSBjdHgubm93KSAqIEhaKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjMKCQkJCQkJCW91dHB1dDogMjI3CgkJCQkJCQl0aG91Z2h0czogNzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWEZSTSBOQVQgS2VlcGFsaXZlIEJhdGNoaW5nIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGluIGBuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY2AgaXMgY2hhbmdpbmcgaG93IGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgaGFuZGxlcyBgeGZybV9zdGF0ZWAgcG9pbnRlcnMuIEl0IHVzZWQgdG8gYmUgYSBsaW5rZWQgbGlzdCBvZiBgc3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGVgLCBhbGxvY2F0aW5nIG9uZSBmb3IgZWFjaCBgeGZybV9zdGF0ZWAuIE5vdywgd2UmIzM5O3JlIHVzaW5nIGEgZml4ZWQtc2l6ZSwgc3RhY2stYWxsb2NhdGVkIGFycmF5IGNhbGxlZCBgYmF0Y2hgIHdpdGhpbiBhIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eGAuICBUaGUgc2l6ZSBpcyAxNi4gSWYgdGhlIGJhdGNoIGlzIGZ1bGwsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTExgLCB3aGljaCBpcyAxLiBUaGUgbG9vcCBpbiBgbmF0X2tlZXBhbGl2ZV93b3JrYCB3aWxsIHByb2Nlc3MgdGhhdCBiYXRjaCBhbmQgdGhlbiBjb250aW51ZSB0aGUgd2FsayBpZiB3ZSBoaXQgdGhhdCBgTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMYCBlcnJvci4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYGJhdGNoYCBhcnJheSAqaXMqIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgaW5zaWRlIGBuYXRfa2VlcGFsaXZlX3dvcmtgOiBgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykgeyBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCBjdHg7IC4uLiB9YC4gIFRoZSBgY3R4YCBpdHNlbGYgaXNuJiMzOTt0ICpmdWxseSogaW5pdGlhbGl6ZWQuICBJIHNlZSBgY3R4Lm5leHRfcnVuYCBhbmQgYGN0eC5ub3dgIGFyZSBpbml0aWFsaXplZCwgYW5kIGBjdHgubnJgIGdldHMgc2V0IHRvIDAgaW5zaWRlIHRoZSBgZG8geyAuLi4gfSB3aGlsZWAgbG9vcC4gIFRoZSBgYmF0Y2hgIGFycmF5IGl0c2VsZiBpcyAqbm90KiBleHBsaWNpdGx5IGluaXRpYWxpemVkLiAgQnV0LCAqd2hldyosIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgb25seSAqd3JpdGVzKiB0byB0aGUgYGJhdGNoYCDigJMgYGN0eC5iYXRjaFtjdHgubnImIzQzOyYjNDM7XSA9IHg7YC4gVGhlIGxvb3AgbGF0ZXIgb25seSAqcmVhZHMqIGVsZW1lbnRzIHRoYXQgKmhhdmUqIGJlZW4gd3JpdHRlbiB0byDigJMgIGBmb3IgKGkgPSAwOyBpICZsdDsgY3R4Lm5yOyBpJiM0MzsmIzQzOykgeyBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKGN0eC5iYXRjaFtpXSwgJmFtcDtjdHgpOyAuLi4gfWAuICBTbyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSAqcmVhZHMqIGluIHRoZSBjcml0aWNhbCBwYXRoLiBHb29kLiBBbmQgd2UgYXJlbiYjMzk7dCBjb3B5aW5nIHRoZSBjb250ZXh0IHRvIHVzZXJzcGFjZSwgc28gbm8gaW5mbyBsZWFrIHJpc2suCgpPa2F5LCBsZXQmIzM5O3MgbG9vayBmb3IgYSBkaWZmZXJlbnQgdHlwZSBvZiBpc3N1ZSwgbGlrZSBgY3R4Lm5yYCBiZWluZyB1c2VkIGJlZm9yZSBpbml0aWFsaXplZC4gQWgsIG5vLCBgY3R4Lm5yYCBpcyBzZXQgdG8gMCByaWdodCBiZWZvcmUgYHhmcm1fc3RhdGVfd2Fsa2AgaXMgY2FsbGVkLCBzbyBpdCYjMzk7cyBpbml0aWFsaXplZCBjb3JyZWN0bHkgdGhlcmUuICBHb29kLgoKQmFzaWNhbGx5LCB0aGlzIHBhdGNoIGlzIGp1c3QgdHJhZGluZyBkeW5hbWljIGFsbG9jYXRpb24gKGxpbmtlZCBsaXN0KSBmb3IgYSBzdGFjay1iYXNlZCBiYXRjaCBhcnJheSB0byBkb2RnZSBga21hbGxvY19vYmpgIGFuZCBgLUVOT01FTWAgaXNzdWVzLiAgU3RhbmRhcmQgb3B0aW1pemF0aW9uIHN0dWZmLgoKVGhlIHR5cGljYWwgYnVncyBoZXJlIGFyZSBnb2luZyB0byBiZSBsb2dpYyBidWdzLCBvdXQtb2YtYm91bmRzIGFjY2VzcyAoYnV0IHdlIGhhdmUgYSBjaGVjayBmb3IgdGhhdCBgY3R4Lm5yID09IEFSUkFZX1NJWkUoY3R4LmJhdGNoKWApLCBvciB1c2UtYWZ0ZXItZnJlZS4gVGhlc2Uga2luZHMgb2YgdGhpbmdzIHNob3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIHNvIHRoYXQmIzM5O3MgZ29vZC4gTm8gdW5pbml0aWFsaXplZCByZWFkLiBObyBpbmZvIGxlYWsuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHJlLXZlcmlmeSB0aGUgaW50ZXJhY3Rpb24gaW4gIGB4ZnJtX3N0YXRlX3dhbGtgIGFuZCBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgIHdoZXJlIHdlIHdyaXRlIHRvIHRoZSBhcnJheTogYGlmIChjdHgtJmd0O25yID09IEFSUkFZX1NJWkUoY3R4LSZndDtiYXRjaCkpIHJldHVybiBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEw7ICB4ZnJtX3N0YXRlX2hvbGQoeCk7IGN0eC0mZ3Q7YmF0Y2hbY3R4LSZndDtuciYjNDM7JiM0MztdID0geDsgcmV0dXJuIDA7YC4gWWVwLCB0aGF0JiMzOTtzIGNsZWFuLiBgeGZybV9zdGF0ZV9ob2xkYCBnaXZlcyB1cyBzYWZldHkuCgpJIHRoaW5rIHdlJiMzOTtyZSBnb29kLiBObyBuZWVkIHRvIGZsYWcgdGhpcyBmb3IgS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGxpbmtlZCBsaXN0IHdpdGggYSBzdGFjay1hbGxvY2F0ZWQgYmF0Y2ggYXJyYXkgKGBiYXRjaGAgaW5zaWRlIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eGApIHRvIGNvbGxlY3QgYHhmcm1fc3RhdGVgIHBvaW50ZXJzIGR1cmluZyBhIHN0YXRlIHdhbGsuIFRoZSBgYmF0Y2hgIGFycmF5IGFuZCBgbnJgIGNvdW50ZXIgYXJlIHVzZWQgc3RyaWN0bHkgbG9jYWxseSB3aXRoaW4gYG5hdF9rZWVwYWxpdmVfd29ya2AgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAuIFRoZSBjb3VudGVyIGBjdHgubnJgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBiZWZvcmUgdGhlIHdhbGssIGFuZCB0aGUgY29kZSBvbmx5IHJlYWRzIHVwIHRvIGBjdHgubnJgIGVsZW1lbnRzIGZyb20gdGhlIGBiYXRjaGAgYXJyYXksIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIGFjY2Vzc2VkLiBGdXJ0aGVybW9yZSwgbm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGxpbmtlZCBsaXN0IHdpdGggYSBzdGFjay1hbGxvY2F0ZWQgYmF0Y2ggYXJyYXkgKGBiYXRjaGAgaW5zaWRlIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eGApIHRvIGNvbGxlY3QgYHhmcm1fc3RhdGVgIHBvaW50ZXJzIGR1cmluZyBhIHN0YXRlIHdhbGsuIFRoZSBgYmF0Y2hgIGFycmF5IGFuZCBgbnJgIGNvdW50ZXIgYXJlIHVzZWQgc3RyaWN0bHkgbG9jYWxseSB3aXRoaW4gYG5hdF9rZWVwYWxpdmVfd29ya2AgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAuIFRoZSBjb3VudGVyIGBjdHgubnJgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBiZWZvcmUgdGhlIHdhbGssIGFuZCB0aGUgY29kZSBvbmx5IHJlYWRzIHVwIHRvIGBjdHgubnJgIGVsZW1lbnRzIGZyb20gdGhlIGBiYXRjaGAgYXJyYXksIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIGFjY2Vzc2VkLiBGdXJ0aGVybW9yZSwgbm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTM6MTguNjYwOTE5NjkzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTkxODQ0OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIlhGUk1fVVNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fc3RhdGVfYWRkXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX3VwZGF0ZVwiLFxuICAgIFwieGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRcIixcbiAgICBcInhmcm1fc3RhdGVfd2Fsa1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbGlua2VkIGxpc3Qgd2l0aCBhIHN0YWNrLWFsbG9jYXRlZCBiYXRjaCBhcnJheSAoYGJhdGNoYCBpbnNpZGUgYHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4YCkgdG8gY29sbGVjdCBgeGZybV9zdGF0ZWAgcG9pbnRlcnMgZHVyaW5nIGEgc3RhdGUgd2Fsay4gVGhlIGBiYXRjaGAgYXJyYXkgYW5kIGBucmAgY291bnRlciBhcmUgdXNlZCBzdHJpY3RseSBsb2NhbGx5IHdpdGhpbiBgbmF0X2tlZXBhbGl2ZV93b3JrYCBhbmQgYG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0YC4gVGhlIGNvdW50ZXIgYGN0eC5ucmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGJlZm9yZSB0aGUgd2FsaywgYW5kIHRoZSBjb2RlIG9ubHkgcmVhZHMgdXAgdG8gYGN0eC5ucmAgZWxlbWVudHMgZnJvbSB0aGUgYGJhdGNoYCBhcnJheSwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgYWNjZXNzZWQuIEZ1cnRoZXJtb3JlLCBub25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG1lYW5pbmcgdGhlcmUgaXMgbm8gcmlzayBvZiBhbiBpbmZvLWxlYWsuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBYRlJNIE5BVCBrZWVwYWxpdmUgd29ya3F1ZXVlIHRvIHVzZSBhIGZpeGVkLXNpemUgYmF0Y2ggYXJyYXkgaW5zdGVhZCBvZiBkeW5hbWljYWxseSBhbGxvY2F0aW5nIHN0YXRlIG9iamVjdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBYRlJNIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IHN0YXRlcyBhcmUgaXRlcmF0ZWQgYW5kIHByb2Nlc3NlZCBkdXJpbmcgTkFUIGtlZXBhbGl2ZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNvbmZpZ3VyaW5nIElQc2VjIFNlY3VyaXR5IEFzc29jaWF0aW9ucyAoU0FzKSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbCB2aWEgbmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTM6MTguNjYwOTI0NjAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3OTY2ODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjQ4NTgyMWE0ODc5OWRjOWZmOTdkZDBmZmQ0YjQ4MjJkNDFlNTc2NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxOTo1MzoxNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXFxuaW5kZXggODY3OWM2OGMxMGExNi4uNWNkNmQ0MzE2NGRiYyAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXFxuQEAgLTE1NSwzMiArMTU1LDMwIEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXFxuIFxcdH1cXG4gfVxcbiBcXG4rZW51bSB7XFxuK1xcdE5BVF9LRUVQQUxJVkVfQkFUQ0hfU0laRSA9IDE2LFxcbitcXHROQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEwgPSAxLFxcbit9O1xcbitcXG4gc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHN0YXRlcztcXG4rXFx0c3RydWN0IHhmcm1fc3RhdGUgKmJhdGNoW05BVF9LRUVQQUxJVkVfQkFUQ0hfU0laRV07XFxuK1xcdHVuc2lnbmVkIGludCBucjtcXG4gXFx0dGltZTY0X3QgbmV4dF9ydW47XFxuIFxcdHRpbWU2NF90IG5vdztcXG4gfTtcXG4gXFxuLXN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlIHtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbi1cXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG4tfTtcXG4tXFxuIHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxcbiB7XFxuIFxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XFxuLVxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZTtcXG4gXFxuIFxcdGlmICghUkVBRF9PTkNFKHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHN0YXRlID0ga21hbGxvY19vYmooKnN0YXRlLCBHRlBfQVRPTUlDKTtcXG4tXFx0aWYgKCFzdGF0ZSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdGlmIChjdHgtXFx1MDAzZW5yID09IEFSUkFZX1NJWkUoY3R4LVxcdTAwM2ViYXRjaCkpXFxuK1xcdFxcdHJldHVybiBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEw7XFxuIFxcbiBcXHR4ZnJtX3N0YXRlX2hvbGQoeCk7XFxuLVxcdHN0YXRlLVxcdTAwM2V4ID0geDtcXG4tXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2c3RhdGUtXFx1MDAzZWxpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlcyk7XFxuK1xcdGN0eC1cXHUwMDNlYmF0Y2hbY3R4LVxcdTAwM2VucisrXSA9IHg7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yMjYsMjkgKzIyNCwyNyBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbiBcXG4gc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbi1cXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGUsICp0bXA7XFxuIFxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcXG4gXFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuLVxcdGludCBlcnI7XFxuK1xcdGludCBlcnIsIGk7XFxuIFxcbi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y3R4LnN0YXRlcyk7XFxuIFxcdGN0eC5uZXh0X3J1biA9IDA7XFxuIFxcdGN0eC5ub3cgPSBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCk7XFxuIFxcbiBcXHRuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7XFxuIFxcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFxcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7XFxuLVxcdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFxcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXFx1MDAyNmN0eCk7XFxuK1xcdGRvIHtcXG4rXFx0XFx0Y3R4Lm5yID0gMDtcXG4rXFx0XFx0ZXJyID0geGZybV9zdGF0ZV93YWxrKG5ldCwgXFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCBcXHUwMDI2Y3R4KTtcXG4rXFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY3R4Lm5yOyBpKyspIHtcXG4rXFx0XFx0XFx0bmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShjdHguYmF0Y2hbaV0sIFxcdTAwMjZjdHgpO1xcbitcXHRcXHRcXHR4ZnJtX3N0YXRlX3B1dChjdHguYmF0Y2hbaV0pO1xcbitcXHRcXHR9XFxuK1xcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitcXHR9IHdoaWxlIChlcnIgPT0gTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMKTtcXG4gXFx0eGZybV9zdGF0ZV93YWxrX2RvbmUoXFx1MDAyNndhbGssIG5ldCk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGF0ZSwgdG1wLCBcXHUwMDI2Y3R4LnN0YXRlcywgbGlzdCkge1xcbi1cXHRcXHRuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0YXRlLVxcdTAwM2V4LCBcXHUwMDI2Y3R4KTtcXG4tXFx0XFx0eGZybV9zdGF0ZV9wdXQoc3RhdGUtXFx1MDAzZXgpO1xcbi1cXHRcXHRrZnJlZShzdGF0ZSk7XFxuLVxcdH1cXG4tXFx0aWYgKGVyciA9PSAtRU5PTUVNKSB7XFxuLVxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgMCk7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0fVxcbiBcXHRpZiAoY3R4Lm5leHRfcnVuKVxcbiBcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssXFxuIFxcdFxcdFxcdFxcdCAgICAgIChjdHgubmV4dF9ydW4gLSBjdHgubm93KSAqIEhaKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTM6MTkuOTg5NDY5MzA0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTY0MDE3NTY0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9zdGF0ZV9hZGRcIixcbiAgICBcInhmcm1fc3RhdGVfdXBkYXRlXCIsXG4gICAgXCJ4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZFwiLFxuICAgIFwieGZybV9zdGF0ZV93YWxrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFhGUk0gTkFUIGtlZXBhbGl2ZSB3b3JrcXVldWUgdG8gdXNlIGEgZml4ZWQtc2l6ZSBiYXRjaCBhcnJheSBpbnN0ZWFkIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgc3RhdGUgb2JqZWN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFhGUk0gc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgc3RhdGVzIGFyZSBpdGVyYXRlZCBhbmQgcHJvY2Vzc2VkIGR1cmluZyBOQVQga2VlcGFsaXZlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgSVBzZWMgU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQXMpIHdpdGggYSBOQVQga2VlcGFsaXZlIGludGVydmFsIHZpYSBuZXRsaW5rLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNDg1ODIxYTQ4Nzk5ZGM5ZmY5N2RkMGZmZDRiNDgyMmQ0MWU1NzY1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTk6NTM6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5pbmRleCA4Njc5YzY4YzEwYTE2Li41Y2Q2ZDQzMTY0ZGJjIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5AQCAtMTU1LDMyICsxNTUsMzAgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcbiBcdH1cbiB9XG4gXG4rZW51bSB7XG4rXHROQVRfS0VFUEFMSVZFX0JBVENIX1NJWkUgPSAxNixcbitcdE5BVF9LRUVQQUxJVkVfQkFUQ0hfRlVMTCA9IDEsXG4rfTtcbitcbiBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIHN0YXRlcztcbitcdHN0cnVjdCB4ZnJtX3N0YXRlICpiYXRjaFtOQVRfS0VFUEFMSVZFX0JBVENIX1NJWkVdO1xuK1x0dW5zaWduZWQgaW50IG5yO1xuIFx0dGltZTY0X3QgbmV4dF9ydW47XG4gXHR0aW1lNjRfdCBub3c7XG4gfTtcbiBcbi1zdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4tXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbi19O1xuLVxuIHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuIHtcbiBcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XG4tXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGU7XG4gXG4gXHRpZiAoIVJFQURfT05DRSh4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHN0YXRlID0ga21hbGxvY19vYmooKnN0YXRlLCBHRlBfQVRPTUlDKTtcbi1cdGlmICghc3RhdGUpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKGN0eC1cdTAwM2VuciA9PSBBUlJBWV9TSVpFKGN0eC1cdTAwM2ViYXRjaCkpXG4rXHRcdHJldHVybiBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEw7XG4gXG4gXHR4ZnJtX3N0YXRlX2hvbGQoeCk7XG4tXHRzdGF0ZS1cdTAwM2V4ID0geDtcbi1cdGxpc3RfYWRkX3RhaWwoXHUwMDI2c3RhdGUtXHUwMDNlbGlzdCwgXHUwMDI2Y3R4LVx1MDAzZXN0YXRlcyk7XG4rXHRjdHgtXHUwMDNlYmF0Y2hbY3R4LVx1MDAzZW5yKytdID0geDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMjYsMjkgKzIyNCwyNyBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFxuIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlLCAqdG1wO1xuIFx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4O1xuIFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuLVx0aW50IGVycjtcbitcdGludCBlcnIsIGk7XG4gXG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHguc3RhdGVzKTtcbiBcdGN0eC5uZXh0X3J1biA9IDA7XG4gXHRjdHgubm93ID0ga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpO1xuIFxuIFx0bmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLndvcmspO1xuIFx0eGZybV9zdGF0ZV93YWxrX2luaXQoXHUwMDI2d2FsaywgSVBQUk9UT19FU1AsIE5VTEwpO1xuLVx0ZXJyID0geGZybV9zdGF0ZV93YWxrKG5ldCwgXHUwMDI2d2FsaywgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3QsIFx1MDAyNmN0eCk7XG4rXHRkbyB7XG4rXHRcdGN0eC5uciA9IDA7XG4rXHRcdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCBcdTAwMjZjdHgpO1xuK1x0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGN0eC5ucjsgaSsrKSB7XG4rXHRcdFx0bmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShjdHguYmF0Y2hbaV0sIFx1MDAyNmN0eCk7XG4rXHRcdFx0eGZybV9zdGF0ZV9wdXQoY3R4LmJhdGNoW2ldKTtcbitcdFx0fVxuK1x0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdH0gd2hpbGUgKGVyciA9PSBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEwpO1xuIFx0eGZybV9zdGF0ZV93YWxrX2RvbmUoXHUwMDI2d2FsaywgbmV0KTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGF0ZSwgdG1wLCBcdTAwMjZjdHguc3RhdGVzLCBsaXN0KSB7XG4tXHRcdG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RhdGUtXHUwMDNleCwgXHUwMDI2Y3R4KTtcbi1cdFx0eGZybV9zdGF0ZV9wdXQoc3RhdGUtXHUwMDNleCk7XG4tXHRcdGtmcmVlKHN0YXRlKTtcbi1cdH1cbi1cdGlmIChlcnIgPT0gLUVOT01FTSkge1xuLVx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuIFx0aWYgKGN0eC5uZXh0X3J1bilcbiBcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayxcbiBcdFx0XHRcdCAgICAgIChjdHgubmV4dF9ydW4gLSBjdHgubm93KSAqIEhaKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjUzOjE5Ljk4OTQ3MDY3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxMjM1NDUxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIE5BVCBLZWVwYWxpdmUgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jYCwgYW5kIGl0J3MgYSBwcmV0dHkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uLiBJbnN0ZWFkIG9mIHRoZSBkeW5hbWljIGFsbG9jYXRpb24gb2YgYG5hdF9rZWVwYWxpdmVfc3RhdGVgIHN0cnVjdHVyZXMgYW5kIGxpbmtlZCBsaXN0IG1hbmFnZW1lbnQsIHRoZXkndmUgZ29uZSB3aXRoIGEgZml4ZWQtc2l6ZSBiYXRjaCBhcHByb2FjaCB1c2luZyBhIGBiYXRjaFtOQVRfS0VFUEFMSVZFX0JBVENIX1NJWkVdYCBhcnJheSwgd2hpY2ggaXMgc2V0IHRvIDE2IGVsZW1lbnRzLiBUaGF0J3MgYSBkZWZpbml0ZSBzaGlmdC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaWYgdGhlIGJhdGNoIGZpbGxzIHVwIGR1cmluZyBjb2xsZWN0aW9uLCBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgIHJldHVybnMgYE5BVF9LRUVQQUxJVkVfQkFUQ0hfRlVMTGAuIFRoZW4sIGBuYXRfa2VlcGFsaXZlX3dvcmtgIGhhbmRsZXMgYSBsb29wIHRvIHByb2Nlc3MgdGhhdCBiYXRjaCBhbmQgY29udGludWUgaXRlcmF0aW5nLCB3aGljaCBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciB0aGVzZSBzb3J0cyBvZiBiYXRjaGVkIG9wZXJhdGlvbnMuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBJdCdzIGEgY2xlYXIgZWZmaWNpZW5jeSBpbXByb3ZlbWVudCBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0sIHdoaWNoLCBvZiBjb3Vyc2UsIGlzIHBhcnQgb2YgSVBzZWMuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIGhvdyByZWFjaGFibGUgaXMgdGhpcyBjb2RlPyBXaGF0IGFyZSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXM/IEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgcXVpY2sgZ3JlcCBmb3IgYHhmcm1fbmF0X2tlZXBhbGl2ZS5jYCB3aXRoaW4gdGhlIGBuZXQveGZybS9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29udGV4dC4gVGhhdCBzaG91bGQgYXQgbGVhc3QgZ2l2ZSBtZSBhIHN0YXJ0aW5nIHBvaW50IGZvciBkZXRlcm1pbmluZyBpZiB0aGlzIGNvZGUgaXMgZXZlbiBjb21waWxlZCBpbnRvIGEgdHlwaWNhbCBjb25maWd1cmF0aW9uLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIEtjb25maWcgb3B0aW9ucyB0byBzZWUgd2hhdCB0cmlnZ2VycyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgTkFUIGtlZXBhbGl2ZSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTM6MjkuMTEzMDE4MzQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjMxMTY4ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9uYXRfa2VlcGFsaXZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3hmcm0uaD0yMzY1PXN0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX3hmcm1fc3RhdGVfYnBmKHZvaWQpXFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmgtMjM3MC1cXG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3MTppbnQgeGZybV9uYXRfa2VlcGFsaXZlX2luaXQodW5zaWduZWQgc2hvcnQgZmFtaWx5KTtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3Mjp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9maW5pKHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XFxuaW5jbHVkZS9uZXQveGZybS5oOjIzNzM6aW50IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaDoyMzc0OmludCB4ZnJtX25hdF9rZWVwYWxpdmVfbmV0X2Zpbmkoc3RydWN0IG5ldCAqbmV0KTtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3NTp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjM3Ni1cXG4tLVxcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jPTI4MD1pbnQgX19pbml0IHhmcm02X2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTI5OC1cXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYzoyOTk6XFx0cmV0ID0geGZybV9uYXRfa2VlcGFsaXZlX2luaXQoQUZfSU5FVDYpO1xcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTMwMC1cXHRpZiAocmV0KVxcbi0tXFxubmV0L2lwdjYveGZybTZfcG9saWN5LmM9MzE1PXZvaWQgeGZybTZfZmluaSh2b2lkKVxcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTMxNi17XFxubmV0L2lwdjYveGZybTZfcG9saWN5LmM6MzE3OlxcdHhmcm1fbmF0X2tlZXBhbGl2ZV9maW5pKEFGX0lORVQ2KTtcXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0zMTgtXFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZ4ZnJtNl9uZXRfb3BzKTtcXG4tLVxcbm5ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxcXFxuLS1cXG5uZXQveGZybS9NYWtlZmlsZS0xNi1cXHRcXHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTc6XFx0XFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cXG5uZXQveGZybS9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfWEZSTV9TVEFUSVNUSUNTKSArPSB4ZnJtX3Byb2Mub1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMi0vKlxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjM6ICogeGZybV9uYXRfa2VlcGFsaXZlLmNcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy00LSAqXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNzU9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9za19maW5pKHN0cnVjdCBzb2NrX2JoX2xvY2tlZCBfX3BlcmNwdSAqc29ja3MpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yODItXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjgzOnZvaWQgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjg0LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI5My1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyOTQ6aW50IF9fbmV0X2luaXQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yOTUte1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjk5LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMwMDppbnQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9maW5pKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMDEte1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzA1LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMwNjppbnQgeGZybV9uYXRfa2VlcGFsaXZlX2luaXQodW5zaWduZWQgc2hvcnQgZmFtaWx5KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMwNy17XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMjQtfVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMyNTpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX25hdF9rZWVwYWxpdmVfaW5pdCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzI2LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMyNzp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9maW5pKHVuc2lnbmVkIHNob3J0IGZhbWlseSlcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMjgte1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzM5LX1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzozNDA6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9uYXRfa2VlcGFsaXZlX2ZpbmkpO1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00MzEwPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDMzNS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQzMzY6XFx0cnYgPSB4ZnJtX25hdF9rZWVwYWxpdmVfbmV0X2luaXQobmV0KTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQzMzctXFx0aWYgKHJ2IFxcdTAwM2MgMClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDM1ND1zdGF0aWMgdm9pZCBfX25ldF9leGl0IHhmcm1fbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDM1NS17XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0MzU2OlxcdHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfZmluaShuZXQpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDM1Ny1cXHR4ZnJtX3N5c2N0bF9maW5pKG5ldCk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0MDQ9dm9pZCBfX2luaXQgeGZybV9pbml0KHZvaWQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MTgtXFx0cmVnaXN0ZXJfeGZybV9zdGF0ZV9icGYoKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ0MTk6XFx0eGZybV9uYXRfa2VlcGFsaXZlX2luaXQoQUZfSU5FVCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NDIwLX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz04MTE9aW50IF9feGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtODMyLVxcdFxcdG5ldC1cXHUwMDNleGZybS5zdGF0ZV9udW0tLTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6ODMzOlxcdFxcdHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHgpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MzQtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTE3MjM9c3RhdGljIHZvaWQgX194ZnJtX3N0YXRlX2luc2VydChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNzY3LVxcdHhmcm1faGFzaF9ncm93X2NoZWNrKG5ldCwgeC1cXHUwMDNlYnlkc3QubmV4dCAhPSBOVUxMKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTc2ODpcXHR4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZCh4KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTc2OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjUzOjMwLjY3NjEzOTkxM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODc5MDU1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiAoTkFUKSBLZWVwYWxpdmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY2AuIFRoYXQncyBhIGNsZWFyIGluZGljYXRvciB0aGlzIHJldm9sdmVzIGFyb3VuZCB0aGUgTkFUIGtlZXBhbGl2ZSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgWEZSTSAoSVBzZWMvU2VjdXJpdHkgUG9saWN5IERhdGFiYXNlKSBmcmFtZXdvcmsuIFRoZSBjb2RlJ3MgZ29pbmcgdG8gYmUgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX1hGUk1gIGlzIGRlZmluZWQsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGtub3cgdGhpcyBhcmVhIHF1aXRlIHdlbGwuXG5cblRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBtb2RpZmljYXRpb25zIHRvIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBCYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgIGlzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBnYXRoZXJpbmcgZGF0YSBvciBwcmVwYXJpbmcgYSB0YXNrIHJlbGF0ZWQgdG8ga2VlcGFsaXZlLCBhbmQgYG5hdF9rZWVwYWxpdmVfd29ya2Agc291bmRzIGxpa2UgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmRvZXMqIHRoZSBrZWVwYWxpdmUgcHJvY2Vzc2luZywgbGlrZWx5IHNjaGVkdWxlZCBieSB0aGUgZm9ybWVyLiBOb3cgSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZWNoYW5pY3Mgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIGdyYXNwIHRoZSBpbXBhY3Qgb2YgdGhlIHBhdGNoLiBMZXQncyBkaWcgaW50byB0aGUgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgd2hhdCB0aGV5IGFyZSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI5MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjUzOjM0LjM2NDA1MjEyOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExNjE1NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5hdF9rZWVwYWxpdmVfd29ya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRucy94ZnJtLmg9MzI9c3RydWN0IG5ldG5zX3hmcm0ge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bnMveGZybS5oLTg1LVxcdHN0cnVjdCBtdXRleCB4ZnJtX2NmZ19tdXRleDtcXG5pbmNsdWRlL25ldC9uZXRucy94ZnJtLmg6ODY6XFx0c3RydWN0IGRlbGF5ZWRfd29ya1xcdG5hdF9rZWVwYWxpdmVfd29yaztcXG5pbmNsdWRlL25ldC9uZXRucy94ZnJtLmgtODctfTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTE1OD1lbnVtIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2Mi1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNjM6c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2NC1cXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqYmF0Y2hbTkFUX0tFRVBBTElWRV9CQVRDSF9TSVpFXTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2OS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNzA6c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTcxLXtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNzI6XFx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggKmN0eCA9IHB0cjtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNzMtXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODQtXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTg1OnN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTg2OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHgpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTg3LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIyNC1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyMjU6c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMjYte1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIyNzpcXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCBjdHg7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjI4LVxcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgd2FsaztcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIzNC1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyMzU6XFx0bmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLndvcmspO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIzNi1cXHR4ZnJtX3N0YXRlX3dhbGtfaW5pdChcXHUwMDI2d2FsaywgSVBQUk9UT19FU1AsIE5VTEwpO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjM4LVxcdFxcdGN0eC5uciA9IDA7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjM5OlxcdFxcdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFxcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXFx1MDAyNmN0eCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjQwLVxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNDEtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGN0eC5ucjsgaSsrKSB7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQyOlxcdFxcdFxcdG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoY3R4LmJhdGNoW2ldLCBcXHUwMDI2Y3R4KTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNDMtXFx0XFx0XFx0eGZybV9zdGF0ZV9wdXQoY3R4LmJhdGNoW2ldKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0OC1cXHRpZiAoY3R4Lm5leHRfcnVuKVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI0OTpcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjUwLVxcdFxcdFxcdFxcdCAgICAgIChjdHgubmV4dF9ydW4gLSBjdHgubm93KSAqIEhaKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTI4Mz12b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjkwLVxcdG5ldCA9IHhzX25ldCh4KTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyOTE6XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yOTItfVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9Mjk0PWludCBfX25ldF9pbml0IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjk1LXtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyOTY6XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssIG5hdF9rZWVwYWxpdmVfd29yayk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjk3LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MzAwPWludCB4ZnJtX25hdF9rZWVwYWxpdmVfbmV0X2Zpbmkoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMwMS17XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MzAyOlxcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmspO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMwMy1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTM6MzUuOTc1Njc2NzU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc5NTM0NDg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhGUk0gTkFUIEtlZXBhbGl2ZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGFuIGludGVyZXN0aW5nIG1vZGlmaWNhdGlvbiB0byB0aGUgWEZSTSBzdWJzeXN0ZW0ncyBOQVQga2VlcGFsaXZlIG1lY2hhbmlzbS4gQmFzaWNhbGx5LCBgbmF0X2tlZXBhbGl2ZV93b3JrYCDigJMgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiDigJMgaGFzIGhhZCBpdHMgc3RhdGUgdHJhdmVyc2FsIGxvZ2ljIHJld29ya2VkLiBUaGUgdHJpZ2dlciBmb3IgdGhpcyB3b3JrcXVldWUgaXMgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCwgd2hpY2ggZ2V0cyBjYWxsZWQgZHVyaW5nIFhGUk0gc3RhdGUgaW5zZXJ0aW9ucyBvciBkZWxldGlvbnMuXG5cblRoZSBnaXN0IG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyBgbmF0X2tlZXBhbGl2ZV93b3JrYCBpdGVyYXRlcyB0aHJvdWdoIFhGUk0gc3RhdGVzLiBOb3csIGluc3RlYWQgb2YgYSBwb3RlbnRpYWxseSB1bmJvdW5kZWQgd2FsaywgaXQgdXNlcyBgeGZybV9zdGF0ZV93YWxrYCB3aXRoIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYXMgYSBjYWxsYmFjay4gYHhmcm1fc3RhdGVfd2Fsa2AgY2FsbHMgYG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0YCBmb3IgZWFjaCBYRlJNIHN0YXRlLCBhbmQgaW1wb3J0YW50bHksIHRoZSB3YWxrIHN0b3BzIGlmIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgcmV0dXJucyBub24temVyby4gIFRoZSBtb2RpZmljYXRpb24gZW5zdXJlcyBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgIHJldHVybnMgYE5BVF9LRUVQQUxJVkVfQkFUQ0hfRlVMTGAgd2hlbiBhIGRlZmluZWQgYmF0Y2ggaXMgZnVsbCwgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtgIHdpbGwgbG9vcCB3aGlsZSB0aGlzIGVycm9yIGlzIHJldHVybmVkLlxuXG5UaGlzIHNpZ25hbHMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0IHNtZWxscyBsaWtlIGEgZml4IGZvciBhIHBvdGVudGlhbCBtZW1vcnkgaXNzdWUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSBzdGFjayBhbGxvY2F0aW9uLiBTcGVjaWZpY2FsbHksIGluc3RlYWQgb2YgZHluYW1pYyBhbGxvY2F0aW9uLCB0aGlzIGxvb2tzIGxpa2UgdGhleSdyZSBub3cgdXNpbmcgYSBmaXhlZC1zaXplIGFycmF5IG9uIHRoZSBzdGFjaywgd2hpY2ggaXMgYWxtb3N0IGNlcnRhaW5seSBkb25lIHRvIGF2b2lkIE9PTSBjb25kaXRpb25zIG9yIGFsbG9jYXRpb24gZmFpbHVyZXMuIFRoaXMgbWFrZXMgdGhpcyBhcmVhIHJpcGUgZm9yIGZ1enppbmchXG5cbkxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gVGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0YCBhbmQgYG5hdF9rZWVwYWxpdmVfd29ya2AuIGBuYXRfa2VlcGFsaXZlX3dvcmtgIGl0c2VsZiBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgc28gaXQncyBub3QgZGlyZWN0bHkgZXhwb3NlZCBieSBzeXN0ZW0gY2FsbHMsIGJ1dCBpdHMgdHJpZ2dlcmVkIGJ5IGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAuIERpZ2dpbmcgZGVlcGVyLCBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGlzIHRyaWdnZXJlZCBieSBgX194ZnJtX3N0YXRlX2luc2VydGAgYW5kIGBfX3hmcm1fc3RhdGVfZGVsZXRlYC4gVGhhdCBzdWdnZXN0cyBmdXp6aW5nIFhGUk0gc3RhdGUgaW5zZXJ0aW9uIGFuZCBkZWxldGlvbiB0aHJvdWdoIHRoZSBuZXRsaW5rIGludGVyZmFjZSAodXNpbmcgYFhGUk1fTVNHX05FV1NBYCwgYFhGUk1fTVNHX0RFTFNBYCwgYFhGUk1fTVNHX1VQRFNBYCkgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIHRyaWdnZXIgdGhlIGNvZGUgd2UncmUgaW50ZXJlc3RlZCBpbi5cblxuVG8gYmUgcHJlY2lzZSwgdGhlIHByaW1hcnkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgZnVuY3Rpb24sIGFsb25nIHdpdGggYHhmcm1fc3RhdGVfd2Fsa2AsIGB4ZnJtX2FkZF9zYWAsIGFuZCBgeGZybV9kZWxfc2FgLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGlzIGFjdHVhbGx5IGV4cG9zZWQuICBZZXAsIGl0J3MgZGVmaW5lZCBpbiBgbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNgIGFuZCBpcyBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIGB4ZnJtX2FkZF9zYWAgYW5kIGB4ZnJtX2RlbF9zYWAgYXJlIGF2YWlsYWJsZSBpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTM6NDQuNzcxMDI2NzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNDA4NjExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2FkZF9zYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDM4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEwMzk6c3RhdGljIGludCB4ZnJtX2FkZF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDQwLVxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI5Mzc9c3RhdGljIGludCB4ZnJtX2FkZF9wb2xfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzAwMy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDA0OnN0YXRpYyBpbnQgeGZybV9hZGRfc2FfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwMDUtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzQ4LX0geGZybV9kaXNwYXRjaFtYRlJNX05SX01TR1RZUEVTXSA9IHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzQ5OlxcdFtYRlJNX01TR19ORVdTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhICAgICAgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NTAtXFx0W1hGUk1fTVNHX0RFTFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kZWxfc2EgICAgICAgIH0sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzYxLVxcdFtYRlJNX01TR19BQ1FVSVJFICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX2FjcXVpcmUgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NjI6XFx0W1hGUk1fTVNHX0VYUElSRSAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2FfZXhwaXJlIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2My1cXHRbWEZSTV9NU0dfVVBEUE9MSUNZICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9wb2xpY3kgICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzY0OlxcdFtYRlJNX01TR19VUERTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhICAgICAgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NjUtXFx0W1hGUk1fTVNHX1BPTEVYUElSRSAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfcG9sX2V4cGlyZX0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjUzOjQ2LjI3NTExNzM1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODg5OTM0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBDb2RlIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBgWEZSTWAgY29uZmlnIGlzIGVuYWJsZWQuIFRoYXQncyB0aGUgYmFzZWxpbmUuIEJlZm9yZSBkaXZpbmcgaW4gZGVlcGVyLCBJIGFsd2F5cyBsaWtlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IG9yIHJlbGF0ZWQuIEl0J3MgYSBnb29kIHByYWN0aWNlIHRvIGNhc3QgYSB3aWRlIG5ldCBpbml0aWFsbHkuXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY2AuIEdvb2QsIGl0IGNvbmZpcm1zIHRoYXQgYENPTkZJR19YRlJNYCAqaXMqIHVzZWQgdGhlcmUsIHdoaWNoIGF0IGxlYXN0IHZhbGlkYXRlcyBteSBpbml0aWFsIHRob3VnaHQuIE5vdywgSSBzaG91bGQgY2hlY2sgdGhlIGBNYWtlZmlsZWAgaW4gdGhhdCBkaXJlY3RvcnkgKGBuZXQveGZybS9NYWtlZmlsZWApLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGF0IHN1YnN5c3RlbS4gQSBNYWtlZmlsZSBvZnRlbiBwcm92aWRlcyB2aXRhbCBjbHVlcyByZWdhcmRpbmcgb3RoZXIgY29uZmlnIG9wdGlvbnMsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucywgb3IgaG93IGV2ZXJ5dGhpbmcgdGllcyB0b2dldGhlci4gSXQncyBsaWtlIHRoZSBhcmNoaXRlY3R1cmFsIGJsdWVwcmludC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA3MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjUzOjQ5LjQ2NDExMzUwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3OTEwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9uYXRfa2VlcGFsaXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxcXFxuLS1cXG5uZXQveGZybS9NYWtlZmlsZS0xNi1cXHRcXHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTc6XFx0XFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cXG5uZXQveGZybS9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfWEZSTV9TVEFUSVNUSUNTKSArPSB4ZnJtX3Byb2Mub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1Mzo0OS41MDk5MTAzNjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNjA3MDI0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqWEZSTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYFhGUk1gLiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIGJlIHN1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgbmF0dXJhbGx5LCB0aGF0IGBYRlJNYCBpcyB0aGUgKnByaW1hcnkqIGNvbmZpZ3VyYXRpb24gcG9pbnQuIEhvd2V2ZXIsIEkgbmVlZCB0byBjb25zaWRlciBhbGwgYW5nbGVzLiBNeSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byBgWEZSTV9VU0VSYC4gQ291bGQgY29uZmlndXJpbmcgYFhGUk1gIGZyb20gdXNlcnNwYWNlIGJlIGEgZGVwZW5kZW5jeSBoZXJlPyBJdCBvZnRlbiBpcy4gTm93IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by5cblxuTGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIGBuZXQveGZybS9NYWtlZmlsZWAgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gY2hlY2sgZm9yIHRoZSBvYmplY3QgZmlsZSBgeGZybV91c2VyLm9gLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBidWlsZCB0aGVyZSwgbGlrZWx5IGRyaXZlbiBieSB0aGF0IGBYRlJNX1VTRVJgIEtjb25maWcgb3B0aW9uLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIEkgYWxyZWFkeSBoYXZlIGEgc3VzcGljaW9uLiBUaGlzIGlzIHRoZSBwbGFjZSB0byBzb2xpZGlmeSB0aGUgaHlwb3RoZXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjUzOjUzLjQxNTk4MzMzNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3MDg1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV91c2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19YRlJNX0FMR08pICs9IHhmcm1fYWxnby5vXFxubmV0L3hmcm0vTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1hGUk1fVVNFUikgKz0geGZybV91c2VyLm9cXG5uZXQveGZybS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfWEZSTV9VU0VSX0NPTVBBVCkgKz0geGZybV9jb21wYXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1Mzo1My40NjA2OTU5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzUzNDMwOTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGFkZCBzZWN1cml0eSBhc3NvY2lhdGlvbnMgKFNBcykgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIG1lYW5zIEknbSBnb2luZyB0byBuZWVkIGBYRlJNX1VTRVJgLiBNYWtlcyBzZW5zZS4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggdGhpcywgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IHRoZSBhcmNoaXRlY3R1cmU6IERvZXMgdGhlIGBYRlJNYCBmcmFtZXdvcmsgaGF2ZSBhbiBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIHRoZSBgSU5FVGAgc3Vic3lzdGVtPyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gQmVzdCB0byBiZSBzdXJlIHRoaXMgZm91bmRhdGlvbiBpcyBzb2xpZCBiZWZvcmUgSSBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODk5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTM6NTguMjE0MTI5NjAxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM4Mzg2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNDItXFxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNTAtXFxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0vS2NvbmZpZy01Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNzEtXFxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxubmV0L3hmcm0vS2NvbmZpZy03My1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxcbm5ldC94ZnJtL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTA1LVxcbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE0MC1cXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xcbm5ldC94ZnJtL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTU2LVxcbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1Mzo1OC4yNjA1MTg5NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3NjcwNDE0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgWEZSTSBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgVmlzaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgWEZSTWAgaXMgdGhpcyBpbnRlcm5hbCBib29sZWFuLCBjb250cm9sbGVkIGJ5IGBYRlJNX1VTRVJgIGFuZCBzb21lIG90aGVycy4gU28sIGlmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCBgWEZSTV9VU0VSYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiBJJ2QgbmVlZCB0byBlbmFibGUgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSBnb2luZy4gQW5kLCBiZWNhdXNlIGBYRlJNX1VTRVJgIGlzIG5lc3RlZCB1bmRlciBgaWYgSU5FVGAsIGVuYWJsaW5nIGBJTkVUYCBpcyBhIHByZXJlcXVpc2l0ZS4gU28sIGBJTkVUYCBhbmQgYFhGUk1fVVNFUmAgYXJlIHRoZSBrZXkgY29uZmlncyBmb3IgZW5hYmxpbmcgdGhpcy4gR290IGl0LlxuXG5Ob3csIHdoYXQgYWJvdXQgdGhlIHN5bWJvbHMgdGhlbXNlbHZlcz8gSSdtIHRoaW5raW5nIGFib3V0IHRob3NlIHNwZWNpZmljIGZ1bmN0aW9ucyDigJMgYHhmcm1fYWRkX3NhYCwgYHhmcm1fZGVsX3NhYCwgYHhmcm1fc3RhdGVfd2Fsa2AsIGFuZCBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLiBMZXQgbWUgZG91YmxlLWNoZWNrIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAuIElzIGl0IGV4cG9ydGVkPyBIbW0sIGl0J3Mgbm90IGV4cG9ydGVkLiBCdXQgd2FpdCwgaXQncyBhIGdsb2JhbCBmdW5jdGlvbiB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jYC4gVGhhdCdzIGludGVyZXN0aW5nLiBCZWNhdXNlIGl0J3Mgbm90IHN0YXRpYywgaXQgaGFzIGl0cyBvd24gZGlzdGluY3Qgc3ltYm9sLCBkZXNwaXRlIG5vdCBiZWluZyBleHBvcnRlZC5cblxuQWxyaWdodCwgbGV0J3Mgc2hpZnQgYmFjayB0byBgeGZybV9hZGRfc2FgIGFuZCBgeGZybV9kZWxfc2FgLiBBY2NvcmRpbmcgdG8gbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nLCB0aGV5J3JlIHN0YXRpYyB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fdXNlci5jYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gR290dGEgZG91YmxlLWNoZWNrIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTQ6MTEuMDI3NTYzMzI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ2MDIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2FkZF9zYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDM4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEwMzk6c3RhdGljIGludCB4ZnJtX2FkZF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDQwLVxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI5Mzc9c3RhdGljIGludCB4ZnJtX2FkZF9wb2xfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzAwMy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDA0OnN0YXRpYyBpbnQgeGZybV9hZGRfc2FfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwMDUtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzQ4LX0geGZybV9kaXNwYXRjaFtYRlJNX05SX01TR1RZUEVTXSA9IHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzQ5OlxcdFtYRlJNX01TR19ORVdTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhICAgICAgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NTAtXFx0W1hGUk1fTVNHX0RFTFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kZWxfc2EgICAgICAgIH0sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzYxLVxcdFtYRlJNX01TR19BQ1FVSVJFICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX2FjcXVpcmUgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NjI6XFx0W1hGUk1fTVNHX0VYUElSRSAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2FfZXhwaXJlIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2My1cXHRbWEZSTV9NU0dfVVBEUE9MSUNZICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9wb2xpY3kgICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzY0OlxcdFtYRlJNX01TR19VUERTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhICAgICAgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NjUtXFx0W1hGUk1fTVNHX1BPTEVYUElSRSAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfcG9sX2V4cGlyZX0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjU0OjExLjA3NTAyNzEzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc5NDY0ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIEFQSSBEZXNpZ246IENvbnNpZGVyaW5nIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgYW5kIGB4ZnJtX3N0YXRlX3dhbGtgKipcblxuUmlnaHQsIHNvIHRoZSBwcm9tcHQgZW1waGFzaXplcyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBldmFsdWF0ZSB0aGlzIGNvZGUuIFRoZSBnb2FsIGlzIHRvIG1ha2UgdGhlc2UgZnVuY3Rpb25zIGFjY2Vzc2libGUgYW5kIG1haW50YWluYWJsZSBpbiB0aGUgbG9uZyBydW4uXG5cbmB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgbG9va3MgcHJvbWlzaW5nLCB0aGF0IGlzIGEgZ29vZCBjYW5kaWRhdGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dC4gVGhhdCBzZWVtcyB0byBmaXQgdGhlIHByb2ZpbGUgd2UncmUgYWltaW5nIGZvci5cblxuTm93LCBsZXQncyBjb25zaWRlciBgeGZybV9zdGF0ZV93YWxrYC4gSXQncyBsb2NhdGVkIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLCB3aGljaCBpcyBhIGtleSBhcmVhIG9mIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gZnVsZmlsbHMgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGNyaXRlcmlhLCBhbmQgaWYgaXQgbWFrZXMgc2Vuc2UgYXMgYW4gYWNjZXNzaWJsZSBBUEkgZW5kcG9pbnQuIFRoZSBsb2NhdGlvbiB3aXRoaW4gdGhhdCBmaWxlLCBzdWdnZXN0cyBpdCBsaWtlbHkgZG9lcyBwbGF5IGFuIGltcG9ydGFudCByb2xlLCBidXQgSSBuZWVkIHRvIGRpdmUgZGVlcGVyIHRvIGRldGVybWluZSBpdHMgc3BlY2lmaWMgdXNlIGFuZCBzdWl0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDoxNC42NTQ0OTQxMjhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTIwMzE0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9zdGF0ZV93YWxrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmM9MTY4Nz1zdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfYnlzcGkoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgc3BpLFxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE2OTAtXFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE2OTE6XFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayAqdztcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTY5Mi1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0yNjg0PXN0YXRpYyBib29sIF9feGZybV9zdGF0ZV9maWx0ZXJfbWF0Y2goc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwMC1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjcwMTppbnQgeGZybV9zdGF0ZV93YWxrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsayxcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwMi1cXHRcXHQgICAgaW50ICgqZnVuYykoc3RydWN0IHhmcm1fc3RhdGUgKiwgaW50LCB2b2lkKiksXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwNS1cXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqc3RhdGU7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MDY6XFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayAqeDtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwNy1cXHRpbnQgZXJyID0gMDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzEzLVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ3YWxrLVxcdTAwM2VhbGwpKVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzE0OlxcdFxcdHggPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0uc3RhdGVfYWxsLCBzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrLCBhbGwpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzE1LVxcdGVsc2VcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjcxNjpcXHRcXHR4ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2d2Fsay1cXHUwMDNlYWxsLCBzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrLCBhbGwpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzE3LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbSh4LCBcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnN0YXRlX2FsbCwgYWxsKSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc0MC19XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NDE6RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3dhbGspO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzQyLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzQzOnZvaWQgeGZybV9zdGF0ZV93YWxrX2luaXQoc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsaywgdTggcHJvdG8sXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDQtXFx0XFx0XFx0ICBzdHJ1Y3QgeGZybV9hZGRyZXNzX2ZpbHRlciAqZmlsdGVyKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NTEtfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzUyOkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV93YWxrX2luaXQpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzUzLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzU0OnZvaWQgeGZybV9zdGF0ZV93YWxrX2RvbmUoc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2Fsaywgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzU1LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzY0LX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc2NTpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfd2Fsa19kb25lKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc2Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTQ6MTUuOTY2NTMxMzc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjU2MjI5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGZyb20gYSB0ZWNobmljYWwgcGVyc3BlY3RpdmU6XG5cbioqTXkgUGVyc3BlY3RpdmUgb24gdGhlIFhGUk0gU3Vic3lzdGVtIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgWEZSTSBzdWJzeXN0ZW0gaGFuZGxlcyBleHRlcm5hbCBjb21tdW5pY2F0aW9uLiBJIHNlZSB0aGF0IGB4ZnJtX3N0YXRlX3dhbGtgIGlzIGFuICpleHBvcnRlZCogZnVuY3Rpb24uIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHN1Z2dlc3RzIGl0J3MgZGVzaWduZWQgdG8gYmUgYWNjZXNzZWQgYW5kIHVzZWQgZnJvbSAqb3V0c2lkZSogdGhlIGNvcmUgWEZSTSBtb2R1bGUuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGxpa2VseSBtZWFucyBpdCBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGV4aXN0aW5nIFhGUk0gc3RhdGVzLiBUaGF0J3MgdXNlZnVsIGZvciBhIHZhcmlldHkgb2YgdGFza3Mg4oCTIG1hbmFnZW1lbnQsIG1vbml0b3JpbmcsIG9yIHBvc3NpYmx5IGV2ZW4gZGVidWdnaW5nIHRvb2xzIHRoYXQgbmVlZCB0byBpbnNwZWN0IHRoZSBjdXJyZW50IFhGUk0gY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGl0cyB1c2FnZSB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXQgaXMgdXNlZCBmb3IgYW5kIGlmIGl0IGhhcyBhbnkgY2F2ZWF0cy5cblxuVGhlbiBJIHNlZSBgeGZybV91c2VyX3Jjdl9tc2dgLiBBaGEhIFRoaXMgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGFsbCBOZXRsaW5rIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gWEZSTS4gVGhpcyBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4gTmV0bGluayBpcyB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlIGZvciB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyB0byBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIHN0YWNrLCBhbmQgc28gYHhmcm1fdXNlcl9yY3ZfbXNnYCBpcyBnb2luZyB0byBiZSB0aGUgY2VudHJhbCBwb2ludCB3aGVyZSBhbGwgdGhlIHVzZXItc3BhY2UgcmVxdWVzdHMg4oCTIGZvciBjcmVhdGluZywgbW9kaWZ5aW5nLCBvciBxdWVyeWluZyBYRlJNIHBvbGljaWVzIGFuZCBzdGF0ZXMg4oCTIHdpbGwgY29tZSBpbi4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGRpc3BhdGNoZXIsIHJvdXRpbmcgdGhlc2UgaW5jb21pbmcgTmV0bGluayBtZXNzYWdlcyB0byB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcnMgZm9yIHByb2Nlc3NpbmcuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MgaXMgZ29pbmcgdG8gYmUgY3JpdGljYWwgdG8gc2VjdXJpdHkgaW1wbGljYXRpb25zIHRvby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MzIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDoxOS42OTIxNTY0MjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjU0ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fdXNlcl9yY3ZfbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3ODE9c3RhdGljIGludCB4ZnJtX3JlamVjdF91bnVzZWRfYXR0cihpbnQgdHlwZSwgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzgzNi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozODM3OnN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzgzOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM5MjQ9c3RhdGljIHZvaWQgeGZybV9uZXRsaW5rX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzkyOC1cXHRtdXRleF9sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9jZmdfbXV0ZXgpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5Mjk6XFx0bmV0bGlua19yY3Zfc2tiKHNrYiwgXFx1MDAyNnhmcm1fdXNlcl9yY3ZfbXNnKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTMwLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTQ6MTkuNzQxODE5MDQyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4ODIyOTAxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBQYXRoIEZvcndhcmQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbnBvaW50ZWQgYSBmZXcgcHJvbWlzaW5nIGZvY3VzIHN5bWJvbHMgdGhhdCBJIHRoaW5rIHdhcnJhbnQgaW1tZWRpYXRlIGF0dGVudGlvbjogYHhmcm1fdXNlcl9yY3ZfbXNnYCwgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCwgYW5kIGB4ZnJtX3N0YXRlX3dhbGtgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleXMgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBOQVQga2VlcGFsaXZlIGZ1bmN0aW9uYWxpdHkuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHRoZSByZWFjaGFiaWxpdHkgb2YgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gQSBxdWljayBjaGVjayByZXZlYWxzIGl0J3MgaW5kZWVkIGNhbGxlZCBmcm9tIGBfX3hmcm1fc3RhdGVfaW5zZXJ0YCBhbmQgYF9feGZybV9zdGF0ZV9kZWxldGVgLCBtZWFuaW5nIGl0J3MgdHJpZ2dlcmVkIHdoZW4gU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQXMpIGFyZSBhZGRlZCBvciByZW1vdmVkLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlIHdvcmtxdWV1ZSBpcyBzY2hlZHVsZWQgYnkgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCB3aGljaCBjYWxscyBgbmF0X2tlZXBhbGl2ZV93b3JrYC4gVGhhdCB3b3JrIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggU0FzIHVzaW5nIGB4ZnJtX3N0YXRlX3dhbGtgIGFuZCBjYWxscyBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgLiBZZXAsIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIHdoYXQgSSd2ZSBzZWVuIHNvIGZhciwgYElORVRgIGFuZCBgWEZSTV9VU0VSYCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IHBsYXllcnMuIEJ1dCwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBpbXBhY3QgdGhlIE5BVCBrZWVwYWxpdmUgZnVuY3Rpb24uXG5cbkknbGwgcXVpY2tseSByZXZpc2l0IGBuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY2AgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFhGUk1fVVNFUmAgYWxvbmUgaXMgc3VmZmljaWVudC4gYFhGUk1fVVNFUmAgZG9lcyBzZWxlY3QgYFhGUk1gIGFuZCBkZXBlbmRzIG9uIGBJTkVUYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBub3QgYW55IG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgZm9yIE5BVCBrZWVwYWxpdmUsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTQ6MjUuNjI0MTEwOTI1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA3NTU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTEyPXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQsIG5hdF9rZWVwYWxpdmVfc2tfaXB2NCkgPSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNC19O1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2LXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQsIG5hdF9rZWVwYWxpdmVfc2tfaXB2NikgPSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz00Mj1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy03My1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzo3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy03NS1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0xMTg9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0Ni1cXHRcXHRicmVhaztcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTQ4LVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0zMDY9aW50IHhmcm1fbmF0X2tlZXBhbGl2ZV9pbml0KHVuc2lnbmVkIHNob3J0IGZhbWlseSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMxMy1cXHRcXHRicmVhaztcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzozMTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzE1LVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0zMjc9dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfZmluaSh1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMzItXFx0XFx0YnJlYWs7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MzMzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMzNC1cXHRjYXNlIEFGX0lORVQ2OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDoyNS42NjkxOTczNDlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NTgwMDQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqU3RyZWFtbGluaW5nIHRoZSBJUHY2IENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIElQdjYgY29uZmlndXJhdGlvbi4gVGhlIHdheSBJIHNlZSBpdCwgdGhlIGN1cnJlbnQgc2V0dXAgaXMgcmVseWluZyBvbiBgQ09ORklHX0lQVjZgLCB3aGljaCBpcyB1bmRlcnN0YW5kYWJsZS4gQnV0IGlmIHdlJ3JlIGFsc28gbWFraW5nIHN1cmUgSVB2NCBpcyBhdmFpbGFibGUsIHdoaWNoIHNlZW1zIHRvIGhhcHBlbiBhcyBsb25nIGFzIGBJTkVUYCBpcyBlbmFibGVkLCB0aGVuIHdlJ3JlIHByb2JhYmx5IGNhcnJ5aW5nIGEgYml0IG1vcmUgYmFnZ2FnZSB0aGFuIG5lY2Vzc2FyeS4gYElORVRgIHNob3VsZCBjb3ZlciBJUHY0LCBvYnZpb3VzbHkuIEFuZCBpZiB3ZSdyZSBvbmx5IGZvY3VzZWQgb24gWEZSTS1yZWxhdGVkIGZ1bmN0aW9uYWxpdHksIGBJTkVUYCBhbG9uZyB3aXRoIGBYRlJNX1VTRVJgIHNob3VsZCBhY3R1YWxseSBjb3ZlciBpdC5cblxuSSB3b25kZXIgaWYgdGhlcmUncyBhIHJlbGF0ZWQgZmxhZyB0byBjb25zaWRlciwgbGlrZSBgWEZSTV9OQVRgIG1heWJlLCBvciBzb21ldGhpbmcgc2ltaWxhciwgdGhhdCB3ZSBzaG91bGQgYmUgY2hlY2tpbmcgYXMgd2VsbD8gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSByZWxhdGVkIGZpbGVzIGFuZCBzZWUgaWYgdGhhdCBpcyBjb3JyZWN0LiBUaGF0IG1pZ2h0IGJlIHRoZSBtaXNzaW5nIHBpZWNlIHRvIG9wdGltaXplIHRoaXMgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0ODcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDoyOS4zNTQ5OTk4MTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDY3MDc2MzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhGUk1fTkFUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDozMC44MDE3MTcwMjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNTUzMjc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgWEZSTSBOQVQgS2VlcGFsaXZlIEludGVydmFsKipcblxuQWxyaWdodCwgbm8gYFhGUk1fTkFUYCBkZWZpbmUsIHNvIGl0J3Mgbm90IGEgY29tcGlsZS10aW1lIG9wdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBOQVQga2VlcGFsaXZlIGlzIGNvbmZpZ3VyZWQuIE15IG5leHQgbW92ZSBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIEknbSBnb2luZyBzdHJhaWdodCB0byBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgYHhmcm1fbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbGAgdmFyaWFibGUgdGhlcmUuIFRoYXQncyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBhbmQgcG90ZW50aWFsIGRlZmF1bHQgdmFsdWUsIG9yIGFueSBzeXNjdGwgb3IgdXNlci1zcGFjZSBjb25maWd1cmF0aW9uLCBzaG91bGQgYmUuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBrZWVwYWxpdmUgaXMgY29udHJvbGxlZCBhdCBydW50aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc4NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjU0OjM0LjAwNzI1MzEwNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNjI5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmF0X2tlZXBhbGl2ZV9pbnRlcnZhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy05NzQtXFx0aWYgKGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjk3NTpcXHRcXHR4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsID1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy05NzYtXFx0XFx0XFx0bmxhX2dldF91MzIoYXR0cnNbWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTF0pO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MTM4Mz1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9zdGF0ZV9leHRyYShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0ODYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTQ4NzpcXHRpZiAoeC1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0ODgtXFx0XFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE0ODk6XFx0XFx0XFx0XFx0ICB4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNDkwLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMjQxPXN0YXRpYyBpbnQgYnVpbGRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzI4Ny1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMjg4OlxcdGlmIChtLVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzI4OS1cXHRcXHRlcnIgPSBubGFfcHV0X3UzMihza2IsIFhGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUwsXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzI5MDpcXHRcXHRcXHRcXHQgIG0tXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyOTEtXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMDk9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMxNy1cXHRcXHQobS1cXHUwMDNlbWFwcGluZ19tYXhhZ2UgPyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgOiAwKSArXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzMxODpcXHRcXHQobS1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSA6IDApICtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzE5LVxcdFxcdChkaXIgPyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSA6IDApOyAvKiBYRlJNQV9TQV9ESVIgKi9cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzNDM9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDUxLVxcdFxcdFxcdFxcdFxcdCAgICAgICB4LVxcdTAwM2VtYXBwaW5nX21heGFnZSk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzQ1MjpcXHRtLm5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPSBubGFfZ2V0X3UzMl9kZWZhdWx0KGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM0NTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0NTQtXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTA0LVxcdG0ubWFwcGluZ19tYXhhZ2UgPSB4Yy1cXHUwMDNlbWFwcGluZ19tYXhhZ2U7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzUwNTpcXHRtLm5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPSB4Yy1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbDtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTA2LVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDAzOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ZnJtX3NhX2xlbihzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwODctXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDA4ODpcXHRpZiAoeC1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbClcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDg5OlxcdFxcdGwgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDkwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDozNC4wNTM1MTgxNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc0MjI2ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhGUk0gTkFUIEtlZXBhbGl2ZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBrZWVwYWxpdmUgaW50ZXJ2YWwgZm9yIE5BVCBpcyBjb25maWd1cmVkIHRocm91Z2ggdGhlIGBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMYCBhdHRyaWJ1dGUgd2l0aGluIGVpdGhlciBgWEZSTV9NU0dfTkVXU0FgIG9yIGBYRlJNX01TR19VUERTQWAgbWVzc2FnZXMuIFRoaXMgaXMgY2xlYXJseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIOKAkyB0aGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbkxldCdzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyBwdXJwb3NlczpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlLioqIEFic29sdXRlbHkuIFRoaXMgaXMgYSBjb3JlIFhGUk0gc3Vic3lzdGVtIGNoYW5nZS5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZSBYRlJNIE5BVCBrZWVwYWxpdmUgd29ya3F1ZXVlIGhhbmRsZXMgc3RhdGUgb2JqZWN0cy4gSXTigJlzIG1vdmluZyBmcm9tIGR5bmFtaWMgYWxsb2NhdGlvbiB0byBhIGZpeGVkLXNpemUgYmF0Y2ggYXJyYXksIHdoaWNoIGltcGFjdHMgaXRlcmF0aW9uIGFuZCBwcm9jZXNzaW5nLiBUaGF0J3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIHNoaWZ0IGFuZCBvcGVucyB0aGUgZG9vciBmb3IgcG90ZW50aWFsIGlzc3Vlcy5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBJIHNob3VsZCBiZSB0YXJnZXRpbmcgYHhmcm1fdXNlcl9yY3ZfbXNnYCwgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCwgYW5kIGB4ZnJtX3N0YXRlX3dhbGtgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2UuXG4qICAgKipFbmFibGVDb25maWdzOioqIEkgc2hvdWxkIGJlIHRlc3Rpbmcgd2l0aCBgSU5FVGAgYW5kIGBYRlJNX1VTRVJgIGVuYWJsZWQuXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgYHhmcm1fdXNlcl9yY3ZfbXNnYCBpcyBzdGF0aWMuIFRoYXQncyBhIHByb2JsZW0sIGdpdmVuIHRoZSBndWlkZWxpbmUgdG8gcHJlZmVyIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBiZSBsb29raW5nIGZvciBhIGJldHRlciBjYW5kaWRhdGUuIFRoZSBwcm9tcHQgc3VnZ2VzdHMgKm5vdCogdXNpbmcgc3RhdGljLCBpbmxpbmVkIGhlbHBlciBmdW5jdGlvbnMuIExldCBtZSBjaGVja+KApiBJcyBgeGZybV9uZXRsaW5rX3JjdmAgYWxzbyBzdGF0aWM/IE5vLCB3YWl0ISBPciBtYXliZSBgeGZybV91c2VyX2luaXRgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYW5kIG1ha2Ugc3VyZSBJJ20gdGFyZ2V0aW5nIHRoZSByaWdodCBlbnRyeSBwb2ludCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxNDMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTQ6MzkuNjI3NzQ4MDAyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI5MTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX25ldGxpbmtfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTM4Mzc9c3RhdGljIGludCB4ZnJtX3VzZXJfcmN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MjMtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzkyNDpzdGF0aWMgdm9pZCB4ZnJtX25ldGxpbmtfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzkyNS17XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00NjEyPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtX3VzZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYxNi1cXHRcXHQuZ3JvdXBzXFx0PSBYRlJNTkxHUlBfTUFYLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2MTc6XFx0XFx0LmlucHV0XFx0PSB4ZnJtX25ldGxpbmtfcmN2LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MTgtXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTQ6MzkuNjc1MDQxNzU2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzOTUwODMyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOlxuXG4qKlRoaW5raW5nIFRocm91Z2ggWEZSTSBGdW5jdGlvbiBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgWEZSTSBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlaXIgc2NvcGUuIGB4ZnJtX25ldGxpbmtfcmN2YC4uLiB0aGF0IG9uZSdzIHN0YXRpYy4gUmlnaHQsIHRoYXQgbWVhbnMgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIE5vIGJpZyBkZWFsLCBwcmV0dHkgc3RhbmRhcmQgZm9yIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuXG5cbk5vdywgd2hhdCBhYm91dCBgeGZybV9zdGF0ZV93YWxrYD8gQWgsIHllcywgSSByZW1lbWJlciB0aGF0IG9uZS4gSXQgKmlzKiBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMgb3IgZXZlbiB1c2VyIHNwYWNlLCBwcm9iYWJseSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggdGhlIHN0YXRlcy4gVGhhdCBtYWtlcyBzZW5zZS5cblxuTmV4dCBvbiB0aGUgbGlzdCwgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gSG1tLCBub3Qgc3RhdGljIGVpdGhlci4gVGhhdCBzdWdnZXN0cyBpdCdzIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBleHRlcm5hbGx5LCBwZXJoYXBzIGJ5IHNvbWUgb3RoZXIgcGFydCBvZiB0aGUgTkFUIGtlZXBhbGl2ZSBtZWNoYW5pc20uIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBjYWxscyB0byB0aGF0IGFuZCBzZWUgd2hhdCdzIHVzaW5nIGl0LlxuXG5BbmQgZmluYWxseSwgYHhmcm1fc3RhdGVfYWRkYC4gWWVhaCwgdGhhdCdzIGRlZmluaXRlbHkgbm90IHN0YXRpYy4gSXQgaXMgcHJvYmFibHkgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB0byBhZGQgbmV3IHhmcm0gc3RhdGVzLiBUaGlzIGlzIGFuIGltcG9ydGFudCBmdW5jdGlvbi5cblxuU28sIGluIGVzc2VuY2UsIEknbSBqdXN0IHF1aWNrbHkgYXNzZXNzaW5nIHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW50ZXJuYWwgYW5kIHdoaWNoIG9uZXMgYXJlIGludGVuZGVkIGZvciBicm9hZGVyIHVzZS4gVGhpcyBnaXZlcyBtZSBhIHF1aWNrIHNlbnNlIG9mIHRoZSBtb2R1bGUncyBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJdCBpbmZvcm1zIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgbGllcywgYW5kIHdoZXJlIHRoZSBleHRlbnNpb24gcG9pbnRzIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwODYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDo0NS4wNzAxMjcxMjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzY5NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc3RhdGVfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmM9MTM1Nj14ZnJtX3N0YXRlX2ZpbmQoY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTM5My1cXHRcXHQgICAgISh4LVxcdTAwM2Vwcm9wcy5mbGFncyBcXHUwMDI2IFhGUk1fU1RBVEVfV0lMRFJFQ1YpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEzOTQ6XFx0XFx0ICAgIHhmcm1fc3RhdGVfYWRkcl9jaGVjayh4LCBkYWRkciwgc2FkZHIsIGVuY2FwX2ZhbWlseSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTM5NS1cXHRcXHQgICAgdG1wbC1cXHUwMDNlbW9kZSA9PSB4LVxcdTAwM2Vwcm9wcy5tb2RlIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQ1MS1cXHRcXHQgICAgISh4LVxcdTAwM2Vwcm9wcy5mbGFncyBcXHUwMDI2IFhGUk1fU1RBVEVfV0lMRFJFQ1YpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE0NTI6XFx0XFx0ICAgIHhmcm1fc3RhdGVfYWRkcl9jaGVjayh4LCBkYWRkciwgc2FkZHIsIGVuY2FwX2ZhbWlseSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQ1My1cXHRcXHQgICAgdG1wbC1cXHUwMDNlbW9kZSA9PSB4LVxcdTAwM2Vwcm9wcy5tb2RlIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTY1ND14ZnJtX3N0YXRlb25seV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssIHUzMiBpZl9pZCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjY4LVxcdFxcdCAgICAhKHgtXFx1MDAzZXByb3BzLmZsYWdzIFxcdTAwMjYgWEZSTV9TVEFURV9XSUxEUkVDVikgXFx1MDAyNlxcdTAwMjZcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTY2OTpcXHRcXHQgICAgeGZybV9zdGF0ZV9hZGRyX2NoZWNrKHgsIGRhZGRyLCBzYWRkciwgZmFtaWx5KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjcwLVxcdFxcdCAgICBtb2RlID09IHgtXFx1MDAzZXByb3BzLm1vZGUgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xODkzPXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX2ZpbmRfYWNxX2J5c2VxKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssIHUzMiBzZXEsIHUzMiBwY3B1X251bSk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE4OTQtXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE4OTU6aW50IHhmcm1fc3RhdGVfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xODk2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xOTQ4LX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTk0OTpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfYWRkKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTk1MC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0yMTc4PWludCB4ZnJtX3N0YXRlX21pZ3JhdGVfaW5zdGFsbChjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMTkwLVxcdH0gZWxzZSB7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjIxOTE6XFx0XFx0aWYgKHhmcm1fc3RhdGVfYWRkKHhjKSBcXHUwMDNjIDApIHtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjE5Mi1cXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGYWlsZWQgdG8gYWRkIG1pZ3JhdGVkIHN0YXRlXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjU0OjQ1LjExNzkwMDA1NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk2NDYwMDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZXNlIGZ1bmN0aW9uczpcblxuKipFeGFtaW5pbmcgdGhlIFhGUk0gU3RhdGUgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkgc2VlIGB4ZnJtX3N0YXRlX2FkZGAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQncyByZWFkaWx5IGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgdXNlLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbi4gQWRkaW5nIGEgc2VjdXJpdHkgYXNzb2NpYXRpb24gc3RhdGUgdG8gdGhlIFhGUk0gc3Vic3lzdGVtIGlzIGEgY29yZSBvcGVyYXRpb24uIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBUaGVuIEkgbm90aWNlIGB4ZnJtX3N0YXRlX3VwZGF0ZWAgaXMgYWxzbyBleHBvcnRlZC4gSW50ZXJlc3RpbmcuIFRoaXMgY29uZmlybXMgdGhhdCB0aGlzIHN1YnN5c3RlbSBhbGxvd3Mgc3RhdGUgbW9kaWZpY2F0aW9uIGFmdGVyIGNyZWF0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgZmxleGlibGUsIGR5bmFtaWMgZGVzaWduLiBJdCBhbHNvIGltcGxpZXMgdGhlIGV4aXN0ZW5jZSBvZiBsb2dpYyB0byB2YWxpZGF0ZSBhbmQgYXBwbHkgc3RhdGUgY2hhbmdlcywgd2hpY2ggSSdkIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBJIHdlcmUgdXNpbmcgaXQuIE9rYXksIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBkaXJlY3Rpb24gZm9yIGFuYWx5c2lzLiBJJ2xsIGZvY3VzIG9uIHRoZXNlIHR3byBmdW5jdGlvbnMgYW5kIHdvcmsgbXkgd2F5IHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLCBhbmQgbG9vayB0byBzZWUgdGhlIHN0cnVjdHVyZXMgdGhhdCB0aGV5IHdvcmsgd2l0aCwgYW5kIGhvdyB0aGVpciBpbnRlcmFjdGlvbnMuIFRoaXMgc2hvd3MgdGhhdCB0aGUgc3RhdGUgbWFuYWdlbWVudCBjYW4gaGFuZGxlIGJvdGggaW5pdGlhbCBzZXR1cCBhbmQgcnVudGltZSBtb2RpZmljYXRpb25zLCB3aGljaCBpcyBnb29kLiBUaW1lIHRvIGRpdmUgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI3NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjU0OjQ4LjMxNDM2MzY2MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyMDMwNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9zdGF0ZV91cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0yMjIzPUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9taWdyYXRlKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMjI1LVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyMjI2OmludCB4ZnJtX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjIyNy17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjMyNi19XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjIzMjc6RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3VwZGF0ZSk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTIzMjgtXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MjM1Nj1FWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfY2hlY2tfZXhwaXJlKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjM1Ny1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjM1ODp2b2lkIHhmcm1fc3RhdGVfdXBkYXRlX3N0YXRzKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjM1OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjU0OjQ4LjM2MDU2OTg0N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTU3NzI5MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBYRlJNIE5BVCBLZWVwYWxpdmUgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGluIHRoaXMgWEZSTSBOQVQga2VlcGFsaXZlIGNoYW5nZTogYHhmcm1fc3RhdGVfYWRkYCwgYHhmcm1fc3RhdGVfdXBkYXRlYCwgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCwgYW5kIGB4ZnJtX3N0YXRlX3dhbGtgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LlxuXG5NeSByZWFzb25pbmc/IFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IG1vZGlmaWVzIGhvdyB0aGUgWEZSTSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgaXQncyBzd2FwcGluZyBvdXQgZHluYW1pYyBhbGxvY2F0aW9uIG9mIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZWAgZm9yIGEgc3RhY2stYmFzZWQsIGZpeGVkLXNpemUgYXJyYXkuIFRoaXMgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHN0YXRlcyBhcmUgaXRlcmF0ZWQgdGhyb3VnaCBhbmQgbWFuYWdlZC4gSXQncyBhIGNvcmUgY2hhbmdlIHdpdGhpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHBlcmZvcm1hbmNlIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhpcyBjaGFuZ2UgaXMgdHJpZ2dlcmVkIHRocm91Z2ggbmV0bGluayBjb25maWd1cmF0aW9uIG9mIElQc2VjIFNlY3VyaXR5IEFzc29jaWF0aW9ucyAoU0FzKSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbDsgc28sIHVzZXIgc3BhY2UgY2FuIHRyaWdnZXIgdGhpcyBiZWhhdmlvci5cblxuTm93LCBhIHF1aWNrIGNoZWNrIHRvIGVuc3VyZSBidWlsZCBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBqdXN0IGBYRlJNX1VTRVJgIGlzIHN1ZmZpY2llbnQgdG8gY29tcGlsZSBgeGZybV9uYXRfa2VlcGFsaXZlLmNgLiBJIGV4cGVjdCBpdCB0byBiZSwgYmVjYXVzZSBgWEZSTWAgaXMgc2VsZWN0ZWQgYnkgYFhGUk1fVVNFUmAsIGFuZCB0aGUgY29tcGlsYXRpb24gc2hvdWxkIHB1bGwgaW4gZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoZSBYRlJNIGZyYW1ld29yay4gQW5kLCB5ZXAsIHRoYXQncyB0aGUgY2FzZS5cblxuT2theSwgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGtleSBhc3BlY3RzIGFuZCBhbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4MzksIk91dHB1dFRva2VucyI6MTYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjU0OjU2LjMxODMwMTEzNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTIxNzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX3N0YXRlX2FkZFwiLFxuICAgIFwieGZybV9zdGF0ZV91cGRhdGVcIixcbiAgICBcInhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX3dhbGtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgWEZSTSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSB0byB1c2UgYSBmaXhlZC1zaXplIGJhdGNoIGFycmF5IGluc3RlYWQgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGluZyBzdGF0ZSBvYmplY3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgWEZSTSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBzdGF0ZXMgYXJlIGl0ZXJhdGVkIGFuZCBwcm9jZXNzZWQgZHVyaW5nIE5BVCBrZWVwYWxpdmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBjb25maWd1cmluZyBJUHNlYyBTZWN1cml0eSBBc3NvY2lhdGlvbnMgKFNBcykgd2l0aCBhIE5BVCBrZWVwYWxpdmUgaW50ZXJ2YWwgdmlhIG5ldGxpbmsuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9zdGF0ZV9hZGRcIixcbiAgICBcInhmcm1fc3RhdGVfdXBkYXRlXCIsXG4gICAgXCJ4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZFwiLFxuICAgIFwieGZybV9zdGF0ZV93YWxrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFhGUk0gTkFUIGtlZXBhbGl2ZSB3b3JrcXVldWUgdG8gdXNlIGEgZml4ZWQtc2l6ZSBiYXRjaCBhcnJheSBpbnN0ZWFkIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgc3RhdGUgb2JqZWN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFhGUk0gc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgc3RhdGVzIGFyZSBpdGVyYXRlZCBhbmQgcHJvY2Vzc2VkIGR1cmluZyBOQVQga2VlcGFsaXZlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgSVBzZWMgU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQXMpIHdpdGggYSBOQVQga2VlcGFsaXZlIGludGVydmFsIHZpYSBuZXRsaW5rLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDo1Ni4zOTEyMjkzNjNaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDYxNTI1NTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTQ6NTYuMzkxNjUyOTEzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNDYxMDk4MzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBsaW5rZWQgbGlzdCB3aXRoIGEgc3RhY2stYWxsb2NhdGVkIGJhdGNoIGFycmF5IChgYmF0Y2hgIGluc2lkZSBgc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHhgKSB0byBjb2xsZWN0IGB4ZnJtX3N0YXRlYCBwb2ludGVycyBkdXJpbmcgYSBzdGF0ZSB3YWxrLiBUaGUgYGJhdGNoYCBhcnJheSBhbmQgYG5yYCBjb3VudGVyIGFyZSB1c2VkIHN0cmljdGx5IGxvY2FsbHkgd2l0aGluIGBuYXRfa2VlcGFsaXZlX3dvcmtgIGFuZCBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgLiBUaGUgY291bnRlciBgY3R4Lm5yYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgYmVmb3JlIHRoZSB3YWxrLCBhbmQgdGhlIGNvZGUgb25seSByZWFkcyB1cCB0byBgY3R4Lm5yYCBlbGVtZW50cyBmcm9tIHRoZSBgYmF0Y2hgIGFycmF5LCBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyBhY2Nlc3NlZC4gRnVydGhlcm1vcmUsIG5vbmUgb2YgdGhlc2Ugc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbWVhbmluZyB0aGVyZSBpcyBubyByaXNrIG9mIGFuIGluZm8tbGVhay4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2Ugd291bGQgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjQ4NTgyMWE0ODc5OWRjOWZmOTdkZDBmZmQ0YjQ4MjJkNDFlNTc2NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDE5OjUzOjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xuaW5kZXggODY3OWM2OGMxMGExNi4uNWNkNmQ0MzE2NGRiYyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG4rKysgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xuQEAgLTE1NSwzMiArMTU1LDMwIEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXG4gXHR9XG4gfVxuIFxuK2VudW0ge1xuK1x0TkFUX0tFRVBBTElWRV9CQVRDSF9TSVpFID0gMTYsXG4rXHROQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEwgPSAxLFxuK307XG4rXG4gc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xuLVx0c3RydWN0IGxpc3RfaGVhZCBzdGF0ZXM7XG4rXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqYmF0Y2hbTkFUX0tFRVBBTElWRV9CQVRDSF9TSVpFXTtcbitcdHVuc2lnbmVkIGludCBucjtcbiBcdHRpbWU2NF90IG5leHRfcnVuO1xuIFx0dGltZTY0X3Qgbm93O1xuIH07XG4gXG4tc3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUge1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4tfTtcbi1cbiBzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgY291bnQsIHZvaWQgKnB0cilcbiB7XG4gXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCAqY3R4ID0gcHRyO1xuLVx0c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlO1xuIFxuIFx0aWYgKCFSRUFEX09OQ0UoeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRzdGF0ZSA9IGttYWxsb2Nfb2JqKCpzdGF0ZSwgR0ZQX0FUT01JQyk7XG4tXHRpZiAoIXN0YXRlKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdGlmIChjdHgtXHUwMDNlbnIgPT0gQVJSQVlfU0laRShjdHgtXHUwMDNlYmF0Y2gpKVxuK1x0XHRyZXR1cm4gTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMO1xuIFxuIFx0eGZybV9zdGF0ZV9ob2xkKHgpO1xuLVx0c3RhdGUtXHUwMDNleCA9IHg7XG4tXHRsaXN0X2FkZF90YWlsKFx1MDAyNnN0YXRlLVx1MDAzZWxpc3QsIFx1MDAyNmN0eC1cdTAwM2VzdGF0ZXMpO1xuK1x0Y3R4LVx1MDAzZWJhdGNoW2N0eC1cdTAwM2VucisrXSA9IHg7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjI2LDI5ICsyMjQsMjcgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcbiBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbi1cdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZSwgKnRtcDtcbiBcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgd2FsaztcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbi1cdGludCBlcnI7XG4rXHRpbnQgZXJyLCBpO1xuIFxuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LnN0YXRlcyk7XG4gXHRjdHgubmV4dF9ydW4gPSAwO1xuIFx0Y3R4Lm5vdyA9IGt0aW1lX2dldF9yZWFsX3NlY29uZHMoKTtcbiBcbiBcdG5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0LCB4ZnJtLm5hdF9rZWVwYWxpdmVfd29yay53b3JrKTtcbiBcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFx1MDAyNndhbGssIElQUFJPVE9fRVNQLCBOVUxMKTtcbi1cdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCBcdTAwMjZjdHgpO1xuK1x0ZG8ge1xuK1x0XHRjdHgubnIgPSAwO1xuK1x0XHRlcnIgPSB4ZnJtX3N0YXRlX3dhbGsobmV0LCBcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXHUwMDI2Y3R4KTtcbitcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjdHgubnI7IGkrKykge1xuK1x0XHRcdG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoY3R4LmJhdGNoW2ldLCBcdTAwMjZjdHgpO1xuK1x0XHRcdHhmcm1fc3RhdGVfcHV0KGN0eC5iYXRjaFtpXSk7XG4rXHRcdH1cbitcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHR9IHdoaWxlIChlcnIgPT0gTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMKTtcbiBcdHhmcm1fc3RhdGVfd2Fsa19kb25lKFx1MDAyNndhbGssIG5ldCk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhdGUsIHRtcCwgXHUwMDI2Y3R4LnN0YXRlcywgbGlzdCkge1xuLVx0XHRuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0YXRlLVx1MDAzZXgsIFx1MDAyNmN0eCk7XG4tXHRcdHhmcm1fc3RhdGVfcHV0KHN0YXRlLVx1MDAzZXgpO1xuLVx0XHRrZnJlZShzdGF0ZSk7XG4tXHR9XG4tXHRpZiAoZXJyID09IC1FTk9NRU0pIHtcbi1cdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgMCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbiBcdGlmIChjdHgubmV4dF9ydW4pXG4gXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZuZXQtXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssXG4gXHRcdFx0XHQgICAgICAoY3R4Lm5leHRfcnVuIC0gY3R4Lm5vdykgKiBIWik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDo1Ni4zOTE2NTM3MjRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0NjEwNzY5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIE5BVCBLZWVwYWxpdmUgQmF0Y2hpbmcgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbiBgbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNgIGlzIGNoYW5naW5nIGhvdyBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgIGhhbmRsZXMgYHhmcm1fc3RhdGVgIHBvaW50ZXJzLiBJdCB1c2VkIHRvIGJlIGEgbGlua2VkIGxpc3Qgb2YgYHN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlYCwgYWxsb2NhdGluZyBvbmUgZm9yIGVhY2ggYHhmcm1fc3RhdGVgLiBOb3csIHdlJ3JlIHVzaW5nIGEgZml4ZWQtc2l6ZSwgc3RhY2stYWxsb2NhdGVkIGFycmF5IGNhbGxlZCBgYmF0Y2hgIHdpdGhpbiBhIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eGAuICBUaGUgc2l6ZSBpcyAxNi4gSWYgdGhlIGJhdGNoIGlzIGZ1bGwsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTExgLCB3aGljaCBpcyAxLiBUaGUgbG9vcCBpbiBgbmF0X2tlZXBhbGl2ZV93b3JrYCB3aWxsIHByb2Nlc3MgdGhhdCBiYXRjaCBhbmQgdGhlbiBjb250aW51ZSB0aGUgd2FsayBpZiB3ZSBoaXQgdGhhdCBgTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMYCBlcnJvci5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBzZWUuLi4gdGhlIGBiYXRjaGAgYXJyYXkgKmlzKiBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGluc2lkZSBgbmF0X2tlZXBhbGl2ZV93b3JrYDogYHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspIHsgc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4OyAuLi4gfWAuICBUaGUgYGN0eGAgaXRzZWxmIGlzbid0ICpmdWxseSogaW5pdGlhbGl6ZWQuICBJIHNlZSBgY3R4Lm5leHRfcnVuYCBhbmQgYGN0eC5ub3dgIGFyZSBpbml0aWFsaXplZCwgYW5kIGBjdHgubnJgIGdldHMgc2V0IHRvIDAgaW5zaWRlIHRoZSBgZG8geyAuLi4gfSB3aGlsZWAgbG9vcC4gIFRoZSBgYmF0Y2hgIGFycmF5IGl0c2VsZiBpcyAqbm90KiBleHBsaWNpdGx5IGluaXRpYWxpemVkLiAgQnV0LCAqd2hldyosIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgb25seSAqd3JpdGVzKiB0byB0aGUgYGJhdGNoYCDigJMgYGN0eC5iYXRjaFtjdHgubnIrK10gPSB4O2AuIFRoZSBsb29wIGxhdGVyIG9ubHkgKnJlYWRzKiBlbGVtZW50cyB0aGF0ICpoYXZlKiBiZWVuIHdyaXR0ZW4gdG8g4oCTICBgZm9yIChpID0gMDsgaSBcdTAwM2MgY3R4Lm5yOyBpKyspIHsgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShjdHguYmF0Y2hbaV0sIFx1MDAyNmN0eCk7IC4uLiB9YC4gIFNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpyZWFkcyogaW4gdGhlIGNyaXRpY2FsIHBhdGguIEdvb2QuIEFuZCB3ZSBhcmVuJ3QgY29weWluZyB0aGUgY29udGV4dCB0byB1c2Vyc3BhY2UsIHNvIG5vIGluZm8gbGVhayByaXNrLlxuXG5Pa2F5LCBsZXQncyBsb29rIGZvciBhIGRpZmZlcmVudCB0eXBlIG9mIGlzc3VlLCBsaWtlIGBjdHgubnJgIGJlaW5nIHVzZWQgYmVmb3JlIGluaXRpYWxpemVkLiBBaCwgbm8sIGBjdHgubnJgIGlzIHNldCB0byAwIHJpZ2h0IGJlZm9yZSBgeGZybV9zdGF0ZV93YWxrYCBpcyBjYWxsZWQsIHNvIGl0J3MgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IHRoZXJlLiAgR29vZC5cblxuQmFzaWNhbGx5LCB0aGlzIHBhdGNoIGlzIGp1c3QgdHJhZGluZyBkeW5hbWljIGFsbG9jYXRpb24gKGxpbmtlZCBsaXN0KSBmb3IgYSBzdGFjay1iYXNlZCBiYXRjaCBhcnJheSB0byBkb2RnZSBga21hbGxvY19vYmpgIGFuZCBgLUVOT01FTWAgaXNzdWVzLiAgU3RhbmRhcmQgb3B0aW1pemF0aW9uIHN0dWZmLlxuXG5UaGUgdHlwaWNhbCBidWdzIGhlcmUgYXJlIGdvaW5nIHRvIGJlIGxvZ2ljIGJ1Z3MsIG91dC1vZi1ib3VuZHMgYWNjZXNzIChidXQgd2UgaGF2ZSBhIGNoZWNrIGZvciB0aGF0IGBjdHgubnIgPT0gQVJSQVlfU0laRShjdHguYmF0Y2gpYCksIG9yIHVzZS1hZnRlci1mcmVlLiBUaGVzZSBraW5kcyBvZiB0aGluZ3Mgc2hvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgc28gdGhhdCdzIGdvb2QuIE5vIHVuaW5pdGlhbGl6ZWQgcmVhZC4gTm8gaW5mbyBsZWFrLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgcmUtdmVyaWZ5IHRoZSBpbnRlcmFjdGlvbiBpbiAgYHhmcm1fc3RhdGVfd2Fsa2AgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgd2hlcmUgd2Ugd3JpdGUgdG8gdGhlIGFycmF5OiBgaWYgKGN0eC1cdTAwM2VuciA9PSBBUlJBWV9TSVpFKGN0eC1cdTAwM2ViYXRjaCkpIHJldHVybiBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEw7ICB4ZnJtX3N0YXRlX2hvbGQoeCk7IGN0eC1cdTAwM2ViYXRjaFtjdHgtXHUwMDNlbnIrK10gPSB4OyByZXR1cm4gMDtgLiBZZXAsIHRoYXQncyBjbGVhbi4gYHhmcm1fc3RhdGVfaG9sZGAgZ2l2ZXMgdXMgc2FmZXR5LlxuXG5JIHRoaW5rIHdlJ3JlIGdvb2QuIE5vIG5lZWQgdG8gZmxhZyB0aGlzIGZvciBLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2MywiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NTowOC44NTI3MzM2NjZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGxpbmtlZCBsaXN0IHdpdGggYSBzdGFjay1hbGxvY2F0ZWQgYmF0Y2ggYXJyYXkgKGBiYXRjaGAgaW5zaWRlIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eGApIHRvIGNvbGxlY3QgYHhmcm1fc3RhdGVgIHBvaW50ZXJzIGR1cmluZyBhIHN0YXRlIHdhbGsuIFRoZSBgYmF0Y2hgIGFycmF5IGFuZCBgbnJgIGNvdW50ZXIgYXJlIHVzZWQgc3RyaWN0bHkgbG9jYWxseSB3aXRoaW4gYG5hdF9rZWVwYWxpdmVfd29ya2AgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAuIFRoZSBjb3VudGVyIGBjdHgubnJgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBiZWZvcmUgdGhlIHdhbGssIGFuZCB0aGUgY29kZSBvbmx5IHJlYWRzIHVwIHRvIGBjdHgubnJgIGVsZW1lbnRzIGZyb20gdGhlIGBiYXRjaGAgYXJyYXksIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIGFjY2Vzc2VkLiBGdXJ0aGVybW9yZSwgbm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBsaW5rZWQgbGlzdCB3aXRoIGEgc3RhY2stYWxsb2NhdGVkIGJhdGNoIGFycmF5IChgYmF0Y2hgIGluc2lkZSBgc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHhgKSB0byBjb2xsZWN0IGB4ZnJtX3N0YXRlYCBwb2ludGVycyBkdXJpbmcgYSBzdGF0ZSB3YWxrLiBUaGUgYGJhdGNoYCBhcnJheSBhbmQgYG5yYCBjb3VudGVyIGFyZSB1c2VkIHN0cmljdGx5IGxvY2FsbHkgd2l0aGluIGBuYXRfa2VlcGFsaXZlX3dvcmtgIGFuZCBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgLiBUaGUgY291bnRlciBgY3R4Lm5yYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgYmVmb3JlIHRoZSB3YWxrLCBhbmQgdGhlIGNvZGUgb25seSByZWFkcyB1cCB0byBgY3R4Lm5yYCBlbGVtZW50cyBmcm9tIHRoZSBgYmF0Y2hgIGFycmF5LCBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyBhY2Nlc3NlZC4gRnVydGhlcm1vcmUsIG5vbmUgb2YgdGhlc2Ugc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbWVhbmluZyB0aGVyZSBpcyBubyByaXNrIG9mIGFuIGluZm8tbGVhay4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2Ugd291bGQgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrkwq6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 19:11:34 +0000 UTC FinishedAt: 2026-08-17 19:55:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "XFRM_USER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "XFRM_USER" ], "series_id": "24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_state_add", "xfrm_state_update", "xfrm_nat_keepalive_state_updated", "xfrm_state_walk" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9zdGF0ZV9hZGQmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV91cGRhdGUmIzM0OywKICAgICYjMzQ7eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV93YWxrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbGlua2VkIGxpc3Qgd2l0aCBhIHN0YWNrLWFsbG9jYXRlZCBiYXRjaCBhcnJheSAoYGJhdGNoYCBpbnNpZGUgYHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4YCkgdG8gY29sbGVjdCBgeGZybV9zdGF0ZWAgcG9pbnRlcnMgZHVyaW5nIGEgc3RhdGUgd2Fsay4gVGhlIGBiYXRjaGAgYXJyYXkgYW5kIGBucmAgY291bnRlciBhcmUgdXNlZCBzdHJpY3RseSBsb2NhbGx5IHdpdGhpbiBgbmF0X2tlZXBhbGl2ZV93b3JrYCBhbmQgYG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0YC4gVGhlIGNvdW50ZXIgYGN0eC5ucmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGJlZm9yZSB0aGUgd2FsaywgYW5kIHRoZSBjb2RlIG9ubHkgcmVhZHMgdXAgdG8gYGN0eC5ucmAgZWxlbWVudHMgZnJvbSB0aGUgYGJhdGNoYCBhcnJheSwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgYWNjZXNzZWQuIEZ1cnRoZXJtb3JlLCBub25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG1lYW5pbmcgdGhlcmUgaXMgbm8gcmlzayBvZiBhbiBpbmZvLWxlYWsuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgWEZSTSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSB0byB1c2UgYSBmaXhlZC1zaXplIGJhdGNoIGFycmF5IGluc3RlYWQgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGluZyBzdGF0ZSBvYmplY3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgWEZSTSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBzdGF0ZXMgYXJlIGl0ZXJhdGVkIGFuZCBwcm9jZXNzZWQgZHVyaW5nIE5BVCBrZWVwYWxpdmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBjb25maWd1cmluZyBJUHNlYyBTZWN1cml0eSBBc3NvY2lhdGlvbnMgKFNBcykgd2l0aCBhIE5BVCBrZWVwYWxpdmUgaW50ZXJ2YWwgdmlhIG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNDg1ODIxYTQ4Nzk5ZGM5ZmY5N2RkMGZmZDRiNDgyMmQ0MWU1NzY1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTk6NTM6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xuaW5kZXggODY3OWM2OGMxMGExNi4uNWNkNmQ0MzE2NGRiYyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xuQEAgLTE1NSwzMiAmIzQzOzE1NSwzMCBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuIFx0fVxuIH1cbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0TkFUX0tFRVBBTElWRV9CQVRDSF9TSVpFID0gMTYsXG4mIzQzO1x0TkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMID0gMSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xuLVx0c3RydWN0IGxpc3RfaGVhZCBzdGF0ZXM7XG4mIzQzO1x0c3RydWN0IHhmcm1fc3RhdGUgKmJhdGNoW05BVF9LRUVQQUxJVkVfQkFUQ0hfU0laRV07XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yO1xuIFx0dGltZTY0X3QgbmV4dF9ydW47XG4gXHR0aW1lNjRfdCBub3c7XG4gfTtcbiBcbi1zdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4tXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbi19O1xuLVxuIHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuIHtcbiBcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XG4tXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGU7XG4gXG4gXHRpZiAoIVJFQURfT05DRSh4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHN0YXRlID0ga21hbGxvY19vYmooKnN0YXRlLCBHRlBfQVRPTUlDKTtcbi1cdGlmICghc3RhdGUpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGlmIChjdHgtXHUwMDNlbnIgPT0gQVJSQVlfU0laRShjdHgtXHUwMDNlYmF0Y2gpKVxuJiM0MztcdFx0cmV0dXJuIE5BVF9LRUVQQUxJVkVfQkFUQ0hfRlVMTDtcbiBcbiBcdHhmcm1fc3RhdGVfaG9sZCh4KTtcbi1cdHN0YXRlLVx1MDAzZXggPSB4O1xuLVx0bGlzdF9hZGRfdGFpbChcdTAwMjZzdGF0ZS1cdTAwM2VsaXN0LCBcdTAwMjZjdHgtXHUwMDNlc3RhdGVzKTtcbiYjNDM7XHRjdHgtXHUwMDNlYmF0Y2hbY3R4LVx1MDAzZW5yJiM0MzsmIzQzO10gPSB4O1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTIyNiwyOSAmIzQzOzIyNCwyNyBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFxuIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlLCAqdG1wO1xuIFx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4O1xuIFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuLVx0aW50IGVycjtcbiYjNDM7XHRpbnQgZXJyLCBpO1xuIFxuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LnN0YXRlcyk7XG4gXHRjdHgubmV4dF9ydW4gPSAwO1xuIFx0Y3R4Lm5vdyA9IGt0aW1lX2dldF9yZWFsX3NlY29uZHMoKTtcbiBcbiBcdG5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0LCB4ZnJtLm5hdF9rZWVwYWxpdmVfd29yay53b3JrKTtcbiBcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFx1MDAyNndhbGssIElQUFJPVE9fRVNQLCBOVUxMKTtcbi1cdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCBcdTAwMjZjdHgpO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGN0eC5uciA9IDA7XG4mIzQzO1x0XHRlcnIgPSB4ZnJtX3N0YXRlX3dhbGsobmV0LCBcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXHUwMDI2Y3R4KTtcbiYjNDM7XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGN0eC5ucjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0bmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShjdHguYmF0Y2hbaV0sIFx1MDAyNmN0eCk7XG4mIzQzO1x0XHRcdHhmcm1fc3RhdGVfcHV0KGN0eC5iYXRjaFtpXSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7XHR9IHdoaWxlIChlcnIgPT0gTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMKTtcbiBcdHhmcm1fc3RhdGVfd2Fsa19kb25lKFx1MDAyNndhbGssIG5ldCk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhdGUsIHRtcCwgXHUwMDI2Y3R4LnN0YXRlcywgbGlzdCkge1xuLVx0XHRuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0YXRlLVx1MDAzZXgsIFx1MDAyNmN0eCk7XG4tXHRcdHhmcm1fc3RhdGVfcHV0KHN0YXRlLVx1MDAzZXgpO1xuLVx0XHRrZnJlZShzdGF0ZSk7XG4tXHR9XG4tXHRpZiAoZXJyID09IC1FTk9NRU0pIHtcbi1cdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgMCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbiBcdGlmIChjdHgubmV4dF9ydW4pXG4gXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZuZXQtXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssXG4gXHRcdFx0XHQgICAgICAoY3R4Lm5leHRfcnVuIC0gY3R4Lm5vdykgKiBIWik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9zdGF0ZV9hZGQmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV91cGRhdGUmIzM0OywKICAgICYjMzQ7eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV93YWxrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBYRlJNIE5BVCBrZWVwYWxpdmUgd29ya3F1ZXVlIHRvIHVzZSBhIGZpeGVkLXNpemUgYmF0Y2ggYXJyYXkgaW5zdGVhZCBvZiBkeW5hbWljYWxseSBhbGxvY2F0aW5nIHN0YXRlIG9iamVjdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBYRlJNIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IHN0YXRlcyBhcmUgaXRlcmF0ZWQgYW5kIHByb2Nlc3NlZCBkdXJpbmcgTkFUIGtlZXBhbGl2ZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNvbmZpZ3VyaW5nIElQc2VjIFNlY3VyaXR5IEFzc29jaWF0aW9ucyAoU0FzKSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbCB2aWEgbmV0bGluay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0ODU4MjFhNDg3OTlkYzlmZjk3ZGQwZmZkNGI0ODIyZDQxZTU3NjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxOTo1MzoxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jIGIvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMKaW5kZXggODY3OWM2OGMxMGExNi4uNWNkNmQ0MzE2NGRiYyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMKQEAgLTE1NSwzMiAmIzQzOzE1NSwzMCBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKQogCX0KIH0KIAomIzQzO2VudW0gewomIzQzOwlOQVRfS0VFUEFMSVZFX0JBVENIX1NJWkUgPSAxNiwKJiM0MzsJTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMID0gMSwKJiM0Mzt9OwomIzQzOwogc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggewotCXN0cnVjdCBsaXN0X2hlYWQgc3RhdGVzOwomIzQzOwlzdHJ1Y3QgeGZybV9zdGF0ZSAqYmF0Y2hbTkFUX0tFRVBBTElWRV9CQVRDSF9TSVpFXTsKJiM0MzsJdW5zaWduZWQgaW50IG5yOwogCXRpbWU2NF90IG5leHRfcnVuOwogCXRpbWU2NF90IG5vdzsKIH07CiAKLXN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IHhmcm1fc3RhdGUgKng7Ci19OwotCiBzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgY291bnQsIHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCAqY3R4ID0gcHRyOwotCXN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZTsKIAogCWlmICghUkVBRF9PTkNFKHgtJmd0O25hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpKQogCQlyZXR1cm4gMDsKIAotCXN0YXRlID0ga21hbGxvY19vYmooKnN0YXRlLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXN0YXRlKQotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKGN0eC0mZ3Q7bnIgPT0gQVJSQVlfU0laRShjdHgtJmd0O2JhdGNoKSkKJiM0MzsJCXJldHVybiBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEw7CiAKIAl4ZnJtX3N0YXRlX2hvbGQoeCk7Ci0Jc3RhdGUtJmd0O3ggPSB4OwotCWxpc3RfYWRkX3RhaWwoJmFtcDtzdGF0ZS0mZ3Q7bGlzdCwgJmFtcDtjdHgtJmd0O3N0YXRlcyk7CiYjNDM7CWN0eC0mZ3Q7YmF0Y2hbY3R4LSZndDtuciYjNDM7JiM0MztdID0geDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI2LDI5ICYjNDM7MjI0LDI3IEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsCiAKIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlLCAqdG1wOwogCXN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDsKIAlzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrIHdhbGs7CiAJc3RydWN0IG5ldCAqbmV0OwotCWludCBlcnI7CiYjNDM7CWludCBlcnIsIGk7CiAKLQlJTklUX0xJU1RfSEVBRCgmYW1wO2N0eC5zdGF0ZXMpOwogCWN0eC5uZXh0X3J1biA9IDA7CiAJY3R4Lm5vdyA9IGt0aW1lX2dldF9yZWFsX3NlY29uZHMoKTsKIAogCW5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0LCB4ZnJtLm5hdF9rZWVwYWxpdmVfd29yay53b3JrKTsKIAl4ZnJtX3N0YXRlX3dhbGtfaW5pdCgmYW1wO3dhbGssIElQUFJPVE9fRVNQLCBOVUxMKTsKLQllcnIgPSB4ZnJtX3N0YXRlX3dhbGsobmV0LCAmYW1wO3dhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCAmYW1wO2N0eCk7CiYjNDM7CWRvIHsKJiM0MzsJCWN0eC5uciA9IDA7CiYjNDM7CQllcnIgPSB4ZnJtX3N0YXRlX3dhbGsobmV0LCAmYW1wO3dhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCAmYW1wO2N0eCk7CiYjNDM7CQlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgY3R4Lm5yOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCW5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoY3R4LmJhdGNoW2ldLCAmYW1wO2N0eCk7CiYjNDM7CQkJeGZybV9zdGF0ZV9wdXQoY3R4LmJhdGNoW2ldKTsKJiM0MzsJCX0KJiM0MzsJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwl9IHdoaWxlIChlcnIgPT0gTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMKTsKIAl4ZnJtX3N0YXRlX3dhbGtfZG9uZSgmYW1wO3dhbGssIG5ldCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YXRlLCB0bXAsICZhbXA7Y3R4LnN0YXRlcywgbGlzdCkgewotCQluYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0YXRlLSZndDt4LCAmYW1wO2N0eCk7Ci0JCXhmcm1fc3RhdGVfcHV0KHN0YXRlLSZndDt4KTsKLQkJa2ZyZWUoc3RhdGUpOwotCX0KLQlpZiAoZXJyID09IC1FTk9NRU0pIHsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bmV0LSZndDt4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgMCk7Ci0JCXJldHVybjsKLQl9CiAJaWYgKGN0eC5uZXh0X3J1bikKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bmV0LSZndDt4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywKIAkJCQkgICAgICAoY3R4Lm5leHRfcnVuIC0gY3R4Lm5vdykgKiBIWik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYRlJNIE5BVCBLZWVwYWxpdmUgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNgLCBhbmQgaXQmIzM5O3MgYSBwcmV0dHkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uLiBJbnN0ZWFkIG9mIHRoZSBkeW5hbWljIGFsbG9jYXRpb24gb2YgYG5hdF9rZWVwYWxpdmVfc3RhdGVgIHN0cnVjdHVyZXMgYW5kIGxpbmtlZCBsaXN0IG1hbmFnZW1lbnQsIHRoZXkmIzM5O3ZlIGdvbmUgd2l0aCBhIGZpeGVkLXNpemUgYmF0Y2ggYXBwcm9hY2ggdXNpbmcgYSBgYmF0Y2hbTkFUX0tFRVBBTElWRV9CQVRDSF9TSVpFXWAgYXJyYXksIHdoaWNoIGlzIHNldCB0byAxNiBlbGVtZW50cy4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIHNoaWZ0LiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpZiB0aGUgYmF0Y2ggZmlsbHMgdXAgZHVyaW5nIGNvbGxlY3Rpb24sIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgcmV0dXJucyBgTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMYC4gVGhlbiwgYG5hdF9rZWVwYWxpdmVfd29ya2AgaGFuZGxlcyBhIGxvb3AgdG8gcHJvY2VzcyB0aGF0IGJhdGNoIGFuZCBjb250aW51ZSBpdGVyYXRpbmcsIHdoaWNoIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIHRoZXNlIHNvcnRzIG9mIGJhdGNoZWQgb3BlcmF0aW9ucy4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBJdCYjMzk7cyBhIGNsZWFyIGVmZmljaWVuY3kgaW1wcm92ZW1lbnQgaW4gdGhlIFhGUk0gc3Vic3lzdGVtLCB3aGljaCwgb2YgY291cnNlLCBpcyBwYXJ0IG9mIElQc2VjLiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpbiBteSBtaW5kIGlzLCBob3cgcmVhY2hhYmxlIGlzIHRoaXMgY29kZT8gV2hhdCBhcmUgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzPyBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBxdWljayBncmVwIGZvciBgeGZybV9uYXRfa2VlcGFsaXZlLmNgIHdpdGhpbiB0aGUgYG5ldC94ZnJtL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb250ZXh0LiBUaGF0IHNob3VsZCBhdCBsZWFzdCBnaXZlIG1lIGEgc3RhcnRpbmcgcG9pbnQgZm9yIGRldGVybWluaW5nIGlmIHRoaXMgY29kZSBpcyBldmVuIGNvbXBpbGVkIGludG8gYSB0eXBpY2FsIGNvbmZpZ3VyYXRpb24uIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIEtjb25maWcgb3B0aW9ucyB0byBzZWUgd2hhdCB0cmlnZ2VycyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgTkFUIGtlZXBhbGl2ZSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fbmF0X2tlZXBhbGl2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZnJtLmg9MjM2NT1zdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl94ZnJtX3N0YXRlX2JwZih2b2lkKVxuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaC0yMzcwLVxuaW5jbHVkZS9uZXQveGZybS5oOjIzNzE6aW50IHhmcm1fbmF0X2tlZXBhbGl2ZV9pbml0KHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3Mjp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9maW5pKHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3MzppbnQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCk7XG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3NDppbnQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9maW5pKHN0cnVjdCBuZXQgKm5ldCk7XG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3NTp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMzc2LVxuLS1cbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jPTI4MD1pbnQgX19pbml0IHhmcm02X2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0yOTgtXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYzoyOTk6XHRyZXQgPSB4ZnJtX25hdF9rZWVwYWxpdmVfaW5pdChBRl9JTkVUNik7XG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0zMDAtXHRpZiAocmV0KVxuLS1cbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jPTMxNT12b2lkIHhmcm02X2Zpbmkodm9pZClcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTMxNi17XG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYzozMTc6XHR4ZnJtX25hdF9rZWVwYWxpdmVfZmluaShBRl9JTkVUNik7XG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0zMTgtXHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2eGZybTZfbmV0X29wcyk7XG4tLVxubmV0L3hmcm0vTWFrZWZpbGU9MTQ9b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXG4tLVxubmV0L3hmcm0vTWFrZWZpbGUtMTYtXHRcdCAgICAgIHhmcm1fc3lzY3RsLm8geGZybV9yZXBsYXkubyB4ZnJtX2RldmljZS5vIFxcXG5uZXQveGZybS9NYWtlZmlsZToxNzpcdFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cbm5ldC94ZnJtL01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19YRlJNX1NUQVRJU1RJQ1MpICYjNDM7PSB4ZnJtX3Byb2Mub1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTItLypcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjM6ICogeGZybV9uYXRfa2VlcGFsaXZlLmNcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTQtICpcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNzU9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9za19maW5pKHN0cnVjdCBzb2NrX2JoX2xvY2tlZCBfX3BlcmNwdSAqc29ja3MpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjgyLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjgzOnZvaWQgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yODQte1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI5My1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI5NDppbnQgX19uZXRfaW5pdCB4ZnJtX25hdF9rZWVwYWxpdmVfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjk1LXtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yOTktXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzozMDA6aW50IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfZmluaShzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMDEte1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMwNS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMwNjppbnQgeGZybV9uYXRfa2VlcGFsaXZlX2luaXQodW5zaWduZWQgc2hvcnQgZmFtaWx5KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzA3LXtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMjQtfVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MzI1OkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fbmF0X2tlZXBhbGl2ZV9pbml0KTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMyNi1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMyNzp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9maW5pKHVuc2lnbmVkIHNob3J0IGZhbWlseSlcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMyOC17XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzM5LX1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjM0MDpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX25hdF9rZWVwYWxpdmVfZmluaSk7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00MzEwPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQzMzUtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQzMzY6XHRydiA9IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfaW5pdChuZXQpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MzM3LVx0aWYgKHJ2IFx1MDAzYyAwKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDM1ND1zdGF0aWMgdm9pZCBfX25ldF9leGl0IHhmcm1fbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MzU1LXtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDM1NjpcdHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfZmluaShuZXQpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MzU3LVx0eGZybV9zeXNjdGxfZmluaShuZXQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDQwND12b2lkIF9faW5pdCB4ZnJtX2luaXQodm9pZClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MTgtXHRyZWdpc3Rlcl94ZnJtX3N0YXRlX2JwZigpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NDE5Olx0eGZybV9uYXRfa2VlcGFsaXZlX2luaXQoQUZfSU5FVCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MjAtfVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz04MTE9aW50IF9feGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTgzMi1cdFx0bmV0LVx1MDAzZXhmcm0uc3RhdGVfbnVtLS07XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6ODMzOlx0XHR4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZCh4KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MzQtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTE3MjM9c3RhdGljIHZvaWQgX194ZnJtX3N0YXRlX2luc2VydChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTc2Ny1cdHhmcm1faGFzaF9ncm93X2NoZWNrKG5ldCwgeC1cdTAwM2VieWRzdC5uZXh0ICE9IE5VTEwpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE3Njg6XHR4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZCh4KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNzY5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjkyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIChOQVQpIEtlZXBhbGl2ZSBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY2AuIFRoYXQmIzM5O3MgYSBjbGVhciBpbmRpY2F0b3IgdGhpcyByZXZvbHZlcyBhcm91bmQgdGhlIE5BVCBrZWVwYWxpdmUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIFhGUk0gKElQc2VjL1NlY3VyaXR5IFBvbGljeSBEYXRhYmFzZSkgZnJhbWV3b3JrLiBUaGUgY29kZSYjMzk7cyBnb2luZyB0byBiZSBjb21waWxlZCBvbmx5IGlmIGBDT05GSUdfWEZSTWAgaXMgZGVmaW5lZCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkga25vdyB0aGlzIGFyZWEgcXVpdGUgd2VsbC4KClRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBtb2RpZmljYXRpb25zIHRvIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBCYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgIGlzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBnYXRoZXJpbmcgZGF0YSBvciBwcmVwYXJpbmcgYSB0YXNrIHJlbGF0ZWQgdG8ga2VlcGFsaXZlLCBhbmQgYG5hdF9rZWVwYWxpdmVfd29ya2Agc291bmRzIGxpa2UgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmRvZXMqIHRoZSBrZWVwYWxpdmUgcHJvY2Vzc2luZywgbGlrZWx5IHNjaGVkdWxlZCBieSB0aGUgZm9ybWVyLiBOb3cgSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZWNoYW5pY3Mgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIGdyYXNwIHRoZSBpbXBhY3Qgb2YgdGhlIHBhdGNoLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb25zIGFuZCB1bmRlcnN0YW5kIHdoYXQgdGhleSBhcmUgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmF0X2tlZXBhbGl2ZV93b3JrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldG5zL3hmcm0uaD0zMj1zdHJ1Y3QgbmV0bnNfeGZybSB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0bnMveGZybS5oLTg1LVx0c3RydWN0IG11dGV4IHhmcm1fY2ZnX211dGV4O1xuaW5jbHVkZS9uZXQvbmV0bnMveGZybS5oOjg2Olx0c3RydWN0IGRlbGF5ZWRfd29ya1x0bmF0X2tlZXBhbGl2ZV93b3JrO1xuaW5jbHVkZS9uZXQvbmV0bnMveGZybS5oLTg3LX07XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTU4PWVudW0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2Mi1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE2MzpzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCB7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjQtXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqYmF0Y2hbTkFUX0tFRVBBTElWRV9CQVRDSF9TSVpFXTtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjktXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNzA6c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNzEte1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTcyOlx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggKmN0eCA9IHB0cjtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE3My1cbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODQtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxODU6c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE4NjpcdFx0XHRcdCAgICAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHgpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODcte1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIyNC1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIyNTpzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjI2LXtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIyNzpcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIyOC1cdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgd2Fsaztcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMzQtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyMzU6XHRuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMzYtXHR4ZnJtX3N0YXRlX3dhbGtfaW5pdChcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjM4LVx0XHRjdHgubnIgPSAwO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjM5Olx0XHRlcnIgPSB4ZnJtX3N0YXRlX3dhbGsobmV0LCBcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXHUwMDI2Y3R4KTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0MC1cdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjQxLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjdHgubnI7IGkmIzQzOyYjNDM7KSB7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNDI6XHRcdFx0bmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShjdHguYmF0Y2hbaV0sIFx1MDAyNmN0eCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNDMtXHRcdFx0eGZybV9zdGF0ZV9wdXQoY3R4LmJhdGNoW2ldKTtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNDgtXHRpZiAoY3R4Lm5leHRfcnVuKVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQ5Olx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjUwLVx0XHRcdFx0ICAgICAgKGN0eC5uZXh0X3J1biAtIGN0eC5ub3cpICogSFopO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTI4Mz12b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI5MC1cdG5ldCA9IHhzX25ldCh4KTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI5MTpcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZuZXQtXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssIDApO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjkyLX1cbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yOTQ9aW50IF9fbmV0X2luaXQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI5NS17XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyOTY6XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZuZXQtXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssIG5hdF9rZWVwYWxpdmVfd29yayk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yOTctXHRyZXR1cm4gMDtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0zMDA9aW50IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfZmluaShzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMDEte1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MzAyOlx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZuZXQtXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmspO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzAzLVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA5OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDU2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhGUk0gTkFUIEtlZXBhbGl2ZSBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBpcyBhbiBpbnRlcmVzdGluZyBtb2RpZmljYXRpb24gdG8gdGhlIFhGUk0gc3Vic3lzdGVtJiMzOTtzIE5BVCBrZWVwYWxpdmUgbWVjaGFuaXNtLiBCYXNpY2FsbHksIGBuYXRfa2VlcGFsaXZlX3dvcmtgIOKAkyB3aGljaCwgYXMgSSByZWNhbGwsIGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIOKAkyBoYXMgaGFkIGl0cyBzdGF0ZSB0cmF2ZXJzYWwgbG9naWMgcmV3b3JrZWQuIFRoZSB0cmlnZ2VyIGZvciB0aGlzIHdvcmtxdWV1ZSBpcyBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLCB3aGljaCBnZXRzIGNhbGxlZCBkdXJpbmcgWEZSTSBzdGF0ZSBpbnNlcnRpb25zIG9yIGRlbGV0aW9ucy4KClRoZSBnaXN0IG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyBgbmF0X2tlZXBhbGl2ZV93b3JrYCBpdGVyYXRlcyB0aHJvdWdoIFhGUk0gc3RhdGVzLiBOb3csIGluc3RlYWQgb2YgYSBwb3RlbnRpYWxseSB1bmJvdW5kZWQgd2FsaywgaXQgdXNlcyBgeGZybV9zdGF0ZV93YWxrYCB3aXRoIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYXMgYSBjYWxsYmFjay4gYHhmcm1fc3RhdGVfd2Fsa2AgY2FsbHMgYG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0YCBmb3IgZWFjaCBYRlJNIHN0YXRlLCBhbmQgaW1wb3J0YW50bHksIHRoZSB3YWxrIHN0b3BzIGlmIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgcmV0dXJucyBub24temVyby4gIFRoZSBtb2RpZmljYXRpb24gZW5zdXJlcyBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgIHJldHVybnMgYE5BVF9LRUVQQUxJVkVfQkFUQ0hfRlVMTGAgd2hlbiBhIGRlZmluZWQgYmF0Y2ggaXMgZnVsbCwgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtgIHdpbGwgbG9vcCB3aGlsZSB0aGlzIGVycm9yIGlzIHJldHVybmVkLgoKVGhpcyBzaWduYWxzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpdCBzbWVsbHMgbGlrZSBhIGZpeCBmb3IgYSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlLCBwcm9iYWJseSByZWxhdGVkIHRvIGEgc3RhY2sgYWxsb2NhdGlvbi4gU3BlY2lmaWNhbGx5LCBpbnN0ZWFkIG9mIGR5bmFtaWMgYWxsb2NhdGlvbiwgdGhpcyBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIG5vdyB1c2luZyBhIGZpeGVkLXNpemUgYXJyYXkgb24gdGhlIHN0YWNrLCB3aGljaCBpcyBhbG1vc3QgY2VydGFpbmx5IGRvbmUgdG8gYXZvaWQgT09NIGNvbmRpdGlvbnMgb3IgYWxsb2NhdGlvbiBmYWlsdXJlcy4gVGhpcyBtYWtlcyB0aGlzIGFyZWEgcmlwZSBmb3IgZnV6emluZyEKCkxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIFRoZSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBgbmF0X2tlZXBhbGl2ZV93b3JrYCBpdHNlbGYgaXMgYSB3b3JrcXVldWUgY2FsbGJhY2ssIHNvIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvc2VkIGJ5IHN5c3RlbSBjYWxscywgYnV0IGl0cyB0cmlnZ2VyZWQgYnkgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gRGlnZ2luZyBkZWVwZXIsIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgaXMgdHJpZ2dlcmVkIGJ5IGBfX3hmcm1fc3RhdGVfaW5zZXJ0YCBhbmQgYF9feGZybV9zdGF0ZV9kZWxldGVgLiBUaGF0IHN1Z2dlc3RzIGZ1enppbmcgWEZSTSBzdGF0ZSBpbnNlcnRpb24gYW5kIGRlbGV0aW9uIHRocm91Z2ggdGhlIG5ldGxpbmsgaW50ZXJmYWNlICh1c2luZyBgWEZSTV9NU0dfTkVXU0FgLCBgWEZSTV9NU0dfREVMU0FgLCBgWEZSTV9NU0dfVVBEU0FgKSBpcyB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gdHJpZ2dlciB0aGUgY29kZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi4KClRvIGJlIHByZWNpc2UsIHRoZSBwcmltYXJ5IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGZ1bmN0aW9uLCBhbG9uZyB3aXRoIGB4ZnJtX3N0YXRlX3dhbGtgLCBgeGZybV9hZGRfc2FgLCBhbmQgYHhmcm1fZGVsX3NhYC4KCkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgaXMgYWN0dWFsbHkgZXhwb3NlZC4gIFllcCwgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNgIGFuZCBpcyBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBgeGZybV9hZGRfc2FgIGFuZCBgeGZybV9kZWxfc2FgIGFyZSBhdmFpbGFibGUgaW4gYG5ldC94ZnJtL3hmcm1fdXNlci5jYCwgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fYWRkX3NhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTkwNz1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDM4LVxubmV0L3hmcm0veGZybV91c2VyLmM6MTAzOTpzdGF0aWMgaW50IHhmcm1fYWRkX3NhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L3hmcm0veGZybV91c2VyLmMtMTA0MC1cdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI5Mzc9c3RhdGljIGludCB4ZnJtX2FkZF9wb2xfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwMDMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDA0OnN0YXRpYyBpbnQgeGZybV9hZGRfc2FfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzAwNS1cdFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc0OC19IHhmcm1fZGlzcGF0Y2hbWEZSTV9OUl9NU0dUWVBFU10gPSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzQ5Olx0W1hGUk1fTVNHX05FV1NBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2EgICAgICAgIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzUwLVx0W1hGUk1fTVNHX0RFTFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kZWxfc2EgICAgICAgIH0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2MS1cdFtYRlJNX01TR19BQ1FVSVJFICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX2FjcXVpcmUgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc2MjpcdFtYRlJNX01TR19FWFBJUkUgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhX2V4cGlyZSB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2My1cdFtYRlJNX01TR19VUERQT0xJQ1kgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3BvbGljeSAgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc2NDpcdFtYRlJNX01TR19VUERTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhICAgICAgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2NS1cdFtYRlJNX01TR19QT0xFWFBJUkUgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3BvbF9leHBpcmV9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgYW5kIENvZGUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBgWEZSTWAgY29uZmlnIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBCZWZvcmUgZGl2aW5nIGluIGRlZXBlciwgSSBhbHdheXMgbGlrZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSByZWxldmFudCBvciByZWxhdGVkLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UgdG8gY2FzdCBhIHdpZGUgbmV0IGluaXRpYWxseS4KCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNgLiBHb29kLCBpdCBjb25maXJtcyB0aGF0IGBDT05GSUdfWEZSTWAgKmlzKiB1c2VkIHRoZXJlLCB3aGljaCBhdCBsZWFzdCB2YWxpZGF0ZXMgbXkgaW5pdGlhbCB0aG91Z2h0LiBOb3csIEkgc2hvdWxkIGNoZWNrIHRoZSBgTWFrZWZpbGVgIGluIHRoYXQgZGlyZWN0b3J5IChgbmV0L3hmcm0vTWFrZWZpbGVgKS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhhdCBzdWJzeXN0ZW0uIEEgTWFrZWZpbGUgb2Z0ZW4gcHJvdmlkZXMgdml0YWwgY2x1ZXMgcmVnYXJkaW5nIG90aGVyIGNvbmZpZyBvcHRpb25zLCBjb25kaXRpb25hbCBjb21waWxhdGlvbnMsIG9yIGhvdyBldmVyeXRoaW5nIHRpZXMgdG9nZXRoZXIuIEl0JiMzOTtzIGxpa2UgdGhlIGFyY2hpdGVjdHVyYWwgYmx1ZXByaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX25hdF9rZWVwYWxpdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfWEZSTSkgOj0geGZybV9wb2xpY3kubyB4ZnJtX3N0YXRlLm8geGZybV9oYXNoLm8gXFxcbi0tXG5uZXQveGZybS9NYWtlZmlsZS0xNi1cdFx0ICAgICAgeGZybV9zeXNjdGwubyB4ZnJtX3JlcGxheS5vIHhmcm1fZGV2aWNlLm8gXFxcbm5ldC94ZnJtL01ha2VmaWxlOjE3Olx0XHQgICAgICB4ZnJtX25hdF9rZWVwYWxpdmUub1xubmV0L3hmcm0vTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1hGUk1fU1RBVElTVElDUykgJiM0Mzs9IHhmcm1fcHJvYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipYRlJNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYFhGUk1gLiBUaGF0JiMzOTtzIHRoZSBrZXkuIEkgbmVlZCB0byBiZSBzdXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIG5hdHVyYWxseSwgdGhhdCBgWEZSTWAgaXMgdGhlICpwcmltYXJ5KiBjb25maWd1cmF0aW9uIHBvaW50LiBIb3dldmVyLCBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIGFuZ2xlcy4gTXkgYnJhaW4gaW1tZWRpYXRlbHkganVtcHMgdG8gYFhGUk1fVVNFUmAuIENvdWxkIGNvbmZpZ3VyaW5nIGBYRlJNYCBmcm9tIHVzZXJzcGFjZSBiZSBhIGRlcGVuZGVuY3kgaGVyZT8gSXQgb2Z0ZW4gaXMuIE5vdyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uCgpMZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIGBuZXQveGZybS9NYWtlZmlsZWAgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gY2hlY2sgZm9yIHRoZSBvYmplY3QgZmlsZSBgeGZybV91c2VyLm9gLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgYnVpbGQgdGhlcmUsIGxpa2VseSBkcml2ZW4gYnkgdGhhdCBgWEZSTV9VU0VSYCBLY29uZmlnIG9wdGlvbi4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jeSBjaGFpbi4gSSBhbHJlYWR5IGhhdmUgYSBzdXNwaWNpb24uIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHNvbGlkaWZ5IHRoZSBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3VzZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfWEZSTV9BTEdPKSAmIzQzOz0geGZybV9hbGdvLm9cbm5ldC94ZnJtL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19YRlJNX1VTRVIpICYjNDM7PSB4ZnJtX3VzZXIub1xubmV0L3hmcm0vTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX1hGUk1fVVNFUl9DT01QQVQpICYjNDM7PSB4ZnJtX2NvbXBhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4OTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gYWRkIHNlY3VyaXR5IGFzc29jaWF0aW9ucyAoU0FzKSBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggbWVhbnMgSSYjMzk7bSBnb2luZyB0byBuZWVkIGBYRlJNX1VTRVJgLiBNYWtlcyBzZW5zZS4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggdGhpcywgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IHRoZSBhcmNoaXRlY3R1cmU6IERvZXMgdGhlIGBYRlJNYCBmcmFtZXdvcmsgaGF2ZSBhbiBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIHRoZSBgSU5FVGAgc3Vic3lzdGVtPyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIEJlc3QgdG8gYmUgc3VyZSB0aGlzIGZvdW5kYXRpb24gaXMgc29saWQgYmVmb3JlIEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWctNC0jXG5uZXQveGZybS9LY29uZmlnOjU6Y29uZmlnIFhGUk1cbm5ldC94ZnJtL0tjb25maWctNi1cdGJvb2xcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwLVxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXG5uZXQveGZybS9LY29uZmlnLTEyLVx0Ym9vbFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cbm5ldC94ZnJtL0tjb25maWc6MTQ6Y29uZmlnIFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy0xNS1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcbm5ldC94ZnJtL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0zMS1cbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbm5ldC94ZnJtL0tjb25maWctMzMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wYXRpYmxlIEFCSSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy00Mi1cbm5ldC94ZnJtL0tjb25maWc6NDM6Y29uZmlnIFhGUk1fSU5URVJGQUNFXG5uZXQveGZybS9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTUwLVxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy03MS1cbm5ldC94ZnJtL0tjb25maWc6NzI6Y29uZmlnIFhGUk1fU1RBVElTVElDU1xubmV0L3hmcm0vS2NvbmZpZy03My1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1wmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctODMtIyBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxubmV0L3hmcm0vS2NvbmZpZy04NS1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZy05Mi0jIGFsZ29yaXRobXMgdGhhdCBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxubmV0L3hmcm0vS2NvbmZpZzo5Mzpjb25maWcgWEZSTV9FU1Bcbm5ldC94ZnJtL0tjb25maWctOTQtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTA1LVxubmV0L3hmcm0vS2NvbmZpZzoxMDY6Y29uZmlnIFhGUk1fSVBDT01QXG5uZXQveGZybS9LY29uZmlnLTEwNy1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTQwLVxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcbm5ldC94ZnJtL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTE1Ni1cbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXG5uZXQveGZybS9LY29uZmlnLTE1OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgWEZSTSBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgVmlzaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBYRlJNYCBpcyB0aGlzIGludGVybmFsIGJvb2xlYW4sIGNvbnRyb2xsZWQgYnkgYFhGUk1fVVNFUmAgYW5kIHNvbWUgb3RoZXJzLiBTbywgaWYgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCBgWEZSTV9VU0VSYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiBJJiMzOTtkIG5lZWQgdG8gZW5hYmxlIHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgZ29pbmcuIEFuZCwgYmVjYXVzZSBgWEZSTV9VU0VSYCBpcyBuZXN0ZWQgdW5kZXIgYGlmIElORVRgLCBlbmFibGluZyBgSU5FVGAgaXMgYSBwcmVyZXF1aXNpdGUuIFNvLCBgSU5FVGAgYW5kIGBYRlJNX1VTRVJgIGFyZSB0aGUga2V5IGNvbmZpZ3MgZm9yIGVuYWJsaW5nIHRoaXMuIEdvdCBpdC4KCk5vdywgd2hhdCBhYm91dCB0aGUgc3ltYm9scyB0aGVtc2VsdmVzPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRob3NlIHNwZWNpZmljIGZ1bmN0aW9ucyDigJMgYHhmcm1fYWRkX3NhYCwgYHhmcm1fZGVsX3NhYCwgYHhmcm1fc3RhdGVfd2Fsa2AsIGFuZCBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLiBMZXQgbWUgZG91YmxlLWNoZWNrIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAuIElzIGl0IGV4cG9ydGVkPyBIbW0sIGl0JiMzOTtzIG5vdCBleHBvcnRlZC4gQnV0IHdhaXQsIGl0JiMzOTtzIGEgZ2xvYmFsIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBCZWNhdXNlIGl0JiMzOTtzIG5vdCBzdGF0aWMsIGl0IGhhcyBpdHMgb3duIGRpc3RpbmN0IHN5bWJvbCwgZGVzcGl0ZSBub3QgYmVpbmcgZXhwb3J0ZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2hpZnQgYmFjayB0byBgeGZybV9hZGRfc2FgIGFuZCBgeGZybV9kZWxfc2FgLiBBY2NvcmRpbmcgdG8gbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nLCB0aGV5JiMzOTtyZSBzdGF0aWMgd2l0aGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQuIEdvdHRhIGRvdWJsZS1jaGVjayBpZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGluZGVlZCBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fYWRkX3NhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9OTA3PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jb25zdHJ1Y3Qoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwMzgtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMDM5OnN0YXRpYyBpbnQgeGZybV9hZGRfc2Eoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDQwLVx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MjkzNz1zdGF0aWMgaW50IHhmcm1fYWRkX3BvbF9leHBpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzAwMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMwMDQ6c3RhdGljIGludCB4ZnJtX2FkZF9zYV9leHBpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDA1LVx0XHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNzQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzQ4LX0geGZybV9kaXNwYXRjaFtYRlJNX05SX01TR1RZUEVTXSA9IHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NDk6XHRbWEZSTV9NU0dfTkVXU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9zYSAgICAgICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NTAtXHRbWEZSTV9NU0dfREVMU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2RlbF9zYSAgICAgICAgfSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzYxLVx0W1hGUk1fTVNHX0FDUVVJUkUgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfYWNxdWlyZSAgIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzYyOlx0W1hGUk1fTVNHX0VYUElSRSAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2FfZXhwaXJlIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzYzLVx0W1hGUk1fTVNHX1VQRFBPTElDWSAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfcG9saWN5ICAgIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzY0Olx0W1hGUk1fTVNHX1VQRFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2EgICAgICAgIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzY1LVx0W1hGUk1fTVNHX1BPTEVYUElSRSAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfcG9sX2V4cGlyZX0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjAwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBBUEkgRGVzaWduOiBDb25zaWRlcmluZyBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGFuZCBgeGZybV9zdGF0ZV93YWxrYCoqCgpSaWdodCwgc28gdGhlIHByb21wdCBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGV2YWx1YXRlIHRoaXMgY29kZS4gVGhlIGdvYWwgaXMgdG8gbWFrZSB0aGVzZSBmdW5jdGlvbnMgYWNjZXNzaWJsZSBhbmQgbWFpbnRhaW5hYmxlIGluIHRoZSBsb25nIHJ1bi4KCmB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgbG9va3MgcHJvbWlzaW5nLCB0aGF0IGlzIGEgZ29vZCBjYW5kaWRhdGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dC4gVGhhdCBzZWVtcyB0byBmaXQgdGhlIHByb2ZpbGUgd2UmIzM5O3JlIGFpbWluZyBmb3IuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciBgeGZybV9zdGF0ZV93YWxrYC4gSXQmIzM5O3MgbG9jYXRlZCBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCwgd2hpY2ggaXMgYSBrZXkgYXJlYSBvZiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGZ1bGZpbGxzIHRoZSBub24tc3RhdGljLCBub24taW5saW5lZCBjcml0ZXJpYSwgYW5kIGlmIGl0IG1ha2VzIHNlbnNlIGFzIGFuIGFjY2Vzc2libGUgQVBJIGVuZHBvaW50LiBUaGUgbG9jYXRpb24gd2l0aGluIHRoYXQgZmlsZSwgc3VnZ2VzdHMgaXQgbGlrZWx5IGRvZXMgcGxheSBhbiBpbXBvcnRhbnQgcm9sZSwgYnV0IEkgbmVlZCB0byBkaXZlIGRlZXBlciB0byBkZXRlcm1pbmUgaXRzIHNwZWNpZmljIHVzZSBhbmQgc3VpdGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc3RhdGVfd2FsayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmM9MTY4Nz1zdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfYnlzcGkoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgc3BpLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjkwLVx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTY5MTpcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKnc7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTY5Mi1cbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MjY4ND1zdGF0aWMgYm9vbCBfX3hmcm1fc3RhdGVfZmlsdGVyX21hdGNoKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzAwLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MDE6aW50IHhmcm1fc3RhdGVfd2FsayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwMi1cdFx0ICAgIGludCAoKmZ1bmMpKHN0cnVjdCB4ZnJtX3N0YXRlICosIGludCwgdm9pZCopLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzA1LVx0c3RydWN0IHhmcm1fc3RhdGUgKnN0YXRlO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MDY6XHRzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp4O1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3MDctXHRpbnQgZXJyID0gMDtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxMy1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNndhbGstXHUwMDNlYWxsKSlcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzE0Olx0XHR4ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZuZXQtXHUwMDNleGZybS5zdGF0ZV9hbGwsIHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGssIGFsbCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcxNS1cdGVsc2Vcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzE2Olx0XHR4ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ3YWxrLVx1MDAzZWFsbCwgc3RydWN0IHhmcm1fc3RhdGVfd2FsaywgYWxsKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzE3LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKHgsIFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnN0YXRlX2FsbCwgYWxsKSB7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDAtfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NDE6RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3dhbGspO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDItXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc0Mzp2b2lkIHhmcm1fc3RhdGVfd2Fsa19pbml0KHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHU4IHByb3RvLFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDQtXHRcdFx0ICBzdHJ1Y3QgeGZybV9hZGRyZXNzX2ZpbHRlciAqZmlsdGVyKVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzUxLX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzUyOkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV93YWxrX2luaXQpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NTMtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc1NDp2b2lkIHhmcm1fc3RhdGVfd2Fsa19kb25lKHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssIHN0cnVjdCBuZXQgKm5ldClcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzU1LXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc2NC19XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc2NTpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfd2Fsa19kb25lKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzY2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQzMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZnJvbSBhIHRlY2huaWNhbCBwZXJzcGVjdGl2ZToKCioqTXkgUGVyc3BlY3RpdmUgb24gdGhlIFhGUk0gU3Vic3lzdGVtIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBYRlJNIHN1YnN5c3RlbSBoYW5kbGVzIGV4dGVybmFsIGNvbW11bmljYXRpb24uIEkgc2VlIHRoYXQgYHhmcm1fc3RhdGVfd2Fsa2AgaXMgYW4gKmV4cG9ydGVkKiBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHN1Z2dlc3RzIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIGFjY2Vzc2VkIGFuZCB1c2VkIGZyb20gKm91dHNpZGUqIHRoZSBjb3JlIFhGUk0gbW9kdWxlLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBsaWtlbHkgbWVhbnMgaXQgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBleGlzdGluZyBYRlJNIHN0YXRlcy4gVGhhdCYjMzk7cyB1c2VmdWwgZm9yIGEgdmFyaWV0eSBvZiB0YXNrcyDigJMgbWFuYWdlbWVudCwgbW9uaXRvcmluZywgb3IgcG9zc2libHkgZXZlbiBkZWJ1Z2dpbmcgdG9vbHMgdGhhdCBuZWVkIHRvIGluc3BlY3QgdGhlIGN1cnJlbnQgWEZSTSBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGl0cyB1c2FnZSB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXQgaXMgdXNlZCBmb3IgYW5kIGlmIGl0IGhhcyBhbnkgY2F2ZWF0cy4KClRoZW4gSSBzZWUgYHhmcm1fdXNlcl9yY3ZfbXNnYC4gQWhhISBUaGlzIGxvb2tzIGxpa2UgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBhbGwgTmV0bGluayBtZXNzYWdlcyByZWxhdGVkIHRvIFhGUk0uIFRoaXMgaXMgZXhhY3RseSB3aGF0IEkgZXhwZWN0ZWQuIE5ldGxpbmsgaXMgdGhlIHN0YW5kYXJkIGludGVyZmFjZSBmb3IgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBzbyBgeGZybV91c2VyX3Jjdl9tc2dgIGlzIGdvaW5nIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IHdoZXJlIGFsbCB0aGUgdXNlci1zcGFjZSByZXF1ZXN0cyDigJMgZm9yIGNyZWF0aW5nLCBtb2RpZnlpbmcsIG9yIHF1ZXJ5aW5nIFhGUk0gcG9saWNpZXMgYW5kIHN0YXRlcyDigJMgd2lsbCBjb21lIGluLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgZGlzcGF0Y2hlciwgcm91dGluZyB0aGVzZSBpbmNvbWluZyBOZXRsaW5rIG1lc3NhZ2VzIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVycyBmb3IgcHJvY2Vzc2luZy4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcyBpcyBnb2luZyB0byBiZSBjcml0aWNhbCB0byBzZWN1cml0eSBpbXBsaWNhdGlvbnMgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3VzZXJfcmN2X21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTM3ODE9c3RhdGljIGludCB4ZnJtX3JlamVjdF91bnVzZWRfYXR0cihpbnQgdHlwZSwgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM4MzYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozODM3OnN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zODM4LVx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM5MjQ9c3RhdGljIHZvaWQgeGZybV9uZXRsaW5rX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MjgtXHRtdXRleF9sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5Mjk6XHRuZXRsaW5rX3Jjdl9za2Ioc2tiLCBcdTAwMjZ4ZnJtX3VzZXJfcmN2X21zZyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTMwLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBQYXRoIEZvcndhcmQqKgoKT2theSwgc28gSSYjMzk7dmUgcGlucG9pbnRlZCBhIGZldyBwcm9taXNpbmcgZm9jdXMgc3ltYm9scyB0aGF0IEkgdGhpbmsgd2FycmFudCBpbW1lZGlhdGUgYXR0ZW50aW9uOiBgeGZybV91c2VyX3Jjdl9tc2dgLCBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLCBhbmQgYHhmcm1fc3RhdGVfd2Fsa2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIE5BVCBrZWVwYWxpdmUgZnVuY3Rpb25hbGl0eS4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHRoZSByZWFjaGFiaWxpdHkgb2YgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gQSBxdWljayBjaGVjayByZXZlYWxzIGl0JiMzOTtzIGluZGVlZCBjYWxsZWQgZnJvbSBgX194ZnJtX3N0YXRlX2luc2VydGAgYW5kIGBfX3hmcm1fc3RhdGVfZGVsZXRlYCwgbWVhbmluZyBpdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBTZWN1cml0eSBBc3NvY2lhdGlvbnMgKFNBcykgYXJlIGFkZGVkIG9yIHJlbW92ZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGUgd29ya3F1ZXVlIGlzIHNjaGVkdWxlZCBieSBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIHdoaWNoIGNhbGxzIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBUaGF0IHdvcmsgZnVuY3Rpb24gaXRlcmF0ZXMgdGhyb3VnaCBTQXMgdXNpbmcgYHhmcm1fc3RhdGVfd2Fsa2AgYW5kIGNhbGxzIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAuIFllcCwgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuIHNvIGZhciwgYElORVRgIGFuZCBgWEZSTV9VU0VSYCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IHBsYXllcnMuIEJ1dCwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgaW1wYWN0IHRoZSBOQVQga2VlcGFsaXZlIGZ1bmN0aW9uLgoKSSYjMzk7bGwgcXVpY2tseSByZXZpc2l0IGBuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY2AgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFhGUk1fVVNFUmAgYWxvbmUgaXMgc3VmZmljaWVudC4gYFhGUk1fVVNFUmAgZG9lcyBzZWxlY3QgYFhGUk1gIGFuZCBkZXBlbmRzIG9uIGBJTkVUYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm90IGFueSBvdGhlciBzdWJ0bGUgZGVwZW5kZW5jaWVzIGZvciBOQVQga2VlcGFsaXZlLCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0xMj1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNvY2tfYmhfbG9ja2VkLCBuYXRfa2VlcGFsaXZlX3NrX2lwdjQpID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0LX07XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2LXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQsIG5hdF9rZWVwYWxpdmVfc2tfaXB2NikgPSB7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9NDI9c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTczLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6NzQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy03NS1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTE4PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTQ2LVx0XHRicmVhaztcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0OC1cdGNhc2UgQUZfSU5FVDY6XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MzA2PWludCB4ZnJtX25hdF9rZWVwYWxpdmVfaW5pdCh1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzEzLVx0XHRicmVhaztcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMxNDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMxNS1cdGNhc2UgQUZfSU5FVDY6XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MzI3PXZvaWQgeGZybV9uYXRfa2VlcGFsaXZlX2ZpbmkodW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMzMi1cdFx0YnJlYWs7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzozMzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMzQtXHRjYXNlIEFGX0lORVQ2OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ4NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKlN0cmVhbWxpbmluZyB0aGUgSVB2NiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIElQdjYgY29uZmlndXJhdGlvbi4gVGhlIHdheSBJIHNlZSBpdCwgdGhlIGN1cnJlbnQgc2V0dXAgaXMgcmVseWluZyBvbiBgQ09ORklHX0lQVjZgLCB3aGljaCBpcyB1bmRlcnN0YW5kYWJsZS4gQnV0IGlmIHdlJiMzOTtyZSBhbHNvIG1ha2luZyBzdXJlIElQdjQgaXMgYXZhaWxhYmxlLCB3aGljaCBzZWVtcyB0byBoYXBwZW4gYXMgbG9uZyBhcyBgSU5FVGAgaXMgZW5hYmxlZCwgdGhlbiB3ZSYjMzk7cmUgcHJvYmFibHkgY2FycnlpbmcgYSBiaXQgbW9yZSBiYWdnYWdlIHRoYW4gbmVjZXNzYXJ5LiBgSU5FVGAgc2hvdWxkIGNvdmVyIElQdjQsIG9idmlvdXNseS4gQW5kIGlmIHdlJiMzOTtyZSBvbmx5IGZvY3VzZWQgb24gWEZSTS1yZWxhdGVkIGZ1bmN0aW9uYWxpdHksIGBJTkVUYCBhbG9uZyB3aXRoIGBYRlJNX1VTRVJgIHNob3VsZCBhY3R1YWxseSBjb3ZlciBpdC4KCkkgd29uZGVyIGlmIHRoZXJlJiMzOTtzIGEgcmVsYXRlZCBmbGFnIHRvIGNvbnNpZGVyLCBsaWtlIGBYRlJNX05BVGAgbWF5YmUsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB0aGF0IHdlIHNob3VsZCBiZSBjaGVja2luZyBhcyB3ZWxsPyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSByZWxhdGVkIGZpbGVzIGFuZCBzZWUgaWYgdGhhdCBpcyBjb3JyZWN0LiBUaGF0IG1pZ2h0IGJlIHRoZSBtaXNzaW5nIHBpZWNlIHRvIG9wdGltaXplIHRoaXMgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYRlJNX05BVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Nzg2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgWEZSTSBOQVQgS2VlcGFsaXZlIEludGVydmFsKioKCkFscmlnaHQsIG5vIGBYRlJNX05BVGAgZGVmaW5lLCBzbyBpdCYjMzk7cyBub3QgYSBjb21waWxlLXRpbWUgb3B0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIE5BVCBrZWVwYWxpdmUgaXMgY29uZmlndXJlZC4gTXkgbmV4dCBtb3ZlIGlzIHRvIGRpdmUgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIHNvdXJjZS4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgYHhmcm1fbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbGAgdmFyaWFibGUgdGhlcmUuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlZmluaXRpb24gYW5kIHBvdGVudGlhbCBkZWZhdWx0IHZhbHVlLCBvciBhbnkgc3lzY3RsIG9yIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiwgc2hvdWxkIGJlLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGtlZXBhbGl2ZSBpcyBjb250cm9sbGVkIGF0IHJ1bnRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25hdF9rZWVwYWxpdmVfaW50ZXJ2YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtOTc0LVx0aWYgKGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdKVxubmV0L3hmcm0veGZybV91c2VyLmM6OTc1Olx0XHR4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPVxubmV0L3hmcm0veGZybV91c2VyLmMtOTc2LVx0XHRcdG5sYV9nZXRfdTMyKGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdKTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xMzgzPXN0YXRpYyBpbnQgY29weV90b191c2VyX3N0YXRlX2V4dHJhKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0ODYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNDg3Olx0aWYgKHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkge1xubmV0L3hmcm0veGZybV91c2VyLmMtMTQ4OC1cdFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMLFxubmV0L3hmcm0veGZybV91c2VyLmM6MTQ4OTpcdFx0XHRcdCAgeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0OTAtXHRcdGlmIChyZXQpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzI0MT1zdGF0aWMgaW50IGJ1aWxkX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjg3LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzI4ODpcdGlmIChtLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyODktXHRcdGVyciA9IG5sYV9wdXRfdTMyKHNrYiwgWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyOTA6XHRcdFx0XHQgIG0tXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjkxLVx0XHRpZiAoZXJyKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMDk9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMTctXHRcdChtLVx1MDAzZW1hcHBpbmdfbWF4YWdlID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIDogMCkgJiM0Mztcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMTg6XHRcdChtLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgOiAwKSAmIzQzO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzMxOS1cdFx0KGRpciA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpIDogMCk7IC8qIFhGUk1BX1NBX0RJUiAqL1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzNDM9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzQ1MS1cdFx0XHRcdFx0ICAgICAgIHgtXHUwMDNlbWFwcGluZ19tYXhhZ2UpO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzQ1MjpcdG0ubmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IG5sYV9nZXRfdTMyX2RlZmF1bHQoYXR0cnNbWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTF0sXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDUzOlx0XHRcdFx0XHRcdCAgICAgICB4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzQ1NC1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTA0LVx0bS5tYXBwaW5nX21heGFnZSA9IHhjLVx1MDAzZW1hcHBpbmdfbWF4YWdlO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzUwNTpcdG0ubmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IHhjLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTA2LVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQwMzk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeGZybV9zYV9sZW4oc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDA4Ny1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwODg6XHRpZiAoeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKVxubmV0L3hmcm0veGZybV91c2VyLmM6NDA4OTpcdFx0bCAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDA5MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNDMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWEZSTSBOQVQgS2VlcGFsaXZlIFBhdGNoKioKCk9rYXksIHNvIHRoZSBrZWVwYWxpdmUgaW50ZXJ2YWwgZm9yIE5BVCBpcyBjb25maWd1cmVkIHRocm91Z2ggdGhlIGBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMYCBhdHRyaWJ1dGUgd2l0aGluIGVpdGhlciBgWEZSTV9NU0dfTkVXU0FgIG9yIGBYRlJNX01TR19VUERTQWAgbWVzc2FnZXMuIFRoaXMgaXMgY2xlYXJseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIOKAkyB0aGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyBwdXJwb3NlczoKCiogICAqKldvcnRoRnV6emluZzogVHJ1ZS4qKiBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgY29yZSBYRlJNIHN1YnN5c3RlbSBjaGFuZ2UuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZSBYRlJNIE5BVCBrZWVwYWxpdmUgd29ya3F1ZXVlIGhhbmRsZXMgc3RhdGUgb2JqZWN0cy4gSXTigJlzIG1vdmluZyBmcm9tIGR5bmFtaWMgYWxsb2NhdGlvbiB0byBhIGZpeGVkLXNpemUgYmF0Y2ggYXJyYXksIHdoaWNoIGltcGFjdHMgaXRlcmF0aW9uIGFuZCBwcm9jZXNzaW5nLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBzaGlmdCBhbmQgb3BlbnMgdGhlIGRvb3IgZm9yIHBvdGVudGlhbCBpc3N1ZXMuCiogICAqKkZvY3VzU3ltYm9sczoqKiBJIHNob3VsZCBiZSB0YXJnZXRpbmcgYHhmcm1fdXNlcl9yY3ZfbXNnYCwgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCwgYW5kIGB4ZnJtX3N0YXRlX3dhbGtgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2UuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogSSBzaG91bGQgYmUgdGVzdGluZyB3aXRoIGBJTkVUYCBhbmQgYFhGUk1fVVNFUmAgZW5hYmxlZC4KCkhhbmcgb24gYSBzZWNvbmTigKYgYHhmcm1fdXNlcl9yY3ZfbXNnYCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBwcm9ibGVtLCBnaXZlbiB0aGUgZ3VpZGVsaW5lIHRvIHByZWZlciBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gSSBzaG91bGQgYmUgbG9va2luZyBmb3IgYSBiZXR0ZXIgY2FuZGlkYXRlLiBUaGUgcHJvbXB0IHN1Z2dlc3RzICpub3QqIHVzaW5nIHN0YXRpYywgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLiBMZXQgbWUgY2hlY2vigKYgSXMgYHhmcm1fbmV0bGlua19yY3ZgIGFsc28gc3RhdGljPyBObywgd2FpdCEgT3IgbWF5YmUgYHhmcm1fdXNlcl9pbml0YD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGFuZCBtYWtlIHN1cmUgSSYjMzk7bSB0YXJnZXRpbmcgdGhlIHJpZ2h0IGVudHJ5IHBvaW50IGZvciB0aGlzIGZ1enppbmcgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX25ldGxpbmtfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzgzNz1zdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MjMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozOTI0OnN0YXRpYyB2b2lkIHhmcm1fbmV0bGlua19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MjUte1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQ2MTI9c3RhdGljIGludCBfX25ldF9pbml0IHhmcm1fdXNlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDYxNi1cdFx0Lmdyb3Vwc1x0PSBYRlJNTkxHUlBfTUFYLFxubmV0L3hmcm0veGZybV91c2VyLmM6NDYxNzpcdFx0LmlucHV0XHQ9IHhmcm1fbmV0bGlua19yY3YsXG5uZXQveGZybS94ZnJtX3VzZXIuYy00NjE4LVx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwODYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqVGhpbmtpbmcgVGhyb3VnaCBYRlJNIEZ1bmN0aW9uIFZpc2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIFhGUk0gZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZWlyIHNjb3BlLiBgeGZybV9uZXRsaW5rX3JjdmAuLi4gdGhhdCBvbmUmIzM5O3Mgc3RhdGljLiBSaWdodCwgdGhhdCBtZWFucyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIE5vIGJpZyBkZWFsLCBwcmV0dHkgc3RhbmRhcmQgZm9yIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuCgpOb3csIHdoYXQgYWJvdXQgYHhmcm1fc3RhdGVfd2Fsa2A/IEFoLCB5ZXMsIEkgcmVtZW1iZXIgdGhhdCBvbmUuIEl0ICppcyogZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBldmVuIHVzZXIgc3BhY2UsIHByb2JhYmx5IGZvciBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgc3RhdGVzLiBUaGF0IG1ha2VzIHNlbnNlLgoKTmV4dCBvbiB0aGUgbGlzdCwgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gSG1tLCBub3Qgc3RhdGljIGVpdGhlci4gVGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZXh0ZXJuYWxseSwgcGVyaGFwcyBieSBzb21lIG90aGVyIHBhcnQgb2YgdGhlIE5BVCBrZWVwYWxpdmUgbWVjaGFuaXNtLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgY2FsbHMgdG8gdGhhdCBhbmQgc2VlIHdoYXQmIzM5O3MgdXNpbmcgaXQuCgpBbmQgZmluYWxseSwgYHhmcm1fc3RhdGVfYWRkYC4gWWVhaCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBzdGF0aWMuIEl0IGlzIHByb2JhYmx5IHRoZSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgdG8gYWRkIG5ldyB4ZnJtIHN0YXRlcy4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgZnVuY3Rpb24uCgpTbywgaW4gZXNzZW5jZSwgSSYjMzk7bSBqdXN0IHF1aWNrbHkgYXNzZXNzaW5nIHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW50ZXJuYWwgYW5kIHdoaWNoIG9uZXMgYXJlIGludGVuZGVkIGZvciBicm9hZGVyIHVzZS4gVGhpcyBnaXZlcyBtZSBhIHF1aWNrIHNlbnNlIG9mIHRoZSBtb2R1bGUmIzM5O3MgYXJjaGl0ZWN0dXJlIGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gSXQgaW5mb3JtcyB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGxpZXMsIGFuZCB3aGVyZSB0aGUgZXh0ZW5zaW9uIHBvaW50cyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc3RhdGVfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzU2PXhmcm1fc3RhdGVfZmluZChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTM5My1cdFx0ICAgICEoeC1cdTAwM2Vwcm9wcy5mbGFncyBcdTAwMjYgWEZSTV9TVEFURV9XSUxEUkVDVikgXHUwMDI2XHUwMDI2XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTM5NDpcdFx0ICAgIHhmcm1fc3RhdGVfYWRkcl9jaGVjayh4LCBkYWRkciwgc2FkZHIsIGVuY2FwX2ZhbWlseSkgXHUwMDI2XHUwMDI2XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTM5NS1cdFx0ICAgIHRtcGwtXHUwMDNlbW9kZSA9PSB4LVx1MDAzZXByb3BzLm1vZGUgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE0NTEtXHRcdCAgICAhKHgtXHUwMDNlcHJvcHMuZmxhZ3MgXHUwMDI2IFhGUk1fU1RBVEVfV0lMRFJFQ1YpIFx1MDAyNlx1MDAyNlxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE0NTI6XHRcdCAgICB4ZnJtX3N0YXRlX2FkZHJfY2hlY2soeCwgZGFkZHIsIHNhZGRyLCBlbmNhcF9mYW1pbHkpIFx1MDAyNlx1MDAyNlxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE0NTMtXHRcdCAgICB0bXBsLVx1MDAzZW1vZGUgPT0geC1cdTAwM2Vwcm9wcy5tb2RlIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xNjU0PXhmcm1fc3RhdGVvbmx5X2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIGlmX2lkLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjY4LVx0XHQgICAgISh4LVx1MDAzZXByb3BzLmZsYWdzIFx1MDAyNiBYRlJNX1NUQVRFX1dJTERSRUNWKSBcdTAwMjZcdTAwMjZcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNjY5Olx0XHQgICAgeGZybV9zdGF0ZV9hZGRyX2NoZWNrKHgsIGRhZGRyLCBzYWRkciwgZmFtaWx5KSBcdTAwMjZcdTAwMjZcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjcwLVx0XHQgICAgbW9kZSA9PSB4LVx1MDAzZXByb3BzLm1vZGUgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTE4OTM9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fZmluZF9hY3FfYnlzZXEoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIHNlcSwgdTMyIHBjcHVfbnVtKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xODk0LVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE4OTU6aW50IHhmcm1fc3RhdGVfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE4OTYte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xOTQ4LX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxOTQ5OkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9hZGQpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE5NTAtXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTIxNzg9aW50IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMTkwLVx0fSBlbHNlIHtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyMTkxOlx0XHRpZiAoeGZybV9zdGF0ZV9hZGQoeGMpIFx1MDAzYyAwKSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjE5Mi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ZhaWxlZCB0byBhZGQgbWlncmF0ZWQgc3RhdGVcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI3NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGVzZSBmdW5jdGlvbnM6CgoqKkV4YW1pbmluZyB0aGUgWEZSTSBTdGF0ZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkgc2VlIGB4ZnJtX3N0YXRlX2FkZGAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgcmVhZGlseSBhdmFpbGFibGUgZm9yIGV4dGVybmFsIHVzZS4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uLiBBZGRpbmcgYSBzZWN1cml0eSBhc3NvY2lhdGlvbiBzdGF0ZSB0byB0aGUgWEZSTSBzdWJzeXN0ZW0gaXMgYSBjb3JlIG9wZXJhdGlvbi4gVGhhdCBnaXZlcyBtZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoZW4gSSBub3RpY2UgYHhmcm1fc3RhdGVfdXBkYXRlYCBpcyBhbHNvIGV4cG9ydGVkLiBJbnRlcmVzdGluZy4gVGhpcyBjb25maXJtcyB0aGF0IHRoaXMgc3Vic3lzdGVtIGFsbG93cyBzdGF0ZSBtb2RpZmljYXRpb24gYWZ0ZXIgY3JlYXRpb24uIFRoaXMgc3VnZ2VzdHMgYSBmbGV4aWJsZSwgZHluYW1pYyBkZXNpZ24uIEl0IGFsc28gaW1wbGllcyB0aGUgZXhpc3RlbmNlIG9mIGxvZ2ljIHRvIHZhbGlkYXRlIGFuZCBhcHBseSBzdGF0ZSBjaGFuZ2VzLCB3aGljaCBJJiMzOTtkIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBJIHdlcmUgdXNpbmcgaXQuIE9rYXksIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBkaXJlY3Rpb24gZm9yIGFuYWx5c2lzLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSB0d28gZnVuY3Rpb25zIGFuZCB3b3JrIG15IHdheSB0aHJvdWdoIHRoZSBzdXJyb3VuZGluZyBsb2dpYywgYW5kIGxvb2sgdG8gc2VlIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgdGhleSB3b3JrIHdpdGgsIGFuZCBob3cgdGhlaXIgaW50ZXJhY3Rpb25zLiBUaGlzIHNob3dzIHRoYXQgdGhlIHN0YXRlIG1hbmFnZW1lbnQgY2FuIGhhbmRsZSBib3RoIGluaXRpYWwgc2V0dXAgYW5kIHJ1bnRpbWUgbW9kaWZpY2F0aW9ucywgd2hpY2ggaXMgZ29vZC4gVGltZSB0byBkaXZlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zdGF0ZV91cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jPTIyMjM9RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX21pZ3JhdGUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMjI1LVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjIyMjY6aW50IHhmcm1fc3RhdGVfdXBkYXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTIyMjcte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMzI2LX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyMzI3OkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV91cGRhdGUpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTIzMjgtXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTIzNTY9RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2NoZWNrX2V4cGlyZSk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjM1Ny1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyMzU4OnZvaWQgeGZybV9zdGF0ZV91cGRhdGVfc3RhdHMoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTIzNTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgzOQoJCQkJCQkJb3V0cHV0OiAxNjEKCQkJCQkJCXRob3VnaHRzOiAyODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFhGUk0gTkFUIEtlZXBhbGl2ZSBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB0aGlzIFhGUk0gTkFUIGtlZXBhbGl2ZSBjaGFuZ2U6IGB4ZnJtX3N0YXRlX2FkZGAsIGB4ZnJtX3N0YXRlX3VwZGF0ZWAsIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAsIGFuZCBgeGZybV9zdGF0ZV93YWxrYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS4KCk15IHJlYXNvbmluZz8gVGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgbW9kaWZpZXMgaG93IHRoZSBYRlJNIE5BVCBrZWVwYWxpdmUgd29ya3F1ZXVlIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBzd2FwcGluZyBvdXQgZHluYW1pYyBhbGxvY2F0aW9uIG9mIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZWAgZm9yIGEgc3RhY2stYmFzZWQsIGZpeGVkLXNpemUgYXJyYXkuIFRoaXMgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHN0YXRlcyBhcmUgaXRlcmF0ZWQgdGhyb3VnaCBhbmQgbWFuYWdlZC4gSXQmIzM5O3MgYSBjb3JlIGNoYW5nZSB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBwZXJmb3JtYW5jZSBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoaXMgY2hhbmdlIGlzIHRyaWdnZXJlZCB0aHJvdWdoIG5ldGxpbmsgY29uZmlndXJhdGlvbiBvZiBJUHNlYyBTZWN1cml0eSBBc3NvY2lhdGlvbnMgKFNBcykgd2l0aCBhIE5BVCBrZWVwYWxpdmUgaW50ZXJ2YWw7IHNvLCB1c2VyIHNwYWNlIGNhbiB0cmlnZ2VyIHRoaXMgYmVoYXZpb3IuCgpOb3csIGEgcXVpY2sgY2hlY2sgdG8gZW5zdXJlIGJ1aWxkIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGp1c3QgYFhGUk1fVVNFUmAgaXMgc3VmZmljaWVudCB0byBjb21waWxlIGB4ZnJtX25hdF9rZWVwYWxpdmUuY2AuIEkgZXhwZWN0IGl0IHRvIGJlLCBiZWNhdXNlIGBYRlJNYCBpcyBzZWxlY3RlZCBieSBgWEZSTV9VU0VSYCwgYW5kIHRoZSBjb21waWxhdGlvbiBzaG91bGQgcHVsbCBpbiBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gdGhlIFhGUk0gZnJhbWV3b3JrLiBBbmQsIHllcCwgdGhhdCYjMzk7cyB0aGUgY2FzZS4KCk9rYXksIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUga2V5IGFzcGVjdHMgYW5kIGFtIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9zdGF0ZV9hZGQmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV91cGRhdGUmIzM0OywKICAgICYjMzQ7eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV93YWxrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBYRlJNIE5BVCBrZWVwYWxpdmUgd29ya3F1ZXVlIHRvIHVzZSBhIGZpeGVkLXNpemUgYmF0Y2ggYXJyYXkgaW5zdGVhZCBvZiBkeW5hbWljYWxseSBhbGxvY2F0aW5nIHN0YXRlIG9iamVjdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBYRlJNIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IHN0YXRlcyBhcmUgaXRlcmF0ZWQgYW5kIHByb2Nlc3NlZCBkdXJpbmcgTkFUIGtlZXBhbGl2ZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNvbmZpZ3VyaW5nIElQc2VjIFNlY3VyaXR5IEFzc29jaWF0aW9ucyAoU0FzKSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbCB2aWEgbmV0bGluay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3N0YXRlX2FkZCYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZCYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX3dhbGsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFhGUk0gTkFUIGtlZXBhbGl2ZSB3b3JrcXVldWUgdG8gdXNlIGEgZml4ZWQtc2l6ZSBiYXRjaCBhcnJheSBpbnN0ZWFkIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgc3RhdGUgb2JqZWN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFhGUk0gc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgc3RhdGVzIGFyZSBpdGVyYXRlZCBhbmQgcHJvY2Vzc2VkIGR1cmluZyBOQVQga2VlcGFsaXZlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgSVBzZWMgU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQXMpIHdpdGggYSBOQVQga2VlcGFsaXZlIGludGVydmFsIHZpYSBuZXRsaW5rLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGxpbmtlZCBsaXN0IHdpdGggYSBzdGFjay1hbGxvY2F0ZWQgYmF0Y2ggYXJyYXkgKGBiYXRjaGAgaW5zaWRlIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eGApIHRvIGNvbGxlY3QgYHhmcm1fc3RhdGVgIHBvaW50ZXJzIGR1cmluZyBhIHN0YXRlIHdhbGsuIFRoZSBgYmF0Y2hgIGFycmF5IGFuZCBgbnJgIGNvdW50ZXIgYXJlIHVzZWQgc3RyaWN0bHkgbG9jYWxseSB3aXRoaW4gYG5hdF9rZWVwYWxpdmVfd29ya2AgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAuIFRoZSBjb3VudGVyIGBjdHgubnJgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBiZWZvcmUgdGhlIHdhbGssIGFuZCB0aGUgY29kZSBvbmx5IHJlYWRzIHVwIHRvIGBjdHgubnJgIGVsZW1lbnRzIGZyb20gdGhlIGBiYXRjaGAgYXJyYXksIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIGFjY2Vzc2VkLiBGdXJ0aGVybW9yZSwgbm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjQ4NTgyMWE0ODc5OWRjOWZmOTdkZDBmZmQ0YjQ4MjJkNDFlNTc2NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDE5OjUzOjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYwppbmRleCA4Njc5YzY4YzEwYTE2Li41Y2Q2ZDQzMTY0ZGJjIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYwpAQCAtMTU1LDMyICYjNDM7MTU1LDMwIEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpCiAJfQogfQogCiYjNDM7ZW51bSB7CiYjNDM7CU5BVF9LRUVQQUxJVkVfQkFUQ0hfU0laRSA9IDE2LAomIzQzOwlOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEwgPSAxLAomIzQzO307CiYjNDM7CiBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBzdGF0ZXM7CiYjNDM7CXN0cnVjdCB4ZnJtX3N0YXRlICpiYXRjaFtOQVRfS0VFUEFMSVZFX0JBVENIX1NJWkVdOwomIzQzOwl1bnNpZ25lZCBpbnQgbnI7CiAJdGltZTY0X3QgbmV4dF9ydW47CiAJdGltZTY0X3Qgbm93OwogfTsKIAotc3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKLX07Ci0KIHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7Ci0Jc3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlOwogCiAJaWYgKCFSRUFEX09OQ0UoeC0mZ3Q7bmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkpCiAJCXJldHVybiAwOwogCi0Jc3RhdGUgPSBrbWFsbG9jX29iaigqc3RhdGUsIEdGUF9BVE9NSUMpOwotCWlmICghc3RhdGUpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwlpZiAoY3R4LSZndDtuciA9PSBBUlJBWV9TSVpFKGN0eC0mZ3Q7YmF0Y2gpKQomIzQzOwkJcmV0dXJuIE5BVF9LRUVQQUxJVkVfQkFUQ0hfRlVMTDsKIAogCXhmcm1fc3RhdGVfaG9sZCh4KTsKLQlzdGF0ZS0mZ3Q7eCA9IHg7Ci0JbGlzdF9hZGRfdGFpbCgmYW1wO3N0YXRlLSZndDtsaXN0LCAmYW1wO2N0eC0mZ3Q7c3RhdGVzKTsKJiM0MzsJY3R4LSZndDtiYXRjaFtjdHgtJmd0O25yJiM0MzsmIzQzO10gPSB4OwogCXJldHVybiAwOwogfQogCkBAIC0yMjYsMjkgJiM0MzsyMjQsMjcgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAogc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGUsICp0bXA7CiAJc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4OwogCXN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgd2FsazsKIAlzdHJ1Y3QgbmV0ICpuZXQ7Ci0JaW50IGVycjsKJiM0MzsJaW50IGVyciwgaTsKIAotCUlOSVRfTElTVF9IRUFEKCZhbXA7Y3R4LnN0YXRlcyk7CiAJY3R4Lm5leHRfcnVuID0gMDsKIAljdHgubm93ID0ga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpOwogCiAJbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLndvcmspOwogCXhmcm1fc3RhdGVfd2Fsa19pbml0KCZhbXA7d2FsaywgSVBQUk9UT19FU1AsIE5VTEwpOwotCWVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsICZhbXA7d2FsaywgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3QsICZhbXA7Y3R4KTsKJiM0MzsJZG8gewomIzQzOwkJY3R4Lm5yID0gMDsKJiM0MzsJCWVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsICZhbXA7d2FsaywgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3QsICZhbXA7Y3R4KTsKJiM0MzsJCWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBjdHgubnI7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShjdHguYmF0Y2hbaV0sICZhbXA7Y3R4KTsKJiM0MzsJCQl4ZnJtX3N0YXRlX3B1dChjdHguYmF0Y2hbaV0pOwomIzQzOwkJfQomIzQzOwkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CX0gd2hpbGUgKGVyciA9PSBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEwpOwogCXhmcm1fc3RhdGVfd2Fsa19kb25lKCZhbXA7d2FsaywgbmV0KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhdGUsIHRtcCwgJmFtcDtjdHguc3RhdGVzLCBsaXN0KSB7Ci0JCW5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RhdGUtJmd0O3gsICZhbXA7Y3R4KTsKLQkJeGZybV9zdGF0ZV9wdXQoc3RhdGUtJmd0O3gpOwotCQlrZnJlZShzdGF0ZSk7Ci0JfQotCWlmIChlcnIgPT0gLUVOT01FTSkgewotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtuZXQtJmd0O3hmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTsKLQkJcmV0dXJuOwotCX0KIAlpZiAoY3R4Lm5leHRfcnVuKQogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtuZXQtJmd0O3hmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLAogCQkJCSAgICAgIChjdHgubmV4dF9ydW4gLSBjdHgubm93KSAqIEhaKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjMKCQkJCQkJCW91dHB1dDogMjI3CgkJCQkJCQl0aG91Z2h0czogNzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWEZSTSBOQVQgS2VlcGFsaXZlIEJhdGNoaW5nIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGluIGBuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY2AgaXMgY2hhbmdpbmcgaG93IGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgaGFuZGxlcyBgeGZybV9zdGF0ZWAgcG9pbnRlcnMuIEl0IHVzZWQgdG8gYmUgYSBsaW5rZWQgbGlzdCBvZiBgc3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGVgLCBhbGxvY2F0aW5nIG9uZSBmb3IgZWFjaCBgeGZybV9zdGF0ZWAuIE5vdywgd2UmIzM5O3JlIHVzaW5nIGEgZml4ZWQtc2l6ZSwgc3RhY2stYWxsb2NhdGVkIGFycmF5IGNhbGxlZCBgYmF0Y2hgIHdpdGhpbiBhIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eGAuICBUaGUgc2l6ZSBpcyAxNi4gSWYgdGhlIGJhdGNoIGlzIGZ1bGwsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTExgLCB3aGljaCBpcyAxLiBUaGUgbG9vcCBpbiBgbmF0X2tlZXBhbGl2ZV93b3JrYCB3aWxsIHByb2Nlc3MgdGhhdCBiYXRjaCBhbmQgdGhlbiBjb250aW51ZSB0aGUgd2FsayBpZiB3ZSBoaXQgdGhhdCBgTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMYCBlcnJvci4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYGJhdGNoYCBhcnJheSAqaXMqIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgaW5zaWRlIGBuYXRfa2VlcGFsaXZlX3dvcmtgOiBgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykgeyBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCBjdHg7IC4uLiB9YC4gIFRoZSBgY3R4YCBpdHNlbGYgaXNuJiMzOTt0ICpmdWxseSogaW5pdGlhbGl6ZWQuICBJIHNlZSBgY3R4Lm5leHRfcnVuYCBhbmQgYGN0eC5ub3dgIGFyZSBpbml0aWFsaXplZCwgYW5kIGBjdHgubnJgIGdldHMgc2V0IHRvIDAgaW5zaWRlIHRoZSBgZG8geyAuLi4gfSB3aGlsZWAgbG9vcC4gIFRoZSBgYmF0Y2hgIGFycmF5IGl0c2VsZiBpcyAqbm90KiBleHBsaWNpdGx5IGluaXRpYWxpemVkLiAgQnV0LCAqd2hldyosIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgb25seSAqd3JpdGVzKiB0byB0aGUgYGJhdGNoYCDigJMgYGN0eC5iYXRjaFtjdHgubnImIzQzOyYjNDM7XSA9IHg7YC4gVGhlIGxvb3AgbGF0ZXIgb25seSAqcmVhZHMqIGVsZW1lbnRzIHRoYXQgKmhhdmUqIGJlZW4gd3JpdHRlbiB0byDigJMgIGBmb3IgKGkgPSAwOyBpICZsdDsgY3R4Lm5yOyBpJiM0MzsmIzQzOykgeyBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKGN0eC5iYXRjaFtpXSwgJmFtcDtjdHgpOyAuLi4gfWAuICBTbyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSAqcmVhZHMqIGluIHRoZSBjcml0aWNhbCBwYXRoLiBHb29kLiBBbmQgd2UgYXJlbiYjMzk7dCBjb3B5aW5nIHRoZSBjb250ZXh0IHRvIHVzZXJzcGFjZSwgc28gbm8gaW5mbyBsZWFrIHJpc2suCgpPa2F5LCBsZXQmIzM5O3MgbG9vayBmb3IgYSBkaWZmZXJlbnQgdHlwZSBvZiBpc3N1ZSwgbGlrZSBgY3R4Lm5yYCBiZWluZyB1c2VkIGJlZm9yZSBpbml0aWFsaXplZC4gQWgsIG5vLCBgY3R4Lm5yYCBpcyBzZXQgdG8gMCByaWdodCBiZWZvcmUgYHhmcm1fc3RhdGVfd2Fsa2AgaXMgY2FsbGVkLCBzbyBpdCYjMzk7cyBpbml0aWFsaXplZCBjb3JyZWN0bHkgdGhlcmUuICBHb29kLgoKQmFzaWNhbGx5LCB0aGlzIHBhdGNoIGlzIGp1c3QgdHJhZGluZyBkeW5hbWljIGFsbG9jYXRpb24gKGxpbmtlZCBsaXN0KSBmb3IgYSBzdGFjay1iYXNlZCBiYXRjaCBhcnJheSB0byBkb2RnZSBga21hbGxvY19vYmpgIGFuZCBgLUVOT01FTWAgaXNzdWVzLiAgU3RhbmRhcmQgb3B0aW1pemF0aW9uIHN0dWZmLgoKVGhlIHR5cGljYWwgYnVncyBoZXJlIGFyZSBnb2luZyB0byBiZSBsb2dpYyBidWdzLCBvdXQtb2YtYm91bmRzIGFjY2VzcyAoYnV0IHdlIGhhdmUgYSBjaGVjayBmb3IgdGhhdCBgY3R4Lm5yID09IEFSUkFZX1NJWkUoY3R4LmJhdGNoKWApLCBvciB1c2UtYWZ0ZXItZnJlZS4gVGhlc2Uga2luZHMgb2YgdGhpbmdzIHNob3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIHNvIHRoYXQmIzM5O3MgZ29vZC4gTm8gdW5pbml0aWFsaXplZCByZWFkLiBObyBpbmZvIGxlYWsuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHJlLXZlcmlmeSB0aGUgaW50ZXJhY3Rpb24gaW4gIGB4ZnJtX3N0YXRlX3dhbGtgIGFuZCBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgIHdoZXJlIHdlIHdyaXRlIHRvIHRoZSBhcnJheTogYGlmIChjdHgtJmd0O25yID09IEFSUkFZX1NJWkUoY3R4LSZndDtiYXRjaCkpIHJldHVybiBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEw7ICB4ZnJtX3N0YXRlX2hvbGQoeCk7IGN0eC0mZ3Q7YmF0Y2hbY3R4LSZndDtuciYjNDM7JiM0MztdID0geDsgcmV0dXJuIDA7YC4gWWVwLCB0aGF0JiMzOTtzIGNsZWFuLiBgeGZybV9zdGF0ZV9ob2xkYCBnaXZlcyB1cyBzYWZldHkuCgpJIHRoaW5rIHdlJiMzOTtyZSBnb29kLiBObyBuZWVkIHRvIGZsYWcgdGhpcyBmb3IgS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGxpbmtlZCBsaXN0IHdpdGggYSBzdGFjay1hbGxvY2F0ZWQgYmF0Y2ggYXJyYXkgKGBiYXRjaGAgaW5zaWRlIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eGApIHRvIGNvbGxlY3QgYHhmcm1fc3RhdGVgIHBvaW50ZXJzIGR1cmluZyBhIHN0YXRlIHdhbGsuIFRoZSBgYmF0Y2hgIGFycmF5IGFuZCBgbnJgIGNvdW50ZXIgYXJlIHVzZWQgc3RyaWN0bHkgbG9jYWxseSB3aXRoaW4gYG5hdF9rZWVwYWxpdmVfd29ya2AgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAuIFRoZSBjb3VudGVyIGBjdHgubnJgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBiZWZvcmUgdGhlIHdhbGssIGFuZCB0aGUgY29kZSBvbmx5IHJlYWRzIHVwIHRvIGBjdHgubnJgIGVsZW1lbnRzIGZyb20gdGhlIGBiYXRjaGAgYXJyYXksIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIGFjY2Vzc2VkLiBGdXJ0aGVybW9yZSwgbm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGxpbmtlZCBsaXN0IHdpdGggYSBzdGFjay1hbGxvY2F0ZWQgYmF0Y2ggYXJyYXkgKGBiYXRjaGAgaW5zaWRlIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eGApIHRvIGNvbGxlY3QgYHhmcm1fc3RhdGVgIHBvaW50ZXJzIGR1cmluZyBhIHN0YXRlIHdhbGsuIFRoZSBgYmF0Y2hgIGFycmF5IGFuZCBgbnJgIGNvdW50ZXIgYXJlIHVzZWQgc3RyaWN0bHkgbG9jYWxseSB3aXRoaW4gYG5hdF9rZWVwYWxpdmVfd29ya2AgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAuIFRoZSBjb3VudGVyIGBjdHgubnJgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBiZWZvcmUgdGhlIHdhbGssIGFuZCB0aGUgY29kZSBvbmx5IHJlYWRzIHVwIHRvIGBjdHgubnJgIGVsZW1lbnRzIGZyb20gdGhlIGBiYXRjaGAgYXJyYXksIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIGFjY2Vzc2VkLiBGdXJ0aGVybW9yZSwgbm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTM6MTguNjYwOTE5NjkzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTkxODQ0OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIlhGUk1fVVNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fc3RhdGVfYWRkXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX3VwZGF0ZVwiLFxuICAgIFwieGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRcIixcbiAgICBcInhmcm1fc3RhdGVfd2Fsa1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbGlua2VkIGxpc3Qgd2l0aCBhIHN0YWNrLWFsbG9jYXRlZCBiYXRjaCBhcnJheSAoYGJhdGNoYCBpbnNpZGUgYHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4YCkgdG8gY29sbGVjdCBgeGZybV9zdGF0ZWAgcG9pbnRlcnMgZHVyaW5nIGEgc3RhdGUgd2Fsay4gVGhlIGBiYXRjaGAgYXJyYXkgYW5kIGBucmAgY291bnRlciBhcmUgdXNlZCBzdHJpY3RseSBsb2NhbGx5IHdpdGhpbiBgbmF0X2tlZXBhbGl2ZV93b3JrYCBhbmQgYG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0YC4gVGhlIGNvdW50ZXIgYGN0eC5ucmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGJlZm9yZSB0aGUgd2FsaywgYW5kIHRoZSBjb2RlIG9ubHkgcmVhZHMgdXAgdG8gYGN0eC5ucmAgZWxlbWVudHMgZnJvbSB0aGUgYGJhdGNoYCBhcnJheSwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgYWNjZXNzZWQuIEZ1cnRoZXJtb3JlLCBub25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG1lYW5pbmcgdGhlcmUgaXMgbm8gcmlzayBvZiBhbiBpbmZvLWxlYWsuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBYRlJNIE5BVCBrZWVwYWxpdmUgd29ya3F1ZXVlIHRvIHVzZSBhIGZpeGVkLXNpemUgYmF0Y2ggYXJyYXkgaW5zdGVhZCBvZiBkeW5hbWljYWxseSBhbGxvY2F0aW5nIHN0YXRlIG9iamVjdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBYRlJNIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IHN0YXRlcyBhcmUgaXRlcmF0ZWQgYW5kIHByb2Nlc3NlZCBkdXJpbmcgTkFUIGtlZXBhbGl2ZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNvbmZpZ3VyaW5nIElQc2VjIFNlY3VyaXR5IEFzc29jaWF0aW9ucyAoU0FzKSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbCB2aWEgbmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTM6MTguNjYwOTI0NjAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3OTY2ODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjQ4NTgyMWE0ODc5OWRjOWZmOTdkZDBmZmQ0YjQ4MjJkNDFlNTc2NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxOTo1MzoxNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXFxuaW5kZXggODY3OWM2OGMxMGExNi4uNWNkNmQ0MzE2NGRiYyAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXFxuQEAgLTE1NSwzMiArMTU1LDMwIEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXFxuIFxcdH1cXG4gfVxcbiBcXG4rZW51bSB7XFxuK1xcdE5BVF9LRUVQQUxJVkVfQkFUQ0hfU0laRSA9IDE2LFxcbitcXHROQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEwgPSAxLFxcbit9O1xcbitcXG4gc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHN0YXRlcztcXG4rXFx0c3RydWN0IHhmcm1fc3RhdGUgKmJhdGNoW05BVF9LRUVQQUxJVkVfQkFUQ0hfU0laRV07XFxuK1xcdHVuc2lnbmVkIGludCBucjtcXG4gXFx0dGltZTY0X3QgbmV4dF9ydW47XFxuIFxcdHRpbWU2NF90IG5vdztcXG4gfTtcXG4gXFxuLXN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlIHtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbi1cXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG4tfTtcXG4tXFxuIHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxcbiB7XFxuIFxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XFxuLVxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZTtcXG4gXFxuIFxcdGlmICghUkVBRF9PTkNFKHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHN0YXRlID0ga21hbGxvY19vYmooKnN0YXRlLCBHRlBfQVRPTUlDKTtcXG4tXFx0aWYgKCFzdGF0ZSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdGlmIChjdHgtXFx1MDAzZW5yID09IEFSUkFZX1NJWkUoY3R4LVxcdTAwM2ViYXRjaCkpXFxuK1xcdFxcdHJldHVybiBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEw7XFxuIFxcbiBcXHR4ZnJtX3N0YXRlX2hvbGQoeCk7XFxuLVxcdHN0YXRlLVxcdTAwM2V4ID0geDtcXG4tXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2c3RhdGUtXFx1MDAzZWxpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlcyk7XFxuK1xcdGN0eC1cXHUwMDNlYmF0Y2hbY3R4LVxcdTAwM2VucisrXSA9IHg7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yMjYsMjkgKzIyNCwyNyBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbiBcXG4gc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbi1cXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGUsICp0bXA7XFxuIFxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcXG4gXFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuLVxcdGludCBlcnI7XFxuK1xcdGludCBlcnIsIGk7XFxuIFxcbi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y3R4LnN0YXRlcyk7XFxuIFxcdGN0eC5uZXh0X3J1biA9IDA7XFxuIFxcdGN0eC5ub3cgPSBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCk7XFxuIFxcbiBcXHRuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7XFxuIFxcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFxcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7XFxuLVxcdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFxcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXFx1MDAyNmN0eCk7XFxuK1xcdGRvIHtcXG4rXFx0XFx0Y3R4Lm5yID0gMDtcXG4rXFx0XFx0ZXJyID0geGZybV9zdGF0ZV93YWxrKG5ldCwgXFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCBcXHUwMDI2Y3R4KTtcXG4rXFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY3R4Lm5yOyBpKyspIHtcXG4rXFx0XFx0XFx0bmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShjdHguYmF0Y2hbaV0sIFxcdTAwMjZjdHgpO1xcbitcXHRcXHRcXHR4ZnJtX3N0YXRlX3B1dChjdHguYmF0Y2hbaV0pO1xcbitcXHRcXHR9XFxuK1xcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitcXHR9IHdoaWxlIChlcnIgPT0gTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMKTtcXG4gXFx0eGZybV9zdGF0ZV93YWxrX2RvbmUoXFx1MDAyNndhbGssIG5ldCk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGF0ZSwgdG1wLCBcXHUwMDI2Y3R4LnN0YXRlcywgbGlzdCkge1xcbi1cXHRcXHRuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0YXRlLVxcdTAwM2V4LCBcXHUwMDI2Y3R4KTtcXG4tXFx0XFx0eGZybV9zdGF0ZV9wdXQoc3RhdGUtXFx1MDAzZXgpO1xcbi1cXHRcXHRrZnJlZShzdGF0ZSk7XFxuLVxcdH1cXG4tXFx0aWYgKGVyciA9PSAtRU5PTUVNKSB7XFxuLVxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgMCk7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0fVxcbiBcXHRpZiAoY3R4Lm5leHRfcnVuKVxcbiBcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssXFxuIFxcdFxcdFxcdFxcdCAgICAgIChjdHgubmV4dF9ydW4gLSBjdHgubm93KSAqIEhaKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTM6MTkuOTg5NDY5MzA0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTY0MDE3NTY0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9zdGF0ZV9hZGRcIixcbiAgICBcInhmcm1fc3RhdGVfdXBkYXRlXCIsXG4gICAgXCJ4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZFwiLFxuICAgIFwieGZybV9zdGF0ZV93YWxrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFhGUk0gTkFUIGtlZXBhbGl2ZSB3b3JrcXVldWUgdG8gdXNlIGEgZml4ZWQtc2l6ZSBiYXRjaCBhcnJheSBpbnN0ZWFkIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgc3RhdGUgb2JqZWN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFhGUk0gc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgc3RhdGVzIGFyZSBpdGVyYXRlZCBhbmQgcHJvY2Vzc2VkIGR1cmluZyBOQVQga2VlcGFsaXZlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgSVBzZWMgU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQXMpIHdpdGggYSBOQVQga2VlcGFsaXZlIGludGVydmFsIHZpYSBuZXRsaW5rLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNDg1ODIxYTQ4Nzk5ZGM5ZmY5N2RkMGZmZDRiNDgyMmQ0MWU1NzY1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTk6NTM6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5pbmRleCA4Njc5YzY4YzEwYTE2Li41Y2Q2ZDQzMTY0ZGJjIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5AQCAtMTU1LDMyICsxNTUsMzAgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcbiBcdH1cbiB9XG4gXG4rZW51bSB7XG4rXHROQVRfS0VFUEFMSVZFX0JBVENIX1NJWkUgPSAxNixcbitcdE5BVF9LRUVQQUxJVkVfQkFUQ0hfRlVMTCA9IDEsXG4rfTtcbitcbiBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIHN0YXRlcztcbitcdHN0cnVjdCB4ZnJtX3N0YXRlICpiYXRjaFtOQVRfS0VFUEFMSVZFX0JBVENIX1NJWkVdO1xuK1x0dW5zaWduZWQgaW50IG5yO1xuIFx0dGltZTY0X3QgbmV4dF9ydW47XG4gXHR0aW1lNjRfdCBub3c7XG4gfTtcbiBcbi1zdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4tXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbi19O1xuLVxuIHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuIHtcbiBcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XG4tXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZSAqc3RhdGU7XG4gXG4gXHRpZiAoIVJFQURfT05DRSh4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHN0YXRlID0ga21hbGxvY19vYmooKnN0YXRlLCBHRlBfQVRPTUlDKTtcbi1cdGlmICghc3RhdGUpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKGN0eC1cdTAwM2VuciA9PSBBUlJBWV9TSVpFKGN0eC1cdTAwM2ViYXRjaCkpXG4rXHRcdHJldHVybiBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEw7XG4gXG4gXHR4ZnJtX3N0YXRlX2hvbGQoeCk7XG4tXHRzdGF0ZS1cdTAwM2V4ID0geDtcbi1cdGxpc3RfYWRkX3RhaWwoXHUwMDI2c3RhdGUtXHUwMDNlbGlzdCwgXHUwMDI2Y3R4LVx1MDAzZXN0YXRlcyk7XG4rXHRjdHgtXHUwMDNlYmF0Y2hbY3R4LVx1MDAzZW5yKytdID0geDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMjYsMjkgKzIyNCwyNyBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFxuIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlLCAqdG1wO1xuIFx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4O1xuIFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuLVx0aW50IGVycjtcbitcdGludCBlcnIsIGk7XG4gXG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHguc3RhdGVzKTtcbiBcdGN0eC5uZXh0X3J1biA9IDA7XG4gXHRjdHgubm93ID0ga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpO1xuIFxuIFx0bmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLndvcmspO1xuIFx0eGZybV9zdGF0ZV93YWxrX2luaXQoXHUwMDI2d2FsaywgSVBQUk9UT19FU1AsIE5VTEwpO1xuLVx0ZXJyID0geGZybV9zdGF0ZV93YWxrKG5ldCwgXHUwMDI2d2FsaywgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3QsIFx1MDAyNmN0eCk7XG4rXHRkbyB7XG4rXHRcdGN0eC5uciA9IDA7XG4rXHRcdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCBcdTAwMjZjdHgpO1xuK1x0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGN0eC5ucjsgaSsrKSB7XG4rXHRcdFx0bmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShjdHguYmF0Y2hbaV0sIFx1MDAyNmN0eCk7XG4rXHRcdFx0eGZybV9zdGF0ZV9wdXQoY3R4LmJhdGNoW2ldKTtcbitcdFx0fVxuK1x0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdH0gd2hpbGUgKGVyciA9PSBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEwpO1xuIFx0eGZybV9zdGF0ZV93YWxrX2RvbmUoXHUwMDI2d2FsaywgbmV0KTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGF0ZSwgdG1wLCBcdTAwMjZjdHguc3RhdGVzLCBsaXN0KSB7XG4tXHRcdG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RhdGUtXHUwMDNleCwgXHUwMDI2Y3R4KTtcbi1cdFx0eGZybV9zdGF0ZV9wdXQoc3RhdGUtXHUwMDNleCk7XG4tXHRcdGtmcmVlKHN0YXRlKTtcbi1cdH1cbi1cdGlmIChlcnIgPT0gLUVOT01FTSkge1xuLVx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuIFx0aWYgKGN0eC5uZXh0X3J1bilcbiBcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayxcbiBcdFx0XHRcdCAgICAgIChjdHgubmV4dF9ydW4gLSBjdHgubm93KSAqIEhaKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjUzOjE5Ljk4OTQ3MDY3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxMjM1NDUxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIE5BVCBLZWVwYWxpdmUgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jYCwgYW5kIGl0J3MgYSBwcmV0dHkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uLiBJbnN0ZWFkIG9mIHRoZSBkeW5hbWljIGFsbG9jYXRpb24gb2YgYG5hdF9rZWVwYWxpdmVfc3RhdGVgIHN0cnVjdHVyZXMgYW5kIGxpbmtlZCBsaXN0IG1hbmFnZW1lbnQsIHRoZXkndmUgZ29uZSB3aXRoIGEgZml4ZWQtc2l6ZSBiYXRjaCBhcHByb2FjaCB1c2luZyBhIGBiYXRjaFtOQVRfS0VFUEFMSVZFX0JBVENIX1NJWkVdYCBhcnJheSwgd2hpY2ggaXMgc2V0IHRvIDE2IGVsZW1lbnRzLiBUaGF0J3MgYSBkZWZpbml0ZSBzaGlmdC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaWYgdGhlIGJhdGNoIGZpbGxzIHVwIGR1cmluZyBjb2xsZWN0aW9uLCBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgIHJldHVybnMgYE5BVF9LRUVQQUxJVkVfQkFUQ0hfRlVMTGAuIFRoZW4sIGBuYXRfa2VlcGFsaXZlX3dvcmtgIGhhbmRsZXMgYSBsb29wIHRvIHByb2Nlc3MgdGhhdCBiYXRjaCBhbmQgY29udGludWUgaXRlcmF0aW5nLCB3aGljaCBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciB0aGVzZSBzb3J0cyBvZiBiYXRjaGVkIG9wZXJhdGlvbnMuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBJdCdzIGEgY2xlYXIgZWZmaWNpZW5jeSBpbXByb3ZlbWVudCBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0sIHdoaWNoLCBvZiBjb3Vyc2UsIGlzIHBhcnQgb2YgSVBzZWMuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIGhvdyByZWFjaGFibGUgaXMgdGhpcyBjb2RlPyBXaGF0IGFyZSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXM/IEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgcXVpY2sgZ3JlcCBmb3IgYHhmcm1fbmF0X2tlZXBhbGl2ZS5jYCB3aXRoaW4gdGhlIGBuZXQveGZybS9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29udGV4dC4gVGhhdCBzaG91bGQgYXQgbGVhc3QgZ2l2ZSBtZSBhIHN0YXJ0aW5nIHBvaW50IGZvciBkZXRlcm1pbmluZyBpZiB0aGlzIGNvZGUgaXMgZXZlbiBjb21waWxlZCBpbnRvIGEgdHlwaWNhbCBjb25maWd1cmF0aW9uLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIEtjb25maWcgb3B0aW9ucyB0byBzZWUgd2hhdCB0cmlnZ2VycyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgTkFUIGtlZXBhbGl2ZSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTM6MjkuMTEzMDE4MzQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjMxMTY4ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9uYXRfa2VlcGFsaXZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3hmcm0uaD0yMzY1PXN0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX3hmcm1fc3RhdGVfYnBmKHZvaWQpXFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmgtMjM3MC1cXG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3MTppbnQgeGZybV9uYXRfa2VlcGFsaXZlX2luaXQodW5zaWduZWQgc2hvcnQgZmFtaWx5KTtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3Mjp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9maW5pKHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XFxuaW5jbHVkZS9uZXQveGZybS5oOjIzNzM6aW50IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaDoyMzc0OmludCB4ZnJtX25hdF9rZWVwYWxpdmVfbmV0X2Zpbmkoc3RydWN0IG5ldCAqbmV0KTtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MjM3NTp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjM3Ni1cXG4tLVxcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jPTI4MD1pbnQgX19pbml0IHhmcm02X2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTI5OC1cXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYzoyOTk6XFx0cmV0ID0geGZybV9uYXRfa2VlcGFsaXZlX2luaXQoQUZfSU5FVDYpO1xcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTMwMC1cXHRpZiAocmV0KVxcbi0tXFxubmV0L2lwdjYveGZybTZfcG9saWN5LmM9MzE1PXZvaWQgeGZybTZfZmluaSh2b2lkKVxcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTMxNi17XFxubmV0L2lwdjYveGZybTZfcG9saWN5LmM6MzE3OlxcdHhmcm1fbmF0X2tlZXBhbGl2ZV9maW5pKEFGX0lORVQ2KTtcXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0zMTgtXFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZ4ZnJtNl9uZXRfb3BzKTtcXG4tLVxcbm5ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxcXFxuLS1cXG5uZXQveGZybS9NYWtlZmlsZS0xNi1cXHRcXHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTc6XFx0XFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cXG5uZXQveGZybS9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfWEZSTV9TVEFUSVNUSUNTKSArPSB4ZnJtX3Byb2Mub1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMi0vKlxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjM6ICogeGZybV9uYXRfa2VlcGFsaXZlLmNcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy00LSAqXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNzU9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9za19maW5pKHN0cnVjdCBzb2NrX2JoX2xvY2tlZCBfX3BlcmNwdSAqc29ja3MpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yODItXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjgzOnZvaWQgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjg0LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI5My1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyOTQ6aW50IF9fbmV0X2luaXQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yOTUte1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjk5LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMwMDppbnQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9maW5pKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMDEte1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzA1LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMwNjppbnQgeGZybV9uYXRfa2VlcGFsaXZlX2luaXQodW5zaWduZWQgc2hvcnQgZmFtaWx5KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMwNy17XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMjQtfVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMyNTpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX25hdF9rZWVwYWxpdmVfaW5pdCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzI2LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjMyNzp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9maW5pKHVuc2lnbmVkIHNob3J0IGZhbWlseSlcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMjgte1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzM5LX1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzozNDA6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9uYXRfa2VlcGFsaXZlX2ZpbmkpO1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00MzEwPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDMzNS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQzMzY6XFx0cnYgPSB4ZnJtX25hdF9rZWVwYWxpdmVfbmV0X2luaXQobmV0KTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQzMzctXFx0aWYgKHJ2IFxcdTAwM2MgMClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDM1ND1zdGF0aWMgdm9pZCBfX25ldF9leGl0IHhmcm1fbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDM1NS17XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0MzU2OlxcdHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfZmluaShuZXQpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDM1Ny1cXHR4ZnJtX3N5c2N0bF9maW5pKG5ldCk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0MDQ9dm9pZCBfX2luaXQgeGZybV9pbml0KHZvaWQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MTgtXFx0cmVnaXN0ZXJfeGZybV9zdGF0ZV9icGYoKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ0MTk6XFx0eGZybV9uYXRfa2VlcGFsaXZlX2luaXQoQUZfSU5FVCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NDIwLX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz04MTE9aW50IF9feGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtODMyLVxcdFxcdG5ldC1cXHUwMDNleGZybS5zdGF0ZV9udW0tLTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6ODMzOlxcdFxcdHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHgpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MzQtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTE3MjM9c3RhdGljIHZvaWQgX194ZnJtX3N0YXRlX2luc2VydChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNzY3LVxcdHhmcm1faGFzaF9ncm93X2NoZWNrKG5ldCwgeC1cXHUwMDNlYnlkc3QubmV4dCAhPSBOVUxMKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTc2ODpcXHR4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZCh4KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTc2OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjUzOjMwLjY3NjEzOTkxM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODc5MDU1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiAoTkFUKSBLZWVwYWxpdmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY2AuIFRoYXQncyBhIGNsZWFyIGluZGljYXRvciB0aGlzIHJldm9sdmVzIGFyb3VuZCB0aGUgTkFUIGtlZXBhbGl2ZSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgWEZSTSAoSVBzZWMvU2VjdXJpdHkgUG9saWN5IERhdGFiYXNlKSBmcmFtZXdvcmsuIFRoZSBjb2RlJ3MgZ29pbmcgdG8gYmUgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX1hGUk1gIGlzIGRlZmluZWQsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGtub3cgdGhpcyBhcmVhIHF1aXRlIHdlbGwuXG5cblRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBtb2RpZmljYXRpb25zIHRvIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBCYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgIGlzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBnYXRoZXJpbmcgZGF0YSBvciBwcmVwYXJpbmcgYSB0YXNrIHJlbGF0ZWQgdG8ga2VlcGFsaXZlLCBhbmQgYG5hdF9rZWVwYWxpdmVfd29ya2Agc291bmRzIGxpa2UgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmRvZXMqIHRoZSBrZWVwYWxpdmUgcHJvY2Vzc2luZywgbGlrZWx5IHNjaGVkdWxlZCBieSB0aGUgZm9ybWVyLiBOb3cgSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZWNoYW5pY3Mgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIGdyYXNwIHRoZSBpbXBhY3Qgb2YgdGhlIHBhdGNoLiBMZXQncyBkaWcgaW50byB0aGUgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgd2hhdCB0aGV5IGFyZSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI5MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjUzOjM0LjM2NDA1MjEyOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExNjE1NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5hdF9rZWVwYWxpdmVfd29ya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRucy94ZnJtLmg9MzI9c3RydWN0IG5ldG5zX3hmcm0ge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bnMveGZybS5oLTg1LVxcdHN0cnVjdCBtdXRleCB4ZnJtX2NmZ19tdXRleDtcXG5pbmNsdWRlL25ldC9uZXRucy94ZnJtLmg6ODY6XFx0c3RydWN0IGRlbGF5ZWRfd29ya1xcdG5hdF9rZWVwYWxpdmVfd29yaztcXG5pbmNsdWRlL25ldC9uZXRucy94ZnJtLmgtODctfTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTE1OD1lbnVtIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2Mi1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNjM6c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2NC1cXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqYmF0Y2hbTkFUX0tFRVBBTElWRV9CQVRDSF9TSVpFXTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2OS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNzA6c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTcxLXtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNzI6XFx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggKmN0eCA9IHB0cjtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNzMtXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODQtXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTg1OnN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTg2OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHgpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTg3LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIyNC1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyMjU6c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMjYte1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIyNzpcXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCBjdHg7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjI4LVxcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgd2FsaztcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIzNC1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyMzU6XFx0bmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLndvcmspO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIzNi1cXHR4ZnJtX3N0YXRlX3dhbGtfaW5pdChcXHUwMDI2d2FsaywgSVBQUk9UT19FU1AsIE5VTEwpO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjM4LVxcdFxcdGN0eC5uciA9IDA7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjM5OlxcdFxcdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFxcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXFx1MDAyNmN0eCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjQwLVxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNDEtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGN0eC5ucjsgaSsrKSB7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjQyOlxcdFxcdFxcdG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoY3R4LmJhdGNoW2ldLCBcXHUwMDI2Y3R4KTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNDMtXFx0XFx0XFx0eGZybV9zdGF0ZV9wdXQoY3R4LmJhdGNoW2ldKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0OC1cXHRpZiAoY3R4Lm5leHRfcnVuKVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI0OTpcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjUwLVxcdFxcdFxcdFxcdCAgICAgIChjdHgubmV4dF9ydW4gLSBjdHgubm93KSAqIEhaKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTI4Mz12b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjkwLVxcdG5ldCA9IHhzX25ldCh4KTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyOTE6XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yOTItfVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9Mjk0PWludCBfX25ldF9pbml0IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjk1LXtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyOTY6XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssIG5hdF9rZWVwYWxpdmVfd29yayk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjk3LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MzAwPWludCB4ZnJtX25hdF9rZWVwYWxpdmVfbmV0X2Zpbmkoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMwMS17XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MzAyOlxcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmspO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMwMy1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTM6MzUuOTc1Njc2NzU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc5NTM0NDg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhGUk0gTkFUIEtlZXBhbGl2ZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGFuIGludGVyZXN0aW5nIG1vZGlmaWNhdGlvbiB0byB0aGUgWEZSTSBzdWJzeXN0ZW0ncyBOQVQga2VlcGFsaXZlIG1lY2hhbmlzbS4gQmFzaWNhbGx5LCBgbmF0X2tlZXBhbGl2ZV93b3JrYCDigJMgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiDigJMgaGFzIGhhZCBpdHMgc3RhdGUgdHJhdmVyc2FsIGxvZ2ljIHJld29ya2VkLiBUaGUgdHJpZ2dlciBmb3IgdGhpcyB3b3JrcXVldWUgaXMgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCwgd2hpY2ggZ2V0cyBjYWxsZWQgZHVyaW5nIFhGUk0gc3RhdGUgaW5zZXJ0aW9ucyBvciBkZWxldGlvbnMuXG5cblRoZSBnaXN0IG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyBgbmF0X2tlZXBhbGl2ZV93b3JrYCBpdGVyYXRlcyB0aHJvdWdoIFhGUk0gc3RhdGVzLiBOb3csIGluc3RlYWQgb2YgYSBwb3RlbnRpYWxseSB1bmJvdW5kZWQgd2FsaywgaXQgdXNlcyBgeGZybV9zdGF0ZV93YWxrYCB3aXRoIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgYXMgYSBjYWxsYmFjay4gYHhmcm1fc3RhdGVfd2Fsa2AgY2FsbHMgYG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0YCBmb3IgZWFjaCBYRlJNIHN0YXRlLCBhbmQgaW1wb3J0YW50bHksIHRoZSB3YWxrIHN0b3BzIGlmIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgcmV0dXJucyBub24temVyby4gIFRoZSBtb2RpZmljYXRpb24gZW5zdXJlcyBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgIHJldHVybnMgYE5BVF9LRUVQQUxJVkVfQkFUQ0hfRlVMTGAgd2hlbiBhIGRlZmluZWQgYmF0Y2ggaXMgZnVsbCwgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtgIHdpbGwgbG9vcCB3aGlsZSB0aGlzIGVycm9yIGlzIHJldHVybmVkLlxuXG5UaGlzIHNpZ25hbHMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0IHNtZWxscyBsaWtlIGEgZml4IGZvciBhIHBvdGVudGlhbCBtZW1vcnkgaXNzdWUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSBzdGFjayBhbGxvY2F0aW9uLiBTcGVjaWZpY2FsbHksIGluc3RlYWQgb2YgZHluYW1pYyBhbGxvY2F0aW9uLCB0aGlzIGxvb2tzIGxpa2UgdGhleSdyZSBub3cgdXNpbmcgYSBmaXhlZC1zaXplIGFycmF5IG9uIHRoZSBzdGFjaywgd2hpY2ggaXMgYWxtb3N0IGNlcnRhaW5seSBkb25lIHRvIGF2b2lkIE9PTSBjb25kaXRpb25zIG9yIGFsbG9jYXRpb24gZmFpbHVyZXMuIFRoaXMgbWFrZXMgdGhpcyBhcmVhIHJpcGUgZm9yIGZ1enppbmchXG5cbkxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gVGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0YCBhbmQgYG5hdF9rZWVwYWxpdmVfd29ya2AuIGBuYXRfa2VlcGFsaXZlX3dvcmtgIGl0c2VsZiBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgc28gaXQncyBub3QgZGlyZWN0bHkgZXhwb3NlZCBieSBzeXN0ZW0gY2FsbHMsIGJ1dCBpdHMgdHJpZ2dlcmVkIGJ5IGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAuIERpZ2dpbmcgZGVlcGVyLCBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGlzIHRyaWdnZXJlZCBieSBgX194ZnJtX3N0YXRlX2luc2VydGAgYW5kIGBfX3hmcm1fc3RhdGVfZGVsZXRlYC4gVGhhdCBzdWdnZXN0cyBmdXp6aW5nIFhGUk0gc3RhdGUgaW5zZXJ0aW9uIGFuZCBkZWxldGlvbiB0aHJvdWdoIHRoZSBuZXRsaW5rIGludGVyZmFjZSAodXNpbmcgYFhGUk1fTVNHX05FV1NBYCwgYFhGUk1fTVNHX0RFTFNBYCwgYFhGUk1fTVNHX1VQRFNBYCkgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIHRyaWdnZXIgdGhlIGNvZGUgd2UncmUgaW50ZXJlc3RlZCBpbi5cblxuVG8gYmUgcHJlY2lzZSwgdGhlIHByaW1hcnkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgZnVuY3Rpb24sIGFsb25nIHdpdGggYHhmcm1fc3RhdGVfd2Fsa2AsIGB4ZnJtX2FkZF9zYWAsIGFuZCBgeGZybV9kZWxfc2FgLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGlzIGFjdHVhbGx5IGV4cG9zZWQuICBZZXAsIGl0J3MgZGVmaW5lZCBpbiBgbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNgIGFuZCBpcyBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIGB4ZnJtX2FkZF9zYWAgYW5kIGB4ZnJtX2RlbF9zYWAgYXJlIGF2YWlsYWJsZSBpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTM6NDQuNzcxMDI2NzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNDA4NjExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2FkZF9zYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDM4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEwMzk6c3RhdGljIGludCB4ZnJtX2FkZF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDQwLVxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI5Mzc9c3RhdGljIGludCB4ZnJtX2FkZF9wb2xfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzAwMy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDA0OnN0YXRpYyBpbnQgeGZybV9hZGRfc2FfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwMDUtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzQ4LX0geGZybV9kaXNwYXRjaFtYRlJNX05SX01TR1RZUEVTXSA9IHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzQ5OlxcdFtYRlJNX01TR19ORVdTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhICAgICAgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NTAtXFx0W1hGUk1fTVNHX0RFTFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kZWxfc2EgICAgICAgIH0sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzYxLVxcdFtYRlJNX01TR19BQ1FVSVJFICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX2FjcXVpcmUgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NjI6XFx0W1hGUk1fTVNHX0VYUElSRSAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2FfZXhwaXJlIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2My1cXHRbWEZSTV9NU0dfVVBEUE9MSUNZICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9wb2xpY3kgICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzY0OlxcdFtYRlJNX01TR19VUERTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhICAgICAgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NjUtXFx0W1hGUk1fTVNHX1BPTEVYUElSRSAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfcG9sX2V4cGlyZX0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjUzOjQ2LjI3NTExNzM1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODg5OTM0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBDb2RlIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBgWEZSTWAgY29uZmlnIGlzIGVuYWJsZWQuIFRoYXQncyB0aGUgYmFzZWxpbmUuIEJlZm9yZSBkaXZpbmcgaW4gZGVlcGVyLCBJIGFsd2F5cyBsaWtlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IG9yIHJlbGF0ZWQuIEl0J3MgYSBnb29kIHByYWN0aWNlIHRvIGNhc3QgYSB3aWRlIG5ldCBpbml0aWFsbHkuXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY2AuIEdvb2QsIGl0IGNvbmZpcm1zIHRoYXQgYENPTkZJR19YRlJNYCAqaXMqIHVzZWQgdGhlcmUsIHdoaWNoIGF0IGxlYXN0IHZhbGlkYXRlcyBteSBpbml0aWFsIHRob3VnaHQuIE5vdywgSSBzaG91bGQgY2hlY2sgdGhlIGBNYWtlZmlsZWAgaW4gdGhhdCBkaXJlY3RvcnkgKGBuZXQveGZybS9NYWtlZmlsZWApLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGF0IHN1YnN5c3RlbS4gQSBNYWtlZmlsZSBvZnRlbiBwcm92aWRlcyB2aXRhbCBjbHVlcyByZWdhcmRpbmcgb3RoZXIgY29uZmlnIG9wdGlvbnMsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucywgb3IgaG93IGV2ZXJ5dGhpbmcgdGllcyB0b2dldGhlci4gSXQncyBsaWtlIHRoZSBhcmNoaXRlY3R1cmFsIGJsdWVwcmludC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA3MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjUzOjQ5LjQ2NDExMzUwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3OTEwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9uYXRfa2VlcGFsaXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxcXFxuLS1cXG5uZXQveGZybS9NYWtlZmlsZS0xNi1cXHRcXHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTc6XFx0XFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cXG5uZXQveGZybS9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfWEZSTV9TVEFUSVNUSUNTKSArPSB4ZnJtX3Byb2Mub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1Mzo0OS41MDk5MTAzNjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNjA3MDI0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqWEZSTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYFhGUk1gLiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIGJlIHN1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgbmF0dXJhbGx5LCB0aGF0IGBYRlJNYCBpcyB0aGUgKnByaW1hcnkqIGNvbmZpZ3VyYXRpb24gcG9pbnQuIEhvd2V2ZXIsIEkgbmVlZCB0byBjb25zaWRlciBhbGwgYW5nbGVzLiBNeSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byBgWEZSTV9VU0VSYC4gQ291bGQgY29uZmlndXJpbmcgYFhGUk1gIGZyb20gdXNlcnNwYWNlIGJlIGEgZGVwZW5kZW5jeSBoZXJlPyBJdCBvZnRlbiBpcy4gTm93IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by5cblxuTGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIGBuZXQveGZybS9NYWtlZmlsZWAgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gY2hlY2sgZm9yIHRoZSBvYmplY3QgZmlsZSBgeGZybV91c2VyLm9gLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBidWlsZCB0aGVyZSwgbGlrZWx5IGRyaXZlbiBieSB0aGF0IGBYRlJNX1VTRVJgIEtjb25maWcgb3B0aW9uLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIEkgYWxyZWFkeSBoYXZlIGEgc3VzcGljaW9uLiBUaGlzIGlzIHRoZSBwbGFjZSB0byBzb2xpZGlmeSB0aGUgaHlwb3RoZXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjUzOjUzLjQxNTk4MzMzNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3MDg1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV91c2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19YRlJNX0FMR08pICs9IHhmcm1fYWxnby5vXFxubmV0L3hmcm0vTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1hGUk1fVVNFUikgKz0geGZybV91c2VyLm9cXG5uZXQveGZybS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfWEZSTV9VU0VSX0NPTVBBVCkgKz0geGZybV9jb21wYXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1Mzo1My40NjA2OTU5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzUzNDMwOTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGFkZCBzZWN1cml0eSBhc3NvY2lhdGlvbnMgKFNBcykgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIG1lYW5zIEknbSBnb2luZyB0byBuZWVkIGBYRlJNX1VTRVJgLiBNYWtlcyBzZW5zZS4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggdGhpcywgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IHRoZSBhcmNoaXRlY3R1cmU6IERvZXMgdGhlIGBYRlJNYCBmcmFtZXdvcmsgaGF2ZSBhbiBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIHRoZSBgSU5FVGAgc3Vic3lzdGVtPyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gQmVzdCB0byBiZSBzdXJlIHRoaXMgZm91bmRhdGlvbiBpcyBzb2xpZCBiZWZvcmUgSSBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODk5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTM6NTguMjE0MTI5NjAxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM4Mzg2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNDItXFxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNTAtXFxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0vS2NvbmZpZy01Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNzEtXFxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxubmV0L3hmcm0vS2NvbmZpZy03My1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxcbm5ldC94ZnJtL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTA1LVxcbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE0MC1cXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xcbm5ldC94ZnJtL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTU2LVxcbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1Mzo1OC4yNjA1MTg5NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3NjcwNDE0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgWEZSTSBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgVmlzaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgWEZSTWAgaXMgdGhpcyBpbnRlcm5hbCBib29sZWFuLCBjb250cm9sbGVkIGJ5IGBYRlJNX1VTRVJgIGFuZCBzb21lIG90aGVycy4gU28sIGlmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCBgWEZSTV9VU0VSYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiBJJ2QgbmVlZCB0byBlbmFibGUgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSBnb2luZy4gQW5kLCBiZWNhdXNlIGBYRlJNX1VTRVJgIGlzIG5lc3RlZCB1bmRlciBgaWYgSU5FVGAsIGVuYWJsaW5nIGBJTkVUYCBpcyBhIHByZXJlcXVpc2l0ZS4gU28sIGBJTkVUYCBhbmQgYFhGUk1fVVNFUmAgYXJlIHRoZSBrZXkgY29uZmlncyBmb3IgZW5hYmxpbmcgdGhpcy4gR290IGl0LlxuXG5Ob3csIHdoYXQgYWJvdXQgdGhlIHN5bWJvbHMgdGhlbXNlbHZlcz8gSSdtIHRoaW5raW5nIGFib3V0IHRob3NlIHNwZWNpZmljIGZ1bmN0aW9ucyDigJMgYHhmcm1fYWRkX3NhYCwgYHhmcm1fZGVsX3NhYCwgYHhmcm1fc3RhdGVfd2Fsa2AsIGFuZCBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLiBMZXQgbWUgZG91YmxlLWNoZWNrIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAuIElzIGl0IGV4cG9ydGVkPyBIbW0sIGl0J3Mgbm90IGV4cG9ydGVkLiBCdXQgd2FpdCwgaXQncyBhIGdsb2JhbCBmdW5jdGlvbiB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jYC4gVGhhdCdzIGludGVyZXN0aW5nLiBCZWNhdXNlIGl0J3Mgbm90IHN0YXRpYywgaXQgaGFzIGl0cyBvd24gZGlzdGluY3Qgc3ltYm9sLCBkZXNwaXRlIG5vdCBiZWluZyBleHBvcnRlZC5cblxuQWxyaWdodCwgbGV0J3Mgc2hpZnQgYmFjayB0byBgeGZybV9hZGRfc2FgIGFuZCBgeGZybV9kZWxfc2FgLiBBY2NvcmRpbmcgdG8gbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nLCB0aGV5J3JlIHN0YXRpYyB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fdXNlci5jYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gR290dGEgZG91YmxlLWNoZWNrIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTQ6MTEuMDI3NTYzMzI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ2MDIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2FkZF9zYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDM4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEwMzk6c3RhdGljIGludCB4ZnJtX2FkZF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDQwLVxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI5Mzc9c3RhdGljIGludCB4ZnJtX2FkZF9wb2xfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzAwMy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDA0OnN0YXRpYyBpbnQgeGZybV9hZGRfc2FfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwMDUtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzQ4LX0geGZybV9kaXNwYXRjaFtYRlJNX05SX01TR1RZUEVTXSA9IHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzQ5OlxcdFtYRlJNX01TR19ORVdTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhICAgICAgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NTAtXFx0W1hGUk1fTVNHX0RFTFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kZWxfc2EgICAgICAgIH0sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzYxLVxcdFtYRlJNX01TR19BQ1FVSVJFICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX2FjcXVpcmUgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NjI6XFx0W1hGUk1fTVNHX0VYUElSRSAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2FfZXhwaXJlIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2My1cXHRbWEZSTV9NU0dfVVBEUE9MSUNZICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9wb2xpY3kgICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzY0OlxcdFtYRlJNX01TR19VUERTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhICAgICAgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3NjUtXFx0W1hGUk1fTVNHX1BPTEVYUElSRSAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfcG9sX2V4cGlyZX0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjU0OjExLjA3NTAyNzEzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc5NDY0ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIEFQSSBEZXNpZ246IENvbnNpZGVyaW5nIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgYW5kIGB4ZnJtX3N0YXRlX3dhbGtgKipcblxuUmlnaHQsIHNvIHRoZSBwcm9tcHQgZW1waGFzaXplcyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBldmFsdWF0ZSB0aGlzIGNvZGUuIFRoZSBnb2FsIGlzIHRvIG1ha2UgdGhlc2UgZnVuY3Rpb25zIGFjY2Vzc2libGUgYW5kIG1haW50YWluYWJsZSBpbiB0aGUgbG9uZyBydW4uXG5cbmB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgbG9va3MgcHJvbWlzaW5nLCB0aGF0IGlzIGEgZ29vZCBjYW5kaWRhdGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dC4gVGhhdCBzZWVtcyB0byBmaXQgdGhlIHByb2ZpbGUgd2UncmUgYWltaW5nIGZvci5cblxuTm93LCBsZXQncyBjb25zaWRlciBgeGZybV9zdGF0ZV93YWxrYC4gSXQncyBsb2NhdGVkIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLCB3aGljaCBpcyBhIGtleSBhcmVhIG9mIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gZnVsZmlsbHMgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGNyaXRlcmlhLCBhbmQgaWYgaXQgbWFrZXMgc2Vuc2UgYXMgYW4gYWNjZXNzaWJsZSBBUEkgZW5kcG9pbnQuIFRoZSBsb2NhdGlvbiB3aXRoaW4gdGhhdCBmaWxlLCBzdWdnZXN0cyBpdCBsaWtlbHkgZG9lcyBwbGF5IGFuIGltcG9ydGFudCByb2xlLCBidXQgSSBuZWVkIHRvIGRpdmUgZGVlcGVyIHRvIGRldGVybWluZSBpdHMgc3BlY2lmaWMgdXNlIGFuZCBzdWl0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDoxNC42NTQ0OTQxMjhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTIwMzE0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9zdGF0ZV93YWxrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmM9MTY4Nz1zdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfYnlzcGkoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgc3BpLFxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE2OTAtXFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE2OTE6XFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayAqdztcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTY5Mi1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0yNjg0PXN0YXRpYyBib29sIF9feGZybV9zdGF0ZV9maWx0ZXJfbWF0Y2goc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwMC1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjcwMTppbnQgeGZybV9zdGF0ZV93YWxrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsayxcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwMi1cXHRcXHQgICAgaW50ICgqZnVuYykoc3RydWN0IHhmcm1fc3RhdGUgKiwgaW50LCB2b2lkKiksXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwNS1cXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqc3RhdGU7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3MDY6XFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayAqeDtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjcwNy1cXHRpbnQgZXJyID0gMDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzEzLVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ3YWxrLVxcdTAwM2VhbGwpKVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzE0OlxcdFxcdHggPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0uc3RhdGVfYWxsLCBzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrLCBhbGwpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzE1LVxcdGVsc2VcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjcxNjpcXHRcXHR4ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2d2Fsay1cXHUwMDNlYWxsLCBzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrLCBhbGwpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzE3LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbSh4LCBcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnN0YXRlX2FsbCwgYWxsKSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc0MC19XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI3NDE6RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3dhbGspO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzQyLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzQzOnZvaWQgeGZybV9zdGF0ZV93YWxrX2luaXQoc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsaywgdTggcHJvdG8sXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NDQtXFx0XFx0XFx0ICBzdHJ1Y3QgeGZybV9hZGRyZXNzX2ZpbHRlciAqZmlsdGVyKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI3NTEtfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzUyOkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV93YWxrX2luaXQpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzUzLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNzU0OnZvaWQgeGZybV9zdGF0ZV93YWxrX2RvbmUoc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2Fsaywgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzU1LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNzY0LX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjc2NTpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfd2Fsa19kb25lKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjc2Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTQ6MTUuOTY2NTMxMzc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjU2MjI5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGZyb20gYSB0ZWNobmljYWwgcGVyc3BlY3RpdmU6XG5cbioqTXkgUGVyc3BlY3RpdmUgb24gdGhlIFhGUk0gU3Vic3lzdGVtIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgWEZSTSBzdWJzeXN0ZW0gaGFuZGxlcyBleHRlcm5hbCBjb21tdW5pY2F0aW9uLiBJIHNlZSB0aGF0IGB4ZnJtX3N0YXRlX3dhbGtgIGlzIGFuICpleHBvcnRlZCogZnVuY3Rpb24uIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHN1Z2dlc3RzIGl0J3MgZGVzaWduZWQgdG8gYmUgYWNjZXNzZWQgYW5kIHVzZWQgZnJvbSAqb3V0c2lkZSogdGhlIGNvcmUgWEZSTSBtb2R1bGUuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGxpa2VseSBtZWFucyBpdCBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGV4aXN0aW5nIFhGUk0gc3RhdGVzLiBUaGF0J3MgdXNlZnVsIGZvciBhIHZhcmlldHkgb2YgdGFza3Mg4oCTIG1hbmFnZW1lbnQsIG1vbml0b3JpbmcsIG9yIHBvc3NpYmx5IGV2ZW4gZGVidWdnaW5nIHRvb2xzIHRoYXQgbmVlZCB0byBpbnNwZWN0IHRoZSBjdXJyZW50IFhGUk0gY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGl0cyB1c2FnZSB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXQgaXMgdXNlZCBmb3IgYW5kIGlmIGl0IGhhcyBhbnkgY2F2ZWF0cy5cblxuVGhlbiBJIHNlZSBgeGZybV91c2VyX3Jjdl9tc2dgLiBBaGEhIFRoaXMgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGFsbCBOZXRsaW5rIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gWEZSTS4gVGhpcyBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4gTmV0bGluayBpcyB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlIGZvciB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyB0byBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIHN0YWNrLCBhbmQgc28gYHhmcm1fdXNlcl9yY3ZfbXNnYCBpcyBnb2luZyB0byBiZSB0aGUgY2VudHJhbCBwb2ludCB3aGVyZSBhbGwgdGhlIHVzZXItc3BhY2UgcmVxdWVzdHMg4oCTIGZvciBjcmVhdGluZywgbW9kaWZ5aW5nLCBvciBxdWVyeWluZyBYRlJNIHBvbGljaWVzIGFuZCBzdGF0ZXMg4oCTIHdpbGwgY29tZSBpbi4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGRpc3BhdGNoZXIsIHJvdXRpbmcgdGhlc2UgaW5jb21pbmcgTmV0bGluayBtZXNzYWdlcyB0byB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcnMgZm9yIHByb2Nlc3NpbmcuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MgaXMgZ29pbmcgdG8gYmUgY3JpdGljYWwgdG8gc2VjdXJpdHkgaW1wbGljYXRpb25zIHRvby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MzIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDoxOS42OTIxNTY0MjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjU0ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fdXNlcl9yY3ZfbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3ODE9c3RhdGljIGludCB4ZnJtX3JlamVjdF91bnVzZWRfYXR0cihpbnQgdHlwZSwgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzgzNi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozODM3OnN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzgzOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM5MjQ9c3RhdGljIHZvaWQgeGZybV9uZXRsaW5rX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzkyOC1cXHRtdXRleF9sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9jZmdfbXV0ZXgpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM5Mjk6XFx0bmV0bGlua19yY3Zfc2tiKHNrYiwgXFx1MDAyNnhmcm1fdXNlcl9yY3ZfbXNnKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zOTMwLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTQ6MTkuNzQxODE5MDQyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4ODIyOTAxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBQYXRoIEZvcndhcmQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbnBvaW50ZWQgYSBmZXcgcHJvbWlzaW5nIGZvY3VzIHN5bWJvbHMgdGhhdCBJIHRoaW5rIHdhcnJhbnQgaW1tZWRpYXRlIGF0dGVudGlvbjogYHhmcm1fdXNlcl9yY3ZfbXNnYCwgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCwgYW5kIGB4ZnJtX3N0YXRlX3dhbGtgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleXMgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBOQVQga2VlcGFsaXZlIGZ1bmN0aW9uYWxpdHkuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHRoZSByZWFjaGFiaWxpdHkgb2YgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gQSBxdWljayBjaGVjayByZXZlYWxzIGl0J3MgaW5kZWVkIGNhbGxlZCBmcm9tIGBfX3hmcm1fc3RhdGVfaW5zZXJ0YCBhbmQgYF9feGZybV9zdGF0ZV9kZWxldGVgLCBtZWFuaW5nIGl0J3MgdHJpZ2dlcmVkIHdoZW4gU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQXMpIGFyZSBhZGRlZCBvciByZW1vdmVkLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlIHdvcmtxdWV1ZSBpcyBzY2hlZHVsZWQgYnkgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCB3aGljaCBjYWxscyBgbmF0X2tlZXBhbGl2ZV93b3JrYC4gVGhhdCB3b3JrIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggU0FzIHVzaW5nIGB4ZnJtX3N0YXRlX3dhbGtgIGFuZCBjYWxscyBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgLiBZZXAsIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIHdoYXQgSSd2ZSBzZWVuIHNvIGZhciwgYElORVRgIGFuZCBgWEZSTV9VU0VSYCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IHBsYXllcnMuIEJ1dCwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBpbXBhY3QgdGhlIE5BVCBrZWVwYWxpdmUgZnVuY3Rpb24uXG5cbkknbGwgcXVpY2tseSByZXZpc2l0IGBuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY2AgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFhGUk1fVVNFUmAgYWxvbmUgaXMgc3VmZmljaWVudC4gYFhGUk1fVVNFUmAgZG9lcyBzZWxlY3QgYFhGUk1gIGFuZCBkZXBlbmRzIG9uIGBJTkVUYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBub3QgYW55IG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgZm9yIE5BVCBrZWVwYWxpdmUsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTQ6MjUuNjI0MTEwOTI1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA3NTU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTEyPXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQsIG5hdF9rZWVwYWxpdmVfc2tfaXB2NCkgPSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNC19O1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2LXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQsIG5hdF9rZWVwYWxpdmVfc2tfaXB2NikgPSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz00Mj1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy03My1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzo3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy03NS1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0xMTg9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0Ni1cXHRcXHRicmVhaztcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTQ4LVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0zMDY9aW50IHhmcm1fbmF0X2tlZXBhbGl2ZV9pbml0KHVuc2lnbmVkIHNob3J0IGZhbWlseSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMxMy1cXHRcXHRicmVhaztcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzozMTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMzE1LVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0zMjc9dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfZmluaSh1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0zMzItXFx0XFx0YnJlYWs7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MzMzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTMzNC1cXHRjYXNlIEFGX0lORVQ2OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDoyNS42NjkxOTczNDlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NTgwMDQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqU3RyZWFtbGluaW5nIHRoZSBJUHY2IENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIElQdjYgY29uZmlndXJhdGlvbi4gVGhlIHdheSBJIHNlZSBpdCwgdGhlIGN1cnJlbnQgc2V0dXAgaXMgcmVseWluZyBvbiBgQ09ORklHX0lQVjZgLCB3aGljaCBpcyB1bmRlcnN0YW5kYWJsZS4gQnV0IGlmIHdlJ3JlIGFsc28gbWFraW5nIHN1cmUgSVB2NCBpcyBhdmFpbGFibGUsIHdoaWNoIHNlZW1zIHRvIGhhcHBlbiBhcyBsb25nIGFzIGBJTkVUYCBpcyBlbmFibGVkLCB0aGVuIHdlJ3JlIHByb2JhYmx5IGNhcnJ5aW5nIGEgYml0IG1vcmUgYmFnZ2FnZSB0aGFuIG5lY2Vzc2FyeS4gYElORVRgIHNob3VsZCBjb3ZlciBJUHY0LCBvYnZpb3VzbHkuIEFuZCBpZiB3ZSdyZSBvbmx5IGZvY3VzZWQgb24gWEZSTS1yZWxhdGVkIGZ1bmN0aW9uYWxpdHksIGBJTkVUYCBhbG9uZyB3aXRoIGBYRlJNX1VTRVJgIHNob3VsZCBhY3R1YWxseSBjb3ZlciBpdC5cblxuSSB3b25kZXIgaWYgdGhlcmUncyBhIHJlbGF0ZWQgZmxhZyB0byBjb25zaWRlciwgbGlrZSBgWEZSTV9OQVRgIG1heWJlLCBvciBzb21ldGhpbmcgc2ltaWxhciwgdGhhdCB3ZSBzaG91bGQgYmUgY2hlY2tpbmcgYXMgd2VsbD8gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSByZWxhdGVkIGZpbGVzIGFuZCBzZWUgaWYgdGhhdCBpcyBjb3JyZWN0LiBUaGF0IG1pZ2h0IGJlIHRoZSBtaXNzaW5nIHBpZWNlIHRvIG9wdGltaXplIHRoaXMgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0ODcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDoyOS4zNTQ5OTk4MTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDY3MDc2MzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhGUk1fTkFUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDozMC44MDE3MTcwMjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNTUzMjc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgWEZSTSBOQVQgS2VlcGFsaXZlIEludGVydmFsKipcblxuQWxyaWdodCwgbm8gYFhGUk1fTkFUYCBkZWZpbmUsIHNvIGl0J3Mgbm90IGEgY29tcGlsZS10aW1lIG9wdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBOQVQga2VlcGFsaXZlIGlzIGNvbmZpZ3VyZWQuIE15IG5leHQgbW92ZSBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIEknbSBnb2luZyBzdHJhaWdodCB0byBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgYHhmcm1fbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbGAgdmFyaWFibGUgdGhlcmUuIFRoYXQncyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBhbmQgcG90ZW50aWFsIGRlZmF1bHQgdmFsdWUsIG9yIGFueSBzeXNjdGwgb3IgdXNlci1zcGFjZSBjb25maWd1cmF0aW9uLCBzaG91bGQgYmUuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBrZWVwYWxpdmUgaXMgY29udHJvbGxlZCBhdCBydW50aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc4NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjU0OjM0LjAwNzI1MzEwNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNjI5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmF0X2tlZXBhbGl2ZV9pbnRlcnZhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy05NzQtXFx0aWYgKGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjk3NTpcXHRcXHR4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsID1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy05NzYtXFx0XFx0XFx0bmxhX2dldF91MzIoYXR0cnNbWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTF0pO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MTM4Mz1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9zdGF0ZV9leHRyYShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0ODYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTQ4NzpcXHRpZiAoeC1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0ODgtXFx0XFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjE0ODk6XFx0XFx0XFx0XFx0ICB4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNDkwLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMjQxPXN0YXRpYyBpbnQgYnVpbGRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzI4Ny1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMjg4OlxcdGlmIChtLVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzI4OS1cXHRcXHRlcnIgPSBubGFfcHV0X3UzMihza2IsIFhGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUwsXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzI5MDpcXHRcXHRcXHRcXHQgIG0tXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyOTEtXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMDk9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMxNy1cXHRcXHQobS1cXHUwMDNlbWFwcGluZ19tYXhhZ2UgPyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgOiAwKSArXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzMxODpcXHRcXHQobS1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSA6IDApICtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzE5LVxcdFxcdChkaXIgPyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSA6IDApOyAvKiBYRlJNQV9TQV9ESVIgKi9cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzNDM9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDUxLVxcdFxcdFxcdFxcdFxcdCAgICAgICB4LVxcdTAwM2VtYXBwaW5nX21heGFnZSk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzQ1MjpcXHRtLm5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPSBubGFfZ2V0X3UzMl9kZWZhdWx0KGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM0NTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0NTQtXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTA0LVxcdG0ubWFwcGluZ19tYXhhZ2UgPSB4Yy1cXHUwMDNlbWFwcGluZ19tYXhhZ2U7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzUwNTpcXHRtLm5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPSB4Yy1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbDtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTA2LVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9NDAzOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ZnJtX3NhX2xlbihzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwODctXFxubmV0L3hmcm0veGZybV91c2VyLmM6NDA4ODpcXHRpZiAoeC1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbClcXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDg5OlxcdFxcdGwgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy00MDkwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDozNC4wNTM1MTgxNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc0MjI2ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhGUk0gTkFUIEtlZXBhbGl2ZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBrZWVwYWxpdmUgaW50ZXJ2YWwgZm9yIE5BVCBpcyBjb25maWd1cmVkIHRocm91Z2ggdGhlIGBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMYCBhdHRyaWJ1dGUgd2l0aGluIGVpdGhlciBgWEZSTV9NU0dfTkVXU0FgIG9yIGBYRlJNX01TR19VUERTQWAgbWVzc2FnZXMuIFRoaXMgaXMgY2xlYXJseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIOKAkyB0aGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbkxldCdzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyBwdXJwb3NlczpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlLioqIEFic29sdXRlbHkuIFRoaXMgaXMgYSBjb3JlIFhGUk0gc3Vic3lzdGVtIGNoYW5nZS5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZSBYRlJNIE5BVCBrZWVwYWxpdmUgd29ya3F1ZXVlIGhhbmRsZXMgc3RhdGUgb2JqZWN0cy4gSXTigJlzIG1vdmluZyBmcm9tIGR5bmFtaWMgYWxsb2NhdGlvbiB0byBhIGZpeGVkLXNpemUgYmF0Y2ggYXJyYXksIHdoaWNoIGltcGFjdHMgaXRlcmF0aW9uIGFuZCBwcm9jZXNzaW5nLiBUaGF0J3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIHNoaWZ0IGFuZCBvcGVucyB0aGUgZG9vciBmb3IgcG90ZW50aWFsIGlzc3Vlcy5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBJIHNob3VsZCBiZSB0YXJnZXRpbmcgYHhmcm1fdXNlcl9yY3ZfbXNnYCwgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCwgYW5kIGB4ZnJtX3N0YXRlX3dhbGtgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2UuXG4qICAgKipFbmFibGVDb25maWdzOioqIEkgc2hvdWxkIGJlIHRlc3Rpbmcgd2l0aCBgSU5FVGAgYW5kIGBYRlJNX1VTRVJgIGVuYWJsZWQuXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgYHhmcm1fdXNlcl9yY3ZfbXNnYCBpcyBzdGF0aWMuIFRoYXQncyBhIHByb2JsZW0sIGdpdmVuIHRoZSBndWlkZWxpbmUgdG8gcHJlZmVyIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBiZSBsb29raW5nIGZvciBhIGJldHRlciBjYW5kaWRhdGUuIFRoZSBwcm9tcHQgc3VnZ2VzdHMgKm5vdCogdXNpbmcgc3RhdGljLCBpbmxpbmVkIGhlbHBlciBmdW5jdGlvbnMuIExldCBtZSBjaGVja+KApiBJcyBgeGZybV9uZXRsaW5rX3JjdmAgYWxzbyBzdGF0aWM/IE5vLCB3YWl0ISBPciBtYXliZSBgeGZybV91c2VyX2luaXRgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYW5kIG1ha2Ugc3VyZSBJJ20gdGFyZ2V0aW5nIHRoZSByaWdodCBlbnRyeSBwb2ludCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxNDMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTQ6MzkuNjI3NzQ4MDAyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI5MTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX25ldGxpbmtfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTM4Mzc9c3RhdGljIGludCB4ZnJtX3VzZXJfcmN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM5MjMtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzkyNDpzdGF0aWMgdm9pZCB4ZnJtX25ldGxpbmtfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzkyNS17XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00NjEyPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtX3VzZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDYxNi1cXHRcXHQuZ3JvdXBzXFx0PSBYRlJNTkxHUlBfTUFYLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQ2MTc6XFx0XFx0LmlucHV0XFx0PSB4ZnJtX25ldGxpbmtfcmN2LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQ2MTgtXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTQ6MzkuNjc1MDQxNzU2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzOTUwODMyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOlxuXG4qKlRoaW5raW5nIFRocm91Z2ggWEZSTSBGdW5jdGlvbiBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgWEZSTSBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlaXIgc2NvcGUuIGB4ZnJtX25ldGxpbmtfcmN2YC4uLiB0aGF0IG9uZSdzIHN0YXRpYy4gUmlnaHQsIHRoYXQgbWVhbnMgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIE5vIGJpZyBkZWFsLCBwcmV0dHkgc3RhbmRhcmQgZm9yIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuXG5cbk5vdywgd2hhdCBhYm91dCBgeGZybV9zdGF0ZV93YWxrYD8gQWgsIHllcywgSSByZW1lbWJlciB0aGF0IG9uZS4gSXQgKmlzKiBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMgb3IgZXZlbiB1c2VyIHNwYWNlLCBwcm9iYWJseSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggdGhlIHN0YXRlcy4gVGhhdCBtYWtlcyBzZW5zZS5cblxuTmV4dCBvbiB0aGUgbGlzdCwgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYC4gSG1tLCBub3Qgc3RhdGljIGVpdGhlci4gVGhhdCBzdWdnZXN0cyBpdCdzIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBleHRlcm5hbGx5LCBwZXJoYXBzIGJ5IHNvbWUgb3RoZXIgcGFydCBvZiB0aGUgTkFUIGtlZXBhbGl2ZSBtZWNoYW5pc20uIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBjYWxscyB0byB0aGF0IGFuZCBzZWUgd2hhdCdzIHVzaW5nIGl0LlxuXG5BbmQgZmluYWxseSwgYHhmcm1fc3RhdGVfYWRkYC4gWWVhaCwgdGhhdCdzIGRlZmluaXRlbHkgbm90IHN0YXRpYy4gSXQgaXMgcHJvYmFibHkgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB0byBhZGQgbmV3IHhmcm0gc3RhdGVzLiBUaGlzIGlzIGFuIGltcG9ydGFudCBmdW5jdGlvbi5cblxuU28sIGluIGVzc2VuY2UsIEknbSBqdXN0IHF1aWNrbHkgYXNzZXNzaW5nIHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW50ZXJuYWwgYW5kIHdoaWNoIG9uZXMgYXJlIGludGVuZGVkIGZvciBicm9hZGVyIHVzZS4gVGhpcyBnaXZlcyBtZSBhIHF1aWNrIHNlbnNlIG9mIHRoZSBtb2R1bGUncyBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJdCBpbmZvcm1zIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgbGllcywgYW5kIHdoZXJlIHRoZSBleHRlbnNpb24gcG9pbnRzIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwODYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDo0NS4wNzAxMjcxMjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzY5NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc3RhdGVfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmM9MTM1Nj14ZnJtX3N0YXRlX2ZpbmQoY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTM5My1cXHRcXHQgICAgISh4LVxcdTAwM2Vwcm9wcy5mbGFncyBcXHUwMDI2IFhGUk1fU1RBVEVfV0lMRFJFQ1YpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEzOTQ6XFx0XFx0ICAgIHhmcm1fc3RhdGVfYWRkcl9jaGVjayh4LCBkYWRkciwgc2FkZHIsIGVuY2FwX2ZhbWlseSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTM5NS1cXHRcXHQgICAgdG1wbC1cXHUwMDNlbW9kZSA9PSB4LVxcdTAwM2Vwcm9wcy5tb2RlIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQ1MS1cXHRcXHQgICAgISh4LVxcdTAwM2Vwcm9wcy5mbGFncyBcXHUwMDI2IFhGUk1fU1RBVEVfV0lMRFJFQ1YpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE0NTI6XFx0XFx0ICAgIHhmcm1fc3RhdGVfYWRkcl9jaGVjayh4LCBkYWRkciwgc2FkZHIsIGVuY2FwX2ZhbWlseSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQ1My1cXHRcXHQgICAgdG1wbC1cXHUwMDNlbW9kZSA9PSB4LVxcdTAwM2Vwcm9wcy5tb2RlIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTY1ND14ZnJtX3N0YXRlb25seV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssIHUzMiBpZl9pZCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjY4LVxcdFxcdCAgICAhKHgtXFx1MDAzZXByb3BzLmZsYWdzIFxcdTAwMjYgWEZSTV9TVEFURV9XSUxEUkVDVikgXFx1MDAyNlxcdTAwMjZcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTY2OTpcXHRcXHQgICAgeGZybV9zdGF0ZV9hZGRyX2NoZWNrKHgsIGRhZGRyLCBzYWRkciwgZmFtaWx5KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjcwLVxcdFxcdCAgICBtb2RlID09IHgtXFx1MDAzZXByb3BzLm1vZGUgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xODkzPXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX2ZpbmRfYWNxX2J5c2VxKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssIHUzMiBzZXEsIHUzMiBwY3B1X251bSk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE4OTQtXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE4OTU6aW50IHhmcm1fc3RhdGVfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xODk2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xOTQ4LX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTk0OTpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfYWRkKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTk1MC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0yMTc4PWludCB4ZnJtX3N0YXRlX21pZ3JhdGVfaW5zdGFsbChjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMTkwLVxcdH0gZWxzZSB7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjIxOTE6XFx0XFx0aWYgKHhmcm1fc3RhdGVfYWRkKHhjKSBcXHUwMDNjIDApIHtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjE5Mi1cXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGYWlsZWQgdG8gYWRkIG1pZ3JhdGVkIHN0YXRlXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjU0OjQ1LjExNzkwMDA1NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk2NDYwMDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZXNlIGZ1bmN0aW9uczpcblxuKipFeGFtaW5pbmcgdGhlIFhGUk0gU3RhdGUgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkgc2VlIGB4ZnJtX3N0YXRlX2FkZGAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQncyByZWFkaWx5IGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgdXNlLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbi4gQWRkaW5nIGEgc2VjdXJpdHkgYXNzb2NpYXRpb24gc3RhdGUgdG8gdGhlIFhGUk0gc3Vic3lzdGVtIGlzIGEgY29yZSBvcGVyYXRpb24uIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBUaGVuIEkgbm90aWNlIGB4ZnJtX3N0YXRlX3VwZGF0ZWAgaXMgYWxzbyBleHBvcnRlZC4gSW50ZXJlc3RpbmcuIFRoaXMgY29uZmlybXMgdGhhdCB0aGlzIHN1YnN5c3RlbSBhbGxvd3Mgc3RhdGUgbW9kaWZpY2F0aW9uIGFmdGVyIGNyZWF0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgZmxleGlibGUsIGR5bmFtaWMgZGVzaWduLiBJdCBhbHNvIGltcGxpZXMgdGhlIGV4aXN0ZW5jZSBvZiBsb2dpYyB0byB2YWxpZGF0ZSBhbmQgYXBwbHkgc3RhdGUgY2hhbmdlcywgd2hpY2ggSSdkIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBJIHdlcmUgdXNpbmcgaXQuIE9rYXksIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBkaXJlY3Rpb24gZm9yIGFuYWx5c2lzLiBJJ2xsIGZvY3VzIG9uIHRoZXNlIHR3byBmdW5jdGlvbnMgYW5kIHdvcmsgbXkgd2F5IHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLCBhbmQgbG9vayB0byBzZWUgdGhlIHN0cnVjdHVyZXMgdGhhdCB0aGV5IHdvcmsgd2l0aCwgYW5kIGhvdyB0aGVpciBpbnRlcmFjdGlvbnMuIFRoaXMgc2hvd3MgdGhhdCB0aGUgc3RhdGUgbWFuYWdlbWVudCBjYW4gaGFuZGxlIGJvdGggaW5pdGlhbCBzZXR1cCBhbmQgcnVudGltZSBtb2RpZmljYXRpb25zLCB3aGljaCBpcyBnb29kLiBUaW1lIHRvIGRpdmUgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI3NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjU0OjQ4LjMxNDM2MzY2MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyMDMwNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9zdGF0ZV91cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0yMjIzPUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9taWdyYXRlKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMjI1LVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyMjI2OmludCB4ZnJtX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjIyNy17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjMyNi19XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjIzMjc6RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3VwZGF0ZSk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTIzMjgtXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MjM1Nj1FWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfY2hlY2tfZXhwaXJlKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjM1Ny1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjM1ODp2b2lkIHhmcm1fc3RhdGVfdXBkYXRlX3N0YXRzKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjM1OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjU0OjQ4LjM2MDU2OTg0N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTU3NzI5MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBYRlJNIE5BVCBLZWVwYWxpdmUgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGluIHRoaXMgWEZSTSBOQVQga2VlcGFsaXZlIGNoYW5nZTogYHhmcm1fc3RhdGVfYWRkYCwgYHhmcm1fc3RhdGVfdXBkYXRlYCwgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCwgYW5kIGB4ZnJtX3N0YXRlX3dhbGtgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LlxuXG5NeSByZWFzb25pbmc/IFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IG1vZGlmaWVzIGhvdyB0aGUgWEZSTSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgaXQncyBzd2FwcGluZyBvdXQgZHluYW1pYyBhbGxvY2F0aW9uIG9mIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV9zdGF0ZWAgZm9yIGEgc3RhY2stYmFzZWQsIGZpeGVkLXNpemUgYXJyYXkuIFRoaXMgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHN0YXRlcyBhcmUgaXRlcmF0ZWQgdGhyb3VnaCBhbmQgbWFuYWdlZC4gSXQncyBhIGNvcmUgY2hhbmdlIHdpdGhpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHBlcmZvcm1hbmNlIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhpcyBjaGFuZ2UgaXMgdHJpZ2dlcmVkIHRocm91Z2ggbmV0bGluayBjb25maWd1cmF0aW9uIG9mIElQc2VjIFNlY3VyaXR5IEFzc29jaWF0aW9ucyAoU0FzKSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbDsgc28sIHVzZXIgc3BhY2UgY2FuIHRyaWdnZXIgdGhpcyBiZWhhdmlvci5cblxuTm93LCBhIHF1aWNrIGNoZWNrIHRvIGVuc3VyZSBidWlsZCBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBqdXN0IGBYRlJNX1VTRVJgIGlzIHN1ZmZpY2llbnQgdG8gY29tcGlsZSBgeGZybV9uYXRfa2VlcGFsaXZlLmNgLiBJIGV4cGVjdCBpdCB0byBiZSwgYmVjYXVzZSBgWEZSTWAgaXMgc2VsZWN0ZWQgYnkgYFhGUk1fVVNFUmAsIGFuZCB0aGUgY29tcGlsYXRpb24gc2hvdWxkIHB1bGwgaW4gZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoZSBYRlJNIGZyYW1ld29yay4gQW5kLCB5ZXAsIHRoYXQncyB0aGUgY2FzZS5cblxuT2theSwgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGtleSBhc3BlY3RzIGFuZCBhbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4MzksIk91dHB1dFRva2VucyI6MTYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjU0OjU2LjMxODMwMTEzNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTIxNzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX3N0YXRlX2FkZFwiLFxuICAgIFwieGZybV9zdGF0ZV91cGRhdGVcIixcbiAgICBcInhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX3dhbGtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgWEZSTSBOQVQga2VlcGFsaXZlIHdvcmtxdWV1ZSB0byB1c2UgYSBmaXhlZC1zaXplIGJhdGNoIGFycmF5IGluc3RlYWQgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGluZyBzdGF0ZSBvYmplY3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgWEZSTSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBzdGF0ZXMgYXJlIGl0ZXJhdGVkIGFuZCBwcm9jZXNzZWQgZHVyaW5nIE5BVCBrZWVwYWxpdmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBjb25maWd1cmluZyBJUHNlYyBTZWN1cml0eSBBc3NvY2lhdGlvbnMgKFNBcykgd2l0aCBhIE5BVCBrZWVwYWxpdmUgaW50ZXJ2YWwgdmlhIG5ldGxpbmsuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9zdGF0ZV9hZGRcIixcbiAgICBcInhmcm1fc3RhdGVfdXBkYXRlXCIsXG4gICAgXCJ4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZFwiLFxuICAgIFwieGZybV9zdGF0ZV93YWxrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFhGUk0gTkFUIGtlZXBhbGl2ZSB3b3JrcXVldWUgdG8gdXNlIGEgZml4ZWQtc2l6ZSBiYXRjaCBhcnJheSBpbnN0ZWFkIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgc3RhdGUgb2JqZWN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFhGUk0gc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgc3RhdGVzIGFyZSBpdGVyYXRlZCBhbmQgcHJvY2Vzc2VkIGR1cmluZyBOQVQga2VlcGFsaXZlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgSVBzZWMgU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQXMpIHdpdGggYSBOQVQga2VlcGFsaXZlIGludGVydmFsIHZpYSBuZXRsaW5rLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDo1Ni4zOTEyMjkzNjNaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDYxNTI1NTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTk6NTQ6NTYuMzkxNjUyOTEzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNDYxMDk4MzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBsaW5rZWQgbGlzdCB3aXRoIGEgc3RhY2stYWxsb2NhdGVkIGJhdGNoIGFycmF5IChgYmF0Y2hgIGluc2lkZSBgc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHhgKSB0byBjb2xsZWN0IGB4ZnJtX3N0YXRlYCBwb2ludGVycyBkdXJpbmcgYSBzdGF0ZSB3YWxrLiBUaGUgYGJhdGNoYCBhcnJheSBhbmQgYG5yYCBjb3VudGVyIGFyZSB1c2VkIHN0cmljdGx5IGxvY2FsbHkgd2l0aGluIGBuYXRfa2VlcGFsaXZlX3dvcmtgIGFuZCBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgLiBUaGUgY291bnRlciBgY3R4Lm5yYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgYmVmb3JlIHRoZSB3YWxrLCBhbmQgdGhlIGNvZGUgb25seSByZWFkcyB1cCB0byBgY3R4Lm5yYCBlbGVtZW50cyBmcm9tIHRoZSBgYmF0Y2hgIGFycmF5LCBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyBhY2Nlc3NlZC4gRnVydGhlcm1vcmUsIG5vbmUgb2YgdGhlc2Ugc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbWVhbmluZyB0aGVyZSBpcyBubyByaXNrIG9mIGFuIGluZm8tbGVhay4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2Ugd291bGQgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjQ4NTgyMWE0ODc5OWRjOWZmOTdkZDBmZmQ0YjQ4MjJkNDFlNTc2NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDE5OjUzOjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xuaW5kZXggODY3OWM2OGMxMGExNi4uNWNkNmQ0MzE2NGRiYyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG4rKysgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xuQEAgLTE1NSwzMiArMTU1LDMwIEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXG4gXHR9XG4gfVxuIFxuK2VudW0ge1xuK1x0TkFUX0tFRVBBTElWRV9CQVRDSF9TSVpFID0gMTYsXG4rXHROQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEwgPSAxLFxuK307XG4rXG4gc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xuLVx0c3RydWN0IGxpc3RfaGVhZCBzdGF0ZXM7XG4rXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqYmF0Y2hbTkFUX0tFRVBBTElWRV9CQVRDSF9TSVpFXTtcbitcdHVuc2lnbmVkIGludCBucjtcbiBcdHRpbWU2NF90IG5leHRfcnVuO1xuIFx0dGltZTY0X3Qgbm93O1xuIH07XG4gXG4tc3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUge1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4tfTtcbi1cbiBzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgY291bnQsIHZvaWQgKnB0cilcbiB7XG4gXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCAqY3R4ID0gcHRyO1xuLVx0c3RydWN0IG5hdF9rZWVwYWxpdmVfc3RhdGUgKnN0YXRlO1xuIFxuIFx0aWYgKCFSRUFEX09OQ0UoeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRzdGF0ZSA9IGttYWxsb2Nfb2JqKCpzdGF0ZSwgR0ZQX0FUT01JQyk7XG4tXHRpZiAoIXN0YXRlKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdGlmIChjdHgtXHUwMDNlbnIgPT0gQVJSQVlfU0laRShjdHgtXHUwMDNlYmF0Y2gpKVxuK1x0XHRyZXR1cm4gTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMO1xuIFxuIFx0eGZybV9zdGF0ZV9ob2xkKHgpO1xuLVx0c3RhdGUtXHUwMDNleCA9IHg7XG4tXHRsaXN0X2FkZF90YWlsKFx1MDAyNnN0YXRlLVx1MDAzZWxpc3QsIFx1MDAyNmN0eC1cdTAwM2VzdGF0ZXMpO1xuK1x0Y3R4LVx1MDAzZWJhdGNoW2N0eC1cdTAwM2VucisrXSA9IHg7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjI2LDI5ICsyMjQsMjcgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcbiBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbi1cdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlICpzdGF0ZSwgKnRtcDtcbiBcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgd2FsaztcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbi1cdGludCBlcnI7XG4rXHRpbnQgZXJyLCBpO1xuIFxuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LnN0YXRlcyk7XG4gXHRjdHgubmV4dF9ydW4gPSAwO1xuIFx0Y3R4Lm5vdyA9IGt0aW1lX2dldF9yZWFsX3NlY29uZHMoKTtcbiBcbiBcdG5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0LCB4ZnJtLm5hdF9rZWVwYWxpdmVfd29yay53b3JrKTtcbiBcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFx1MDAyNndhbGssIElQUFJPVE9fRVNQLCBOVUxMKTtcbi1cdGVyciA9IHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19jb2xsZWN0LCBcdTAwMjZjdHgpO1xuK1x0ZG8ge1xuK1x0XHRjdHgubnIgPSAwO1xuK1x0XHRlcnIgPSB4ZnJtX3N0YXRlX3dhbGsobmV0LCBcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdCwgXHUwMDI2Y3R4KTtcbitcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjdHgubnI7IGkrKykge1xuK1x0XHRcdG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoY3R4LmJhdGNoW2ldLCBcdTAwMjZjdHgpO1xuK1x0XHRcdHhmcm1fc3RhdGVfcHV0KGN0eC5iYXRjaFtpXSk7XG4rXHRcdH1cbitcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHR9IHdoaWxlIChlcnIgPT0gTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMKTtcbiBcdHhmcm1fc3RhdGVfd2Fsa19kb25lKFx1MDAyNndhbGssIG5ldCk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhdGUsIHRtcCwgXHUwMDI2Y3R4LnN0YXRlcywgbGlzdCkge1xuLVx0XHRuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlKHN0YXRlLVx1MDAzZXgsIFx1MDAyNmN0eCk7XG4tXHRcdHhmcm1fc3RhdGVfcHV0KHN0YXRlLVx1MDAzZXgpO1xuLVx0XHRrZnJlZShzdGF0ZSk7XG4tXHR9XG4tXHRpZiAoZXJyID09IC1FTk9NRU0pIHtcbi1cdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgMCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbiBcdGlmIChjdHgubmV4dF9ydW4pXG4gXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZuZXQtXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssXG4gXHRcdFx0XHQgICAgICAoY3R4Lm5leHRfcnVuIC0gY3R4Lm5vdykgKiBIWik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NDo1Ni4zOTE2NTM3MjRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0NjEwNzY5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIE5BVCBLZWVwYWxpdmUgQmF0Y2hpbmcgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbiBgbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNgIGlzIGNoYW5naW5nIGhvdyBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgIGhhbmRsZXMgYHhmcm1fc3RhdGVgIHBvaW50ZXJzLiBJdCB1c2VkIHRvIGJlIGEgbGlua2VkIGxpc3Qgb2YgYHN0cnVjdCBuYXRfa2VlcGFsaXZlX3N0YXRlYCwgYWxsb2NhdGluZyBvbmUgZm9yIGVhY2ggYHhmcm1fc3RhdGVgLiBOb3csIHdlJ3JlIHVzaW5nIGEgZml4ZWQtc2l6ZSwgc3RhY2stYWxsb2NhdGVkIGFycmF5IGNhbGxlZCBgYmF0Y2hgIHdpdGhpbiBhIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eGAuICBUaGUgc2l6ZSBpcyAxNi4gSWYgdGhlIGJhdGNoIGlzIGZ1bGwsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTExgLCB3aGljaCBpcyAxLiBUaGUgbG9vcCBpbiBgbmF0X2tlZXBhbGl2ZV93b3JrYCB3aWxsIHByb2Nlc3MgdGhhdCBiYXRjaCBhbmQgdGhlbiBjb250aW51ZSB0aGUgd2FsayBpZiB3ZSBoaXQgdGhhdCBgTkFUX0tFRVBBTElWRV9CQVRDSF9GVUxMYCBlcnJvci5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBzZWUuLi4gdGhlIGBiYXRjaGAgYXJyYXkgKmlzKiBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGluc2lkZSBgbmF0X2tlZXBhbGl2ZV93b3JrYDogYHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspIHsgc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4OyAuLi4gfWAuICBUaGUgYGN0eGAgaXRzZWxmIGlzbid0ICpmdWxseSogaW5pdGlhbGl6ZWQuICBJIHNlZSBgY3R4Lm5leHRfcnVuYCBhbmQgYGN0eC5ub3dgIGFyZSBpbml0aWFsaXplZCwgYW5kIGBjdHgubnJgIGdldHMgc2V0IHRvIDAgaW5zaWRlIHRoZSBgZG8geyAuLi4gfSB3aGlsZWAgbG9vcC4gIFRoZSBgYmF0Y2hgIGFycmF5IGl0c2VsZiBpcyAqbm90KiBleHBsaWNpdGx5IGluaXRpYWxpemVkLiAgQnV0LCAqd2hldyosIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgb25seSAqd3JpdGVzKiB0byB0aGUgYGJhdGNoYCDigJMgYGN0eC5iYXRjaFtjdHgubnIrK10gPSB4O2AuIFRoZSBsb29wIGxhdGVyIG9ubHkgKnJlYWRzKiBlbGVtZW50cyB0aGF0ICpoYXZlKiBiZWVuIHdyaXR0ZW4gdG8g4oCTICBgZm9yIChpID0gMDsgaSBcdTAwM2MgY3R4Lm5yOyBpKyspIHsgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShjdHguYmF0Y2hbaV0sIFx1MDAyNmN0eCk7IC4uLiB9YC4gIFNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpyZWFkcyogaW4gdGhlIGNyaXRpY2FsIHBhdGguIEdvb2QuIEFuZCB3ZSBhcmVuJ3QgY29weWluZyB0aGUgY29udGV4dCB0byB1c2Vyc3BhY2UsIHNvIG5vIGluZm8gbGVhayByaXNrLlxuXG5Pa2F5LCBsZXQncyBsb29rIGZvciBhIGRpZmZlcmVudCB0eXBlIG9mIGlzc3VlLCBsaWtlIGBjdHgubnJgIGJlaW5nIHVzZWQgYmVmb3JlIGluaXRpYWxpemVkLiBBaCwgbm8sIGBjdHgubnJgIGlzIHNldCB0byAwIHJpZ2h0IGJlZm9yZSBgeGZybV9zdGF0ZV93YWxrYCBpcyBjYWxsZWQsIHNvIGl0J3MgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IHRoZXJlLiAgR29vZC5cblxuQmFzaWNhbGx5LCB0aGlzIHBhdGNoIGlzIGp1c3QgdHJhZGluZyBkeW5hbWljIGFsbG9jYXRpb24gKGxpbmtlZCBsaXN0KSBmb3IgYSBzdGFjay1iYXNlZCBiYXRjaCBhcnJheSB0byBkb2RnZSBga21hbGxvY19vYmpgIGFuZCBgLUVOT01FTWAgaXNzdWVzLiAgU3RhbmRhcmQgb3B0aW1pemF0aW9uIHN0dWZmLlxuXG5UaGUgdHlwaWNhbCBidWdzIGhlcmUgYXJlIGdvaW5nIHRvIGJlIGxvZ2ljIGJ1Z3MsIG91dC1vZi1ib3VuZHMgYWNjZXNzIChidXQgd2UgaGF2ZSBhIGNoZWNrIGZvciB0aGF0IGBjdHgubnIgPT0gQVJSQVlfU0laRShjdHguYmF0Y2gpYCksIG9yIHVzZS1hZnRlci1mcmVlLiBUaGVzZSBraW5kcyBvZiB0aGluZ3Mgc2hvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgc28gdGhhdCdzIGdvb2QuIE5vIHVuaW5pdGlhbGl6ZWQgcmVhZC4gTm8gaW5mbyBsZWFrLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgcmUtdmVyaWZ5IHRoZSBpbnRlcmFjdGlvbiBpbiAgYHhmcm1fc3RhdGVfd2Fsa2AgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAgd2hlcmUgd2Ugd3JpdGUgdG8gdGhlIGFycmF5OiBgaWYgKGN0eC1cdTAwM2VuciA9PSBBUlJBWV9TSVpFKGN0eC1cdTAwM2ViYXRjaCkpIHJldHVybiBOQVRfS0VFUEFMSVZFX0JBVENIX0ZVTEw7ICB4ZnJtX3N0YXRlX2hvbGQoeCk7IGN0eC1cdTAwM2ViYXRjaFtjdHgtXHUwMDNlbnIrK10gPSB4OyByZXR1cm4gMDtgLiBZZXAsIHRoYXQncyBjbGVhbi4gYHhmcm1fc3RhdGVfaG9sZGAgZ2l2ZXMgdXMgc2FmZXR5LlxuXG5JIHRoaW5rIHdlJ3JlIGdvb2QuIE5vIG5lZWQgdG8gZmxhZyB0aGlzIGZvciBLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2MywiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo1NTowOC44NTI3MzM2NjZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGxpbmtlZCBsaXN0IHdpdGggYSBzdGFjay1hbGxvY2F0ZWQgYmF0Y2ggYXJyYXkgKGBiYXRjaGAgaW5zaWRlIGBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eGApIHRvIGNvbGxlY3QgYHhmcm1fc3RhdGVgIHBvaW50ZXJzIGR1cmluZyBhIHN0YXRlIHdhbGsuIFRoZSBgYmF0Y2hgIGFycmF5IGFuZCBgbnJgIGNvdW50ZXIgYXJlIHVzZWQgc3RyaWN0bHkgbG9jYWxseSB3aXRoaW4gYG5hdF9rZWVwYWxpdmVfd29ya2AgYW5kIGBuYXRfa2VlcGFsaXZlX3dvcmtfY29sbGVjdGAuIFRoZSBjb3VudGVyIGBjdHgubnJgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBiZWZvcmUgdGhlIHdhbGssIGFuZCB0aGUgY29kZSBvbmx5IHJlYWRzIHVwIHRvIGBjdHgubnJgIGVsZW1lbnRzIGZyb20gdGhlIGBiYXRjaGAgYXJyYXksIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIGFjY2Vzc2VkLiBGdXJ0aGVybW9yZSwgbm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgYW4gaW5mby1sZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBsaW5rZWQgbGlzdCB3aXRoIGEgc3RhY2stYWxsb2NhdGVkIGJhdGNoIGFycmF5IChgYmF0Y2hgIGluc2lkZSBgc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHhgKSB0byBjb2xsZWN0IGB4ZnJtX3N0YXRlYCBwb2ludGVycyBkdXJpbmcgYSBzdGF0ZSB3YWxrLiBUaGUgYGJhdGNoYCBhcnJheSBhbmQgYG5yYCBjb3VudGVyIGFyZSB1c2VkIHN0cmljdGx5IGxvY2FsbHkgd2l0aGluIGBuYXRfa2VlcGFsaXZlX3dvcmtgIGFuZCBgbmF0X2tlZXBhbGl2ZV93b3JrX2NvbGxlY3RgLiBUaGUgY291bnRlciBgY3R4Lm5yYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgYmVmb3JlIHRoZSB3YWxrLCBhbmQgdGhlIGNvZGUgb25seSByZWFkcyB1cCB0byBgY3R4Lm5yYCBlbGVtZW50cyBmcm9tIHRoZSBgYmF0Y2hgIGFycmF5LCBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyBhY2Nlc3NlZC4gRnVydGhlcm1vcmUsIG5vbmUgb2YgdGhlc2Ugc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbWVhbmluZyB0aGVyZSBpcyBubyByaXNrIG9mIGFuIGluZm8tbGVhay4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2Ugd291bGQgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrkwq6[1] Phase: Succeeded StartedAt: 2026-08-17 19:55:20 +0000 UTC FinishedAt: 2026-08-17 19:55:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 19:55:20 +0000 UTC FinishedAt: 2026-08-17 19:55:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2] Phase: Succeeded StartedAt: 2026-08-17 19:55:20 +0000 UTC FinishedAt: 2026-08-17 23:34:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 19:55:20 +0000 UTC FinishedAt: 2026-08-17 23:34:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 19:55:20 +0000 UTC FinishedAt: 2026-08-17 19:55:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 19:55:20 +0000 UTC FinishedAt: 2026-08-17 19:55:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowrkwq6/series-workflowrkwq6-convert-artifact-111073330/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 19:55:30 +0000 UTC FinishedAt: 2026-08-17 20:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 19:55:30 +0000 UTC FinishedAt: 2026-08-17 20:12:14 +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:*7c3d4f6f-6f06-49f3-90e3-cf3d336a6821,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-workflowrkwq6/series-workflowrkwq6-convert-artifact-111073330/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": "cb712595-74ac-4450-8d2f-9bddf0b4cf33", "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-workflowrkwq6/series-workflowrkwq6-build-action-2585471408/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 19:55:30 +0000 UTC FinishedAt: 2026-08-17 20:12:04 +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:*7c3d4f6f-6f06-49f3-90e3-cf3d336a6821,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-workflowrkwq6/series-workflowrkwq6-convert-artifact-111073330/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": "cb712595-74ac-4450-8d2f-9bddf0b4cf33", "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-workflowrkwq6/series-workflowrkwq6-build-action-2585471408/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 20:12:14 +0000 UTC FinishedAt: 2026-08-17 20:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 20:12:14 +0000 UTC FinishedAt: 2026-08-17 20:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 20:12:14 +0000 UTC FinishedAt: 2026-08-17 20:12:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 20:12:14 +0000 UTC FinishedAt: 2026-08-17 20:12:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowrkwq6/series-workflowrkwq6-convert-artifact-673089101/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 20:12:24 +0000 UTC FinishedAt: 2026-08-17 20:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 20:12:24 +0000 UTC FinishedAt: 2026-08-17 20:14:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cb712595-74ac-4450-8d2f-9bddf0b4cf33,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-workflowrkwq6/series-workflowrkwq6-build-action-2585471408/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-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 20:14:28 +0000 UTC FinishedAt: 2026-08-17 20:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 20:14:28 +0000 UTC FinishedAt: 2026-08-17 20:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 20:14:28 +0000 UTC FinishedAt: 2026-08-17 20:31:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 20:14:28 +0000 UTC FinishedAt: 2026-08-17 20:31:12 +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:*7c3d4f6f-6f06-49f3-90e3-cf3d336a6821,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-workflowrkwq6/series-workflowrkwq6-convert-artifact-673089101/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": "5a9a8c0c-0407-4243-af83-766f09378b4e", "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-workflowrkwq6/series-workflowrkwq6-build-action-825603113/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 20:14:28 +0000 UTC FinishedAt: 2026-08-17 20:31:02 +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:*7c3d4f6f-6f06-49f3-90e3-cf3d336a6821,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-workflowrkwq6/series-workflowrkwq6-convert-artifact-673089101/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": "5a9a8c0c-0407-4243-af83-766f09378b4e", "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-workflowrkwq6/series-workflowrkwq6-build-action-825603113/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 20:31:12 +0000 UTC FinishedAt: 2026-08-17 20:31:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 20:31:12 +0000 UTC FinishedAt: 2026-08-17 20:31:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 20:31:12 +0000 UTC FinishedAt: 2026-08-17 20:33:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 20:31:12 +0000 UTC FinishedAt: 2026-08-17 20:33:09 +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:*5a9a8c0c-0407-4243-af83-766f09378b4e,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-workflowrkwq6/series-workflowrkwq6-build-action-825603113/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-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 20:33:19 +0000 UTC FinishedAt: 2026-08-17 23:34:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 20:33:19 +0000 UTC FinishedAt: 2026-08-17 23:34:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*cb712595-74ac-4450-8d2f-9bddf0b4cf33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a9a8c0c-0407-4243-af83-766f09378b4e,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-workflowrkwq6/series-workflowrkwq6-build-action-2585471408/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-workflowrkwq6/series-workflowrkwq6-build-action-825603113/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 20:33:19 +0000 UTC FinishedAt: 2026-08-17 20:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 20:33:19 +0000 UTC FinishedAt: 2026-08-17 20:33:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrkwq6/series-workflowrkwq6-convert-artifact-2274313266/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 20:33:19 +0000 UTC FinishedAt: 2026-08-17 20:33:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 20:33:19 +0000 UTC FinishedAt: 2026-08-17 20:33:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 20:33:19 +0000 UTC FinishedAt: 2026-08-17 20:33:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 20:33:29 +0000 UTC FinishedAt: 2026-08-17 23:34:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrkwq6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_add","xfrm_state_update","xfrm_nat_keepalive_state_updated","xfrm_state_walk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b7c70fcb42ae3b7aba2a392df3fef4489dfbce2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","XFRM_USER"],"series_id":"24f3f9ad-6c0b-4e56-bc00-5856f02cc6d0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 20:33:29 +0000 UTC FinishedAt: 2026-08-17 23:34:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cb712595-74ac-4450-8d2f-9bddf0b4cf33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a9a8c0c-0407-4243-af83-766f09378b4e,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-workflowrkwq6/series-workflowrkwq6-build-action-2585471408/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-workflowrkwq6/series-workflowrkwq6-build-action-825603113/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-workflowrkwq6/series-workflowrkwq6-convert-artifact-2274313266/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,}