Name: series-workflown85pg Phase: Succeeded StartedAt: 2026-09-02 15:00:50 +0000 UTC FinishedAt: 2026-09-02 19:00:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[0] Phase: Succeeded StartedAt: 2026-09-02 15:00:50 +0000 UTC FinishedAt: 2026-09-02 15:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 15:00:50 +0000 UTC FinishedAt: 2026-09-02 15:21:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f7e337d9757e473b892fcc071de0bc1a5b094620", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_VADDR", "DAMON_SYSFS", "HUGETLBFS", "HUGETLB_PAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f7e337d9757e473b892fcc071de0bc1a5b094620", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_VADDR", "DAMON_SYSFS", "HUGETLBFS", "HUGETLB_PAGE" ], "series_id": "793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_get_monitor_folio", "damon_hugetlb_mkold", "damon_folio_mkold", "damon_folio_young", "damon_get_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE1OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyYjMzQ7LAogICAgJiMzNDtkYW1vbl9odWdldGxiX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX2ZvbGlvX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX2ZvbGlvX3lvdW5nJiMzNDssCiAgICAmIzM0O2RhbW9uX2dldF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dGVuZHMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHRvIHN1cHBvcnQgaHVnZXRsYiBmb2xpb3MgZHVyaW5nIHBoeXNpY2FsIGFkZHJlc3MgYWNjZXNzIG1vbml0b3JpbmcgKHBhZGRyKSBhbmQgcGFnZSB0YWJsZSB3YWxrcy4gSXQgcmVmYWN0b3JzIGZvbGlvIGZldGNoaW5nIGFuZCBta29sZC95b3VuZyBoYW5kbGluZyB0byBhY2NvdW50IGZvciBodWdldGxiIGZvbGlvcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgcmV0dXJuIHZhbHVlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGxlZnQgdW5pbml0aWFsaXplZCBpbiBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLiBBbnkgbWVtb3J5IHNhZmV0eSByaXNrcyAoc3VjaCBhcyBmb2xpbyByZWZjb3VudGluZywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgcGFnZSB0YWJsZSB3YWxrIGlzc3VlcykgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBEQU1PTiBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcgdG8gc3VwcG9ydCBodWdldGxiIGZvbGlvcyBieSBpbnRyb2R1Y2luZyBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbygpIGFuZCB1cGRhdGluZyBwYWdlIHRhYmxlIHdhbGsgY2FsbGJhY2tzIChkYW1vbl9mb2xpb19ta29sZCwgZGFtb25fZm9saW9feW91bmcsIGRhbW9uX2h1Z2V0bGJfbWtvbGQpIHRvIGhhbmRsZSBodWdldGxiIHBhZ2VzLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcy9pbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE1OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjk2YTJkMWQ3NTBjNTgyNTc3Njk1OWI3MzUxMTQ2Y2I4ZDkwYTE2ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTU6MTc6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5pbmRleCBmYmRhNzBkOGVhNGQwLi44MDIwN2I1NmM2ZmRhIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbkBAIC0zLDYgJiM0MzszLDcgQEBcbiAgKiBDb21tb24gQ29kZSBmb3IgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xuICAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdldGxiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbXVfbm90aWZpZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VfaWRsZS5oXHUwMDNlXG5AQCAtMTQsMTQgJiM0MzsxNSwyMCBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uL2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtvcHMtY29tbW9uLmhcJiMzNDtcbiBcbiYjNDM7c3RhdGljIGJvb2wgZGFtb25fZm9saW9fYWNjZXB0YWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vbml0b3IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZm9saW9fdGVzdF9scnUoZm9saW8pIHx8XG4mIzQzO1x0XHQobW9uaXRvciBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSk7XG4mIzQzO31cbiYjNDM7XG4gLypcbi0gKiBHZXQgYW4gb25saW5lIHBhZ2UgZm9yIGEgcGZuIGlmIGl0JiMzOTtzIGluIHRoZSBMUlUgbGlzdC4gIE90aGVyd2lzZSwgcmV0dXJuc1xuLSAqIE5VTEwuXG4mIzQzOyAqIEdldCBhbiBvbmxpbmUgcGFnZSBmb3IgYSBwZm4gaWYgaXQmIzM5O3MgaW4gdGhlIExSVSBsaXN0LCBvciBhIGh1Z2V0bGIgZm9saW8gaWZcbiYjNDM7ICogQG1vbml0b3IgaXMgc2V0LiAgT3RoZXJ3aXNlLCByZXR1cm5zIE5VTEwuXG4gICpcbiAgKiBUaGUgYm9keSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHN0b2xlbiBmcm9tIHRoZSAmIzM5O3BhZ2VfaWRsZV9nZXRfZm9saW8oKSYjMzk7LiAgV2VcbiAgKiBzdGVhbCByYXRoZXIgdGhhbiByZXVzZSBpdCBiZWNhdXNlIHRoZSBjb2RlIGlzIHF1aXRlIHNpbXBsZS5cbiAgKi9cbi1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbiYjNDM7c3RhdGljIHN0cnVjdCBmb2xpbyAqX19kYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgbW9uaXRvcilcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19vbmxpbmVfcGFnZShwZm4pO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbkBAIC0zMiwxMyAmIzQzOzM5LDMwIEBAIHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuIFx0aWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSkge1xuJiM0MztcdGlmICh1bmxpa2VseShwYWdlX2ZvbGlvKHBhZ2UpICE9IGZvbGlvKSB8fFxuJiM0MztcdFx0XHQhZGFtb25fZm9saW9fYWNjZXB0YWJsZShmb2xpbywgbW9uaXRvcikpIHtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0Zm9saW8gPSBOVUxMO1xuIFx0fVxuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbiBcbiYjNDM7c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19kYW1vbl9nZXRfZm9saW8ocGZuLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFNhbWUgdG8gZGFtb25fZ2V0X2ZvbGlvKCksIGJ1dCBhbHNvIGFjY2VwdHMgaHVnZXRsYiBmb2xpb3MsIHdoaWNoIGFyZVxuJiM0MzsgKiBtYW5hZ2VkIG91dHNpZGUgb2YgdGhlIExSVSBsaXN0cy4gIEFpbWVkIHRvIGJlIHVzZWQgYnkgYWNjZXNzIG1vbml0b3JpbmdcbiYjNDM7ICogcHJpbWl0aXZlcy4gIERBTU9TIGFjdGlvbnMgdGhhdCBhc3N1bWUgTFJVLW1hbmFnZWQgZm9saW9zIHNob3VsZCBrZWVwIHVzaW5nXG4mIzQzOyAqIGRhbW9uX2dldF9mb2xpbygpLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdHB0ZV90IHB0ZXZhbCA9IHB0ZXBfZ2V0KHB0ZSk7XG5AQCAtOTgsNiAmIzQzOzEyMiwzNSBAQCB2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkclxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4mIzQzO3ZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbiYjNDM7XHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4mIzQzO1xuJiM0MztcdGZvbGlvX2dldChmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGlmIChwdGVfeW91bmcoZW50cnkpKSB7XG4mIzQzO1x0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbiYjNDM7XHRcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcbiYjNDM7XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkcixcbiYjNDM7XHRcdFx0XHQgICAgIGFkZHIgJiM0MzsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpXG4mIzQzO1x0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlZmVyZW5jZWQpXG4mIzQzO1x0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuJiM0MztcbiYjNDM7XHRmb2xpb19zZXRfaWRsZShmb2xpbyk7XG4mIzQzO1x0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbiYjNDM7XG4gI2RlZmluZSBEQU1PTl9NQVhfU1VCU0NPUkVcdCgxMDApXG4gI2RlZmluZSBEQU1PTl9NQVhfQUdFX0lOX0xPR1x0KDMyKVxuIFxuQEAgLTE2MywxMCAmIzQzOzIxNiwxNSBAQCBzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19ta29sZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSkge1xuIFx0XHRhZGRyID0gcHZtdy5hZGRyZXNzO1xuLVx0XHRpZiAocHZtdy5wdGUpXG4tXHRcdFx0ZGFtb25fcHRlcF9ta29sZChwdm13LnB0ZSwgdm1hLCBhZGRyKTtcbi1cdFx0ZWxzZVxuJiM0MztcdFx0aWYgKHB2bXcucHRlKSB7XG4mIzQzO1x0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuJiM0MztcdFx0XHRcdGRhbW9uX2h1Z2V0bGJfbWtvbGQocHZtdy5wdGUsIHZtYS1cdTAwM2V2bV9tbSwgdm1hLFxuJiM0MztcdFx0XHRcdFx0XHRhZGRyKTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdGRhbW9uX3B0ZXBfbWtvbGQocHZtdy5wdGUsIHZtYSwgYWRkcik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuIFx0XHRcdGRhbW9uX3BtZHBfbWtvbGQocHZtdy5wbWQsIHZtYSwgYWRkcik7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTkxLDI3ICYjNDM7MjQ5LDU1IEBAIHZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4mIzQzO3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gKHB0ZV9wcmVzZW50KGVudHJ5KSBcdTAwMjZcdTAwMjYgcHRlX3lvdW5nKGVudHJ5KSkgfHxcbiYjNDM7XHRcdCFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XG4mIzQzO1x0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtXHUwMDNldm1fbW0sIGFkZHIpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7I2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBkYW1vbl9wdGVfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRwdGVfdCBlbnRyeSA9IHB0ZXBfZ2V0KHB0ZSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsIHRoYXQgYWN0dWFsbHkgbWFwXG4mIzQzO1x0ICogcGFnZXMgYXJlIFwmIzM0O29sZFwmIzM0OyBmcm9tIGEgQ1BVIHBlcnNwZWN0aXZlLiBUaGUgTU1VIG5vdGlmaWVyIHRha2VzIGNhcmVcbiYjNDM7XHQgKiBvZiBhbnkgZGV2aWNlIGFzcGVjdHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIChwdGVfcHJlc2VudChlbnRyeSkgXHUwMDI2XHUwMDI2IHB0ZV95b3VuZyhlbnRyeSkpIHx8XG4mIzQzO1x0XHQhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuJiM0MztcdFx0bW11X25vdGlmaWVyX3Rlc3RfeW91bmcodm1hLVx1MDAzZXZtX21tLCBhZGRyKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKVxuIHtcbiBcdGJvb2wgKmFjY2Vzc2VkID0gYXJnO1xuIFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHIsIDApO1xuLVx0cHRlX3QgcHRlO1xuIFxuIFx0KmFjY2Vzc2VkID0gZmFsc2U7XG4gXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbiBcdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbiBcdFx0aWYgKHB2bXcucHRlKSB7XG4tXHRcdFx0cHRlID0gcHRlcF9nZXQocHZtdy5wdGUpO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsIHRoYXRcbi1cdFx0XHQgKiBhY3R1YWxseSBtYXAgcGFnZXMgYXJlIFwmIzM0O29sZFwmIzM0OyBmcm9tIGEgQ1BVIHBlcnNwZWN0aXZlLlxuLVx0XHRcdCAqIFRoZSBNTVUgbm90aWZpZXIgdGFrZXMgY2FyZSBvZiBhbnkgZGV2aWNlIGFzcGVjdHMuXG4tXHRcdFx0ICovXG4tXHRcdFx0KmFjY2Vzc2VkID0gKHB0ZV9wcmVzZW50KHB0ZSkgXHUwMDI2XHUwMDI2IHB0ZV95b3VuZyhwdGUpKSB8fFxuLVx0XHRcdFx0IWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHxcbi1cdFx0XHRcdG1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHZtYS1cdTAwM2V2bV9tbSwgYWRkcik7XG4mIzQzO1x0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuJiM0MztcdFx0XHRcdCphY2Nlc3NlZCA9IGRhbW9uX2h1Z2V0bGJfeW91bmcocHZtdy5wdGUsIHZtYSxcbiYjNDM7XHRcdFx0XHRcdFx0YWRkciwgZm9saW8pO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0KmFjY2Vzc2VkID0gZGFtb25fcHRlX3lvdW5nKHB2bXcucHRlLCB2bWEsXG4mIzQzO1x0XHRcdFx0XHRcdGFkZHIsIGZvbGlvKTtcbiBcdFx0fSBlbHNlIHtcbiAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXHRcdFx0cG1kX3QgcG1kID0gcG1kcF9nZXQocHZtdy5wbWQpO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaFxuaW5kZXggMzhkMjk1NDg4ZmExOC4uMTcyZjBmMTdjNGE4NCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG5AQCAtNiw5ICYjNDM7NiwxOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RhbW9uLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XG4mIzQzO3N0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X21vbml0b3JfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xuIFxuIHZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbiB2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG4mIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4mIzQzO3ZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MzsjZW5kaWZcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbiB2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGJvb2wgZGFtb25fZm9saW9feW91bmcoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IDVjNmMzYTU5N2ZkMGIuLmVkN2I3ZjMxMjkxYTAgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMzcsNyAmIzQzOzM3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfY29yZV9hZGRyKFxuIFxuIHN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKVxuIHtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X21vbml0b3JfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcbiBcbiBcdGlmICghZm9saW8pXG4gXHRcdHJldHVybjtcbkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVja3Moc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFxuIHN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyKVxuIHtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X21vbml0b3JfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcbiBcdGJvb2wgYWNjZXNzZWQ7XG4gXG4gXHRpZiAoIWZvbGlvKVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCAwNjQ4NDAwYjJkNjViLi4xNTM3OWQ5ODQ2ODllIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTI5MywzMyAmIzQzOzI5Myw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbi1zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi17XG4tXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbi1cdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuLVx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4tXG4tXHRmb2xpb19nZXQoZm9saW8pO1xuLVxuLVx0aWYgKHB0ZV95b3VuZyhlbnRyeSkpIHtcbi1cdFx0cmVmZXJlbmNlZCA9IHRydWU7XG4tXHRcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcbi1cdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7XG4tXHR9XG4tXG4tXHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxuLVx0XHRcdFx0ICAgICBhZGRyICYjNDM7IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKVxuLVx0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbi1cbi1cdGlmIChyZWZlcmVuY2VkKVxuLVx0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuLVxuLVx0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xuLVx0Zm9saW9fcHV0KGZvbGlvKTtcbi19XG4tXG4gc3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE1OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyYjMzQ7LAogICAgJiMzNDtkYW1vbl9odWdldGxiX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX2ZvbGlvX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX2ZvbGlvX3lvdW5nJiMzNDssCiAgICAmIzM0O2RhbW9uX2dldF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIERBTU9OIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZyB0byBzdXBwb3J0IGh1Z2V0bGIgZm9saW9zIGJ5IGludHJvZHVjaW5nIGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIHBhZ2UgdGFibGUgd2FsayBjYWxsYmFja3MgKGRhbW9uX2ZvbGlvX21rb2xkLCBkYW1vbl9mb2xpb195b3VuZywgZGFtb25faHVnZXRsYl9ta29sZCkgdG8gaGFuZGxlIGh1Z2V0bGIgcGFnZXMuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzL2ludGVyZmFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmOTZhMmQxZDc1MGM1ODI1Nzc2OTU5YjczNTExNDZjYjhkOTBhMTZmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxNToxNzo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uYwppbmRleCBmYmRhNzBkOGVhNGQwLi44MDIwN2I1NmM2ZmRhIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICAqIENvbW1vbiBDb2RlIGZvciBEYXRhIEFjY2VzcyBNb25pdG9yaW5nCiAgKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9odWdldGxiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWlncmF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tdV9ub3RpZmllci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VfaWRsZS5oJmd0OwpAQCAtMTQsMTQgJiM0MzsxNSwyMCBAQAogI2luY2x1ZGUgJiMzNDsuLi9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7b3BzLWNvbW1vbi5oJiMzNDsKIAomIzQzO3N0YXRpYyBib29sIGRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb25pdG9yKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSB8fAomIzQzOwkJKG1vbml0b3IgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKTsKJiM0Mzt9CiYjNDM7CiAvKgotICogR2V0IGFuIG9ubGluZSBwYWdlIGZvciBhIHBmbiBpZiBpdCYjMzk7cyBpbiB0aGUgTFJVIGxpc3QuICBPdGhlcndpc2UsIHJldHVybnMKLSAqIE5VTEwuCiYjNDM7ICogR2V0IGFuIG9ubGluZSBwYWdlIGZvciBhIHBmbiBpZiBpdCYjMzk7cyBpbiB0aGUgTFJVIGxpc3QsIG9yIGEgaHVnZXRsYiBmb2xpbyBpZgomIzQzOyAqIEBtb25pdG9yIGlzIHNldC4gIE90aGVyd2lzZSwgcmV0dXJucyBOVUxMLgogICoKICAqIFRoZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24gaXMgc3RvbGVuIGZyb20gdGhlICYjMzk7cGFnZV9pZGxlX2dldF9mb2xpbygpJiMzOTsuICBXZQogICogc3RlYWwgcmF0aGVyIHRoYW4gcmV1c2UgaXQgYmVjYXVzZSB0aGUgY29kZSBpcyBxdWl0ZSBzaW1wbGUuCiAgKi8KLXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3N0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIG1vbml0b3IpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwpAQCAtMzIsMTMgJiM0MzszOSwzMCBAQCBzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbikKIAlmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7CiAJaWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSkKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8ICFmb2xpb190ZXN0X2xydShmb2xpbykpIHsKJiM0MzsJaWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8CiYjNDM7CQkJIWRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoZm9saW8sIG1vbml0b3IpKSB7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWZvbGlvID0gTlVMTDsKIAl9CiAJcmV0dXJuIGZvbGlvOwogfQogCiYjNDM7c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlyZXR1cm4gX19kYW1vbl9nZXRfZm9saW8ocGZuLCBmYWxzZSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2FtZSB0byBkYW1vbl9nZXRfZm9saW8oKSwgYnV0IGFsc28gYWNjZXB0cyBodWdldGxiIGZvbGlvcywgd2hpY2ggYXJlCiYjNDM7ICogbWFuYWdlZCBvdXRzaWRlIG9mIHRoZSBMUlUgbGlzdHMuICBBaW1lZCB0byBiZSB1c2VkIGJ5IGFjY2VzcyBtb25pdG9yaW5nCiYjNDM7ICogcHJpbWl0aXZlcy4gIERBTU9TIGFjdGlvbnMgdGhhdCBhc3N1bWUgTFJVLW1hbmFnZWQgZm9saW9zIHNob3VsZCBrZWVwIHVzaW5nCiYjNDM7ICogZGFtb25fZ2V0X2ZvbGlvKCkuCiYjNDM7ICovCiYjNDM7c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIHRydWUpOwomIzQzO30KJiM0MzsKIHZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXB0ZV90IHB0ZXZhbCA9IHB0ZXBfZ2V0KHB0ZSk7CkBAIC05OCw2ICYjNDM7MTIyLDM1IEBAIHZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyCiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQomIzQzO3ZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlib29sIHJlZmVyZW5jZWQgPSBmYWxzZTsKJiM0MzsJcHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7CiYjNDM7CiYjNDM7CWZvbGlvX2dldChmb2xpbyk7CiYjNDM7CiYjNDM7CWlmIChwdGVfeW91bmcoZW50cnkpKSB7CiYjNDM7CQlyZWZlcmVuY2VkID0gdHJ1ZTsKJiM0MzsJCWVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTsKJiM0MzsJCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsCiYjNDM7CQkJCSAgICAgYWRkciAmIzQzOyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSkKJiM0MzsJCXJlZmVyZW5jZWQgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAocmVmZXJlbmNlZCkKJiM0MzsJCWZvbGlvX3NldF95b3VuZyhmb2xpbyk7CiYjNDM7CiYjNDM7CWZvbGlvX3NldF9pZGxlKGZvbGlvKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCS8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KJiM0MzsKICNkZWZpbmUgREFNT05fTUFYX1NVQlNDT1JFCSgxMDApCiAjZGVmaW5lIERBTU9OX01BWF9BR0VfSU5fTE9HCSgzMikKIApAQCAtMTYzLDEwICYjNDM7MjE2LDE1IEBAIHN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJd2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKCZhbXA7cHZtdykpIHsKIAkJYWRkciA9IHB2bXcuYWRkcmVzczsKLQkJaWYgKHB2bXcucHRlKQotCQkJZGFtb25fcHRlcF9ta29sZChwdm13LnB0ZSwgdm1hLCBhZGRyKTsKLQkJZWxzZQomIzQzOwkJaWYgKHB2bXcucHRlKSB7CiYjNDM7CQkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpCiYjNDM7CQkJCWRhbW9uX2h1Z2V0bGJfbWtvbGQocHZtdy5wdGUsIHZtYS0mZ3Q7dm1fbW0sIHZtYSwKJiM0MzsJCQkJCQlhZGRyKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWRhbW9uX3B0ZXBfbWtvbGQocHZtdy5wdGUsIHZtYSwgYWRkcik7CiYjNDM7CQl9IGVsc2UgewogCQkJZGFtb25fcG1kcF9ta29sZChwdm13LnBtZCwgdm1hLCBhZGRyKTsKJiM0MzsJCX0KIAl9CiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xOTEsMjcgJiM0MzsyNDksNTUgQEAgdm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQomIzQzO3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIChwdGVfcHJlc2VudChlbnRyeSkgJmFtcDsmYW1wOyBwdGVfeW91bmcoZW50cnkpKSB8fAomIzQzOwkJIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHwKJiM0MzsJCW1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHZtYS0mZ3Q7dm1fbW0sIGFkZHIpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgkvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZGFtb25fcHRlX3lvdW5nKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcHRlX3QgZW50cnkgPSBwdGVwX2dldChwdGUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdCBhY3R1YWxseSBtYXAKJiM0MzsJICogcGFnZXMgYXJlICYjMzQ7b2xkJiMzNDsgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4gVGhlIE1NVSBub3RpZmllciB0YWtlcyBjYXJlCiYjNDM7CSAqIG9mIGFueSBkZXZpY2UgYXNwZWN0cy4KJiM0MzsJICovCiYjNDM7CXJldHVybiAocHRlX3ByZXNlbnQoZW50cnkpICZhbXA7JmFtcDsgcHRlX3lvdW5nKGVudHJ5KSkgfHwKJiM0MzsJCSFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8CiYjNDM7CQltbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtJmd0O3ZtX21tLCBhZGRyKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKQogewogCWJvb2wgKmFjY2Vzc2VkID0gYXJnOwogCURFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyLCAwKTsKLQlwdGVfdCBwdGU7CiAKIAkqYWNjZXNzZWQgPSBmYWxzZTsKIAl3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoJmFtcDtwdm13KSkgewogCQlhZGRyID0gcHZtdy5hZGRyZXNzOwogCQlpZiAocHZtdy5wdGUpIHsKLQkJCXB0ZSA9IHB0ZXBfZ2V0KHB2bXcucHRlKTsKLQotCQkJLyoKLQkJCSAqIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0Ci0JCQkgKiBhY3R1YWxseSBtYXAgcGFnZXMgYXJlICYjMzQ7b2xkJiMzNDsgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4KLQkJCSAqIFRoZSBNTVUgbm90aWZpZXIgdGFrZXMgY2FyZSBvZiBhbnkgZGV2aWNlIGFzcGVjdHMuCi0JCQkgKi8KLQkJCSphY2Nlc3NlZCA9IChwdGVfcHJlc2VudChwdGUpICZhbXA7JmFtcDsgcHRlX3lvdW5nKHB0ZSkpIHx8Ci0JCQkJIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHwKLQkJCQltbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtJmd0O3ZtX21tLCBhZGRyKTsKJiM0MzsJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKJiM0MzsJCQkJKmFjY2Vzc2VkID0gZGFtb25faHVnZXRsYl95b3VuZyhwdm13LnB0ZSwgdm1hLAomIzQzOwkJCQkJCWFkZHIsIGZvbGlvKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCSphY2Nlc3NlZCA9IGRhbW9uX3B0ZV95b3VuZyhwdm13LnB0ZSwgdm1hLAomIzQzOwkJCQkJCWFkZHIsIGZvbGlvKTsKIAkJfSBlbHNlIHsKICNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKIAkJCXBtZF90IHBtZCA9IHBtZHBfZ2V0KHB2bXcucG1kKTsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaAppbmRleCAzOGQyOTU0ODhmYTE4Li4xNzJmMGYxN2M0YTg0IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oCkBAIC02LDkgJiM0Mzs2LDE5IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZGFtb24uaCZndDsKIAogc3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pOwomIzQzO3N0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X21vbml0b3JfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pOwogCiB2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7CiB2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7CiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKJiM0Mzt2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKJiM0Mzt7CiYjNDM7fQomIzQzOyNlbmRpZgkvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCiB2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogYm9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmMKaW5kZXggNWM2YzNhNTk3ZmQwYi4uZWQ3YjdmMzEyOTFhMCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vcGFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jCkBAIC0zNyw3ICYjNDM7MzcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9jb3JlX2FkZHIoCiAKIHN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKQogewotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGFkZHIpKTsKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7CiAKIAlpZiAoIWZvbGlvKQogCQlyZXR1cm47CkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVja3Moc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCiBzdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkcikKIHsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyhQSFlTX1BGTihwYWRkcikpOwogCWJvb2wgYWNjZXNzZWQ7CiAKIAlpZiAoIWZvbGlvKQpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmMKaW5kZXggMDY0ODQwMGIyZDY1Yi4uMTUzNzlkOTg0Njg5ZSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdmFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jCkBAIC0yOTMsMzMgJiM0MzsyOTMsNiBAQCBzdGF0aWMgaW50IGRhbW9uX21rb2xkX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiB9CiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi1zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JYm9vbCByZWZlcmVuY2VkID0gZmFsc2U7Ci0JcHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpOwotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpOwotCXVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwotCi0JZm9saW9fZ2V0KGZvbGlvKTsKLQotCWlmIChwdGVfeW91bmcoZW50cnkpKSB7Ci0JCXJlZmVyZW5jZWQgPSB0cnVlOwotCQllbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7Ci0JCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpOwotCX0KLQotCWlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsCi0JCQkJICAgICBhZGRyICYjNDM7IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKQotCQlyZWZlcmVuY2VkID0gdHJ1ZTsKLQotCWlmIChyZWZlcmVuY2VkKQotCQlmb2xpb19zZXRfeW91bmcoZm9saW8pOwotCi0JZm9saW9fc2V0X2lkbGUoZm9saW8pOwotCWZvbGlvX3B1dChmb2xpbyk7Ci19Ci0KIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCQkgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgYWRkaXRpb24gaXMgd29ydGggdGhlIGZ1enppbmcgZWZmb3J0LCBhbmQgaWYgc28sIGhvdyB0byBiZXN0IGFwcHJvYWNoIGl0LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLgoKU28sIHRoZSBwYXRjaCB0b3VjaGVzIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCBgbW0vZGFtb24vb3BzLWNvbW1vbi5oYCwgYG1tL2RhbW9uL3BhZGRyLmNgLCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFsbCBhYm91dCBpbnRlZ3JhdGluZyBodWdldGxiIGZvbGlvIHN1cHBvcnQgaW50byBEQU1PTiYjMzk7cyBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcuIEludGVyZXN0aW5nLgoKU3BlY2lmaWNhbGx5OgoKKiAgIEl0IGFkZHMgdGhlIGFiaWxpdHkgdG8gbW9uaXRvciBodWdldGxiIGZvbGlvcyB3aXRoaW4gREFNT04mIzM5O3MgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nLgoqICAgVGhlIGBkYW1vbl9mb2xpb19hY2NlcHRhYmxlYCBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgaHVnZXRsYiBmb2xpb3MuIFRoYXTigJlzIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjaGVjayB3aWxsIHRyaWdnZXIuCiogICBgX19kYW1vbl9nZXRfZm9saW9gIGFuZCBpdHMgY2FsbGVycyBhcmUgcmVmYWN0b3JlZCB0byBoYW5kbGUgdGhlICYjMzQ7bW9uaXRvciYjMzQ7IGNvbnRleHQgd2l0aCBuZXcgZnVuY3Rpb25zLgoqICAgYGRhbW9uX2h1Z2V0bGJfbWtvbGRgIGlzIG1vdmVkIGFuZCBleHBvc2VkLCB3aGljaCBpcyByZWxldmFudCBhcyBpdCYjMzk7cyBub3cgaW52b2x2ZWQgaW4gbW9yZSBwbGFjZXMuCiogICBgZGFtb25fZm9saW9fbWtvbGRfb25lYCBhbmQgYGRhbW9uX2ZvbGlvX3lvdW5nX29uZWAgYXJlIHVwZGF0ZWQgdG8gY2FsbCB0aGVzZSBuZXcgZnVuY3Rpb25zIHRvby4KKiAgIGBkYW1vbl9wYV9ta29sZGAgYW5kIGBkYW1vbl9wYV95b3VuZ2AgaGF2ZSBjaGFuZ2VkIHRvIHVzZSB0aGUgbmV3IGBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpb2AgZnVuY3Rpb24uCgpOb3csIHRvIGFzc2VzcyBmdXp6aW5nIHBvdGVudGlhbCwgSSBuZWVkIHRvIGtub3cgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IgY2hlY2sgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IGRlcGVuZGVuY2llcyBvbiBEQU1PTiBmZWF0dXJlcyBhbmQgSFVHRVRMQiBjb25maWd1cmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYnVpbGRpbmcgYSBmdXp6aW5nIHRhcmdldCB0aGF0IGV4cG9zZXMgdGhpcyBmdW5jdGlvbmFsaXR5LgoKQmFzZWQgb24gdGhpcyBxdWljayBhbmFseXNpcywgSSYjMzk7ZCBzYXkgdGhpcyBwYXRjaCBpcyB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nLiBUaGUgY2hhbmdlcyB0byBmb2xpbyBoYW5kbGluZyBhbmQgdGhlIGludGVncmF0aW9uIG9mIGh1Z2V0bGIgc3VwcG9ydCBpbnRyb2R1Y2UgbmV3IGNvZGUgcGF0aHMgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBNeSBuZXh0IHN0ZXBzIHdpbGwgYmUgdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uIHJpZ2h0IGFuZCB0aGVuIGlkZW50aWZ5IHBvdGVudGlhbCBmdXp6IHRhcmdldHMgd2l0aGluIHRoaXMgbW9kaWZpZWQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIERBTU9OXG4gICA2Olx0XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXG4gICA5Olx0XHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxuICAxMDpcdFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcbiAgMTM6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG4gIDE2Olx0XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIERBTU9OXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbiAgMjA6XHRcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG4gIDIxOlx0XHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4gIDIyOlx0XHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4gIDI3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjg6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxuICAzMjpcdFxuICAzMzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgMzQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcbiAgNTc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDU4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDU5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA4MDpcdFx0aGVscFxuICA4MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDgyOlx0XG4gIDgzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA4NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgODU6XHRcbiAgODY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgODc6XHRcbiAgODg6XHRjb25maWcgREFNT05fUkVDTEFJTVxuICA4OTpcdFx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuICA5MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxuICA5MTpcdFx0aGVscFxuICA5MjpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcbiAgOTM6XHRcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxuICA5NDpcdFx0ICB0aG9zZS5cbiAgOTU6XHRcbiAgOTY6XHRcdCAgVGhpcyBpcyBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBhcyBhIHByb2FjdGl2ZSBhbmQgbGlnaHR3ZWlnaHRcbiAgOTc6XHRcdCAgcmVjbGFtYXRpb24gdW5kZXIgbGlnaHQgbWVtb3J5IHByZXNzdXJlLCB3aGlsZSB0aGUgdHJhZGl0aW9uYWwgcGFnZVxuICA5ODpcdFx0ICBzY2FubmluZy1iYXNlZCByZWNsYW1hdGlvbiBpcyB1c2VkIGZvciBoZWF2eSBwcmVzc3VyZS5cbiAgOTk6XHRcbiAxMDA6XHRjb25maWcgREFNT05fTFJVX1NPUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTg0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTWFrZWZpbGUgRXhwbG9yYXRpb24gZm9yIE9wcy1Db21tb24gYW5kIFBhZGRyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgb3BzLWNvbW1vbmAgYW5kIGBwYWRkcmAgYXJlIGJlaW5nIGJ1aWx0LCByaWdodD8mIzM0OyBJJiMzOTt2ZSBnb3QgYSBodW5jaCB0aGF0IGEga2V5IHBpZWNlIG9mIHRoYXQgcHV6emxlIGxpZXMgd2l0aGluIHRoZSBgbW0vZGFtb24vTWFrZWZpbGVgLiBNYWtlcyBzZW5zZSDigJMgdGhhdCYjMzk7cyBhIGxpa2VseSBwbGFjZSB0byBmaW5kIGJ1aWxkIGluc3RydWN0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhvc2UgY29tcG9uZW50cy4gTGV0JiMzOTtzIGRlbHZlIGluIHRoZXJlIGFuZCBzZWUgd2hhdCBtYWdpYyB0aGUgTWFrZWZpbGUgaG9sZHMuIFRpbWUgdG8gcG9rZSBhcm91bmQgYW5kIHNlZSBob3cgdGhlc2UgdG9vbHMgYXJlIG9yY2hlc3RyYXRlZC4gSSBuZWVkIHRvIGJlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGNvcnJlY3QgYnVpbGQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE1OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5OTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczoKCioqQ2hlY2tpbmcgYEhVR0VUTEJfUEFHRWAgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBIVUdFVExCX1BBR0VgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgcGFnZXMsIGFuZCBzb21ldGltZXMgdGhlIHNpbXBsZXN0IHRoaW5ncyBhcmUgb3Zlcmxvb2tlZC4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGN1cnJlbnQgc3RhdHVzLCB0aGUgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIHRoZSBzcGVjaWZpYyBwcm9ibGVtIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gSSYjMzk7bGwgbWVudGFsbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IHNlY3Rpb25zIG9mIHRoZSBjb25maWcgZmlsZSBhbmQgZG9jdW1lbnRhdGlvbiBqdXN0IHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIHNldHRpbmcuIE5vIHNlbnNlIGluIHNwaW5uaW5nIG15IHdoZWVscyBvbiBzb21ldGhpbmcgSSYjMzk7dmUgYWxyZWFkeSBzb2x2ZWQgd2l0aCBhIHNpbXBsZSBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njg5PWNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xuLS1cbm1tL0tjb25maWctNjkxLVxubW0vS2NvbmZpZzo2OTI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTY5My1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjc0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYEhVR0VUTEJfUEFHRWAgaXMgZGVmaW5lZC4gVGhpcyBpcyBhIGNvbW1vbiBzaXR1YXRpb24sIHNvIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBmcy9LY29uZmlnYC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBnby10byBwbGFjZSBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZXNwZWNpYWxseSBpZiB0aGV5IHJlbGF0ZSB0byBmaWxlIHN5c3RlbXMgb3IgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBgSFVHRVRMQl9QQUdFYCBkZWZpbml0ZWx5IGhpbnRzIGF0IHRoZSBsYXR0ZXIuIExldCYjMzk7cyBzZWUgaWYgaXQmIzM5O3MgcmlnaHQgdGhlcmUuIElmIG5vdCwgaXQmIzM5O3MgdGltZSB0byBzdGFydCBzZWFyY2hpbmcgbW9yZSBicm9hZGx5LCBwZXJoYXBzIHdpdGggYGdyZXBgIG9yIGBmaW5kYCwgYnV0IGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZXNlIGtpbmRzIG9mIHN5bWJvbHMsIHBhcnRpY3VsYXJseSB0aGUgb25lcyBhdCB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTU2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBIVUdFVExCX1BBR0VgIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYEhVR0VUTEJfUEFHRWAgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoZSB0ZXh0IHRlbGxzIG1lIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBmcy9LY29uZmlnYC4gUmlnaHQgYXdheSwgSSBub3RlIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgSFVHRVRMQkZTYCB1c2luZyBhIGBkZWZfYm9vbGAsIHdoaWNoIEkmIzM5O2xsIGtlZXAgaW4gbWluZC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBuZWVkIHRvIGp1bXAgaW50byBgZnMvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDI3MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgb3B0aW9uIGFjdHVhbGx5ICpkb2VzKiBhbmQgd2hhdCBpdCYjMzk7cyB0aWVkIHRvIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBkZXNjcmlwdGlvbiBvZiBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgcG9zc2libHkgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gb3RoZXIgb3B0aW9ucy4gSSYjMzk7bGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IG90aGVyIGRlcGVuZGVuY2llcyBvciByZWxhdGlvbnNoaXBzIHRvIG90aGVyIGtlcm5lbCBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRtZW51Y29uZmlnIEhVR0VUTEJGU1xuIDI1MTpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAyNTI6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNTM6XHRcdHNlbGVjdCBNRU1GRF9DUkVBVEVcbiAyNTQ6XHRcdHNlbGVjdCBQQURBVEEgaWYgU01QXG4gMjU1Olx0XHRoZWxwXG4gMjU2Olx0XHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cbiAyNTc6XHRcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxuIDI1ODpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDI1OTpcdFxuIDI2MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI2MTpcdFxuIDI2MjpcdGlmIEhVR0VUTEJGU1xuIDI2MzpcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG4gMjY0Olx0XHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbiAyNjU6XHRcdGRlZmF1bHQgblxuIDI2NjpcdFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuIDI2NzpcdFx0aGVscFxuIDI2ODpcdFx0ICBUaGUgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvZmYuIFNheSBZIGhlcmUgdG9cbiAyNjk6XHRcdCAgZW5hYmxlIEhWTyBieSBkZWZhdWx0LiBJdCBjYW4gYmUgZGlzYWJsZWQgdmlhIGh1Z2V0bGJfZnJlZV92bWVtbWFwPW9mZlxuIDI3MDpcdFx0ICAoYm9vdCBjb21tYW5kIGxpbmUpIG9yIGh1Z2V0bGJfb3B0aW1pemVfdm1lbW1hcCAoc3lzY3RsKS5cbiAyNzE6XHRlbmRpZiAjIEhVR0VUTEJGU1xuIDI3MjpcdFxuIDI3MzpcdGNvbmZpZyBIVUdFVExCX1BBR0VcbiAyNzQ6XHRcdGRlZl9ib29sIEhVR0VUTEJGU1xuIDI3NTpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuIDI3NjpcdFxuIDI3NzpcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuIDI3ODpcdFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4gMjc5Olx0XHRkZXBlbmRzIG9uIEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBcbiAyODA6XHRcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbiAyODE6XHRcbiAyODI6XHRjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG4gMjgzOlx0XHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcbiAyODQ6XHRcdGRlcGVuZHMgb24gQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFIFx1MDAyNlx1MDAyNiBTUExJVF9QTURfUFRMT0NLU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDIxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEh1Z2VUTEIgYW5kIFBoeXNpY2FsIEFkZHJlc3MgU3VwcG9ydCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGBDT05GSUdfSFVHRVRMQkZTYCBlbmFibGluZyBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIHJlbGV2YW50IGhlcmUuIFRoYXQgbWFrZXMgc2Vuc2UsIHdlIGFyZSBkZWFsaW5nIHdpdGggSHVnZVRMQiBwYWdlcy4gVGhlbiB3ZSBoYXZlIHRoZSBzdGFuZGFyZCBEQU1PTiBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlZCwgc3BlY2lmaWNhbGx5LCBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGBDT05GSUdfREFNT05fVkFERFJgLCBhbmQgYENPTkZJR19EQU1PTl9TWVNGU2AuIFJpZ2h0LCBzbyB0aGlzIGlzIGFib3V0IGludGVncmF0aW5nIERBTU9OIHdpdGggSHVnZVRMQiBhbmQgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nLgoKTm93LCBsZXQmIzM5O3MgbW92ZSBvbnRvIHRoZSBtZWF0IG9mIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMuIFRoZSBmdW5jdGlvbnMgYWRkZWQgb3IgbW9kaWZpZWQgYXJlIG15IGZvY3VzLiBJbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCwgSSBzZWUgYSBjbHVzdGVyIG9mIG5ldyBmdW5jdGlvbnM6IGBkYW1vbl9mb2xpb19hY2NlcHRhYmxlYCwgYF9fZGFtb25fZ2V0X2ZvbGlvYCwgYGRhbW9uX2dldF9mb2xpb2AsIGBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpb2AsIGBkYW1vbl9odWdldGxiX21rb2xkYCwgYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAsIGBkYW1vbl9mb2xpb19ta29sZGAsIGBkYW1vbl9odWdldGxiX3lvdW5nYCwgYGRhbW9uX3B0ZV95b3VuZ2AsIGBkYW1vbl9mb2xpb195b3VuZ19vbmVgLCBhbmQgYGRhbW9uX2ZvbGlvX3lvdW5nYC4gU2V2ZXJhbCBvZiB0aGVzZSBhcmUgZGVjbGFyZWQgYHN0YXRpY2AsIHN1Z2dlc3RpbmcgdGhleSYjMzk7cmUgaW50ZXJuYWwgaGVscGVycywgd2hpbGUgb3RoZXJzIGFyZSBleHBvcnRlZCwgaW5kaWNhdGluZyBlbnRyeSBwb2ludHMuIEkgY2FuIGFscmVhZHkgc2VlIGBta29sZGAgYW5kIGB5b3VuZ2AgbWV0aG9kcyBiZWluZyBjcmVhdGVkLCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IG1hcmtpbmcgcGFnZXMgYXMgb2xkIG9yIHlvdW5nLgoKSW4gYG1tL2RhbW9uL3BhZGRyLmNgLCBJJiMzOTt2ZSBnb3QgdHdvIG1vcmU6IGBkYW1vbl9wYV9ta29sZGAgYW5kIGBkYW1vbl9wYV95b3VuZ2AuIFRoZXNlIGFyZSB0aGUgcGh5c2ljYWwgYWRkcmVzcy1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMsIGFzIGV4cGVjdGVkLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4gSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIGV4cG9ydGVkIHN5bWJvbHMgZnJvbSBgb3BzLWNvbW1vbi5oYCBhbmQgdGhlIGZ1bmN0aW9ucyBpbiBgcGFkZHIuY2AuIE15IG5leHQgc3RlcCBpcyB0byBzZWFyY2ggZm9yIHRoZSBjYWxsIHNpdGVzIG9mIGBkYW1vbl9mb2xpb19ta29sZGAsIGBkYW1vbl9mb2xpb195b3VuZ2AsIGBkYW1vbl9odWdldGxiX21rb2xkYCwgYGRhbW9uX2dldF9mb2xpb2AsIGFuZCBgZGFtb25fZ2V0X21vbml0b3JfZm9saW9gLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29udHJvbCBmbG93IGFuZCBpbnRlcmFjdGlvbiBvZiBEQU1PTiB3aXRoIEh1Z2VUTEIgYW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLCBhbmQgaGlnaGxpZ2h0IHRoZSBrZXkgaW50ZWdyYXRpb24gcG9pbnRzIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBleGFtaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl8uKmZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYy0xOS1cbm1tL2RhbW9uL2NvcmUuYzoyMDovKiBmb3IgZGFtb25fZ2V0X2ZvbGlvKCkgdXNlZCBieSBub2RlIGVsaWdpYmxlIG1lbW9yeSBtZXRyaWNzICovXG5tbS9kYW1vbi9jb3JlLmMtMjEtI2luY2x1ZGUgXCYjMzQ7b3BzLWNvbW1vbi5oXCYjMzQ7XG4tLVxubW0vZGFtb24vY29yZS5jPTI4MTY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjg2Ny0gKlxubW0vZGFtb24vY29yZS5jOjI4Njg6ICogTm90ZTogVGhpcyBmdW5jdGlvbiByZXF1aXJlcyBkYW1vbl9nZXRfZm9saW8oKSBmcm9tIG9wcy1jb21tb24uYywgd2hpY2ggaXNcbm1tL2RhbW9uL2NvcmUuYy0yODY5LSAqIG9ubHkgYXZhaWxhYmxlIHdoZW4gQ09ORklHX0RBTU9OX1BBRERSIGlzIGVuYWJsZWQuIEl0IGFsc28gcmVxdWlyZXMgdGhlXG4tLVxubW0vZGFtb24vY29yZS5jPTI4NzI9c3RhdGljIHBoeXNfYWRkcl90IGRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjg5NS1cbm1tL2RhbW9uL2NvcmUuYzoyODk2Olx0XHRcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xubW0vZGFtb24vY29yZS5jLTI4OTctXHRcdFx0XHRpZiAoIWZvbGlvKSB7XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3LVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE4OnN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb25pdG9yKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE5LXtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMzAtICovXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MzE6c3RhdGljIHN0cnVjdCBmb2xpbyAqX19kYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgbW9uaXRvcilcbm1tL2RhbW9uL29wcy1jb21tb24uYy0zMi17XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQyLVx0aWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDM6XHRcdFx0IWRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoZm9saW8sIG1vbml0b3IpKSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDQtXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQ5LVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjUwOnN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTUxLXtcbm1tL2RhbW9uL29wcy1jb21tb24uYzo1MjpcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIGZhbHNlKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy01My19XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTU1LS8qXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTY6ICogU2FtZSB0byBkYW1vbl9nZXRfZm9saW8oKSwgYnV0IGFsc28gYWNjZXB0cyBodWdldGxiIGZvbGlvcywgd2hpY2ggYXJlXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNTctICogbWFuYWdlZCBvdXRzaWRlIG9mIHRoZSBMUlUgbGlzdHMuICBBaW1lZCB0byBiZSB1c2VkIGJ5IGFjY2VzcyBtb25pdG9yaW5nXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNTgtICogcHJpbWl0aXZlcy4gIERBTU9TIGFjdGlvbnMgdGhhdCBhc3N1bWUgTFJVLW1hbmFnZWQgZm9saW9zIHNob3VsZCBrZWVwIHVzaW5nXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTk6ICogZGFtb25fZ2V0X2ZvbGlvKCkuXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNjAtICovXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NjE6c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbm1tL2RhbW9uL29wcy1jb21tb24uYy02Mi17XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NjM6XHRyZXR1cm4gX19kYW1vbl9nZXRfZm9saW8ocGZuLCB0cnVlKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy02NC19XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTY2PXZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy03Ny1cbm1tL2RhbW9uL29wcy1jb21tb24uYzo3ODpcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKHBmbik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzktXHRpZiAoIWZvbGlvKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz05Nz12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTA5LVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjExMDpcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKHBmbik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTExLVx0aWYgKCFmb2xpbylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MjAzPWludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIxMS1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMTI6c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjEzLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIzMS1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMzI6dm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIzMy17XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjM0LVx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMzU6XHRcdC5ybWFwX29uZSA9IGRhbW9uX2ZvbGlvX21rb2xkX29uZSxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMzYtXHRcdC5hbm9uX2xvY2sgPSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQsXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI3MD1zdGF0aWMgYm9vbCBkYW1vbl9wdGVfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI4NC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoyODU6c3RhdGljIGJvb2wgZGFtb25fZm9saW9feW91bmdfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjg2LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTMyMS1cbm1tL2RhbW9uL29wcy1jb21tb24uYzozMjI6Ym9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTMyMy17XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTMyNi1cdFx0LmFyZyA9IFx1MDAyNmFjY2Vzc2VkLFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjMyNzpcdFx0LnJtYXBfb25lID0gZGFtb25fZm9saW9feW91bmdfb25lLFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTMyOC1cdFx0LmFub25fbG9jayA9IGZvbGlvX2xvY2tfYW5vbl92bWFfcmVhZCxcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MzQ3PWJvb2wgZGFtb3NfZm9saW9fZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMzY5LVx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9ZT1VORzpcbm1tL2RhbW9uL29wcy1jb21tb24uYzozNzA6XHRcdG1hdGNoZWQgPSBkYW1vbl9mb2xpb195b3VuZyhmb2xpbyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMzcxLVx0XHRpZiAobWF0Y2hlZClcbm1tL2RhbW9uL29wcy1jb21tb24uYzozNzI6XHRcdFx0ZGFtb25fZm9saW9fbWtvbGQoZm9saW8pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTM3My1cdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTM4OC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzozODk6c3RhdGljIHVuc2lnbmVkIGludCBfX2RhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChcbm1tL2RhbW9uL29wcy1jb21tb24uYy0zOTAtXHRcdHN0cnVjdCBsaXN0X2hlYWQgKm1pZ3JhdGVfZm9saW9zLCBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy00MTgtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDE5OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbWlncmF0ZV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDIwLVx0XHRcdFx0XHRcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQ0Ni1cdC8qIE1pZ3JhdGUgZm9saW9zIHNlbGVjdGVkIGZvciBtaWdyYXRpb24gKi9cbm1tL2RhbW9uL29wcy1jb21tb24uYzo0NDc6XHRucl9taWdyYXRlZCAmIzQzOz0gX19kYW1vbl9taWdyYXRlX2ZvbGlvX2xpc3QoXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDQ4LVx0XHRcdFx1MDAyNm1pZ3JhdGVfZm9saW9zLCBwZ2RhdCwgdGFyZ2V0X25pZCk7XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQ3MC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzo0NzE6dW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQ3Mi17XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTUwNC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzo1MDU6XHRcdG5yX21pZ3JhdGVkICYjNDM7PSBkYW1vbl9taWdyYXRlX2ZvbGlvX2xpc3QoXHUwMDI2bm9kZV9mb2xpb19saXN0LFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTUwNi1cdFx0XHRcdFx0XHRcdCAgIE5PREVfREFUQShuaWQpLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy01MTAtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTExOlx0bnJfbWlncmF0ZWQgJiM0Mzs9IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChcdTAwMjZub2RlX2ZvbGlvX2xpc3QsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNTEyLVx0XHRcdFx0XHRcdCAgIE5PREVfREFUQShuaWQpLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uaC03LVxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjg6c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oOjk6c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTAtXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTE3PXN0YXRpYyBpbmxpbmUgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uaC0yMS0jZW5kaWZcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbm1tL2RhbW9uL29wcy1jb21tb24uaDoyMjp2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oOjIzOmJvb2wgZGFtb25fZm9saW9feW91bmcoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMjQtXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTMwPWJvb2wgZGFtb3NfZm9saW9fZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MzE6dW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC0zMi1cbi0tXG5tbS9kYW1vbi9wYWRkci5jPTM4PXN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKVxubW0vZGFtb24vcGFkZHIuYy0zOS17XG5tbS9kYW1vbi9wYWRkci5jOjQwOlx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jLTQxLVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDQtXG5tbS9kYW1vbi9wYWRkci5jOjQ1Olx0ZGFtb25fZm9saW9fbWtvbGQoZm9saW8pO1xubW0vZGFtb24vcGFkZHIuYy00Ni1cdGZvbGlvX3B1dChmb2xpbyk7XG4tLVxubW0vZGFtb24vcGFkZHIuYz02OD1zdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkcilcbm1tL2RhbW9uL3BhZGRyLmMtNjkte1xubW0vZGFtb24vcGFkZHIuYzo3MDpcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyhQSFlTX1BGTihwYWRkcikpO1xubW0vZGFtb24vcGFkZHIuYy03MS1cdGJvb2wgYWNjZXNzZWQ7XG4tLVxubW0vZGFtb24vcGFkZHIuYy03NS1cbm1tL2RhbW9uL3BhZGRyLmM6NzY6XHRhY2Nlc3NlZCA9IGRhbW9uX2ZvbGlvX3lvdW5nKGZvbGlvKTtcbm1tL2RhbW9uL3BhZGRyLmMtNzctXHRmb2xpb19wdXQoZm9saW8pO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTA4PXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNDAtXG5tbS9kYW1vbi9wYWRkci5jOjE0MTpzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2RhbW9uL3BhZGRyLmMtMTQyLVx0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNDctXHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xubW0vZGFtb24vcGFkZHIuYzoxNDg6XHRcdGlmIChkYW1vbl9wYV9maWx0ZXJfbWF0Y2goZiwgZm9saW8pKSB7XG5tbS9kYW1vbi9wYWRkci5jLTE0OS1cdFx0XHRwYXNzID0gZi1cdTAwM2VhbGxvdztcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTE1Nz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNzUtXHRcdFx0XHRcdGN0eC1cdTAwM2VhZGRyX3VuaXQpO1xubW0vZGFtb24vcGFkZHIuYzoxNzY6XHRcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGEpKTtcbm1tL2RhbW9uL3BhZGRyLmMtMTc3LVx0XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xubW0vZGFtb24vcGFkZHIuYzoxNzg6XHRcdFx0XHRpZiAoZGFtb25fcGFfZmlsdGVyX3Bhc3MocGEsIGZvbGlvLCBwKSlcbm1tL2RhbW9uL3BhZGRyLmMtMTc5LVx0XHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTk1PXN0YXRpYyBib29sIGRhbW9zX3BhX2ZpbHRlcl9vdXQoc3RydWN0IGRhbW9zICpzY2hlbWUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yMDgtXG5tbS9kYW1vbi9wYWRkci5jOjIwOTpzdGF0aWMgYm9vbCBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL3BhZGRyLmMtMjEwLXtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNDYtXHR3aGlsZSAoYWRkciBcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlYXIuZW5kLCBhZGRyX3VuaXQpKSB7XG5tbS9kYW1vbi9wYWRkci5jOjI0NzpcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xubW0vZGFtb24vcGFkZHIuYzoyNDg6XHRcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xubW0vZGFtb24vcGFkZHIuYy0yNDktXHRcdFx0YWRkciAmIzQzOz0gUEFHRV9TSVpFO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9Mjc4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTI4Ny1cdHdoaWxlIChhZGRyIFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcbm1tL2RhbW9uL3BhZGRyLmM6Mjg4Olx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjI4OTpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTI5MC1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0zMjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzM1LVx0d2hpbGUgKGFkZHIgXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xubW0vZGFtb24vcGFkZHIuYzozMzY6XHRcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcbm1tL2RhbW9uL3BhZGRyLmM6MzM3Olx0XHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMzM4LVx0XHRcdGFkZHIgJiM0Mzs9IFBBR0VfU0laRTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM1NS1cdH1cbm1tL2RhbW9uL3BhZGRyLmM6MzU2Olx0YXBwbGllZCA9IGRhbW9uX21pZ3JhdGVfcGFnZXMoXHUwMDI2Zm9saW9fbGlzdCwgcy1cdTAwM2V0YXJnZXRfbmlkKTtcbm1tL2RhbW9uL3BhZGRyLmMtMzU3LVx0Y29uZF9yZXNjaGVkKCk7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0zNjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzczLVx0d2hpbGUgKGFkZHIgXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xubW0vZGFtb24vcGFkZHIuYzozNzQ6XHRcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcbm1tL2RhbW9uL3BhZGRyLmM6Mzc1Olx0XHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMzc2LVx0XHRcdGFkZHIgJiM0Mzs9IFBBR0VfU0laRTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1ODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBkYW1vbl9mb2xpb19ta29sZGAsIGBkYW1vbl9mb2xpb195b3VuZ2AsIGBkYW1vbl9odWdldGxiX21rb2xkYCwgYGRhbW9uX2dldF9mb2xpb2AsIGFuZCBgZGFtb25fZ2V0X21vbml0b3JfZm9saW9gIGFyZSBhbGwgZXhwb3J0ZWQgZnVuY3Rpb25zIHdpdGhpbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIG1lYW5pbmcgdGhleSYjMzk7cmUgYWNjZXNzaWJsZSBvdXRzaWRlIHRoYXQgZmlsZSwgbGlrZWx5IGNvcmUgdG8gREFNT04mIzM5O3Mgb3BlcmF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlICp1c2VkKi4gTXkgZm9jdXMgbm93IHNoaWZ0cyB0byBgdmFkZHIuY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5YCBmdW5jdGlvbi4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGNhbGwgdG8gYGRhbW9uX2h1Z2V0bGJfbWtvbGRgLiBUaGF0IHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gaG93IERBTU9OIGhhbmRsZXMgaHVnZSBwYWdlcyBpbiB0aGUgJiMzNDtta29sZCYjMzQ7IGNvbnRleHQsIGFuZCBob3cgdGhlc2UgdmFyaW91cyBmdW5jdGlvbnMgaW50ZXJyZWxhdGUgd2l0aGluIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbWFuYWdlbWVudC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjb250ZXh0IG9mIGBkYW1vbl9odWdldGxiX21rb2xkYCBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTA6XHRvdXQ6XG4gMjkxOlx0XHRwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTtcbiAyOTI6XHRcdHJldHVybiAwO1xuIDI5MzpcdH1cbiAyOTQ6XHRcbiAyOTU6XHQjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIDI5NjpcdHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuIDI5NzpcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIDI5ODpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiAyOTk6XHR7XG4gMzAwOlx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLVx1MDAzZXZtYSk7XG4gMzAxOlx0XHRzcGlubG9ja190ICpwdGw7XG4gMzAyOlx0XHRwdGVfdCBlbnRyeTtcbiAzMDM6XHRcbiAzMDQ6XHRcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbiAzMDU6XHRcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuIDMwNjpcdFx0aWYgKCFwdGVfcHJlc2VudChlbnRyeSkpXG4gMzA3Olx0XHRcdGdvdG8gb3V0O1xuIDMwODpcdFxuIDMwOTpcdFx0ZGFtb25faHVnZXRsYl9ta29sZChwdGUsIHdhbGstXHUwMDNlbW0sIHdhbGstXHUwMDNldm1hLCBhZGRyKTtcbiAzMTA6XHRcbiAzMTE6XHRvdXQ6XG4gMzEyOlx0XHRzcGluX3VubG9jayhwdGwpO1xuIDMxMzpcdFx0cmV0dXJuIDA7XG4gMzE0Olx0fVxuIDMxNTpcdCNlbHNlXG4gMzE2Olx0I2RlZmluZSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5IE5VTExcbiAzMTc6XHQjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuIDMxODpcdFxuIDMxOTpcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX21rb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gMzIwOlx0e1xuIDMyMTpcdFx0c3RydWN0IG1tX3dhbGtfb3BzIGRhbW9uX21rb2xkX29wcyA9IHtcbiAzMjI6XHRcdFx0LnBtZF9lbnRyeSA9IGRhbW9uX21rb2xkX3BtZF9lbnRyeSxcbiAzMjM6XHRcdFx0Lmh1Z2V0bGJfZW50cnkgPSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5LFxuIDMyNDpcdFx0fTtcbiAzMjU6XHRcbiAzMjY6XHRcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCBcdTAwMjZkYW1vbl9ta29sZF9vcHMsIE5VTEwpO1xuIDMyNzpcdH1cbiAzMjg6XHRcbiAzMjk6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU5MwoJCQkJCQkJb3V0cHV0OiAyMDgKCQkJCQkJCXRob3VnaHRzOiA5NzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgREFNT04gU3VwcG9ydCBmb3IgSHVnZXRsYiBGb2xpb3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3ZlIGdvdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIChEQU1PTikgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZXh0ZW5kaW5nIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZyB0byBzdXBwb3J0IGh1Z2V0bGIgZm9saW9zLiBUaGlzIG1lYW5zIERBTU9OIGNhbiBub3cgdHJhY2sgYWNjZXNzIHBhdHRlcm5zIHdpdGhpbiBodWdldGxiIHBhZ2VzLCBlc3NlbnRpYWxseSBtYWtpbmcgdGhlICYjMzQ7b2xkL3lvdW5nJiMzNDsgZGV0ZXJtaW5hdGlvbi4gVGhlIGNvcmUgb2YgdGhpcyBpbnZvbHZlcyBwYWdlIHRhYmxlIHdhbGtzIHZpYSBgcm1hcCB3YWxrYCBhbmQgdGhlIHVzZSBvZiBmdW5jdGlvbnMgbGlrZSBgaHVnZV9wdGVwX2dldC9zZXRfaHVnZV9wdGVfYXRgIHRvIHRlc3QgYW5kIHNldCB0aGUgJiMzNDt5b3VuZyYjMzQ7IGFuZCAmIzM0O2lkbGUmIzM0OyBmbGFncy4KCkZpcnN0IG9mZiwgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCBoZXJlLiBEQU1PTiBmdW5jdGlvbmFsaXR5IGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCB3aGV0aGVyIGl0JiMzOTtzIHRocm91Z2ggdGhlIHN5c2ZzIG9yIGRlYnVnZnMgaW50ZXJmYWNlcywgb3IgdGhyb3VnaCBEQU1PTiByZWNsYWltL3N0YXQgbWVjaGFuaXNtcy4gVGhhdCBjcmVhdGVzIGFuIGF2ZW51ZSBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gUGx1cywgdGhlIERBTU9OIGNvZGViYXNlIHJ1bnMgb24gc3RhbmRhcmQgaGFyZHdhcmUvdmlydHVhbCBlbnZpcm9ubWVudHMsIGFuZCBodWdldGxiZnMgaXMgc3VwcG9ydGVkIGluIFFFTVUsIG1ha2luZyBpdCBlYXNpbHkgdGVzdGFibGUuCgpOZXh0LCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgYXJlIGNsZWFyLiBXZSYjMzk7cmUgbG9va2luZyBhdCBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGBDT05GSUdfREFNT05fVkFERFJgLCBgQ09ORklHX0hVR0VUTEJGU2AgKHdoaWNoIGltcGxpZXMgYENPTkZJR19IVUdFVExCX1BBR0VgKSwgYW5kIGBDT05GSUdfREFNT05fU1lTRlNgIGZvciB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24uCgpEaWdnaW5nIGludG8gdGhlIEtjb25maWcgZmlsZXMsIHRoZSBkZXBlbmRlbmNpZXMgbWFrZSBzZW5zZS4gYENPTkZJR19EQU1PTl9QQUREUmAgYW5kIGBDT05GSUdfREFNT05fVkFERFJgIGRlcGVuZCBvbiBgREFNT05gIGFuZCBgTU1VYCwgYW5kIHNlbGVjdCBgUEFHRV9JRExFX0ZMQUdgLiBgQ09ORklHX0RBTU9OX1NZU0ZTYCBkZXBlbmRzIG9uIGBEQU1PTmAgYW5kIGBTWVNGU2AuIGBDT05GSUdfSFVHRVRMQkZTYCBkZXBlbmRzIG9uIGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AsIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgZGVyaXZlZCBmcm9tIGBIVUdFVExCRlNgLgoKTm93LCBmb3IgdGhlIGNyaXRpY2FsIEFQSSBjaGFuZ2VzLiBUaGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMgdGhhdCBoYXZlIGJlZW4gZWl0aGVyIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGludm9sdmVkIGhlcmUgYXJlIGBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpb2AsIGBkYW1vbl9odWdldGxiX21rb2xkYCwgYGRhbW9uX2ZvbGlvX21rb2xkYCwgYGRhbW9uX2ZvbGlvX3lvdW5nYCwgYW5kIGBkYW1vbl9nZXRfZm9saW9gLiBDb25maXJtaW5nIHRoZXNlIGFyZSBhbGwgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMsIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN1cmZhY2UgYXJlYSBvZiB0aGlzIGNoYW5nZS4gVXBvbiByZXZpZXdpbmcgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGFsbCB0aGVzZSBhcmUgaW5kZWVkIG5vbi1zdGF0aWMgZnVuY3Rpb25zLgoKVGhlcmUgYXJlIGFsc28gYSBjb3VwbGUgb2Ygb3RoZXIgc3ltYm9scyB0byBjb25zaWRlciwgc3BlY2lmaWNhbGx5IGBkYW1vbl9wdGVwX21rb2xkYCBhbmQgYGRhbW9uX3BtZHBfbWtvbGRgLCBidXQgdGhlaXIgbG9naWMgaXNuJiMzOTt0IHRoZSBmb2N1cyBoZXJlLCB0aGUgY2hhbmdlcyBhcmUgd2l0aCB0aGUgbGlzdGVkIEFQSSBjYWxscy4KClJlY2FwcGluZyB0aGUgY29uZmlndXJhdGlvbiwgdG8gcmVpdGVyYXRlIGl0OiBgREFNT05gLCBgREFNT05fUEFERFJgLCBgREFNT05fVkFERFJgLCBgREFNT05fU1lTRlNgLCBgSFVHRVRMQkZTYCwgYW5kIGBIVUdFVExCX1BBR0VgIGFyZSB0aGUga2V5IGNvbmZpZ3MgdG8gZXhhbWluZSwgYW5kIHRoZSBjb2RlIGNoYW5nZXMgc2VlbSBjb21wbGV0ZS4KCkFscmlnaHQsIGV2ZXJ5dGhpbmcgaXMgbG9va2luZyBjbGVhbiBhbmQgd2VsbC1kZWZpbmVkLiBUaW1lIHRvIG1ha2UgdGhhdCB0b29sIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fZ2V0X21vbml0b3JfZm9saW8mIzM0OywKICAgICYjMzQ7ZGFtb25faHVnZXRsYl9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9mb2xpb19ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9mb2xpb195b3VuZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9nZXRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBEQU1PTiBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcgdG8gc3VwcG9ydCBodWdldGxiIGZvbGlvcyBieSBpbnRyb2R1Y2luZyBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbygpIGFuZCB1cGRhdGluZyBwYWdlIHRhYmxlIHdhbGsgY2FsbGJhY2tzIChkYW1vbl9mb2xpb19ta29sZCwgZGFtb25fZm9saW9feW91bmcsIGRhbW9uX2h1Z2V0bGJfbWtvbGQpIHRvIGhhbmRsZSBodWdldGxiIHBhZ2VzLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcy9pbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fZ2V0X21vbml0b3JfZm9saW8mIzM0OywKICAgICYjMzQ7ZGFtb25faHVnZXRsYl9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9mb2xpb19ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9mb2xpb195b3VuZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9nZXRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBEQU1PTiBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcgdG8gc3VwcG9ydCBodWdldGxiIGZvbGlvcyBieSBpbnRyb2R1Y2luZyBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbygpIGFuZCB1cGRhdGluZyBwYWdlIHRhYmxlIHdhbGsgY2FsbGJhY2tzIChkYW1vbl9mb2xpb19ta29sZCwgZGFtb25fZm9saW9feW91bmcsIGRhbW9uX2h1Z2V0bGJfbWtvbGQpIHRvIGhhbmRsZSBodWdldGxiIHBhZ2VzLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcy9pbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE1OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgdG8gc3VwcG9ydCBodWdldGxiIGZvbGlvcyBkdXJpbmcgcGh5c2ljYWwgYWRkcmVzcyBhY2Nlc3MgbW9uaXRvcmluZyAocGFkZHIpIGFuZCBwYWdlIHRhYmxlIHdhbGtzLiBJdCByZWZhY3RvcnMgZm9saW8gZmV0Y2hpbmcgYW5kIG1rb2xkL3lvdW5nIGhhbmRsaW5nIHRvIGFjY291bnQgZm9yIGh1Z2V0bGIgZm9saW9zLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCByZXR1cm4gdmFsdWVzIGFyZSBmdWxseSBpbml0aWFsaXplZCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgbGVmdCB1bmluaXRpYWxpemVkIGluIGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMuIEFueSBtZW1vcnkgc2FmZXR5IHJpc2tzIChzdWNoIGFzIGZvbGlvIHJlZmNvdW50aW5nLCBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBwYWdlIHRhYmxlIHdhbGsgaXNzdWVzKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmOTZhMmQxZDc1MGM1ODI1Nzc2OTU5YjczNTExNDZjYjhkOTBhMTZmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxNToxNzo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uYwppbmRleCBmYmRhNzBkOGVhNGQwLi44MDIwN2I1NmM2ZmRhIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICAqIENvbW1vbiBDb2RlIGZvciBEYXRhIEFjY2VzcyBNb25pdG9yaW5nCiAgKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9odWdldGxiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWlncmF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tdV9ub3RpZmllci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VfaWRsZS5oJmd0OwpAQCAtMTQsMTQgJiM0MzsxNSwyMCBAQAogI2luY2x1ZGUgJiMzNDsuLi9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7b3BzLWNvbW1vbi5oJiMzNDsKIAomIzQzO3N0YXRpYyBib29sIGRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb25pdG9yKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSB8fAomIzQzOwkJKG1vbml0b3IgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKTsKJiM0Mzt9CiYjNDM7CiAvKgotICogR2V0IGFuIG9ubGluZSBwYWdlIGZvciBhIHBmbiBpZiBpdCYjMzk7cyBpbiB0aGUgTFJVIGxpc3QuICBPdGhlcndpc2UsIHJldHVybnMKLSAqIE5VTEwuCiYjNDM7ICogR2V0IGFuIG9ubGluZSBwYWdlIGZvciBhIHBmbiBpZiBpdCYjMzk7cyBpbiB0aGUgTFJVIGxpc3QsIG9yIGEgaHVnZXRsYiBmb2xpbyBpZgomIzQzOyAqIEBtb25pdG9yIGlzIHNldC4gIE90aGVyd2lzZSwgcmV0dXJucyBOVUxMLgogICoKICAqIFRoZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24gaXMgc3RvbGVuIGZyb20gdGhlICYjMzk7cGFnZV9pZGxlX2dldF9mb2xpbygpJiMzOTsuICBXZQogICogc3RlYWwgcmF0aGVyIHRoYW4gcmV1c2UgaXQgYmVjYXVzZSB0aGUgY29kZSBpcyBxdWl0ZSBzaW1wbGUuCiAgKi8KLXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3N0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIG1vbml0b3IpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwpAQCAtMzIsMTMgJiM0MzszOSwzMCBAQCBzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbikKIAlmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7CiAJaWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSkKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8ICFmb2xpb190ZXN0X2xydShmb2xpbykpIHsKJiM0MzsJaWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8CiYjNDM7CQkJIWRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoZm9saW8sIG1vbml0b3IpKSB7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWZvbGlvID0gTlVMTDsKIAl9CiAJcmV0dXJuIGZvbGlvOwogfQogCiYjNDM7c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlyZXR1cm4gX19kYW1vbl9nZXRfZm9saW8ocGZuLCBmYWxzZSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2FtZSB0byBkYW1vbl9nZXRfZm9saW8oKSwgYnV0IGFsc28gYWNjZXB0cyBodWdldGxiIGZvbGlvcywgd2hpY2ggYXJlCiYjNDM7ICogbWFuYWdlZCBvdXRzaWRlIG9mIHRoZSBMUlUgbGlzdHMuICBBaW1lZCB0byBiZSB1c2VkIGJ5IGFjY2VzcyBtb25pdG9yaW5nCiYjNDM7ICogcHJpbWl0aXZlcy4gIERBTU9TIGFjdGlvbnMgdGhhdCBhc3N1bWUgTFJVLW1hbmFnZWQgZm9saW9zIHNob3VsZCBrZWVwIHVzaW5nCiYjNDM7ICogZGFtb25fZ2V0X2ZvbGlvKCkuCiYjNDM7ICovCiYjNDM7c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIHRydWUpOwomIzQzO30KJiM0MzsKIHZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXB0ZV90IHB0ZXZhbCA9IHB0ZXBfZ2V0KHB0ZSk7CkBAIC05OCw2ICYjNDM7MTIyLDM1IEBAIHZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyCiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQomIzQzO3ZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlib29sIHJlZmVyZW5jZWQgPSBmYWxzZTsKJiM0MzsJcHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7CiYjNDM7CiYjNDM7CWZvbGlvX2dldChmb2xpbyk7CiYjNDM7CiYjNDM7CWlmIChwdGVfeW91bmcoZW50cnkpKSB7CiYjNDM7CQlyZWZlcmVuY2VkID0gdHJ1ZTsKJiM0MzsJCWVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTsKJiM0MzsJCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsCiYjNDM7CQkJCSAgICAgYWRkciAmIzQzOyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSkKJiM0MzsJCXJlZmVyZW5jZWQgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAocmVmZXJlbmNlZCkKJiM0MzsJCWZvbGlvX3NldF95b3VuZyhmb2xpbyk7CiYjNDM7CiYjNDM7CWZvbGlvX3NldF9pZGxlKGZvbGlvKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCS8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KJiM0MzsKICNkZWZpbmUgREFNT05fTUFYX1NVQlNDT1JFCSgxMDApCiAjZGVmaW5lIERBTU9OX01BWF9BR0VfSU5fTE9HCSgzMikKIApAQCAtMTYzLDEwICYjNDM7MjE2LDE1IEBAIHN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJd2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKCZhbXA7cHZtdykpIHsKIAkJYWRkciA9IHB2bXcuYWRkcmVzczsKLQkJaWYgKHB2bXcucHRlKQotCQkJZGFtb25fcHRlcF9ta29sZChwdm13LnB0ZSwgdm1hLCBhZGRyKTsKLQkJZWxzZQomIzQzOwkJaWYgKHB2bXcucHRlKSB7CiYjNDM7CQkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpCiYjNDM7CQkJCWRhbW9uX2h1Z2V0bGJfbWtvbGQocHZtdy5wdGUsIHZtYS0mZ3Q7dm1fbW0sIHZtYSwKJiM0MzsJCQkJCQlhZGRyKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWRhbW9uX3B0ZXBfbWtvbGQocHZtdy5wdGUsIHZtYSwgYWRkcik7CiYjNDM7CQl9IGVsc2UgewogCQkJZGFtb25fcG1kcF9ta29sZChwdm13LnBtZCwgdm1hLCBhZGRyKTsKJiM0MzsJCX0KIAl9CiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xOTEsMjcgJiM0MzsyNDksNTUgQEAgdm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQomIzQzO3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIChwdGVfcHJlc2VudChlbnRyeSkgJmFtcDsmYW1wOyBwdGVfeW91bmcoZW50cnkpKSB8fAomIzQzOwkJIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHwKJiM0MzsJCW1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHZtYS0mZ3Q7dm1fbW0sIGFkZHIpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgkvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZGFtb25fcHRlX3lvdW5nKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcHRlX3QgZW50cnkgPSBwdGVwX2dldChwdGUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdCBhY3R1YWxseSBtYXAKJiM0MzsJICogcGFnZXMgYXJlICYjMzQ7b2xkJiMzNDsgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4gVGhlIE1NVSBub3RpZmllciB0YWtlcyBjYXJlCiYjNDM7CSAqIG9mIGFueSBkZXZpY2UgYXNwZWN0cy4KJiM0MzsJICovCiYjNDM7CXJldHVybiAocHRlX3ByZXNlbnQoZW50cnkpICZhbXA7JmFtcDsgcHRlX3lvdW5nKGVudHJ5KSkgfHwKJiM0MzsJCSFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8CiYjNDM7CQltbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtJmd0O3ZtX21tLCBhZGRyKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKQogewogCWJvb2wgKmFjY2Vzc2VkID0gYXJnOwogCURFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyLCAwKTsKLQlwdGVfdCBwdGU7CiAKIAkqYWNjZXNzZWQgPSBmYWxzZTsKIAl3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoJmFtcDtwdm13KSkgewogCQlhZGRyID0gcHZtdy5hZGRyZXNzOwogCQlpZiAocHZtdy5wdGUpIHsKLQkJCXB0ZSA9IHB0ZXBfZ2V0KHB2bXcucHRlKTsKLQotCQkJLyoKLQkJCSAqIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0Ci0JCQkgKiBhY3R1YWxseSBtYXAgcGFnZXMgYXJlICYjMzQ7b2xkJiMzNDsgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4KLQkJCSAqIFRoZSBNTVUgbm90aWZpZXIgdGFrZXMgY2FyZSBvZiBhbnkgZGV2aWNlIGFzcGVjdHMuCi0JCQkgKi8KLQkJCSphY2Nlc3NlZCA9IChwdGVfcHJlc2VudChwdGUpICZhbXA7JmFtcDsgcHRlX3lvdW5nKHB0ZSkpIHx8Ci0JCQkJIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHwKLQkJCQltbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtJmd0O3ZtX21tLCBhZGRyKTsKJiM0MzsJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKJiM0MzsJCQkJKmFjY2Vzc2VkID0gZGFtb25faHVnZXRsYl95b3VuZyhwdm13LnB0ZSwgdm1hLAomIzQzOwkJCQkJCWFkZHIsIGZvbGlvKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCSphY2Nlc3NlZCA9IGRhbW9uX3B0ZV95b3VuZyhwdm13LnB0ZSwgdm1hLAomIzQzOwkJCQkJCWFkZHIsIGZvbGlvKTsKIAkJfSBlbHNlIHsKICNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKIAkJCXBtZF90IHBtZCA9IHBtZHBfZ2V0KHB2bXcucG1kKTsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaAppbmRleCAzOGQyOTU0ODhmYTE4Li4xNzJmMGYxN2M0YTg0IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oCkBAIC02LDkgJiM0Mzs2LDE5IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZGFtb24uaCZndDsKIAogc3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pOwomIzQzO3N0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X21vbml0b3JfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pOwogCiB2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7CiB2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7CiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKJiM0Mzt2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKJiM0Mzt7CiYjNDM7fQomIzQzOyNlbmRpZgkvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCiB2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogYm9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmMKaW5kZXggNWM2YzNhNTk3ZmQwYi4uZWQ3YjdmMzEyOTFhMCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vcGFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jCkBAIC0zNyw3ICYjNDM7MzcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9jb3JlX2FkZHIoCiAKIHN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKQogewotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGFkZHIpKTsKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7CiAKIAlpZiAoIWZvbGlvKQogCQlyZXR1cm47CkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVja3Moc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCiBzdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkcikKIHsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyhQSFlTX1BGTihwYWRkcikpOwogCWJvb2wgYWNjZXNzZWQ7CiAKIAlpZiAoIWZvbGlvKQpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmMKaW5kZXggMDY0ODQwMGIyZDY1Yi4uMTUzNzlkOTg0Njg5ZSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdmFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jCkBAIC0yOTMsMzMgJiM0MzsyOTMsNiBAQCBzdGF0aWMgaW50IGRhbW9uX21rb2xkX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiB9CiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi1zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JYm9vbCByZWZlcmVuY2VkID0gZmFsc2U7Ci0JcHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpOwotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpOwotCXVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwotCi0JZm9saW9fZ2V0KGZvbGlvKTsKLQotCWlmIChwdGVfeW91bmcoZW50cnkpKSB7Ci0JCXJlZmVyZW5jZWQgPSB0cnVlOwotCQllbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7Ci0JCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpOwotCX0KLQotCWlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsCi0JCQkJICAgICBhZGRyICYjNDM7IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKQotCQlyZWZlcmVuY2VkID0gdHJ1ZTsKLQotCWlmIChyZWZlcmVuY2VkKQotCQlmb2xpb19zZXRfeW91bmcoZm9saW8pOwotCi0JZm9saW9fc2V0X2lkbGUoZm9saW8pOwotCWZvbGlvX3B1dChmb2xpbyk7Ci19Ci0KIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCQkgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI4NQoJCQkJCQkJb3V0cHV0OiAxNTgKCQkJCQkJCXRob3VnaHRzOiAxMDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50IGZvciBEQU1PTiBIdWdldGxiIEZvbGlvIFN1cHBvcnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGlzIHBhdGNoIHRvdWNoZXMgdGhlIERBTU9OIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0cyBkZWFsaW5nIHdpdGggZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy4gSSBzZWUgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlcywgZm9jdXNpbmcgb24gYWRkaW5nIHN1cHBvcnQgZm9yIGh1Z2V0bGIgZm9saW9zIHdpdGhpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nIGFzcGVjdCBvZiBEQU1PTi4KClRoZSBwYXRjaCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgaG93IERBTU9OIGludGVyYWN0cyB3aXRoIGh1Z2V0bGIgcGFnZXM6IEl0IGludHJvZHVjZXMgYSBgZGFtb25fZm9saW9fYWNjZXB0YWJsZWAgZnVuY3Rpb24gdGhhdCBub3cgY29uc2lkZXJzIGh1Z2V0bGIgZm9saW9zLCBtb2RpZmllcyBgX19kYW1vbl9nZXRfZm9saW9gIHRvIHVzZSB0aGUgYWNjZXB0YWJpbGl0eSBmdW5jdGlvbiwgYW5kIHJlZmFjdG9ycyBgZGFtb25faHVnZXRsYl9ta29sZGAgdG8gYmUgc2hhcmVkLiBJdCBhbHNvIG1ha2VzIGNvcnJlc3BvbmRpbmcgYWRqdXN0bWVudHMgdG8gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMuCgpOb3csIGxldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuCgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZSwgSSBkb24mIzM5O3Qgc2VlIGFueSBuZXcgc3RydWN0dXJlcyBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIG9uZXMgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBmaWVsZHMuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBObywgdGhlIGNvZGUmIzM5O3MgbG9naWMgaXMgc291bmQuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8uIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkuCjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGlzc3VlcyB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8qKiBOb3QgaW4gdGhpcyBwYXRjaC4KCkkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGUgY29kZSwgcGFydGljdWxhcmx5IGBkYW1vbl9odWdldGxiX21rb2xkYCBhbmQgYGRhbW9uX2ZvbGlvX3lvdW5nX29uZWAsIHdoaWNoIGxvb2sgbGlrZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBjYW5kaWRhdGVzLCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIHdheXMgdGhhdCBjb3VsZCBjYXVzZSBhIHByb2JsZW0uIFZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCgpSZWdhcmRpbmcgbWVtb3J5IHNhZmV0eSwgdGhlIHJpc2tzIGhlcmUgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSYjMzk7cmUgZGVhbGluZyB3aXRoIGZvbGlvIHJlZmNvdW50aW5nLCBwYWdlIHRhYmxlIHdhbGtzLCBhbmQgaHVnZXRsYiBwYWdlIGhhbmRsaW5nOiByZWZjb3VudGluZyBidWdzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBsb2NraW5nIGlzc3VlcywgYW5kIGdlbmVyYWwgTU0vcGFnaW5nIGJ1Z3MuIEhvd2V2ZXIsIEtBU0FOIGFuZCBMT0NLREVQIGFyZSB0aGUgYXBwcm9wcmlhdGUgdG9vbHMgdG8gZGV0ZWN0IHRob3NlLiBUaGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgKipOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZSoqLiBLQVNBTiwgd2l0aCB0aGUgYWRkZWQgYmVuZWZpdCBvZiBMT0NLREVQLCB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMgaGVyZS4gV2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBhbnl0aGluZyB0aGF0IGZhbGxzIGludG8gS01TQU4mIzM5O3MgZG9tYWluLiBTbywgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIG1ha2UgdGhhdCBjYWxsLiBJIHdpbGwgc2V0IHRoZSByZXN1bHRzIHRvIGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSB0byBzdXBwb3J0IGh1Z2V0bGIgZm9saW9zIGR1cmluZyBwaHlzaWNhbCBhZGRyZXNzIGFjY2VzcyBtb25pdG9yaW5nIChwYWRkcikgYW5kIHBhZ2UgdGFibGUgd2Fsa3MuIEl0IHJlZmFjdG9ycyBmb2xpbyBmZXRjaGluZyBhbmQgbWtvbGQveW91bmcgaGFuZGxpbmcgdG8gYWNjb3VudCBmb3IgaHVnZXRsYiBmb2xpb3MuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHJldHVybiB2YWx1ZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQgaW4gaGVhcC9zdGFjayBhbGxvY2F0aW9ucy4gQW55IG1lbW9yeSBzYWZldHkgcmlza3MgKHN1Y2ggYXMgZm9saW8gcmVmY291bnRpbmcsIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHBhZ2UgdGFibGUgd2FsayBpc3N1ZXMpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSB0byBzdXBwb3J0IGh1Z2V0bGIgZm9saW9zIGR1cmluZyBwaHlzaWNhbCBhZGRyZXNzIGFjY2VzcyBtb25pdG9yaW5nIChwYWRkcikgYW5kIHBhZ2UgdGFibGUgd2Fsa3MuIEl0IHJlZmFjdG9ycyBmb2xpbyBmZXRjaGluZyBhbmQgbWtvbGQveW91bmcgaGFuZGxpbmcgdG8gYWNjb3VudCBmb3IgaHVnZXRsYiBmb2xpb3MuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHJldHVybiB2YWx1ZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQgaW4gaGVhcC9zdGFjayBhbGxvY2F0aW9ucy4gQW55IG1lbW9yeSBzYWZldHkgcmlza3MgKHN1Y2ggYXMgZm9saW8gcmVmY291bnRpbmcsIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHBhZ2UgdGFibGUgd2FsayBpc3N1ZXMpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE1OjE3OjQzLjM4NjQxNTgwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODEwNDkwNzIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJIVUdFVExCX1BBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9nZXRfbW9uaXRvcl9mb2xpb1wiLFxuICAgIFwiZGFtb25faHVnZXRsYl9ta29sZFwiLFxuICAgIFwiZGFtb25fZm9saW9fbWtvbGRcIixcbiAgICBcImRhbW9uX2ZvbGlvX3lvdW5nXCIsXG4gICAgXCJkYW1vbl9nZXRfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4dGVuZHMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHRvIHN1cHBvcnQgaHVnZXRsYiBmb2xpb3MgZHVyaW5nIHBoeXNpY2FsIGFkZHJlc3MgYWNjZXNzIG1vbml0b3JpbmcgKHBhZGRyKSBhbmQgcGFnZSB0YWJsZSB3YWxrcy4gSXQgcmVmYWN0b3JzIGZvbGlvIGZldGNoaW5nIGFuZCBta29sZC95b3VuZyBoYW5kbGluZyB0byBhY2NvdW50IGZvciBodWdldGxiIGZvbGlvcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgcmV0dXJuIHZhbHVlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGxlZnQgdW5pbml0aWFsaXplZCBpbiBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLiBBbnkgbWVtb3J5IHNhZmV0eSByaXNrcyAoc3VjaCBhcyBmb2xpbyByZWZjb3VudGluZywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgcGFnZSB0YWJsZSB3YWxrIGlzc3VlcykgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRlbmRzIERBTU9OIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZyB0byBzdXBwb3J0IGh1Z2V0bGIgZm9saW9zIGJ5IGludHJvZHVjaW5nIGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIHBhZ2UgdGFibGUgd2FsayBjYWxsYmFja3MgKGRhbW9uX2ZvbGlvX21rb2xkLCBkYW1vbl9mb2xpb195b3VuZywgZGFtb25faHVnZXRsYl9ta29sZCkgdG8gaGFuZGxlIGh1Z2V0bGIgcGFnZXMuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzL2ludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE1OjE3OjQzLjM4NjQyMDk3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMzI2ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjk2YTJkMWQ3NTBjNTgyNTc3Njk1OWI3MzUxMTQ2Y2I4ZDkwYTE2ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDE1OjE3OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xcbmluZGV4IGZiZGE3MGQ4ZWE0ZDAuLjgwMjA3YjU2YzZmZGEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuQEAgLTMsNiArMyw3IEBAXFxuICAqIENvbW1vbiBDb2RlIGZvciBEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxuICAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pZ3JhdGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tdV9ub3RpZmllci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV9pZGxlLmhcXHUwMDNlXFxuQEAgLTE0LDE0ICsxNSwyMCBAQFxcbiAjaW5jbHVkZSBcXFwiLi4vaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm9wcy1jb21tb24uaFxcXCJcXG4gXFxuK3N0YXRpYyBib29sIGRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb25pdG9yKVxcbit7XFxuK1xcdHJldHVybiBmb2xpb190ZXN0X2xydShmb2xpbykgfHxcXG4rXFx0XFx0KG1vbml0b3IgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSk7XFxuK31cXG4rXFxuIC8qXFxuLSAqIEdldCBhbiBvbmxpbmUgcGFnZSBmb3IgYSBwZm4gaWYgaXQncyBpbiB0aGUgTFJVIGxpc3QuICBPdGhlcndpc2UsIHJldHVybnNcXG4tICogTlVMTC5cXG4rICogR2V0IGFuIG9ubGluZSBwYWdlIGZvciBhIHBmbiBpZiBpdCdzIGluIHRoZSBMUlUgbGlzdCwgb3IgYSBodWdldGxiIGZvbGlvIGlmXFxuKyAqIEBtb25pdG9yIGlzIHNldC4gIE90aGVyd2lzZSwgcmV0dXJucyBOVUxMLlxcbiAgKlxcbiAgKiBUaGUgYm9keSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHN0b2xlbiBmcm9tIHRoZSAncGFnZV9pZGxlX2dldF9mb2xpbygpJy4gIFdlXFxuICAqIHN0ZWFsIHJhdGhlciB0aGFuIHJldXNlIGl0IGJlY2F1c2UgdGhlIGNvZGUgaXMgcXVpdGUgc2ltcGxlLlxcbiAgKi9cXG4tc3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXFxuK3N0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIG1vbml0b3IpXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG5AQCAtMzIsMTMgKzM5LDMwIEBAIHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuIFxcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHRpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSkge1xcbitcXHRpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHxcXG4rXFx0XFx0XFx0IWRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoZm9saW8sIG1vbml0b3IpKSB7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdGZvbGlvID0gTlVMTDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gZm9saW87XFxuIH1cXG4gXFxuK3N0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIGZhbHNlKTtcXG4rfVxcbitcXG4rLypcXG4rICogU2FtZSB0byBkYW1vbl9nZXRfZm9saW8oKSwgYnV0IGFsc28gYWNjZXB0cyBodWdldGxiIGZvbGlvcywgd2hpY2ggYXJlXFxuKyAqIG1hbmFnZWQgb3V0c2lkZSBvZiB0aGUgTFJVIGxpc3RzLiAgQWltZWQgdG8gYmUgdXNlZCBieSBhY2Nlc3MgbW9uaXRvcmluZ1xcbisgKiBwcmltaXRpdmVzLiAgREFNT1MgYWN0aW9ucyB0aGF0IGFzc3VtZSBMUlUtbWFuYWdlZCBmb2xpb3Mgc2hvdWxkIGtlZXAgdXNpbmdcXG4rICogZGFtb25fZ2V0X2ZvbGlvKCkuXFxuKyAqL1xcbitzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIHRydWUpO1xcbit9XFxuK1xcbiB2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4ge1xcbiBcXHRwdGVfdCBwdGV2YWwgPSBwdGVwX2dldChwdGUpO1xcbkBAIC05OCw2ICsxMjIsMzUgQEAgdm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJcXG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbit2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuK3tcXG4rXFx0Ym9vbCByZWZlcmVuY2VkID0gZmFsc2U7XFxuK1xcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xcbitcXG4rXFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4rXFxuK1xcdGlmIChwdGVfeW91bmcoZW50cnkpKSB7XFxuK1xcdFxcdHJlZmVyZW5jZWQgPSB0cnVlO1xcbitcXHRcXHRlbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7XFxuK1xcdFxcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxcbitcXHRcXHRcXHRcXHQgICAgIGFkZHIgKyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSlcXG4rXFx0XFx0cmVmZXJlbmNlZCA9IHRydWU7XFxuK1xcbitcXHRpZiAocmVmZXJlbmNlZClcXG4rXFx0XFx0Zm9saW9fc2V0X3lvdW5nKGZvbGlvKTtcXG4rXFxuK1xcdGZvbGlvX3NldF9pZGxlKGZvbGlvKTtcXG4rXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rfVxcbisjZW5kaWZcXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuK1xcbiAjZGVmaW5lIERBTU9OX01BWF9TVUJTQ09SRVxcdCgxMDApXFxuICNkZWZpbmUgREFNT05fTUFYX0FHRV9JTl9MT0dcXHQoMzIpXFxuIFxcbkBAIC0xNjMsMTAgKzIxNiwxNSBAQCBzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19ta29sZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFxuIFxcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpIHtcXG4gXFx0XFx0YWRkciA9IHB2bXcuYWRkcmVzcztcXG4tXFx0XFx0aWYgKHB2bXcucHRlKVxcbi1cXHRcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xcbi1cXHRcXHRlbHNlXFxuK1xcdFxcdGlmIChwdm13LnB0ZSkge1xcbitcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4rXFx0XFx0XFx0XFx0ZGFtb25faHVnZXRsYl9ta29sZChwdm13LnB0ZSwgdm1hLVxcdTAwM2V2bV9tbSwgdm1hLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRhZGRyKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRkYW1vbl9wbWRwX21rb2xkKHB2bXcucG1kLCB2bWEsIGFkZHIpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG5AQCAtMTkxLDI3ICsyNDksNTUgQEAgdm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4rc3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl95b3VuZyhwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUpO1xcbitcXG4rXFx0cmV0dXJuIChwdGVfcHJlc2VudChlbnRyeSkgXFx1MDAyNlxcdTAwMjYgcHRlX3lvdW5nKGVudHJ5KSkgfHxcXG4rXFx0XFx0IWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHxcXG4rXFx0XFx0bW11X25vdGlmaWVyX3Rlc3RfeW91bmcodm1hLVxcdTAwM2V2bV9tbSwgYWRkcik7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl95b3VuZyhwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuK1xcbitzdGF0aWMgYm9vbCBkYW1vbl9wdGVfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRwdGVfdCBlbnRyeSA9IHB0ZXBfZ2V0KHB0ZSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdCBhY3R1YWxseSBtYXBcXG4rXFx0ICogcGFnZXMgYXJlIFxcXCJvbGRcXFwiIGZyb20gYSBDUFUgcGVyc3BlY3RpdmUuIFRoZSBNTVUgbm90aWZpZXIgdGFrZXMgY2FyZVxcbitcXHQgKiBvZiBhbnkgZGV2aWNlIGFzcGVjdHMuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gKHB0ZV9wcmVzZW50KGVudHJ5KSBcXHUwMDI2XFx1MDAyNiBwdGVfeW91bmcoZW50cnkpKSB8fFxcbitcXHRcXHQhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxcbitcXHRcXHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtXFx1MDAzZXZtX21tLCBhZGRyKTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgZGFtb25fZm9saW9feW91bmdfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmFyZylcXG4ge1xcbiBcXHRib29sICphY2Nlc3NlZCA9IGFyZztcXG4gXFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHIsIDApO1xcbi1cXHRwdGVfdCBwdGU7XFxuIFxcbiBcXHQqYWNjZXNzZWQgPSBmYWxzZTtcXG4gXFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbiBcXHRcXHRhZGRyID0gcHZtdy5hZGRyZXNzO1xcbiBcXHRcXHRpZiAocHZtdy5wdGUpIHtcXG4tXFx0XFx0XFx0cHRlID0gcHRlcF9nZXQocHZtdy5wdGUpO1xcbi1cXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsIHRoYXRcXG4tXFx0XFx0XFx0ICogYWN0dWFsbHkgbWFwIHBhZ2VzIGFyZSBcXFwib2xkXFxcIiBmcm9tIGEgQ1BVIHBlcnNwZWN0aXZlLlxcbi1cXHRcXHRcXHQgKiBUaGUgTU1VIG5vdGlmaWVyIHRha2VzIGNhcmUgb2YgYW55IGRldmljZSBhc3BlY3RzLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0KmFjY2Vzc2VkID0gKHB0ZV9wcmVzZW50KHB0ZSkgXFx1MDAyNlxcdTAwMjYgcHRlX3lvdW5nKHB0ZSkpIHx8XFxuLVxcdFxcdFxcdFxcdCFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XFxuLVxcdFxcdFxcdFxcdG1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIpO1xcbitcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4rXFx0XFx0XFx0XFx0KmFjY2Vzc2VkID0gZGFtb25faHVnZXRsYl95b3VuZyhwdm13LnB0ZSwgdm1hLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRhZGRyLCBmb2xpbyk7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0KmFjY2Vzc2VkID0gZGFtb25fcHRlX3lvdW5nKHB2bXcucHRlLCB2bWEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGFkZHIsIGZvbGlvKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiBcXHRcXHRcXHRwbWRfdCBwbWQgPSBwbWRwX2dldChwdm13LnBtZCk7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaFxcbmluZGV4IDM4ZDI5NTQ4OGZhMTguLjE3MmYwZjE3YzRhODQgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oXFxuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXFxuQEAgLTYsOSArNiwxOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGFtb24uaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKTtcXG4rc3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XFxuIFxcbiB2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxuIHZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4rdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbitcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuK3tcXG4rfVxcbisjZW5kaWZcXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuIHZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIGJvb2wgZGFtb25fZm9saW9feW91bmcoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xcbmluZGV4IDVjNmMzYTU5N2ZkMGIuLmVkN2I3ZjMxMjkxYTAgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcXG5AQCAtMzcsNyArMzcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9jb3JlX2FkZHIoXFxuIFxcbiBzdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcXG4ge1xcbi1cXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyhQSFlTX1BGTihwYWRkcikpO1xcbiBcXG4gXFx0aWYgKCFmb2xpbylcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcbiBzdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkcilcXG4ge1xcbi1cXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyhQSFlTX1BGTihwYWRkcikpO1xcbiBcXHRib29sIGFjY2Vzc2VkO1xcbiBcXG4gXFx0aWYgKCFmb2xpbylcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5pbmRleCAwNjQ4NDAwYjJkNjViLi4xNTM3OWQ5ODQ2ODllIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXFxuQEAgLTI5MywzMyArMjkzLDYgQEAgc3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbi1zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi17XFxuLVxcdGJvb2wgcmVmZXJlbmNlZCA9IGZhbHNlO1xcbi1cXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XFxuLVxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xcbi1cXHR1bnNpZ25lZCBsb25nIHBzaXplID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcXG4tXFxuLVxcdGZvbGlvX2dldChmb2xpbyk7XFxuLVxcbi1cXHRpZiAocHRlX3lvdW5nKGVudHJ5KSkge1xcbi1cXHRcXHRyZWZlcmVuY2VkID0gdHJ1ZTtcXG4tXFx0XFx0ZW50cnkgPSBwdGVfbWtvbGQoZW50cnkpO1xcbi1cXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgZW50cnksIHBzaXplKTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkcixcXG4tXFx0XFx0XFx0XFx0ICAgICBhZGRyICsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpXFxuLVxcdFxcdHJlZmVyZW5jZWQgPSB0cnVlO1xcbi1cXG4tXFx0aWYgKHJlZmVyZW5jZWQpXFxuLVxcdFxcdGZvbGlvX3NldF95b3VuZyhmb2xpbyk7XFxuLVxcbi1cXHRmb2xpb19zZXRfaWRsZShmb2xpbyk7XFxuLVxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbiBcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE1OjE3OjQzLjg0ODMyOTc4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODk4ODkzNDcxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fZ2V0X21vbml0b3JfZm9saW9cIixcbiAgICBcImRhbW9uX2h1Z2V0bGJfbWtvbGRcIixcbiAgICBcImRhbW9uX2ZvbGlvX21rb2xkXCIsXG4gICAgXCJkYW1vbl9mb2xpb195b3VuZ1wiLFxuICAgIFwiZGFtb25fZ2V0X2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyBEQU1PTiBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcgdG8gc3VwcG9ydCBodWdldGxiIGZvbGlvcyBieSBpbnRyb2R1Y2luZyBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbygpIGFuZCB1cGRhdGluZyBwYWdlIHRhYmxlIHdhbGsgY2FsbGJhY2tzIChkYW1vbl9mb2xpb19ta29sZCwgZGFtb25fZm9saW9feW91bmcsIGRhbW9uX2h1Z2V0bGJfbWtvbGQpIHRvIGhhbmRsZSBodWdldGxiIHBhZ2VzLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcy9pbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOTZhMmQxZDc1MGM1ODI1Nzc2OTU5YjczNTExNDZjYjhkOTBhMTZmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNToxNzo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggZmJkYTcwZDhlYTRkMC4uODAyMDdiNTZjNmZkYSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5AQCAtMyw2ICszLDcgQEBcbiAgKiBDb21tb24gQ29kZSBmb3IgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xuICAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pZ3JhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tdV9ub3RpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9pZGxlLmhcdTAwM2VcbkBAIC0xNCwxNCArMTUsMjAgQEBcbiAjaW5jbHVkZSBcIi4uL2ludGVybmFsLmhcIlxuICNpbmNsdWRlIFwib3BzLWNvbW1vbi5oXCJcbiBcbitzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19hY2NlcHRhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW9uaXRvcilcbit7XG4rXHRyZXR1cm4gZm9saW9fdGVzdF9scnUoZm9saW8pIHx8XG4rXHRcdChtb25pdG9yIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKTtcbit9XG4rXG4gLypcbi0gKiBHZXQgYW4gb25saW5lIHBhZ2UgZm9yIGEgcGZuIGlmIGl0J3MgaW4gdGhlIExSVSBsaXN0LiAgT3RoZXJ3aXNlLCByZXR1cm5zXG4tICogTlVMTC5cbisgKiBHZXQgYW4gb25saW5lIHBhZ2UgZm9yIGEgcGZuIGlmIGl0J3MgaW4gdGhlIExSVSBsaXN0LCBvciBhIGh1Z2V0bGIgZm9saW8gaWZcbisgKiBAbW9uaXRvciBpcyBzZXQuICBPdGhlcndpc2UsIHJldHVybnMgTlVMTC5cbiAgKlxuICAqIFRoZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24gaXMgc3RvbGVuIGZyb20gdGhlICdwYWdlX2lkbGVfZ2V0X2ZvbGlvKCknLiAgV2VcbiAgKiBzdGVhbCByYXRoZXIgdGhhbiByZXVzZSBpdCBiZWNhdXNlIHRoZSBjb2RlIGlzIHF1aXRlIHNpbXBsZS5cbiAgKi9cbi1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbitzdGF0aWMgc3RydWN0IGZvbGlvICpfX2RhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBtb25pdG9yKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuQEAgLTMyLDEzICszOSwzMCBAQCBzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbiBcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiBcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8ICFmb2xpb190ZXN0X2xydShmb2xpbykpIHtcbitcdGlmICh1bmxpa2VseShwYWdlX2ZvbGlvKHBhZ2UpICE9IGZvbGlvKSB8fFxuK1x0XHRcdCFkYW1vbl9mb2xpb19hY2NlcHRhYmxlKGZvbGlvLCBtb25pdG9yKSkge1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRmb2xpbyA9IE5VTEw7XG4gXHR9XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuK3N0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIGZhbHNlKTtcbit9XG4rXG4rLypcbisgKiBTYW1lIHRvIGRhbW9uX2dldF9mb2xpbygpLCBidXQgYWxzbyBhY2NlcHRzIGh1Z2V0bGIgZm9saW9zLCB3aGljaCBhcmVcbisgKiBtYW5hZ2VkIG91dHNpZGUgb2YgdGhlIExSVSBsaXN0cy4gIEFpbWVkIHRvIGJlIHVzZWQgYnkgYWNjZXNzIG1vbml0b3JpbmdcbisgKiBwcmltaXRpdmVzLiAgREFNT1MgYWN0aW9ucyB0aGF0IGFzc3VtZSBMUlUtbWFuYWdlZCBmb2xpb3Mgc2hvdWxkIGtlZXAgdXNpbmdcbisgKiBkYW1vbl9nZXRfZm9saW8oKS5cbisgKi9cbitzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIHRydWUpO1xuK31cbitcbiB2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwdGVfdCBwdGV2YWwgPSBwdGVwX2dldChwdGUpO1xuQEAgLTk4LDYgKzEyMiwzNSBAQCB2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkclxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiB9XG4gXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbit2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0Ym9vbCByZWZlcmVuY2VkID0gZmFsc2U7XG4rXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcbitcdHVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuK1xuK1x0Zm9saW9fZ2V0KGZvbGlvKTtcbitcbitcdGlmIChwdGVfeW91bmcoZW50cnkpKSB7XG4rXHRcdHJlZmVyZW5jZWQgPSB0cnVlO1xuK1x0XHRlbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7XG4rXHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpO1xuK1x0fVxuK1xuK1x0aWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkcixcbitcdFx0XHRcdCAgICAgYWRkciArIGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKVxuK1x0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbitcbitcdGlmIChyZWZlcmVuY2VkKVxuK1x0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuK1xuK1x0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xuK1x0Zm9saW9fcHV0KGZvbGlvKTtcbit9XG4rI2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4rXG4gI2RlZmluZSBEQU1PTl9NQVhfU1VCU0NPUkVcdCgxMDApXG4gI2RlZmluZSBEQU1PTl9NQVhfQUdFX0lOX0xPR1x0KDMyKVxuIFxuQEAgLTE2MywxMCArMjE2LDE1IEBAIHN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG4gXHRcdGFkZHIgPSBwdm13LmFkZHJlc3M7XG4tXHRcdGlmIChwdm13LnB0ZSlcbi1cdFx0XHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xuLVx0XHRlbHNlXG4rXHRcdGlmIChwdm13LnB0ZSkge1xuK1x0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuK1x0XHRcdFx0ZGFtb25faHVnZXRsYl9ta29sZChwdm13LnB0ZSwgdm1hLVx1MDAzZXZtX21tLCB2bWEsXG4rXHRcdFx0XHRcdFx0YWRkcik7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0ZGFtb25fcHRlcF9ta29sZChwdm13LnB0ZSwgdm1hLCBhZGRyKTtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRkYW1vbl9wbWRwX21rb2xkKHB2bXcucG1kLCB2bWEsIGFkZHIpO1xuK1x0XHR9XG4gXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTkxLDI3ICsyNDksNTUgQEAgdm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIH1cbiBcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuK3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUpO1xuK1xuK1x0cmV0dXJuIChwdGVfcHJlc2VudChlbnRyeSkgXHUwMDI2XHUwMDI2IHB0ZV95b3VuZyhlbnRyeSkpIHx8XG4rXHRcdCFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XG4rXHRcdG1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHZtYS1cdTAwM2V2bV9tbSwgYWRkcik7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl95b3VuZyhwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rI2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4rXG4rc3RhdGljIGJvb2wgZGFtb25fcHRlX3lvdW5nKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cHRlX3QgZW50cnkgPSBwdGVwX2dldChwdGUpO1xuK1xuK1x0LypcbitcdCAqIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0IGFjdHVhbGx5IG1hcFxuK1x0ICogcGFnZXMgYXJlIFwib2xkXCIgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4gVGhlIE1NVSBub3RpZmllciB0YWtlcyBjYXJlXG4rXHQgKiBvZiBhbnkgZGV2aWNlIGFzcGVjdHMuXG4rXHQgKi9cbitcdHJldHVybiAocHRlX3ByZXNlbnQoZW50cnkpIFx1MDAyNlx1MDAyNiBwdGVfeW91bmcoZW50cnkpKSB8fFxuK1x0XHQhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuK1x0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtXHUwMDNldm1fbW0sIGFkZHIpO1xuK31cbitcbiBzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKVxuIHtcbiBcdGJvb2wgKmFjY2Vzc2VkID0gYXJnO1xuIFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHIsIDApO1xuLVx0cHRlX3QgcHRlO1xuIFxuIFx0KmFjY2Vzc2VkID0gZmFsc2U7XG4gXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbiBcdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbiBcdFx0aWYgKHB2bXcucHRlKSB7XG4tXHRcdFx0cHRlID0gcHRlcF9nZXQocHZtdy5wdGUpO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsIHRoYXRcbi1cdFx0XHQgKiBhY3R1YWxseSBtYXAgcGFnZXMgYXJlIFwib2xkXCIgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS5cbi1cdFx0XHQgKiBUaGUgTU1VIG5vdGlmaWVyIHRha2VzIGNhcmUgb2YgYW55IGRldmljZSBhc3BlY3RzLlxuLVx0XHRcdCAqL1xuLVx0XHRcdCphY2Nlc3NlZCA9IChwdGVfcHJlc2VudChwdGUpIFx1MDAyNlx1MDAyNiBwdGVfeW91bmcocHRlKSkgfHxcbi1cdFx0XHRcdCFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XG4tXHRcdFx0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtXHUwMDNldm1fbW0sIGFkZHIpO1xuK1x0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuK1x0XHRcdFx0KmFjY2Vzc2VkID0gZGFtb25faHVnZXRsYl95b3VuZyhwdm13LnB0ZSwgdm1hLFxuK1x0XHRcdFx0XHRcdGFkZHIsIGZvbGlvKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHQqYWNjZXNzZWQgPSBkYW1vbl9wdGVfeW91bmcocHZtdy5wdGUsIHZtYSxcbitcdFx0XHRcdFx0XHRhZGRyLCBmb2xpbyk7XG4gXHRcdH0gZWxzZSB7XG4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0XHRcdHBtZF90IHBtZCA9IHBtZHBfZ2V0KHB2bXcucG1kKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmggYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbmluZGV4IDM4ZDI5NTQ4OGZhMTguLjE3MmYwZjE3YzRhODQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uaFxuQEAgLTYsOSArNiwxOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RhbW9uLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XG4rc3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XG4gXG4gdm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xuIHZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuK3ZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rfVxuKyNlbmRpZlx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuIHZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggNWM2YzNhNTk3ZmQwYi4uZWQ3YjdmMzEyOTFhMCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0zNyw3ICszNyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2NvcmVfYWRkcihcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcbiB7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X21vbml0b3JfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcbiBcbiBcdGlmICghZm9saW8pXG4gXHRcdHJldHVybjtcbkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXG4gc3RhdGljIGJvb2wgZGFtb25fcGFfeW91bmcocGh5c19hZGRyX3QgcGFkZHIpXG4ge1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihwYWRkcikpO1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XG4gXHRib29sIGFjY2Vzc2VkO1xuIFxuIFx0aWYgKCFmb2xpbylcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggMDY0ODQwMGIyZDY1Yi4uMTUzNzlkOTg0Njg5ZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC0yOTMsMzMgKzI5Myw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbi1zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi17XG4tXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbi1cdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuLVx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4tXG4tXHRmb2xpb19nZXQoZm9saW8pO1xuLVxuLVx0aWYgKHB0ZV95b3VuZyhlbnRyeSkpIHtcbi1cdFx0cmVmZXJlbmNlZCA9IHRydWU7XG4tXHRcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcbi1cdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7XG4tXHR9XG4tXG4tXHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxuLVx0XHRcdFx0ICAgICBhZGRyICsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpXG4tXHRcdHJlZmVyZW5jZWQgPSB0cnVlO1xuLVxuLVx0aWYgKHJlZmVyZW5jZWQpXG4tXHRcdGZvbGlvX3NldF95b3VuZyhmb2xpbyk7XG4tXG4tXHRmb2xpb19zZXRfaWRsZShmb2xpbyk7XG4tXHRmb2xpb19wdXQoZm9saW8pO1xuLX1cbi1cbiBzdGF0aWMgaW50IGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxNzo0My44NDgzMzEyMDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODQ2ODQxODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGFkZGl0aW9uIGlzIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydCwgYW5kIGlmIHNvLCBob3cgdG8gYmVzdCBhcHByb2FjaCBpdC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy5cblxuU28sIHRoZSBwYXRjaCB0b3VjaGVzIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCBgbW0vZGFtb24vb3BzLWNvbW1vbi5oYCwgYG1tL2RhbW9uL3BhZGRyLmNgLCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBJdCBsb29rcyBsaWtlIGl0J3MgYWxsIGFib3V0IGludGVncmF0aW5nIGh1Z2V0bGIgZm9saW8gc3VwcG9ydCBpbnRvIERBTU9OJ3MgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nLiBJbnRlcmVzdGluZy5cblxuU3BlY2lmaWNhbGx5OlxuXG4qICAgSXQgYWRkcyB0aGUgYWJpbGl0eSB0byBtb25pdG9yIGh1Z2V0bGIgZm9saW9zIHdpdGhpbiBEQU1PTidzIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZy5cbiogICBUaGUgYGRhbW9uX2ZvbGlvX2FjY2VwdGFibGVgIGZ1bmN0aW9uIG5vdyBpbmNsdWRlcyBhIGNoZWNrIGZvciBodWdldGxiIGZvbGlvcy4gVGhhdOKAmXMga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNoZWNrIHdpbGwgdHJpZ2dlci5cbiogICBgX19kYW1vbl9nZXRfZm9saW9gIGFuZCBpdHMgY2FsbGVycyBhcmUgcmVmYWN0b3JlZCB0byBoYW5kbGUgdGhlIFwibW9uaXRvclwiIGNvbnRleHQgd2l0aCBuZXcgZnVuY3Rpb25zLlxuKiAgIGBkYW1vbl9odWdldGxiX21rb2xkYCBpcyBtb3ZlZCBhbmQgZXhwb3NlZCwgd2hpY2ggaXMgcmVsZXZhbnQgYXMgaXQncyBub3cgaW52b2x2ZWQgaW4gbW9yZSBwbGFjZXMuXG4qICAgYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAgYW5kIGBkYW1vbl9mb2xpb195b3VuZ19vbmVgIGFyZSB1cGRhdGVkIHRvIGNhbGwgdGhlc2UgbmV3IGZ1bmN0aW9ucyB0b28uXG4qICAgYGRhbW9uX3BhX21rb2xkYCBhbmQgYGRhbW9uX3BhX3lvdW5nYCBoYXZlIGNoYW5nZWQgdG8gdXNlIHRoZSBuZXcgYGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvYCBmdW5jdGlvbi5cblxuTm93LCB0byBhc3Nlc3MgZnV6emluZyBwb3RlbnRpYWwsIEkgbmVlZCB0byBrbm93IHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gVGhpcyBpcyB3aGVyZSBJJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgY2hlY2sgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IGRlcGVuZGVuY2llcyBvbiBEQU1PTiBmZWF0dXJlcyBhbmQgSFVHRVRMQiBjb25maWd1cmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYnVpbGRpbmcgYSBmdXp6aW5nIHRhcmdldCB0aGF0IGV4cG9zZXMgdGhpcyBmdW5jdGlvbmFsaXR5LlxuXG5CYXNlZCBvbiB0aGlzIHF1aWNrIGFuYWx5c2lzLCBJJ2Qgc2F5IHRoaXMgcGF0Y2ggaXMgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZy4gVGhlIGNoYW5nZXMgdG8gZm9saW8gaGFuZGxpbmcgYW5kIHRoZSBpbnRlZ3JhdGlvbiBvZiBodWdldGxiIHN1cHBvcnQgaW50cm9kdWNlIG5ldyBjb2RlIHBhdGhzIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gTXkgbmV4dCBzdGVwcyB3aWxsIGJlIHRvIGdldCB0aGUgY29uZmlndXJhdGlvbiByaWdodCBhbmQgdGhlbiBpZGVudGlmeSBwb3RlbnRpYWwgZnV6eiB0YXJnZXRzIHdpdGhpbiB0aGlzIG1vZGlmaWVkIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyODgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxNzo1MC42OTUxNzU3MDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgREFNT05cXG4gICA2OlxcdFxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxcbiAgIDk6XFx0XFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcXG4gIDEwOlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcXG4gIDEzOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIERBTU9OXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG4gIDIwOlxcdFxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxuICAyMTpcXHRcXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXFxuICAyMjpcXHRcXHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNTpcXHRcXG4gIDI2OlxcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxuICAyNzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICAyOTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDM0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIERBTU9OX1ZBRERSXFxuICAzOTpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNTA6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA1MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDU0OlxcdFxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxuICA1NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDU5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA2MDpcXHRcXHRoZWxwXFxuICA2MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA2NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBEQU1PTl9TWVNGU1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbiAgNzE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG4gIDc0OlxcdFxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuICA3NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNzk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDgwOlxcdFxcdGhlbHBcXG4gIDgxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgODI6XFx0XFxuICA4MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgODQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgODc6XFx0XFxuICA4ODpcXHRjb25maWcgREFNT05fUkVDTEFJTVxcbiAgODk6XFx0XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuICA5MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxuICA5MTpcXHRcXHRoZWxwXFxuICA5MjpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xcbiAgOTM6XFx0XFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXFxuICA5NDpcXHRcXHQgIHRob3NlLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHQgIFRoaXMgaXMgc3VnZ2VzdGVkIHRvIGJlIHVzZWQgYXMgYSBwcm9hY3RpdmUgYW5kIGxpZ2h0d2VpZ2h0XFxuICA5NzpcXHRcXHQgIHJlY2xhbWF0aW9uIHVuZGVyIGxpZ2h0IG1lbW9yeSBwcmVzc3VyZSwgd2hpbGUgdGhlIHRyYWRpdGlvbmFsIHBhZ2VcXG4gIDk4OlxcdFxcdCAgc2Nhbm5pbmctYmFzZWQgcmVjbGFtYXRpb24gaXMgdXNlZCBmb3IgaGVhdnkgcHJlc3N1cmUuXFxuICA5OTpcXHRcXG4gMTAwOlxcdGNvbmZpZyBEQU1PTl9MUlVfU09SVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxNzo1MC42OTUyNTg4MDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzI4MzY1Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipNYWtlZmlsZSBFeHBsb3JhdGlvbiBmb3IgT3BzLUNvbW1vbiBhbmQgUGFkZHIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIFwiV2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgb3BzLWNvbW1vbmAgYW5kIGBwYWRkcmAgYXJlIGJlaW5nIGJ1aWx0LCByaWdodD9cIiBJJ3ZlIGdvdCBhIGh1bmNoIHRoYXQgYSBrZXkgcGllY2Ugb2YgdGhhdCBwdXp6bGUgbGllcyB3aXRoaW4gdGhlIGBtbS9kYW1vbi9NYWtlZmlsZWAuIE1ha2VzIHNlbnNlIOKAkyB0aGF0J3MgYSBsaWtlbHkgcGxhY2UgdG8gZmluZCBidWlsZCBpbnN0cnVjdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRob3NlIGNvbXBvbmVudHMuIExldCdzIGRlbHZlIGluIHRoZXJlIGFuZCBzZWUgd2hhdCBtYWdpYyB0aGUgTWFrZWZpbGUgaG9sZHMuIFRpbWUgdG8gcG9rZSBhcm91bmQgYW5kIHNlZSBob3cgdGhlc2UgdG9vbHMgYXJlIG9yY2hlc3RyYXRlZC4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgY29ycmVjdCBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTg0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxNzo1My40MjM2Mjc2MDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbiAgIDU6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxuICAgODpcXHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxNzo1My40MjM3MjI2ODFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTU3NTM2MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6XG5cbioqQ2hlY2tpbmcgYEhVR0VUTEJfUEFHRWAgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBIVUdFVExCX1BBR0VgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIGFzcGVjdCB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBwYWdlcywgYW5kIHNvbWV0aW1lcyB0aGUgc2ltcGxlc3QgdGhpbmdzIGFyZSBvdmVybG9va2VkLiBJIG5lZWQgdG8gY29uZmlybSBpdHMgY3VycmVudCBzdGF0dXMsIHRoZSBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggdGhlIHNwZWNpZmljIHByb2JsZW0gSSdtIGludmVzdGlnYXRpbmcuIEknbGwgbWVudGFsbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IHNlY3Rpb25zIG9mIHRoZSBjb25maWcgZmlsZSBhbmQgZG9jdW1lbnRhdGlvbiBqdXN0IHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIHNldHRpbmcuIE5vIHNlbnNlIGluIHNwaW5uaW5nIG15IHdoZWVscyBvbiBzb21ldGhpbmcgSSd2ZSBhbHJlYWR5IHNvbHZlZCB3aXRoIGEgc2ltcGxlIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTk3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxNzo1Ni41ODEyNjE4MDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5Mjg0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02ODk9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXFxuLS1cXG5tbS9LY29uZmlnLTY5MS1cXG5tbS9LY29uZmlnOjY5Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTY5My1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE1OjE3OjU2LjYzMzIxOTM0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MjM4ODUzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgSFVHRVRMQl9QQUdFYCBpcyBkZWZpbmVkLiBUaGlzIGlzIGEgY29tbW9uIHNpdHVhdGlvbiwgc28gbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGZzL0tjb25maWdgLiBUaGF0J3MgdXN1YWxseSB0aGUgZ28tdG8gcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGVzcGVjaWFsbHkgaWYgdGhleSByZWxhdGUgdG8gZmlsZSBzeXN0ZW1zIG9yIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgYEhVR0VUTEJfUEFHRWAgZGVmaW5pdGVseSBoaW50cyBhdCB0aGUgbGF0dGVyLiBMZXQncyBzZWUgaWYgaXQncyByaWdodCB0aGVyZS4gSWYgbm90LCBpdCdzIHRpbWUgdG8gc3RhcnQgc2VhcmNoaW5nIG1vcmUgYnJvYWRseSwgcGVyaGFwcyB3aXRoIGBncmVwYCBvciBgZmluZGAsIGJ1dCBgS2NvbmZpZ2AgZmlsZXMgYXJlIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0aGVzZSBraW5kcyBvZiBzeW1ib2xzLCBwYXJ0aWN1bGFybHkgdGhlIG9uZXMgYXQgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI3NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE1OjE3OjU5LjA1NzEwODUxNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0OTIwMjE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFJFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTU6MTg6MDEuNDA2MzE3NjQ1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzODUzNDQyNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgSFVHRVRMQl9QQUdFYCBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgSFVHRVRMQl9QQUdFYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlIHRleHQgdGVsbHMgbWUgaXQncyBkZWZpbmVkIHdpdGhpbiBgZnMvS2NvbmZpZ2AuIFJpZ2h0IGF3YXksIEkgbm90ZSB0aGF0IGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gYEhVR0VUTEJGU2AgdXNpbmcgYSBgZGVmX2Jvb2xgLCB3aGljaCBJJ2xsIGtlZXAgaW4gbWluZC4gTGV0J3Mgc2VlLi4uIEknbGwgbmVlZCB0byBqdW1wIGludG8gYGZzL0tjb25maWdgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAyNzAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG9wdGlvbiBhY3R1YWxseSAqZG9lcyogYW5kIHdoYXQgaXQncyB0aWVkIHRvIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSSdtIGV4cGVjdGluZyBzb21lIGRlc2NyaXB0aW9uIG9mIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCBwb3NzaWJseSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBvdGhlciBvcHRpb25zLiBJJ2xsIGFsc28gYmUgd2F0Y2hpbmcgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgcmVsYXRpb25zaGlwcyB0byBvdGhlciBrZXJuZWwgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxODo0NS4yNTk3NjMyNzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0bWVudWNvbmZpZyBIVUdFVExCRlNcXG4gMjUxOlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gMjUyOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjUzOlxcdFxcdHNlbGVjdCBNRU1GRF9DUkVBVEVcXG4gMjU0OlxcdFxcdHNlbGVjdCBQQURBVEEgaWYgU01QXFxuIDI1NTpcXHRcXHRoZWxwXFxuIDI1NjpcXHRcXHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cXG4gMjU3OlxcdFxcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxcbiAyNTg6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjYxOlxcdFxcbiAyNjI6XFx0aWYgSFVHRVRMQkZTXFxuIDI2MzpcXHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbiAyNjQ6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4gMjY1OlxcdFxcdGRlZmF1bHQgblxcbiAyNjY6XFx0XFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbiAyNjc6XFx0XFx0aGVscFxcbiAyNjg6XFx0XFx0ICBUaGUgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvZmYuIFNheSBZIGhlcmUgdG9cXG4gMjY5OlxcdFxcdCAgZW5hYmxlIEhWTyBieSBkZWZhdWx0LiBJdCBjYW4gYmUgZGlzYWJsZWQgdmlhIGh1Z2V0bGJfZnJlZV92bWVtbWFwPW9mZlxcbiAyNzA6XFx0XFx0ICAoYm9vdCBjb21tYW5kIGxpbmUpIG9yIGh1Z2V0bGJfb3B0aW1pemVfdm1lbW1hcCAoc3lzY3RsKS5cXG4gMjcxOlxcdGVuZGlmICMgSFVHRVRMQkZTXFxuIDI3MjpcXHRcXG4gMjczOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VcXG4gMjc0OlxcdFxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbiAyNzU6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiAyNzY6XFx0XFxuIDI3NzpcXHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG4gMjc4OlxcdFxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbiAyNzk6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXFxuIDI4MDpcXHRcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxuIDI4MTpcXHRcXG4gMjgyOlxcdGNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcXG4gMjgzOlxcdFxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbiAyODQ6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkUgXFx1MDAyNlxcdTAwMjYgU1BMSVRfUE1EX1BUTE9DS1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTU6MTg6NDUuMjU5ODQ0NjYzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNjAzNTQ5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgSHVnZVRMQiBhbmQgUGh5c2ljYWwgQWRkcmVzcyBTdXBwb3J0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGBDT05GSUdfSFVHRVRMQkZTYCBlbmFibGluZyBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIHJlbGV2YW50IGhlcmUuIFRoYXQgbWFrZXMgc2Vuc2UsIHdlIGFyZSBkZWFsaW5nIHdpdGggSHVnZVRMQiBwYWdlcy4gVGhlbiB3ZSBoYXZlIHRoZSBzdGFuZGFyZCBEQU1PTiBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlZCwgc3BlY2lmaWNhbGx5LCBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGBDT05GSUdfREFNT05fVkFERFJgLCBhbmQgYENPTkZJR19EQU1PTl9TWVNGU2AuIFJpZ2h0LCBzbyB0aGlzIGlzIGFib3V0IGludGVncmF0aW5nIERBTU9OIHdpdGggSHVnZVRMQiBhbmQgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nLlxuXG5Ob3csIGxldCdzIG1vdmUgb250byB0aGUgbWVhdCBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzLiBUaGUgZnVuY3Rpb25zIGFkZGVkIG9yIG1vZGlmaWVkIGFyZSBteSBmb2N1cy4gSW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIEkgc2VlIGEgY2x1c3RlciBvZiBuZXcgZnVuY3Rpb25zOiBgZGFtb25fZm9saW9fYWNjZXB0YWJsZWAsIGBfX2RhbW9uX2dldF9mb2xpb2AsIGBkYW1vbl9nZXRfZm9saW9gLCBgZGFtb25fZ2V0X21vbml0b3JfZm9saW9gLCBgZGFtb25faHVnZXRsYl9ta29sZGAsIGBkYW1vbl9mb2xpb19ta29sZF9vbmVgLCBgZGFtb25fZm9saW9fbWtvbGRgLCBgZGFtb25faHVnZXRsYl95b3VuZ2AsIGBkYW1vbl9wdGVfeW91bmdgLCBgZGFtb25fZm9saW9feW91bmdfb25lYCwgYW5kIGBkYW1vbl9mb2xpb195b3VuZ2AuIFNldmVyYWwgb2YgdGhlc2UgYXJlIGRlY2xhcmVkIGBzdGF0aWNgLCBzdWdnZXN0aW5nIHRoZXkncmUgaW50ZXJuYWwgaGVscGVycywgd2hpbGUgb3RoZXJzIGFyZSBleHBvcnRlZCwgaW5kaWNhdGluZyBlbnRyeSBwb2ludHMuIEkgY2FuIGFscmVhZHkgc2VlIGBta29sZGAgYW5kIGB5b3VuZ2AgbWV0aG9kcyBiZWluZyBjcmVhdGVkLCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IG1hcmtpbmcgcGFnZXMgYXMgb2xkIG9yIHlvdW5nLlxuXG5JbiBgbW0vZGFtb24vcGFkZHIuY2AsIEkndmUgZ290IHR3byBtb3JlOiBgZGFtb25fcGFfbWtvbGRgIGFuZCBgZGFtb25fcGFfeW91bmdgLiBUaGVzZSBhcmUgdGhlIHBoeXNpY2FsIGFkZHJlc3Mtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLCBhcyBleHBlY3RlZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4gSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIGV4cG9ydGVkIHN5bWJvbHMgZnJvbSBgb3BzLWNvbW1vbi5oYCBhbmQgdGhlIGZ1bmN0aW9ucyBpbiBgcGFkZHIuY2AuIE15IG5leHQgc3RlcCBpcyB0byBzZWFyY2ggZm9yIHRoZSBjYWxsIHNpdGVzIG9mIGBkYW1vbl9mb2xpb19ta29sZGAsIGBkYW1vbl9mb2xpb195b3VuZ2AsIGBkYW1vbl9odWdldGxiX21rb2xkYCwgYGRhbW9uX2dldF9mb2xpb2AsIGFuZCBgZGFtb25fZ2V0X21vbml0b3JfZm9saW9gLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29udHJvbCBmbG93IGFuZCBpbnRlcmFjdGlvbiBvZiBEQU1PTiB3aXRoIEh1Z2VUTEIgYW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLCBhbmQgaGlnaGxpZ2h0IHRoZSBrZXkgaW50ZWdyYXRpb24gcG9pbnRzIEknbSBnb2luZyB0byB3YW50IHRvIGV4YW1pbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxODo1MS41MjAyMDI4OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MTA2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fLipmb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jLTE5LVxcbm1tL2RhbW9uL2NvcmUuYzoyMDovKiBmb3IgZGFtb25fZ2V0X2ZvbGlvKCkgdXNlZCBieSBub2RlIGVsaWdpYmxlIG1lbW9yeSBtZXRyaWNzICovXFxubW0vZGFtb24vY29yZS5jLTIxLSNpbmNsdWRlIFxcXCJvcHMtY29tbW9uLmhcXFwiXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjgxNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI4NjctICpcXG5tbS9kYW1vbi9jb3JlLmM6Mjg2ODogKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIGRhbW9uX2dldF9mb2xpbygpIGZyb20gb3BzLWNvbW1vbi5jLCB3aGljaCBpc1xcbm1tL2RhbW9uL2NvcmUuYy0yODY5LSAqIG9ubHkgYXZhaWxhYmxlIHdoZW4gQ09ORklHX0RBTU9OX1BBRERSIGlzIGVuYWJsZWQuIEl0IGFsc28gcmVxdWlyZXMgdGhlXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjg3Mj1zdGF0aWMgcGh5c19hZGRyX3QgZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI4OTUtXFxubW0vZGFtb24vY29yZS5jOjI4OTY6XFx0XFx0XFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xcbm1tL2RhbW9uL2NvcmUuYy0yODk3LVxcdFxcdFxcdFxcdGlmICghZm9saW8pIHtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNy1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTg6c3RhdGljIGJvb2wgZGFtb25fZm9saW9fYWNjZXB0YWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vbml0b3IpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE5LXtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0zMC0gKi9cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MzE6c3RhdGljIHN0cnVjdCBmb2xpbyAqX19kYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgbW9uaXRvcilcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMzIte1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQyLVxcdGlmICh1bmxpa2VseShwYWdlX2ZvbGlvKHBhZ2UpICE9IGZvbGlvKSB8fFxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo0MzpcXHRcXHRcXHQhZGFtb25fZm9saW9fYWNjZXB0YWJsZShmb2xpbywgbW9uaXRvcikpIHtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDQtXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy00OS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTA6c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTUxLXtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTI6XFx0cmV0dXJuIF9fZGFtb25fZ2V0X2ZvbGlvKHBmbiwgZmFsc2UpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy01My19XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNTUtLypcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTY6ICogU2FtZSB0byBkYW1vbl9nZXRfZm9saW8oKSwgYnV0IGFsc28gYWNjZXB0cyBodWdldGxiIGZvbGlvcywgd2hpY2ggYXJlXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTU3LSAqIG1hbmFnZWQgb3V0c2lkZSBvZiB0aGUgTFJVIGxpc3RzLiAgQWltZWQgdG8gYmUgdXNlZCBieSBhY2Nlc3MgbW9uaXRvcmluZ1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy01OC0gKiBwcmltaXRpdmVzLiAgREFNT1MgYWN0aW9ucyB0aGF0IGFzc3VtZSBMUlUtbWFuYWdlZCBmb2xpb3Mgc2hvdWxkIGtlZXAgdXNpbmdcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTk6ICogZGFtb25fZ2V0X2ZvbGlvKCkuXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTYwLSAqL1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzo2MTpzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy02Mi17XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjYzOlxcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIHRydWUpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy02NC19XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9NjY9dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzctXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjc4OlxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKHBmbik7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc5LVxcdGlmICghZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9OTc9dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTA5LVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMTA6XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8ocGZuKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTExLVxcdGlmICghZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MjAzPWludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjExLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMTI6c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIxMy1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjMxLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMzI6dm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMzMte1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMzQtXFx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjM1OlxcdFxcdC5ybWFwX29uZSA9IGRhbW9uX2ZvbGlvX21rb2xkX29uZSxcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjM2LVxcdFxcdC5hbm9uX2xvY2sgPSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQsXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MjcwPXN0YXRpYyBib29sIGRhbW9uX3B0ZV95b3VuZyhwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yODQtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjI4NTpzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjg2LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmFyZylcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0zMjEtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjMyMjpib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTMyMy17XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMzI2LVxcdFxcdC5hcmcgPSBcXHUwMDI2YWNjZXNzZWQsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjMyNzpcXHRcXHQucm1hcF9vbmUgPSBkYW1vbl9mb2xpb195b3VuZ19vbmUsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTMyOC1cXHRcXHQuYW5vbl9sb2NrID0gZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTM0Nz1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMzY5LVxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfWU9VTkc6XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjM3MDpcXHRcXHRtYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0zNzEtXFx0XFx0aWYgKG1hdGNoZWQpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjM3MjpcXHRcXHRcXHRkYW1vbl9mb2xpb19ta29sZChmb2xpbyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTM3My1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0zODgtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjM4OTpzdGF0aWMgdW5zaWduZWQgaW50IF9fZGFtb25fbWlncmF0ZV9mb2xpb19saXN0KFxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0zOTAtXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqbWlncmF0ZV9mb2xpb3MsIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDE4LVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo0MTk6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9taWdyYXRlX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDIwLVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDQ2LVxcdC8qIE1pZ3JhdGUgZm9saW9zIHNlbGVjdGVkIGZvciBtaWdyYXRpb24gKi9cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDQ3OlxcdG5yX21pZ3JhdGVkICs9IF9fZGFtb25fbWlncmF0ZV9mb2xpb19saXN0KFxcbm1tL2RhbW9uL29wcy1jb21tb24uYy00NDgtXFx0XFx0XFx0XFx1MDAyNm1pZ3JhdGVfZm9saW9zLCBwZ2RhdCwgdGFyZ2V0X25pZCk7XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDcwLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo0NzE6dW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy00NzIte1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTUwNC1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTA1OlxcdFxcdG5yX21pZ3JhdGVkICs9IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChcXHUwMDI2bm9kZV9mb2xpb19saXN0LFxcbm1tL2RhbW9uL29wcy1jb21tb24uYy01MDYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgTk9ERV9EQVRBKG5pZCksXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNTEwLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo1MTE6XFx0bnJfbWlncmF0ZWQgKz0gZGFtb25fbWlncmF0ZV9mb2xpb19saXN0KFxcdTAwMjZub2RlX2ZvbGlvX2xpc3QsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTUxMi1cXHRcXHRcXHRcXHRcXHRcXHQgICBOT0RFX0RBVEEobmlkKSxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uaC03LVxcbm1tL2RhbW9uL29wcy1jb21tb24uaDo4OnN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6OTpzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTAtXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9MTc9c3RhdGljIGlubGluZSB2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMjEtI2VuZGlmXFx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbm1tL2RhbW9uL29wcy1jb21tb24uaDoyMjp2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaDoyMzpib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC0yNC1cXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uaD0zMD1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaDozMTp1bnNpZ25lZCBsb25nIGRhbW9uX21pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwgaW50IHRhcmdldF9uaWQpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC0zMi1cXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9Mzg9c3RhdGljIHZvaWQgZGFtb25fcGFfbWtvbGQocGh5c19hZGRyX3QgcGFkZHIpXFxubW0vZGFtb24vcGFkZHIuYy0zOS17XFxubW0vZGFtb24vcGFkZHIuYzo0MDpcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X21vbml0b3JfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTQxLVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00NC1cXG5tbS9kYW1vbi9wYWRkci5jOjQ1OlxcdGRhbW9uX2ZvbGlvX21rb2xkKGZvbGlvKTtcXG5tbS9kYW1vbi9wYWRkci5jLTQ2LVxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTY4PXN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyKVxcbm1tL2RhbW9uL3BhZGRyLmMtNjkte1xcbm1tL2RhbW9uL3BhZGRyLmM6NzA6XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XFxubW0vZGFtb24vcGFkZHIuYy03MS1cXHRib29sIGFjY2Vzc2VkO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy03NS1cXG5tbS9kYW1vbi9wYWRkci5jOjc2OlxcdGFjY2Vzc2VkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xcbm1tL2RhbW9uL3BhZGRyLmMtNzctXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MTA4PXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE0MC1cXG5tbS9kYW1vbi9wYWRkci5jOjE0MTpzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9kYW1vbi9wYWRkci5jLTE0Mi1cXHRcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE0Ny1cXHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xcbm1tL2RhbW9uL3BhZGRyLmM6MTQ4OlxcdFxcdGlmIChkYW1vbl9wYV9maWx0ZXJfbWF0Y2goZiwgZm9saW8pKSB7XFxubW0vZGFtb24vcGFkZHIuYy0xNDktXFx0XFx0XFx0cGFzcyA9IGYtXFx1MDAzZWFsbG93O1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0xNTc9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xNzUtXFx0XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MTc2OlxcdFxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhKSk7XFxubW0vZGFtb24vcGFkZHIuYy0xNzctXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XFxubW0vZGFtb24vcGFkZHIuYzoxNzg6XFx0XFx0XFx0XFx0aWYgKGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBhLCBmb2xpbywgcCkpXFxubW0vZGFtb24vcGFkZHIuYy0xNzktXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSsrO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0xOTU9c3RhdGljIGJvb2wgZGFtb3NfcGFfZmlsdGVyX291dChzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjA4LVxcbm1tL2RhbW9uL3BhZGRyLmM6MjA5OnN0YXRpYyBib29sIGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL3BhZGRyLmMtMjEwLXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MjIwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjQ2LVxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmM6MjQ3OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jOjI0ODpcXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTI0OS1cXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9Mjc4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjg3LVxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmM6Mjg4OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jOjI4OTpcXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTI5MC1cXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MzI2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzM1LVxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmM6MzM2OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jOjMzNzpcXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTMzOC1cXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzU1LVxcdH1cXG5tbS9kYW1vbi9wYWRkci5jOjM1NjpcXHRhcHBsaWVkID0gZGFtb25fbWlncmF0ZV9wYWdlcyhcXHUwMDI2Zm9saW9fbGlzdCwgcy1cXHUwMDNldGFyZ2V0X25pZCk7XFxubW0vZGFtb24vcGFkZHIuYy0zNTctXFx0Y29uZF9yZXNjaGVkKCk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTM2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9zdGF0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTM3My1cXHR3aGlsZSAoYWRkciBcXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVxcdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcXG5tbS9kYW1vbi9wYWRkci5jOjM3NDpcXHRcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XFxubW0vZGFtb24vcGFkZHIuYzozNzU6XFx0XFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XFxubW0vZGFtb24vcGFkZHIuYy0zNzYtXFx0XFx0XFx0YWRkciArPSBQQUdFX1NJWkU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE1OjE4OjUxLjU2NjgyMTc1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzQwMTg1NzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQU1PTidzIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBgZGFtb25fZm9saW9fbWtvbGRgLCBgZGFtb25fZm9saW9feW91bmdgLCBgZGFtb25faHVnZXRsYl9ta29sZGAsIGBkYW1vbl9nZXRfZm9saW9gLCBhbmQgYGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvYCBhcmUgYWxsIGV4cG9ydGVkIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIG1lYW5pbmcgdGhleSdyZSBhY2Nlc3NpYmxlIG91dHNpZGUgdGhhdCBmaWxlLCBsaWtlbHkgY29yZSB0byBEQU1PTidzIG9wZXJhdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSAqdXNlZCouIE15IGZvY3VzIG5vdyBzaGlmdHMgdG8gYHZhZGRyLmNgLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeWAgZnVuY3Rpb24uIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBjYWxsIHRvIGBkYW1vbl9odWdldGxiX21rb2xkYC4gVGhhdCB3aWxsIGdpdmUgbWUgaW5zaWdodCBpbnRvIGhvdyBEQU1PTiBoYW5kbGVzIGh1Z2UgcGFnZXMgaW4gdGhlIFwibWtvbGRcIiBjb250ZXh0LCBhbmQgaG93IHRoZXNlIHZhcmlvdXMgZnVuY3Rpb25zIGludGVycmVsYXRlIHdpdGhpbiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1hbmFnZW1lbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgY29udGV4dCBvZiBgZGFtb25faHVnZXRsYl9ta29sZGAgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTgwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE1OjE4OjU5LjMwNzAxMTc2M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi92YWRkci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRvdXQ6XFxuIDI5MTpcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTtcXG4gMjkyOlxcdFxcdHJldHVybiAwO1xcbiAyOTM6XFx0fVxcbiAyOTQ6XFx0XFxuIDI5NTpcXHQjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiAyOTY6XFx0c3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuIDI5NzpcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIDI5ODpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiAyOTk6XFx0e1xcbiAzMDA6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEod2Fsay1cXHUwMDNldm1hKTtcXG4gMzAxOlxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4gMzAyOlxcdFxcdHB0ZV90IGVudHJ5O1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXFx1MDAzZW1tLCBwdGUpO1xcbiAzMDU6XFx0XFx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBhZGRyLCBwdGUpO1xcbiAzMDY6XFx0XFx0aWYgKCFwdGVfcHJlc2VudChlbnRyeSkpXFxuIDMwNzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMzA4OlxcdFxcbiAzMDk6XFx0XFx0ZGFtb25faHVnZXRsYl9ta29sZChwdGUsIHdhbGstXFx1MDAzZW1tLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIpO1xcbiAzMTA6XFx0XFxuIDMxMTpcXHRvdXQ6XFxuIDMxMjpcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiAzMTM6XFx0XFx0cmV0dXJuIDA7XFxuIDMxNDpcXHR9XFxuIDMxNTpcXHQjZWxzZVxcbiAzMTY6XFx0I2RlZmluZSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5IE5VTExcXG4gMzE3OlxcdCNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuIDMxODpcXHRcXG4gMzE5OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX21rb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIDMyMDpcXHR7XFxuIDMyMTpcXHRcXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgZGFtb25fbWtvbGRfb3BzID0ge1xcbiAzMjI6XFx0XFx0XFx0LnBtZF9lbnRyeSA9IGRhbW9uX21rb2xkX3BtZF9lbnRyeSxcXG4gMzIzOlxcdFxcdFxcdC5odWdldGxiX2VudHJ5ID0gZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeSxcXG4gMzI0OlxcdFxcdH07XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciArIDEsIFxcdTAwMjZkYW1vbl9ta29sZF9vcHMsIE5VTEwpO1xcbiAzMjc6XFx0fVxcbiAzMjg6XFx0XFxuIDMyOTpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxODo1OS4zMDcxMDMzNDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQzNTY4OTg5OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgREFNT04gU3VwcG9ydCBmb3IgSHVnZXRsYiBGb2xpb3MqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIChEQU1PTikgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZXh0ZW5kaW5nIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZyB0byBzdXBwb3J0IGh1Z2V0bGIgZm9saW9zLiBUaGlzIG1lYW5zIERBTU9OIGNhbiBub3cgdHJhY2sgYWNjZXNzIHBhdHRlcm5zIHdpdGhpbiBodWdldGxiIHBhZ2VzLCBlc3NlbnRpYWxseSBtYWtpbmcgdGhlIFwib2xkL3lvdW5nXCIgZGV0ZXJtaW5hdGlvbi4gVGhlIGNvcmUgb2YgdGhpcyBpbnZvbHZlcyBwYWdlIHRhYmxlIHdhbGtzIHZpYSBgcm1hcCB3YWxrYCBhbmQgdGhlIHVzZSBvZiBmdW5jdGlvbnMgbGlrZSBgaHVnZV9wdGVwX2dldC9zZXRfaHVnZV9wdGVfYXRgIHRvIHRlc3QgYW5kIHNldCB0aGUgXCJ5b3VuZ1wiIGFuZCBcImlkbGVcIiBmbGFncy5cblxuRmlyc3Qgb2ZmLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkIGhlcmUuIERBTU9OIGZ1bmN0aW9uYWxpdHkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHdoZXRoZXIgaXQncyB0aHJvdWdoIHRoZSBzeXNmcyBvciBkZWJ1Z2ZzIGludGVyZmFjZXMsIG9yIHRocm91Z2ggREFNT04gcmVjbGFpbS9zdGF0IG1lY2hhbmlzbXMuIFRoYXQgY3JlYXRlcyBhbiBhdmVudWUgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFBsdXMsIHRoZSBEQU1PTiBjb2RlYmFzZSBydW5zIG9uIHN0YW5kYXJkIGhhcmR3YXJlL3ZpcnR1YWwgZW52aXJvbm1lbnRzLCBhbmQgaHVnZXRsYmZzIGlzIHN1cHBvcnRlZCBpbiBRRU1VLCBtYWtpbmcgaXQgZWFzaWx5IHRlc3RhYmxlLlxuXG5OZXh0LCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgYXJlIGNsZWFyLiBXZSdyZSBsb29raW5nIGF0IGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1BBRERSYCwgYENPTkZJR19EQU1PTl9WQUREUmAsIGBDT05GSUdfSFVHRVRMQkZTYCAod2hpY2ggaW1wbGllcyBgQ09ORklHX0hVR0VUTEJfUEFHRWApLCBhbmQgYENPTkZJR19EQU1PTl9TWVNGU2AgZm9yIHVzZXJzcGFjZSBpbnRlcmFjdGlvbi5cblxuRGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCB0aGUgZGVwZW5kZW5jaWVzIG1ha2Ugc2Vuc2UuIGBDT05GSUdfREFNT05fUEFERFJgIGFuZCBgQ09ORklHX0RBTU9OX1ZBRERSYCBkZXBlbmQgb24gYERBTU9OYCBhbmQgYE1NVWAsIGFuZCBzZWxlY3QgYFBBR0VfSURMRV9GTEFHYC4gYENPTkZJR19EQU1PTl9TWVNGU2AgZGVwZW5kcyBvbiBgREFNT05gIGFuZCBgU1lTRlNgLiBgQ09ORklHX0hVR0VUTEJGU2AgZGVwZW5kcyBvbiBgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNgLCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGRlcml2ZWQgZnJvbSBgSFVHRVRMQkZTYC5cblxuTm93LCBmb3IgdGhlIGNyaXRpY2FsIEFQSSBjaGFuZ2VzLiBUaGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMgdGhhdCBoYXZlIGJlZW4gZWl0aGVyIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGludm9sdmVkIGhlcmUgYXJlIGBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpb2AsIGBkYW1vbl9odWdldGxiX21rb2xkYCwgYGRhbW9uX2ZvbGlvX21rb2xkYCwgYGRhbW9uX2ZvbGlvX3lvdW5nYCwgYW5kIGBkYW1vbl9nZXRfZm9saW9gLiBDb25maXJtaW5nIHRoZXNlIGFyZSBhbGwgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMsIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN1cmZhY2UgYXJlYSBvZiB0aGlzIGNoYW5nZS4gVXBvbiByZXZpZXdpbmcgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGFsbCB0aGVzZSBhcmUgaW5kZWVkIG5vbi1zdGF0aWMgZnVuY3Rpb25zLlxuXG5UaGVyZSBhcmUgYWxzbyBhIGNvdXBsZSBvZiBvdGhlciBzeW1ib2xzIHRvIGNvbnNpZGVyLCBzcGVjaWZpY2FsbHkgYGRhbW9uX3B0ZXBfbWtvbGRgIGFuZCBgZGFtb25fcG1kcF9ta29sZGAsIGJ1dCB0aGVpciBsb2dpYyBpc24ndCB0aGUgZm9jdXMgaGVyZSwgdGhlIGNoYW5nZXMgYXJlIHdpdGggdGhlIGxpc3RlZCBBUEkgY2FsbHMuXG5cblJlY2FwcGluZyB0aGUgY29uZmlndXJhdGlvbiwgdG8gcmVpdGVyYXRlIGl0OiBgREFNT05gLCBgREFNT05fUEFERFJgLCBgREFNT05fVkFERFJgLCBgREFNT05fU1lTRlNgLCBgSFVHRVRMQkZTYCwgYW5kIGBIVUdFVExCX1BBR0VgIGFyZSB0aGUga2V5IGNvbmZpZ3MgdG8gZXhhbWluZSwgYW5kIHRoZSBjb2RlIGNoYW5nZXMgc2VlbSBjb21wbGV0ZS5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBpcyBsb29raW5nIGNsZWFuIGFuZCB3ZWxsLWRlZmluZWQuIFRpbWUgdG8gbWFrZSB0aGF0IHRvb2wgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1OTMsIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTU6MTk6MTMuNjY0MDA1NzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzY2NjcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fZ2V0X21vbml0b3JfZm9saW9cIixcbiAgICBcImRhbW9uX2h1Z2V0bGJfbWtvbGRcIixcbiAgICBcImRhbW9uX2ZvbGlvX21rb2xkXCIsXG4gICAgXCJkYW1vbl9mb2xpb195b3VuZ1wiLFxuICAgIFwiZGFtb25fZ2V0X2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyBEQU1PTiBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcgdG8gc3VwcG9ydCBodWdldGxiIGZvbGlvcyBieSBpbnRyb2R1Y2luZyBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbygpIGFuZCB1cGRhdGluZyBwYWdlIHRhYmxlIHdhbGsgY2FsbGJhY2tzIChkYW1vbl9mb2xpb19ta29sZCwgZGFtb25fZm9saW9feW91bmcsIGRhbW9uX2h1Z2V0bGJfbWtvbGQpIHRvIGhhbmRsZSBodWdldGxiIHBhZ2VzLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcy9pbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX2dldF9tb25pdG9yX2ZvbGlvXCIsXG4gICAgXCJkYW1vbl9odWdldGxiX21rb2xkXCIsXG4gICAgXCJkYW1vbl9mb2xpb19ta29sZFwiLFxuICAgIFwiZGFtb25fZm9saW9feW91bmdcIixcbiAgICBcImRhbW9uX2dldF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4dGVuZHMgREFNT04gcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nIHRvIHN1cHBvcnQgaHVnZXRsYiBmb2xpb3MgYnkgaW50cm9kdWNpbmcgZGFtb25fZ2V0X21vbml0b3JfZm9saW8oKSBhbmQgdXBkYXRpbmcgcGFnZSB0YWJsZSB3YWxrIGNhbGxiYWNrcyAoZGFtb25fZm9saW9fbWtvbGQsIGRhbW9uX2ZvbGlvX3lvdW5nLCBkYW1vbl9odWdldGxiX21rb2xkKSB0byBoYW5kbGUgaHVnZXRsYiBwYWdlcy4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04gc3lzZnMvaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTU6MTk6MTMuNzM3NjgxNDM3WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc3NTM2MzA2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxOToxMy43MzgyNjQxMjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMTc3NTMwNDMwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4dGVuZHMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHRvIHN1cHBvcnQgaHVnZXRsYiBmb2xpb3MgZHVyaW5nIHBoeXNpY2FsIGFkZHJlc3MgYWNjZXNzIG1vbml0b3JpbmcgKHBhZGRyKSBhbmQgcGFnZSB0YWJsZSB3YWxrcy4gSXQgcmVmYWN0b3JzIGZvbGlvIGZldGNoaW5nIGFuZCBta29sZC95b3VuZyBoYW5kbGluZyB0byBhY2NvdW50IGZvciBodWdldGxiIGZvbGlvcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgcmV0dXJuIHZhbHVlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGxlZnQgdW5pbml0aWFsaXplZCBpbiBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLiBBbnkgbWVtb3J5IHNhZmV0eSByaXNrcyAoc3VjaCBhcyBmb2xpbyByZWZjb3VudGluZywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgcGFnZSB0YWJsZSB3YWxrIGlzc3VlcykgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOTZhMmQxZDc1MGM1ODI1Nzc2OTU5YjczNTExNDZjYjhkOTBhMTZmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNToxNzo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggZmJkYTcwZDhlYTRkMC4uODAyMDdiNTZjNmZkYSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5AQCAtMyw2ICszLDcgQEBcbiAgKiBDb21tb24gQ29kZSBmb3IgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xuICAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pZ3JhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tdV9ub3RpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9pZGxlLmhcdTAwM2VcbkBAIC0xNCwxNCArMTUsMjAgQEBcbiAjaW5jbHVkZSBcIi4uL2ludGVybmFsLmhcIlxuICNpbmNsdWRlIFwib3BzLWNvbW1vbi5oXCJcbiBcbitzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19hY2NlcHRhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW9uaXRvcilcbit7XG4rXHRyZXR1cm4gZm9saW9fdGVzdF9scnUoZm9saW8pIHx8XG4rXHRcdChtb25pdG9yIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKTtcbit9XG4rXG4gLypcbi0gKiBHZXQgYW4gb25saW5lIHBhZ2UgZm9yIGEgcGZuIGlmIGl0J3MgaW4gdGhlIExSVSBsaXN0LiAgT3RoZXJ3aXNlLCByZXR1cm5zXG4tICogTlVMTC5cbisgKiBHZXQgYW4gb25saW5lIHBhZ2UgZm9yIGEgcGZuIGlmIGl0J3MgaW4gdGhlIExSVSBsaXN0LCBvciBhIGh1Z2V0bGIgZm9saW8gaWZcbisgKiBAbW9uaXRvciBpcyBzZXQuICBPdGhlcndpc2UsIHJldHVybnMgTlVMTC5cbiAgKlxuICAqIFRoZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24gaXMgc3RvbGVuIGZyb20gdGhlICdwYWdlX2lkbGVfZ2V0X2ZvbGlvKCknLiAgV2VcbiAgKiBzdGVhbCByYXRoZXIgdGhhbiByZXVzZSBpdCBiZWNhdXNlIHRoZSBjb2RlIGlzIHF1aXRlIHNpbXBsZS5cbiAgKi9cbi1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbitzdGF0aWMgc3RydWN0IGZvbGlvICpfX2RhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBtb25pdG9yKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuQEAgLTMyLDEzICszOSwzMCBAQCBzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbiBcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiBcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8ICFmb2xpb190ZXN0X2xydShmb2xpbykpIHtcbitcdGlmICh1bmxpa2VseShwYWdlX2ZvbGlvKHBhZ2UpICE9IGZvbGlvKSB8fFxuK1x0XHRcdCFkYW1vbl9mb2xpb19hY2NlcHRhYmxlKGZvbGlvLCBtb25pdG9yKSkge1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRmb2xpbyA9IE5VTEw7XG4gXHR9XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuK3N0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIGZhbHNlKTtcbit9XG4rXG4rLypcbisgKiBTYW1lIHRvIGRhbW9uX2dldF9mb2xpbygpLCBidXQgYWxzbyBhY2NlcHRzIGh1Z2V0bGIgZm9saW9zLCB3aGljaCBhcmVcbisgKiBtYW5hZ2VkIG91dHNpZGUgb2YgdGhlIExSVSBsaXN0cy4gIEFpbWVkIHRvIGJlIHVzZWQgYnkgYWNjZXNzIG1vbml0b3JpbmdcbisgKiBwcmltaXRpdmVzLiAgREFNT1MgYWN0aW9ucyB0aGF0IGFzc3VtZSBMUlUtbWFuYWdlZCBmb2xpb3Mgc2hvdWxkIGtlZXAgdXNpbmdcbisgKiBkYW1vbl9nZXRfZm9saW8oKS5cbisgKi9cbitzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIHRydWUpO1xuK31cbitcbiB2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwdGVfdCBwdGV2YWwgPSBwdGVwX2dldChwdGUpO1xuQEAgLTk4LDYgKzEyMiwzNSBAQCB2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkclxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiB9XG4gXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbit2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0Ym9vbCByZWZlcmVuY2VkID0gZmFsc2U7XG4rXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcbitcdHVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuK1xuK1x0Zm9saW9fZ2V0KGZvbGlvKTtcbitcbitcdGlmIChwdGVfeW91bmcoZW50cnkpKSB7XG4rXHRcdHJlZmVyZW5jZWQgPSB0cnVlO1xuK1x0XHRlbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7XG4rXHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpO1xuK1x0fVxuK1xuK1x0aWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkcixcbitcdFx0XHRcdCAgICAgYWRkciArIGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKVxuK1x0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbitcbitcdGlmIChyZWZlcmVuY2VkKVxuK1x0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuK1xuK1x0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xuK1x0Zm9saW9fcHV0KGZvbGlvKTtcbit9XG4rI2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4rXG4gI2RlZmluZSBEQU1PTl9NQVhfU1VCU0NPUkVcdCgxMDApXG4gI2RlZmluZSBEQU1PTl9NQVhfQUdFX0lOX0xPR1x0KDMyKVxuIFxuQEAgLTE2MywxMCArMjE2LDE1IEBAIHN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG4gXHRcdGFkZHIgPSBwdm13LmFkZHJlc3M7XG4tXHRcdGlmIChwdm13LnB0ZSlcbi1cdFx0XHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xuLVx0XHRlbHNlXG4rXHRcdGlmIChwdm13LnB0ZSkge1xuK1x0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuK1x0XHRcdFx0ZGFtb25faHVnZXRsYl9ta29sZChwdm13LnB0ZSwgdm1hLVx1MDAzZXZtX21tLCB2bWEsXG4rXHRcdFx0XHRcdFx0YWRkcik7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0ZGFtb25fcHRlcF9ta29sZChwdm13LnB0ZSwgdm1hLCBhZGRyKTtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRkYW1vbl9wbWRwX21rb2xkKHB2bXcucG1kLCB2bWEsIGFkZHIpO1xuK1x0XHR9XG4gXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTkxLDI3ICsyNDksNTUgQEAgdm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIH1cbiBcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuK3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUpO1xuK1xuK1x0cmV0dXJuIChwdGVfcHJlc2VudChlbnRyeSkgXHUwMDI2XHUwMDI2IHB0ZV95b3VuZyhlbnRyeSkpIHx8XG4rXHRcdCFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XG4rXHRcdG1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHZtYS1cdTAwM2V2bV9tbSwgYWRkcik7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl95b3VuZyhwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rI2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4rXG4rc3RhdGljIGJvb2wgZGFtb25fcHRlX3lvdW5nKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cHRlX3QgZW50cnkgPSBwdGVwX2dldChwdGUpO1xuK1xuK1x0LypcbitcdCAqIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0IGFjdHVhbGx5IG1hcFxuK1x0ICogcGFnZXMgYXJlIFwib2xkXCIgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4gVGhlIE1NVSBub3RpZmllciB0YWtlcyBjYXJlXG4rXHQgKiBvZiBhbnkgZGV2aWNlIGFzcGVjdHMuXG4rXHQgKi9cbitcdHJldHVybiAocHRlX3ByZXNlbnQoZW50cnkpIFx1MDAyNlx1MDAyNiBwdGVfeW91bmcoZW50cnkpKSB8fFxuK1x0XHQhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuK1x0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtXHUwMDNldm1fbW0sIGFkZHIpO1xuK31cbitcbiBzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKVxuIHtcbiBcdGJvb2wgKmFjY2Vzc2VkID0gYXJnO1xuIFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHIsIDApO1xuLVx0cHRlX3QgcHRlO1xuIFxuIFx0KmFjY2Vzc2VkID0gZmFsc2U7XG4gXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbiBcdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbiBcdFx0aWYgKHB2bXcucHRlKSB7XG4tXHRcdFx0cHRlID0gcHRlcF9nZXQocHZtdy5wdGUpO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsIHRoYXRcbi1cdFx0XHQgKiBhY3R1YWxseSBtYXAgcGFnZXMgYXJlIFwib2xkXCIgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS5cbi1cdFx0XHQgKiBUaGUgTU1VIG5vdGlmaWVyIHRha2VzIGNhcmUgb2YgYW55IGRldmljZSBhc3BlY3RzLlxuLVx0XHRcdCAqL1xuLVx0XHRcdCphY2Nlc3NlZCA9IChwdGVfcHJlc2VudChwdGUpIFx1MDAyNlx1MDAyNiBwdGVfeW91bmcocHRlKSkgfHxcbi1cdFx0XHRcdCFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XG4tXHRcdFx0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtXHUwMDNldm1fbW0sIGFkZHIpO1xuK1x0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuK1x0XHRcdFx0KmFjY2Vzc2VkID0gZGFtb25faHVnZXRsYl95b3VuZyhwdm13LnB0ZSwgdm1hLFxuK1x0XHRcdFx0XHRcdGFkZHIsIGZvbGlvKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHQqYWNjZXNzZWQgPSBkYW1vbl9wdGVfeW91bmcocHZtdy5wdGUsIHZtYSxcbitcdFx0XHRcdFx0XHRhZGRyLCBmb2xpbyk7XG4gXHRcdH0gZWxzZSB7XG4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0XHRcdHBtZF90IHBtZCA9IHBtZHBfZ2V0KHB2bXcucG1kKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmggYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbmluZGV4IDM4ZDI5NTQ4OGZhMTguLjE3MmYwZjE3YzRhODQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uaFxuQEAgLTYsOSArNiwxOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RhbW9uLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XG4rc3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XG4gXG4gdm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xuIHZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuK3ZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rfVxuKyNlbmRpZlx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuIHZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggNWM2YzNhNTk3ZmQwYi4uZWQ3YjdmMzEyOTFhMCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0zNyw3ICszNyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2NvcmVfYWRkcihcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcbiB7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X21vbml0b3JfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcbiBcbiBcdGlmICghZm9saW8pXG4gXHRcdHJldHVybjtcbkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXG4gc3RhdGljIGJvb2wgZGFtb25fcGFfeW91bmcocGh5c19hZGRyX3QgcGFkZHIpXG4ge1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihwYWRkcikpO1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XG4gXHRib29sIGFjY2Vzc2VkO1xuIFxuIFx0aWYgKCFmb2xpbylcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggMDY0ODQwMGIyZDY1Yi4uMTUzNzlkOTg0Njg5ZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC0yOTMsMzMgKzI5Myw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbi1zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi17XG4tXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbi1cdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuLVx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4tXG4tXHRmb2xpb19nZXQoZm9saW8pO1xuLVxuLVx0aWYgKHB0ZV95b3VuZyhlbnRyeSkpIHtcbi1cdFx0cmVmZXJlbmNlZCA9IHRydWU7XG4tXHRcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcbi1cdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7XG4tXHR9XG4tXG4tXHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxuLVx0XHRcdFx0ICAgICBhZGRyICsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpXG4tXHRcdHJlZmVyZW5jZWQgPSB0cnVlO1xuLVxuLVx0aWYgKHJlZmVyZW5jZWQpXG4tXHRcdGZvbGlvX3NldF95b3VuZyhmb2xpbyk7XG4tXG4tXHRmb2xpb19zZXRfaWRsZShmb2xpbyk7XG4tXHRmb2xpb19wdXQoZm9saW8pO1xuLX1cbi1cbiBzdGF0aWMgaW50IGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxOToxMy43MzgyNjQ5ODdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE3NzUzMDEyOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50IGZvciBEQU1PTiBIdWdldGxiIEZvbGlvIFN1cHBvcnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhpcyBwYXRjaCB0b3VjaGVzIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgcGFydHMgZGVhbGluZyB3aXRoIGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuIEkgc2VlIGNoYW5nZXMgYWNyb3NzIHNldmVyYWwgZmlsZXMsIGZvY3VzaW5nIG9uIGFkZGluZyBzdXBwb3J0IGZvciBodWdldGxiIGZvbGlvcyB3aXRoaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZyBhc3BlY3Qgb2YgREFNT04uXG5cblRoZSBwYXRjaCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgaG93IERBTU9OIGludGVyYWN0cyB3aXRoIGh1Z2V0bGIgcGFnZXM6IEl0IGludHJvZHVjZXMgYSBgZGFtb25fZm9saW9fYWNjZXB0YWJsZWAgZnVuY3Rpb24gdGhhdCBub3cgY29uc2lkZXJzIGh1Z2V0bGIgZm9saW9zLCBtb2RpZmllcyBgX19kYW1vbl9nZXRfZm9saW9gIHRvIHVzZSB0aGUgYWNjZXB0YWJpbGl0eSBmdW5jdGlvbiwgYW5kIHJlZmFjdG9ycyBgZGFtb25faHVnZXRsYl9ta29sZGAgdG8gYmUgc2hhcmVkLiBJdCBhbHNvIG1ha2VzIGNvcnJlc3BvbmRpbmcgYWRqdXN0bWVudHMgdG8gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMuXG5cbk5vdywgbGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZSwgSSBkb24ndCBzZWUgYW55IG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlIG9yIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3Rpbmcgb25lcyB0aGF0IHdvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBObywgdGhlIGNvZGUncyBsb2dpYyBpcyBzb3VuZC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8uIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkuXG40LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm90IGluIHRoaXMgcGF0Y2guXG5cbkkndmUgZ29uZSB0aHJvdWdoIHRoZSBjb2RlLCBwYXJ0aWN1bGFybHkgYGRhbW9uX2h1Z2V0bGJfbWtvbGRgIGFuZCBgZGFtb25fZm9saW9feW91bmdfb25lYCwgd2hpY2ggbG9vayBsaWtlIHRoZSBtb3N0IGludGVyZXN0aW5nIGNhbmRpZGF0ZXMsIGFuZCBJIGRvbid0IHNlZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiB3YXlzIHRoYXQgY291bGQgY2F1c2UgYSBwcm9ibGVtLiBWYXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5SZWdhcmRpbmcgbWVtb3J5IHNhZmV0eSwgdGhlIHJpc2tzIGhlcmUgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSdyZSBkZWFsaW5nIHdpdGggZm9saW8gcmVmY291bnRpbmcsIHBhZ2UgdGFibGUgd2Fsa3MsIGFuZCBodWdldGxiIHBhZ2UgaGFuZGxpbmc6IHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGxvY2tpbmcgaXNzdWVzLCBhbmQgZ2VuZXJhbCBNTS9wYWdpbmcgYnVncy4gSG93ZXZlciwgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHRoZSBhcHByb3ByaWF0ZSB0b29scyB0byBkZXRlY3QgdGhvc2UuIFRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgKipOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZSoqLiBLQVNBTiwgd2l0aCB0aGUgYWRkZWQgYmVuZWZpdCBvZiBMT0NLREVQLCB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMgaGVyZS4gV2UncmUgbm90IGludHJvZHVjaW5nIGFueXRoaW5nIHRoYXQgZmFsbHMgaW50byBLTVNBTidzIGRvbWFpbi4gU28sIEknbGwgZ28gYWhlYWQgYW5kIG1ha2UgdGhhdCBjYWxsLiBJIHdpbGwgc2V0IHRoZSByZXN1bHRzIHRvIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjg1LCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToyMToxMS40OTEyODIzOTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4dGVuZHMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHRvIHN1cHBvcnQgaHVnZXRsYiBmb2xpb3MgZHVyaW5nIHBoeXNpY2FsIGFkZHJlc3MgYWNjZXNzIG1vbml0b3JpbmcgKHBhZGRyKSBhbmQgcGFnZSB0YWJsZSB3YWxrcy4gSXQgcmVmYWN0b3JzIGZvbGlvIGZldGNoaW5nIGFuZCBta29sZC95b3VuZyBoYW5kbGluZyB0byBhY2NvdW50IGZvciBodWdldGxiIGZvbGlvcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgcmV0dXJuIHZhbHVlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGxlZnQgdW5pbml0aWFsaXplZCBpbiBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLiBBbnkgbWVtb3J5IHNhZmV0eSByaXNrcyAoc3VjaCBhcyBmb2xpbyByZWZjb3VudGluZywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgcGFnZSB0YWJsZSB3YWxrIGlzc3VlcykgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRlbmRzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSB0byBzdXBwb3J0IGh1Z2V0bGIgZm9saW9zIGR1cmluZyBwaHlzaWNhbCBhZGRyZXNzIGFjY2VzcyBtb25pdG9yaW5nIChwYWRkcikgYW5kIHBhZ2UgdGFibGUgd2Fsa3MuIEl0IHJlZmFjdG9ycyBmb2xpbyBmZXRjaGluZyBhbmQgbWtvbGQveW91bmcgaGFuZGxpbmcgdG8gYWNjb3VudCBmb3IgaHVnZXRsYiBmb2xpb3MuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHJldHVybiB2YWx1ZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQgaW4gaGVhcC9zdGFjayBhbGxvY2F0aW9ucy4gQW55IG1lbW9yeSBzYWZldHkgcmlza3MgKHN1Y2ggYXMgZm9saW8gcmVmY291bnRpbmcsIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHBhZ2UgdGFibGUgd2FsayBpc3N1ZXMpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflown85pg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 15:00:50 +0000 UTC FinishedAt: 2026-09-02 15:21:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f7e337d9757e473b892fcc071de0bc1a5b094620", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_VADDR", "DAMON_SYSFS", "HUGETLBFS", "HUGETLB_PAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f7e337d9757e473b892fcc071de0bc1a5b094620", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_VADDR", "DAMON_SYSFS", "HUGETLBFS", "HUGETLB_PAGE" ], "series_id": "793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_get_monitor_folio", "damon_hugetlb_mkold", "damon_folio_mkold", "damon_folio_young", "damon_get_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE1OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyYjMzQ7LAogICAgJiMzNDtkYW1vbl9odWdldGxiX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX2ZvbGlvX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX2ZvbGlvX3lvdW5nJiMzNDssCiAgICAmIzM0O2RhbW9uX2dldF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dGVuZHMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHRvIHN1cHBvcnQgaHVnZXRsYiBmb2xpb3MgZHVyaW5nIHBoeXNpY2FsIGFkZHJlc3MgYWNjZXNzIG1vbml0b3JpbmcgKHBhZGRyKSBhbmQgcGFnZSB0YWJsZSB3YWxrcy4gSXQgcmVmYWN0b3JzIGZvbGlvIGZldGNoaW5nIGFuZCBta29sZC95b3VuZyBoYW5kbGluZyB0byBhY2NvdW50IGZvciBodWdldGxiIGZvbGlvcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgcmV0dXJuIHZhbHVlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGxlZnQgdW5pbml0aWFsaXplZCBpbiBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLiBBbnkgbWVtb3J5IHNhZmV0eSByaXNrcyAoc3VjaCBhcyBmb2xpbyByZWZjb3VudGluZywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgcGFnZSB0YWJsZSB3YWxrIGlzc3VlcykgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBEQU1PTiBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcgdG8gc3VwcG9ydCBodWdldGxiIGZvbGlvcyBieSBpbnRyb2R1Y2luZyBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbygpIGFuZCB1cGRhdGluZyBwYWdlIHRhYmxlIHdhbGsgY2FsbGJhY2tzIChkYW1vbl9mb2xpb19ta29sZCwgZGFtb25fZm9saW9feW91bmcsIGRhbW9uX2h1Z2V0bGJfbWtvbGQpIHRvIGhhbmRsZSBodWdldGxiIHBhZ2VzLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcy9pbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE1OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjk2YTJkMWQ3NTBjNTgyNTc3Njk1OWI3MzUxMTQ2Y2I4ZDkwYTE2ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTU6MTc6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5pbmRleCBmYmRhNzBkOGVhNGQwLi44MDIwN2I1NmM2ZmRhIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbkBAIC0zLDYgJiM0MzszLDcgQEBcbiAgKiBDb21tb24gQ29kZSBmb3IgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xuICAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdldGxiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbXVfbm90aWZpZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VfaWRsZS5oXHUwMDNlXG5AQCAtMTQsMTQgJiM0MzsxNSwyMCBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uL2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtvcHMtY29tbW9uLmhcJiMzNDtcbiBcbiYjNDM7c3RhdGljIGJvb2wgZGFtb25fZm9saW9fYWNjZXB0YWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vbml0b3IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZm9saW9fdGVzdF9scnUoZm9saW8pIHx8XG4mIzQzO1x0XHQobW9uaXRvciBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSk7XG4mIzQzO31cbiYjNDM7XG4gLypcbi0gKiBHZXQgYW4gb25saW5lIHBhZ2UgZm9yIGEgcGZuIGlmIGl0JiMzOTtzIGluIHRoZSBMUlUgbGlzdC4gIE90aGVyd2lzZSwgcmV0dXJuc1xuLSAqIE5VTEwuXG4mIzQzOyAqIEdldCBhbiBvbmxpbmUgcGFnZSBmb3IgYSBwZm4gaWYgaXQmIzM5O3MgaW4gdGhlIExSVSBsaXN0LCBvciBhIGh1Z2V0bGIgZm9saW8gaWZcbiYjNDM7ICogQG1vbml0b3IgaXMgc2V0LiAgT3RoZXJ3aXNlLCByZXR1cm5zIE5VTEwuXG4gICpcbiAgKiBUaGUgYm9keSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHN0b2xlbiBmcm9tIHRoZSAmIzM5O3BhZ2VfaWRsZV9nZXRfZm9saW8oKSYjMzk7LiAgV2VcbiAgKiBzdGVhbCByYXRoZXIgdGhhbiByZXVzZSBpdCBiZWNhdXNlIHRoZSBjb2RlIGlzIHF1aXRlIHNpbXBsZS5cbiAgKi9cbi1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbiYjNDM7c3RhdGljIHN0cnVjdCBmb2xpbyAqX19kYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgbW9uaXRvcilcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19vbmxpbmVfcGFnZShwZm4pO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbkBAIC0zMiwxMyAmIzQzOzM5LDMwIEBAIHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuIFx0aWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSkge1xuJiM0MztcdGlmICh1bmxpa2VseShwYWdlX2ZvbGlvKHBhZ2UpICE9IGZvbGlvKSB8fFxuJiM0MztcdFx0XHQhZGFtb25fZm9saW9fYWNjZXB0YWJsZShmb2xpbywgbW9uaXRvcikpIHtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0Zm9saW8gPSBOVUxMO1xuIFx0fVxuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbiBcbiYjNDM7c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19kYW1vbl9nZXRfZm9saW8ocGZuLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFNhbWUgdG8gZGFtb25fZ2V0X2ZvbGlvKCksIGJ1dCBhbHNvIGFjY2VwdHMgaHVnZXRsYiBmb2xpb3MsIHdoaWNoIGFyZVxuJiM0MzsgKiBtYW5hZ2VkIG91dHNpZGUgb2YgdGhlIExSVSBsaXN0cy4gIEFpbWVkIHRvIGJlIHVzZWQgYnkgYWNjZXNzIG1vbml0b3JpbmdcbiYjNDM7ICogcHJpbWl0aXZlcy4gIERBTU9TIGFjdGlvbnMgdGhhdCBhc3N1bWUgTFJVLW1hbmFnZWQgZm9saW9zIHNob3VsZCBrZWVwIHVzaW5nXG4mIzQzOyAqIGRhbW9uX2dldF9mb2xpbygpLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdHB0ZV90IHB0ZXZhbCA9IHB0ZXBfZ2V0KHB0ZSk7XG5AQCAtOTgsNiAmIzQzOzEyMiwzNSBAQCB2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkclxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4mIzQzO3ZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbiYjNDM7XHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4mIzQzO1xuJiM0MztcdGZvbGlvX2dldChmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGlmIChwdGVfeW91bmcoZW50cnkpKSB7XG4mIzQzO1x0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbiYjNDM7XHRcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcbiYjNDM7XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkcixcbiYjNDM7XHRcdFx0XHQgICAgIGFkZHIgJiM0MzsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpXG4mIzQzO1x0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlZmVyZW5jZWQpXG4mIzQzO1x0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuJiM0MztcbiYjNDM7XHRmb2xpb19zZXRfaWRsZShmb2xpbyk7XG4mIzQzO1x0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbiYjNDM7XG4gI2RlZmluZSBEQU1PTl9NQVhfU1VCU0NPUkVcdCgxMDApXG4gI2RlZmluZSBEQU1PTl9NQVhfQUdFX0lOX0xPR1x0KDMyKVxuIFxuQEAgLTE2MywxMCAmIzQzOzIxNiwxNSBAQCBzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19ta29sZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSkge1xuIFx0XHRhZGRyID0gcHZtdy5hZGRyZXNzO1xuLVx0XHRpZiAocHZtdy5wdGUpXG4tXHRcdFx0ZGFtb25fcHRlcF9ta29sZChwdm13LnB0ZSwgdm1hLCBhZGRyKTtcbi1cdFx0ZWxzZVxuJiM0MztcdFx0aWYgKHB2bXcucHRlKSB7XG4mIzQzO1x0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuJiM0MztcdFx0XHRcdGRhbW9uX2h1Z2V0bGJfbWtvbGQocHZtdy5wdGUsIHZtYS1cdTAwM2V2bV9tbSwgdm1hLFxuJiM0MztcdFx0XHRcdFx0XHRhZGRyKTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdGRhbW9uX3B0ZXBfbWtvbGQocHZtdy5wdGUsIHZtYSwgYWRkcik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuIFx0XHRcdGRhbW9uX3BtZHBfbWtvbGQocHZtdy5wbWQsIHZtYSwgYWRkcik7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTkxLDI3ICYjNDM7MjQ5LDU1IEBAIHZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4mIzQzO3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gKHB0ZV9wcmVzZW50KGVudHJ5KSBcdTAwMjZcdTAwMjYgcHRlX3lvdW5nKGVudHJ5KSkgfHxcbiYjNDM7XHRcdCFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XG4mIzQzO1x0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtXHUwMDNldm1fbW0sIGFkZHIpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7I2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBkYW1vbl9wdGVfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRwdGVfdCBlbnRyeSA9IHB0ZXBfZ2V0KHB0ZSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsIHRoYXQgYWN0dWFsbHkgbWFwXG4mIzQzO1x0ICogcGFnZXMgYXJlIFwmIzM0O29sZFwmIzM0OyBmcm9tIGEgQ1BVIHBlcnNwZWN0aXZlLiBUaGUgTU1VIG5vdGlmaWVyIHRha2VzIGNhcmVcbiYjNDM7XHQgKiBvZiBhbnkgZGV2aWNlIGFzcGVjdHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIChwdGVfcHJlc2VudChlbnRyeSkgXHUwMDI2XHUwMDI2IHB0ZV95b3VuZyhlbnRyeSkpIHx8XG4mIzQzO1x0XHQhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuJiM0MztcdFx0bW11X25vdGlmaWVyX3Rlc3RfeW91bmcodm1hLVx1MDAzZXZtX21tLCBhZGRyKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKVxuIHtcbiBcdGJvb2wgKmFjY2Vzc2VkID0gYXJnO1xuIFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHIsIDApO1xuLVx0cHRlX3QgcHRlO1xuIFxuIFx0KmFjY2Vzc2VkID0gZmFsc2U7XG4gXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbiBcdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbiBcdFx0aWYgKHB2bXcucHRlKSB7XG4tXHRcdFx0cHRlID0gcHRlcF9nZXQocHZtdy5wdGUpO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsIHRoYXRcbi1cdFx0XHQgKiBhY3R1YWxseSBtYXAgcGFnZXMgYXJlIFwmIzM0O29sZFwmIzM0OyBmcm9tIGEgQ1BVIHBlcnNwZWN0aXZlLlxuLVx0XHRcdCAqIFRoZSBNTVUgbm90aWZpZXIgdGFrZXMgY2FyZSBvZiBhbnkgZGV2aWNlIGFzcGVjdHMuXG4tXHRcdFx0ICovXG4tXHRcdFx0KmFjY2Vzc2VkID0gKHB0ZV9wcmVzZW50KHB0ZSkgXHUwMDI2XHUwMDI2IHB0ZV95b3VuZyhwdGUpKSB8fFxuLVx0XHRcdFx0IWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHxcbi1cdFx0XHRcdG1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHZtYS1cdTAwM2V2bV9tbSwgYWRkcik7XG4mIzQzO1x0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuJiM0MztcdFx0XHRcdCphY2Nlc3NlZCA9IGRhbW9uX2h1Z2V0bGJfeW91bmcocHZtdy5wdGUsIHZtYSxcbiYjNDM7XHRcdFx0XHRcdFx0YWRkciwgZm9saW8pO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0KmFjY2Vzc2VkID0gZGFtb25fcHRlX3lvdW5nKHB2bXcucHRlLCB2bWEsXG4mIzQzO1x0XHRcdFx0XHRcdGFkZHIsIGZvbGlvKTtcbiBcdFx0fSBlbHNlIHtcbiAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXHRcdFx0cG1kX3QgcG1kID0gcG1kcF9nZXQocHZtdy5wbWQpO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaFxuaW5kZXggMzhkMjk1NDg4ZmExOC4uMTcyZjBmMTdjNGE4NCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG5AQCAtNiw5ICYjNDM7NiwxOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RhbW9uLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XG4mIzQzO3N0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X21vbml0b3JfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xuIFxuIHZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbiB2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG4mIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4mIzQzO3ZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MzsjZW5kaWZcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbiB2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGJvb2wgZGFtb25fZm9saW9feW91bmcoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IDVjNmMzYTU5N2ZkMGIuLmVkN2I3ZjMxMjkxYTAgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMzcsNyAmIzQzOzM3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfY29yZV9hZGRyKFxuIFxuIHN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKVxuIHtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X21vbml0b3JfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcbiBcbiBcdGlmICghZm9saW8pXG4gXHRcdHJldHVybjtcbkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVja3Moc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFxuIHN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyKVxuIHtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X21vbml0b3JfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcbiBcdGJvb2wgYWNjZXNzZWQ7XG4gXG4gXHRpZiAoIWZvbGlvKVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCAwNjQ4NDAwYjJkNjViLi4xNTM3OWQ5ODQ2ODllIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTI5MywzMyAmIzQzOzI5Myw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbi1zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi17XG4tXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbi1cdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuLVx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4tXG4tXHRmb2xpb19nZXQoZm9saW8pO1xuLVxuLVx0aWYgKHB0ZV95b3VuZyhlbnRyeSkpIHtcbi1cdFx0cmVmZXJlbmNlZCA9IHRydWU7XG4tXHRcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcbi1cdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7XG4tXHR9XG4tXG4tXHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxuLVx0XHRcdFx0ICAgICBhZGRyICYjNDM7IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKVxuLVx0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbi1cbi1cdGlmIChyZWZlcmVuY2VkKVxuLVx0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuLVxuLVx0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xuLVx0Zm9saW9fcHV0KGZvbGlvKTtcbi19XG4tXG4gc3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE1OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyYjMzQ7LAogICAgJiMzNDtkYW1vbl9odWdldGxiX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX2ZvbGlvX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX2ZvbGlvX3lvdW5nJiMzNDssCiAgICAmIzM0O2RhbW9uX2dldF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIERBTU9OIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZyB0byBzdXBwb3J0IGh1Z2V0bGIgZm9saW9zIGJ5IGludHJvZHVjaW5nIGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIHBhZ2UgdGFibGUgd2FsayBjYWxsYmFja3MgKGRhbW9uX2ZvbGlvX21rb2xkLCBkYW1vbl9mb2xpb195b3VuZywgZGFtb25faHVnZXRsYl9ta29sZCkgdG8gaGFuZGxlIGh1Z2V0bGIgcGFnZXMuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzL2ludGVyZmFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmOTZhMmQxZDc1MGM1ODI1Nzc2OTU5YjczNTExNDZjYjhkOTBhMTZmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxNToxNzo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uYwppbmRleCBmYmRhNzBkOGVhNGQwLi44MDIwN2I1NmM2ZmRhIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICAqIENvbW1vbiBDb2RlIGZvciBEYXRhIEFjY2VzcyBNb25pdG9yaW5nCiAgKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9odWdldGxiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWlncmF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tdV9ub3RpZmllci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VfaWRsZS5oJmd0OwpAQCAtMTQsMTQgJiM0MzsxNSwyMCBAQAogI2luY2x1ZGUgJiMzNDsuLi9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7b3BzLWNvbW1vbi5oJiMzNDsKIAomIzQzO3N0YXRpYyBib29sIGRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb25pdG9yKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSB8fAomIzQzOwkJKG1vbml0b3IgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKTsKJiM0Mzt9CiYjNDM7CiAvKgotICogR2V0IGFuIG9ubGluZSBwYWdlIGZvciBhIHBmbiBpZiBpdCYjMzk7cyBpbiB0aGUgTFJVIGxpc3QuICBPdGhlcndpc2UsIHJldHVybnMKLSAqIE5VTEwuCiYjNDM7ICogR2V0IGFuIG9ubGluZSBwYWdlIGZvciBhIHBmbiBpZiBpdCYjMzk7cyBpbiB0aGUgTFJVIGxpc3QsIG9yIGEgaHVnZXRsYiBmb2xpbyBpZgomIzQzOyAqIEBtb25pdG9yIGlzIHNldC4gIE90aGVyd2lzZSwgcmV0dXJucyBOVUxMLgogICoKICAqIFRoZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24gaXMgc3RvbGVuIGZyb20gdGhlICYjMzk7cGFnZV9pZGxlX2dldF9mb2xpbygpJiMzOTsuICBXZQogICogc3RlYWwgcmF0aGVyIHRoYW4gcmV1c2UgaXQgYmVjYXVzZSB0aGUgY29kZSBpcyBxdWl0ZSBzaW1wbGUuCiAgKi8KLXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3N0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIG1vbml0b3IpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwpAQCAtMzIsMTMgJiM0MzszOSwzMCBAQCBzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbikKIAlmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7CiAJaWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSkKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8ICFmb2xpb190ZXN0X2xydShmb2xpbykpIHsKJiM0MzsJaWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8CiYjNDM7CQkJIWRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoZm9saW8sIG1vbml0b3IpKSB7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWZvbGlvID0gTlVMTDsKIAl9CiAJcmV0dXJuIGZvbGlvOwogfQogCiYjNDM7c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlyZXR1cm4gX19kYW1vbl9nZXRfZm9saW8ocGZuLCBmYWxzZSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2FtZSB0byBkYW1vbl9nZXRfZm9saW8oKSwgYnV0IGFsc28gYWNjZXB0cyBodWdldGxiIGZvbGlvcywgd2hpY2ggYXJlCiYjNDM7ICogbWFuYWdlZCBvdXRzaWRlIG9mIHRoZSBMUlUgbGlzdHMuICBBaW1lZCB0byBiZSB1c2VkIGJ5IGFjY2VzcyBtb25pdG9yaW5nCiYjNDM7ICogcHJpbWl0aXZlcy4gIERBTU9TIGFjdGlvbnMgdGhhdCBhc3N1bWUgTFJVLW1hbmFnZWQgZm9saW9zIHNob3VsZCBrZWVwIHVzaW5nCiYjNDM7ICogZGFtb25fZ2V0X2ZvbGlvKCkuCiYjNDM7ICovCiYjNDM7c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIHRydWUpOwomIzQzO30KJiM0MzsKIHZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXB0ZV90IHB0ZXZhbCA9IHB0ZXBfZ2V0KHB0ZSk7CkBAIC05OCw2ICYjNDM7MTIyLDM1IEBAIHZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyCiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQomIzQzO3ZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlib29sIHJlZmVyZW5jZWQgPSBmYWxzZTsKJiM0MzsJcHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7CiYjNDM7CiYjNDM7CWZvbGlvX2dldChmb2xpbyk7CiYjNDM7CiYjNDM7CWlmIChwdGVfeW91bmcoZW50cnkpKSB7CiYjNDM7CQlyZWZlcmVuY2VkID0gdHJ1ZTsKJiM0MzsJCWVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTsKJiM0MzsJCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsCiYjNDM7CQkJCSAgICAgYWRkciAmIzQzOyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSkKJiM0MzsJCXJlZmVyZW5jZWQgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAocmVmZXJlbmNlZCkKJiM0MzsJCWZvbGlvX3NldF95b3VuZyhmb2xpbyk7CiYjNDM7CiYjNDM7CWZvbGlvX3NldF9pZGxlKGZvbGlvKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCS8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KJiM0MzsKICNkZWZpbmUgREFNT05fTUFYX1NVQlNDT1JFCSgxMDApCiAjZGVmaW5lIERBTU9OX01BWF9BR0VfSU5fTE9HCSgzMikKIApAQCAtMTYzLDEwICYjNDM7MjE2LDE1IEBAIHN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJd2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKCZhbXA7cHZtdykpIHsKIAkJYWRkciA9IHB2bXcuYWRkcmVzczsKLQkJaWYgKHB2bXcucHRlKQotCQkJZGFtb25fcHRlcF9ta29sZChwdm13LnB0ZSwgdm1hLCBhZGRyKTsKLQkJZWxzZQomIzQzOwkJaWYgKHB2bXcucHRlKSB7CiYjNDM7CQkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpCiYjNDM7CQkJCWRhbW9uX2h1Z2V0bGJfbWtvbGQocHZtdy5wdGUsIHZtYS0mZ3Q7dm1fbW0sIHZtYSwKJiM0MzsJCQkJCQlhZGRyKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWRhbW9uX3B0ZXBfbWtvbGQocHZtdy5wdGUsIHZtYSwgYWRkcik7CiYjNDM7CQl9IGVsc2UgewogCQkJZGFtb25fcG1kcF9ta29sZChwdm13LnBtZCwgdm1hLCBhZGRyKTsKJiM0MzsJCX0KIAl9CiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xOTEsMjcgJiM0MzsyNDksNTUgQEAgdm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQomIzQzO3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIChwdGVfcHJlc2VudChlbnRyeSkgJmFtcDsmYW1wOyBwdGVfeW91bmcoZW50cnkpKSB8fAomIzQzOwkJIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHwKJiM0MzsJCW1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHZtYS0mZ3Q7dm1fbW0sIGFkZHIpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgkvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZGFtb25fcHRlX3lvdW5nKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcHRlX3QgZW50cnkgPSBwdGVwX2dldChwdGUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdCBhY3R1YWxseSBtYXAKJiM0MzsJICogcGFnZXMgYXJlICYjMzQ7b2xkJiMzNDsgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4gVGhlIE1NVSBub3RpZmllciB0YWtlcyBjYXJlCiYjNDM7CSAqIG9mIGFueSBkZXZpY2UgYXNwZWN0cy4KJiM0MzsJICovCiYjNDM7CXJldHVybiAocHRlX3ByZXNlbnQoZW50cnkpICZhbXA7JmFtcDsgcHRlX3lvdW5nKGVudHJ5KSkgfHwKJiM0MzsJCSFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8CiYjNDM7CQltbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtJmd0O3ZtX21tLCBhZGRyKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKQogewogCWJvb2wgKmFjY2Vzc2VkID0gYXJnOwogCURFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyLCAwKTsKLQlwdGVfdCBwdGU7CiAKIAkqYWNjZXNzZWQgPSBmYWxzZTsKIAl3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoJmFtcDtwdm13KSkgewogCQlhZGRyID0gcHZtdy5hZGRyZXNzOwogCQlpZiAocHZtdy5wdGUpIHsKLQkJCXB0ZSA9IHB0ZXBfZ2V0KHB2bXcucHRlKTsKLQotCQkJLyoKLQkJCSAqIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0Ci0JCQkgKiBhY3R1YWxseSBtYXAgcGFnZXMgYXJlICYjMzQ7b2xkJiMzNDsgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4KLQkJCSAqIFRoZSBNTVUgbm90aWZpZXIgdGFrZXMgY2FyZSBvZiBhbnkgZGV2aWNlIGFzcGVjdHMuCi0JCQkgKi8KLQkJCSphY2Nlc3NlZCA9IChwdGVfcHJlc2VudChwdGUpICZhbXA7JmFtcDsgcHRlX3lvdW5nKHB0ZSkpIHx8Ci0JCQkJIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHwKLQkJCQltbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtJmd0O3ZtX21tLCBhZGRyKTsKJiM0MzsJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKJiM0MzsJCQkJKmFjY2Vzc2VkID0gZGFtb25faHVnZXRsYl95b3VuZyhwdm13LnB0ZSwgdm1hLAomIzQzOwkJCQkJCWFkZHIsIGZvbGlvKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCSphY2Nlc3NlZCA9IGRhbW9uX3B0ZV95b3VuZyhwdm13LnB0ZSwgdm1hLAomIzQzOwkJCQkJCWFkZHIsIGZvbGlvKTsKIAkJfSBlbHNlIHsKICNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKIAkJCXBtZF90IHBtZCA9IHBtZHBfZ2V0KHB2bXcucG1kKTsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaAppbmRleCAzOGQyOTU0ODhmYTE4Li4xNzJmMGYxN2M0YTg0IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oCkBAIC02LDkgJiM0Mzs2LDE5IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZGFtb24uaCZndDsKIAogc3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pOwomIzQzO3N0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X21vbml0b3JfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pOwogCiB2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7CiB2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7CiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKJiM0Mzt2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKJiM0Mzt7CiYjNDM7fQomIzQzOyNlbmRpZgkvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCiB2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogYm9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmMKaW5kZXggNWM2YzNhNTk3ZmQwYi4uZWQ3YjdmMzEyOTFhMCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vcGFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jCkBAIC0zNyw3ICYjNDM7MzcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9jb3JlX2FkZHIoCiAKIHN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKQogewotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGFkZHIpKTsKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7CiAKIAlpZiAoIWZvbGlvKQogCQlyZXR1cm47CkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVja3Moc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCiBzdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkcikKIHsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyhQSFlTX1BGTihwYWRkcikpOwogCWJvb2wgYWNjZXNzZWQ7CiAKIAlpZiAoIWZvbGlvKQpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmMKaW5kZXggMDY0ODQwMGIyZDY1Yi4uMTUzNzlkOTg0Njg5ZSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdmFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jCkBAIC0yOTMsMzMgJiM0MzsyOTMsNiBAQCBzdGF0aWMgaW50IGRhbW9uX21rb2xkX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiB9CiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi1zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JYm9vbCByZWZlcmVuY2VkID0gZmFsc2U7Ci0JcHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpOwotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpOwotCXVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwotCi0JZm9saW9fZ2V0KGZvbGlvKTsKLQotCWlmIChwdGVfeW91bmcoZW50cnkpKSB7Ci0JCXJlZmVyZW5jZWQgPSB0cnVlOwotCQllbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7Ci0JCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpOwotCX0KLQotCWlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsCi0JCQkJICAgICBhZGRyICYjNDM7IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKQotCQlyZWZlcmVuY2VkID0gdHJ1ZTsKLQotCWlmIChyZWZlcmVuY2VkKQotCQlmb2xpb19zZXRfeW91bmcoZm9saW8pOwotCi0JZm9saW9fc2V0X2lkbGUoZm9saW8pOwotCWZvbGlvX3B1dChmb2xpbyk7Ci19Ci0KIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCQkgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgYWRkaXRpb24gaXMgd29ydGggdGhlIGZ1enppbmcgZWZmb3J0LCBhbmQgaWYgc28sIGhvdyB0byBiZXN0IGFwcHJvYWNoIGl0LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLgoKU28sIHRoZSBwYXRjaCB0b3VjaGVzIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCBgbW0vZGFtb24vb3BzLWNvbW1vbi5oYCwgYG1tL2RhbW9uL3BhZGRyLmNgLCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFsbCBhYm91dCBpbnRlZ3JhdGluZyBodWdldGxiIGZvbGlvIHN1cHBvcnQgaW50byBEQU1PTiYjMzk7cyBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcuIEludGVyZXN0aW5nLgoKU3BlY2lmaWNhbGx5OgoKKiAgIEl0IGFkZHMgdGhlIGFiaWxpdHkgdG8gbW9uaXRvciBodWdldGxiIGZvbGlvcyB3aXRoaW4gREFNT04mIzM5O3MgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nLgoqICAgVGhlIGBkYW1vbl9mb2xpb19hY2NlcHRhYmxlYCBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgaHVnZXRsYiBmb2xpb3MuIFRoYXTigJlzIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjaGVjayB3aWxsIHRyaWdnZXIuCiogICBgX19kYW1vbl9nZXRfZm9saW9gIGFuZCBpdHMgY2FsbGVycyBhcmUgcmVmYWN0b3JlZCB0byBoYW5kbGUgdGhlICYjMzQ7bW9uaXRvciYjMzQ7IGNvbnRleHQgd2l0aCBuZXcgZnVuY3Rpb25zLgoqICAgYGRhbW9uX2h1Z2V0bGJfbWtvbGRgIGlzIG1vdmVkIGFuZCBleHBvc2VkLCB3aGljaCBpcyByZWxldmFudCBhcyBpdCYjMzk7cyBub3cgaW52b2x2ZWQgaW4gbW9yZSBwbGFjZXMuCiogICBgZGFtb25fZm9saW9fbWtvbGRfb25lYCBhbmQgYGRhbW9uX2ZvbGlvX3lvdW5nX29uZWAgYXJlIHVwZGF0ZWQgdG8gY2FsbCB0aGVzZSBuZXcgZnVuY3Rpb25zIHRvby4KKiAgIGBkYW1vbl9wYV9ta29sZGAgYW5kIGBkYW1vbl9wYV95b3VuZ2AgaGF2ZSBjaGFuZ2VkIHRvIHVzZSB0aGUgbmV3IGBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpb2AgZnVuY3Rpb24uCgpOb3csIHRvIGFzc2VzcyBmdXp6aW5nIHBvdGVudGlhbCwgSSBuZWVkIHRvIGtub3cgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IgY2hlY2sgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IGRlcGVuZGVuY2llcyBvbiBEQU1PTiBmZWF0dXJlcyBhbmQgSFVHRVRMQiBjb25maWd1cmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYnVpbGRpbmcgYSBmdXp6aW5nIHRhcmdldCB0aGF0IGV4cG9zZXMgdGhpcyBmdW5jdGlvbmFsaXR5LgoKQmFzZWQgb24gdGhpcyBxdWljayBhbmFseXNpcywgSSYjMzk7ZCBzYXkgdGhpcyBwYXRjaCBpcyB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nLiBUaGUgY2hhbmdlcyB0byBmb2xpbyBoYW5kbGluZyBhbmQgdGhlIGludGVncmF0aW9uIG9mIGh1Z2V0bGIgc3VwcG9ydCBpbnRyb2R1Y2UgbmV3IGNvZGUgcGF0aHMgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBNeSBuZXh0IHN0ZXBzIHdpbGwgYmUgdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uIHJpZ2h0IGFuZCB0aGVuIGlkZW50aWZ5IHBvdGVudGlhbCBmdXp6IHRhcmdldHMgd2l0aGluIHRoaXMgbW9kaWZpZWQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIERBTU9OXG4gICA2Olx0XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXG4gICA5Olx0XHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxuICAxMDpcdFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcbiAgMTM6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG4gIDE2Olx0XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIERBTU9OXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbiAgMjA6XHRcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG4gIDIxOlx0XHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4gIDIyOlx0XHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4gIDI3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjg6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxuICAzMjpcdFxuICAzMzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgMzQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcbiAgNTc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDU4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDU5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA4MDpcdFx0aGVscFxuICA4MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDgyOlx0XG4gIDgzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA4NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgODU6XHRcbiAgODY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgODc6XHRcbiAgODg6XHRjb25maWcgREFNT05fUkVDTEFJTVxuICA4OTpcdFx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuICA5MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxuICA5MTpcdFx0aGVscFxuICA5MjpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcbiAgOTM6XHRcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxuICA5NDpcdFx0ICB0aG9zZS5cbiAgOTU6XHRcbiAgOTY6XHRcdCAgVGhpcyBpcyBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBhcyBhIHByb2FjdGl2ZSBhbmQgbGlnaHR3ZWlnaHRcbiAgOTc6XHRcdCAgcmVjbGFtYXRpb24gdW5kZXIgbGlnaHQgbWVtb3J5IHByZXNzdXJlLCB3aGlsZSB0aGUgdHJhZGl0aW9uYWwgcGFnZVxuICA5ODpcdFx0ICBzY2FubmluZy1iYXNlZCByZWNsYW1hdGlvbiBpcyB1c2VkIGZvciBoZWF2eSBwcmVzc3VyZS5cbiAgOTk6XHRcbiAxMDA6XHRjb25maWcgREFNT05fTFJVX1NPUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTg0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTWFrZWZpbGUgRXhwbG9yYXRpb24gZm9yIE9wcy1Db21tb24gYW5kIFBhZGRyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgb3BzLWNvbW1vbmAgYW5kIGBwYWRkcmAgYXJlIGJlaW5nIGJ1aWx0LCByaWdodD8mIzM0OyBJJiMzOTt2ZSBnb3QgYSBodW5jaCB0aGF0IGEga2V5IHBpZWNlIG9mIHRoYXQgcHV6emxlIGxpZXMgd2l0aGluIHRoZSBgbW0vZGFtb24vTWFrZWZpbGVgLiBNYWtlcyBzZW5zZSDigJMgdGhhdCYjMzk7cyBhIGxpa2VseSBwbGFjZSB0byBmaW5kIGJ1aWxkIGluc3RydWN0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhvc2UgY29tcG9uZW50cy4gTGV0JiMzOTtzIGRlbHZlIGluIHRoZXJlIGFuZCBzZWUgd2hhdCBtYWdpYyB0aGUgTWFrZWZpbGUgaG9sZHMuIFRpbWUgdG8gcG9rZSBhcm91bmQgYW5kIHNlZSBob3cgdGhlc2UgdG9vbHMgYXJlIG9yY2hlc3RyYXRlZC4gSSBuZWVkIHRvIGJlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGNvcnJlY3QgYnVpbGQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE1OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5OTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczoKCioqQ2hlY2tpbmcgYEhVR0VUTEJfUEFHRWAgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBIVUdFVExCX1BBR0VgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgcGFnZXMsIGFuZCBzb21ldGltZXMgdGhlIHNpbXBsZXN0IHRoaW5ncyBhcmUgb3Zlcmxvb2tlZC4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGN1cnJlbnQgc3RhdHVzLCB0aGUgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIHRoZSBzcGVjaWZpYyBwcm9ibGVtIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gSSYjMzk7bGwgbWVudGFsbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IHNlY3Rpb25zIG9mIHRoZSBjb25maWcgZmlsZSBhbmQgZG9jdW1lbnRhdGlvbiBqdXN0IHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIHNldHRpbmcuIE5vIHNlbnNlIGluIHNwaW5uaW5nIG15IHdoZWVscyBvbiBzb21ldGhpbmcgSSYjMzk7dmUgYWxyZWFkeSBzb2x2ZWQgd2l0aCBhIHNpbXBsZSBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njg5PWNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xuLS1cbm1tL0tjb25maWctNjkxLVxubW0vS2NvbmZpZzo2OTI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTY5My1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjc0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYEhVR0VUTEJfUEFHRWAgaXMgZGVmaW5lZC4gVGhpcyBpcyBhIGNvbW1vbiBzaXR1YXRpb24sIHNvIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBmcy9LY29uZmlnYC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBnby10byBwbGFjZSBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZXNwZWNpYWxseSBpZiB0aGV5IHJlbGF0ZSB0byBmaWxlIHN5c3RlbXMgb3IgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBgSFVHRVRMQl9QQUdFYCBkZWZpbml0ZWx5IGhpbnRzIGF0IHRoZSBsYXR0ZXIuIExldCYjMzk7cyBzZWUgaWYgaXQmIzM5O3MgcmlnaHQgdGhlcmUuIElmIG5vdCwgaXQmIzM5O3MgdGltZSB0byBzdGFydCBzZWFyY2hpbmcgbW9yZSBicm9hZGx5LCBwZXJoYXBzIHdpdGggYGdyZXBgIG9yIGBmaW5kYCwgYnV0IGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZXNlIGtpbmRzIG9mIHN5bWJvbHMsIHBhcnRpY3VsYXJseSB0aGUgb25lcyBhdCB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTU2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBIVUdFVExCX1BBR0VgIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYEhVR0VUTEJfUEFHRWAgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoZSB0ZXh0IHRlbGxzIG1lIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBmcy9LY29uZmlnYC4gUmlnaHQgYXdheSwgSSBub3RlIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgSFVHRVRMQkZTYCB1c2luZyBhIGBkZWZfYm9vbGAsIHdoaWNoIEkmIzM5O2xsIGtlZXAgaW4gbWluZC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBuZWVkIHRvIGp1bXAgaW50byBgZnMvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDI3MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgb3B0aW9uIGFjdHVhbGx5ICpkb2VzKiBhbmQgd2hhdCBpdCYjMzk7cyB0aWVkIHRvIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBkZXNjcmlwdGlvbiBvZiBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgcG9zc2libHkgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gb3RoZXIgb3B0aW9ucy4gSSYjMzk7bGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IG90aGVyIGRlcGVuZGVuY2llcyBvciByZWxhdGlvbnNoaXBzIHRvIG90aGVyIGtlcm5lbCBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRtZW51Y29uZmlnIEhVR0VUTEJGU1xuIDI1MTpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAyNTI6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNTM6XHRcdHNlbGVjdCBNRU1GRF9DUkVBVEVcbiAyNTQ6XHRcdHNlbGVjdCBQQURBVEEgaWYgU01QXG4gMjU1Olx0XHRoZWxwXG4gMjU2Olx0XHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cbiAyNTc6XHRcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxuIDI1ODpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDI1OTpcdFxuIDI2MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI2MTpcdFxuIDI2MjpcdGlmIEhVR0VUTEJGU1xuIDI2MzpcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG4gMjY0Olx0XHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbiAyNjU6XHRcdGRlZmF1bHQgblxuIDI2NjpcdFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuIDI2NzpcdFx0aGVscFxuIDI2ODpcdFx0ICBUaGUgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvZmYuIFNheSBZIGhlcmUgdG9cbiAyNjk6XHRcdCAgZW5hYmxlIEhWTyBieSBkZWZhdWx0LiBJdCBjYW4gYmUgZGlzYWJsZWQgdmlhIGh1Z2V0bGJfZnJlZV92bWVtbWFwPW9mZlxuIDI3MDpcdFx0ICAoYm9vdCBjb21tYW5kIGxpbmUpIG9yIGh1Z2V0bGJfb3B0aW1pemVfdm1lbW1hcCAoc3lzY3RsKS5cbiAyNzE6XHRlbmRpZiAjIEhVR0VUTEJGU1xuIDI3MjpcdFxuIDI3MzpcdGNvbmZpZyBIVUdFVExCX1BBR0VcbiAyNzQ6XHRcdGRlZl9ib29sIEhVR0VUTEJGU1xuIDI3NTpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuIDI3NjpcdFxuIDI3NzpcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuIDI3ODpcdFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4gMjc5Olx0XHRkZXBlbmRzIG9uIEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBcbiAyODA6XHRcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbiAyODE6XHRcbiAyODI6XHRjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG4gMjgzOlx0XHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcbiAyODQ6XHRcdGRlcGVuZHMgb24gQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFIFx1MDAyNlx1MDAyNiBTUExJVF9QTURfUFRMT0NLU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDIxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEh1Z2VUTEIgYW5kIFBoeXNpY2FsIEFkZHJlc3MgU3VwcG9ydCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGBDT05GSUdfSFVHRVRMQkZTYCBlbmFibGluZyBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIHJlbGV2YW50IGhlcmUuIFRoYXQgbWFrZXMgc2Vuc2UsIHdlIGFyZSBkZWFsaW5nIHdpdGggSHVnZVRMQiBwYWdlcy4gVGhlbiB3ZSBoYXZlIHRoZSBzdGFuZGFyZCBEQU1PTiBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlZCwgc3BlY2lmaWNhbGx5LCBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGBDT05GSUdfREFNT05fVkFERFJgLCBhbmQgYENPTkZJR19EQU1PTl9TWVNGU2AuIFJpZ2h0LCBzbyB0aGlzIGlzIGFib3V0IGludGVncmF0aW5nIERBTU9OIHdpdGggSHVnZVRMQiBhbmQgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nLgoKTm93LCBsZXQmIzM5O3MgbW92ZSBvbnRvIHRoZSBtZWF0IG9mIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMuIFRoZSBmdW5jdGlvbnMgYWRkZWQgb3IgbW9kaWZpZWQgYXJlIG15IGZvY3VzLiBJbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCwgSSBzZWUgYSBjbHVzdGVyIG9mIG5ldyBmdW5jdGlvbnM6IGBkYW1vbl9mb2xpb19hY2NlcHRhYmxlYCwgYF9fZGFtb25fZ2V0X2ZvbGlvYCwgYGRhbW9uX2dldF9mb2xpb2AsIGBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpb2AsIGBkYW1vbl9odWdldGxiX21rb2xkYCwgYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAsIGBkYW1vbl9mb2xpb19ta29sZGAsIGBkYW1vbl9odWdldGxiX3lvdW5nYCwgYGRhbW9uX3B0ZV95b3VuZ2AsIGBkYW1vbl9mb2xpb195b3VuZ19vbmVgLCBhbmQgYGRhbW9uX2ZvbGlvX3lvdW5nYC4gU2V2ZXJhbCBvZiB0aGVzZSBhcmUgZGVjbGFyZWQgYHN0YXRpY2AsIHN1Z2dlc3RpbmcgdGhleSYjMzk7cmUgaW50ZXJuYWwgaGVscGVycywgd2hpbGUgb3RoZXJzIGFyZSBleHBvcnRlZCwgaW5kaWNhdGluZyBlbnRyeSBwb2ludHMuIEkgY2FuIGFscmVhZHkgc2VlIGBta29sZGAgYW5kIGB5b3VuZ2AgbWV0aG9kcyBiZWluZyBjcmVhdGVkLCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IG1hcmtpbmcgcGFnZXMgYXMgb2xkIG9yIHlvdW5nLgoKSW4gYG1tL2RhbW9uL3BhZGRyLmNgLCBJJiMzOTt2ZSBnb3QgdHdvIG1vcmU6IGBkYW1vbl9wYV9ta29sZGAgYW5kIGBkYW1vbl9wYV95b3VuZ2AuIFRoZXNlIGFyZSB0aGUgcGh5c2ljYWwgYWRkcmVzcy1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMsIGFzIGV4cGVjdGVkLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4gSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIGV4cG9ydGVkIHN5bWJvbHMgZnJvbSBgb3BzLWNvbW1vbi5oYCBhbmQgdGhlIGZ1bmN0aW9ucyBpbiBgcGFkZHIuY2AuIE15IG5leHQgc3RlcCBpcyB0byBzZWFyY2ggZm9yIHRoZSBjYWxsIHNpdGVzIG9mIGBkYW1vbl9mb2xpb19ta29sZGAsIGBkYW1vbl9mb2xpb195b3VuZ2AsIGBkYW1vbl9odWdldGxiX21rb2xkYCwgYGRhbW9uX2dldF9mb2xpb2AsIGFuZCBgZGFtb25fZ2V0X21vbml0b3JfZm9saW9gLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29udHJvbCBmbG93IGFuZCBpbnRlcmFjdGlvbiBvZiBEQU1PTiB3aXRoIEh1Z2VUTEIgYW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLCBhbmQgaGlnaGxpZ2h0IHRoZSBrZXkgaW50ZWdyYXRpb24gcG9pbnRzIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBleGFtaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl8uKmZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYy0xOS1cbm1tL2RhbW9uL2NvcmUuYzoyMDovKiBmb3IgZGFtb25fZ2V0X2ZvbGlvKCkgdXNlZCBieSBub2RlIGVsaWdpYmxlIG1lbW9yeSBtZXRyaWNzICovXG5tbS9kYW1vbi9jb3JlLmMtMjEtI2luY2x1ZGUgXCYjMzQ7b3BzLWNvbW1vbi5oXCYjMzQ7XG4tLVxubW0vZGFtb24vY29yZS5jPTI4MTY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjg2Ny0gKlxubW0vZGFtb24vY29yZS5jOjI4Njg6ICogTm90ZTogVGhpcyBmdW5jdGlvbiByZXF1aXJlcyBkYW1vbl9nZXRfZm9saW8oKSBmcm9tIG9wcy1jb21tb24uYywgd2hpY2ggaXNcbm1tL2RhbW9uL2NvcmUuYy0yODY5LSAqIG9ubHkgYXZhaWxhYmxlIHdoZW4gQ09ORklHX0RBTU9OX1BBRERSIGlzIGVuYWJsZWQuIEl0IGFsc28gcmVxdWlyZXMgdGhlXG4tLVxubW0vZGFtb24vY29yZS5jPTI4NzI9c3RhdGljIHBoeXNfYWRkcl90IGRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjg5NS1cbm1tL2RhbW9uL2NvcmUuYzoyODk2Olx0XHRcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xubW0vZGFtb24vY29yZS5jLTI4OTctXHRcdFx0XHRpZiAoIWZvbGlvKSB7XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3LVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE4OnN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb25pdG9yKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE5LXtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMzAtICovXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MzE6c3RhdGljIHN0cnVjdCBmb2xpbyAqX19kYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgbW9uaXRvcilcbm1tL2RhbW9uL29wcy1jb21tb24uYy0zMi17XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQyLVx0aWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDM6XHRcdFx0IWRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoZm9saW8sIG1vbml0b3IpKSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDQtXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQ5LVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjUwOnN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTUxLXtcbm1tL2RhbW9uL29wcy1jb21tb24uYzo1MjpcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIGZhbHNlKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy01My19XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTU1LS8qXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTY6ICogU2FtZSB0byBkYW1vbl9nZXRfZm9saW8oKSwgYnV0IGFsc28gYWNjZXB0cyBodWdldGxiIGZvbGlvcywgd2hpY2ggYXJlXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNTctICogbWFuYWdlZCBvdXRzaWRlIG9mIHRoZSBMUlUgbGlzdHMuICBBaW1lZCB0byBiZSB1c2VkIGJ5IGFjY2VzcyBtb25pdG9yaW5nXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNTgtICogcHJpbWl0aXZlcy4gIERBTU9TIGFjdGlvbnMgdGhhdCBhc3N1bWUgTFJVLW1hbmFnZWQgZm9saW9zIHNob3VsZCBrZWVwIHVzaW5nXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTk6ICogZGFtb25fZ2V0X2ZvbGlvKCkuXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNjAtICovXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NjE6c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbm1tL2RhbW9uL29wcy1jb21tb24uYy02Mi17XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NjM6XHRyZXR1cm4gX19kYW1vbl9nZXRfZm9saW8ocGZuLCB0cnVlKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy02NC19XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTY2PXZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy03Ny1cbm1tL2RhbW9uL29wcy1jb21tb24uYzo3ODpcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKHBmbik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzktXHRpZiAoIWZvbGlvKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz05Nz12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTA5LVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjExMDpcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKHBmbik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTExLVx0aWYgKCFmb2xpbylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MjAzPWludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIxMS1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMTI6c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjEzLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIzMS1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMzI6dm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIzMy17XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjM0LVx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMzU6XHRcdC5ybWFwX29uZSA9IGRhbW9uX2ZvbGlvX21rb2xkX29uZSxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMzYtXHRcdC5hbm9uX2xvY2sgPSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQsXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI3MD1zdGF0aWMgYm9vbCBkYW1vbl9wdGVfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI4NC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoyODU6c3RhdGljIGJvb2wgZGFtb25fZm9saW9feW91bmdfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjg2LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTMyMS1cbm1tL2RhbW9uL29wcy1jb21tb24uYzozMjI6Ym9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTMyMy17XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTMyNi1cdFx0LmFyZyA9IFx1MDAyNmFjY2Vzc2VkLFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjMyNzpcdFx0LnJtYXBfb25lID0gZGFtb25fZm9saW9feW91bmdfb25lLFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTMyOC1cdFx0LmFub25fbG9jayA9IGZvbGlvX2xvY2tfYW5vbl92bWFfcmVhZCxcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MzQ3PWJvb2wgZGFtb3NfZm9saW9fZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMzY5LVx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9ZT1VORzpcbm1tL2RhbW9uL29wcy1jb21tb24uYzozNzA6XHRcdG1hdGNoZWQgPSBkYW1vbl9mb2xpb195b3VuZyhmb2xpbyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMzcxLVx0XHRpZiAobWF0Y2hlZClcbm1tL2RhbW9uL29wcy1jb21tb24uYzozNzI6XHRcdFx0ZGFtb25fZm9saW9fbWtvbGQoZm9saW8pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTM3My1cdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTM4OC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzozODk6c3RhdGljIHVuc2lnbmVkIGludCBfX2RhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChcbm1tL2RhbW9uL29wcy1jb21tb24uYy0zOTAtXHRcdHN0cnVjdCBsaXN0X2hlYWQgKm1pZ3JhdGVfZm9saW9zLCBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy00MTgtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDE5OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbWlncmF0ZV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDIwLVx0XHRcdFx0XHRcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQ0Ni1cdC8qIE1pZ3JhdGUgZm9saW9zIHNlbGVjdGVkIGZvciBtaWdyYXRpb24gKi9cbm1tL2RhbW9uL29wcy1jb21tb24uYzo0NDc6XHRucl9taWdyYXRlZCAmIzQzOz0gX19kYW1vbl9taWdyYXRlX2ZvbGlvX2xpc3QoXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDQ4LVx0XHRcdFx1MDAyNm1pZ3JhdGVfZm9saW9zLCBwZ2RhdCwgdGFyZ2V0X25pZCk7XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQ3MC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzo0NzE6dW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQ3Mi17XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTUwNC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzo1MDU6XHRcdG5yX21pZ3JhdGVkICYjNDM7PSBkYW1vbl9taWdyYXRlX2ZvbGlvX2xpc3QoXHUwMDI2bm9kZV9mb2xpb19saXN0LFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTUwNi1cdFx0XHRcdFx0XHRcdCAgIE5PREVfREFUQShuaWQpLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy01MTAtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTExOlx0bnJfbWlncmF0ZWQgJiM0Mzs9IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChcdTAwMjZub2RlX2ZvbGlvX2xpc3QsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNTEyLVx0XHRcdFx0XHRcdCAgIE5PREVfREFUQShuaWQpLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uaC03LVxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjg6c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oOjk6c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTAtXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTE3PXN0YXRpYyBpbmxpbmUgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uaC0yMS0jZW5kaWZcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbm1tL2RhbW9uL29wcy1jb21tb24uaDoyMjp2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oOjIzOmJvb2wgZGFtb25fZm9saW9feW91bmcoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMjQtXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTMwPWJvb2wgZGFtb3NfZm9saW9fZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MzE6dW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC0zMi1cbi0tXG5tbS9kYW1vbi9wYWRkci5jPTM4PXN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKVxubW0vZGFtb24vcGFkZHIuYy0zOS17XG5tbS9kYW1vbi9wYWRkci5jOjQwOlx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jLTQxLVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDQtXG5tbS9kYW1vbi9wYWRkci5jOjQ1Olx0ZGFtb25fZm9saW9fbWtvbGQoZm9saW8pO1xubW0vZGFtb24vcGFkZHIuYy00Ni1cdGZvbGlvX3B1dChmb2xpbyk7XG4tLVxubW0vZGFtb24vcGFkZHIuYz02OD1zdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkcilcbm1tL2RhbW9uL3BhZGRyLmMtNjkte1xubW0vZGFtb24vcGFkZHIuYzo3MDpcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyhQSFlTX1BGTihwYWRkcikpO1xubW0vZGFtb24vcGFkZHIuYy03MS1cdGJvb2wgYWNjZXNzZWQ7XG4tLVxubW0vZGFtb24vcGFkZHIuYy03NS1cbm1tL2RhbW9uL3BhZGRyLmM6NzY6XHRhY2Nlc3NlZCA9IGRhbW9uX2ZvbGlvX3lvdW5nKGZvbGlvKTtcbm1tL2RhbW9uL3BhZGRyLmMtNzctXHRmb2xpb19wdXQoZm9saW8pO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTA4PXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNDAtXG5tbS9kYW1vbi9wYWRkci5jOjE0MTpzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2RhbW9uL3BhZGRyLmMtMTQyLVx0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNDctXHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xubW0vZGFtb24vcGFkZHIuYzoxNDg6XHRcdGlmIChkYW1vbl9wYV9maWx0ZXJfbWF0Y2goZiwgZm9saW8pKSB7XG5tbS9kYW1vbi9wYWRkci5jLTE0OS1cdFx0XHRwYXNzID0gZi1cdTAwM2VhbGxvdztcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTE1Nz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNzUtXHRcdFx0XHRcdGN0eC1cdTAwM2VhZGRyX3VuaXQpO1xubW0vZGFtb24vcGFkZHIuYzoxNzY6XHRcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGEpKTtcbm1tL2RhbW9uL3BhZGRyLmMtMTc3LVx0XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xubW0vZGFtb24vcGFkZHIuYzoxNzg6XHRcdFx0XHRpZiAoZGFtb25fcGFfZmlsdGVyX3Bhc3MocGEsIGZvbGlvLCBwKSlcbm1tL2RhbW9uL3BhZGRyLmMtMTc5LVx0XHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTk1PXN0YXRpYyBib29sIGRhbW9zX3BhX2ZpbHRlcl9vdXQoc3RydWN0IGRhbW9zICpzY2hlbWUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yMDgtXG5tbS9kYW1vbi9wYWRkci5jOjIwOTpzdGF0aWMgYm9vbCBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL3BhZGRyLmMtMjEwLXtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNDYtXHR3aGlsZSAoYWRkciBcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlYXIuZW5kLCBhZGRyX3VuaXQpKSB7XG5tbS9kYW1vbi9wYWRkci5jOjI0NzpcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xubW0vZGFtb24vcGFkZHIuYzoyNDg6XHRcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xubW0vZGFtb24vcGFkZHIuYy0yNDktXHRcdFx0YWRkciAmIzQzOz0gUEFHRV9TSVpFO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9Mjc4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTI4Ny1cdHdoaWxlIChhZGRyIFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcbm1tL2RhbW9uL3BhZGRyLmM6Mjg4Olx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjI4OTpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTI5MC1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0zMjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzM1LVx0d2hpbGUgKGFkZHIgXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xubW0vZGFtb24vcGFkZHIuYzozMzY6XHRcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcbm1tL2RhbW9uL3BhZGRyLmM6MzM3Olx0XHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMzM4LVx0XHRcdGFkZHIgJiM0Mzs9IFBBR0VfU0laRTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM1NS1cdH1cbm1tL2RhbW9uL3BhZGRyLmM6MzU2Olx0YXBwbGllZCA9IGRhbW9uX21pZ3JhdGVfcGFnZXMoXHUwMDI2Zm9saW9fbGlzdCwgcy1cdTAwM2V0YXJnZXRfbmlkKTtcbm1tL2RhbW9uL3BhZGRyLmMtMzU3LVx0Y29uZF9yZXNjaGVkKCk7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0zNjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzczLVx0d2hpbGUgKGFkZHIgXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xubW0vZGFtb24vcGFkZHIuYzozNzQ6XHRcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcbm1tL2RhbW9uL3BhZGRyLmM6Mzc1Olx0XHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMzc2LVx0XHRcdGFkZHIgJiM0Mzs9IFBBR0VfU0laRTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1ODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBkYW1vbl9mb2xpb19ta29sZGAsIGBkYW1vbl9mb2xpb195b3VuZ2AsIGBkYW1vbl9odWdldGxiX21rb2xkYCwgYGRhbW9uX2dldF9mb2xpb2AsIGFuZCBgZGFtb25fZ2V0X21vbml0b3JfZm9saW9gIGFyZSBhbGwgZXhwb3J0ZWQgZnVuY3Rpb25zIHdpdGhpbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIG1lYW5pbmcgdGhleSYjMzk7cmUgYWNjZXNzaWJsZSBvdXRzaWRlIHRoYXQgZmlsZSwgbGlrZWx5IGNvcmUgdG8gREFNT04mIzM5O3Mgb3BlcmF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlICp1c2VkKi4gTXkgZm9jdXMgbm93IHNoaWZ0cyB0byBgdmFkZHIuY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5YCBmdW5jdGlvbi4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGNhbGwgdG8gYGRhbW9uX2h1Z2V0bGJfbWtvbGRgLiBUaGF0IHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gaG93IERBTU9OIGhhbmRsZXMgaHVnZSBwYWdlcyBpbiB0aGUgJiMzNDtta29sZCYjMzQ7IGNvbnRleHQsIGFuZCBob3cgdGhlc2UgdmFyaW91cyBmdW5jdGlvbnMgaW50ZXJyZWxhdGUgd2l0aGluIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbWFuYWdlbWVudC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjb250ZXh0IG9mIGBkYW1vbl9odWdldGxiX21rb2xkYCBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTA6XHRvdXQ6XG4gMjkxOlx0XHRwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTtcbiAyOTI6XHRcdHJldHVybiAwO1xuIDI5MzpcdH1cbiAyOTQ6XHRcbiAyOTU6XHQjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIDI5NjpcdHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuIDI5NzpcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIDI5ODpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiAyOTk6XHR7XG4gMzAwOlx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLVx1MDAzZXZtYSk7XG4gMzAxOlx0XHRzcGlubG9ja190ICpwdGw7XG4gMzAyOlx0XHRwdGVfdCBlbnRyeTtcbiAzMDM6XHRcbiAzMDQ6XHRcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbiAzMDU6XHRcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuIDMwNjpcdFx0aWYgKCFwdGVfcHJlc2VudChlbnRyeSkpXG4gMzA3Olx0XHRcdGdvdG8gb3V0O1xuIDMwODpcdFxuIDMwOTpcdFx0ZGFtb25faHVnZXRsYl9ta29sZChwdGUsIHdhbGstXHUwMDNlbW0sIHdhbGstXHUwMDNldm1hLCBhZGRyKTtcbiAzMTA6XHRcbiAzMTE6XHRvdXQ6XG4gMzEyOlx0XHRzcGluX3VubG9jayhwdGwpO1xuIDMxMzpcdFx0cmV0dXJuIDA7XG4gMzE0Olx0fVxuIDMxNTpcdCNlbHNlXG4gMzE2Olx0I2RlZmluZSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5IE5VTExcbiAzMTc6XHQjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuIDMxODpcdFxuIDMxOTpcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX21rb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gMzIwOlx0e1xuIDMyMTpcdFx0c3RydWN0IG1tX3dhbGtfb3BzIGRhbW9uX21rb2xkX29wcyA9IHtcbiAzMjI6XHRcdFx0LnBtZF9lbnRyeSA9IGRhbW9uX21rb2xkX3BtZF9lbnRyeSxcbiAzMjM6XHRcdFx0Lmh1Z2V0bGJfZW50cnkgPSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5LFxuIDMyNDpcdFx0fTtcbiAzMjU6XHRcbiAzMjY6XHRcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCBcdTAwMjZkYW1vbl9ta29sZF9vcHMsIE5VTEwpO1xuIDMyNzpcdH1cbiAzMjg6XHRcbiAzMjk6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU5MwoJCQkJCQkJb3V0cHV0OiAyMDgKCQkJCQkJCXRob3VnaHRzOiA5NzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgREFNT04gU3VwcG9ydCBmb3IgSHVnZXRsYiBGb2xpb3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3ZlIGdvdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIChEQU1PTikgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZXh0ZW5kaW5nIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZyB0byBzdXBwb3J0IGh1Z2V0bGIgZm9saW9zLiBUaGlzIG1lYW5zIERBTU9OIGNhbiBub3cgdHJhY2sgYWNjZXNzIHBhdHRlcm5zIHdpdGhpbiBodWdldGxiIHBhZ2VzLCBlc3NlbnRpYWxseSBtYWtpbmcgdGhlICYjMzQ7b2xkL3lvdW5nJiMzNDsgZGV0ZXJtaW5hdGlvbi4gVGhlIGNvcmUgb2YgdGhpcyBpbnZvbHZlcyBwYWdlIHRhYmxlIHdhbGtzIHZpYSBgcm1hcCB3YWxrYCBhbmQgdGhlIHVzZSBvZiBmdW5jdGlvbnMgbGlrZSBgaHVnZV9wdGVwX2dldC9zZXRfaHVnZV9wdGVfYXRgIHRvIHRlc3QgYW5kIHNldCB0aGUgJiMzNDt5b3VuZyYjMzQ7IGFuZCAmIzM0O2lkbGUmIzM0OyBmbGFncy4KCkZpcnN0IG9mZiwgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCBoZXJlLiBEQU1PTiBmdW5jdGlvbmFsaXR5IGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCB3aGV0aGVyIGl0JiMzOTtzIHRocm91Z2ggdGhlIHN5c2ZzIG9yIGRlYnVnZnMgaW50ZXJmYWNlcywgb3IgdGhyb3VnaCBEQU1PTiByZWNsYWltL3N0YXQgbWVjaGFuaXNtcy4gVGhhdCBjcmVhdGVzIGFuIGF2ZW51ZSBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gUGx1cywgdGhlIERBTU9OIGNvZGViYXNlIHJ1bnMgb24gc3RhbmRhcmQgaGFyZHdhcmUvdmlydHVhbCBlbnZpcm9ubWVudHMsIGFuZCBodWdldGxiZnMgaXMgc3VwcG9ydGVkIGluIFFFTVUsIG1ha2luZyBpdCBlYXNpbHkgdGVzdGFibGUuCgpOZXh0LCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgYXJlIGNsZWFyLiBXZSYjMzk7cmUgbG9va2luZyBhdCBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGBDT05GSUdfREFNT05fVkFERFJgLCBgQ09ORklHX0hVR0VUTEJGU2AgKHdoaWNoIGltcGxpZXMgYENPTkZJR19IVUdFVExCX1BBR0VgKSwgYW5kIGBDT05GSUdfREFNT05fU1lTRlNgIGZvciB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24uCgpEaWdnaW5nIGludG8gdGhlIEtjb25maWcgZmlsZXMsIHRoZSBkZXBlbmRlbmNpZXMgbWFrZSBzZW5zZS4gYENPTkZJR19EQU1PTl9QQUREUmAgYW5kIGBDT05GSUdfREFNT05fVkFERFJgIGRlcGVuZCBvbiBgREFNT05gIGFuZCBgTU1VYCwgYW5kIHNlbGVjdCBgUEFHRV9JRExFX0ZMQUdgLiBgQ09ORklHX0RBTU9OX1NZU0ZTYCBkZXBlbmRzIG9uIGBEQU1PTmAgYW5kIGBTWVNGU2AuIGBDT05GSUdfSFVHRVRMQkZTYCBkZXBlbmRzIG9uIGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AsIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgZGVyaXZlZCBmcm9tIGBIVUdFVExCRlNgLgoKTm93LCBmb3IgdGhlIGNyaXRpY2FsIEFQSSBjaGFuZ2VzLiBUaGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMgdGhhdCBoYXZlIGJlZW4gZWl0aGVyIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGludm9sdmVkIGhlcmUgYXJlIGBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpb2AsIGBkYW1vbl9odWdldGxiX21rb2xkYCwgYGRhbW9uX2ZvbGlvX21rb2xkYCwgYGRhbW9uX2ZvbGlvX3lvdW5nYCwgYW5kIGBkYW1vbl9nZXRfZm9saW9gLiBDb25maXJtaW5nIHRoZXNlIGFyZSBhbGwgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMsIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN1cmZhY2UgYXJlYSBvZiB0aGlzIGNoYW5nZS4gVXBvbiByZXZpZXdpbmcgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGFsbCB0aGVzZSBhcmUgaW5kZWVkIG5vbi1zdGF0aWMgZnVuY3Rpb25zLgoKVGhlcmUgYXJlIGFsc28gYSBjb3VwbGUgb2Ygb3RoZXIgc3ltYm9scyB0byBjb25zaWRlciwgc3BlY2lmaWNhbGx5IGBkYW1vbl9wdGVwX21rb2xkYCBhbmQgYGRhbW9uX3BtZHBfbWtvbGRgLCBidXQgdGhlaXIgbG9naWMgaXNuJiMzOTt0IHRoZSBmb2N1cyBoZXJlLCB0aGUgY2hhbmdlcyBhcmUgd2l0aCB0aGUgbGlzdGVkIEFQSSBjYWxscy4KClJlY2FwcGluZyB0aGUgY29uZmlndXJhdGlvbiwgdG8gcmVpdGVyYXRlIGl0OiBgREFNT05gLCBgREFNT05fUEFERFJgLCBgREFNT05fVkFERFJgLCBgREFNT05fU1lTRlNgLCBgSFVHRVRMQkZTYCwgYW5kIGBIVUdFVExCX1BBR0VgIGFyZSB0aGUga2V5IGNvbmZpZ3MgdG8gZXhhbWluZSwgYW5kIHRoZSBjb2RlIGNoYW5nZXMgc2VlbSBjb21wbGV0ZS4KCkFscmlnaHQsIGV2ZXJ5dGhpbmcgaXMgbG9va2luZyBjbGVhbiBhbmQgd2VsbC1kZWZpbmVkLiBUaW1lIHRvIG1ha2UgdGhhdCB0b29sIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fZ2V0X21vbml0b3JfZm9saW8mIzM0OywKICAgICYjMzQ7ZGFtb25faHVnZXRsYl9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9mb2xpb19ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9mb2xpb195b3VuZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9nZXRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBEQU1PTiBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcgdG8gc3VwcG9ydCBodWdldGxiIGZvbGlvcyBieSBpbnRyb2R1Y2luZyBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbygpIGFuZCB1cGRhdGluZyBwYWdlIHRhYmxlIHdhbGsgY2FsbGJhY2tzIChkYW1vbl9mb2xpb19ta29sZCwgZGFtb25fZm9saW9feW91bmcsIGRhbW9uX2h1Z2V0bGJfbWtvbGQpIHRvIGhhbmRsZSBodWdldGxiIHBhZ2VzLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcy9pbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fZ2V0X21vbml0b3JfZm9saW8mIzM0OywKICAgICYjMzQ7ZGFtb25faHVnZXRsYl9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9mb2xpb19ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9mb2xpb195b3VuZyYjMzQ7LAogICAgJiMzNDtkYW1vbl9nZXRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBEQU1PTiBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcgdG8gc3VwcG9ydCBodWdldGxiIGZvbGlvcyBieSBpbnRyb2R1Y2luZyBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbygpIGFuZCB1cGRhdGluZyBwYWdlIHRhYmxlIHdhbGsgY2FsbGJhY2tzIChkYW1vbl9mb2xpb19ta29sZCwgZGFtb25fZm9saW9feW91bmcsIGRhbW9uX2h1Z2V0bGJfbWtvbGQpIHRvIGhhbmRsZSBodWdldGxiIHBhZ2VzLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcy9pbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE1OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgdG8gc3VwcG9ydCBodWdldGxiIGZvbGlvcyBkdXJpbmcgcGh5c2ljYWwgYWRkcmVzcyBhY2Nlc3MgbW9uaXRvcmluZyAocGFkZHIpIGFuZCBwYWdlIHRhYmxlIHdhbGtzLiBJdCByZWZhY3RvcnMgZm9saW8gZmV0Y2hpbmcgYW5kIG1rb2xkL3lvdW5nIGhhbmRsaW5nIHRvIGFjY291bnQgZm9yIGh1Z2V0bGIgZm9saW9zLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCByZXR1cm4gdmFsdWVzIGFyZSBmdWxseSBpbml0aWFsaXplZCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgbGVmdCB1bmluaXRpYWxpemVkIGluIGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMuIEFueSBtZW1vcnkgc2FmZXR5IHJpc2tzIChzdWNoIGFzIGZvbGlvIHJlZmNvdW50aW5nLCBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBwYWdlIHRhYmxlIHdhbGsgaXNzdWVzKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmOTZhMmQxZDc1MGM1ODI1Nzc2OTU5YjczNTExNDZjYjhkOTBhMTZmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxNToxNzo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uYwppbmRleCBmYmRhNzBkOGVhNGQwLi44MDIwN2I1NmM2ZmRhIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICAqIENvbW1vbiBDb2RlIGZvciBEYXRhIEFjY2VzcyBNb25pdG9yaW5nCiAgKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9odWdldGxiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWlncmF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tdV9ub3RpZmllci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VfaWRsZS5oJmd0OwpAQCAtMTQsMTQgJiM0MzsxNSwyMCBAQAogI2luY2x1ZGUgJiMzNDsuLi9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7b3BzLWNvbW1vbi5oJiMzNDsKIAomIzQzO3N0YXRpYyBib29sIGRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb25pdG9yKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSB8fAomIzQzOwkJKG1vbml0b3IgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKTsKJiM0Mzt9CiYjNDM7CiAvKgotICogR2V0IGFuIG9ubGluZSBwYWdlIGZvciBhIHBmbiBpZiBpdCYjMzk7cyBpbiB0aGUgTFJVIGxpc3QuICBPdGhlcndpc2UsIHJldHVybnMKLSAqIE5VTEwuCiYjNDM7ICogR2V0IGFuIG9ubGluZSBwYWdlIGZvciBhIHBmbiBpZiBpdCYjMzk7cyBpbiB0aGUgTFJVIGxpc3QsIG9yIGEgaHVnZXRsYiBmb2xpbyBpZgomIzQzOyAqIEBtb25pdG9yIGlzIHNldC4gIE90aGVyd2lzZSwgcmV0dXJucyBOVUxMLgogICoKICAqIFRoZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24gaXMgc3RvbGVuIGZyb20gdGhlICYjMzk7cGFnZV9pZGxlX2dldF9mb2xpbygpJiMzOTsuICBXZQogICogc3RlYWwgcmF0aGVyIHRoYW4gcmV1c2UgaXQgYmVjYXVzZSB0aGUgY29kZSBpcyBxdWl0ZSBzaW1wbGUuCiAgKi8KLXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3N0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIG1vbml0b3IpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwpAQCAtMzIsMTMgJiM0MzszOSwzMCBAQCBzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbikKIAlmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7CiAJaWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSkKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8ICFmb2xpb190ZXN0X2xydShmb2xpbykpIHsKJiM0MzsJaWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8CiYjNDM7CQkJIWRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoZm9saW8sIG1vbml0b3IpKSB7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWZvbGlvID0gTlVMTDsKIAl9CiAJcmV0dXJuIGZvbGlvOwogfQogCiYjNDM7c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlyZXR1cm4gX19kYW1vbl9nZXRfZm9saW8ocGZuLCBmYWxzZSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2FtZSB0byBkYW1vbl9nZXRfZm9saW8oKSwgYnV0IGFsc28gYWNjZXB0cyBodWdldGxiIGZvbGlvcywgd2hpY2ggYXJlCiYjNDM7ICogbWFuYWdlZCBvdXRzaWRlIG9mIHRoZSBMUlUgbGlzdHMuICBBaW1lZCB0byBiZSB1c2VkIGJ5IGFjY2VzcyBtb25pdG9yaW5nCiYjNDM7ICogcHJpbWl0aXZlcy4gIERBTU9TIGFjdGlvbnMgdGhhdCBhc3N1bWUgTFJVLW1hbmFnZWQgZm9saW9zIHNob3VsZCBrZWVwIHVzaW5nCiYjNDM7ICogZGFtb25fZ2V0X2ZvbGlvKCkuCiYjNDM7ICovCiYjNDM7c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIHRydWUpOwomIzQzO30KJiM0MzsKIHZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXB0ZV90IHB0ZXZhbCA9IHB0ZXBfZ2V0KHB0ZSk7CkBAIC05OCw2ICYjNDM7MTIyLDM1IEBAIHZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyCiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQomIzQzO3ZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlib29sIHJlZmVyZW5jZWQgPSBmYWxzZTsKJiM0MzsJcHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7CiYjNDM7CiYjNDM7CWZvbGlvX2dldChmb2xpbyk7CiYjNDM7CiYjNDM7CWlmIChwdGVfeW91bmcoZW50cnkpKSB7CiYjNDM7CQlyZWZlcmVuY2VkID0gdHJ1ZTsKJiM0MzsJCWVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTsKJiM0MzsJCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsCiYjNDM7CQkJCSAgICAgYWRkciAmIzQzOyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSkKJiM0MzsJCXJlZmVyZW5jZWQgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAocmVmZXJlbmNlZCkKJiM0MzsJCWZvbGlvX3NldF95b3VuZyhmb2xpbyk7CiYjNDM7CiYjNDM7CWZvbGlvX3NldF9pZGxlKGZvbGlvKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCS8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KJiM0MzsKICNkZWZpbmUgREFNT05fTUFYX1NVQlNDT1JFCSgxMDApCiAjZGVmaW5lIERBTU9OX01BWF9BR0VfSU5fTE9HCSgzMikKIApAQCAtMTYzLDEwICYjNDM7MjE2LDE1IEBAIHN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJd2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKCZhbXA7cHZtdykpIHsKIAkJYWRkciA9IHB2bXcuYWRkcmVzczsKLQkJaWYgKHB2bXcucHRlKQotCQkJZGFtb25fcHRlcF9ta29sZChwdm13LnB0ZSwgdm1hLCBhZGRyKTsKLQkJZWxzZQomIzQzOwkJaWYgKHB2bXcucHRlKSB7CiYjNDM7CQkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpCiYjNDM7CQkJCWRhbW9uX2h1Z2V0bGJfbWtvbGQocHZtdy5wdGUsIHZtYS0mZ3Q7dm1fbW0sIHZtYSwKJiM0MzsJCQkJCQlhZGRyKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWRhbW9uX3B0ZXBfbWtvbGQocHZtdy5wdGUsIHZtYSwgYWRkcik7CiYjNDM7CQl9IGVsc2UgewogCQkJZGFtb25fcG1kcF9ta29sZChwdm13LnBtZCwgdm1hLCBhZGRyKTsKJiM0MzsJCX0KIAl9CiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xOTEsMjcgJiM0MzsyNDksNTUgQEAgdm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQomIzQzO3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIChwdGVfcHJlc2VudChlbnRyeSkgJmFtcDsmYW1wOyBwdGVfeW91bmcoZW50cnkpKSB8fAomIzQzOwkJIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHwKJiM0MzsJCW1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHZtYS0mZ3Q7dm1fbW0sIGFkZHIpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgkvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZGFtb25fcHRlX3lvdW5nKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcHRlX3QgZW50cnkgPSBwdGVwX2dldChwdGUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdCBhY3R1YWxseSBtYXAKJiM0MzsJICogcGFnZXMgYXJlICYjMzQ7b2xkJiMzNDsgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4gVGhlIE1NVSBub3RpZmllciB0YWtlcyBjYXJlCiYjNDM7CSAqIG9mIGFueSBkZXZpY2UgYXNwZWN0cy4KJiM0MzsJICovCiYjNDM7CXJldHVybiAocHRlX3ByZXNlbnQoZW50cnkpICZhbXA7JmFtcDsgcHRlX3lvdW5nKGVudHJ5KSkgfHwKJiM0MzsJCSFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8CiYjNDM7CQltbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtJmd0O3ZtX21tLCBhZGRyKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKQogewogCWJvb2wgKmFjY2Vzc2VkID0gYXJnOwogCURFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyLCAwKTsKLQlwdGVfdCBwdGU7CiAKIAkqYWNjZXNzZWQgPSBmYWxzZTsKIAl3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoJmFtcDtwdm13KSkgewogCQlhZGRyID0gcHZtdy5hZGRyZXNzOwogCQlpZiAocHZtdy5wdGUpIHsKLQkJCXB0ZSA9IHB0ZXBfZ2V0KHB2bXcucHRlKTsKLQotCQkJLyoKLQkJCSAqIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0Ci0JCQkgKiBhY3R1YWxseSBtYXAgcGFnZXMgYXJlICYjMzQ7b2xkJiMzNDsgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4KLQkJCSAqIFRoZSBNTVUgbm90aWZpZXIgdGFrZXMgY2FyZSBvZiBhbnkgZGV2aWNlIGFzcGVjdHMuCi0JCQkgKi8KLQkJCSphY2Nlc3NlZCA9IChwdGVfcHJlc2VudChwdGUpICZhbXA7JmFtcDsgcHRlX3lvdW5nKHB0ZSkpIHx8Ci0JCQkJIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHwKLQkJCQltbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtJmd0O3ZtX21tLCBhZGRyKTsKJiM0MzsJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKJiM0MzsJCQkJKmFjY2Vzc2VkID0gZGFtb25faHVnZXRsYl95b3VuZyhwdm13LnB0ZSwgdm1hLAomIzQzOwkJCQkJCWFkZHIsIGZvbGlvKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCSphY2Nlc3NlZCA9IGRhbW9uX3B0ZV95b3VuZyhwdm13LnB0ZSwgdm1hLAomIzQzOwkJCQkJCWFkZHIsIGZvbGlvKTsKIAkJfSBlbHNlIHsKICNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKIAkJCXBtZF90IHBtZCA9IHBtZHBfZ2V0KHB2bXcucG1kKTsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaAppbmRleCAzOGQyOTU0ODhmYTE4Li4xNzJmMGYxN2M0YTg0IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oCkBAIC02LDkgJiM0Mzs2LDE5IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZGFtb24uaCZndDsKIAogc3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pOwomIzQzO3N0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X21vbml0b3JfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pOwogCiB2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7CiB2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7CiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKJiM0Mzt2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKJiM0Mzt7CiYjNDM7fQomIzQzOyNlbmRpZgkvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCiB2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogYm9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmMKaW5kZXggNWM2YzNhNTk3ZmQwYi4uZWQ3YjdmMzEyOTFhMCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vcGFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jCkBAIC0zNyw3ICYjNDM7MzcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9jb3JlX2FkZHIoCiAKIHN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKQogewotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGFkZHIpKTsKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7CiAKIAlpZiAoIWZvbGlvKQogCQlyZXR1cm47CkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVja3Moc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCiBzdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkcikKIHsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyhQSFlTX1BGTihwYWRkcikpOwogCWJvb2wgYWNjZXNzZWQ7CiAKIAlpZiAoIWZvbGlvKQpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmMKaW5kZXggMDY0ODQwMGIyZDY1Yi4uMTUzNzlkOTg0Njg5ZSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdmFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jCkBAIC0yOTMsMzMgJiM0MzsyOTMsNiBAQCBzdGF0aWMgaW50IGRhbW9uX21rb2xkX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiB9CiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi1zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JYm9vbCByZWZlcmVuY2VkID0gZmFsc2U7Ci0JcHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyLCBwdGUpOwotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpOwotCXVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwotCi0JZm9saW9fZ2V0KGZvbGlvKTsKLQotCWlmIChwdGVfeW91bmcoZW50cnkpKSB7Ci0JCXJlZmVyZW5jZWQgPSB0cnVlOwotCQllbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7Ci0JCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpOwotCX0KLQotCWlmIChtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcobW0sIGFkZHIsCi0JCQkJICAgICBhZGRyICYjNDM7IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKQotCQlyZWZlcmVuY2VkID0gdHJ1ZTsKLQotCWlmIChyZWZlcmVuY2VkKQotCQlmb2xpb19zZXRfeW91bmcoZm9saW8pOwotCi0JZm9saW9fc2V0X2lkbGUoZm9saW8pOwotCWZvbGlvX3B1dChmb2xpbyk7Ci19Ci0KIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCQkgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI4NQoJCQkJCQkJb3V0cHV0OiAxNTgKCQkJCQkJCXRob3VnaHRzOiAxMDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50IGZvciBEQU1PTiBIdWdldGxiIEZvbGlvIFN1cHBvcnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGlzIHBhdGNoIHRvdWNoZXMgdGhlIERBTU9OIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0cyBkZWFsaW5nIHdpdGggZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy4gSSBzZWUgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlcywgZm9jdXNpbmcgb24gYWRkaW5nIHN1cHBvcnQgZm9yIGh1Z2V0bGIgZm9saW9zIHdpdGhpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nIGFzcGVjdCBvZiBEQU1PTi4KClRoZSBwYXRjaCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgaG93IERBTU9OIGludGVyYWN0cyB3aXRoIGh1Z2V0bGIgcGFnZXM6IEl0IGludHJvZHVjZXMgYSBgZGFtb25fZm9saW9fYWNjZXB0YWJsZWAgZnVuY3Rpb24gdGhhdCBub3cgY29uc2lkZXJzIGh1Z2V0bGIgZm9saW9zLCBtb2RpZmllcyBgX19kYW1vbl9nZXRfZm9saW9gIHRvIHVzZSB0aGUgYWNjZXB0YWJpbGl0eSBmdW5jdGlvbiwgYW5kIHJlZmFjdG9ycyBgZGFtb25faHVnZXRsYl9ta29sZGAgdG8gYmUgc2hhcmVkLiBJdCBhbHNvIG1ha2VzIGNvcnJlc3BvbmRpbmcgYWRqdXN0bWVudHMgdG8gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMuCgpOb3csIGxldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuCgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZSwgSSBkb24mIzM5O3Qgc2VlIGFueSBuZXcgc3RydWN0dXJlcyBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIG9uZXMgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBmaWVsZHMuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBObywgdGhlIGNvZGUmIzM5O3MgbG9naWMgaXMgc291bmQuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8uIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkuCjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGlzc3VlcyB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8qKiBOb3QgaW4gdGhpcyBwYXRjaC4KCkkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGUgY29kZSwgcGFydGljdWxhcmx5IGBkYW1vbl9odWdldGxiX21rb2xkYCBhbmQgYGRhbW9uX2ZvbGlvX3lvdW5nX29uZWAsIHdoaWNoIGxvb2sgbGlrZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBjYW5kaWRhdGVzLCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIHdheXMgdGhhdCBjb3VsZCBjYXVzZSBhIHByb2JsZW0uIFZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCgpSZWdhcmRpbmcgbWVtb3J5IHNhZmV0eSwgdGhlIHJpc2tzIGhlcmUgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSYjMzk7cmUgZGVhbGluZyB3aXRoIGZvbGlvIHJlZmNvdW50aW5nLCBwYWdlIHRhYmxlIHdhbGtzLCBhbmQgaHVnZXRsYiBwYWdlIGhhbmRsaW5nOiByZWZjb3VudGluZyBidWdzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBsb2NraW5nIGlzc3VlcywgYW5kIGdlbmVyYWwgTU0vcGFnaW5nIGJ1Z3MuIEhvd2V2ZXIsIEtBU0FOIGFuZCBMT0NLREVQIGFyZSB0aGUgYXBwcm9wcmlhdGUgdG9vbHMgdG8gZGV0ZWN0IHRob3NlLiBUaGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgKipOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZSoqLiBLQVNBTiwgd2l0aCB0aGUgYWRkZWQgYmVuZWZpdCBvZiBMT0NLREVQLCB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMgaGVyZS4gV2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBhbnl0aGluZyB0aGF0IGZhbGxzIGludG8gS01TQU4mIzM5O3MgZG9tYWluLiBTbywgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIG1ha2UgdGhhdCBjYWxsLiBJIHdpbGwgc2V0IHRoZSByZXN1bHRzIHRvIGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSB0byBzdXBwb3J0IGh1Z2V0bGIgZm9saW9zIGR1cmluZyBwaHlzaWNhbCBhZGRyZXNzIGFjY2VzcyBtb25pdG9yaW5nIChwYWRkcikgYW5kIHBhZ2UgdGFibGUgd2Fsa3MuIEl0IHJlZmFjdG9ycyBmb2xpbyBmZXRjaGluZyBhbmQgbWtvbGQveW91bmcgaGFuZGxpbmcgdG8gYWNjb3VudCBmb3IgaHVnZXRsYiBmb2xpb3MuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHJldHVybiB2YWx1ZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQgaW4gaGVhcC9zdGFjayBhbGxvY2F0aW9ucy4gQW55IG1lbW9yeSBzYWZldHkgcmlza3MgKHN1Y2ggYXMgZm9saW8gcmVmY291bnRpbmcsIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHBhZ2UgdGFibGUgd2FsayBpc3N1ZXMpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSB0byBzdXBwb3J0IGh1Z2V0bGIgZm9saW9zIGR1cmluZyBwaHlzaWNhbCBhZGRyZXNzIGFjY2VzcyBtb25pdG9yaW5nIChwYWRkcikgYW5kIHBhZ2UgdGFibGUgd2Fsa3MuIEl0IHJlZmFjdG9ycyBmb2xpbyBmZXRjaGluZyBhbmQgbWtvbGQveW91bmcgaGFuZGxpbmcgdG8gYWNjb3VudCBmb3IgaHVnZXRsYiBmb2xpb3MuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHJldHVybiB2YWx1ZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQgaW4gaGVhcC9zdGFjayBhbGxvY2F0aW9ucy4gQW55IG1lbW9yeSBzYWZldHkgcmlza3MgKHN1Y2ggYXMgZm9saW8gcmVmY291bnRpbmcsIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHBhZ2UgdGFibGUgd2FsayBpc3N1ZXMpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE1OjE3OjQzLjM4NjQxNTgwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODEwNDkwNzIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJIVUdFVExCX1BBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9nZXRfbW9uaXRvcl9mb2xpb1wiLFxuICAgIFwiZGFtb25faHVnZXRsYl9ta29sZFwiLFxuICAgIFwiZGFtb25fZm9saW9fbWtvbGRcIixcbiAgICBcImRhbW9uX2ZvbGlvX3lvdW5nXCIsXG4gICAgXCJkYW1vbl9nZXRfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4dGVuZHMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHRvIHN1cHBvcnQgaHVnZXRsYiBmb2xpb3MgZHVyaW5nIHBoeXNpY2FsIGFkZHJlc3MgYWNjZXNzIG1vbml0b3JpbmcgKHBhZGRyKSBhbmQgcGFnZSB0YWJsZSB3YWxrcy4gSXQgcmVmYWN0b3JzIGZvbGlvIGZldGNoaW5nIGFuZCBta29sZC95b3VuZyBoYW5kbGluZyB0byBhY2NvdW50IGZvciBodWdldGxiIGZvbGlvcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgcmV0dXJuIHZhbHVlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGxlZnQgdW5pbml0aWFsaXplZCBpbiBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLiBBbnkgbWVtb3J5IHNhZmV0eSByaXNrcyAoc3VjaCBhcyBmb2xpbyByZWZjb3VudGluZywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgcGFnZSB0YWJsZSB3YWxrIGlzc3VlcykgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRlbmRzIERBTU9OIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZyB0byBzdXBwb3J0IGh1Z2V0bGIgZm9saW9zIGJ5IGludHJvZHVjaW5nIGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIHBhZ2UgdGFibGUgd2FsayBjYWxsYmFja3MgKGRhbW9uX2ZvbGlvX21rb2xkLCBkYW1vbl9mb2xpb195b3VuZywgZGFtb25faHVnZXRsYl9ta29sZCkgdG8gaGFuZGxlIGh1Z2V0bGIgcGFnZXMuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzL2ludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE1OjE3OjQzLjM4NjQyMDk3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMzI2ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjk2YTJkMWQ3NTBjNTgyNTc3Njk1OWI3MzUxMTQ2Y2I4ZDkwYTE2ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDE1OjE3OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xcbmluZGV4IGZiZGE3MGQ4ZWE0ZDAuLjgwMjA3YjU2YzZmZGEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuQEAgLTMsNiArMyw3IEBAXFxuICAqIENvbW1vbiBDb2RlIGZvciBEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxuICAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pZ3JhdGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tdV9ub3RpZmllci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV9pZGxlLmhcXHUwMDNlXFxuQEAgLTE0LDE0ICsxNSwyMCBAQFxcbiAjaW5jbHVkZSBcXFwiLi4vaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm9wcy1jb21tb24uaFxcXCJcXG4gXFxuK3N0YXRpYyBib29sIGRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb25pdG9yKVxcbit7XFxuK1xcdHJldHVybiBmb2xpb190ZXN0X2xydShmb2xpbykgfHxcXG4rXFx0XFx0KG1vbml0b3IgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSk7XFxuK31cXG4rXFxuIC8qXFxuLSAqIEdldCBhbiBvbmxpbmUgcGFnZSBmb3IgYSBwZm4gaWYgaXQncyBpbiB0aGUgTFJVIGxpc3QuICBPdGhlcndpc2UsIHJldHVybnNcXG4tICogTlVMTC5cXG4rICogR2V0IGFuIG9ubGluZSBwYWdlIGZvciBhIHBmbiBpZiBpdCdzIGluIHRoZSBMUlUgbGlzdCwgb3IgYSBodWdldGxiIGZvbGlvIGlmXFxuKyAqIEBtb25pdG9yIGlzIHNldC4gIE90aGVyd2lzZSwgcmV0dXJucyBOVUxMLlxcbiAgKlxcbiAgKiBUaGUgYm9keSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHN0b2xlbiBmcm9tIHRoZSAncGFnZV9pZGxlX2dldF9mb2xpbygpJy4gIFdlXFxuICAqIHN0ZWFsIHJhdGhlciB0aGFuIHJldXNlIGl0IGJlY2F1c2UgdGhlIGNvZGUgaXMgcXVpdGUgc2ltcGxlLlxcbiAgKi9cXG4tc3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXFxuK3N0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIG1vbml0b3IpXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG5AQCAtMzIsMTMgKzM5LDMwIEBAIHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuIFxcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHRpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSkge1xcbitcXHRpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHxcXG4rXFx0XFx0XFx0IWRhbW9uX2ZvbGlvX2FjY2VwdGFibGUoZm9saW8sIG1vbml0b3IpKSB7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdGZvbGlvID0gTlVMTDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gZm9saW87XFxuIH1cXG4gXFxuK3N0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIGZhbHNlKTtcXG4rfVxcbitcXG4rLypcXG4rICogU2FtZSB0byBkYW1vbl9nZXRfZm9saW8oKSwgYnV0IGFsc28gYWNjZXB0cyBodWdldGxiIGZvbGlvcywgd2hpY2ggYXJlXFxuKyAqIG1hbmFnZWQgb3V0c2lkZSBvZiB0aGUgTFJVIGxpc3RzLiAgQWltZWQgdG8gYmUgdXNlZCBieSBhY2Nlc3MgbW9uaXRvcmluZ1xcbisgKiBwcmltaXRpdmVzLiAgREFNT1MgYWN0aW9ucyB0aGF0IGFzc3VtZSBMUlUtbWFuYWdlZCBmb2xpb3Mgc2hvdWxkIGtlZXAgdXNpbmdcXG4rICogZGFtb25fZ2V0X2ZvbGlvKCkuXFxuKyAqL1xcbitzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIHRydWUpO1xcbit9XFxuK1xcbiB2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4ge1xcbiBcXHRwdGVfdCBwdGV2YWwgPSBwdGVwX2dldChwdGUpO1xcbkBAIC05OCw2ICsxMjIsMzUgQEAgdm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJcXG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbit2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuK3tcXG4rXFx0Ym9vbCByZWZlcmVuY2VkID0gZmFsc2U7XFxuK1xcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xcbitcXG4rXFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4rXFxuK1xcdGlmIChwdGVfeW91bmcoZW50cnkpKSB7XFxuK1xcdFxcdHJlZmVyZW5jZWQgPSB0cnVlO1xcbitcXHRcXHRlbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7XFxuK1xcdFxcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxcbitcXHRcXHRcXHRcXHQgICAgIGFkZHIgKyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpKSlcXG4rXFx0XFx0cmVmZXJlbmNlZCA9IHRydWU7XFxuK1xcbitcXHRpZiAocmVmZXJlbmNlZClcXG4rXFx0XFx0Zm9saW9fc2V0X3lvdW5nKGZvbGlvKTtcXG4rXFxuK1xcdGZvbGlvX3NldF9pZGxlKGZvbGlvKTtcXG4rXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rfVxcbisjZW5kaWZcXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuK1xcbiAjZGVmaW5lIERBTU9OX01BWF9TVUJTQ09SRVxcdCgxMDApXFxuICNkZWZpbmUgREFNT05fTUFYX0FHRV9JTl9MT0dcXHQoMzIpXFxuIFxcbkBAIC0xNjMsMTAgKzIxNiwxNSBAQCBzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19ta29sZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFxuIFxcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpIHtcXG4gXFx0XFx0YWRkciA9IHB2bXcuYWRkcmVzcztcXG4tXFx0XFx0aWYgKHB2bXcucHRlKVxcbi1cXHRcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xcbi1cXHRcXHRlbHNlXFxuK1xcdFxcdGlmIChwdm13LnB0ZSkge1xcbitcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4rXFx0XFx0XFx0XFx0ZGFtb25faHVnZXRsYl9ta29sZChwdm13LnB0ZSwgdm1hLVxcdTAwM2V2bV9tbSwgdm1hLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRhZGRyKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRkYW1vbl9wbWRwX21rb2xkKHB2bXcucG1kLCB2bWEsIGFkZHIpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG5AQCAtMTkxLDI3ICsyNDksNTUgQEAgdm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4rc3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl95b3VuZyhwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUpO1xcbitcXG4rXFx0cmV0dXJuIChwdGVfcHJlc2VudChlbnRyeSkgXFx1MDAyNlxcdTAwMjYgcHRlX3lvdW5nKGVudHJ5KSkgfHxcXG4rXFx0XFx0IWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHxcXG4rXFx0XFx0bW11X25vdGlmaWVyX3Rlc3RfeW91bmcodm1hLVxcdTAwM2V2bV9tbSwgYWRkcik7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl95b3VuZyhwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuK1xcbitzdGF0aWMgYm9vbCBkYW1vbl9wdGVfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRwdGVfdCBlbnRyeSA9IHB0ZXBfZ2V0KHB0ZSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdCBhY3R1YWxseSBtYXBcXG4rXFx0ICogcGFnZXMgYXJlIFxcXCJvbGRcXFwiIGZyb20gYSBDUFUgcGVyc3BlY3RpdmUuIFRoZSBNTVUgbm90aWZpZXIgdGFrZXMgY2FyZVxcbitcXHQgKiBvZiBhbnkgZGV2aWNlIGFzcGVjdHMuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gKHB0ZV9wcmVzZW50KGVudHJ5KSBcXHUwMDI2XFx1MDAyNiBwdGVfeW91bmcoZW50cnkpKSB8fFxcbitcXHRcXHQhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxcbitcXHRcXHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtXFx1MDAzZXZtX21tLCBhZGRyKTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgZGFtb25fZm9saW9feW91bmdfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmFyZylcXG4ge1xcbiBcXHRib29sICphY2Nlc3NlZCA9IGFyZztcXG4gXFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHIsIDApO1xcbi1cXHRwdGVfdCBwdGU7XFxuIFxcbiBcXHQqYWNjZXNzZWQgPSBmYWxzZTtcXG4gXFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbiBcXHRcXHRhZGRyID0gcHZtdy5hZGRyZXNzO1xcbiBcXHRcXHRpZiAocHZtdy5wdGUpIHtcXG4tXFx0XFx0XFx0cHRlID0gcHRlcF9nZXQocHZtdy5wdGUpO1xcbi1cXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsIHRoYXRcXG4tXFx0XFx0XFx0ICogYWN0dWFsbHkgbWFwIHBhZ2VzIGFyZSBcXFwib2xkXFxcIiBmcm9tIGEgQ1BVIHBlcnNwZWN0aXZlLlxcbi1cXHRcXHRcXHQgKiBUaGUgTU1VIG5vdGlmaWVyIHRha2VzIGNhcmUgb2YgYW55IGRldmljZSBhc3BlY3RzLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0KmFjY2Vzc2VkID0gKHB0ZV9wcmVzZW50KHB0ZSkgXFx1MDAyNlxcdTAwMjYgcHRlX3lvdW5nKHB0ZSkpIHx8XFxuLVxcdFxcdFxcdFxcdCFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XFxuLVxcdFxcdFxcdFxcdG1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIpO1xcbitcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4rXFx0XFx0XFx0XFx0KmFjY2Vzc2VkID0gZGFtb25faHVnZXRsYl95b3VuZyhwdm13LnB0ZSwgdm1hLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRhZGRyLCBmb2xpbyk7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0KmFjY2Vzc2VkID0gZGFtb25fcHRlX3lvdW5nKHB2bXcucHRlLCB2bWEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGFkZHIsIGZvbGlvKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiBcXHRcXHRcXHRwbWRfdCBwbWQgPSBwbWRwX2dldChwdm13LnBtZCk7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaFxcbmluZGV4IDM4ZDI5NTQ4OGZhMTguLjE3MmYwZjE3YzRhODQgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oXFxuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXFxuQEAgLTYsOSArNiwxOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGFtb24uaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKTtcXG4rc3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XFxuIFxcbiB2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxuIHZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4rdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbitcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuK3tcXG4rfVxcbisjZW5kaWZcXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuIHZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIGJvb2wgZGFtb25fZm9saW9feW91bmcoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xcbmluZGV4IDVjNmMzYTU5N2ZkMGIuLmVkN2I3ZjMxMjkxYTAgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcXG5AQCAtMzcsNyArMzcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9jb3JlX2FkZHIoXFxuIFxcbiBzdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcXG4ge1xcbi1cXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyhQSFlTX1BGTihwYWRkcikpO1xcbiBcXG4gXFx0aWYgKCFmb2xpbylcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcbiBzdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkcilcXG4ge1xcbi1cXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyhQSFlTX1BGTihwYWRkcikpO1xcbiBcXHRib29sIGFjY2Vzc2VkO1xcbiBcXG4gXFx0aWYgKCFmb2xpbylcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5pbmRleCAwNjQ4NDAwYjJkNjViLi4xNTM3OWQ5ODQ2ODllIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXFxuQEAgLTI5MywzMyArMjkzLDYgQEAgc3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbi1zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi17XFxuLVxcdGJvb2wgcmVmZXJlbmNlZCA9IGZhbHNlO1xcbi1cXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XFxuLVxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xcbi1cXHR1bnNpZ25lZCBsb25nIHBzaXplID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcXG4tXFxuLVxcdGZvbGlvX2dldChmb2xpbyk7XFxuLVxcbi1cXHRpZiAocHRlX3lvdW5nKGVudHJ5KSkge1xcbi1cXHRcXHRyZWZlcmVuY2VkID0gdHJ1ZTtcXG4tXFx0XFx0ZW50cnkgPSBwdGVfbWtvbGQoZW50cnkpO1xcbi1cXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgZW50cnksIHBzaXplKTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkcixcXG4tXFx0XFx0XFx0XFx0ICAgICBhZGRyICsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpXFxuLVxcdFxcdHJlZmVyZW5jZWQgPSB0cnVlO1xcbi1cXG4tXFx0aWYgKHJlZmVyZW5jZWQpXFxuLVxcdFxcdGZvbGlvX3NldF95b3VuZyhmb2xpbyk7XFxuLVxcbi1cXHRmb2xpb19zZXRfaWRsZShmb2xpbyk7XFxuLVxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbiBcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE1OjE3OjQzLjg0ODMyOTc4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODk4ODkzNDcxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fZ2V0X21vbml0b3JfZm9saW9cIixcbiAgICBcImRhbW9uX2h1Z2V0bGJfbWtvbGRcIixcbiAgICBcImRhbW9uX2ZvbGlvX21rb2xkXCIsXG4gICAgXCJkYW1vbl9mb2xpb195b3VuZ1wiLFxuICAgIFwiZGFtb25fZ2V0X2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyBEQU1PTiBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcgdG8gc3VwcG9ydCBodWdldGxiIGZvbGlvcyBieSBpbnRyb2R1Y2luZyBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbygpIGFuZCB1cGRhdGluZyBwYWdlIHRhYmxlIHdhbGsgY2FsbGJhY2tzIChkYW1vbl9mb2xpb19ta29sZCwgZGFtb25fZm9saW9feW91bmcsIGRhbW9uX2h1Z2V0bGJfbWtvbGQpIHRvIGhhbmRsZSBodWdldGxiIHBhZ2VzLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcy9pbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOTZhMmQxZDc1MGM1ODI1Nzc2OTU5YjczNTExNDZjYjhkOTBhMTZmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNToxNzo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggZmJkYTcwZDhlYTRkMC4uODAyMDdiNTZjNmZkYSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5AQCAtMyw2ICszLDcgQEBcbiAgKiBDb21tb24gQ29kZSBmb3IgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xuICAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pZ3JhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tdV9ub3RpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9pZGxlLmhcdTAwM2VcbkBAIC0xNCwxNCArMTUsMjAgQEBcbiAjaW5jbHVkZSBcIi4uL2ludGVybmFsLmhcIlxuICNpbmNsdWRlIFwib3BzLWNvbW1vbi5oXCJcbiBcbitzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19hY2NlcHRhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW9uaXRvcilcbit7XG4rXHRyZXR1cm4gZm9saW9fdGVzdF9scnUoZm9saW8pIHx8XG4rXHRcdChtb25pdG9yIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKTtcbit9XG4rXG4gLypcbi0gKiBHZXQgYW4gb25saW5lIHBhZ2UgZm9yIGEgcGZuIGlmIGl0J3MgaW4gdGhlIExSVSBsaXN0LiAgT3RoZXJ3aXNlLCByZXR1cm5zXG4tICogTlVMTC5cbisgKiBHZXQgYW4gb25saW5lIHBhZ2UgZm9yIGEgcGZuIGlmIGl0J3MgaW4gdGhlIExSVSBsaXN0LCBvciBhIGh1Z2V0bGIgZm9saW8gaWZcbisgKiBAbW9uaXRvciBpcyBzZXQuICBPdGhlcndpc2UsIHJldHVybnMgTlVMTC5cbiAgKlxuICAqIFRoZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24gaXMgc3RvbGVuIGZyb20gdGhlICdwYWdlX2lkbGVfZ2V0X2ZvbGlvKCknLiAgV2VcbiAgKiBzdGVhbCByYXRoZXIgdGhhbiByZXVzZSBpdCBiZWNhdXNlIHRoZSBjb2RlIGlzIHF1aXRlIHNpbXBsZS5cbiAgKi9cbi1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbitzdGF0aWMgc3RydWN0IGZvbGlvICpfX2RhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBtb25pdG9yKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuQEAgLTMyLDEzICszOSwzMCBAQCBzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbiBcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiBcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8ICFmb2xpb190ZXN0X2xydShmb2xpbykpIHtcbitcdGlmICh1bmxpa2VseShwYWdlX2ZvbGlvKHBhZ2UpICE9IGZvbGlvKSB8fFxuK1x0XHRcdCFkYW1vbl9mb2xpb19hY2NlcHRhYmxlKGZvbGlvLCBtb25pdG9yKSkge1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRmb2xpbyA9IE5VTEw7XG4gXHR9XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuK3N0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIGZhbHNlKTtcbit9XG4rXG4rLypcbisgKiBTYW1lIHRvIGRhbW9uX2dldF9mb2xpbygpLCBidXQgYWxzbyBhY2NlcHRzIGh1Z2V0bGIgZm9saW9zLCB3aGljaCBhcmVcbisgKiBtYW5hZ2VkIG91dHNpZGUgb2YgdGhlIExSVSBsaXN0cy4gIEFpbWVkIHRvIGJlIHVzZWQgYnkgYWNjZXNzIG1vbml0b3JpbmdcbisgKiBwcmltaXRpdmVzLiAgREFNT1MgYWN0aW9ucyB0aGF0IGFzc3VtZSBMUlUtbWFuYWdlZCBmb2xpb3Mgc2hvdWxkIGtlZXAgdXNpbmdcbisgKiBkYW1vbl9nZXRfZm9saW8oKS5cbisgKi9cbitzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIHRydWUpO1xuK31cbitcbiB2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwdGVfdCBwdGV2YWwgPSBwdGVwX2dldChwdGUpO1xuQEAgLTk4LDYgKzEyMiwzNSBAQCB2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkclxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiB9XG4gXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbit2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0Ym9vbCByZWZlcmVuY2VkID0gZmFsc2U7XG4rXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcbitcdHVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuK1xuK1x0Zm9saW9fZ2V0KGZvbGlvKTtcbitcbitcdGlmIChwdGVfeW91bmcoZW50cnkpKSB7XG4rXHRcdHJlZmVyZW5jZWQgPSB0cnVlO1xuK1x0XHRlbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7XG4rXHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpO1xuK1x0fVxuK1xuK1x0aWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkcixcbitcdFx0XHRcdCAgICAgYWRkciArIGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKVxuK1x0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbitcbitcdGlmIChyZWZlcmVuY2VkKVxuK1x0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuK1xuK1x0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xuK1x0Zm9saW9fcHV0KGZvbGlvKTtcbit9XG4rI2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4rXG4gI2RlZmluZSBEQU1PTl9NQVhfU1VCU0NPUkVcdCgxMDApXG4gI2RlZmluZSBEQU1PTl9NQVhfQUdFX0lOX0xPR1x0KDMyKVxuIFxuQEAgLTE2MywxMCArMjE2LDE1IEBAIHN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG4gXHRcdGFkZHIgPSBwdm13LmFkZHJlc3M7XG4tXHRcdGlmIChwdm13LnB0ZSlcbi1cdFx0XHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xuLVx0XHRlbHNlXG4rXHRcdGlmIChwdm13LnB0ZSkge1xuK1x0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuK1x0XHRcdFx0ZGFtb25faHVnZXRsYl9ta29sZChwdm13LnB0ZSwgdm1hLVx1MDAzZXZtX21tLCB2bWEsXG4rXHRcdFx0XHRcdFx0YWRkcik7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0ZGFtb25fcHRlcF9ta29sZChwdm13LnB0ZSwgdm1hLCBhZGRyKTtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRkYW1vbl9wbWRwX21rb2xkKHB2bXcucG1kLCB2bWEsIGFkZHIpO1xuK1x0XHR9XG4gXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTkxLDI3ICsyNDksNTUgQEAgdm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIH1cbiBcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuK3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUpO1xuK1xuK1x0cmV0dXJuIChwdGVfcHJlc2VudChlbnRyeSkgXHUwMDI2XHUwMDI2IHB0ZV95b3VuZyhlbnRyeSkpIHx8XG4rXHRcdCFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XG4rXHRcdG1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHZtYS1cdTAwM2V2bV9tbSwgYWRkcik7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl95b3VuZyhwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rI2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4rXG4rc3RhdGljIGJvb2wgZGFtb25fcHRlX3lvdW5nKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cHRlX3QgZW50cnkgPSBwdGVwX2dldChwdGUpO1xuK1xuK1x0LypcbitcdCAqIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0IGFjdHVhbGx5IG1hcFxuK1x0ICogcGFnZXMgYXJlIFwib2xkXCIgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4gVGhlIE1NVSBub3RpZmllciB0YWtlcyBjYXJlXG4rXHQgKiBvZiBhbnkgZGV2aWNlIGFzcGVjdHMuXG4rXHQgKi9cbitcdHJldHVybiAocHRlX3ByZXNlbnQoZW50cnkpIFx1MDAyNlx1MDAyNiBwdGVfeW91bmcoZW50cnkpKSB8fFxuK1x0XHQhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuK1x0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtXHUwMDNldm1fbW0sIGFkZHIpO1xuK31cbitcbiBzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKVxuIHtcbiBcdGJvb2wgKmFjY2Vzc2VkID0gYXJnO1xuIFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHIsIDApO1xuLVx0cHRlX3QgcHRlO1xuIFxuIFx0KmFjY2Vzc2VkID0gZmFsc2U7XG4gXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbiBcdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbiBcdFx0aWYgKHB2bXcucHRlKSB7XG4tXHRcdFx0cHRlID0gcHRlcF9nZXQocHZtdy5wdGUpO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsIHRoYXRcbi1cdFx0XHQgKiBhY3R1YWxseSBtYXAgcGFnZXMgYXJlIFwib2xkXCIgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS5cbi1cdFx0XHQgKiBUaGUgTU1VIG5vdGlmaWVyIHRha2VzIGNhcmUgb2YgYW55IGRldmljZSBhc3BlY3RzLlxuLVx0XHRcdCAqL1xuLVx0XHRcdCphY2Nlc3NlZCA9IChwdGVfcHJlc2VudChwdGUpIFx1MDAyNlx1MDAyNiBwdGVfeW91bmcocHRlKSkgfHxcbi1cdFx0XHRcdCFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XG4tXHRcdFx0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtXHUwMDNldm1fbW0sIGFkZHIpO1xuK1x0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuK1x0XHRcdFx0KmFjY2Vzc2VkID0gZGFtb25faHVnZXRsYl95b3VuZyhwdm13LnB0ZSwgdm1hLFxuK1x0XHRcdFx0XHRcdGFkZHIsIGZvbGlvKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHQqYWNjZXNzZWQgPSBkYW1vbl9wdGVfeW91bmcocHZtdy5wdGUsIHZtYSxcbitcdFx0XHRcdFx0XHRhZGRyLCBmb2xpbyk7XG4gXHRcdH0gZWxzZSB7XG4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0XHRcdHBtZF90IHBtZCA9IHBtZHBfZ2V0KHB2bXcucG1kKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmggYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbmluZGV4IDM4ZDI5NTQ4OGZhMTguLjE3MmYwZjE3YzRhODQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uaFxuQEAgLTYsOSArNiwxOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RhbW9uLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XG4rc3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XG4gXG4gdm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xuIHZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuK3ZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rfVxuKyNlbmRpZlx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuIHZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggNWM2YzNhNTk3ZmQwYi4uZWQ3YjdmMzEyOTFhMCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0zNyw3ICszNyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2NvcmVfYWRkcihcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcbiB7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X21vbml0b3JfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcbiBcbiBcdGlmICghZm9saW8pXG4gXHRcdHJldHVybjtcbkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXG4gc3RhdGljIGJvb2wgZGFtb25fcGFfeW91bmcocGh5c19hZGRyX3QgcGFkZHIpXG4ge1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihwYWRkcikpO1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XG4gXHRib29sIGFjY2Vzc2VkO1xuIFxuIFx0aWYgKCFmb2xpbylcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggMDY0ODQwMGIyZDY1Yi4uMTUzNzlkOTg0Njg5ZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC0yOTMsMzMgKzI5Myw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbi1zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi17XG4tXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbi1cdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuLVx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4tXG4tXHRmb2xpb19nZXQoZm9saW8pO1xuLVxuLVx0aWYgKHB0ZV95b3VuZyhlbnRyeSkpIHtcbi1cdFx0cmVmZXJlbmNlZCA9IHRydWU7XG4tXHRcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcbi1cdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7XG4tXHR9XG4tXG4tXHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxuLVx0XHRcdFx0ICAgICBhZGRyICsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpXG4tXHRcdHJlZmVyZW5jZWQgPSB0cnVlO1xuLVxuLVx0aWYgKHJlZmVyZW5jZWQpXG4tXHRcdGZvbGlvX3NldF95b3VuZyhmb2xpbyk7XG4tXG4tXHRmb2xpb19zZXRfaWRsZShmb2xpbyk7XG4tXHRmb2xpb19wdXQoZm9saW8pO1xuLX1cbi1cbiBzdGF0aWMgaW50IGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxNzo0My44NDgzMzEyMDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODQ2ODQxODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGFkZGl0aW9uIGlzIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydCwgYW5kIGlmIHNvLCBob3cgdG8gYmVzdCBhcHByb2FjaCBpdC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy5cblxuU28sIHRoZSBwYXRjaCB0b3VjaGVzIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCBgbW0vZGFtb24vb3BzLWNvbW1vbi5oYCwgYG1tL2RhbW9uL3BhZGRyLmNgLCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBJdCBsb29rcyBsaWtlIGl0J3MgYWxsIGFib3V0IGludGVncmF0aW5nIGh1Z2V0bGIgZm9saW8gc3VwcG9ydCBpbnRvIERBTU9OJ3MgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nLiBJbnRlcmVzdGluZy5cblxuU3BlY2lmaWNhbGx5OlxuXG4qICAgSXQgYWRkcyB0aGUgYWJpbGl0eSB0byBtb25pdG9yIGh1Z2V0bGIgZm9saW9zIHdpdGhpbiBEQU1PTidzIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZy5cbiogICBUaGUgYGRhbW9uX2ZvbGlvX2FjY2VwdGFibGVgIGZ1bmN0aW9uIG5vdyBpbmNsdWRlcyBhIGNoZWNrIGZvciBodWdldGxiIGZvbGlvcy4gVGhhdOKAmXMga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNoZWNrIHdpbGwgdHJpZ2dlci5cbiogICBgX19kYW1vbl9nZXRfZm9saW9gIGFuZCBpdHMgY2FsbGVycyBhcmUgcmVmYWN0b3JlZCB0byBoYW5kbGUgdGhlIFwibW9uaXRvclwiIGNvbnRleHQgd2l0aCBuZXcgZnVuY3Rpb25zLlxuKiAgIGBkYW1vbl9odWdldGxiX21rb2xkYCBpcyBtb3ZlZCBhbmQgZXhwb3NlZCwgd2hpY2ggaXMgcmVsZXZhbnQgYXMgaXQncyBub3cgaW52b2x2ZWQgaW4gbW9yZSBwbGFjZXMuXG4qICAgYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAgYW5kIGBkYW1vbl9mb2xpb195b3VuZ19vbmVgIGFyZSB1cGRhdGVkIHRvIGNhbGwgdGhlc2UgbmV3IGZ1bmN0aW9ucyB0b28uXG4qICAgYGRhbW9uX3BhX21rb2xkYCBhbmQgYGRhbW9uX3BhX3lvdW5nYCBoYXZlIGNoYW5nZWQgdG8gdXNlIHRoZSBuZXcgYGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvYCBmdW5jdGlvbi5cblxuTm93LCB0byBhc3Nlc3MgZnV6emluZyBwb3RlbnRpYWwsIEkgbmVlZCB0byBrbm93IHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gVGhpcyBpcyB3aGVyZSBJJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgY2hlY2sgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IGRlcGVuZGVuY2llcyBvbiBEQU1PTiBmZWF0dXJlcyBhbmQgSFVHRVRMQiBjb25maWd1cmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYnVpbGRpbmcgYSBmdXp6aW5nIHRhcmdldCB0aGF0IGV4cG9zZXMgdGhpcyBmdW5jdGlvbmFsaXR5LlxuXG5CYXNlZCBvbiB0aGlzIHF1aWNrIGFuYWx5c2lzLCBJJ2Qgc2F5IHRoaXMgcGF0Y2ggaXMgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZy4gVGhlIGNoYW5nZXMgdG8gZm9saW8gaGFuZGxpbmcgYW5kIHRoZSBpbnRlZ3JhdGlvbiBvZiBodWdldGxiIHN1cHBvcnQgaW50cm9kdWNlIG5ldyBjb2RlIHBhdGhzIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gTXkgbmV4dCBzdGVwcyB3aWxsIGJlIHRvIGdldCB0aGUgY29uZmlndXJhdGlvbiByaWdodCBhbmQgdGhlbiBpZGVudGlmeSBwb3RlbnRpYWwgZnV6eiB0YXJnZXRzIHdpdGhpbiB0aGlzIG1vZGlmaWVkIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyODgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxNzo1MC42OTUxNzU3MDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgREFNT05cXG4gICA2OlxcdFxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxcbiAgIDk6XFx0XFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcXG4gIDEwOlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcXG4gIDEzOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIERBTU9OXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG4gIDIwOlxcdFxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxuICAyMTpcXHRcXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXFxuICAyMjpcXHRcXHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNTpcXHRcXG4gIDI2OlxcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxuICAyNzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICAyOTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDM0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIERBTU9OX1ZBRERSXFxuICAzOTpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNTA6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA1MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDU0OlxcdFxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxuICA1NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDU5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA2MDpcXHRcXHRoZWxwXFxuICA2MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA2NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBEQU1PTl9TWVNGU1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbiAgNzE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG4gIDc0OlxcdFxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuICA3NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNzk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDgwOlxcdFxcdGhlbHBcXG4gIDgxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgODI6XFx0XFxuICA4MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgODQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgODc6XFx0XFxuICA4ODpcXHRjb25maWcgREFNT05fUkVDTEFJTVxcbiAgODk6XFx0XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuICA5MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxuICA5MTpcXHRcXHRoZWxwXFxuICA5MjpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xcbiAgOTM6XFx0XFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXFxuICA5NDpcXHRcXHQgIHRob3NlLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHQgIFRoaXMgaXMgc3VnZ2VzdGVkIHRvIGJlIHVzZWQgYXMgYSBwcm9hY3RpdmUgYW5kIGxpZ2h0d2VpZ2h0XFxuICA5NzpcXHRcXHQgIHJlY2xhbWF0aW9uIHVuZGVyIGxpZ2h0IG1lbW9yeSBwcmVzc3VyZSwgd2hpbGUgdGhlIHRyYWRpdGlvbmFsIHBhZ2VcXG4gIDk4OlxcdFxcdCAgc2Nhbm5pbmctYmFzZWQgcmVjbGFtYXRpb24gaXMgdXNlZCBmb3IgaGVhdnkgcHJlc3N1cmUuXFxuICA5OTpcXHRcXG4gMTAwOlxcdGNvbmZpZyBEQU1PTl9MUlVfU09SVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxNzo1MC42OTUyNTg4MDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzI4MzY1Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipNYWtlZmlsZSBFeHBsb3JhdGlvbiBmb3IgT3BzLUNvbW1vbiBhbmQgUGFkZHIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIFwiV2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgb3BzLWNvbW1vbmAgYW5kIGBwYWRkcmAgYXJlIGJlaW5nIGJ1aWx0LCByaWdodD9cIiBJJ3ZlIGdvdCBhIGh1bmNoIHRoYXQgYSBrZXkgcGllY2Ugb2YgdGhhdCBwdXp6bGUgbGllcyB3aXRoaW4gdGhlIGBtbS9kYW1vbi9NYWtlZmlsZWAuIE1ha2VzIHNlbnNlIOKAkyB0aGF0J3MgYSBsaWtlbHkgcGxhY2UgdG8gZmluZCBidWlsZCBpbnN0cnVjdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRob3NlIGNvbXBvbmVudHMuIExldCdzIGRlbHZlIGluIHRoZXJlIGFuZCBzZWUgd2hhdCBtYWdpYyB0aGUgTWFrZWZpbGUgaG9sZHMuIFRpbWUgdG8gcG9rZSBhcm91bmQgYW5kIHNlZSBob3cgdGhlc2UgdG9vbHMgYXJlIG9yY2hlc3RyYXRlZC4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgY29ycmVjdCBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTg0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxNzo1My40MjM2Mjc2MDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbiAgIDU6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxuICAgODpcXHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxNzo1My40MjM3MjI2ODFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTU3NTM2MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6XG5cbioqQ2hlY2tpbmcgYEhVR0VUTEJfUEFHRWAgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBIVUdFVExCX1BBR0VgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIGFzcGVjdCB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBwYWdlcywgYW5kIHNvbWV0aW1lcyB0aGUgc2ltcGxlc3QgdGhpbmdzIGFyZSBvdmVybG9va2VkLiBJIG5lZWQgdG8gY29uZmlybSBpdHMgY3VycmVudCBzdGF0dXMsIHRoZSBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggdGhlIHNwZWNpZmljIHByb2JsZW0gSSdtIGludmVzdGlnYXRpbmcuIEknbGwgbWVudGFsbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IHNlY3Rpb25zIG9mIHRoZSBjb25maWcgZmlsZSBhbmQgZG9jdW1lbnRhdGlvbiBqdXN0IHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIHNldHRpbmcuIE5vIHNlbnNlIGluIHNwaW5uaW5nIG15IHdoZWVscyBvbiBzb21ldGhpbmcgSSd2ZSBhbHJlYWR5IHNvbHZlZCB3aXRoIGEgc2ltcGxlIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTk3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxNzo1Ni41ODEyNjE4MDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5Mjg0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02ODk9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXFxuLS1cXG5tbS9LY29uZmlnLTY5MS1cXG5tbS9LY29uZmlnOjY5Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTY5My1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE1OjE3OjU2LjYzMzIxOTM0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MjM4ODUzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgSFVHRVRMQl9QQUdFYCBpcyBkZWZpbmVkLiBUaGlzIGlzIGEgY29tbW9uIHNpdHVhdGlvbiwgc28gbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGZzL0tjb25maWdgLiBUaGF0J3MgdXN1YWxseSB0aGUgZ28tdG8gcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGVzcGVjaWFsbHkgaWYgdGhleSByZWxhdGUgdG8gZmlsZSBzeXN0ZW1zIG9yIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgYEhVR0VUTEJfUEFHRWAgZGVmaW5pdGVseSBoaW50cyBhdCB0aGUgbGF0dGVyLiBMZXQncyBzZWUgaWYgaXQncyByaWdodCB0aGVyZS4gSWYgbm90LCBpdCdzIHRpbWUgdG8gc3RhcnQgc2VhcmNoaW5nIG1vcmUgYnJvYWRseSwgcGVyaGFwcyB3aXRoIGBncmVwYCBvciBgZmluZGAsIGJ1dCBgS2NvbmZpZ2AgZmlsZXMgYXJlIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0aGVzZSBraW5kcyBvZiBzeW1ib2xzLCBwYXJ0aWN1bGFybHkgdGhlIG9uZXMgYXQgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI3NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE1OjE3OjU5LjA1NzEwODUxNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0OTIwMjE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFJFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTU6MTg6MDEuNDA2MzE3NjQ1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzODUzNDQyNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgSFVHRVRMQl9QQUdFYCBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgSFVHRVRMQl9QQUdFYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlIHRleHQgdGVsbHMgbWUgaXQncyBkZWZpbmVkIHdpdGhpbiBgZnMvS2NvbmZpZ2AuIFJpZ2h0IGF3YXksIEkgbm90ZSB0aGF0IGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gYEhVR0VUTEJGU2AgdXNpbmcgYSBgZGVmX2Jvb2xgLCB3aGljaCBJJ2xsIGtlZXAgaW4gbWluZC4gTGV0J3Mgc2VlLi4uIEknbGwgbmVlZCB0byBqdW1wIGludG8gYGZzL0tjb25maWdgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAyNzAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG9wdGlvbiBhY3R1YWxseSAqZG9lcyogYW5kIHdoYXQgaXQncyB0aWVkIHRvIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSSdtIGV4cGVjdGluZyBzb21lIGRlc2NyaXB0aW9uIG9mIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCBwb3NzaWJseSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBvdGhlciBvcHRpb25zLiBJJ2xsIGFsc28gYmUgd2F0Y2hpbmcgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgcmVsYXRpb25zaGlwcyB0byBvdGhlciBrZXJuZWwgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxODo0NS4yNTk3NjMyNzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0bWVudWNvbmZpZyBIVUdFVExCRlNcXG4gMjUxOlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gMjUyOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjUzOlxcdFxcdHNlbGVjdCBNRU1GRF9DUkVBVEVcXG4gMjU0OlxcdFxcdHNlbGVjdCBQQURBVEEgaWYgU01QXFxuIDI1NTpcXHRcXHRoZWxwXFxuIDI1NjpcXHRcXHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cXG4gMjU3OlxcdFxcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxcbiAyNTg6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjYxOlxcdFxcbiAyNjI6XFx0aWYgSFVHRVRMQkZTXFxuIDI2MzpcXHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbiAyNjQ6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4gMjY1OlxcdFxcdGRlZmF1bHQgblxcbiAyNjY6XFx0XFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbiAyNjc6XFx0XFx0aGVscFxcbiAyNjg6XFx0XFx0ICBUaGUgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvZmYuIFNheSBZIGhlcmUgdG9cXG4gMjY5OlxcdFxcdCAgZW5hYmxlIEhWTyBieSBkZWZhdWx0LiBJdCBjYW4gYmUgZGlzYWJsZWQgdmlhIGh1Z2V0bGJfZnJlZV92bWVtbWFwPW9mZlxcbiAyNzA6XFx0XFx0ICAoYm9vdCBjb21tYW5kIGxpbmUpIG9yIGh1Z2V0bGJfb3B0aW1pemVfdm1lbW1hcCAoc3lzY3RsKS5cXG4gMjcxOlxcdGVuZGlmICMgSFVHRVRMQkZTXFxuIDI3MjpcXHRcXG4gMjczOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VcXG4gMjc0OlxcdFxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbiAyNzU6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiAyNzY6XFx0XFxuIDI3NzpcXHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG4gMjc4OlxcdFxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbiAyNzk6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXFxuIDI4MDpcXHRcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxuIDI4MTpcXHRcXG4gMjgyOlxcdGNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcXG4gMjgzOlxcdFxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbiAyODQ6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkUgXFx1MDAyNlxcdTAwMjYgU1BMSVRfUE1EX1BUTE9DS1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTU6MTg6NDUuMjU5ODQ0NjYzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNjAzNTQ5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgSHVnZVRMQiBhbmQgUGh5c2ljYWwgQWRkcmVzcyBTdXBwb3J0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGBDT05GSUdfSFVHRVRMQkZTYCBlbmFibGluZyBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIHJlbGV2YW50IGhlcmUuIFRoYXQgbWFrZXMgc2Vuc2UsIHdlIGFyZSBkZWFsaW5nIHdpdGggSHVnZVRMQiBwYWdlcy4gVGhlbiB3ZSBoYXZlIHRoZSBzdGFuZGFyZCBEQU1PTiBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlZCwgc3BlY2lmaWNhbGx5LCBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGBDT05GSUdfREFNT05fVkFERFJgLCBhbmQgYENPTkZJR19EQU1PTl9TWVNGU2AuIFJpZ2h0LCBzbyB0aGlzIGlzIGFib3V0IGludGVncmF0aW5nIERBTU9OIHdpdGggSHVnZVRMQiBhbmQgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nLlxuXG5Ob3csIGxldCdzIG1vdmUgb250byB0aGUgbWVhdCBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzLiBUaGUgZnVuY3Rpb25zIGFkZGVkIG9yIG1vZGlmaWVkIGFyZSBteSBmb2N1cy4gSW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIEkgc2VlIGEgY2x1c3RlciBvZiBuZXcgZnVuY3Rpb25zOiBgZGFtb25fZm9saW9fYWNjZXB0YWJsZWAsIGBfX2RhbW9uX2dldF9mb2xpb2AsIGBkYW1vbl9nZXRfZm9saW9gLCBgZGFtb25fZ2V0X21vbml0b3JfZm9saW9gLCBgZGFtb25faHVnZXRsYl9ta29sZGAsIGBkYW1vbl9mb2xpb19ta29sZF9vbmVgLCBgZGFtb25fZm9saW9fbWtvbGRgLCBgZGFtb25faHVnZXRsYl95b3VuZ2AsIGBkYW1vbl9wdGVfeW91bmdgLCBgZGFtb25fZm9saW9feW91bmdfb25lYCwgYW5kIGBkYW1vbl9mb2xpb195b3VuZ2AuIFNldmVyYWwgb2YgdGhlc2UgYXJlIGRlY2xhcmVkIGBzdGF0aWNgLCBzdWdnZXN0aW5nIHRoZXkncmUgaW50ZXJuYWwgaGVscGVycywgd2hpbGUgb3RoZXJzIGFyZSBleHBvcnRlZCwgaW5kaWNhdGluZyBlbnRyeSBwb2ludHMuIEkgY2FuIGFscmVhZHkgc2VlIGBta29sZGAgYW5kIGB5b3VuZ2AgbWV0aG9kcyBiZWluZyBjcmVhdGVkLCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IG1hcmtpbmcgcGFnZXMgYXMgb2xkIG9yIHlvdW5nLlxuXG5JbiBgbW0vZGFtb24vcGFkZHIuY2AsIEkndmUgZ290IHR3byBtb3JlOiBgZGFtb25fcGFfbWtvbGRgIGFuZCBgZGFtb25fcGFfeW91bmdgLiBUaGVzZSBhcmUgdGhlIHBoeXNpY2FsIGFkZHJlc3Mtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLCBhcyBleHBlY3RlZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4gSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIGV4cG9ydGVkIHN5bWJvbHMgZnJvbSBgb3BzLWNvbW1vbi5oYCBhbmQgdGhlIGZ1bmN0aW9ucyBpbiBgcGFkZHIuY2AuIE15IG5leHQgc3RlcCBpcyB0byBzZWFyY2ggZm9yIHRoZSBjYWxsIHNpdGVzIG9mIGBkYW1vbl9mb2xpb19ta29sZGAsIGBkYW1vbl9mb2xpb195b3VuZ2AsIGBkYW1vbl9odWdldGxiX21rb2xkYCwgYGRhbW9uX2dldF9mb2xpb2AsIGFuZCBgZGFtb25fZ2V0X21vbml0b3JfZm9saW9gLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29udHJvbCBmbG93IGFuZCBpbnRlcmFjdGlvbiBvZiBEQU1PTiB3aXRoIEh1Z2VUTEIgYW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLCBhbmQgaGlnaGxpZ2h0IHRoZSBrZXkgaW50ZWdyYXRpb24gcG9pbnRzIEknbSBnb2luZyB0byB3YW50IHRvIGV4YW1pbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxODo1MS41MjAyMDI4OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MTA2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fLipmb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jLTE5LVxcbm1tL2RhbW9uL2NvcmUuYzoyMDovKiBmb3IgZGFtb25fZ2V0X2ZvbGlvKCkgdXNlZCBieSBub2RlIGVsaWdpYmxlIG1lbW9yeSBtZXRyaWNzICovXFxubW0vZGFtb24vY29yZS5jLTIxLSNpbmNsdWRlIFxcXCJvcHMtY29tbW9uLmhcXFwiXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjgxNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI4NjctICpcXG5tbS9kYW1vbi9jb3JlLmM6Mjg2ODogKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIGRhbW9uX2dldF9mb2xpbygpIGZyb20gb3BzLWNvbW1vbi5jLCB3aGljaCBpc1xcbm1tL2RhbW9uL2NvcmUuYy0yODY5LSAqIG9ubHkgYXZhaWxhYmxlIHdoZW4gQ09ORklHX0RBTU9OX1BBRERSIGlzIGVuYWJsZWQuIEl0IGFsc28gcmVxdWlyZXMgdGhlXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjg3Mj1zdGF0aWMgcGh5c19hZGRyX3QgZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI4OTUtXFxubW0vZGFtb24vY29yZS5jOjI4OTY6XFx0XFx0XFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xcbm1tL2RhbW9uL2NvcmUuYy0yODk3LVxcdFxcdFxcdFxcdGlmICghZm9saW8pIHtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNy1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTg6c3RhdGljIGJvb2wgZGFtb25fZm9saW9fYWNjZXB0YWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vbml0b3IpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE5LXtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0zMC0gKi9cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MzE6c3RhdGljIHN0cnVjdCBmb2xpbyAqX19kYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgbW9uaXRvcilcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMzIte1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTQyLVxcdGlmICh1bmxpa2VseShwYWdlX2ZvbGlvKHBhZ2UpICE9IGZvbGlvKSB8fFxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo0MzpcXHRcXHRcXHQhZGFtb25fZm9saW9fYWNjZXB0YWJsZShmb2xpbywgbW9uaXRvcikpIHtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDQtXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy00OS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTA6c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTUxLXtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTI6XFx0cmV0dXJuIF9fZGFtb25fZ2V0X2ZvbGlvKHBmbiwgZmFsc2UpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy01My19XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNTUtLypcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTY6ICogU2FtZSB0byBkYW1vbl9nZXRfZm9saW8oKSwgYnV0IGFsc28gYWNjZXB0cyBodWdldGxiIGZvbGlvcywgd2hpY2ggYXJlXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTU3LSAqIG1hbmFnZWQgb3V0c2lkZSBvZiB0aGUgTFJVIGxpc3RzLiAgQWltZWQgdG8gYmUgdXNlZCBieSBhY2Nlc3MgbW9uaXRvcmluZ1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy01OC0gKiBwcmltaXRpdmVzLiAgREFNT1MgYWN0aW9ucyB0aGF0IGFzc3VtZSBMUlUtbWFuYWdlZCBmb2xpb3Mgc2hvdWxkIGtlZXAgdXNpbmdcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTk6ICogZGFtb25fZ2V0X2ZvbGlvKCkuXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTYwLSAqL1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzo2MTpzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy02Mi17XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjYzOlxcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIHRydWUpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy02NC19XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9NjY9dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzctXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjc4OlxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKHBmbik7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc5LVxcdGlmICghZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9OTc9dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTA5LVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMTA6XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8ocGZuKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTExLVxcdGlmICghZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MjAzPWludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjExLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMTI6c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIxMy1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjMxLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMzI6dm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMzMte1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMzQtXFx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjM1OlxcdFxcdC5ybWFwX29uZSA9IGRhbW9uX2ZvbGlvX21rb2xkX29uZSxcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjM2LVxcdFxcdC5hbm9uX2xvY2sgPSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQsXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MjcwPXN0YXRpYyBib29sIGRhbW9uX3B0ZV95b3VuZyhwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yODQtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjI4NTpzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjg2LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmFyZylcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0zMjEtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjMyMjpib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTMyMy17XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMzI2LVxcdFxcdC5hcmcgPSBcXHUwMDI2YWNjZXNzZWQsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjMyNzpcXHRcXHQucm1hcF9vbmUgPSBkYW1vbl9mb2xpb195b3VuZ19vbmUsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTMyOC1cXHRcXHQuYW5vbl9sb2NrID0gZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTM0Nz1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMzY5LVxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfWU9VTkc6XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjM3MDpcXHRcXHRtYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0zNzEtXFx0XFx0aWYgKG1hdGNoZWQpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjM3MjpcXHRcXHRcXHRkYW1vbl9mb2xpb19ta29sZChmb2xpbyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTM3My1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0zODgtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjM4OTpzdGF0aWMgdW5zaWduZWQgaW50IF9fZGFtb25fbWlncmF0ZV9mb2xpb19saXN0KFxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0zOTAtXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqbWlncmF0ZV9mb2xpb3MsIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDE4LVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo0MTk6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9taWdyYXRlX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDIwLVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDQ2LVxcdC8qIE1pZ3JhdGUgZm9saW9zIHNlbGVjdGVkIGZvciBtaWdyYXRpb24gKi9cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDQ3OlxcdG5yX21pZ3JhdGVkICs9IF9fZGFtb25fbWlncmF0ZV9mb2xpb19saXN0KFxcbm1tL2RhbW9uL29wcy1jb21tb24uYy00NDgtXFx0XFx0XFx0XFx1MDAyNm1pZ3JhdGVfZm9saW9zLCBwZ2RhdCwgdGFyZ2V0X25pZCk7XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDcwLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo0NzE6dW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy00NzIte1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTUwNC1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NTA1OlxcdFxcdG5yX21pZ3JhdGVkICs9IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChcXHUwMDI2bm9kZV9mb2xpb19saXN0LFxcbm1tL2RhbW9uL29wcy1jb21tb24uYy01MDYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgTk9ERV9EQVRBKG5pZCksXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNTEwLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo1MTE6XFx0bnJfbWlncmF0ZWQgKz0gZGFtb25fbWlncmF0ZV9mb2xpb19saXN0KFxcdTAwMjZub2RlX2ZvbGlvX2xpc3QsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTUxMi1cXHRcXHRcXHRcXHRcXHRcXHQgICBOT0RFX0RBVEEobmlkKSxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uaC03LVxcbm1tL2RhbW9uL29wcy1jb21tb24uaDo4OnN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6OTpzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTAtXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9MTc9c3RhdGljIGlubGluZSB2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMjEtI2VuZGlmXFx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbm1tL2RhbW9uL29wcy1jb21tb24uaDoyMjp2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaDoyMzpib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC0yNC1cXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uaD0zMD1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaDozMTp1bnNpZ25lZCBsb25nIGRhbW9uX21pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwgaW50IHRhcmdldF9uaWQpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC0zMi1cXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9Mzg9c3RhdGljIHZvaWQgZGFtb25fcGFfbWtvbGQocGh5c19hZGRyX3QgcGFkZHIpXFxubW0vZGFtb24vcGFkZHIuYy0zOS17XFxubW0vZGFtb24vcGFkZHIuYzo0MDpcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X21vbml0b3JfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTQxLVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00NC1cXG5tbS9kYW1vbi9wYWRkci5jOjQ1OlxcdGRhbW9uX2ZvbGlvX21rb2xkKGZvbGlvKTtcXG5tbS9kYW1vbi9wYWRkci5jLTQ2LVxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTY4PXN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyKVxcbm1tL2RhbW9uL3BhZGRyLmMtNjkte1xcbm1tL2RhbW9uL3BhZGRyLmM6NzA6XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XFxubW0vZGFtb24vcGFkZHIuYy03MS1cXHRib29sIGFjY2Vzc2VkO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy03NS1cXG5tbS9kYW1vbi9wYWRkci5jOjc2OlxcdGFjY2Vzc2VkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xcbm1tL2RhbW9uL3BhZGRyLmMtNzctXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MTA4PXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE0MC1cXG5tbS9kYW1vbi9wYWRkci5jOjE0MTpzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9kYW1vbi9wYWRkci5jLTE0Mi1cXHRcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE0Ny1cXHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xcbm1tL2RhbW9uL3BhZGRyLmM6MTQ4OlxcdFxcdGlmIChkYW1vbl9wYV9maWx0ZXJfbWF0Y2goZiwgZm9saW8pKSB7XFxubW0vZGFtb24vcGFkZHIuYy0xNDktXFx0XFx0XFx0cGFzcyA9IGYtXFx1MDAzZWFsbG93O1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0xNTc9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xNzUtXFx0XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MTc2OlxcdFxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhKSk7XFxubW0vZGFtb24vcGFkZHIuYy0xNzctXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XFxubW0vZGFtb24vcGFkZHIuYzoxNzg6XFx0XFx0XFx0XFx0aWYgKGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBhLCBmb2xpbywgcCkpXFxubW0vZGFtb24vcGFkZHIuYy0xNzktXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSsrO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0xOTU9c3RhdGljIGJvb2wgZGFtb3NfcGFfZmlsdGVyX291dChzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjA4LVxcbm1tL2RhbW9uL3BhZGRyLmM6MjA5OnN0YXRpYyBib29sIGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL3BhZGRyLmMtMjEwLXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MjIwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjQ2LVxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmM6MjQ3OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jOjI0ODpcXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTI0OS1cXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9Mjc4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjg3LVxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmM6Mjg4OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jOjI4OTpcXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTI5MC1cXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MzI2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzM1LVxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmM6MzM2OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jOjMzNzpcXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTMzOC1cXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzU1LVxcdH1cXG5tbS9kYW1vbi9wYWRkci5jOjM1NjpcXHRhcHBsaWVkID0gZGFtb25fbWlncmF0ZV9wYWdlcyhcXHUwMDI2Zm9saW9fbGlzdCwgcy1cXHUwMDNldGFyZ2V0X25pZCk7XFxubW0vZGFtb24vcGFkZHIuYy0zNTctXFx0Y29uZF9yZXNjaGVkKCk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTM2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9zdGF0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTM3My1cXHR3aGlsZSAoYWRkciBcXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVxcdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcXG5tbS9kYW1vbi9wYWRkci5jOjM3NDpcXHRcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XFxubW0vZGFtb24vcGFkZHIuYzozNzU6XFx0XFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XFxubW0vZGFtb24vcGFkZHIuYy0zNzYtXFx0XFx0XFx0YWRkciArPSBQQUdFX1NJWkU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE1OjE4OjUxLjU2NjgyMTc1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzQwMTg1NzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQU1PTidzIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBgZGFtb25fZm9saW9fbWtvbGRgLCBgZGFtb25fZm9saW9feW91bmdgLCBgZGFtb25faHVnZXRsYl9ta29sZGAsIGBkYW1vbl9nZXRfZm9saW9gLCBhbmQgYGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvYCBhcmUgYWxsIGV4cG9ydGVkIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIG1lYW5pbmcgdGhleSdyZSBhY2Nlc3NpYmxlIG91dHNpZGUgdGhhdCBmaWxlLCBsaWtlbHkgY29yZSB0byBEQU1PTidzIG9wZXJhdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSAqdXNlZCouIE15IGZvY3VzIG5vdyBzaGlmdHMgdG8gYHZhZGRyLmNgLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeWAgZnVuY3Rpb24uIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBjYWxsIHRvIGBkYW1vbl9odWdldGxiX21rb2xkYC4gVGhhdCB3aWxsIGdpdmUgbWUgaW5zaWdodCBpbnRvIGhvdyBEQU1PTiBoYW5kbGVzIGh1Z2UgcGFnZXMgaW4gdGhlIFwibWtvbGRcIiBjb250ZXh0LCBhbmQgaG93IHRoZXNlIHZhcmlvdXMgZnVuY3Rpb25zIGludGVycmVsYXRlIHdpdGhpbiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1hbmFnZW1lbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgY29udGV4dCBvZiBgZGFtb25faHVnZXRsYl9ta29sZGAgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTgwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE1OjE4OjU5LjMwNzAxMTc2M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi92YWRkci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRvdXQ6XFxuIDI5MTpcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTtcXG4gMjkyOlxcdFxcdHJldHVybiAwO1xcbiAyOTM6XFx0fVxcbiAyOTQ6XFx0XFxuIDI5NTpcXHQjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiAyOTY6XFx0c3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuIDI5NzpcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIDI5ODpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiAyOTk6XFx0e1xcbiAzMDA6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEod2Fsay1cXHUwMDNldm1hKTtcXG4gMzAxOlxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4gMzAyOlxcdFxcdHB0ZV90IGVudHJ5O1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXFx1MDAzZW1tLCBwdGUpO1xcbiAzMDU6XFx0XFx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBhZGRyLCBwdGUpO1xcbiAzMDY6XFx0XFx0aWYgKCFwdGVfcHJlc2VudChlbnRyeSkpXFxuIDMwNzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMzA4OlxcdFxcbiAzMDk6XFx0XFx0ZGFtb25faHVnZXRsYl9ta29sZChwdGUsIHdhbGstXFx1MDAzZW1tLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIpO1xcbiAzMTA6XFx0XFxuIDMxMTpcXHRvdXQ6XFxuIDMxMjpcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiAzMTM6XFx0XFx0cmV0dXJuIDA7XFxuIDMxNDpcXHR9XFxuIDMxNTpcXHQjZWxzZVxcbiAzMTY6XFx0I2RlZmluZSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5IE5VTExcXG4gMzE3OlxcdCNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuIDMxODpcXHRcXG4gMzE5OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX21rb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIDMyMDpcXHR7XFxuIDMyMTpcXHRcXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgZGFtb25fbWtvbGRfb3BzID0ge1xcbiAzMjI6XFx0XFx0XFx0LnBtZF9lbnRyeSA9IGRhbW9uX21rb2xkX3BtZF9lbnRyeSxcXG4gMzIzOlxcdFxcdFxcdC5odWdldGxiX2VudHJ5ID0gZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeSxcXG4gMzI0OlxcdFxcdH07XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciArIDEsIFxcdTAwMjZkYW1vbl9ta29sZF9vcHMsIE5VTEwpO1xcbiAzMjc6XFx0fVxcbiAzMjg6XFx0XFxuIDMyOTpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxODo1OS4zMDcxMDMzNDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQzNTY4OTg5OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgREFNT04gU3VwcG9ydCBmb3IgSHVnZXRsYiBGb2xpb3MqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIChEQU1PTikgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZXh0ZW5kaW5nIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZyB0byBzdXBwb3J0IGh1Z2V0bGIgZm9saW9zLiBUaGlzIG1lYW5zIERBTU9OIGNhbiBub3cgdHJhY2sgYWNjZXNzIHBhdHRlcm5zIHdpdGhpbiBodWdldGxiIHBhZ2VzLCBlc3NlbnRpYWxseSBtYWtpbmcgdGhlIFwib2xkL3lvdW5nXCIgZGV0ZXJtaW5hdGlvbi4gVGhlIGNvcmUgb2YgdGhpcyBpbnZvbHZlcyBwYWdlIHRhYmxlIHdhbGtzIHZpYSBgcm1hcCB3YWxrYCBhbmQgdGhlIHVzZSBvZiBmdW5jdGlvbnMgbGlrZSBgaHVnZV9wdGVwX2dldC9zZXRfaHVnZV9wdGVfYXRgIHRvIHRlc3QgYW5kIHNldCB0aGUgXCJ5b3VuZ1wiIGFuZCBcImlkbGVcIiBmbGFncy5cblxuRmlyc3Qgb2ZmLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkIGhlcmUuIERBTU9OIGZ1bmN0aW9uYWxpdHkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHdoZXRoZXIgaXQncyB0aHJvdWdoIHRoZSBzeXNmcyBvciBkZWJ1Z2ZzIGludGVyZmFjZXMsIG9yIHRocm91Z2ggREFNT04gcmVjbGFpbS9zdGF0IG1lY2hhbmlzbXMuIFRoYXQgY3JlYXRlcyBhbiBhdmVudWUgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFBsdXMsIHRoZSBEQU1PTiBjb2RlYmFzZSBydW5zIG9uIHN0YW5kYXJkIGhhcmR3YXJlL3ZpcnR1YWwgZW52aXJvbm1lbnRzLCBhbmQgaHVnZXRsYmZzIGlzIHN1cHBvcnRlZCBpbiBRRU1VLCBtYWtpbmcgaXQgZWFzaWx5IHRlc3RhYmxlLlxuXG5OZXh0LCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgYXJlIGNsZWFyLiBXZSdyZSBsb29raW5nIGF0IGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1BBRERSYCwgYENPTkZJR19EQU1PTl9WQUREUmAsIGBDT05GSUdfSFVHRVRMQkZTYCAod2hpY2ggaW1wbGllcyBgQ09ORklHX0hVR0VUTEJfUEFHRWApLCBhbmQgYENPTkZJR19EQU1PTl9TWVNGU2AgZm9yIHVzZXJzcGFjZSBpbnRlcmFjdGlvbi5cblxuRGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCB0aGUgZGVwZW5kZW5jaWVzIG1ha2Ugc2Vuc2UuIGBDT05GSUdfREFNT05fUEFERFJgIGFuZCBgQ09ORklHX0RBTU9OX1ZBRERSYCBkZXBlbmQgb24gYERBTU9OYCBhbmQgYE1NVWAsIGFuZCBzZWxlY3QgYFBBR0VfSURMRV9GTEFHYC4gYENPTkZJR19EQU1PTl9TWVNGU2AgZGVwZW5kcyBvbiBgREFNT05gIGFuZCBgU1lTRlNgLiBgQ09ORklHX0hVR0VUTEJGU2AgZGVwZW5kcyBvbiBgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNgLCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGRlcml2ZWQgZnJvbSBgSFVHRVRMQkZTYC5cblxuTm93LCBmb3IgdGhlIGNyaXRpY2FsIEFQSSBjaGFuZ2VzLiBUaGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMgdGhhdCBoYXZlIGJlZW4gZWl0aGVyIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGludm9sdmVkIGhlcmUgYXJlIGBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpb2AsIGBkYW1vbl9odWdldGxiX21rb2xkYCwgYGRhbW9uX2ZvbGlvX21rb2xkYCwgYGRhbW9uX2ZvbGlvX3lvdW5nYCwgYW5kIGBkYW1vbl9nZXRfZm9saW9gLiBDb25maXJtaW5nIHRoZXNlIGFyZSBhbGwgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMsIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN1cmZhY2UgYXJlYSBvZiB0aGlzIGNoYW5nZS4gVXBvbiByZXZpZXdpbmcgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGFsbCB0aGVzZSBhcmUgaW5kZWVkIG5vbi1zdGF0aWMgZnVuY3Rpb25zLlxuXG5UaGVyZSBhcmUgYWxzbyBhIGNvdXBsZSBvZiBvdGhlciBzeW1ib2xzIHRvIGNvbnNpZGVyLCBzcGVjaWZpY2FsbHkgYGRhbW9uX3B0ZXBfbWtvbGRgIGFuZCBgZGFtb25fcG1kcF9ta29sZGAsIGJ1dCB0aGVpciBsb2dpYyBpc24ndCB0aGUgZm9jdXMgaGVyZSwgdGhlIGNoYW5nZXMgYXJlIHdpdGggdGhlIGxpc3RlZCBBUEkgY2FsbHMuXG5cblJlY2FwcGluZyB0aGUgY29uZmlndXJhdGlvbiwgdG8gcmVpdGVyYXRlIGl0OiBgREFNT05gLCBgREFNT05fUEFERFJgLCBgREFNT05fVkFERFJgLCBgREFNT05fU1lTRlNgLCBgSFVHRVRMQkZTYCwgYW5kIGBIVUdFVExCX1BBR0VgIGFyZSB0aGUga2V5IGNvbmZpZ3MgdG8gZXhhbWluZSwgYW5kIHRoZSBjb2RlIGNoYW5nZXMgc2VlbSBjb21wbGV0ZS5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBpcyBsb29raW5nIGNsZWFuIGFuZCB3ZWxsLWRlZmluZWQuIFRpbWUgdG8gbWFrZSB0aGF0IHRvb2wgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1OTMsIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTU6MTk6MTMuNjY0MDA1NzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzY2NjcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fZ2V0X21vbml0b3JfZm9saW9cIixcbiAgICBcImRhbW9uX2h1Z2V0bGJfbWtvbGRcIixcbiAgICBcImRhbW9uX2ZvbGlvX21rb2xkXCIsXG4gICAgXCJkYW1vbl9mb2xpb195b3VuZ1wiLFxuICAgIFwiZGFtb25fZ2V0X2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyBEQU1PTiBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcgdG8gc3VwcG9ydCBodWdldGxiIGZvbGlvcyBieSBpbnRyb2R1Y2luZyBkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbygpIGFuZCB1cGRhdGluZyBwYWdlIHRhYmxlIHdhbGsgY2FsbGJhY2tzIChkYW1vbl9mb2xpb19ta29sZCwgZGFtb25fZm9saW9feW91bmcsIGRhbW9uX2h1Z2V0bGJfbWtvbGQpIHRvIGhhbmRsZSBodWdldGxiIHBhZ2VzLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcy9pbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX2dldF9tb25pdG9yX2ZvbGlvXCIsXG4gICAgXCJkYW1vbl9odWdldGxiX21rb2xkXCIsXG4gICAgXCJkYW1vbl9mb2xpb19ta29sZFwiLFxuICAgIFwiZGFtb25fZm9saW9feW91bmdcIixcbiAgICBcImRhbW9uX2dldF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4dGVuZHMgREFNT04gcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nIHRvIHN1cHBvcnQgaHVnZXRsYiBmb2xpb3MgYnkgaW50cm9kdWNpbmcgZGFtb25fZ2V0X21vbml0b3JfZm9saW8oKSBhbmQgdXBkYXRpbmcgcGFnZSB0YWJsZSB3YWxrIGNhbGxiYWNrcyAoZGFtb25fZm9saW9fbWtvbGQsIGRhbW9uX2ZvbGlvX3lvdW5nLCBkYW1vbl9odWdldGxiX21rb2xkKSB0byBoYW5kbGUgaHVnZXRsYiBwYWdlcy4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04gc3lzZnMvaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTU6MTk6MTMuNzM3NjgxNDM3WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc3NTM2MzA2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxOToxMy43MzgyNjQxMjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMTc3NTMwNDMwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4dGVuZHMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHRvIHN1cHBvcnQgaHVnZXRsYiBmb2xpb3MgZHVyaW5nIHBoeXNpY2FsIGFkZHJlc3MgYWNjZXNzIG1vbml0b3JpbmcgKHBhZGRyKSBhbmQgcGFnZSB0YWJsZSB3YWxrcy4gSXQgcmVmYWN0b3JzIGZvbGlvIGZldGNoaW5nIGFuZCBta29sZC95b3VuZyBoYW5kbGluZyB0byBhY2NvdW50IGZvciBodWdldGxiIGZvbGlvcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgcmV0dXJuIHZhbHVlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGxlZnQgdW5pbml0aWFsaXplZCBpbiBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLiBBbnkgbWVtb3J5IHNhZmV0eSByaXNrcyAoc3VjaCBhcyBmb2xpbyByZWZjb3VudGluZywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgcGFnZSB0YWJsZSB3YWxrIGlzc3VlcykgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOTZhMmQxZDc1MGM1ODI1Nzc2OTU5YjczNTExNDZjYjhkOTBhMTZmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNToxNzo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggZmJkYTcwZDhlYTRkMC4uODAyMDdiNTZjNmZkYSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5AQCAtMyw2ICszLDcgQEBcbiAgKiBDb21tb24gQ29kZSBmb3IgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xuICAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pZ3JhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tdV9ub3RpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9pZGxlLmhcdTAwM2VcbkBAIC0xNCwxNCArMTUsMjAgQEBcbiAjaW5jbHVkZSBcIi4uL2ludGVybmFsLmhcIlxuICNpbmNsdWRlIFwib3BzLWNvbW1vbi5oXCJcbiBcbitzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19hY2NlcHRhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW9uaXRvcilcbit7XG4rXHRyZXR1cm4gZm9saW9fdGVzdF9scnUoZm9saW8pIHx8XG4rXHRcdChtb25pdG9yIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKTtcbit9XG4rXG4gLypcbi0gKiBHZXQgYW4gb25saW5lIHBhZ2UgZm9yIGEgcGZuIGlmIGl0J3MgaW4gdGhlIExSVSBsaXN0LiAgT3RoZXJ3aXNlLCByZXR1cm5zXG4tICogTlVMTC5cbisgKiBHZXQgYW4gb25saW5lIHBhZ2UgZm9yIGEgcGZuIGlmIGl0J3MgaW4gdGhlIExSVSBsaXN0LCBvciBhIGh1Z2V0bGIgZm9saW8gaWZcbisgKiBAbW9uaXRvciBpcyBzZXQuICBPdGhlcndpc2UsIHJldHVybnMgTlVMTC5cbiAgKlxuICAqIFRoZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24gaXMgc3RvbGVuIGZyb20gdGhlICdwYWdlX2lkbGVfZ2V0X2ZvbGlvKCknLiAgV2VcbiAgKiBzdGVhbCByYXRoZXIgdGhhbiByZXVzZSBpdCBiZWNhdXNlIHRoZSBjb2RlIGlzIHF1aXRlIHNpbXBsZS5cbiAgKi9cbi1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbitzdGF0aWMgc3RydWN0IGZvbGlvICpfX2RhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBtb25pdG9yKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuQEAgLTMyLDEzICszOSwzMCBAQCBzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbiBcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiBcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8ICFmb2xpb190ZXN0X2xydShmb2xpbykpIHtcbitcdGlmICh1bmxpa2VseShwYWdlX2ZvbGlvKHBhZ2UpICE9IGZvbGlvKSB8fFxuK1x0XHRcdCFkYW1vbl9mb2xpb19hY2NlcHRhYmxlKGZvbGlvLCBtb25pdG9yKSkge1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRmb2xpbyA9IE5VTEw7XG4gXHR9XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuK3N0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIGZhbHNlKTtcbit9XG4rXG4rLypcbisgKiBTYW1lIHRvIGRhbW9uX2dldF9mb2xpbygpLCBidXQgYWxzbyBhY2NlcHRzIGh1Z2V0bGIgZm9saW9zLCB3aGljaCBhcmVcbisgKiBtYW5hZ2VkIG91dHNpZGUgb2YgdGhlIExSVSBsaXN0cy4gIEFpbWVkIHRvIGJlIHVzZWQgYnkgYWNjZXNzIG1vbml0b3JpbmdcbisgKiBwcmltaXRpdmVzLiAgREFNT1MgYWN0aW9ucyB0aGF0IGFzc3VtZSBMUlUtbWFuYWdlZCBmb2xpb3Mgc2hvdWxkIGtlZXAgdXNpbmdcbisgKiBkYW1vbl9nZXRfZm9saW8oKS5cbisgKi9cbitzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHJldHVybiBfX2RhbW9uX2dldF9mb2xpbyhwZm4sIHRydWUpO1xuK31cbitcbiB2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwdGVfdCBwdGV2YWwgPSBwdGVwX2dldChwdGUpO1xuQEAgLTk4LDYgKzEyMiwzNSBAQCB2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkclxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiB9XG4gXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbit2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0Ym9vbCByZWZlcmVuY2VkID0gZmFsc2U7XG4rXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcbitcdHVuc2lnbmVkIGxvbmcgcHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuK1xuK1x0Zm9saW9fZ2V0KGZvbGlvKTtcbitcbitcdGlmIChwdGVfeW91bmcoZW50cnkpKSB7XG4rXHRcdHJlZmVyZW5jZWQgPSB0cnVlO1xuK1x0XHRlbnRyeSA9IHB0ZV9ta29sZChlbnRyeSk7XG4rXHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlLCBlbnRyeSwgcHNpemUpO1xuK1x0fVxuK1xuK1x0aWYgKG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyhtbSwgYWRkcixcbitcdFx0XHRcdCAgICAgYWRkciArIGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkpKVxuK1x0XHRyZWZlcmVuY2VkID0gdHJ1ZTtcbitcbitcdGlmIChyZWZlcmVuY2VkKVxuK1x0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuK1xuK1x0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xuK1x0Zm9saW9fcHV0KGZvbGlvKTtcbit9XG4rI2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4rXG4gI2RlZmluZSBEQU1PTl9NQVhfU1VCU0NPUkVcdCgxMDApXG4gI2RlZmluZSBEQU1PTl9NQVhfQUdFX0lOX0xPR1x0KDMyKVxuIFxuQEAgLTE2MywxMCArMjE2LDE1IEBAIHN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG4gXHRcdGFkZHIgPSBwdm13LmFkZHJlc3M7XG4tXHRcdGlmIChwdm13LnB0ZSlcbi1cdFx0XHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xuLVx0XHRlbHNlXG4rXHRcdGlmIChwdm13LnB0ZSkge1xuK1x0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuK1x0XHRcdFx0ZGFtb25faHVnZXRsYl9ta29sZChwdm13LnB0ZSwgdm1hLVx1MDAzZXZtX21tLCB2bWEsXG4rXHRcdFx0XHRcdFx0YWRkcik7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0ZGFtb25fcHRlcF9ta29sZChwdm13LnB0ZSwgdm1hLCBhZGRyKTtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRkYW1vbl9wbWRwX21rb2xkKHB2bXcucG1kLCB2bWEsIGFkZHIpO1xuK1x0XHR9XG4gXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTkxLDI3ICsyNDksNTUgQEAgdm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIH1cbiBcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuK3N0YXRpYyBib29sIGRhbW9uX2h1Z2V0bGJfeW91bmcocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUpO1xuK1xuK1x0cmV0dXJuIChwdGVfcHJlc2VudChlbnRyeSkgXHUwMDI2XHUwMDI2IHB0ZV95b3VuZyhlbnRyeSkpIHx8XG4rXHRcdCFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XG4rXHRcdG1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHZtYS1cdTAwM2V2bV9tbSwgYWRkcik7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGJvb2wgZGFtb25faHVnZXRsYl95b3VuZyhwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rI2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4rXG4rc3RhdGljIGJvb2wgZGFtb25fcHRlX3lvdW5nKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cHRlX3QgZW50cnkgPSBwdGVwX2dldChwdGUpO1xuK1xuK1x0LypcbitcdCAqIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0IGFjdHVhbGx5IG1hcFxuK1x0ICogcGFnZXMgYXJlIFwib2xkXCIgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4gVGhlIE1NVSBub3RpZmllciB0YWtlcyBjYXJlXG4rXHQgKiBvZiBhbnkgZGV2aWNlIGFzcGVjdHMuXG4rXHQgKi9cbitcdHJldHVybiAocHRlX3ByZXNlbnQoZW50cnkpIFx1MDAyNlx1MDAyNiBwdGVfeW91bmcoZW50cnkpKSB8fFxuK1x0XHQhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuK1x0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtXHUwMDNldm1fbW0sIGFkZHIpO1xuK31cbitcbiBzdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKVxuIHtcbiBcdGJvb2wgKmFjY2Vzc2VkID0gYXJnO1xuIFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHIsIDApO1xuLVx0cHRlX3QgcHRlO1xuIFxuIFx0KmFjY2Vzc2VkID0gZmFsc2U7XG4gXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbiBcdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbiBcdFx0aWYgKHB2bXcucHRlKSB7XG4tXHRcdFx0cHRlID0gcHRlcF9nZXQocHZtdy5wdGUpO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsIHRoYXRcbi1cdFx0XHQgKiBhY3R1YWxseSBtYXAgcGFnZXMgYXJlIFwib2xkXCIgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS5cbi1cdFx0XHQgKiBUaGUgTU1VIG5vdGlmaWVyIHRha2VzIGNhcmUgb2YgYW55IGRldmljZSBhc3BlY3RzLlxuLVx0XHRcdCAqL1xuLVx0XHRcdCphY2Nlc3NlZCA9IChwdGVfcHJlc2VudChwdGUpIFx1MDAyNlx1MDAyNiBwdGVfeW91bmcocHRlKSkgfHxcbi1cdFx0XHRcdCFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XG4tXHRcdFx0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyh2bWEtXHUwMDNldm1fbW0sIGFkZHIpO1xuK1x0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuK1x0XHRcdFx0KmFjY2Vzc2VkID0gZGFtb25faHVnZXRsYl95b3VuZyhwdm13LnB0ZSwgdm1hLFxuK1x0XHRcdFx0XHRcdGFkZHIsIGZvbGlvKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHQqYWNjZXNzZWQgPSBkYW1vbl9wdGVfeW91bmcocHZtdy5wdGUsIHZtYSxcbitcdFx0XHRcdFx0XHRhZGRyLCBmb2xpbyk7XG4gXHRcdH0gZWxzZSB7XG4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0XHRcdHBtZF90IHBtZCA9IHBtZHBfZ2V0KHB2bXcucG1kKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmggYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbmluZGV4IDM4ZDI5NTQ4OGZhMTguLjE3MmYwZjE3YzRhODQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uaFxuQEAgLTYsOSArNiwxOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RhbW9uLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XG4rc3RydWN0IGZvbGlvICpkYW1vbl9nZXRfbW9uaXRvcl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbik7XG4gXG4gdm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xuIHZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuK3ZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rfVxuKyNlbmRpZlx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuIHZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggNWM2YzNhNTk3ZmQwYi4uZWQ3YjdmMzEyOTFhMCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0zNyw3ICszNyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2NvcmVfYWRkcihcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcbiB7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X21vbml0b3JfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcbiBcbiBcdGlmICghZm9saW8pXG4gXHRcdHJldHVybjtcbkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXG4gc3RhdGljIGJvb2wgZGFtb25fcGFfeW91bmcocGh5c19hZGRyX3QgcGFkZHIpXG4ge1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihwYWRkcikpO1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRhbW9uX2dldF9tb25pdG9yX2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XG4gXHRib29sIGFjY2Vzc2VkO1xuIFxuIFx0aWYgKCFmb2xpbylcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggMDY0ODQwMGIyZDY1Yi4uMTUzNzlkOTg0Njg5ZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC0yOTMsMzMgKzI5Myw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbi1zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi17XG4tXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcbi1cdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuLVx0dW5zaWduZWQgbG9uZyBwc2l6ZSA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4tXG4tXHRmb2xpb19nZXQoZm9saW8pO1xuLVxuLVx0aWYgKHB0ZV95b3VuZyhlbnRyeSkpIHtcbi1cdFx0cmVmZXJlbmNlZCA9IHRydWU7XG4tXHRcdGVudHJ5ID0gcHRlX21rb2xkKGVudHJ5KTtcbi1cdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIGVudHJ5LCBwc2l6ZSk7XG4tXHR9XG4tXG4tXHRpZiAobW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKG1tLCBhZGRyLFxuLVx0XHRcdFx0ICAgICBhZGRyICsgaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSkpXG4tXHRcdHJlZmVyZW5jZWQgPSB0cnVlO1xuLVxuLVx0aWYgKHJlZmVyZW5jZWQpXG4tXHRcdGZvbGlvX3NldF95b3VuZyhmb2xpbyk7XG4tXG4tXHRmb2xpb19zZXRfaWRsZShmb2xpbyk7XG4tXHRmb2xpb19wdXQoZm9saW8pO1xuLX1cbi1cbiBzdGF0aWMgaW50IGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToxOToxMy43MzgyNjQ5ODdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE3NzUzMDEyOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50IGZvciBEQU1PTiBIdWdldGxiIEZvbGlvIFN1cHBvcnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhpcyBwYXRjaCB0b3VjaGVzIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgcGFydHMgZGVhbGluZyB3aXRoIGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuIEkgc2VlIGNoYW5nZXMgYWNyb3NzIHNldmVyYWwgZmlsZXMsIGZvY3VzaW5nIG9uIGFkZGluZyBzdXBwb3J0IGZvciBodWdldGxiIGZvbGlvcyB3aXRoaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZyBhc3BlY3Qgb2YgREFNT04uXG5cblRoZSBwYXRjaCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgaG93IERBTU9OIGludGVyYWN0cyB3aXRoIGh1Z2V0bGIgcGFnZXM6IEl0IGludHJvZHVjZXMgYSBgZGFtb25fZm9saW9fYWNjZXB0YWJsZWAgZnVuY3Rpb24gdGhhdCBub3cgY29uc2lkZXJzIGh1Z2V0bGIgZm9saW9zLCBtb2RpZmllcyBgX19kYW1vbl9nZXRfZm9saW9gIHRvIHVzZSB0aGUgYWNjZXB0YWJpbGl0eSBmdW5jdGlvbiwgYW5kIHJlZmFjdG9ycyBgZGFtb25faHVnZXRsYl9ta29sZGAgdG8gYmUgc2hhcmVkLiBJdCBhbHNvIG1ha2VzIGNvcnJlc3BvbmRpbmcgYWRqdXN0bWVudHMgdG8gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMuXG5cbk5vdywgbGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZSwgSSBkb24ndCBzZWUgYW55IG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlIG9yIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3Rpbmcgb25lcyB0aGF0IHdvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBObywgdGhlIGNvZGUncyBsb2dpYyBpcyBzb3VuZC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8uIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkuXG40LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm90IGluIHRoaXMgcGF0Y2guXG5cbkkndmUgZ29uZSB0aHJvdWdoIHRoZSBjb2RlLCBwYXJ0aWN1bGFybHkgYGRhbW9uX2h1Z2V0bGJfbWtvbGRgIGFuZCBgZGFtb25fZm9saW9feW91bmdfb25lYCwgd2hpY2ggbG9vayBsaWtlIHRoZSBtb3N0IGludGVyZXN0aW5nIGNhbmRpZGF0ZXMsIGFuZCBJIGRvbid0IHNlZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiB3YXlzIHRoYXQgY291bGQgY2F1c2UgYSBwcm9ibGVtLiBWYXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5SZWdhcmRpbmcgbWVtb3J5IHNhZmV0eSwgdGhlIHJpc2tzIGhlcmUgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSdyZSBkZWFsaW5nIHdpdGggZm9saW8gcmVmY291bnRpbmcsIHBhZ2UgdGFibGUgd2Fsa3MsIGFuZCBodWdldGxiIHBhZ2UgaGFuZGxpbmc6IHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGxvY2tpbmcgaXNzdWVzLCBhbmQgZ2VuZXJhbCBNTS9wYWdpbmcgYnVncy4gSG93ZXZlciwgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHRoZSBhcHByb3ByaWF0ZSB0b29scyB0byBkZXRlY3QgdGhvc2UuIFRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgKipOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZSoqLiBLQVNBTiwgd2l0aCB0aGUgYWRkZWQgYmVuZWZpdCBvZiBMT0NLREVQLCB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMgaGVyZS4gV2UncmUgbm90IGludHJvZHVjaW5nIGFueXRoaW5nIHRoYXQgZmFsbHMgaW50byBLTVNBTidzIGRvbWFpbi4gU28sIEknbGwgZ28gYWhlYWQgYW5kIG1ha2UgdGhhdCBjYWxsLiBJIHdpbGwgc2V0IHRoZSByZXN1bHRzIHRvIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjg1LCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNToyMToxMS40OTEyODIzOTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4dGVuZHMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHRvIHN1cHBvcnQgaHVnZXRsYiBmb2xpb3MgZHVyaW5nIHBoeXNpY2FsIGFkZHJlc3MgYWNjZXNzIG1vbml0b3JpbmcgKHBhZGRyKSBhbmQgcGFnZSB0YWJsZSB3YWxrcy4gSXQgcmVmYWN0b3JzIGZvbGlvIGZldGNoaW5nIGFuZCBta29sZC95b3VuZyBoYW5kbGluZyB0byBhY2NvdW50IGZvciBodWdldGxiIGZvbGlvcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgcmV0dXJuIHZhbHVlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGxlZnQgdW5pbml0aWFsaXplZCBpbiBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLiBBbnkgbWVtb3J5IHNhZmV0eSByaXNrcyAoc3VjaCBhcyBmb2xpbyByZWZjb3VudGluZywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgcGFnZSB0YWJsZSB3YWxrIGlzc3VlcykgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRlbmRzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSB0byBzdXBwb3J0IGh1Z2V0bGIgZm9saW9zIGR1cmluZyBwaHlzaWNhbCBhZGRyZXNzIGFjY2VzcyBtb25pdG9yaW5nIChwYWRkcikgYW5kIHBhZ2UgdGFibGUgd2Fsa3MuIEl0IHJlZmFjdG9ycyBmb2xpbyBmZXRjaGluZyBhbmQgbWtvbGQveW91bmcgaGFuZGxpbmcgdG8gYWNjb3VudCBmb3IgaHVnZXRsYiBmb2xpb3MuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHJldHVybiB2YWx1ZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQgaW4gaGVhcC9zdGFjayBhbGxvY2F0aW9ucy4gQW55IG1lbW9yeSBzYWZldHkgcmlza3MgKHN1Y2ggYXMgZm9saW8gcmVmY291bnRpbmcsIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHBhZ2UgdGFibGUgd2FsayBpc3N1ZXMpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflown85pg[1] Phase: Succeeded StartedAt: 2026-09-02 15:21:22 +0000 UTC FinishedAt: 2026-09-02 15:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 15:21:22 +0000 UTC FinishedAt: 2026-09-02 15:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2] Phase: Succeeded StartedAt: 2026-09-02 15:21:22 +0000 UTC FinishedAt: 2026-09-02 19:00:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 15:21:22 +0000 UTC FinishedAt: 2026-09-02 19:00:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 15:21:22 +0000 UTC FinishedAt: 2026-09-02 15:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 15:21:22 +0000 UTC FinishedAt: 2026-09-02 15:21:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown85pg/series-workflown85pg-convert-artifact-3566773151/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 15:21:33 +0000 UTC FinishedAt: 2026-09-02 15:37:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 15:21:33 +0000 UTC FinishedAt: 2026-09-02 15:37:24 +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:*18e85525-9b97-47ec-96fa-17686961824b,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-workflown85pg/series-workflown85pg-convert-artifact-3566773151/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": "8973daca-0f22-4c2b-9881-d023e22a2c57", "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-workflown85pg/series-workflown85pg-build-action-2514556325/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 15:21:33 +0000 UTC FinishedAt: 2026-09-02 15:37: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:*18e85525-9b97-47ec-96fa-17686961824b,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-workflown85pg/series-workflown85pg-convert-artifact-3566773151/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": "8973daca-0f22-4c2b-9881-d023e22a2c57", "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-workflown85pg/series-workflown85pg-build-action-2514556325/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 15:37:24 +0000 UTC FinishedAt: 2026-09-02 15:37:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 15:37:24 +0000 UTC FinishedAt: 2026-09-02 15:37:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 15:37:24 +0000 UTC FinishedAt: 2026-09-02 15:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 15:37:24 +0000 UTC FinishedAt: 2026-09-02 15:37:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown85pg/series-workflown85pg-convert-artifact-2069549870/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 15:37:34 +0000 UTC FinishedAt: 2026-09-02 15:39:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 15:37:34 +0000 UTC FinishedAt: 2026-09-02 15:39:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8973daca-0f22-4c2b-9881-d023e22a2c57,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-workflown85pg/series-workflown85pg-build-action-2514556325/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-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 15:39:18 +0000 UTC FinishedAt: 2026-09-02 15:39:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 15:39:18 +0000 UTC FinishedAt: 2026-09-02 15:39:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 15:39:18 +0000 UTC FinishedAt: 2026-09-02 15:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 15:39:18 +0000 UTC FinishedAt: 2026-09-02 15:56:18 +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:*18e85525-9b97-47ec-96fa-17686961824b,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-workflown85pg/series-workflown85pg-convert-artifact-2069549870/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": "6b061735-7a35-4b00-bf71-895adbb1697e", "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-workflown85pg/series-workflown85pg-build-action-2610137666/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 15:39:18 +0000 UTC FinishedAt: 2026-09-02 15:56:08 +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:*18e85525-9b97-47ec-96fa-17686961824b,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-workflown85pg/series-workflown85pg-convert-artifact-2069549870/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": "6b061735-7a35-4b00-bf71-895adbb1697e", "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-workflown85pg/series-workflown85pg-build-action-2610137666/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 15:56:18 +0000 UTC FinishedAt: 2026-09-02 15:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 15:56:18 +0000 UTC FinishedAt: 2026-09-02 15:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 15:56:18 +0000 UTC FinishedAt: 2026-09-02 15:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 15:56:18 +0000 UTC FinishedAt: 2026-09-02 15:58:00 +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:*6b061735-7a35-4b00-bf71-895adbb1697e,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-workflown85pg/series-workflown85pg-build-action-2610137666/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-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 15:58:10 +0000 UTC FinishedAt: 2026-09-02 19:00:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 15:58:10 +0000 UTC FinishedAt: 2026-09-02 19:00:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*8973daca-0f22-4c2b-9881-d023e22a2c57,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6b061735-7a35-4b00-bf71-895adbb1697e,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-workflown85pg/series-workflown85pg-build-action-2514556325/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-workflown85pg/series-workflown85pg-build-action-2610137666/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 15:58:10 +0000 UTC FinishedAt: 2026-09-02 15:58:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 15:58:10 +0000 UTC FinishedAt: 2026-09-02 15:58:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown85pg/series-workflown85pg-convert-artifact-2439226067/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 15:58:10 +0000 UTC FinishedAt: 2026-09-02 15:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 15:58:10 +0000 UTC FinishedAt: 2026-09-02 15:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 15:58:10 +0000 UTC FinishedAt: 2026-09-02 15:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 15:58:20 +0000 UTC FinishedAt: 2026-09-02 19:00:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflown85pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_get_monitor_folio","damon_hugetlb_mkold","damon_folio_mkold","damon_folio_young","damon_get_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f7e337d9757e473b892fcc071de0bc1a5b094620","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_VADDR","DAMON_SYSFS","HUGETLBFS","HUGETLB_PAGE"],"series_id":"793b6fd8-c2eb-4da2-9ebf-5f27ccf7ee3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 15:58:20 +0000 UTC FinishedAt: 2026-09-02 18:59:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8973daca-0f22-4c2b-9881-d023e22a2c57,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6b061735-7a35-4b00-bf71-895adbb1697e,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-workflown85pg/series-workflown85pg-build-action-2514556325/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-workflown85pg/series-workflown85pg-build-action-2610137666/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-workflown85pg/series-workflown85pg-convert-artifact-2439226067/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,}