Name: series-workflowh98zf Phase: Succeeded StartedAt: 2026-06-29 16:34:06 +0000 UTC FinishedAt: 2026-06-29 20:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[0] Phase: Succeeded StartedAt: 2026-06-29 16:34:06 +0000 UTC FinishedAt: 2026-06-29 16:44:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 16:34:06 +0000 UTC FinishedAt: 2026-06-29 16:44:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "9P_FS", "CEPH_FS", "FUSE_FS", "GFS2_FS", "NFS_FS", "CIFS", "VBOXSF_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "9P_FS", "CEPH_FS", "FUSE_FS", "GFS2_FS", "NFS_FS", "CIFS", "VBOXSF_FS" ], "series_id": "19eccb0d-a373-4e2f-9de6-7085934482de" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "path_openat", "do_sys_open", "vfs_mkdir", "vfs_create", "dentry_create", "filename_unlinkat", "filename_renameat2", "cifs_atomic_open", "v9fs_vfs_atomic_open", "v9fs_vfs_atomic_open_dotl", "ceph_atomic_open", "fuse_atomic_open", "gfs2_atomic_open", "nfs_atomic_open", "nfs_atomic_open_v23", "vboxsf_dir_atomic_open" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7LAogICAgJiMzNDtHRlMyX0ZTJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O1ZCT1hTRl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhdGhfb3BlbmF0JiMzNDssCiAgICAmIzM0O2RvX3N5c19vcGVuJiMzNDssCiAgICAmIzM0O3Zmc19ta2RpciYjMzQ7LAogICAgJiMzNDt2ZnNfY3JlYXRlJiMzNDssCiAgICAmIzM0O2RlbnRyeV9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfdW5saW5rYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfcmVuYW1lYXQyJiMzNDssCiAgICAmIzM0O2NpZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7djlmc192ZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7djlmc192ZnNfYXRvbWljX29wZW5fZG90bCYjMzQ7LAogICAgJiMzNDtjZXBoX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2Z1c2VfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7Z2ZzMl9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtuZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuX3YyMyYjMzQ7LAogICAgJiMzNDt2Ym94c2ZfZGlyX2F0b21pY19vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVkZTIGxheWVyLCBhbGxvd2luZyBvcGVuYXQoKSB3aXRoIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSB0byBjcmVhdGUgZGlyZWN0b3JpZXMuIEl0IG1vZGlmaWVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIChmcy9uYW1laS5jLCBmcy9vcGVuLmMpIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKDlwLCBjZXBoLCBmdXNlLCBnZnMyLCBuZnMsIHNtYiwgdmJveHNmKSB0byBoYW5kbGUgdGhlIG5ldyBiZWhhdmlvciBpbiB0aGVpciBhdG9taWNfb3BlbiBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBpbiBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGZpbGUgb3BlbmluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU4Y2RhZDdjMTJjZmE1OTgwOTA2NjU2NTFjMzMzNDlkNDQwYjFkYWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxNjo0MjoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jXG5pbmRleCA1NzgzZDAzMzZmOTZhYy4uYmI1NTVlNWJhMjYxNTAgMTAwNjQ0XG4tLS0gYS9mcy85cC92ZnNfaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlLmNcbkBAIC03NzcsNiAmIzQzOzc3Nyw5IEBAIHY5ZnNfdmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0aW50IHA5X29tb2RlO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbiYjNDM7XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4mIzQzO1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTtcbiBcdFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxuZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG5pbmRleCBmNzM5NmQyMGNiNmNkYy4uZmYzZmFjYjQyMGMyMjQgMTAwNjQ0XG4tLS0gYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG5AQCAtMjM5LDYgJiM0MzsyMzksOSBAQCB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzO1xuIFx0c3RydWN0IHBvc2l4X2FjbCAqcGFjbCA9IE5VTEwsICpkYWNsID0gTlVMTDtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihmbGFncykpXG4mIzQzO1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9mcy9jZXBoL2ZpbGUuYyBiL2ZzL2NlcGgvZmlsZS5jXG5pbmRleCA3MTE2MWYyYjIxNTEzNi4uZTc5YWJkYmQ5ZjYxZTkgMTAwNjQ0XG4tLS0gYS9mcy9jZXBoL2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2VwaC9maWxlLmNcbkBAIC04MTEsNiAmIzQzOzgxMSw5IEBAIGludCBjZXBoX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksXG4gXHQgICAgICBkX3VuaGFzaGVkKGRlbnRyeSkgPyBcJiMzNDt1bmhhc2hlZFwmIzM0OyA6IFwmIzM0O2hhc2hlZFwmIzM0OywgZmxhZ3MsIG1vZGUpO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbiYjNDM7XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4mIzQzO1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBOQU1FX01BWClcbiBcdFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmNcbmluZGV4IDBlMmExMDM5ZmE0M2VhLi5lMDE4Njk1NjVkNWVlNSAxMDA2NDRcbi0tLSBhL2ZzL2Z1c2UvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Z1c2UvZGlyLmNcbkBAIC05MzUsNiAmIzQzOzkzNSw5IEBAIHN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksXG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuIFx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZnVzZV9pc19iYWQoZGlyKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jXG5pbmRleCA4YTc3Nzk0YmJkNGFmYy4uOTg1OWFlMDM0MWE5OWUgMTAwNjQ0XG4tLS0gYS9mcy9nZnMyL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2dmczIvaW5vZGUuY1xuQEAgLTEzODcsNiAmIzQzOzEzODcsOSBAQCBzdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB7XG4gXHRib29sIGV4Y2wgPSAhIShmbGFncyBcdTAwMjYgT19FWENMKTtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihmbGFncykpXG4mIzQzO1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKmQgPSBfX2dmczJfbG9va3VwKGRpciwgZGVudHJ5LCBmaWxlKTtcbiBcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpIHtcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggNWNjOWYwZjQ2NmI4MzAuLmZlZjgyNmMwNGViNTA3IDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuY1xuQEAgLTEzODIsMTMgJiM0MzsxMzgyLDEyIEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcbiBcbiAvKipcbiAgKiBtYXlfY3JlYXRlX2luX3N0aWNreSAtIENoZWNrIHdoZXRoZXIgYW4gT19DUkVBVCBvcGVuIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxuLSAqXHRcdFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHlcbi0gKlx0XHRcdCAgZXhpc3QuXG4mIzQzOyAqXHRcdFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90XG4gICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxuICAqIEBpbm9kZTogdGhlIGlub2RlIG9mIHRoZSBmaWxlIHRvIG9wZW5cbiAgKlxuLSAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxuJiM0MzsgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46XG4gICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZFxuICAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xuICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XG5AQCAtMTQxNiw2ICYjNDM7MTQxNSwxNCBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdGlmIChsaWtlbHkoIShkaXJfbW9kZSBcdTAwMjYgU19JU1ZUWCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreVxuJiM0MztcdCAqIGZvbGRlcnMuIFRoZXJlZm9yZSwgZm9yIHRoZSBTX0lTRElSIGNhc2UsIGRpc2FibGluZ1xuJiM0MztcdCAqIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBpcyBub3QgZW5vdWdoIHRvIGFsbG93IGNyZWF0aW5nIGFcbiYjNDM7XHQgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzXG4mIzQzO1x0ICogbm90IGV4cGVjdGluZyB0aGF0IE9fQ1JFQVR8T19ESVJFQ1RPUlkgaXMgcG9zc2libGUgb24gbmV3ZXJcbiYjNDM7XHQgKiBrZXJuZWxzLlxuJiM0MztcdCAqL1xuIFx0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcilcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTQ0Nyw2ICYjNDM7MTQ1NCwxMiBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdFx0XHRcdFx0ICAgICAgXCYjMzQ7c3RpY2t5X2NyZWF0ZV9yZWd1bGFyXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIgXHUwMDNlPSAyIFx1MDAyNlx1MDAyNiBTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiYjNDM7XHRcdFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcJiMzNDtzdGlja3lfY3JlYXRlX2RpclwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUFDQ0VTO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjc4MSw5ICYjNDM7Mjc5NCwxNCBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncylcbiBcdHJldHVybiBzO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoY29uc3Qgc3RydWN0IHFzdHIgbGFzdClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoYm9vbClsYXN0Lm5hbWVbbGFzdC5sZW5dO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbG9va3VwX2xhc3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4ge1xuLVx0aWYgKG5kLVx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXHUwMDI2XHUwMDI2IG5kLVx1MDAzZWxhc3QubmFtZVtuZC1cdTAwM2VsYXN0Lmxlbl0pXG4mIzQzO1x0aWYgKG5kLVx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXHUwMDI2XHUwMDI2IHRyYWlsaW5nX3NsYXNoZXMobmQtXHUwMDNlbGFzdCkpXG4gXHRcdG5kLVx1MDAzZWZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZO1xuIFxuIFx0cmV0dXJuIHdhbGtfY29tcG9uZW50KG5kLCBXQUxLX1RSQUlMSU5HKTtcbkBAIC00MTY0LDYgJiM0Mzs0MTgyLDI0IEBAIHN0YXRpYyBpbmxpbmUgdW1vZGVfdCB2ZnNfcHJlcGFyZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0cmV0dXJuIG1vZGU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO2ludCB2ZnNfY3JlYXRlX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdCAgICAgICB1bW9kZV90IG1vZGUsIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICpkaXIgPSBkX2lub2RlKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4mIzQzO1x0aW50IGVycm9yO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuJiM0MztcdGVycm9yID0gZGlyLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7XG4mIzQzO1x0aWYgKCFlcnJvcilcbiYjNDM7XHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB2ZnNfY3JlYXRlIC0gY3JlYXRlIG5ldyBmaWxlXG4gICogQGlkbWFwOlx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuQEAgLTQxOTYsMTMgJiM0Mzs0MjMyLDggQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4tXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0cmV0dXJuIGVycm9yO1xuLVx0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCB0cnVlKTtcbi1cdGlmICghZXJyb3IpXG4tXHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4tXHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHZmc19jcmVhdGUpO1xuIFxuQEAgLTQzMTksMjEgJiM0Mzs0MzUwLDQwIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9wZW5fdG9fbmFtZWlfZmxhZ3MoaW50IGZsYWcpXG4gXG4gc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0Y29uc3Qgc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdHVtb2RlX3QgbW9kZSlcbiYjNDM7XHRcdFx0dW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpXG4ge1xuLVx0aW50IGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4mIzQzO1x0c3RydWN0IGlub2RlICpkaXJfaW5vZGUgPSBkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4mIzQzO1x0aW50IGVycm9yO1xuJiM0MztcbiYjNDM7XHRpZiAoY3JlYXRlX2RpcilcbiYjNDM7XHRcdGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuIFx0aWYgKCFmc3VpZGdpZF9oYXNfbWFwcGluZyhkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfc2IsIGlkbWFwKSlcbiBcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXG4tXHRlcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSxcbi1cdFx0XHRcdCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4mIzQzO1x0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBkaXJfaW5vZGUsIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0aWYgKGNyZWF0ZV9kaXIpXG4mIzQzO1x0XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB1bW9kZV90IG9fY3JlYXRlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY3JlYXRlX2RpcilcbiYjNDM7XHRcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIDApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XG4gfVxuIFxuIC8qXG5AQCAtNDM0Nyw3ICYjNDM7NDM5Nyw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuICAqIGJlIHNldC4gIFRoZSBjYWxsZXIgd2lsbCBuZWVkIHRvIHBlcmZvcm0gdGhlIG9wZW4gdGhlbXNlbHZlcy4gIEBwYXRoIHdpbGxcbiAgKiBoYXZlIGJlZW4gdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGRlbnRyeS4gIFRoaXMgbWF5IGJlIG5lZ2F0aXZlLlxuICAqXG4tICogUmV0dXJucyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICogUmV0dXJucyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS4gT24gZXJyb3IgdGhlIHJlZiB0byBkZW50cnkgaXMga2VwdC5cbiAgKi9cbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0XHRcdCAgc3RydWN0IGZpbGUgKmZpbGUsXG5AQCAtNDM1OSw2ICYjNDM7NDQwOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5XG4gXG4gXHRmaWxlLVx1MDAzZV9fZl9wYXRoLmRlbnRyeSA9IERFTlRSWV9OT1RfU0VUO1xuIFx0ZmlsZS1cdTAwM2VfX2ZfcGF0aC5tbnQgPSBwYXRoLVx1MDAzZW1udDtcbiYjNDM7XG4gXHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWF0b21pY19vcGVuKGRpciwgZGVudHJ5LCBmaWxlLFxuIFx0XHRcdFx0ICAgICAgIG9wZW5fdG9fbmFtZWlfZmxhZ3Mob3Blbl9mbGFnKSwgbW9kZSk7XG4gXHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XG5AQCAtNDM3MSwyMSAmIzQzOzQ0MjIsMzkgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlcbiBcdFx0fSBlbHNlIGlmIChXQVJOX09OKGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeSA9PSBERU5UUllfTk9UX1NFVCkpIHtcbiBcdFx0XHRlcnJvciA9IC1FSU87XG4gXHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBkZW50cnkgKm9sZCA9IGRlbnRyeTtcbiYjNDM7XHRcdFx0Ym9vbCByZXBsYWNlZCA9IGZhbHNlO1xuIFx0XHRcdGlmIChmaWxlLVx1MDAzZWZfcGF0aC5kZW50cnkpIHtcbi1cdFx0XHRcdGRwdXQoZGVudHJ5KTtcbiBcdFx0XHRcdGRlbnRyeSA9IGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeTtcbiYjNDM7XHRcdFx0XHRyZXBsYWNlZCA9IGRlbnRyeSAhPSBvbGQ7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICh1bmxpa2VseShkX2lzX25lZ2F0aXZlKGRlbnRyeSkpKVxuJiM0MztcdFx0XHRpZiAodW5saWtlbHkoZF9pc19uZWdhdGl2ZShkZW50cnkpKSkge1xuJiM0MztcdFx0XHRcdC8qIERvIG5vdCBkcm9wIG9yaWdpbmFsIGRlbnRyeSByZWYgb24gZXJyb3IgKi9cbiYjNDM7XHRcdFx0XHRpZiAocmVwbGFjZWQpXG4mIzQzO1x0XHRcdFx0XHRkcHV0KGRlbnRyeSk7XG4gXHRcdFx0XHRlcnJvciA9IC1FTk9FTlQ7XG4mIzQzO1x0XHRcdH0gZWxzZSBpZiAocmVwbGFjZWQpIHtcbiYjNDM7XHRcdFx0XHRkcHV0KG9sZCk7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuJiM0MztcbiBcdGlmIChlcnJvcikge1xuLVx0XHRkcHV0KGRlbnRyeSk7XG4gXHRcdGRlbnRyeSA9IEVSUl9QVFIoZXJyb3IpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpXG4mIzQzO1x0XHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4mIzQzO1x0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRClcbiYjNDM7XHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbiBcdH1cbiYjNDM7XG4gXHRyZXR1cm4gZGVudHJ5O1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZVxuJiM0MztzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7XG4gLypcbiAgKiBMb29rIHVwIGFuZCBtYXliZSBjcmVhdGUgYW5kIG9wZW4gdGhlIGxhc3QgY29tcG9uZW50LlxuICAqXG5AQCAtNDQxMiw2ICYjNDM7NDQ4MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4gXHRpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvciA9IDA7XG4gXHR1bW9kZV90IG1vZGUgPSBvcC1cdTAwM2Vtb2RlO1xuJiM0MztcdGJvb2wgY3JlYXRlX2RpciA9IE9fSVNfTUtESVIob3Blbl9mbGFnKTtcbiBcbiBcdGlmICh1bmxpa2VseShJU19ERUFERElSKGRpcl9pbm9kZSkpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbkBAIC00NDM3LDcgJiM0Mzs0NTA3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0ZGVudHJ5ID0gTlVMTDtcbiBcdH1cbiBcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSkge1xuLVx0XHQvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZl9vcC1cdTAwM2VvcGVuICovXG4mIzQzO1x0XHQvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZG9fb3BlbigpLiAqL1xuIFx0XHRyZXR1cm4gZGVudHJ5O1xuIFx0fVxuIFxuQEAgLTQ0NTksMjEgJiM0Mzs0NTI5LDM1IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTClcbiBcdFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19UUlVOQztcbi1cdFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpci1cdTAwM2VkX2lub2RlLCBtb2RlLCBtb2RlLCBtb2RlKTtcbiYjNDM7XHRcdG1vZGUgPSBvX2NyZWF0ZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIGNyZWF0ZV9kaXIpO1xuIFx0XHRpZiAobGlrZWx5KGdvdF93cml0ZSkpXG4gXHRcdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBcdTAwMjZuZC1cdTAwM2VwYXRoLFxuLVx0XHRcdFx0XHRcdCAgICBkZW50cnksIG1vZGUpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgZGVudHJ5LCBtb2RlLCBjcmVhdGVfZGlyKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGNyZWF0ZV9lcnJvciA9IC1FUk9GUztcbiYjNDM7XHRcdC8qIFJlZnVzZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdGhyb3VnaCBhIGRhbmdsaW5nICh0cmFpbGluZylcbiYjNDM7XHRcdCAqIHN5bWxpbmsuIEZvciByZWd1bGFyIGZpbGVzIHRoaXMgaGFzIGJlZW4gYWxsb3dlZCBoaXN0b3JpY2FsbHlcbiYjNDM7XHRcdCAqIG9uIE9fQ1JFQVQgd2l0aG91dCBPX0VYQ0wuICovXG4mIzQzO1x0XHRpZiAodW5saWtlbHkobmQtXHUwMDNlZGVwdGgpIFx1MDAyNlx1MDAyNiBjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhY3JlYXRlX2Vycm9yKVxuJiM0MztcdFx0XHRjcmVhdGVfZXJyb3IgPSAtRUxPT1A7XG4gXHR9XG4gXHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19DUkVBVDtcbiBcdGlmIChkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VhdG9taWNfb3Blbikge1xuJiM0MztcdFx0c3RydWN0IGRlbnRyeSAqb3JpZ19kZW50cnkgPSBkZW50cnk7XG4gXHRcdGlmIChuZC1cdTAwM2VmbGFncyBcdTAwMjYgTE9PS1VQX0RJUkVDVE9SWSlcbiBcdFx0XHRvcGVuX2ZsYWcgfD0gT19ESVJFQ1RPUlk7XG4gXHRcdGRlbnRyeSA9IGF0b21pY19vcGVuKFx1MDAyNm5kLVx1MDAzZXBhdGgsIGRlbnRyeSwgZmlsZSwgb3Blbl9mbGFnLCBtb2RlKTtcbi1cdFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXHUwMDI2XHUwMDI2IGRlbnRyeSA9PSBFUlJfUFRSKC1FTk9FTlQpKVxuLVx0XHRcdGRlbnRyeSA9IEVSUl9QVFIoY3JlYXRlX2Vycm9yKTtcbiYjNDM7XHRcdGVycm9yID0gUFRSX0VSUl9PUl9aRVJPKGRlbnRyeSk7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoZXJyb3IpKVxuJiM0MztcdFx0XHRkZW50cnkgPSBvcmlnX2RlbnRyeTsgLyogYXRvbWljX29wZW4oKSBrZWVwcyByZWYgb24gZXJyb3IgKi9cbiYjNDM7XHRcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFx1MDAyNlx1MDAyNiBlcnJvciA9PSAtRU5PRU5UKSB7XG4mIzQzO1x0XHRcdC8qIFNob3VsZCBoYXZlIGRvbmUgYSBjcmVhdGUsIGJ1dCB3ZSBhbHJlYWR5IGVycm9yZWQuICovXG4mIzQzO1x0XHRcdGF1ZGl0X2lub2RlX2NoaWxkKGRpci1cdTAwM2VkX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTtcbiYjNDM7XHRcdFx0ZXJyb3IgPSBjcmVhdGVfZXJyb3I7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoZXJyb3IpKVxuJiM0MztcdFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0XHRyZXR1cm4gZGVudHJ5O1xuIFx0fVxuIFxuQEAgLTQ0OTAsMzAgJiM0Mzs0NTc0LDQ0IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0ZGVudHJ5ID0gcmVzO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1x0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlIHx8ICEob3AtXHUwMDNlb3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSkge1xuJiM0MztcdFx0LyogTm8gbmVlZCB0byBjcmVhdGUgYSBmaWxlLiBJZiBsb29rdXAgcmV0dXJuZWQgYSBwb3NpdGl2ZVxuJiM0MztcdFx0ICogZGVudHJ5LCB0aGUgZmlsZSB3aWxsIGJlIG9wZW5lZCBpbiBkb19vcGVuKCkuICovXG4mIzQzO1x0XHRyZXR1cm4gZGVudHJ5O1xuJiM0MztcdH1cbiBcbi1cdC8qIE5lZ2F0aXZlIGRlbnRyeSwganVzdCBjcmVhdGUgdGhlIGZpbGUgKi9cbi1cdGlmICghZGVudHJ5LVx1MDAzZWRfaW5vZGUgXHUwMDI2XHUwMDI2IChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpKSB7XG4tXHRcdC8qIGJ1dCBicmVhayB0aGUgZGlyZWN0b3J5IGxlYXNlIGZpcnN0ISAqL1xuLVx0XHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXJfaW5vZGUsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XG4tXHRcdGlmIChlcnJvcilcbi1cdFx0XHRnb3RvIG91dF9kcHV0O1xuJiM0MztcdC8qIE5lZ2F0aXZlIGRlbnRyeSB3aXRoIE9fQ1JFQVQgZmxhZyBzZXQgKi9cbiYjNDM7XHRhdWRpdF9pbm9kZV9jaGlsZChkaXItXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XG4gXG4tXHRcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XG4tXHRcdGF1ZGl0X2lub2RlX2NoaWxkKGRpcl9pbm9kZSwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XG4tXHRcdGlmICghZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKSB7XG4tXHRcdFx0ZXJyb3IgPSAtRUFDQ0VTO1xuLVx0XHRcdGdvdG8gb3V0X2RwdXQ7XG4tXHRcdH1cbi1cbi1cdFx0ZXJyb3IgPSBkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxuLVx0XHRcdFx0XHRcdG1vZGUsIG9wZW5fZmxhZyBcdTAwMjYgT19FWENMKTtcbi1cdFx0aWYgKGVycm9yKVxuLVx0XHRcdGdvdG8gb3V0X2RwdXQ7XG4tXHR9XG4tXHRpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSBcdTAwMjZcdTAwMjYgIWRlbnRyeS1cdTAwM2VkX2lub2RlKSB7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikpIHtcbiYjNDM7XHRcdC8qIFNob3VsZCBoYXZlIGRvbmUgYSBjcmVhdGUsIGJ1dCB3ZSBhbHJlYWR5IGVycm9yZWQgKi9cbiBcdFx0ZXJyb3IgPSBjcmVhdGVfZXJyb3I7XG4gXHRcdGdvdG8gb3V0X2RwdXQ7XG4gXHR9XG4mIzQzO1xuJiM0MztcdGlmICgoY3JlYXRlX2RpciBcdTAwMjZcdTAwMjYgIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKVxuJiM0MztcdCAgICB8fCAoIWNyZWF0ZV9kaXIgXHUwMDI2XHUwMDI2ICFkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUpKSB7XG4mIzQzO1x0XHRlcnJvciA9IC1FQUNDRVM7XG4mIzQzO1x0XHRnb3RvIG91dF9kcHV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGNyZWF0ZV9kaXIpIHtcbiYjNDM7XHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHJlcykpIHtcbiYjNDM7XHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHJlcyk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRlcnJvciA9IDA7XG4mIzQzO1x0XHRcdGRlbnRyeSA9IHJlcztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZXJyb3IgPSB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBvdXRfZHB1dDtcbiYjNDM7XG4mIzQzO1x0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcbiYjNDM7XG4gXHRyZXR1cm4gZGVudHJ5O1xuIFxuIG91dF9kcHV0OlxuQEAgLTQ1MjEsMTcgJiM0Mzs0NjE5LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRyZXR1cm4gRVJSX1BUUihlcnJvcik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuLXtcbi1cdHJldHVybiAoYm9vbCluZC1cdTAwM2VsYXN0Lm5hbWVbbmQtXHUwMDNlbGFzdC5sZW5dO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXG4ge1xuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuIFxuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkge1xuLVx0XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpXG4mIzQzO1x0XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZC1cdTAwM2VsYXN0KSBcdTAwMjZcdTAwMjYgIShvcGVuX2ZsYWcgXHUwMDI2IE9fRElSRUNUT1JZKSlcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlTRElSKTtcbiBcbiBcdFx0LyogRG9uJiMzOTt0IGJvdGhlciBvbiBhbiBPX0VYQ0wgY3JlYXRlICovXG5AQCAtNDUzOSw3ICYjNDM7NDYzMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZylcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcbiYjNDM7XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZC1cdTAwM2VsYXN0KSlcbiBcdFx0bmQtXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XG4gXG4gXHRkZW50cnkgPSBsb29rdXBfZmFzdChuZCk7XG5AQCAtNDYwMiwxNiAmIzQzOzQ2OTUsMTIgQEAgc3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0XHQgKi9cbiBcdH1cbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpXG4tXHRcdGlub2RlX2xvY2soZGlyLVx1MDAzZWRfaW5vZGUpO1xuJiM0MztcdFx0aW5vZGVfbG9ja19uZXN0ZWQoZGlyLVx1MDAzZWRfaW5vZGUsIElfTVVURVhfUEFSRU5UKTtcbiBcdGVsc2VcbiBcdFx0aW5vZGVfbG9ja19zaGFyZWQoZGlyLVx1MDAzZWRfaW5vZGUpO1xuJiM0MztcbiBcdGRlbnRyeSA9IGxvb2t1cF9vcGVuKG5kLCBmaWxlLCBvcCwgZ290X3dyaXRlLCBcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xuLVx0aWYgKCFJU19FUlIoZGVudHJ5KSkge1xuLVx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpXG4tXHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpci1cdTAwM2VkX2lub2RlLCBkZW50cnkpO1xuLVx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRClcbi1cdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuLVx0fVxuJiM0MztcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpXG4gXHRcdGlub2RlX3VubG9jayhkaXItXHUwMDNlZF9pbm9kZSk7XG4gXHRlbHNlXG5AQCAtNDY2OSw4ICYjNDM7NDc1OCw5IEBAIHN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbiBcdFx0aWYgKChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTCkgXHUwMDI2XHUwMDI2ICEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuLVx0XHRpZiAoZF9pc19kaXIobmQtXHUwMDNlcGF0aC5kZW50cnkpKVxuJiM0MztcdFx0aWYgKCEob3Blbl9mbGFnIFx1MDAyNiBPX0RJUkVDVE9SWSkgXHUwMDI2XHUwMDI2IGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbiBcdFx0XHRyZXR1cm4gLUVJU0RJUjtcbiYjNDM7XG4gXHRcdGVycm9yID0gbWF5X2NyZWF0ZV9pbl9zdGlja3koaWRtYXAsIG5kLFxuIFx0XHRcdFx0XHQgICAgIGRfYmFja2luZ19pbm9kZShuZC1cdTAwM2VwYXRoLmRlbnRyeSkpO1xuIFx0XHRpZiAodW5saWtlbHkoZXJyb3IpKVxuQEAgLTQ5NDYsNyAmIzQzOzUwMzYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmlsZW5hbWVfY3JlYXRlKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSxcbiBcdCAqIERvIHRoZSBmaW5hbCBsb29rdXAuICBTdXBwcmVzcyAmIzM5O2NyZWF0ZSYjMzk7IGlmIHRoZXJlIGlzIGEgdHJhaWxpbmdcbiBcdCAqICYjMzk7LyYjMzk7LCBhbmQgYSBkaXJlY3Rvcnkgd2FzbiYjMzk7dCByZXF1ZXN0ZWQuXG4gXHQgKi9cbi1cdGlmIChsYXN0Lm5hbWVbbGFzdC5sZW5dIFx1MDAyNlx1MDAyNiAhd2FudF9kaXIpXG4mIzQzO1x0aWYgKHRyYWlsaW5nX3NsYXNoZXMobGFzdCkgXHUwMDI2XHUwMDI2ICF3YW50X2RpcilcbiBcdFx0Y3JlYXRlX2ZsYWdzIFx1MDAyNj0gfkxPT0tVUF9DUkVBVEU7XG4gXHRkZW50cnkgPSBzdGFydF9kaXJvcChwYXRoLVx1MDAzZWRlbnRyeSwgXHUwMDI2bGFzdCwgcmV2YWxfZmxhZyB8IGNyZWF0ZV9mbGFncyk7XG4gXHRpZiAoSVNfRVJSKGRlbnRyeSkpXG5AQCAtNTA0MSwzMiAmIzQzOzUxMzEsMTcgQEAgc3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLFxuIFx0XHRwYXRoLVx1MDAzZWRlbnRyeSA9IGRpcjtcbiBcdFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbiBcbi1cdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUsIC8qY3JlYXRlX2Rpcj0qLyBmYWxzZSk7XG4gXHRcdGlmIChjcmVhdGVfZXJyb3IpXG4gXHRcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiBcbi1cdFx0LyogYXRvbWljX29wZW4gd2lsbCBkcHV0KGRlbnRyeSkgb24gZXJyb3IgKi9cbi1cdFx0ZGdldChvcmlnX2RlbnRyeSk7XG4gXHRcdGRlbnRyeSA9IGF0b21pY19vcGVuKHBhdGgsIGRlbnRyeSwgZmlsZSwgZmxhZ3MsIG1vZGUpO1xuIFx0XHRlcnJvciA9IFBUUl9FUlJfT1JfWkVSTyhkZW50cnkpO1xuLVxuLVx0XHRpZiAoSVNfRVJSKGRlbnRyeSkpXG4tXHRcdFx0Lyoga2VlcCB0aGUgb3JpZ2luYWwgKi9cbiYjNDM7XHRcdGlmICh1bmxpa2VseShlcnJvcikpXG4gXHRcdFx0ZGVudHJ5ID0gb3JpZ19kZW50cnk7XG4tXHRcdGVsc2Vcbi1cdFx0XHQvKiBEcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgKi9cbi1cdFx0XHRkcHV0KG9yaWdfZGVudHJ5KTtcbi1cbiBcdFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXHUwMDI2XHUwMDI2IGVycm9yID09IC1FTk9FTlQpXG4gXHRcdFx0ZXJyb3IgPSBjcmVhdGVfZXJyb3I7XG4gXG4tXHRcdGlmICghZXJyb3IpIHtcbi1cdFx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpXG4tXHRcdFx0XHRmc25vdGlmeV9jcmVhdGUoZGlyLVx1MDAzZWRfaW5vZGUsIGRlbnRyeSk7XG4tXHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpXG4tXHRcdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuLVx0XHR9XG4tXG4gXHRcdHBhdGgtXHUwMDNlZGVudHJ5ID0gZGVudHJ5O1xuIFxuIFx0fSBlbHNlIHtcbkBAIC01MjE4LDYgJiM0Mzs1MjkzLDM5IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkXG4gXHRyZXR1cm4gZmlsZW5hbWVfbWtub2RhdChBVF9GRENXRCwgbmFtZSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1x0c3RydWN0IGRlbnRyeSAqZGU7XG4mIzQzO1x0dW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhfbGlua3M7XG4mIzQzO1xuJiM0MztcdGVycm9yID0gLUVNTElOSztcbiYjNDM7XHRpZiAobWF4X2xpbmtzIFx1MDAyNlx1MDAyNiBkaXItXHUwMDNlaV9ubGluayBcdTAwM2U9IG1heF9saW5rcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGlmIChJU19FUlIoZGUpKSB7XG4mIzQzO1x0XHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChkZSkge1xuJiM0MztcdFx0ZHB1dChkZW50cnkpO1xuJiM0MztcdFx0ZGVudHJ5ID0gZGU7XG4mIzQzO1x0fVxuJiM0MztcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcbiYjNDM7XHRyZXR1cm4gZGVudHJ5O1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB2ZnNfbWtkaXIgLSBjcmVhdGUgZGlyZWN0b3J5IHJldHVybmluZyBjb3JyZWN0IGRlbnRyeSBpZiBwb3NzaWJsZVxuICAqIEBpZG1hcDpcdFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuQEAgLTUyNDUsNyAmIzQzOzUzNTMsNiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkZWxlZ2F0ZWRfaW5vZGUpXG4ge1xuIFx0aW50IGVycm9yO1xuLVx0dW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhfbGlua3M7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbiBcbiBcdGVycm9yID0gbWF5X2NyZWF0ZV9kZW50cnkoaWRtYXAsIGRpciwgZGVudHJ5KTtcbkBAIC01MjYxLDI0ICYjNDM7NTM2OCwxMiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGVycjtcbiBcbi1cdGVycm9yID0gLUVNTElOSztcbi1cdGlmIChtYXhfbGlua3MgXHUwMDI2XHUwMDI2IGRpci1cdTAwM2VpX25saW5rIFx1MDAzZT0gbWF4X2xpbmtzKVxuLVx0XHRnb3RvIGVycjtcbi1cbi1cdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGVsZWdhdGVkX2lub2RlKTtcbi1cdGlmIChlcnJvcilcbiYjNDM7XHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGRlKSkge1xuJiM0MztcdFx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcbiBcdFx0Z290byBlcnI7XG4tXG4tXHRkZSA9IGRpci1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4tXHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuLVx0aWYgKElTX0VSUihkZSkpXG4tXHRcdGdvdG8gZXJyO1xuLVx0aWYgKGRlKSB7XG4tXHRcdGRwdXQoZGVudHJ5KTtcbi1cdFx0ZGVudHJ5ID0gZGU7XG4gXHR9XG4tXHRmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeSk7XG4tXHRyZXR1cm4gZGVudHJ5O1xuJiM0MztcdHJldHVybiBkZTtcbiBcbiBlcnI6XG4gXHRlbmRfY3JlYXRpbmcoZGVudHJ5KTtcbkBAIC01NTY1LDcgJiM0Mzs1NjYwLDcgQEAgaW50IGZpbGVuYW1lX3VubGlua2F0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcbiBcdFx0Z290byBleGl0X2Ryb3Bfd3JpdGU7XG4gXG4gXHQvKiBXaHkgbm90IGJlZm9yZT8gQmVjYXVzZSB3ZSB3YW50IGNvcnJlY3QgZXJyb3IgdmFsdWUgKi9cbi1cdGlmICh1bmxpa2VseShsYXN0Lm5hbWVbbGFzdC5sZW5dKSkge1xuJiM0MztcdGlmICh1bmxpa2VseSh0cmFpbGluZ19zbGFzaGVzKGxhc3QpKSkge1xuIFx0XHRpZiAoZF9pc19kaXIoZGVudHJ5KSlcbiBcdFx0XHRlcnJvciA9IC1FSVNESVI7XG4gXHRcdGVsc2VcbkBAIC02MTY3LDE2ICYjNDM7NjI2MiwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSxcbiBcdGlmIChmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSB7XG4gXHRcdGlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHtcbiBcdFx0XHRlcnJvciA9IC1FTk9URElSO1xuLVx0XHRcdGlmIChuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4mIzQzO1x0XHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5ld19sYXN0KSlcbiBcdFx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXHRcdH1cbiBcdH1cbiBcdC8qIHVubGVzcyB0aGUgc291cmNlIGlzIGEgZGlyZWN0b3J5IHRyYWlsaW5nIHNsYXNoZXMgZ2l2ZSAtRU5PVERJUiAqL1xuIFx0aWYgKCFkX2lzX2RpcihyZC5vbGRfZGVudHJ5KSkge1xuIFx0XHRlcnJvciA9IC1FTk9URElSO1xuLVx0XHRpZiAob2xkX2xhc3QubmFtZVtvbGRfbGFzdC5sZW5dKVxuJiM0MztcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMob2xkX2xhc3QpKVxuIFx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4tXHRcdGlmICghKGZsYWdzIFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFx1MDAyNlx1MDAyNiBuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4mIzQzO1x0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZXdfbGFzdCkpXG4gXHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmNcbmluZGV4IGM3YjcyM2MxODYyMGM5Li5jODE1ZDlhYTliNjlkYSAxMDA2NDRcbi0tLSBhL2ZzL25mcy9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzL2Rpci5jXG5AQCAtMjEyMSw2ICYjNDM7MjEyMSw5IEBAIGludCBuZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdGRmcHJpbnRrKFZGUywgXCYjMzQ7TkZTOiBhdG9taWNfb3Blbiglcy8lbGx1KSwgJXBkXFxuXCYjMzQ7LFxuIFx0XHRcdGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGRpci1cdTAwM2VpX2lubywgZGVudHJ5KTtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcbiYjNDM7XHRcdG9wZW5fZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRlcnIgPSBuZnNfY2hlY2tfZmxhZ3Mob3Blbl9mbGFncyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIzMTMsNiAmIzQzOzIzMTYsOSBAQCBpbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ICovXG4gXHRpbnQgZXJyb3IgPSAwO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxuJiM0MztcdFx0b3Blbl9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGlmIChkZW50cnktXHUwMDNlZF9uYW1lLmxlbiBcdTAwM2UgTkZTX1NFUlZFUihkaXIpLVx1MDAzZW5hbWVsZW4pXG4gXHRcdHJldHVybiAtRU5BTUVUT09MT05HO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uY1xuaW5kZXggNDA4OTI1ZDdiZDBiNzcuLjg3ZTg4NjRkOTQ4MDg3IDEwMDY0NFxuLS0tIGEvZnMvb3Blbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vcGVuLmNcbkBAIC0xMTkwLDI5ICYjNDM7MTE5MCwzMCBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcdGlmIChXSUxMX0NSRUFURShmbGFncykpIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlIFx1MDAyNiB+U19JQUxMVUdPKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuJiM0MztcdFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGRElSO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlICE9IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdG9wLVx1MDAzZW1vZGUgPSAwO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIEJsb2NrIGJ1Z3Mgd2hlcmUgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGNyZWF0ZWQgcmVndWxhciBmaWxlcy5cbi1cdCAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0c1xuLVx0ICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC5cbi1cdCAqL1xuLVx0aWYgKChmbGFncyBcdTAwMjYgKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpID09IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdC8qIE5vdyBoYW5kbGUgdGhlIGNyZWF0aXZlIGltcGxlbWVudGF0aW9uIG9mIE9fVE1QRklMRS4gKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgX19PX1RNUEZJTEUpIHtcbiBcdFx0LypcbiBcdFx0ICogSW4gb3JkZXIgdG8gZW5zdXJlIHByb2dyYW1zIGdldCBleHBsaWNpdCBlcnJvcnMgd2hlbiB0cnlpbmdcbiBcdFx0ICogdG8gdXNlIE9fVE1QRklMRSBvbiBvbGQga2VybmVscyB3ZSBlbmZvcmNlIHRoYXQgT19ESVJFQ1RPUllcbi1cdFx0ICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRS5cbiYjNDM7XHRcdCAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUsIGJ1dCB3aXRob3V0IE9fQ1JFQVQuIFRoZVxuJiM0MztcdFx0ICogcmVhc29uIGZvciBkaXNhbGxvd2luZyBPX0NSRUFUfE9fVE1QRklMRSBpcyB0aGF0XG4mIzQzO1x0XHQgKiBPX0RJUkVDVE9SWXxPX0NSRUFUIHVzZWQgdG8gd29yayBhbmQgY3JlYXRlZCBhIHJlZ3VsYXIgZmlsZVxuJiM0MztcdFx0ICogaWYgbm90aGluZyBleGlzdGVkIGF0IHRoZSBvcGVuIHBhdGguIEhlbmNlLCBhbGxvd2luZyB0aGVcbiYjNDM7XHRcdCAqIGNvbWJpbmF0aW9uIHdvdWxkIGhhdmUgY2F1c2VkIE9fQ1JFQVR8T19UTVBGSUxFIHRvIGNyZWF0ZSBhXG4mIzQzO1x0XHQgKiByZWd1bGFyIChub24tdGVtcG9yYXJ5KSBmaWxlIG9uIG9sZCBrZXJuZWxzLCB3aGlsZSB0aGUgY2FsbGVyXG4mIzQzO1x0XHQgKiB3b3VsZCBiZWxpZXZlIHRoZXkgY3JlYXRlZCBhbiBhY3R1YWwgT19UTVBGSUxFLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE9fRElSRUNUT1JZKSlcbiYjNDM7XHRcdGlmICghKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgfHwgKGZsYWdzIFx1MDAyNiBPX0NSRUFUKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0aWYgKCEoYWNjX21vZGUgXHUwMDI2IE1BWV9XUklURSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTI2OSw2ICYjNDM7MTI3MCwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcbiBcdG9wLVx1MDAzZWludGVudCA9IGZsYWdzIFx1MDAyNiBPX1BBVEggPyAwIDogTE9PS1VQX09QRU47XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXF1ZXN0aW5nIHdyaXRlIGFjY2VzcyBvbiBhIGRpcmVjdG9yeSBjYW4gbmV2ZXIgc3VjY2VlZC4gUmF0aGVyXG4mIzQzO1x0ICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXNcbiYjNDM7XHQgKiBhY3R1YWxseSBhIGRpcmVjdG9yeSAoLUVJU0RJUikgb3Igbm90ICgtRU5PVERJUiksIHdlIHNob3J0LWNpcmN1aXRcbiYjNDM7XHQgKiB0byAtRU5PVERJUi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IF9fT19UTVBGSUxFKSBcdTAwMjZcdTAwMjYgKGFjY19tb2RlIFx1MDAyNiBNQVlfV1JJVEUpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9URElSO1xuJiM0MztcbiBcdGlmIChmbGFncyBcdTAwMjYgT19DUkVBVCkge1xuIFx0XHRvcC1cdTAwM2VpbnRlbnQgfD0gTE9PS1VQX0NSRUFURTtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBPX0VYQ0wpIHtcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuaW5kZXggODhhNGExNzg3ZmYwNDcuLjc1YmY4NmNjMDYxMjJlIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC9kaXIuY1xuQEAgLTUzOCw2ICYjNDM7NTM4LDkgQEAgaW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuIFx0aWYgKHVubGlrZWx5KGNpZnNfZm9yY2VkX3NodXRkb3duKGNpZnNfc2IpKSlcbiBcdFx0cmV0dXJuIHNtYl9FSU8oc21iX2Vpb190cmFjZV9mb3JjZWRfc2h1dGRvd24pO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKG9mbGFncykpXG4mIzQzO1x0XHRvZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHQvKlxuIFx0ICogUG9zaXggb3BlbiBpcyBvbmx5IGNhbGxlZCAoYXQgbG9va3VwIHRpbWUpIGZvciBmaWxlIGNyZWF0ZSBub3cuIEZvclxuIFx0ICogb3BlbnMgKHJhdGhlciB0aGFuIGNyZWF0ZXMpLCBiZWNhdXNlIHdlIGRvIG5vdCBrbm93IGlmIGl0IGlzIGEgZmlsZVxuZGlmZiAtLWdpdCBhL2ZzL3Zib3hzZi9kaXIuYyBiL2ZzL3Zib3hzZi9kaXIuY1xuaW5kZXggYzViZDMyNzFhYTk2MTYuLjc3YWUyZjY5NmZkNDM3IDEwMDY0NFxuLS0tIGEvZnMvdmJveHNmL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy92Ym94c2YvZGlyLmNcbkBAIC0zMTgsNiAmIzQzOzMxOCw5IEBAIHN0YXRpYyBpbnQgdmJveHNmX2Rpcl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0dTY0IGhhbmRsZTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2Ym94c2ZfZGlyX2xvb2t1cChwYXJlbnQsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcbmluZGV4IDZhZDZiOWU3YTIyNmFmLi42Yjc1Mjc3YmU1NTlkZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmNudGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5AQCAtMzAsNiAmIzQzOzMwLDEyIEBAXG4gICovXG4gI2RlZmluZSBfX09fUkVHVUxBUlx0XHQoMSBcdTAwM2NcdTAwM2MgMzApXG4gXG4mIzQzOyNkZWZpbmUgT19NS0RJUl9NQVNLXHQoT19DUkVBVCB8IE9fRElSRUNUT1JZKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgT19JU19NS0RJUih1bnNpZ25lZCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoZmxhZ3MgXHUwMDI2IE9fTUtESVJfTUFTSykgPT0gT19NS0RJUl9NQVNLO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciB0aGUgaG93LVx1MDAzZXJlc29sdmUgYXJndW1lbnQ6ICovXG4gI2RlZmluZSBWQUxJRF9SRVNPTFZFX0ZMQUdTIFxcXG4gXHQoUkVTT0xWRV9OT19YREVWIHwgUkVTT0xWRV9OT19NQUdJQ0xJTktTIHwgUkVTT0xWRV9OT19TWU1MSU5LUyB8IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbmluZGV4IDY0YWMwZGZhNDZiN2VmLi5mMjU3YjNkZGI0Nzk0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbkBAIC0xLDQgJiM0MzsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7b3Blbl9vX2NyZWF0X29fZGlyXG4gZG5vdGlmeV90ZXN0XG4gZGV2cHRzX3B0c1xuIGZjbG9nXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxuaW5kZXggODU0MjdkN2YxOWI5YjUuLjY0NWM1MmQyZDRkZWIzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG5AQCAtMSw3ICYjNDM7MSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuIENGTEFHUyAmIzQzOz0gJChLSERSX0lOQ0xVREVTKVxuLVRFU1RfR0VOX1BST0dTIDo9IGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2dcbiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gb3Blbl9vX2NyZWF0X29fZGlyIGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2dcbiBURVNUX0dFTl9QUk9HU19FWFRFTkRFRCA6PSBkbm90aWZ5X3Rlc3RcbiBcbiBpbmNsdWRlIC4uL2xpYi5ta1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZjbG9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG5pbmRleCA1NTFjNGEwZjM5NWExMi4uNTkzYTUxMzZlOTkxOTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG5AQCAtNiwxMCAmIzQzOzYsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW91bnQuaFx1MDAzZVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZGYzY2RiYWUyYzg1MjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jXG5AQCAtMCwwICYjNDM7MSwxOTcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgb3Blbl9vX2NyZWF0X29fZGlyKGludCBkZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLFxuJiM0MztcdFx0XHRcdCAgICAgbW9kZV90IG1vZGUsIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLFxuJiM0MztcdFx0ICAgICAgIGZsYWdzIHwgT19ESVJFQ1RPUlkgfCBPX0NSRUFULCBtb2RlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCBmbGFncykgKHtcdFxcXG4mIzQzO1x0c3RydWN0IHN0YXQgX19zdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGludCBfX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyKGRmZCwgcGF0aG5hbWUsIFNfSVJXWFUsIGZsYWdzKTtcdFxcXG4mIzQzO1x0QVNTRVJUX0dFKF9fZmQsIDApO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0QVNTRVJUX0VRKGZzdGF0KF9fZmQsIFx1MDAyNl9fc3QpLCAwKTtcdFx0XHRcdFxcXG4mIzQzO1x0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcdFx0XHRcdFxcXG4mIzQzO1x0X19mZDtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoZGZkLCBwYXRobmFtZSkgXFxcbiYjNDM7XHRvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCAwKVxuJiM0MztcbiYjNDM7RklYVFVSRShvcGVuX29fY3JlYXRfb19kaXIpIHtcbiYjNDM7XHRjaGFyIGRpcnBhdGhbUEFUSF9NQVhdO1xuJiM0MztcdGludCBkZmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKG9wZW5fb19jcmVhdF9vX2RpcilcbiYjNDM7e1xuJiM0MztcdHN0cmNweShzZWxmLVx1MDAzZWRpcnBhdGgsIFwmIzM0Oy90bXAvb3Blbl9vX2NyZWF0X29fZGlyX3Rlc3QuWFhYWFhYXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfTkUobWtkdGVtcChzZWxmLVx1MDAzZWRpcnBhdGgpLCBOVUxMKTtcbiYjNDM7XHRzZWxmLVx1MDAzZWRmZCA9IG9wZW4oc2VsZi1cdTAwM2VkaXJwYXRoLCBPX0RJUkVDVE9SWSk7XG4mIzQzO1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZGZkLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpXG4mIzQzO3tcbiYjNDM7XHRjbG9zZShzZWxmLVx1MDAzZWRmZCk7XG4mIzQzO1x0cm1kaXIoc2VsZi1cdTAwM2VkaXJwYXRoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRG9lcyBvcGVuX29fY3JlYXRfb19kaXIgcmV0dXJuIGEgZmQgYXQgYWxsPyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZXR1cm5zX2ZkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O25ld2RpclwmIzM0Oyk7XG4mIzQzO1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtuZXdkaXJcJiMzNDssIEFUX1JFTU9WRURJUiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgZmQgbXVzdCByZWZlciB0byB0aGUgZGlyZWN0b3J5IHRoYXQgd2FzIGp1c3QgY3JlYXRlZC4gKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfaXNfY3JlYXRlZF9kaXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0c3RydWN0IHN0YXQgc3RfdmlhX2ZkLCBzdF92aWFfcGF0aDtcbiYjNDM7XHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtjaGVja2RpclwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShmc3RhdChmZCwgXHUwMDI2c3RfdmlhX2ZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7JXMvY2hlY2tkaXJcJiMzNDssIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0YXQocGF0aCwgXHUwMDI2c3RfdmlhX3BhdGgpLCAwKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9pbm8sIHN0X3ZpYV9wYXRoLnN0X2lubyk7XG4mIzQzO1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE1pc3NpbmcgcGFyZW50IGNvbXBvbmVudCBtdXN0IGZhaWwgd2l0aCBFTk9FTlQuICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub2VudF9taXNzaW5nX3BhcmVudClcbiYjNDM7e1xuJiM0MztcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O25vbmV4aXN0ZW50L2NoaWxkXCYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQW4gaW52YWxpZCBkZmQgbXVzdCBmYWlsIHdpdGggRUJBREYuICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGViYWRmKVxuJiM0Mzt7XG4mIzQzO1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcigtNDIsIFwmIzM0O2JhZGZkaXJcJiMzNDssIFNfSVJXWFUsIDApLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFQkFERik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEEgZGZkIHRoYXQgcG9pbnRzIHRvIGEgZmlsZSAobm90IGEgZGlyZWN0b3J5KSBtdXN0IGZhaWwgd2l0aCBFTk9URElSLiAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm90ZGlyX2RmZClcbiYjNDM7e1xuJiM0MztcdGludCBmaWxlX2ZkO1xuJiM0MztcbiYjNDM7XHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtmaWxlXCYjMzQ7LFxuJiM0MztcdFx0XHQgT19DUkVBVCB8IE9fV1JPTkxZLCBTX0lSV1hVKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoZmlsZV9mZCwgXCYjMzQ7c3ViZGlyXCYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtmaWxlXCYjMzQ7LCAwKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9fRVhDTCB0b2dldGhlciB3aXRoIE9fQ1JFQVR8T19ESVJFQ1RPUlkgbXVzdCBmYWlsIHdpdGggRUVYSVNUIHdoZW5cbiYjNDM7ICogdGhlIHRhcmdldCBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuXG4mIzQzOyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBvX2V4Y2xfZWV4aXN0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtleGNsZGlyXCYjMzQ7LCBPX0VYQ0wpO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtleGNsZGlyXCYjMzQ7LCBTX0lSV1hVLCBPX0VYQ0wpLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFRVhJU1QpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O2V4Y2xkaXJcJiMzNDssIEFUX1JFTU9WRURJUiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBPX0NSRUFUfE9fRElSRUNUT1JZIG9uIGEgcGF0aCB0aGF0IGFscmVhZHkgZXhpc3RzIGFzIGEgcmVndWxhciBmaWxlXG4mIzQzOyAqIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuXG4mIzQzOyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBleGlzdGluZ19maWxlX2Vub3RkaXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmlsZV9mZDtcbiYjNDM7XG4mIzQzO1x0ZmlsZV9mZCA9IG9wZW5hdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7cmVnZmlsZVwmIzM0OyxcbiYjNDM7XHRcdFx0IE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XG4mIzQzO1x0QVNTRVJUX0dFKGZpbGVfZmQsIDApO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3JlZ2ZpbGVcJiMzNDssIFNfSVJXWFUsIDApLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtyZWdmaWxlXCYjMzQ7LCAwKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgY29tYmluZWQgd2l0aCBhIHdyaXRhYmxlIGFjY2VzcyBtb2RlIG11c3QgYmVcbiYjNDM7ICogcmVqZWN0ZWQ6IGEgZGlyZWN0b3J5IGNhbm5vdCBiZSBvcGVuZWQgZm9yIHdyaXRpbmcuXG4mIzQzOyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZWplY3RzX3dyaXRhYmxlX2FjY19tb2RlKVxuJiM0Mzt7XG4mIzQzO1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7cmR3cmRpclwmIzM0OywgU19JUldYVSwgT19SRFdSKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4mIzQzO1x0LyogQ2xlYW4gdXAgaWYgdGhlIGtlcm5lbCBjcmVhdGVkIHRoZSBkaXJlY3RvcnkgYW55d2F5LiAqL1xuJiM0MztcdHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtyZHdyZGlyXCYjMzQ7LCBBVF9SRU1PVkVESVIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBvcGVuYXQoT19DUkVBVCkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIGJ1dCB3aXRob3V0IE9fRElSRUNUT1JZXG4mIzQzOyAqIG11c3QgZmFpbCB3aXRoIEVJU0RJUiBhbmQgbXVzdCBub3QgY3JlYXRlIGFueXRoaW5nIGF0IHRoZSBwYXRoLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgdHJhaWxpbmdfc2xhc2hfbm9fb19kaXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0c3RydWN0IHN0YXQgc3Q7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDt0cmFpbGluZy9cJiMzNDssIE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XG4mIzQzO1x0RVhQRUNUX0VRKGZkLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFSVNESVIpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoZnN0YXRhdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7dHJhaWxpbmdcJiMzNDssIFx1MDAyNnN0LCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbiYjNDM7XG4mIzQzO1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqL1xuJiM0MztcdGlmIChmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0dW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3RyYWlsaW5nXCYjMzQ7LCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIHJldHVybmVkIGZkIG11c3QgYmUgdXNhYmxlIGFzIGEgZGZkIGZvciBmdXJ0aGVyICphdCgpIGNhbGxzLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZClcbiYjNDM7e1xuJiM0MztcdGludCBwYXJlbnRfZmQsIGNoaWxkX2ZkO1xuJiM0MztcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1xuJiM0MztcdHBhcmVudF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtwYXJlbnRcJiMzNDspO1xuJiM0MztcdGNoaWxkX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQocGFyZW50X2ZkLCBcJiMzNDtjaGlsZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShjaGlsZF9mZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShwYXJlbnRfZmQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDslcy9wYXJlbnQvY2hpbGRcJiMzNDssIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4mIzQzO1x0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcbiYjNDM7XHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0OyVzL3BhcmVudFwmIzM0Oywgc2VsZi1cdTAwM2VkaXJwYXRoKTtcbiYjNDM7XHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0hBUk5FU1NfTUFJTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7LAogICAgJiMzNDtHRlMyX0ZTJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O1ZCT1hTRl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhdGhfb3BlbmF0JiMzNDssCiAgICAmIzM0O2RvX3N5c19vcGVuJiMzNDssCiAgICAmIzM0O3Zmc19ta2RpciYjMzQ7LAogICAgJiMzNDt2ZnNfY3JlYXRlJiMzNDssCiAgICAmIzM0O2RlbnRyeV9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfdW5saW5rYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfcmVuYW1lYXQyJiMzNDssCiAgICAmIzM0O2NpZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7djlmc192ZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7djlmc192ZnNfYXRvbWljX29wZW5fZG90bCYjMzQ7LAogICAgJiMzNDtjZXBoX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2Z1c2VfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7Z2ZzMl9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtuZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuX3YyMyYjMzQ7LAogICAgJiMzNDt2Ym94c2ZfZGlyX2F0b21pY19vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVkZTIGxheWVyLCBhbGxvd2luZyBvcGVuYXQoKSB3aXRoIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSB0byBjcmVhdGUgZGlyZWN0b3JpZXMuIEl0IG1vZGlmaWVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIChmcy9uYW1laS5jLCBmcy9vcGVuLmMpIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKDlwLCBjZXBoLCBmdXNlLCBnZnMyLCBuZnMsIHNtYiwgdmJveHNmKSB0byBoYW5kbGUgdGhlIG5ldyBiZWhhdmlvciBpbiB0aGVpciBhdG9taWNfb3BlbiBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBpbiBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGZpbGUgb3BlbmluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZThjZGFkN2MxMmNmYTU5ODA5MDY2NTY1MWMzMzM0OWQ0NDBiMWRhZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDI5IDE2OjQyOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuYwppbmRleCA1NzgzZDAzMzZmOTZhYy4uYmI1NTVlNWJhMjYxNTAgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzLzlwL3Zmc19pbm9kZS5jCkBAIC03NzcsNiAmIzQzOzc3Nyw5IEBAIHY5ZnNfdmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgcDlfb21vZGU7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7CiAJCXN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7CiAJCWlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSkKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jCmluZGV4IGY3Mzk2ZDIwY2I2Y2RjLi5mZjNmYWNiNDIwYzIyNCAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jCkBAIC0yMzksNiAmIzQzOzIzOSw5IEBAIHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOwogCXN0cnVjdCBwb3NpeF9hY2wgKnBhY2wgPSBOVUxMLCAqZGFjbCA9IE5VTEw7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7CiAJCXN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7CiAJCWlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSkKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZmlsZS5jIGIvZnMvY2VwaC9maWxlLmMKaW5kZXggNzExNjFmMmIyMTUxMzYuLmU3OWFiZGJkOWY2MWU5IDEwMDY0NAotLS0gYS9mcy9jZXBoL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jZXBoL2ZpbGUuYwpAQCAtODExLDYgJiM0Mzs4MTEsOSBAQCBpbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCSAgICAgIGRpciwgY2VwaF92aW5vcChkaXIpLCBkZW50cnksIGRlbnRyeSwKIAkgICAgICBkX3VuaGFzaGVkKGRlbnRyeSkgPyAmIzM0O3VuaGFzaGVkJiMzNDsgOiAmIzM0O2hhc2hlZCYjMzQ7LCBmbGFncywgbW9kZSk7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkZW50cnktJmd0O2RfbmFtZS5sZW4gJmd0OyBOQU1FX01BWCkKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jCmluZGV4IDBlMmExMDM5ZmE0M2VhLi5lMDE4Njk1NjVkNWVlNSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mdXNlL2Rpci5jCkBAIC05MzUsNiAmIzQzOzkzNSw5IEBAIHN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksCiAJc3RydWN0IG1udF9pZG1hcCAqaWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oZGlyKTsKIAomIzQzOwlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQlmbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGZ1c2VfaXNfYmFkKGRpcikpCiAJCXJldHVybiAtRUlPOwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmMKaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjk4NTlhZTAzNDFhOTllIDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZ2ZzMi9pbm9kZS5jCkBAIC0xMzg3LDYgJiM0MzsxMzg3LDkgQEAgc3RhdGljIGludCBnZnMyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiB7CiAJYm9vbCBleGNsID0gISEoZmxhZ3MgJmFtcDsgT19FWENMKTsKIAomIzQzOwlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQlmbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHsKIAkJc3RydWN0IGRlbnRyeSAqZCA9IF9fZ2ZzMl9sb29rdXAoZGlyLCBkZW50cnksIGZpbGUpOwogCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCkgewpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggNWNjOWYwZjQ2NmI4MzAuLmZlZjgyNmMwNGViNTA3IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTEzODIsMTMgJiM0MzsxMzgyLDEyIEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaykKIAogLyoqCiAgKiBtYXlfY3JlYXRlX2luX3N0aWNreSAtIENoZWNrIHdoZXRoZXIgYW4gT19DUkVBVCBvcGVuIGluIGEgc3RpY2t5IGRpcmVjdG9yeQotICoJCQkgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzIHRoYXQgYWxyZWFkeQotICoJCQkgIGV4aXN0LgomIzQzOyAqCQkJICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90CiAgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb20KICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGEKICAqIEBpbm9kZTogdGhlIGlub2RlIG9mIHRoZSBmaWxlIHRvIG9wZW4KICAqCi0gKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjoKJiM0MzsgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46CiAgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkCiAgKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMKICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5CkBAIC0xNDE2LDYgJiM0MzsxNDE1LDE0IEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCWlmIChsaWtlbHkoIShkaXJfbW9kZSAmYW1wOyBTX0lTVlRYKSkpCiAJCXJldHVybiAwOwogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreQomIzQzOwkgKiBmb2xkZXJzLiBUaGVyZWZvcmUsIGZvciB0aGUgU19JU0RJUiBjYXNlLCBkaXNhYmxpbmcKJiM0MzsJICogc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyIGlzIG5vdCBlbm91Z2ggdG8gYWxsb3cgY3JlYXRpbmcgYQomIzQzOwkgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzCiYjNDM7CSAqIG5vdCBleHBlY3RpbmcgdGhhdCBPX0NSRUFUfE9fRElSRUNUT1JZIGlzIHBvc3NpYmxlIG9uIG5ld2VyCiYjNDM7CSAqIGtlcm5lbHMuCiYjNDM7CSAqLwogCWlmIChTX0lTUkVHKGlub2RlLSZndDtpX21vZGUpICZhbXA7JmFtcDsgIXN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikKIAkJcmV0dXJuIDA7CiAKQEAgLTE0NDcsNiAmIzQzOzE0NTQsMTIgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsCiAJCQkJCSAgICAgICYjMzQ7c3RpY2t5X2NyZWF0ZV9yZWd1bGFyJiMzNDspOwogCQkJcmV0dXJuIC1FQUNDRVM7CiAJCX0KJiM0MzsKJiM0MzsJCWlmIChzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIgJmd0Oz0gMiAmYW1wOyZhbXA7IFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpIHsKJiM0MzsJCQlhdWRpdF9sb2dfcGF0aF9kZW5pZWQoQVVESVRfQU5PTV9DUkVBVCwKJiM0MzsJCQkJCSAgICAgICYjMzQ7c3RpY2t5X2NyZWF0ZV9kaXImIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FQUNDRVM7CiYjNDM7CQl9CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNzgxLDkgJiM0MzsyNzk0LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKQogCXJldHVybiBzOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoY29uc3Qgc3RydWN0IHFzdHIgbGFzdCkKJiM0Mzt7CiYjNDM7CXJldHVybiAoYm9vbClsYXN0Lm5hbWVbbGFzdC5sZW5dOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbG9va3VwX2xhc3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0JaWYgKG5kLSZndDtsYXN0X3R5cGUgPT0gTEFTVF9OT1JNICZhbXA7JmFtcDsgbmQtJmd0O2xhc3QubmFtZVtuZC0mZ3Q7bGFzdC5sZW5dKQomIzQzOwlpZiAobmQtJmd0O2xhc3RfdHlwZSA9PSBMQVNUX05PUk0gJmFtcDsmYW1wOyB0cmFpbGluZ19zbGFzaGVzKG5kLSZndDtsYXN0KSkKIAkJbmQtJmd0O2ZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZOwogCiAJcmV0dXJuIHdhbGtfY29tcG9uZW50KG5kLCBXQUxLX1RSQUlMSU5HKTsKQEAgLTQxNjQsNiAmIzQzOzQxODIsMjQgQEAgc3RhdGljIGlubGluZSB1bW9kZV90IHZmc19wcmVwYXJlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJcmV0dXJuIG1vZGU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7aW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJICAgICAgIHVtb2RlX3QgbW9kZSwgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRfaW5vZGUoZGVudHJ5LSZndDtkX3BhcmVudCk7CiYjNDM7CWludCBlcnJvcjsKJiM0MzsKJiM0MzsJZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJZXJyb3IgPSBkaXItJmd0O2lfb3AtJmd0O2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIHRydWUpOwomIzQzOwlpZiAoIWVycm9yKQomIzQzOwkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKIC8qKgogICogdmZzX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgZmlsZQogICogQGlkbWFwOglpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tCkBAIC00MTk2LDEzICYjNDM7NDIzMiw4IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwKIAllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7Ci0JZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0JZXJyb3IgPSBkaXItJmd0O2lfb3AtJmd0O2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIHRydWUpOwotCWlmICghZXJyb3IpCi0JCWZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7Ci0JcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwlyZXR1cm4gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRpKTsKIH0KIEVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7CiAKQEAgLTQzMTksMjEgJiM0Mzs0MzUwLDQwIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9wZW5fdG9fbmFtZWlfZmxhZ3MoaW50IGZsYWcpCiAKIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJY29uc3Qgc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJdW1vZGVfdCBtb2RlKQomIzQzOwkJCXVtb2RlX3QgbW9kZSwgYm9vbCBjcmVhdGVfZGlyKQogewotCWludCBlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlOwomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChjcmVhdGVfZGlyKQomIzQzOwkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZWxzZQomIzQzOwkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAogCWlmICghZnN1aWRnaWRfaGFzX21hcHBpbmcoZGlyLSZndDtkZW50cnktJmd0O2Rfc2IsIGlkbWFwKSkKIAkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAKLQllcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLAotCQkJCSBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7CiYjNDM7CWVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwlpZiAoY3JlYXRlX2RpcikKJiM0MzsJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwllbHNlCiYjNDM7CQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnJvcjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1bW9kZV90IG9fY3JlYXRlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQljb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpCiYjNDM7ewomIzQzOwlpZiAoY3JlYXRlX2RpcikKJiM0MzsJCXJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIDApOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpOwogfQogCiAvKgpAQCAtNDM0Nyw3ICYjNDM7NDM5Nyw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogICogYmUgc2V0LiAgVGhlIGNhbGxlciB3aWxsIG5lZWQgdG8gcGVyZm9ybSB0aGUgb3BlbiB0aGVtc2VsdmVzLiAgQHBhdGggd2lsbAogICogaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIG5ldyBkZW50cnkuICBUaGlzIG1heSBiZSBuZWdhdGl2ZS4KICAqCi0gKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgomIzQzOyAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuIE9uIGVycm9yIHRoZSByZWYgdG8gZGVudHJ5IGlzIGtlcHQuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJCSAgc3RydWN0IGZpbGUgKmZpbGUsCkBAIC00MzU5LDYgJiM0Mzs0NDA5LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkKIAogCWZpbGUtJmd0O19fZl9wYXRoLmRlbnRyeSA9IERFTlRSWV9OT1RfU0VUOwogCWZpbGUtJmd0O19fZl9wYXRoLm1udCA9IHBhdGgtJmd0O21udDsKJiM0MzsKIAllcnJvciA9IGRpci0mZ3Q7aV9vcC0mZ3Q7YXRvbWljX29wZW4oZGlyLCBkZW50cnksIGZpbGUsCiAJCQkJICAgICAgIG9wZW5fdG9fbmFtZWlfZmxhZ3Mob3Blbl9mbGFnKSwgbW9kZSk7CiAJZF9sb29rdXBfZG9uZShkZW50cnkpOwpAQCAtNDM3MSwyMSAmIzQzOzQ0MjIsMzkgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkKIAkJfSBlbHNlIGlmIChXQVJOX09OKGZpbGUtJmd0O2ZfcGF0aC5kZW50cnkgPT0gREVOVFJZX05PVF9TRVQpKSB7CiAJCQllcnJvciA9IC1FSU87CiAJCX0gZWxzZSB7CiYjNDM7CQkJc3RydWN0IGRlbnRyeSAqb2xkID0gZGVudHJ5OwomIzQzOwkJCWJvb2wgcmVwbGFjZWQgPSBmYWxzZTsKIAkJCWlmIChmaWxlLSZndDtmX3BhdGguZGVudHJ5KSB7Ci0JCQkJZHB1dChkZW50cnkpOwogCQkJCWRlbnRyeSA9IGZpbGUtJmd0O2ZfcGF0aC5kZW50cnk7CiYjNDM7CQkJCXJlcGxhY2VkID0gZGVudHJ5ICE9IG9sZDsKIAkJCX0KLQkJCWlmICh1bmxpa2VseShkX2lzX25lZ2F0aXZlKGRlbnRyeSkpKQomIzQzOwkJCWlmICh1bmxpa2VseShkX2lzX25lZ2F0aXZlKGRlbnRyeSkpKSB7CiYjNDM7CQkJCS8qIERvIG5vdCBkcm9wIG9yaWdpbmFsIGRlbnRyeSByZWYgb24gZXJyb3IgKi8KJiM0MzsJCQkJaWYgKHJlcGxhY2VkKQomIzQzOwkJCQkJZHB1dChkZW50cnkpOwogCQkJCWVycm9yID0gLUVOT0VOVDsKJiM0MzsJCQl9IGVsc2UgaWYgKHJlcGxhY2VkKSB7CiYjNDM7CQkJCWRwdXQob2xkKTsKJiM0MzsJCQl9CiAJCX0KIAl9CiYjNDM7CiAJaWYgKGVycm9yKSB7Ci0JCWRwdXQoZGVudHJ5KTsKIAkJZGVudHJ5ID0gRVJSX1BUUihlcnJvcik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0NSRUFURUQpCiYjNDM7CQkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKJiM0MzsJCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfT1BFTkVEKQomIzQzOwkJCWZzbm90aWZ5X29wZW4oZmlsZSk7CiAJfQomIzQzOwogCXJldHVybiBkZW50cnk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwKJiM0MzsJCQkJIHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCwKJiM0MzsJCQkJIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7CiAvKgogICogTG9vayB1cCBhbmQgbWF5YmUgY3JlYXRlIGFuZCBvcGVuIHRoZSBsYXN0IGNvbXBvbmVudC4KICAqCkBAIC00NDEyLDYgJiM0Mzs0NDgxLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJaW50IGVycm9yLCBjcmVhdGVfZXJyb3IgPSAwOwogCXVtb2RlX3QgbW9kZSA9IG9wLSZndDttb2RlOwomIzQzOwlib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wZW5fZmxhZyk7CiAKIAlpZiAodW5saWtlbHkoSVNfREVBRERJUihkaXJfaW5vZGUpKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CkBAIC00NDM3LDcgJiM0Mzs0NTA3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJZGVudHJ5ID0gTlVMTDsKIAl9CiAJaWYgKGRlbnRyeS0mZ3Q7ZF9pbm9kZSkgewotCQkvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZl9vcC0mZ3Q7b3BlbiAqLwomIzQzOwkJLyogQ2FjaGVkIHBvc2l0aXZlIGRlbnRyeTogd2lsbCBvcGVuIGluIGRvX29wZW4oKS4gKi8KIAkJcmV0dXJuIGRlbnRyeTsKIAl9CiAKQEAgLTQ0NTksMjEgJiM0Mzs0NTI5LDM1IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJaWYgKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSB7CiAJCWlmIChvcGVuX2ZsYWcgJmFtcDsgT19FWENMKQogCQkJb3Blbl9mbGFnICZhbXA7PSB+T19UUlVOQzsKLQkJbW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpci0mZ3Q7ZF9pbm9kZSwgbW9kZSwgbW9kZSwgbW9kZSk7CiYjNDM7CQltb2RlID0gb19jcmVhdGVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBjcmVhdGVfZGlyKTsKIAkJaWYgKGxpa2VseShnb3Rfd3JpdGUpKQogCQkJY3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCAmYW1wO25kLSZndDtwYXRoLAotCQkJCQkJICAgIGRlbnRyeSwgbW9kZSk7CiYjNDM7CQkJCQkJICAgIGRlbnRyeSwgbW9kZSwgY3JlYXRlX2Rpcik7CiAJCWVsc2UKIAkJCWNyZWF0ZV9lcnJvciA9IC1FUk9GUzsKJiM0MzsJCS8qIFJlZnVzZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdGhyb3VnaCBhIGRhbmdsaW5nICh0cmFpbGluZykKJiM0MzsJCSAqIHN5bWxpbmsuIEZvciByZWd1bGFyIGZpbGVzIHRoaXMgaGFzIGJlZW4gYWxsb3dlZCBoaXN0b3JpY2FsbHkKJiM0MzsJCSAqIG9uIE9fQ1JFQVQgd2l0aG91dCBPX0VYQ0wuICovCiYjNDM7CQlpZiAodW5saWtlbHkobmQtJmd0O2RlcHRoKSAmYW1wOyZhbXA7IGNyZWF0ZV9kaXIgJmFtcDsmYW1wOyAhY3JlYXRlX2Vycm9yKQomIzQzOwkJCWNyZWF0ZV9lcnJvciA9IC1FTE9PUDsKIAl9CiAJaWYgKGNyZWF0ZV9lcnJvcikKIAkJb3Blbl9mbGFnICZhbXA7PSB+T19DUkVBVDsKIAlpZiAoZGlyX2lub2RlLSZndDtpX29wLSZndDthdG9taWNfb3BlbikgewomIzQzOwkJc3RydWN0IGRlbnRyeSAqb3JpZ19kZW50cnkgPSBkZW50cnk7CiAJCWlmIChuZC0mZ3Q7ZmxhZ3MgJmFtcDsgTE9PS1VQX0RJUkVDVE9SWSkKIAkJCW9wZW5fZmxhZyB8PSBPX0RJUkVDVE9SWTsKIAkJZGVudHJ5ID0gYXRvbWljX29wZW4oJmFtcDtuZC0mZ3Q7cGF0aCwgZGVudHJ5LCBmaWxlLCBvcGVuX2ZsYWcsIG1vZGUpOwotCQlpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSAmYW1wOyZhbXA7IGRlbnRyeSA9PSBFUlJfUFRSKC1FTk9FTlQpKQotCQkJZGVudHJ5ID0gRVJSX1BUUihjcmVhdGVfZXJyb3IpOwomIzQzOwkJZXJyb3IgPSBQVFJfRVJSX09SX1pFUk8oZGVudHJ5KTsKJiM0MzsJCWlmICh1bmxpa2VseShlcnJvcikpCiYjNDM7CQkJZGVudHJ5ID0gb3JpZ19kZW50cnk7IC8qIGF0b21pY19vcGVuKCkga2VlcHMgcmVmIG9uIGVycm9yICovCiYjNDM7CQlpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSAmYW1wOyZhbXA7IGVycm9yID09IC1FTk9FTlQpIHsKJiM0MzsJCQkvKiBTaG91bGQgaGF2ZSBkb25lIGEgY3JlYXRlLCBidXQgd2UgYWxyZWFkeSBlcnJvcmVkLiAqLwomIzQzOwkJCWF1ZGl0X2lub2RlX2NoaWxkKGRpci0mZ3Q7ZF9pbm9kZSwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7CiYjNDM7CQkJZXJyb3IgPSBjcmVhdGVfZXJyb3I7CiYjNDM7CQl9CiYjNDM7CQlpZiAodW5saWtlbHkoZXJyb3IpKQomIzQzOwkJCWdvdG8gb3V0X2RwdXQ7CiAJCXJldHVybiBkZW50cnk7CiAJfQogCkBAIC00NDkwLDMwICYjNDM7NDU3NCw0NCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJZGVudHJ5ID0gcmVzOwogCQl9CiAJfQomIzQzOwlpZiAoZGVudHJ5LSZndDtkX2lub2RlIHx8ICEob3AtJmd0O29wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSkgewomIzQzOwkJLyogTm8gbmVlZCB0byBjcmVhdGUgYSBmaWxlLiBJZiBsb29rdXAgcmV0dXJuZWQgYSBwb3NpdGl2ZQomIzQzOwkJICogZGVudHJ5LCB0aGUgZmlsZSB3aWxsIGJlIG9wZW5lZCBpbiBkb19vcGVuKCkuICovCiYjNDM7CQlyZXR1cm4gZGVudHJ5OwomIzQzOwl9CiAKLQkvKiBOZWdhdGl2ZSBkZW50cnksIGp1c3QgY3JlYXRlIHRoZSBmaWxlICovCi0JaWYgKCFkZW50cnktJmd0O2RfaW5vZGUgJmFtcDsmYW1wOyAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpKSB7Ci0JCS8qIGJ1dCBicmVhayB0aGUgZGlyZWN0b3J5IGxlYXNlIGZpcnN0ISAqLwotCQllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXJfaW5vZGUsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2RwdXQ7CiYjNDM7CS8qIE5lZ2F0aXZlIGRlbnRyeSB3aXRoIE9fQ1JFQVQgZmxhZyBzZXQgKi8KJiM0MzsJYXVkaXRfaW5vZGVfY2hpbGQoZGlyLSZndDtkX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTsKIAotCQlmaWxlLSZndDtmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDsKLQkJYXVkaXRfaW5vZGVfY2hpbGQoZGlyX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTsKLQkJaWYgKCFkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O2NyZWF0ZSkgewotCQkJZXJyb3IgPSAtRUFDQ0VTOwotCQkJZ290byBvdXRfZHB1dDsKLQkJfQotCi0JCWVycm9yID0gZGlyX2lub2RlLSZndDtpX29wLSZndDtjcmVhdGUoaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LAotCQkJCQkJbW9kZSwgb3Blbl9mbGFnICZhbXA7IE9fRVhDTCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2RwdXQ7Ci0JfQotCWlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpICZhbXA7JmFtcDsgIWRlbnRyeS0mZ3Q7ZF9pbm9kZSkgewomIzQzOwlpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSkgewomIzQzOwkJLyogU2hvdWxkIGhhdmUgZG9uZSBhIGNyZWF0ZSwgYnV0IHdlIGFscmVhZHkgZXJyb3JlZCAqLwogCQllcnJvciA9IGNyZWF0ZV9lcnJvcjsKIAkJZ290byBvdXRfZHB1dDsKIAl9CiYjNDM7CiYjNDM7CWlmICgoY3JlYXRlX2RpciAmYW1wOyZhbXA7ICFkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O21rZGlyKQomIzQzOwkgICAgfHwgKCFjcmVhdGVfZGlyICZhbXA7JmFtcDsgIWRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKSkgewomIzQzOwkJZXJyb3IgPSAtRUFDQ0VTOwomIzQzOwkJZ290byBvdXRfZHB1dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY3JlYXRlX2RpcikgewomIzQzOwkJc3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LAomIzQzOwkJCQkJCSAgICAgICBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpOwomIzQzOwkJaWYgKElTX0VSUihyZXMpKSB7CiYjNDM7CQkJZXJyb3IgPSBQVFJfRVJSKHJlcyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWVycm9yID0gMDsKJiM0MzsJCQlkZW50cnkgPSByZXM7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnJvciA9IHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpOwomIzQzOwl9CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gb3V0X2RwdXQ7CiYjNDM7CiYjNDM7CWZpbGUtJmd0O2ZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEOwomIzQzOwogCXJldHVybiBkZW50cnk7CiAKIG91dF9kcHV0OgpAQCAtNDUyMSwxNyAmIzQzOzQ2MTksMTIgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKHN0cnVjdCBuYW1laWRhdGEgKm5kKQotewotCXJldHVybiAoYm9vbCluZC0mZ3Q7bGFzdC5uYW1lW25kLSZndDtsYXN0Lmxlbl07Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZykKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAKIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpIHsKLQkJaWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKQomIzQzOwkJaWYgKHRyYWlsaW5nX3NsYXNoZXMobmQtJmd0O2xhc3QpICZhbXA7JmFtcDsgIShvcGVuX2ZsYWcgJmFtcDsgT19ESVJFQ1RPUlkpKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVJU0RJUik7CiAKIAkJLyogRG9uJiMzOTt0IGJvdGhlciBvbiBhbiBPX0VYQ0wgY3JlYXRlICovCkBAIC00NTM5LDcgJiM0Mzs0NjMyLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKQogCQkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKQomIzQzOwlpZiAodHJhaWxpbmdfc2xhc2hlcyhuZC0mZ3Q7bGFzdCkpCiAJCW5kLSZndDtmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTsKIAogCWRlbnRyeSA9IGxvb2t1cF9mYXN0KG5kKTsKQEAgLTQ2MDIsMTYgJiM0Mzs0Njk1LDEyIEBAIHN0YXRpYyBjb25zdCBjaGFyICpvcGVuX2xhc3RfbG9va3VwcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKIAkJICovCiAJfQogCWlmIChvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkKLQkJaW5vZGVfbG9jayhkaXItJmd0O2RfaW5vZGUpOwomIzQzOwkJaW5vZGVfbG9ja19uZXN0ZWQoZGlyLSZndDtkX2lub2RlLCBJX01VVEVYX1BBUkVOVCk7CiAJZWxzZQogCQlpbm9kZV9sb2NrX3NoYXJlZChkaXItJmd0O2RfaW5vZGUpOwomIzQzOwogCWRlbnRyeSA9IGxvb2t1cF9vcGVuKG5kLCBmaWxlLCBvcCwgZ290X3dyaXRlLCAmYW1wO2RlbGVnYXRlZF9pbm9kZSk7Ci0JaWYgKCFJU19FUlIoZGVudHJ5KSkgewotCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0NSRUFURUQpCi0JCQlmc25vdGlmeV9jcmVhdGUoZGlyLSZndDtkX2lub2RlLCBkZW50cnkpOwotCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCkKLQkJCWZzbm90aWZ5X29wZW4oZmlsZSk7Ci0JfQomIzQzOwogCWlmIChvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkKIAkJaW5vZGVfdW5sb2NrKGRpci0mZ3Q7ZF9pbm9kZSk7CiAJZWxzZQpAQCAtNDY2OSw4ICYjNDM7NDc1OCw5IEBAIHN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpIHsKIAkJaWYgKChvcGVuX2ZsYWcgJmFtcDsgT19FWENMKSAmYW1wOyZhbXA7ICEoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0NSRUFURUQpKQogCQkJcmV0dXJuIC1FRVhJU1Q7Ci0JCWlmIChkX2lzX2RpcihuZC0mZ3Q7cGF0aC5kZW50cnkpKQomIzQzOwkJaWYgKCEob3Blbl9mbGFnICZhbXA7IE9fRElSRUNUT1JZKSAmYW1wOyZhbXA7IGRfaXNfZGlyKG5kLSZndDtwYXRoLmRlbnRyeSkpCiAJCQlyZXR1cm4gLUVJU0RJUjsKJiM0MzsKIAkJZXJyb3IgPSBtYXlfY3JlYXRlX2luX3N0aWNreShpZG1hcCwgbmQsCiAJCQkJCSAgICAgZF9iYWNraW5nX2lub2RlKG5kLSZndDtwYXRoLmRlbnRyeSkpOwogCQlpZiAodW5saWtlbHkoZXJyb3IpKQpAQCAtNDk0Niw3ICYjNDM7NTAzNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmaWxlbmFtZV9jcmVhdGUoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLAogCSAqIERvIHRoZSBmaW5hbCBsb29rdXAuICBTdXBwcmVzcyAmIzM5O2NyZWF0ZSYjMzk7IGlmIHRoZXJlIGlzIGEgdHJhaWxpbmcKIAkgKiAmIzM5Oy8mIzM5OywgYW5kIGEgZGlyZWN0b3J5IHdhc24mIzM5O3QgcmVxdWVzdGVkLgogCSAqLwotCWlmIChsYXN0Lm5hbWVbbGFzdC5sZW5dICZhbXA7JmFtcDsgIXdhbnRfZGlyKQomIzQzOwlpZiAodHJhaWxpbmdfc2xhc2hlcyhsYXN0KSAmYW1wOyZhbXA7ICF3YW50X2RpcikKIAkJY3JlYXRlX2ZsYWdzICZhbXA7PSB+TE9PS1VQX0NSRUFURTsKIAlkZW50cnkgPSBzdGFydF9kaXJvcChwYXRoLSZndDtkZW50cnksICZhbXA7bGFzdCwgcmV2YWxfZmxhZyB8IGNyZWF0ZV9mbGFncyk7CiAJaWYgKElTX0VSUihkZW50cnkpKQpAQCAtNTA0MSwzMiAmIzQzOzUxMzEsMTcgQEAgc3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLAogCQlwYXRoLSZndDtkZW50cnkgPSBkaXI7CiAJCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7CiAKLQkJY3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUpOwomIzQzOwkJY3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUsIC8qY3JlYXRlX2Rpcj0qLyBmYWxzZSk7CiAJCWlmIChjcmVhdGVfZXJyb3IpCiAJCQlmbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiAKLQkJLyogYXRvbWljX29wZW4gd2lsbCBkcHV0KGRlbnRyeSkgb24gZXJyb3IgKi8KLQkJZGdldChvcmlnX2RlbnRyeSk7CiAJCWRlbnRyeSA9IGF0b21pY19vcGVuKHBhdGgsIGRlbnRyeSwgZmlsZSwgZmxhZ3MsIG1vZGUpOwogCQllcnJvciA9IFBUUl9FUlJfT1JfWkVSTyhkZW50cnkpOwotCi0JCWlmIChJU19FUlIoZGVudHJ5KSkKLQkJCS8qIGtlZXAgdGhlIG9yaWdpbmFsICovCiYjNDM7CQlpZiAodW5saWtlbHkoZXJyb3IpKQogCQkJZGVudHJ5ID0gb3JpZ19kZW50cnk7Ci0JCWVsc2UKLQkJCS8qIERyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSAqLwotCQkJZHB1dChvcmlnX2RlbnRyeSk7Ci0KIAkJaWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgJmFtcDsmYW1wOyBlcnJvciA9PSAtRU5PRU5UKQogCQkJZXJyb3IgPSBjcmVhdGVfZXJyb3I7CiAKLQkJaWYgKCFlcnJvcikgewotCQkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9DUkVBVEVEKQotCQkJCWZzbm90aWZ5X2NyZWF0ZShkaXItJmd0O2RfaW5vZGUsIGRlbnRyeSk7Ci0JCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCkKLQkJCQlmc25vdGlmeV9vcGVuKGZpbGUpOwotCQl9Ci0KIAkJcGF0aC0mZ3Q7ZGVudHJ5ID0gZGVudHJ5OwogCiAJfSBlbHNlIHsKQEAgLTUyMTgsNiAmIzQzOzUyOTMsMzkgQEAgU1lTQ0FMTF9ERUZJTkUzKG1rbm9kLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSwgdW1vZGVfdCwgbW9kZSwgdW5zaWduZWQsIGQKIAlyZXR1cm4gZmlsZW5hbWVfbWtub2RhdChBVF9GRENXRCwgbmFtZSwgbW9kZSwgZGV2KTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUKJiM0MztzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwKJiM0MzsJCQkJIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKQomIzQzO3sKJiM0MzsJaW50IGVycm9yOwomIzQzOwlzdHJ1Y3QgZGVudHJ5ICpkZTsKJiM0MzsJdW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLSZndDtpX3NiLSZndDtzX21heF9saW5rczsKJiM0MzsKJiM0MzsJZXJyb3IgPSAtRU1MSU5LOwomIzQzOwlpZiAobWF4X2xpbmtzICZhbXA7JmFtcDsgZGlyLSZndDtpX25saW5rICZndDs9IG1heF9saW5rcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWRlID0gZGlyLSZndDtpX29wLSZndDtta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwlpZiAoSVNfRVJSKGRlKSkgewomIzQzOwkJZXJyb3IgPSBQVFJfRVJSKGRlKTsKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CWlmIChkZSkgewomIzQzOwkJZHB1dChkZW50cnkpOwomIzQzOwkJZGVudHJ5ID0gZGU7CiYjNDM7CX0KJiM0MzsJZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpOwomIzQzOwlyZXR1cm4gZGVudHJ5OwomIzQzOwomIzQzO2VycjoKJiM0MzsJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwomIzQzO30KJiM0MzsKIC8qKgogICogdmZzX21rZGlyIC0gY3JlYXRlIGRpcmVjdG9yeSByZXR1cm5pbmcgY29ycmVjdCBkZW50cnkgaWYgcG9zc2libGUKICAqIEBpZG1hcDoJCWlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb20KQEAgLTUyNDUsNyAmIzQzOzUzNTMsNiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRlbGVnYXRlZF9pbm9kZSkKIHsKIAlpbnQgZXJyb3I7Ci0JdW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLSZndDtpX3NiLSZndDtzX21heF9saW5rczsKIAlzdHJ1Y3QgZGVudHJ5ICpkZTsKIAogCWVycm9yID0gbWF5X2NyZWF0ZV9kZW50cnkoaWRtYXAsIGRpciwgZGVudHJ5KTsKQEAgLTUyNjEsMjQgJiM0Mzs1MzY4LDEyIEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKGVycm9yKQogCQlnb3RvIGVycjsKIAotCWVycm9yID0gLUVNTElOSzsKLQlpZiAobWF4X2xpbmtzICZhbXA7JmFtcDsgZGlyLSZndDtpX25saW5rICZndDs9IG1heF9saW5rcykKLQkJZ290byBlcnI7Ci0KLQllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7Ci0JaWYgKGVycm9yKQomIzQzOwlkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTsKJiM0MzsJaWYgKElTX0VSUihkZSkpIHsKJiM0MzsJCWVycm9yID0gUFRSX0VSUihkZSk7CiAJCWdvdG8gZXJyOwotCi0JZGUgPSBkaXItJmd0O2lfb3AtJmd0O21rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7Ci0JZXJyb3IgPSBQVFJfRVJSKGRlKTsKLQlpZiAoSVNfRVJSKGRlKSkKLQkJZ290byBlcnI7Ci0JaWYgKGRlKSB7Ci0JCWRwdXQoZGVudHJ5KTsKLQkJZGVudHJ5ID0gZGU7CiAJfQotCWZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTsKLQlyZXR1cm4gZGVudHJ5OwomIzQzOwlyZXR1cm4gZGU7CiAKIGVycjoKIAllbmRfY3JlYXRpbmcoZGVudHJ5KTsKQEAgLTU1NjUsNyAmIzQzOzU2NjAsNyBAQCBpbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKQogCQlnb3RvIGV4aXRfZHJvcF93cml0ZTsKIAogCS8qIFdoeSBub3QgYmVmb3JlPyBCZWNhdXNlIHdlIHdhbnQgY29ycmVjdCBlcnJvciB2YWx1ZSAqLwotCWlmICh1bmxpa2VseShsYXN0Lm5hbWVbbGFzdC5sZW5dKSkgewomIzQzOwlpZiAodW5saWtlbHkodHJhaWxpbmdfc2xhc2hlcyhsYXN0KSkpIHsKIAkJaWYgKGRfaXNfZGlyKGRlbnRyeSkpCiAJCQllcnJvciA9IC1FSVNESVI7CiAJCWVsc2UKQEAgLTYxNjcsMTYgJiM0Mzs2MjYyLDE2IEBAIGludCBmaWxlbmFtZV9yZW5hbWVhdDIoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpmcm9tLAogCWlmIChmbGFncyAmYW1wOyBSRU5BTUVfRVhDSEFOR0UpIHsKIAkJaWYgKCFkX2lzX2RpcihyZC5uZXdfZGVudHJ5KSkgewogCQkJZXJyb3IgPSAtRU5PVERJUjsKLQkJCWlmIChuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pCiYjNDM7CQkJaWYgKHRyYWlsaW5nX3NsYXNoZXMobmV3X2xhc3QpKQogCQkJCWdvdG8gZXhpdF91bmxvY2s7CiAJCX0KIAl9CiAJLyogdW5sZXNzIHRoZSBzb3VyY2UgaXMgYSBkaXJlY3RvcnkgdHJhaWxpbmcgc2xhc2hlcyBnaXZlIC1FTk9URElSICovCiAJaWYgKCFkX2lzX2RpcihyZC5vbGRfZGVudHJ5KSkgewogCQllcnJvciA9IC1FTk9URElSOwotCQlpZiAob2xkX2xhc3QubmFtZVtvbGRfbGFzdC5sZW5dKQomIzQzOwkJaWYgKHRyYWlsaW5nX3NsYXNoZXMob2xkX2xhc3QpKQogCQkJZ290byBleGl0X3VubG9jazsKLQkJaWYgKCEoZmxhZ3MgJmFtcDsgUkVOQU1FX0VYQ0hBTkdFKSAmYW1wOyZhbXA7IG5ld19sYXN0Lm5hbWVbbmV3X2xhc3QubGVuXSkKJiM0MzsJCWlmICghKGZsYWdzICZhbXA7IFJFTkFNRV9FWENIQU5HRSkgJmFtcDsmYW1wOyB0cmFpbGluZ19zbGFzaGVzKG5ld19sYXN0KSkKIAkJCWdvdG8gZXhpdF91bmxvY2s7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggYzdiNzIzYzE4NjIwYzkuLmM4MTVkOWFhOWI2OWRhIDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzL2Rpci5jCkBAIC0yMTIxLDYgJiM0MzsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCWRmcHJpbnRrKFZGUywgJiMzNDtORlM6IGF0b21pY19vcGVuKCVzLyVsbHUpLCAlcGRcbiYjMzQ7LAogCQkJZGlyLSZndDtpX3NiLSZndDtzX2lkLCBkaXItJmd0O2lfaW5vLCBkZW50cnkpOwogCiYjNDM7CWlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKQomIzQzOwkJb3Blbl9mbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJZXJyID0gbmZzX2NoZWNrX2ZsYWdzKG9wZW5fZmxhZ3MpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0yMzEzLDYgJiM0MzsyMzE2LDkgQEAgaW50IG5mc19hdG9taWNfb3Blbl92MjMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkgKi8KIAlpbnQgZXJyb3IgPSAwOwogCiYjNDM7CWlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKQomIzQzOwkJb3Blbl9mbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGRlbnRyeS0mZ3Q7ZF9uYW1lLmxlbiAmZ3Q7IE5GU19TRVJWRVIoZGlyKS0mZ3Q7bmFtZWxlbikKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCA0MDg5MjVkN2JkMGI3Ny4uODdlODg2NGQ5NDgwODcgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vcGVuLmMKQEAgLTExOTAsMjkgJiM0MzsxMTkwLDMwIEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKQogCWlmIChXSUxMX0NSRUFURShmbGFncykpIHsKIAkJaWYgKGhvdy0mZ3Q7bW9kZSAmYW1wOyB+U19JQUxMVUdPKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW9wLSZndDttb2RlID0gaG93LSZndDttb2RlIHwgU19JRlJFRzsKJiM0MzsJCWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCQlvcC0mZ3Q7bW9kZSA9IGhvdy0mZ3Q7bW9kZSB8IFNfSUZESVI7CiYjNDM7CQllbHNlCiYjNDM7CQkJb3AtJmd0O21vZGUgPSBob3ctJmd0O21vZGUgfCBTX0lGUkVHOwogCX0gZWxzZSB7CiAJCWlmIChob3ctJmd0O21vZGUgIT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlvcC0mZ3Q7bW9kZSA9IDA7CiAJfQogCi0JLyoKLQkgKiBCbG9jayBidWdzIHdoZXJlIE9fRElSRUNUT1JZIHwgT19DUkVBVCBjcmVhdGVkIHJlZ3VsYXIgZmlsZXMuCi0JICogTm90ZSwgdGhhdCBibG9ja2luZyBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgaGVyZSBhbHNvIHByb3RlY3RzCi0JICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC4KLQkgKi8KLQlpZiAoKGZsYWdzICZhbXA7IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKSA9PSAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkvKiBOb3cgaGFuZGxlIHRoZSBjcmVhdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBPX1RNUEZJTEUuICovCiAJaWYgKGZsYWdzICZhbXA7IF9fT19UTVBGSUxFKSB7CiAJCS8qCiAJCSAqIEluIG9yZGVyIHRvIGVuc3VyZSBwcm9ncmFtcyBnZXQgZXhwbGljaXQgZXJyb3JzIHdoZW4gdHJ5aW5nCiAJCSAqIHRvIHVzZSBPX1RNUEZJTEUgb24gb2xkIGtlcm5lbHMgd2UgZW5mb3JjZSB0aGF0IE9fRElSRUNUT1JZCi0JCSAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUuCiYjNDM7CQkgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLCBidXQgd2l0aG91dCBPX0NSRUFULiBUaGUKJiM0MzsJCSAqIHJlYXNvbiBmb3IgZGlzYWxsb3dpbmcgT19DUkVBVHxPX1RNUEZJTEUgaXMgdGhhdAomIzQzOwkJICogT19ESVJFQ1RPUll8T19DUkVBVCB1c2VkIHRvIHdvcmsgYW5kIGNyZWF0ZWQgYSByZWd1bGFyIGZpbGUKJiM0MzsJCSAqIGlmIG5vdGhpbmcgZXhpc3RlZCBhdCB0aGUgb3BlbiBwYXRoLiBIZW5jZSwgYWxsb3dpbmcgdGhlCiYjNDM7CQkgKiBjb21iaW5hdGlvbiB3b3VsZCBoYXZlIGNhdXNlZCBPX0NSRUFUfE9fVE1QRklMRSB0byBjcmVhdGUgYQomIzQzOwkJICogcmVndWxhciAobm9uLXRlbXBvcmFyeSkgZmlsZSBvbiBvbGQga2VybmVscywgd2hpbGUgdGhlIGNhbGxlcgomIzQzOwkJICogd291bGQgYmVsaWV2ZSB0aGV5IGNyZWF0ZWQgYW4gYWN0dWFsIE9fVE1QRklMRS4KIAkJICovCi0JCWlmICghKGZsYWdzICZhbXA7IE9fRElSRUNUT1JZKSkKJiM0MzsJCWlmICghKGZsYWdzICZhbXA7IE9fRElSRUNUT1JZKSB8fCAoZmxhZ3MgJmFtcDsgT19DUkVBVCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKCEoYWNjX21vZGUgJmFtcDsgTUFZX1dSSVRFKSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTI2OSw2ICYjNDM7MTI3MCwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcCkKIAogCW9wLSZndDtpbnRlbnQgPSBmbGFncyAmYW1wOyBPX1BBVEggPyAwIDogTE9PS1VQX09QRU47CiAKJiM0MzsJLyoKJiM0MzsJICogUmVxdWVzdGluZyB3cml0ZSBhY2Nlc3Mgb24gYSBkaXJlY3RvcnkgY2FuIG5ldmVyIHN1Y2NlZWQuIFJhdGhlcgomIzQzOwkgKiB0aGFuIHBlcmZvcm1pbmcgYSBwYXRoLXdhbGsgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHRhcmdldCBpcwomIzQzOwkgKiBhY3R1YWxseSBhIGRpcmVjdG9yeSAoLUVJU0RJUikgb3Igbm90ICgtRU5PVERJUiksIHdlIHNob3J0LWNpcmN1aXQKJiM0MzsJICogdG8gLUVOT1RESVIuCiYjNDM7CSAqLwomIzQzOwlpZiAoKGZsYWdzICZhbXA7IE9fRElSRUNUT1JZKSAmYW1wOyZhbXA7ICEoZmxhZ3MgJmFtcDsgX19PX1RNUEZJTEUpICZhbXA7JmFtcDsgKGFjY19tb2RlICZhbXA7IE1BWV9XUklURSkpCiYjNDM7CQlyZXR1cm4gLUVOT1RESVI7CiYjNDM7CiAJaWYgKGZsYWdzICZhbXA7IE9fQ1JFQVQpIHsKIAkJb3AtJmd0O2ludGVudCB8PSBMT09LVVBfQ1JFQVRFOwogCQlpZiAoZmxhZ3MgJmFtcDsgT19FWENMKSB7CmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuYwppbmRleCA4OGE0YTE3ODdmZjA0Ny4uNzViZjg2Y2MwNjEyMmUgMTAwNjQ0Ci0tLSBhL2ZzL3NtYi9jbGllbnQvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC9kaXIuYwpAQCAtNTM4LDYgJiM0Mzs1MzgsOSBAQCBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksCiAJaWYgKHVubGlrZWx5KGNpZnNfZm9yY2VkX3NodXRkb3duKGNpZnNfc2IpKSkKIAkJcmV0dXJuIHNtYl9FSU8oc21iX2Vpb190cmFjZV9mb3JjZWRfc2h1dGRvd24pOwogCiYjNDM7CWlmIChPX0lTX01LRElSKG9mbGFncykpCiYjNDM7CQlvZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCS8qCiAJICogUG9zaXggb3BlbiBpcyBvbmx5IGNhbGxlZCAoYXQgbG9va3VwIHRpbWUpIGZvciBmaWxlIGNyZWF0ZSBub3cuIEZvcgogCSAqIG9wZW5zIChyYXRoZXIgdGhhbiBjcmVhdGVzKSwgYmVjYXVzZSB3ZSBkbyBub3Qga25vdyBpZiBpdCBpcyBhIGZpbGUKZGlmZiAtLWdpdCBhL2ZzL3Zib3hzZi9kaXIuYyBiL2ZzL3Zib3hzZi9kaXIuYwppbmRleCBjNWJkMzI3MWFhOTYxNi4uNzdhZTJmNjk2ZmQ0MzcgMTAwNjQ0Ci0tLSBhL2ZzL3Zib3hzZi9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy92Ym94c2YvZGlyLmMKQEAgLTMxOCw2ICYjNDM7MzE4LDkgQEAgc3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJdTY0IGhhbmRsZTsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2Ym94c2ZfZGlyX2xvb2t1cChwYXJlbnQsIGRlbnRyeSwgMCk7CiAJCWlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmNudGwuaCBiL2luY2x1ZGUvbGludXgvZmNudGwuaAppbmRleCA2YWQ2YjllN2EyMjZhZi4uNmI3NTI3N2JlNTU5ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmNudGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKQEAgLTMwLDYgJiM0MzszMCwxMiBAQAogICovCiAjZGVmaW5lIF9fT19SRUdVTEFSCQkoMSAmbHQ7Jmx0OyAzMCkKIAomIzQzOyNkZWZpbmUgT19NS0RJUl9NQVNLCShPX0NSRUFUIHwgT19ESVJFQ1RPUlkpCiYjNDM7c3RhdGljIGlubGluZSBib29sIE9fSVNfTUtESVIodW5zaWduZWQgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gKGZsYWdzICZhbXA7IE9fTUtESVJfTUFTSykgPT0gT19NS0RJUl9NQVNLOwomIzQzO30KJiM0MzsKIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciB0aGUgaG93LSZndDtyZXNvbHZlIGFyZ3VtZW50OiAqLwogI2RlZmluZSBWQUxJRF9SRVNPTFZFX0ZMQUdTIFwKIAkoUkVTT0xWRV9OT19YREVWIHwgUkVTT0xWRV9OT19NQUdJQ0xJTktTIHwgUkVTT0xWRV9OT19TWU1MSU5LUyB8IFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlCmluZGV4IDY0YWMwZGZhNDZiN2VmLi5mMjU3YjNkZGI0Nzk0NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlCkBAIC0xLDQgJiM0MzsxLDUgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzO29wZW5fb19jcmVhdF9vX2RpcgogZG5vdGlmeV90ZXN0CiBkZXZwdHNfcHRzCiBmY2xvZwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZQppbmRleCA4NTQyN2Q3ZjE5YjliNS4uNjQ1YzUyZDJkNGRlYjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlCkBAIC0xLDcgJiM0MzsxLDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIAogQ0ZMQUdTICYjNDM7PSAkKEtIRFJfSU5DTFVERVMpCi1URVNUX0dFTl9QUk9HUyA6PSBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nCiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gb3Blbl9vX2NyZWF0X29fZGlyIGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2cKIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEIDo9IGRub3RpZnlfdGVzdAogCiBpbmNsdWRlIC4uL2xpYi5tawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZjbG9nLmMKaW5kZXggNTUxYzRhMGYzOTVhMTIuLjU5M2E1MTM2ZTk5MTkyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZjbG9nLmMKQEAgLTYsMTAgJiM0Mzs2LDggQEAKIAogI2luY2x1ZGUgJmx0O2Fzc2VydC5oJmd0OwogI2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKLSNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwotI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwotI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9tb3VudC5oJmd0OwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kZjNjZGJhZTJjODUyNAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jCkBAIC0wLDAgJiM0MzsxLDE5NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgb3Blbl9vX2NyZWF0X29fZGlyKGludCBkZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAomIzQzOwkJCQkgICAgIG1vZGVfdCBtb2RlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzY2FsbChfX05SX29wZW5hdCwgZGZkLCBwYXRobmFtZSwKJiM0MzsJCSAgICAgICBmbGFncyB8IE9fRElSRUNUT1JZIHwgT19DUkVBVCwgbW9kZSk7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWRfZmxhZ3MoZGZkLCBwYXRobmFtZSwgZmxhZ3MpICh7CVwKJiM0MzsJc3RydWN0IHN0YXQgX19zdDsJCQkJCQlcCiYjNDM7CWludCBfX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyKGRmZCwgcGF0aG5hbWUsIFNfSVJXWFUsIGZsYWdzKTsJXAomIzQzOwlBU1NFUlRfR0UoX19mZCwgMCk7CQkJCQkJXAomIzQzOwlBU1NFUlRfRVEoZnN0YXQoX19mZCwgJmFtcDtfX3N0KSwgMCk7CQkJCVwKJiM0MzsJRVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTsJCQkJXAomIzQzOwlfX2ZkOwkJCQkJCQkJXAomIzQzO30pCiYjNDM7CiYjNDM7I2RlZmluZSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChkZmQsIHBhdGhuYW1lKSBcCiYjNDM7CW9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIDApCiYjNDM7CiYjNDM7RklYVFVSRShvcGVuX29fY3JlYXRfb19kaXIpIHsKJiM0MzsJY2hhciBkaXJwYXRoW1BBVEhfTUFYXTsKJiM0MzsJaW50IGRmZDsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAob3Blbl9vX2NyZWF0X29fZGlyKQomIzQzO3sKJiM0MzsJc3RyY3B5KHNlbGYtJmd0O2RpcnBhdGgsICYjMzQ7L3RtcC9vcGVuX29fY3JlYXRfb19kaXJfdGVzdC5YWFhYWFgmIzM0Oyk7CiYjNDM7CUFTU0VSVF9ORShta2R0ZW1wKHNlbGYtJmd0O2RpcnBhdGgpLCBOVUxMKTsKJiM0MzsJc2VsZi0mZ3Q7ZGZkID0gb3BlbihzZWxmLSZndDtkaXJwYXRoLCBPX0RJUkVDVE9SWSk7CiYjNDM7CUFTU0VSVF9HRShzZWxmLSZndDtkZmQsIDApOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKG9wZW5fb19jcmVhdF9vX2RpcikKJiM0Mzt7CiYjNDM7CWNsb3NlKHNlbGYtJmd0O2RmZCk7CiYjNDM7CXJtZGlyKHNlbGYtJmd0O2RpcnBhdGgpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEb2VzIG9wZW5fb19jcmVhdF9vX2RpciByZXR1cm4gYSBmZCBhdCBhbGw/ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgcmV0dXJuc19mZCkKJiM0Mzt7CiYjNDM7CWludCBmZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtJmd0O2RmZCwgJiMzNDtuZXdkaXImIzM0Oyk7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShmZCksIDApOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O25ld2RpciYjMzQ7LCBBVF9SRU1PVkVESVIpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIGZkIG11c3QgcmVmZXIgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQuICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfaXNfY3JlYXRlZF9kaXIpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CXN0cnVjdCBzdGF0IHN0X3ZpYV9mZCwgc3RfdmlhX3BhdGg7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CiYjNDM7CWZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O2NoZWNrZGlyJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoZnN0YXQoZmQsICZhbXA7c3RfdmlhX2ZkKSwgMCk7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDslcy9jaGVja2RpciYjMzQ7LCBzZWxmLSZndDtkaXJwYXRoKTsKJiM0MzsJQVNTRVJUX0VRKHN0YXQocGF0aCwgJmFtcDtzdF92aWFfcGF0aCksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2lubywgc3RfdmlhX3BhdGguc3RfaW5vKTsKJiM0MzsJRVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShmZCksIDApOwomIzQzOwlFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBNaXNzaW5nIHBhcmVudCBjb21wb25lbnQgbXVzdCBmYWlsIHdpdGggRU5PRU5ULiAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub2VudF9taXNzaW5nX3BhcmVudCkKJiM0Mzt7CiYjNDM7CUVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi0mZ3Q7ZGZkLCAmIzM0O25vbmV4aXN0ZW50L2NoaWxkJiMzNDssIFNfSVJXWFUsIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PRU5UKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQW4gaW52YWxpZCBkZmQgbXVzdCBmYWlsIHdpdGggRUJBREYuICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZWJhZGYpCiYjNDM7ewomIzQzOwlFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKC00MiwgJiMzNDtiYWRmZGlyJiMzNDssIFNfSVJXWFUsIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUJBREYpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBIGRmZCB0aGF0IHBvaW50cyB0byBhIGZpbGUgKG5vdCBhIGRpcmVjdG9yeSkgbXVzdCBmYWlsIHdpdGggRU5PVERJUi4gKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm90ZGlyX2RmZCkKJiM0Mzt7CiYjNDM7CWludCBmaWxlX2ZkOwomIzQzOwomIzQzOwlmaWxlX2ZkID0gb3BlbmF0KHNlbGYtJmd0O2RmZCwgJiMzNDtmaWxlJiMzNDssCiYjNDM7CQkJIE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7CiYjNDM7CUFTU0VSVF9HRShmaWxlX2ZkLCAwKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihmaWxlX2ZkLCAmIzM0O3N1YmRpciYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O2ZpbGUmIzM0OywgMCksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE9fRVhDTCB0b2dldGhlciB3aXRoIE9fQ1JFQVR8T19ESVJFQ1RPUlkgbXVzdCBmYWlsIHdpdGggRUVYSVNUIHdoZW4KJiM0MzsgKiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBvX2V4Y2xfZWV4aXN0KQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlmZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKHNlbGYtJmd0O2RmZCwgJiMzNDtleGNsZGlyJiMzNDssIE9fRVhDTCk7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShmZCksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtJmd0O2RmZCwgJiMzNDtleGNsZGlyJiMzNDssIFNfSVJXWFUsIE9fRVhDTCksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFRVhJU1QpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O2V4Y2xkaXImIzM0OywgQVRfUkVNT1ZFRElSKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogT19DUkVBVHxPX0RJUkVDVE9SWSBvbiBhIHBhdGggdGhhdCBhbHJlYWR5IGV4aXN0cyBhcyBhIHJlZ3VsYXIgZmlsZQomIzQzOyAqIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZXhpc3RpbmdfZmlsZV9lbm90ZGlyKQomIzQzO3sKJiM0MzsJaW50IGZpbGVfZmQ7CiYjNDM7CiYjNDM7CWZpbGVfZmQgPSBvcGVuYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3JlZ2ZpbGUmIzM0OywKJiM0MzsJCQkgT19DUkVBVCB8IE9fV1JPTkxZLCBTX0lSV1hVKTsKJiM0MzsJQVNTRVJUX0dFKGZpbGVfZmQsIDApOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtJmd0O2RmZCwgJiMzNDtyZWdmaWxlJiMzNDssIFNfSVJXWFUsIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PVERJUik7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUSh1bmxpbmthdChzZWxmLSZndDtkZmQsICYjMzQ7cmVnZmlsZSYjMzQ7LCAwKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogT19DUkVBVHxPX0RJUkVDVE9SWSBjb21iaW5lZCB3aXRoIGEgd3JpdGFibGUgYWNjZXNzIG1vZGUgbXVzdCBiZQomIzQzOyAqIHJlamVjdGVkOiBhIGRpcmVjdG9yeSBjYW5ub3QgYmUgb3BlbmVkIGZvciB3cml0aW5nLgomIzQzOyAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJlamVjdHNfd3JpdGFibGVfYWNjX21vZGUpCiYjNDM7ewomIzQzOwlFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtJmd0O2RmZCwgJiMzNDtyZHdyZGlyJiMzNDssIFNfSVJXWFUsIE9fUkRXUiksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTsKJiM0MzsJLyogQ2xlYW4gdXAgaWYgdGhlIGtlcm5lbCBjcmVhdGVkIHRoZSBkaXJlY3RvcnkgYW55d2F5LiAqLwomIzQzOwl1bmxpbmthdChzZWxmLSZndDtkZmQsICYjMzQ7cmR3cmRpciYjMzQ7LCBBVF9SRU1PVkVESVIpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIG9wZW5hdChPX0NSRUFUKSB3aXRoIGEgdHJhaWxpbmcgc2xhc2ggYnV0IHdpdGhvdXQgT19ESVJFQ1RPUlkKJiM0MzsgKiBtdXN0IGZhaWwgd2l0aCBFSVNESVIgYW5kIG11c3Qgbm90IGNyZWF0ZSBhbnl0aGluZyBhdCB0aGUgcGF0aC4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCB0cmFpbGluZ19zbGFzaF9ub19vX2RpcikKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJc3RydWN0IHN0YXQgc3Q7CiYjNDM7CiYjNDM7CWZkID0gb3BlbmF0KHNlbGYtJmd0O2RmZCwgJiMzNDt0cmFpbGluZy8mIzM0OywgT19DUkVBVCB8IE9fV1JPTkxZLCBTX0lSV1hVKTsKJiM0MzsJRVhQRUNUX0VRKGZkLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUlTRElSKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKGZzdGF0YXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3RyYWlsaW5nJiMzNDssICZhbXA7c3QsIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PRU5UKTsKJiM0MzsKJiM0MzsJLyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqLwomIzQzOwlpZiAoZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJdW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3RyYWlsaW5nJiMzNDssIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSByZXR1cm5lZCBmZCBtdXN0IGJlIHVzYWJsZSBhcyBhIGRmZCBmb3IgZnVydGhlciAqYXQoKSBjYWxscy4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBmZF91c2FibGVfYXNfZGZkKQomIzQzO3sKJiM0MzsJaW50IHBhcmVudF9mZCwgY2hpbGRfZmQ7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CiYjNDM7CXBhcmVudF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtJmd0O2RmZCwgJiMzNDtwYXJlbnQmIzM0Oyk7CiYjNDM7CWNoaWxkX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQocGFyZW50X2ZkLCAmIzM0O2NoaWxkJiMzNDspOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoY2hpbGRfZmQpLCAwKTsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKHBhcmVudF9mZCksIDApOwomIzQzOwomIzQzOwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7JXMvcGFyZW50L2NoaWxkJiMzNDssIHNlbGYtJmd0O2RpcnBhdGgpOwomIzQzOwlFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApOwomIzQzOwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7JXMvcGFyZW50JiMzNDssIHNlbGYtJmd0O2RpcnBhdGgpOwomIzQzOwlFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgaW50ZXJhY3RzIHdpdGggYG9wZW5hdCgpYC4gQmVmb3JlLCBpdCBzZWVtcyBsaWtlIHRoaXMgY29tYmluYXRpb24gZWl0aGVyIGZhaWxlZCBvdXRyaWdodCBvciwgaW4gc29tZSBjYXNlcywgY3JlYXRlZCBhIHJlZ3VsYXIgZmlsZS4gTm93LCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhY3R1YWxseSAqZW5hYmxpbmcqIHRoZSBjcmVhdGlvbiBvZiBkaXJlY3RvcmllcyB0aHJvdWdoIHRoaXMgZmxhZyBjb21iaW5hdGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgdGhpcyBgT19JU19NS0RJUihmbGFncylgIGNoZWNrLiAgSXQmIzM5O3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQsIHRvdWNoaW5nIGNvcmUgVkZTIGNvZGUgKGBmcy9uYW1laS5jYCwgYGZzL29wZW4uY2ApIGFuZCB0aGVuIHByb3BhZ2F0aW5nIG91dCB0byBhIGJ1bmNoIG9mIGRpZmZlcmVudCBmaWxlc3lzdGVtcy4KCkkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB3aGF0IHRoZSBwb3RlbnRpYWwgaW1wYWN0IGlzIGhlcmUuIFNpbmNlIHRoaXMgaGl0cyB0aGUgVkZTIGxldmVsLCBpdCBpcyBhIGNydWNpYWwgYXJlYSBmb3IgZnV6emluZy4gVGhlIGZ1bmN0aW9uYWwgc2hpZnQgaXMgdG8gYWxsb3cgZGlyZWN0b3J5IGNyZWF0aW9uIHdpdGggYG9wZW5hdCgpYCBhbmQgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAsIHdoaWNoIGlzIGVpdGhlciBhIG5ldyBmZWF0dXJlIG9yIGEgZml4IHRvIHByaW9yIGJlaGF2aW9yLgoKSSYjMzk7bSBtYWtpbmcgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBhcyB0aGUga2V5IHBvaW50cyBvZiBmb2N1cy4gRnJvbSB0aGUgY29kZSwgSSBzZWU6IGB2ZnNfbWtkaXJfbm9fcGVybWAsIGBtYXlfb19jcmVhdGVgLCBgYXRvbWljX29wZW5gLCBgbG9va3VwX29wZW5gLCBgbG9va3VwX2Zhc3RfZm9yX29wZW5gLCBgb3Blbl9sYXN0X2xvb2t1cHNgLCBgZG9fb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGFuZCBgYnVpbGRfb3Blbl9mbGFnc2AuIFRoZSBhdG9taWMgb3BlbiBtb2RpZmljYXRpb25zIGluIHRoZSBmaWxlc3lzdGVtLXNwZWNpZmljIGNvZGUgYXJlIGltcG9ydGFudCwgdG9vOiBgdjlmc192ZnNfYXRvbWljX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGZ1c2VfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGBjaWZzX2F0b21pY19vcGVuYCwgYW5kIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC4KClNpbmNlIGl0IHRvdWNoZXMgdGhlIFZGUywgSSBkb24mIzM5O3QgbmVjZXNzYXJpbHkgbmVlZCBhbnkgZXhvdGljIGNvbmZpZ3MsIGJ1dCBJIHNob3VsZCBlbmFibGUgc3BlY2lmaWMgZmlsZXN5c3RlbXMuIEkmIzM5O20gZ29pbmcgdG8gbGlzdCBgVkJPWFNGX0ZTYCwgYEdGUzJfRlNgLCBgQ0VQSF9GU2AsIGFuZCBgOVBfRlNgIHRvIG1ha2Ugc3VyZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgY292ZXJlZC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbnMgd2l0aGluIGBmcy9uYW1laS5jYC4gSSBoYXZlIGB2ZnNfbWtkaXJfbm9fcGVybWAsIGBtYXlfb19jcmVhdGVgLCBgb19jcmVhdGVfbW9kZWAsIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYW5kIGBidWlsZF9vcGVuX2ZsYWdzYCB0byBsb29rIGF0LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGB2ZnNfbWtkaXJfbm9fcGVybWAgaXMgYWN0dWFsbHkgdXNlZC4gQWgsIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBpbmxpbmVgIGluIGBmcy9uYW1laS5jYC4gIEhhbmcgb24sIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5lZCBpbiB0d28gcGxhY2VzIGluIGBmcy9uYW1laS5jYD8gT2theSwgaXQmIzM5O3MgZGVjbGFyZWQgYW5kIGRlZmluZWQuCmBgYGMKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiYjNDM7CQkJCSBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSkKYGBgCkxldCBtZSBleGFtaW5lIGFyb3VuZCBsaW5lIDUyOTMgYW5kIDQ0NDAgaW4gYGZzL25hbWVpLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zmc19ta2Rpcl9ub19wZXJtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uYW1laS5jPTQ0NTQ9c3RhdGljIGlubGluZVxuZnMvbmFtZWkuYzo0NDU1OnN0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosXG5mcy9uYW1laS5jLTQ0NTYtXHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxuLS1cbmZzL25hbWVpLmM9NDQ3Mz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL25hbWVpLmMtNDU5OC1cdGlmIChjcmVhdGVfZGlyKSB7XG5mcy9uYW1laS5jOjQ1OTk6XHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcbmZzL25hbWVpLmMtNDYwMC1cdFx0XHRcdFx0XHQgICAgICAgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcbi0tXG5mcy9uYW1laS5jPTUyOTY9c3RhdGljIGlubGluZVxuZnMvbmFtZWkuYzo1Mjk3OnN0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL25hbWVpLmMtNTI5OC1cdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbi0tXG5mcy9uYW1laS5jPTUzNTE9c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9uYW1laS5jLTUzNzAtXG5mcy9uYW1laS5jOjUzNzE6XHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcbmZzL25hbWVpLmMtNTM3Mi1cdGlmIChJU19FUlIoZGUpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgRmlsZXN5c3RlbSBQZXJtaXNzaW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGB2ZnNfbWtkaXJfbm9fcGVybWAgaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIOKAkyBnb3QgaXQuIFRoYXQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IG9wdGltaXplZCBmb3IgYSBzcGVjaWZpYyBsb2NhdGlvbiB3aXRoaW4gdGhlIGNvZGUgYW5kIHByb2JhYmx5IGRlYWxzIHdpdGggYSBtb3JlIGdyYW51bGFyIGNoZWNrLiBOb3csIHdoZXJlIGRvZXMgdGhpcyBmaXQgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZT8gV2hhdCBhYm91dCBgbG9va3VwX29wZW5gPyBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIHJlYWxseSBnb2luZyB0byBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIGlzbiYjMzk7dCBpdD8gVGhhdCYjMzk7cyB0aGUgbG93LWxldmVsIHBpZWNlIHRoYXQgZGV0ZXJtaW5lcyBpZiBJIGNhbiAqZXZlbiogdG91Y2ggdGhlIGRpcmVjdG9yeSBpbiB0aGUgZmlyc3QgcGxhY2UsIG9yIGNyZWF0ZSBhIG5ldyBmaWxlIHdpdGggdGhlIG5hbWUgSSYjMzk7dmUgc3VnZ2VzdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBsb3dlciBsZXZlbCBmdW5jdGlvbnMgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIHBlcm1pc3Npb25zIGZsb3chCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9va3VwX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uYW1laS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9NDQ1NT1zdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxuLS1cbmZzL25hbWVpLmMtNDQ3Mi0gKi9cbmZzL25hbWVpLmM6NDQ3MzpzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuZnMvbmFtZWkuYy00NDc0LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3AsXG4tLVxuZnMvbmFtZWkuYz00NjUzPXN0YXRpYyBjb25zdCBjaGFyICpvcGVuX2xhc3RfbG9va3VwcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbi0tXG5mcy9uYW1laS5jLTQ2OTItXHRcdCAqIGRvIF9ub3RfIGZhaWwgeWV0IC0gd2UgbWlnaHQgbm90IG5lZWQgdGhhdCBvciBmYWlsIHdpdGhcbmZzL25hbWVpLmM6NDY5MzpcdFx0ICogYSBkaWZmZXJlbnQgZXJyb3I7IGxldCBsb29rdXBfb3BlbigpIGRlY2lkZTsgd2UmIzM5O2xsIGJlXG5mcy9uYW1laS5jLTQ2OTQtXHRcdCAqIGRyb3BwaW5nIHRoaXMgb25lIGFueXdheS5cbi0tXG5mcy9uYW1laS5jLTQ3MDEtXG5mcy9uYW1laS5jOjQ3MDI6XHRkZW50cnkgPSBsb29rdXBfb3BlbihuZCwgZmlsZSwgb3AsIGdvdF93cml0ZSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbmZzL25hbWVpLmMtNDcwMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzM5MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIEZpbGUgT3BlbmluZyBGdW5jdGlvbnMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBmaWxlIG9wZW5pbmcsIGFuZCB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHBhdHRlcm4gSSYjMzk7bSBzcG90dGluZy4gYGxvb2t1cF9vcGVuYCwgYGF0b21pY19vcGVuYCwgYW5kIGBkb19vcGVuYCBhcmUgYWxsICpzdGF0aWMqLCBtZWFuaW5nIHRoZXkmIzM5O3JlIGludGVybmFsIHRvIHRoZWlyIG1vZHVsZSBhbmQgbm90IGRpcmVjdGx5IGV4cG9zZWQgZm9yIGV4dGVybmFsIHVzZS4gVGhhdCBzdWdnZXN0cyB0aGVzZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIG9mIHRoZSBvcGVuaW5nIHByb2Nlc3MsIHByb2JhYmx5IGhhbmRsaW5nIHRoZSBsb3dlci1sZXZlbCBkZXRhaWxzLiBgYnVpbGRfb3Blbl9mbGFnc2AsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyAqaW5saW5lKi4gVGhpcyB0ZWxscyBtZSB0aGF0IGl0JiMzOTtzIGEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gZGVzaWduZWQgZm9yIHBlcmZvcm1hbmNlLCBsaWtlbHkgaW5saW5pbmcgdGhlIGZsYWcgY29uc3RydWN0aW9uIGRpcmVjdGx5IGludG8gdGhlIGNhbGxpbmcgY29kZSB0byBhdm9pZCBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLiBJdCBpcyBwcm9iYWJseSBpbXBvcnRhbnQgZm9yIG9wdGltaXppbmcgdGhlIGZpbGUgb3BlbiBzeXN0ZW0gY2FsbHMuIFRoZW4sIHdlIGhhdmUgYHZmc19ta2RpcmAgYW5kIGB2ZnNfY3JlYXRlYCwgd2hpY2ggYXJlICpleHBvcnRlZCouIFRoZXNlIGFyZSB0aGUgYWN0dWFsIFZpcnR1YWwgRmlsZSBTeXN0ZW0gZW50cnkgcG9pbnRzIGZvciBjcmVhdGluZyBkaXJlY3RvcmllcyBhbmQgZmlsZXMsIG1lYW5pbmcgdGhlc2UgZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQgZnJvbSBvdGhlciBtb2R1bGVzIG9yIGV2ZW4gdXNlciBzcGFjZS4gVGhpcyBtYWtlcyBzZW5zZTsgdGhleSBuZWVkIHRvIGJlIGFjY2Vzc2libGUgdG8gYSBicm9hZGVyIHBhcnQgb2YgdGhlIHN5c3RlbS4gRmluYWxseSwgYG1heV9vX2NyZWF0ZWAgaXMgKnN0YXRpYyosIGluZGljYXRpbmcgYSBwb3RlbnRpYWwgaW50ZXJuYWwgY2hlY2sgb3IgdmFsaWRhdGlvbiBmdW5jdGlvbiB1c2VkIGJlZm9yZSBhbGxvd2luZyBhIGZpbGUgdG8gYmUgY3JlYXRlZC4KCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBvdmVyIHRvIGBmcy9vcGVuLmNgIG5vdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYnVpbGRfb3Blbl9mbGFnc2AgaXMgZG9pbmc7IGl0cyB1c2FnZSBjb3VsZCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBmbG93IG9mIGZpbGUgb3BlbmluZy4gVGhpcyB3aWxsIHNoZWQgbGlnaHQgb24gaG93IHRoZSBvcGVuIGZsYWdzIGFyZSBhY3R1YWxseSBpbnRlcnByZXRlZCBhbmQgdHJhbnNsYXRlZCBpbnRvIHRoZSBzeXN0ZW0gY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnVpbGRfb3Blbl9mbGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29wZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vcGVuLmM9MTEzNj1pbmxpbmUgc3RydWN0IG9wZW5faG93IGJ1aWxkX29wZW5faG93KGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxuLS1cbmZzL29wZW4uYy0xMTUxLVxuZnMvb3Blbi5jOjExNTI6aW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG5mcy9vcGVuLmMtMTE1My17XG4tLVxuZnMvb3Blbi5jLTExNzYtXHQgKiBPbGRlciBzeXNjYWxscyBpbXBsaWNpdGx5IGNsZWFyIGFsbCBvZiB0aGUgaW52YWxpZCBmbGFncyBvciBhcmd1bWVudFxuZnMvb3Blbi5jOjExNzc6XHQgKiB2YWx1ZXMgYmVmb3JlIGNhbGxpbmcgYnVpbGRfb3Blbl9mbGFncygpLCBidXQgb3BlbmF0MigyKSBjaGVja3MgYWxsXG5mcy9vcGVuLmMtMTE3OC1cdCAqIG9mIGl0cyBhcmd1bWVudHMuXG4tLVxuZnMvb3Blbi5jPTEzMjk9c3RydWN0IGZpbGUgKmZpbGVfb3Blbl9uYW1lKHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUpXG4tLVxuZnMvb3Blbi5jLTEzMzItXHRzdHJ1Y3Qgb3Blbl9ob3cgaG93ID0gYnVpbGRfb3Blbl9ob3coZmxhZ3MsIG1vZGUpO1xuZnMvb3Blbi5jOjEzMzM6XHRpbnQgZXJyID0gYnVpbGRfb3Blbl9mbGFncyhcdTAwMjZob3csIFx1MDAyNm9wKTtcbmZzL29wZW4uYy0xMzM0LVx0aWYgKGVycilcbi0tXG5mcy9vcGVuLmM9MTM1Nz1zdHJ1Y3QgZmlsZSAqZmlsZV9vcGVuX3Jvb3QoY29uc3Qgc3RydWN0IHBhdGggKnJvb3QsXG4tLVxuZnMvb3Blbi5jLTEzNjEtXHRzdHJ1Y3Qgb3Blbl9ob3cgaG93ID0gYnVpbGRfb3Blbl9ob3coZmxhZ3MsIG1vZGUpO1xuZnMvb3Blbi5jOjEzNjI6XHRpbnQgZXJyID0gYnVpbGRfb3Blbl9mbGFncyhcdTAwMjZob3csIFx1MDAyNm9wKTtcbmZzL29wZW4uYy0xMzYzLVx0aWYgKGVycilcbi0tXG5mcy9vcGVuLmM9MTM2OT1zdGF0aWMgaW50IGRvX3N5c19vcGVuYXQyKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSxcbi0tXG5mcy9vcGVuLmMtMTM3Mi1cdHN0cnVjdCBvcGVuX2ZsYWdzIG9wO1xuZnMvb3Blbi5jOjEzNzM6XHRpbnQgZXJyID0gYnVpbGRfb3Blbl9mbGFncyhob3csIFx1MDAyNm9wKTtcbmZzL29wZW4uYy0xMzc0LVx0aWYgKHVubGlrZWx5KGVycikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNTUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBLZXJuZWwgRXhwbG9yYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhpcyBmaWxlIG9wZW5pbmcgYW5kIGNyZWF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byB0cmFjZSB0aGUgcGF0aCB0aHJvdWdoIHRoZSBrZXJuZWwuIE15IHByaW1hcnkgZm9jdXMgc3ltYm9scyByaWdodCBub3cgYXJlIGB2ZnNfbWtkaXJgLCBgdmZzX2NyZWF0ZWAsIGBkb19zeXNfb3BlbmF0MmAsIGBmaWxlX29wZW5fbmFtZWAsIGFuZCBgZmlsZV9vcGVuX3Jvb3RgLiAgYGRvX3N5c19vcGVuYXQyYCBmZWVscyBsaWtlIGEgcGFydGljdWxhcmx5IGdvb2QgZW50cnkgcG9pbnQsIHNvIEkmIzM5O2xsIGNvbmNlbnRyYXRlIG9uIHRoYXQgZm9yIHRoZSBtb21lbnQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zLgoKSSBrbm93IHRoYXQgYGxvb2t1cF9vcGVuYCBhbmQgYGF0b21pY19vcGVuYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGZzL25hbWVpLmNgLCBzbyBJIHdvbiYjMzk7dCBiZSBhYmxlIHRvIGNhbGwgdGhlbSBkaXJlY3RseS4gSSBjb3VsZCBsaXN0IHRoZW0sIGJ1dCBpdCBtaWdodCBiZSBtb3JlIHVzZWZ1bCB0byBsaXN0IGV4cG9ydGVkIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlbSwgc3VjaCBhcyBgcGF0aF9vcGVuYXRgIG9yIGBkb19maWxwX29wZW5gLiAgU28sIEkgc2hvdWxkIHJlYWxseSBkaWcgaW50byBgZnMvbmFtZWkuY2AgYW5kIGxvb2sgZm9yIGNhbGxzIHRvIHRob3NlLCBzcGVjaWZpY2FsbHkgYGRvX2ZpbHBfb3BlbmAgb3IgYHBhdGhfb3BlbmF0YC4gSSYjMzk7bGwgc2VlIHdoZXJlIHRob3NlIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYXRoX29wZW5hdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz00OTE3PXN0YXRpYyBpbnQgZG9fb19wYXRoKHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncywgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvbmFtZWkuYy00OTI4LVxuZnMvbmFtZWkuYzo0OTI5OnN0YXRpYyBzdHJ1Y3QgZmlsZSAqcGF0aF9vcGVuYXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsXG5mcy9uYW1laS5jLTQ5MzAtXHRcdFx0Y29uc3Qgc3RydWN0IG9wZW5fZmxhZ3MgKm9wLCB1bnNpZ25lZCBmbGFncylcbi0tXG5mcy9uYW1laS5jPTQ5Njg9c3RydWN0IGZpbGUgKmRvX2ZpbGVfb3BlbihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKnBhdGhuYW1lLFxuLS1cbmZzL25hbWVpLmMtNDk3Ny1cdHNldF9uYW1laWRhdGEoXHUwMDI2bmQsIGRmZCwgcGF0aG5hbWUsIE5VTEwpO1xuZnMvbmFtZWkuYzo0OTc4Olx0ZmlscCA9IHBhdGhfb3BlbmF0KFx1MDAyNm5kLCBvcCwgZmxhZ3MgfCBMT09LVVBfUkNVKTtcbmZzL25hbWVpLmMtNDk3OS1cdGlmICh1bmxpa2VseShmaWxwID09IEVSUl9QVFIoLUVDSElMRCkpKVxuZnMvbmFtZWkuYzo0OTgwOlx0XHRmaWxwID0gcGF0aF9vcGVuYXQoXHUwMDI2bmQsIG9wLCBmbGFncyk7XG5mcy9uYW1laS5jLTQ5ODEtXHRpZiAodW5saWtlbHkoZmlscCA9PSBFUlJfUFRSKC1FU1RBTEUpKSlcbmZzL25hbWVpLmM6NDk4MjpcdFx0ZmlscCA9IHBhdGhfb3BlbmF0KFx1MDAyNm5kLCBvcCwgZmxhZ3MgfCBMT09LVVBfUkVWQUwpO1xuZnMvbmFtZWkuYy00OTgzLVx0cmVzdG9yZV9uYW1laWRhdGEoKTtcbi0tXG5mcy9uYW1laS5jPTQ5ODc9c3RydWN0IGZpbGUgKmRvX2ZpbGVfb3Blbl9yb290KGNvbnN0IHN0cnVjdCBwYXRoICpyb290LFxuLS1cbmZzL25hbWVpLmMtNTAwMS1cdHNldF9uYW1laWRhdGEoXHUwMDI2bmQsIC0xLCBmaWxlbmFtZSwgcm9vdCk7XG5mcy9uYW1laS5jOjUwMDI6XHRmaWxlID0gcGF0aF9vcGVuYXQoXHUwMDI2bmQsIG9wLCBmbGFncyB8IExPT0tVUF9SQ1UpO1xuZnMvbmFtZWkuYy01MDAzLVx0aWYgKHVubGlrZWx5KGZpbGUgPT0gRVJSX1BUUigtRUNISUxEKSkpXG5mcy9uYW1laS5jOjUwMDQ6XHRcdGZpbGUgPSBwYXRoX29wZW5hdChcdTAwMjZuZCwgb3AsIGZsYWdzKTtcbmZzL25hbWVpLmMtNTAwNS1cdGlmICh1bmxpa2VseShmaWxlID09IEVSUl9QVFIoLUVTVEFMRSkpKVxuZnMvbmFtZWkuYzo1MDA2Olx0XHRmaWxlID0gcGF0aF9vcGVuYXQoXHUwMDI2bmQsIG9wLCBmbGFncyB8IExPT0tVUF9SRVZBTCk7XG5mcy9uYW1laS5jLTUwMDctXHRyZXN0b3JlX25hbWVpZGF0YSgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipGb2N1c2luZyBpbiBvbiBGaWxlc3lzdGVtIENyZWF0aW9uIGFuZCBBY2Nlc3MqKgoKQWxyaWdodCwgSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb3JlIHN5c3RlbSBjYWxscyByZWxhdGVkIHRvIGZpbGUgY3JlYXRpb24gYW5kIGRpcmVjdG9yeSBvcGVyYXRpb25zLCBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGUga2VybmVsIGlzIGhhbmRsaW5nIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc3lzdGVtIGNhbGxzIGFuZCBhbnkgcmVsYXRlZCBhYnN0cmFjdGlvbnMuIExldCYjMzk7cyBzZWUuLi5JIHRoaW5rIGBkb19zeXNfb3BlbmF0MmAgaXMgYSBncmVhdCBwb2ludCBvZiBmb2N1cyBoZXJlLiBUaGF0IHNob3VsZCBhbGxvdyBtZSB0byBnbyBvdmVyIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBvZiBvcGVuYXQyIGFuZCBzZWUgaWYgaXQmIzM5O3MgdGhlIHJpZ2h0IHN5bWJvbCB0byBzdGFydCB3aXRoLiBgcGF0aF9vcGVuYXRgIGlzIGFub3RoZXIgdmVyeSBsaWtlbHkgY2FuZGlkYXRlIGZvciBpbnZlc3RpZ2F0aW9uLiBUaGF0IGlzIGEgc29saWQganVtcGluZy1vZmYgcG9pbnQgdG9vLiBMZXQmIzM5O3Mgbm90IGZvcmdldCB0aGUgYmFzaWNzOiBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBhbmQgYGRlbnRyeV9jcmVhdGVgIGFyZSBhbGwgY3J1Y2lhbCB0byB1bmRlcnN0YW5kLiBUaG9zZSB3aWxsIGFsbG93IG1lIHRvIHRyYWNrIHRoZSBtb3JlIGJhc2ljIHBhcnRzIG9mIHRoZSBzeXN0ZW0gY2FsbC4gTm93IEkgbmVlZCB0byBzZWUgaWYgYSBmaWxlIHN5c3RlbSB0aGF0IG1pZ2h0IGJlIHJ1bm5pbmcgb24gYSBuZXR3b3JrZWQgZHJpdmUgbWF5IGJlIGhhdmluZyBpc3N1ZXMsIHNvIEkgd2lsbCBjaGVjayB0aGUgYGZzL3NtYi9jbGllbnQvZGlyLmNgIGZpbGUgYW5kIGxvb2sgZm9yIHRoZSBgY2lmc19hdG9taWNfb3BlbmAgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NpZnNfYXRvbWljX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L2Rpci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvZGlyLmM9NDg5PXN0YXRpYyBpbnQgY2lmc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtNTE5LSAqL1xuZnMvc21iL2NsaWVudC9kaXIuYzo1MjA6aW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuZnMvc21iL2NsaWVudC9kaXIuYy01MjEtXHRcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NDkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEZpbGUgU3lzdGVtIExhbmRzY2FwZTogVW5jb3ZlcmluZyBgY2lmc19hdG9taWNfb3BlbmAmIzM5O3MgT3JpZ2lucyoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGBjaWZzX2F0b21pY19vcGVuYC4gVGhlIGNsdWUgaXMgdGhhdCBpdCYjMzk7cyBleHBvcnRlZCBvciB1c2VkIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZXhwbG9yZSBvdGhlciBmaWxlIHN5c3RlbXMgdGhhdCBhbHNvIHV0aWxpemUgc2ltaWxhciBhdG9taWMgb3BlbiBzZW1hbnRpY3MuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgdGhlIGBmcy85cC92ZnNfaW5vZGUuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvciB1c2FnZSBvZiBgdjlmc192ZnNfYXRvbWljX29wZW5gLiBJdCBtYWtlcyBzZW5zZSB0byBzdGFydCBoZXJlIGJlY2F1c2UgdGhlIDlwIGZpbGVzeXN0ZW0sIHdpdGggaXRzIHNpbWlsYXIgZGlzdHJpYnV0ZWQgZmlsZSBzeXN0ZW0gYXBwcm9hY2gsIG1pZ2h0IG9mZmVyIGluc2lnaHRzIGludG8gaG93IGF0b21pYyBvcGVuIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhpcyB0eXBlIG9mIGVudmlyb25tZW50LiBVbmRlcnN0YW5kaW5nIHRoZSBgOXBgIGltcGxlbWVudGF0aW9uIGNvdWxkIHJldmVhbCBjb21tb24gcGF0dGVybnMgb3IgcHJvdmlkZSBhIHVzZWZ1bCBwb2ludCBvZiBjb21wYXJpc29uIHRvIGlsbHVtaW5hdGUgaG93IGBjaWZzX2F0b21pY19vcGVuYCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2OWZzX3Zmc19hdG9taWNfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLzlwL3Zmc19pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL3Zmc19pbm9kZS5jPTU3OT12OWZzX2NyZWF0ZShzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy85cC92ZnNfaW5vZGUuYy02NDktICpcbmZzLzlwL3Zmc19pbm9kZS5jOjY1MDogKiBvcGVuKC4uLCBPX0NSRUFUKSBpcyBoYW5kbGVkIGluIHY5ZnNfdmZzX2F0b21pY19vcGVuKCkuICBUaGlzIGlzIG9ubHkgY2FsbGVkXG5mcy85cC92ZnNfaW5vZGUuYy02NTEtICogZm9yIG1rbm9kKDIpLlxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jPTc2OD1zdGF0aWMgaW50XG5mcy85cC92ZnNfaW5vZGUuYzo3Njk6djlmc192ZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzLzlwL3Zmc19pbm9kZS5jLTc3MC1cdFx0ICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUpXG4tLVxuZnMvOXAvdmZzX2lub2RlLmM9MTM2OT1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9uc19kb3R1ID0ge1xuLS1cbmZzLzlwL3Zmc19pbm9kZS5jLTEzNzEtXHQubG9va3VwID0gdjlmc192ZnNfbG9va3VwLFxuZnMvOXAvdmZzX2lub2RlLmM6MTM3MjpcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuLFxuZnMvOXAvdmZzX2lub2RlLmMtMTM3My1cdC5zeW1saW5rID0gdjlmc192ZnNfc3ltbGluayxcbi0tXG5mcy85cC92ZnNfaW5vZGUuYz0xMzg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2OWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzLzlwL3Zmc19pbm9kZS5jLTEzODYtXHQubG9va3VwID0gdjlmc192ZnNfbG9va3VwLFxuZnMvOXAvdmZzX2lub2RlLmM6MTM4NzpcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuLFxuZnMvOXAvdmZzX2lub2RlLmMtMTM4OC1cdC51bmxpbmsgPSB2OWZzX3Zmc191bmxpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlZmluZW1lbnQgb2YgRm9jdXMgU3ltYm9scyBmb3IgRmlsZSBTeXN0ZW0gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY3JpdGljYWwgc3ltYm9scyB0byBmb2N1cyBvbiBmb3IgYSBkZWVwIGRpdmUuIEluaXRpYWxseSwgSSBoYWQgYSBsaXN0OiBgcGF0aF9vcGVuYXRgLCBgZG9fc3lzX29wZW5hdDJgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBjaWZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLiBCdXQgdGhlbiBJIHJlYWxpemVkIGBkb19zeXNfb3BlbmF0MmAgaXMgYSBzeXNjYWxsIGVudHJ5LCBzbyBtYXliZSBgZG9fZmlscF9vcGVuYCBvciwgYmV0dGVyIHlldCwganVzdCBgcGF0aF9vcGVuYXRgIGlzIGEgc3Ryb25nZXIgY2hvaWNlIGFzIGEgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBgb3BlbmF0MmAgc3lzdGVtIGNhbGwuCgpTbywgSSYjMzk7bSBnb2luZyB0byByZWZpbmUgdGhhdCBpbml0aWFsIGxpc3QuIEl0JiMzOTtzIG5vdzogYHBhdGhfb3BlbmF0YCwgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYGRlbnRyeV9jcmVhdGVgLCBgY2lmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGZ1c2VfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLgoKTmV4dCwgSSBuZWVkIHRvIGNvcnJlbGF0ZSB0aGVzZSB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGludG8gdGhlc2UgS2NvbmZpZyBvcHRpb25zOiBgOVBfRlNgLCBgQ0VQSF9GU2AsIGBGVVNFX0ZTYCwgYEdGUzJfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYFZCT1hTRl9GU2AuIEEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGFsd2F5cyBpbiBvcmRlcjsgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYFZCT1hTRl9GU2AgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IHN5bWJvbCBmb3IgdGhhdCBmaWxlc3lzdGVtLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWQk9YU0ZfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy92Ym94c2YvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy92Ym94c2YvS2NvbmZpZzoxOmNvbmZpZyBWQk9YU0ZfRlNcbmZzL3Zib3hzZi9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsQm94IGd1ZXN0IHNoYXJlZCBmb2xkZXIgKHZib3hzZikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYwNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRmlsZXN5c3RlbSBQcm90b2NvbCBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGRlZmluaXRlbHkgZm9jdXNpbmcgb24gYFZCT1hTRl9GU2AuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHBhdGguIEJ1dCBub3cgSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBicm9hZGVyOiBXaGF0IGFyZSB0aGUgb3RoZXIgbGlrZWx5IGNhbmRpZGF0ZXMsIGV2ZW4gaWYgdGhleSBhcmVuJiMzOTt0IHRoZSBwcmltYXJ5IGZvY3VzPyBBbmQsIHNpbmNlIHdlJiMzOTtyZSBkaXZpbmcgaW50byBmaWxlIHN5c3RlbXMsIHdvdWxkbiYjMzk7dCBgOVBfRlNgIGFsc28gYmUgcmVsZXZhbnQgdG8gY29uc2lkZXIsIGV2ZW4gaWYganVzdCBmb3IgYSBxdWljayBjb21wYXJpc29uIG9mIGNhcGFiaWxpdGllcyBvciBwb3RlbnRpYWwgZWRnZSBjYXNlcz8gSnVzdCB0aHJvd2luZyBpdCBvdXQgdGhlcmUgYXMgc29tZXRoaW5nIHRvIHF1aWNrbHkgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgOVBfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy85cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzLzlwL0tjb25maWc6Mjpjb25maWcgOVBfRlNcbmZzLzlwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1BsYW4gOSBSZXNvdXJjZSBTaGFyaW5nIFN1cHBvcnQgKDlQMjAwMClcJiMzNDtcbi0tXG5mcy85cC9LY29uZmlnPTE0PWlmIDlQX0ZTXG5mcy85cC9LY29uZmlnOjE1OmNvbmZpZyA5UF9GU0NBQ0hFXG5mcy85cC9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzLzlwL0tjb25maWctMjItXG5mcy85cC9LY29uZmlnOjIzOmNvbmZpZyA5UF9GU19QT1NJWF9BQ0xcbmZzLzlwL0tjb25maWctMjQtXHRib29sIFwmIzM0OzlQIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvOXAvS2NvbmZpZz0zMj1lbmRpZlxuLS1cbmZzLzlwL0tjb25maWctMzQtXG5mcy85cC9LY29uZmlnOjM1OmNvbmZpZyA5UF9GU19TRUNVUklUWVxuZnMvOXAvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7OVAgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDU5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkZpbGUgU3lzdGVtIENvbnNpZGVyYXRpb25zKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBmaWxlIHN5c3RlbXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAqeWVzKiwgbGV0JiMzOTtzIGNvbnNpZGVyIGA5UF9GU2AuIEl0JiMzOTtzIGdvdCBpdHMgcHJvcywgd2Uga25vdyBpdCwgaXRzIHN0cmVuZ3RocyBhbmQgd2Vha25lc3NlcyBhcmUgZmFtaWxpYXIuIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBmYXIgZG93biB0aGF0IHJvYWQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcuIFRoZSBxdWVzdGlvbiBpcywgd2hhdCBhYm91dCBgQ0VQSF9GU2A/IEl0JiMzOTtzIGEgZGlzdHJpYnV0ZWQgZmlsZSBzeXN0ZW0sIHBvdGVudGlhbGx5IG9mZmVyaW5nIGFkdmFudGFnZXMgaW4gc2NhbGFiaWxpdHkgYW5kIHJlZHVuZGFuY3kuIEkgbmVlZCB0byB3ZWlnaCB0aGUgcHJvcyBhbmQgY29ucyBvZiBib3RoLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBzcGVjaWZpYyByZXF1aXJlbWVudHMgb2YgdGhpcyBwcm9qZWN0IGFuZCB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGNvdmVyZWQgYWxsIGJhc2VzIGJlZm9yZSBjb21taXR0aW5nIHRvIGEgZmluYWwgZGVjaXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRVBIX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvY2VwaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NlcGgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvY2VwaC9LY29uZmlnOjI6Y29uZmlnIENFUEhfRlNcbmZzL2NlcGgvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q2VwaCBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbVwmIzM0O1xuLS1cbmZzL2NlcGgvS2NvbmZpZz0xOT1pZiBDRVBIX0ZTXG5mcy9jZXBoL0tjb25maWc6MjA6Y29uZmlnIENFUEhfRlNDQUNIRVxuZnMvY2VwaC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtFbmFibGUgQ2VwaCBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvY2VwaC9LY29uZmlnPTI3PWVuZGlmXG5mcy9jZXBoL0tjb25maWctMjgtXG5mcy9jZXBoL0tjb25maWc6Mjk6Y29uZmlnIENFUEhfRlNfUE9TSVhfQUNMXG5mcy9jZXBoL0tjb25maWctMzAtXHRib29sIFwmIzM0O0NlcGggUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9jZXBoL0tjb25maWctMzgtXG5mcy9jZXBoL0tjb25maWc6Mzk6Y29uZmlnIENFUEhfRlNfU0VDVVJJVFlfTEFCRUxcbmZzL2NlcGgvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7Q2VwaEZTIFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjUxNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeToKCioqRmlsZXN5c3RlbSBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYSBgQ0VQSF9GU2Agc2l0dWF0aW9uLiBUaGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYWx0ZXJuYXRpdmVzLCBwb3RlbnRpYWwgZWRnZSBjYXNlcywgYW5kIGFyZWFzIHRoYXQgbWlnaHQgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhlbiBpcywgd2hhdCBhYm91dCBgRlVTRV9GU2A/IERvZXMgdGhpcyBpbnRlcmZhY2Ugb2ZmZXIgYW55IGJlbmVmaXRzIG9yIGRyYXdiYWNrcywgY29tcGF0aWJpbGl0eSBjb25jZXJucywgb3IgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZXMgcmVsYXRpdmUgdG8gdGhlIENlcGggaW1wbGVtZW50YXRpb24/IFRoZSBpbXBsaWNhdGlvbnMgY291bGQgYmUgc2lnbmlmaWNhbnQuIExldCYjMzk7cyBkZWx2ZSBkZWVwZXIgYW5kIGFzc2VzcyB3aGljaCBvcHRpb24gaXMgb3B0aW1hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVU0VfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mdXNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xuZnMvZnVzZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjc2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyBGaWxlIFN5c3RlbSBJbXBsZW1lbnRhdGlvbnMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgYSBjbGVhciBhY2tub3dsZWRnbWVudDogKmBGVVNFX0ZTYCouIFRoYXQmIzM5O3Mgb24gdGhlIHRhYmxlLiBCdXQgaGFuZyBvbiwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBGVVNFIGltcGxlbWVudGF0aW9uIHJvdXRlLi4ud2hhdCBhYm91dCBgR0ZTMl9GU2A/IEl0JiMzOTtzIGNydWNpYWwgdG8gZXZhbHVhdGUgYWxsIHZpYWJsZSBvcHRpb25zLCBhbmQgYSBkaXN0cmlidXRlZCwgY2x1c3Rlci1hd2FyZSBmaWxlIHN5c3RlbSBsaWtlIEdGUzIgd2FycmFudHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIFt5b3VyIHNwZWNpZmljIGZpZWxkL2FwcGxpY2F0aW9uXSBhbmQgaXRzIGxpa2VseSBkZW1hbmRzIGZvciBzY2FsYWJpbGl0eSwgaGlnaCBhdmFpbGFiaWxpdHksIGFuZCBjb25jdXJyZW50IGFjY2Vzcy4gSSBuZWVkIHRvIHdlaWdoIHRoZSBpbmhlcmVudCBhZHZhbnRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzIG9mICpib3RoKiBhcHByb2FjaGVzIHRvIHNlZSB3aGljaCBvbmUsIG9yIGNvbWJpbmF0aW9uIHRoZXJlb2YsIGlzIHRoZSBtb3N0IGFwcHJvcHJpYXRlLiBUaGUgZGVzaWduIHRyYWRlb2ZmcyBoZXJlIGFyZSBzdWJzdGFudGlhbCwgYW5kIHdhcnJhbnQgdGhpcyBpbml0aWFsIGNvbXBhcmlzb24sIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgR0ZTMl9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2dmczIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9nZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2dmczIvS2NvbmZpZzoyOmNvbmZpZyBHRlMyX0ZTXG5mcy9nZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2dmczIvS2NvbmZpZy0yNi1cbmZzL2dmczIvS2NvbmZpZzoyNzpjb25maWcgR0ZTMl9GU19MT0NLSU5HX0RMTVxuZnMvZ2ZzMi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtHRlMyIERMTSBsb2NraW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTMyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSB0aG91Z2h0cywgYW5kIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkZpbGVzeXN0ZW0gQ29uc2lkZXJhdGlvbnM6IEdGUzIgYW5kIE5GUyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYSBzdHJvbmcgYWZmaXJtYXRpdmUuIFllcywgZGVmaW5pdGVseSwgYEdGUzJfRlNgIGlzIGEgZ28gZm9yIGNvbnNpZGVyYXRpb24gaGVyZS4gVGhlIGRpc3RyaWJ1dGVkIG5hdHVyZSwgaXRzIGluaGVyZW50IGNsdXN0ZXJpbmcgY2FwYWJpbGl0aWVzLCBhbmQgaXRzIGdlbmVyYWwgcGVyZm9ybWFuY2UgcHJvZmlsZSBpbiB0aGUgaW50ZW5kZWQgd29ya2xvYWQgYXJlIGFsbCBnb29kIHJlYXNvbnMgdG8gc3RhcnQgdGhlcmUuIFdlJiMzOTtyZSBvbiB0aGUgcmlnaHQgdHJhY2suCgpCdXQsIGJlZm9yZSB3ZSBnZXQgdG9vIGZhciBkb3duIHRoYXQgcGF0aC4uLml0JiMzOTtzIGNyaXRpY2FsIHRoYXQgSSBkb24mIzM5O3Qgb3Zlcmxvb2sgYSBjcml0aWNhbCBvcHRpb24uIEhvbGQgb24gYSBtb21lbnQuIFdoYXQgYWJvdXQgYSBtb3JlIG5ldHdvcmstY2VudHJpYyBhcHByb2FjaD8gSG93IGRvZXMgYE5GU19GU2Agc3RhY2sgdXAgYWdhaW5zdCBgR0ZTMmAgaW4gdGhpcyBzcGVjaWZpYyB1c2UgY2FzZT8gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHdlaWdoIHRoYXQgb3V0IGFzIHdlbGwsIGNvbnNpZGVyaW5nIG5ldHdvcmsgb3ZlcmhlYWQsIGNvbXBsZXhpdHkgYW5kIGRhdGEgY29uc2lzdGVuY3kgbW9kZWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL25mcy9LY29uZmlnOjI6Y29uZmlnIE5GU19GU1xuZnMvbmZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05GUyBjbGllbnQgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL25mcy9LY29uZmlnPTE2Mj1jb25maWcgUk9PVF9ORlNcbi0tXG5mcy9uZnMvS2NvbmZpZy0xNzItXG5mcy9uZnMvS2NvbmZpZzoxNzM6Y29uZmlnIE5GU19GU0NBQ0hFXG5mcy9uZnMvS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O1Byb3ZpZGUgTkZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1MTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5ldHdvcmsgRmlsZXN5c3RlbXMgLSBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGEgY2xlYXIgY29uZmlybWF0aW9uOiB5ZXMsIE5ldHdvcmsgRmlsZSBTeXN0ZW0gaXMgZGVmaW5pdGVseSBvbiB0aGUgdGFibGUuIEl0JiMzOTtzIGEga2V5IGNvbnRlbmRlci4gQnV0IHRoZSBuZXh0IGltbWVkaWF0ZSBxdWVzdGlvbiwgdGhlIG9uZSB0aGF0IG5hdHVyYWxseSBmb2xsb3dzLCBpczogV2hhdCBhYm91dCBDb21tb24gSW50ZXJuZXQgRmlsZSBTeXN0ZW0/IENJRlMgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgbmV0d29yayBmaWxlc3lzdGVtcyBhbmQgdGhlaXIgc3VpdGFiaWxpdHksIHNvIHdlIGhhdmUgdG8gd2VpZ2ggdGhlIHByb3MgYW5kIGNvbnMgb2YgTkZTIHZlcnN1cyBDSUZTIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgYSBjb3JlIGRlc2lnbiBkZWNpc2lvbiwgYW5kIHdlIGhhdmUgdG8gZmFjdG9yIGluIGludGVyb3BlcmFiaWxpdHksIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcywgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBhbmQgcG90ZW50aWFsIGNsaWVudCBiYXNlLiBXZSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdXNpbmcgZWl0aGVyIGFuZCB0aGUgcG90ZW50aWFsIHRyYWRlb2Zmcy4gVGhlIGNvbXBhcmF0aXZlIG1lcml0cyBvZiBlYWNoIG5lZWQgdG8gYmUgY2FyZWZ1bGx5IGV4YW1pbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0lGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXG5mcy9zbWIvY2xpZW50L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo1NDpjb25maWcgQ0lGU19TVEFUUzJcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7RXh0ZW5kZWQgc3RhdGlzdGljc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02Ny1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctODQtXHRib29sIFwmIzM0O0tlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjkyOmNvbmZpZyBDSUZTX1hBVFRSXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXHRib29sIFwmIzM0O0NJRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMDYtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDtDSUZTIFBPU0lYIEV4dGVuc2lvbnNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMjg6Y29uZmlnIENJRlNfREVCVUcyXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYWRkaXRpb25hbCBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMzgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7RHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNTAtXHRib29sIFwmIzM0O0RGUyBmZWF0dXJlIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE2Mjpjb25maWcgQ0lGU19TV05fVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVx0Ym9vbCBcJiMzNDtTV04gZmVhdHVyZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE3Mi1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0FsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTgxOmNvbmZpZyBDSUZTX1NNQl9ESVJFQ1RcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXHRib29sIFwmIzM0O1NNQiBEaXJlY3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXHRib29sIFwmIzM0O1Byb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwMC1cdGJvb2wgXCYjMzQ7U01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIwNzpjb25maWcgQ0lGU19DT01QUkVTU0lPTlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U01CIG1lc3NhZ2UgY29tcHJlc3Npb24gKEV4cGVyaW1lbnRhbClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3ODAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbHMgZm9yIGEgVkZTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBmaWd1cmluZyBvdXQgaG93IHRvIGNvbmZpZ3VyZSBzeXpib3QgdG8gYmVzdCB0ZXN0IGl0LiBUaGUgY29yZSBvZiB0aGlzIGlzIHRoZSBWRlMsIGJ1dCBpdCB0b3VjaGVzIGEgbnVtYmVyIG9mIGZpbGVzeXN0ZW1zLiBGaXJzdCwgcmVnYXJkaW5nIGZpbGVzeXN0ZW1zOiBgQ0lGU2AsIGRlZmluaXRlbHkuIEkgc2VlIHRoZSBjb25maWdzIGFyZTogYDlQX0ZTYCwgYENFUEhfRlNgLCBgRlVTRV9GU2AsIGBHRlMyX0ZTYCwgYE5GU19GU2AsIGBDSUZTYCwgYW5kIGBWQk9YU0ZfRlNgLiBIbW0sIGRvIEkgbGlzdCB0aGVtIGFsbD8gVGhlIHByb21wdCBzYXlzICYjMzQ7RG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0IHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4mIzM0OyBXaGlsZSB0aGVzZSBmaWxlc3lzdGVtcyAqYXJlKiBzcGVjaWZpYyB0byB0aGUgY29kZSBjaGFuZ2VzLCBpdCYjMzk7cyBwb3NzaWJsZSB0aGV5IGFyZSBhbHJlYWR5IGVuYWJsZWQgaW4gZ2VuZXJpYyBjb25maWdzLiBJIGtub3cgYDlQX0ZTYCwgYENFUEhfRlNgLCBgRlVTRV9GU2AsIGBHRlMyX0ZTYCwgYE5GU19GU2AsIGFuZCBgQ0lGU2AgYXJlIGZvciBzdXJlIGVuYWJsZWQgaW4gc3l6Ym90LiBgVkJPWFNGX0ZTYCBtaWdodCBub3QgYmUsIGJ1dCBsaXN0aW5nIGl0IGlzIHNhZmUgYW55d2F5LCBhbmQgcmVhbGx5LCB0aGUgVkZTIGNoYW5nZXMgY2FuIGJlIHRlc3RlZCB3aXRoIGFueSBmaWxlc3lzdGVtLiBTdGlsbCwgbGlzdGluZyB0aGVzZSBmaWxlc3lzdGVtcyBpcyBhIGdvb2QgaWRlYS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHN5bWJvbHMuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZTogYHBhdGhfb3BlbmF0YCwgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYGRlbnRyeV9jcmVhdGVgLCBgY2lmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGZ1c2VfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLiBCdXQgd2FpdCwgdGhlcmUgYXJlIGFsc28gYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgIGFuZCBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGJvdGggb2Ygd2hpY2ggYXJlIGFsc28gbW9kaWZpZWQuIEkmIzM5O2xsIGFkZCB0aGVtIHRvIHRoZSBsaXN0IGFzIHdlbGwuCgpJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGVudHJ5IHBvaW50cy4gYHBhdGhfb3BlbmF0YCBzZWVtcyBsaWtlIHRoZSBtYWluIGZ1bmN0aW9uIHRvIGZvY3VzIG9uLCBoYW5kbGluZyBgT19DUkVBVGAgYW5kIGBPX0RJUkVDVE9SWWAuIGB2ZnNfbWtkaXJgIGhhbmRsZXMgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAsIGB2ZnNfY3JlYXRlYCBoYW5kbGVzIGBPX0NSRUFUYCAod2l0aG91dCBgT19ESVJFQ1RPUllgKSwgYW5kIGBkZW50cnlfY3JlYXRlYCBpcyBzb21ldGltZXMgdXNlZCB3aXRoIGBPX0NSRUFUYC4KCkxldCYjMzk7cyBsb29rIGZvciBvdGhlciBpbXBvcnRhbnQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgcmVsZXZhbnQgZmlsZXMuIEkmIzM5O2xsIGNoZWNrIGBmcy9uYW1laS5jYCwgc3RhcnRpbmcgd2l0aCBgZG9fc3lzX29wZW5hdDJgIHdoaWNoIGlzIGFjdHVhbGx5IGluIGBmcy9vcGVuLmNgLiBJJiMzOTtsbCBhZGQgdGhhdCB0byB0aGUgbGlzdC4gSSYjMzk7bGwgYWxzbyBsb29rIGZvciBvdGhlciBrZXkgZnVuY3Rpb25zIHRvIHRlc3QuIEkgc2VlIGBtYXlfY3JlYXRlX2luX3N0aWNreWAgaXMgbW9kaWZpZWQuIEl0JiMzOTtzIHN0YXRpYywgc28gaXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQsIEkgd2lsbCBza2lwIGl0LiBgdmZzX21rZGlyX25vX3Blcm1gIGlzIHN0YXRpYyBpbmxpbmUsIHNvIEkgZG9uJiMzOTt0IG5lZWQgdG8gbGlzdCBpdC4gYGxvb2t1cF9vcGVuYCwgYGF0b21pY19vcGVuYCwgYG1heV9vX2NyZWF0ZWAsIGBvX2NyZWF0ZV9tb2RlYCwgYHZmc19wcmVwYXJlX21vZGVgLCBgdmZzX2NyZWF0ZV9ub19wZXJtYCwgYHRyYWlsaW5nX3NsYXNoZXNgLCBgbG9va3VwX2xhc3RgLCBgb3Blbl9sYXN0X2xvb2t1cHNgLCBgZG9fb3BlbmAsIGFuZCBgZmlsZW5hbWVfY3JlYXRlYCBhcmUgYWxsIHN0YXRpYyBhbmQgc28gd2lsbCBub3QgYmUgYWRkZWQuIEZpbmFsbHkgYGZpbGVuYW1lX3VubGlua2F0YCBpcyBpbiBgZnMvbmFtZWkuY2AgYW5kIG5vdCBzdGF0aWMsIGFuZCBzbyBJIHNob3VsZCBhZGQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGVuYW1lX3VubGlua2F0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uYW1laS5jPTU2MjY9RVhQT1JUX1NZTUJPTCh2ZnNfdW5saW5rKTtcbi0tXG5mcy9uYW1laS5jLTU2MzMtICovXG5mcy9uYW1laS5jOjU2MzQ6aW50IGZpbGVuYW1lX3VubGlua2F0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcbmZzL25hbWVpLmMtNTYzNS17XG4tLVxuZnMvbmFtZWkuYz01Njk3PVNZU0NBTExfREVGSU5FMyh1bmxpbmthdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCBpbnQsIGZsYWcpXG4tLVxuZnMvbmFtZWkuYy01NzA0LVx0XHRyZXR1cm4gZmlsZW5hbWVfcm1kaXIoZGZkLCBuYW1lKTtcbmZzL25hbWVpLmM6NTcwNTpcdHJldHVybiBmaWxlbmFtZV91bmxpbmthdChkZmQsIG5hbWUpO1xuZnMvbmFtZWkuYy01NzA2LX1cbi0tXG5mcy9uYW1laS5jPTU3MDg9U1lTQ0FMTF9ERUZJTkUxKHVubGluaywgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUpXG4tLVxuZnMvbmFtZWkuYy01NzEwLVx0Q0xBU1MoZmlsZW5hbWUsIG5hbWUpKHBhdGhuYW1lKTtcbmZzL25hbWVpLmM6NTcxMTpcdHJldHVybiBmaWxlbmFtZV91bmxpbmthdChBVF9GRENXRCwgbmFtZSk7XG5mcy9uYW1laS5jLTU3MTItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjgyNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBOb24tU3RhdGljIGBmaWxlbmFtZV9gIEZ1bmN0aW9ucyoqCgpIbW0sIHNvIGBmaWxlbmFtZV91bmxpbmthdGAgYW5kIGBmaWxlbmFtZV9yZW5hbWVhdDJgIGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlaXIgaW1tZWRpYXRlIGNvbXBpbGF0aW9uIHVuaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gV2h5IHdlcmUgdGhleSBkZXNpZ25lZCB0aGlzIHdheT8gQXJlIHRoZXkgcGFydCBvZiBzb21lIGxhcmdlciBpbnRlcmZhY2UsIG9yIGlzIHRoaXMgcGVyaGFwcyBhbiBvdmVyc2lnaHQgdGhhdCYjMzk7cyBjcmVwdCBpbnRvIHRoZSBjb2RlIGJhc2U/CgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBzb3VyY2UuIE15IGZpcnN0IHBvcnQgb2YgY2FsbCwgbmF0dXJhbGx5LCBpcyBgZnMvbmFtZWkuY2AuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBmaWxlbmFtZV9yZW5hbWVhdDJgIChvciBhdCBsZWFzdCBpdHMgZGVmaW5pdGlvbikgdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIG5hbWVzcGFjZS4gSXMgaXQgYmVpbmcgdXNlZCBieSBhbnkgZXh0ZXJuYWwgbW9kdWxlcz8gV2hhdCYjMzk7cyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbj8gVGltZSB0byBncmFiIHRoZSBjb2RlIGFuZCBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWxlbmFtZV9yZW5hbWVhdDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uYW1laS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9NjIwMj1FWFBPUlRfU1lNQk9MKHZmc19yZW5hbWUpO1xuZnMvbmFtZWkuYy02MjAzLVxuZnMvbmFtZWkuYzo2MjA0OmludCBmaWxlbmFtZV9yZW5hbWVhdDIoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpmcm9tLFxuZnMvbmFtZWkuYy02MjA1LVx0XHQgICAgICAgaW50IG5ld2RmZCwgc3RydWN0IGZpbGVuYW1lICp0bywgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmZzL25hbWVpLmM9NjMwNz1TWVNDQUxMX0RFRklORTUocmVuYW1lYXQyLCBpbnQsIG9sZGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgb2xkbmFtZSxcbi0tXG5mcy9uYW1laS5jLTYzMTEtXHRDTEFTUyhmaWxlbmFtZSwgbmV3KShuZXduYW1lKTtcbmZzL25hbWVpLmM6NjMxMjpcdHJldHVybiBmaWxlbmFtZV9yZW5hbWVhdDIob2xkZGZkLCBvbGQsIG5ld2RmZCwgbmV3LCBmbGFncyk7XG5mcy9uYW1laS5jLTYzMTMtfVxuLS1cbmZzL25hbWVpLmM9NjMxNT1TWVNDQUxMX0RFRklORTQocmVuYW1lYXQsIGludCwgb2xkZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBvbGRuYW1lLFxuLS1cbmZzL25hbWVpLmMtNjMxOS1cdENMQVNTKGZpbGVuYW1lLCBuZXcpKG5ld25hbWUpO1xuZnMvbmFtZWkuYzo2MzIwOlx0cmV0dXJuIGZpbGVuYW1lX3JlbmFtZWF0MihvbGRkZmQsIG9sZCwgbmV3ZGZkLCBuZXcsIDApO1xuZnMvbmFtZWkuYy02MzIxLX1cbi0tXG5mcy9uYW1laS5jPTYzMjM9U1lTQ0FMTF9ERUZJTkUyKHJlbmFtZSwgY29uc3QgY2hhciBfX3VzZXIgKiwgb2xkbmFtZSwgY29uc3QgY2hhciBfX3VzZXIgKiwgbmV3bmFtZSlcbi0tXG5mcy9uYW1laS5jLTYzMjYtXHRDTEFTUyhmaWxlbmFtZSwgbmV3KShuZXduYW1lKTtcbmZzL25hbWVpLmM6NjMyNzpcdHJldHVybiBmaWxlbmFtZV9yZW5hbWVhdDIoQVRfRkRDV0QsIG9sZCwgQVRfRkRDV0QsIG5ldywgMCk7XG5mcy9uYW1laS5jLTYzMjgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzU3NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IEZpbGVzeXN0ZW0gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgdGhyb3VnaCB0aGVzZSByZWNlbnQgY2hhbmdlcywgYW5kIGl0IHNlZW1zIGxpa2UgYGZpbGVuYW1lX3VubGlua2F0YCBhbmQgYGZpbGVuYW1lX3JlbmFtZWF0MmAgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIHVzZSB0aGlzIG5ldyBgdHJhaWxpbmdfc2xhc2hlc2AgZnVuY3Rpb24sIHdoaWNoIGlzLCBobW0sIGFuIGlubGluZSBmdW5jdGlvbi4gSSBzZWUgaXQmIzM5O3MgZGVmaW5lZCBsaWtlIHRoaXM6CmBgYGMKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhjb25zdCBzdHJ1Y3QgcXN0ciBsYXN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIChib29sKWxhc3QubmFtZVtsYXN0Lmxlbl07CiYjNDM7fQpgYGAKRXNzZW50aWFsbHksIGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyB0aGUgaW5kZXhpbmcgbWV0aG9kIGBsYXN0Lm5hbWVbbGFzdC5sZW5dYCB3aXRoIHRoZSBtb3JlIGV4cGxpY2l0IGZ1bmN0aW9uIGNhbGwgdG8gYHRyYWlsaW5nX3NsYXNoZXNgLiBUaGlzIGlzbiYjMzk7dCB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBsaWVzLiBUaGF0IHNlZW1zIHRvIGJlIGhhcHBlbmluZyBpbiBgb3BlbmF0YCB3aGVuIHVzaW5nIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHJlYWxseSBkaWcgaW50byBhcmU6IGBwYXRoX29wZW5hdGAsIGBkb19zeXNfb3BlbmF0MmAsIGB2ZnNfbWtkaXJgLCBgdmZzX2NyZWF0ZWAsIGFuZCBgZGVudHJ5X2NyZWF0ZWAuIFRob3NlIGZlZWwgbGlrZSB0aGUgaGVhcnQgb2YgaXQuCgpCdXQgdGhlbiB0aGVyZSYjMzk7cyBhbHNvIHRoZSByZWxhdGVkIGZpbGUgc3lzdGVtIGZ1bmN0aW9ucyBJIG5lZWQgdG8gY2hlY2ssIHRoZSBjaGFuZ2VzIHRoYXQgdXNlIHRoZSBuZXdseSBjcmVhdGVkIGB0cmFpbGluZ19zbGFzaGVzYCBmdW5jdGlvbjogYGZpbGVuYW1lX3VubGlua2F0YCwgYGZpbGVuYW1lX3JlbmFtZWF0MmAuIEFuZCB0aGUgYXRvbWljIG9wZW4gZnVuY3Rpb25zOiBgY2lmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsYCwgYGNlcGhfYXRvbWljX29wZW5gLCBgZnVzZV9hdG9taWNfb3BlbmAsIGBnZnMyX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5fdjIzYCwgYW5kIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC4gR290dGEgbWFrZSBzdXJlIEkgcmV2aWV3IGFsbCBvZiB0aGVzZS4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYGRvX3N5c19vcGVuYXQyYCBpcyBleHBvcnRlZCBvciBzdGF0aWMgdG8gZ2V0IGFuIG92ZXJhbGwgdmlldyBvZiB0aGUgZnVuY3Rpb25zIGluIHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3N5c19vcGVuYXQyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb3Blbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29wZW4uYz0xMzY3PUVYUE9SVF9TWU1CT0woZmlsZV9vcGVuX3Jvb3QpO1xuZnMvb3Blbi5jLTEzNjgtXG5mcy9vcGVuLmM6MTM2OTpzdGF0aWMgaW50IGRvX3N5c19vcGVuYXQyKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSxcbmZzL29wZW4uYy0xMzcwLVx0XHRcdCAgc3RydWN0IG9wZW5faG93ICpob3cpXG4tLVxuZnMvb3Blbi5jPTEzODE9aW50IGRvX3N5c19vcGVuKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUpXG4tLVxuZnMvb3Blbi5jLTEzODMtXHRzdHJ1Y3Qgb3Blbl9ob3cgaG93ID0gYnVpbGRfb3Blbl9ob3coZmxhZ3MsIG1vZGUpO1xuZnMvb3Blbi5jOjEzODQ6XHRyZXR1cm4gZG9fc3lzX29wZW5hdDIoZGZkLCBmaWxlbmFtZSwgXHUwMDI2aG93KTtcbmZzL29wZW4uYy0xMzg1LX1cbi0tXG5mcy9vcGVuLmM9MTQwMz1TWVNDQUxMX0RFRklORTQob3BlbmF0MiwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLFxuLS1cbmZzL29wZW4uYy0xNDI2LVxuZnMvb3Blbi5jOjE0Mjc6XHRyZXR1cm4gZG9fc3lzX29wZW5hdDIoZGZkLCBmaWxlbmFtZSwgXHUwMDI2dG1wKTtcbmZzL29wZW4uYy0xNDI4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2MzYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE9wZW5hdCBPX0NSRUFUIHwgT19ESVJFQ1RPUlkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgYGRvX3N5c19vcGVuYCBhbmQgYGRvX3N5c19vcGVuYXQyYCwgYnV0IGFmdGVyIGEgc2Vjb25kIGxvb2ssIGBkb19zeXNfb3BlbmAgc2VlbXMgdG8gYmUgdGhlIHJpZ2h0IGNob2ljZSB0byBmb2N1cyBvbiwgYW5kIHdoaWxlIGl0IGlzbiYjMzk7dCB0aGUgc3lzY2FsbCBlbnRyeSBpdHNlbGYsIHRoYXQmIzM5O3Mgd2hhdCBJIHdhbnQgdG8gdW5kZXJzdGFuZC4gSSYjMzk7bGwgYWxzbyBhZGQgYHBhdGhfb3BlbmF0YCB0byBteSB0YXJnZXQgc3ltYm9scy4KCkxldCYjMzk7cyByZWZpbmUgdGhhdCBsaXN0OiBgcGF0aF9vcGVuYXRgLCBgZG9fc3lzX29wZW5gLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGBmaWxlbmFtZV9yZW5hbWVhdDJgLCBhbmQgdGhlIHZhcmlvdXMgZmlsZXN5c3RlbSBhdG9taWMgb3BlbiBmdW5jdGlvbnM6IGBjaWZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLgoKTm93LCB0aW1lIHRvIGNvbmZpcm0gdGhlaXIgbG9jYXRpb25zOiBgZG9fc3lzX29wZW5gIGlzIGluIGBmcy9vcGVuLmNgLCBgcGF0aF9vcGVuYXRgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYCBhcmUgYWxsIGluIGBmcy9uYW1laS5jYC4gR29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQuCgpCYXNlZCBvbiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIHRoaXMgaXMgYSBWRlMtbGV2ZWwgY2hhbmdlIHRoYXQmIzM5O3MgYWxsb3dpbmcgYG9wZW5hdCgpYCB3aXRoIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgIHRvIGNyZWF0ZSBkaXJlY3Rvcmllcy4gVGhpcyB0b3VjaGVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljLCBzbyBJIG5lZWQgdG8gY2hlY2sgYWxsIHRoZSByZWxldmFudCBmaWxlc3lzdGVtcywgc3BlY2lmaWNhbGx5IHRob3NlIHdpdGggdGhlaXIgb3duIGBhdG9taWNfb3BlbmAgaW1wbGVtZW50YXRpb25zLCB0byBtYWtlIHN1cmUgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhpcyBjb3JyZWN0bHkuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBuZWVkcyBzZXJpb3VzIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcywgZXNwZWNpYWxseSBhcm91bmQgdGhlIGRpcmVjdG9yeSBjcmVhdGlvbiBhbmQgZmlsZSBvcGVuaW5nIHBhdGhzLgoKSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHRoZSBmaWxlc3lzdGVtcyBwb3RlbnRpYWxseSBhZmZlY3RlZCBhcmUgY292ZXJlZC4gVGhlIGNvbmZpZ3MgSSBhbSBhd2FyZSBvZiBhcmUgYDlQX0ZTYCwgYENFUEhfRlNgLCBgRlVTRV9GU2AsIGBHRlMyX0ZTYCwgYE5GU19GU2AsIGBDSUZTYCwgYW5kIGBWQk9YU0ZfRlNgLgoKQWxyaWdodCwgYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyBjb3ZlcmVkLiBCZXNpZGVzIHRoZSBjb3JlIGBmcy9vcGVuLmNgIGFuZCBgZnMvbmFtZWkuY2AgZmlsZXMsIEkgc2VlIHVwZGF0ZXMgdG86IGBmcy85cC92ZnNfaW5vZGUuY2AsIGBmcy85cC92ZnNfaW5vZGVfZG90bC5jYCwgYGZzL2NlcGgvZmlsZS5jYCwgYGZzL2Z1c2UvZGlyLmNgLCBgZnMvZ2ZzMi9pbm9kZS5jYCwgYGZzL25mcy9kaXIuY2AsIGBmcy9zbWIvY2xpZW50L2Rpci5jYCwgYW5kIGBmcy92Ym94c2YvZGlyLmNgLiBPa2F5LCB0aGF0IHNlZW1zIGNvbXByZWhlbnNpdmUuCgpGaW5hbGx5LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIGBPX0lTX01LRElSYCBpcyB1c2VkIGFueXdoZXJlIGVsc2UgdG8gZW5zdXJlIG5vIG90aGVyIHVuZm9yZXNlZW4gaW50ZXJhY3Rpb25zIGFyZSBwcmVzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtPX0lTX01LRElSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL3Zmc19pbm9kZS5jPTc2OT12OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jLTc3OS1cbmZzLzlwL3Zmc19pbm9kZS5jOjc4MDpcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbmZzLzlwL3Zmc19pbm9kZS5jLTc4MS1cdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbi0tXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jPTIyNz12OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy0yNDEtXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjI0MjpcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmMtMjQzLVx0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuLS1cbmZzL2NlcGgvZmlsZS5jPTc5ND1pbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2NlcGgvZmlsZS5jLTgxMy1cbmZzL2NlcGgvZmlsZS5jOjgxNDpcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbmZzL2NlcGgvZmlsZS5jLTgxNS1cdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbi0tXG5mcy9mdXNlL2Rpci5jPTkzMD1zdGF0aWMgaW50IGZ1c2VfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmVudHJ5LFxuLS1cbmZzL2Z1c2UvZGlyLmMtOTM3LVxuZnMvZnVzZS9kaXIuYzo5Mzg6XHRpZiAoT19JU19NS0RJUihmbGFncykpXG5mcy9mdXNlL2Rpci5jLTkzOS1cdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbi0tXG5mcy9nZnMyL2lub2RlLmM9MTM4ND1zdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9nZnMyL2lub2RlLmMtMTM4OS1cbmZzL2dmczIvaW5vZGUuYzoxMzkwOlx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuZnMvZ2ZzMi9pbm9kZS5jLTEzOTEtXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4tLVxuZnMvbmFtZWkuYz00NDczPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvbmFtZWkuYy00NDgzLVx0dW1vZGVfdCBtb2RlID0gb3AtXHUwMDNlbW9kZTtcbmZzL25hbWVpLmM6NDQ4NDpcdGJvb2wgY3JlYXRlX2RpciA9IE9fSVNfTUtESVIob3Blbl9mbGFnKTtcbmZzL25hbWVpLmMtNDQ4NS1cbi0tXG5mcy9uZnMvZGlyLmM9MjEwND1pbnQgbmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvbmZzL2Rpci5jLTIxMjMtXG5mcy9uZnMvZGlyLmM6MjEyNDpcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxuZnMvbmZzL2Rpci5jLTIxMjUtXHRcdG9wZW5fZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbi0tXG5mcy9uZnMvZGlyLmM9MjMwOT1pbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL25mcy9kaXIuYy0yMzE4LVxuZnMvbmZzL2Rpci5jOjIzMTk6XHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcbmZzL25mcy9kaXIuYy0yMzIwLVx0XHRvcGVuX2ZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4tLVxuZnMvb3Blbi5jPTExNTI9aW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG4tLVxuZnMvb3Blbi5jLTExOTItXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5mcy9vcGVuLmM6MTE5MzpcdFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuZnMvb3Blbi5jLTExOTQtXHRcdFx0b3AtXHUwMDNlbW9kZSA9IGhvdy1cdTAwM2Vtb2RlIHwgU19JRkRJUjtcbi0tXG5mcy9zbWIvY2xpZW50L2Rpci5jPTUyMD1pbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXG4tLVxuZnMvc21iL2NsaWVudC9kaXIuYy01NDAtXG5mcy9zbWIvY2xpZW50L2Rpci5jOjU0MTpcdGlmIChPX0lTX01LRElSKG9mbGFncykpXG5mcy9zbWIvY2xpZW50L2Rpci5jLTU0Mi1cdFx0b2ZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4tLVxuZnMvdmJveHNmL2Rpci5jPTMxMz1zdGF0aWMgaW50IHZib3hzZl9kaXJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy92Ym94c2YvZGlyLmMtMzIwLVxuZnMvdmJveHNmL2Rpci5jOjMyMTpcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbmZzL3Zib3hzZi9kaXIuYy0zMjItXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4tLVxuaW5jbHVkZS9saW51eC9mY250bC5oLTMzLSNkZWZpbmUgT19NS0RJUl9NQVNLXHQoT19DUkVBVCB8IE9fRElSRUNUT1JZKVxuaW5jbHVkZS9saW51eC9mY250bC5oOjM0OnN0YXRpYyBpbmxpbmUgYm9vbCBPX0lTX01LRElSKHVuc2lnbmVkIGZsYWdzKVxuaW5jbHVkZS9saW51eC9mY250bC5oLTM1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0MDEKCQkJCQkJCW91dHB1dDogMzQ2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipGaW5hbGl6aW5nIHRoZSBSZXNwb25zZTogQSBSb3V0aW5lIENvbmZpcm1hdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTt2ZSByZXZpZXdlZCB0aGUgZW50aXJlIHByb2Nlc3MsIGRvdWJsZS1jaGVja2VkIHRoZSBkYXRhLCBhbmQgcmlnb3JvdXNseSBhc3Nlc3NlZCB0aGUgbWV0aG9kb2xvZ3kuIEV2ZXJ5dGhpbmcgYWxpZ25zIHdpdGggZXhwZWN0YXRpb25zOyB0aGVyZSBhcmUgbm8gb2J2aW91cyBpbmNvbnNpc3RlbmNpZXMsIGFub21hbGllcywgb3IgcmVkIGZsYWdzIHRoYXQgd291bGQgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24gb3IgbmVjZXNzaXRhdGUgYSBjb3Vyc2UgY29ycmVjdGlvbi4gRnJvbSBhIHF1YWxpdGF0aXZlIGFuZCBxdWFudGl0YXRpdmUgcGVyc3BlY3RpdmUsIHRoZSBhbmFseXNpcyBhcHBlYXJzIHJvYnVzdCwgdGhlIGludGVycHJldGF0aW9ucyBhcmUgc291bmQsIGFuZCB0aGUgY29uY2x1c2lvbnMgYXJlIGRlZmVuc2libGUgZ2l2ZW4gdGhlIGlucHV0IGRhdGEgYW5kIGNob3NlbiBmcmFtZXdvcmsuIE5vdyBJIGNhbiBjb25maWRlbnRseSBtb3ZlIGZvcndhcmQgdG8gcHJlcGFyZSB0aGUgZmluYWwgcmVzcG9uc2UsIGNvbmZpZGVudCB0aGF0IGl0IHJlcHJlc2VudHMgYSBmYWl0aGZ1bCBhbmQgYWNjdXJhdGUgcG9ydHJheWFsIG9mIHRoZSBmaW5kaW5ncy4gVGltZSB0byBjcmFmdCB0aGUgbmFycmF0aXZlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7OVBfRlMmIzM0OywKICAgICYjMzQ7Q0VQSF9GUyYjMzQ7LAogICAgJiMzNDtGVVNFX0ZTJiMzNDssCiAgICAmIzM0O0dGUzJfRlMmIzM0OywKICAgICYjMzQ7TkZTX0ZTJiMzNDssCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7VkJPWFNGX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGF0aF9vcGVuYXQmIzM0OywKICAgICYjMzQ7ZG9fc3lzX29wZW4mIzM0OywKICAgICYjMzQ7dmZzX21rZGlyJiMzNDssCiAgICAmIzM0O3Zmc19jcmVhdGUmIzM0OywKICAgICYjMzQ7ZGVudHJ5X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtmaWxlbmFtZV91bmxpbmthdCYjMzQ7LAogICAgJiMzNDtmaWxlbmFtZV9yZW5hbWVhdDImIzM0OywKICAgICYjMzQ7Y2lmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsJiMzNDssCiAgICAmIzM0O2NlcGhfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7ZnVzZV9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtnZnMyX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtuZnNfYXRvbWljX29wZW5fdjIzJiMzNDssCiAgICAmIzM0O3Zib3hzZl9kaXJfYXRvbWljX29wZW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBWRlMgbGF5ZXIsIGFsbG93aW5nIG9wZW5hdCgpIHdpdGggT19DUkVBVCB8IE9fRElSRUNUT1JZIHRvIGNyZWF0ZSBkaXJlY3Rvcmllcy4gSXQgbW9kaWZpZXMgY29yZSBwYXRoIHJlc29sdXRpb24gYW5kIGZpbGUgY3JlYXRpb24gbG9naWMgKGZzL25hbWVpLmMsIGZzL29wZW4uYykgYW5kIHVwZGF0ZXMgc2V2ZXJhbCBmaWxlc3lzdGVtcyAoOXAsIGNlcGgsIGZ1c2UsIGdmczIsIG5mcywgc21iLCB2Ym94c2YpIHRvIGhhbmRsZSB0aGUgbmV3IGJlaGF2aW9yIGluIHRoZWlyIGF0b21pY19vcGVuIGltcGxlbWVudGF0aW9ucy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2VjdXJpdHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGluIGRpcmVjdG9yeSBjcmVhdGlvbiBhbmQgZmlsZSBvcGVuaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDssCiAgICAmIzM0O0ZVU0VfRlMmIzM0OywKICAgICYjMzQ7R0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtORlNfRlMmIzM0OywKICAgICYjMzQ7Q0lGUyYjMzQ7LAogICAgJiMzNDtWQk9YU0ZfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYXRoX29wZW5hdCYjMzQ7LAogICAgJiMzNDtkb19zeXNfb3BlbiYjMzQ7LAogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtkZW50cnlfY3JlYXRlJiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3VubGlua2F0JiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3JlbmFtZWF0MiYjMzQ7LAogICAgJiMzNDtjaWZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwmIzM0OywKICAgICYjMzQ7Y2VwaF9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtmdXNlX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2dmczJfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3Blbl92MjMmIzM0OywKICAgICYjMzQ7dmJveHNmX2Rpcl9hdG9taWNfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFZGUyBsYXllciwgYWxsb3dpbmcgb3BlbmF0KCkgd2l0aCBPX0NSRUFUIHwgT19ESVJFQ1RPUlkgdG8gY3JlYXRlIGRpcmVjdG9yaWVzLiBJdCBtb2RpZmllcyBjb3JlIHBhdGggcmVzb2x1dGlvbiBhbmQgZmlsZSBjcmVhdGlvbiBsb2dpYyAoZnMvbmFtZWkuYywgZnMvb3Blbi5jKSBhbmQgdXBkYXRlcyBzZXZlcmFsIGZpbGVzeXN0ZW1zICg5cCwgY2VwaCwgZnVzZSwgZ2ZzMiwgbmZzLCBzbWIsIHZib3hzZikgdG8gaGFuZGxlIHRoZSBuZXcgYmVoYXZpb3IgaW4gdGhlaXIgYXRvbWljX29wZW4gaW1wbGVtZW50YXRpb25zLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQgaW4gZGlyZWN0b3J5IGNyZWF0aW9uIGFuZCBmaWxlIG9wZW5pbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0MjoxNi44OTc5NDAwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDIyMDcyODM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXRoX29wZW5hdFwiLFxuICAgIFwiZG9fc3lzX29wZW5cIixcbiAgICBcInZmc19ta2RpclwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwiZmlsZW5hbWVfdW5saW5rYXRcIixcbiAgICBcImZpbGVuYW1lX3JlbmFtZWF0MlwiLFxuICAgIFwiY2lmc19hdG9taWNfb3BlblwiLFxuICAgIFwidjlmc192ZnNfYXRvbWljX29wZW5cIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxcIixcbiAgICBcImNlcGhfYXRvbWljX29wZW5cIixcbiAgICBcImZ1c2VfYXRvbWljX29wZW5cIixcbiAgICBcImdmczJfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3BlblwiLFxuICAgIFwibmZzX2F0b21pY19vcGVuX3YyM1wiLFxuICAgIFwidmJveHNmX2Rpcl9hdG9taWNfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVkZTIGxheWVyLCBhbGxvd2luZyBvcGVuYXQoKSB3aXRoIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSB0byBjcmVhdGUgZGlyZWN0b3JpZXMuIEl0IG1vZGlmaWVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIChmcy9uYW1laS5jLCBmcy9vcGVuLmMpIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKDlwLCBjZXBoLCBmdXNlLCBnZnMyLCBuZnMsIHNtYiwgdmJveHNmKSB0byBoYW5kbGUgdGhlIG5ldyBiZWhhdmlvciBpbiB0aGVpciBhdG9taWNfb3BlbiBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBpbiBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGZpbGUgb3BlbmluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDI6MTYuODk3OTQ1NTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MzUzMzQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU4Y2RhZDdjMTJjZmE1OTgwOTA2NjU2NTFjMzMzNDlkNDQwYjFkYWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTY6NDI6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuY1xcbmluZGV4IDU3ODNkMDMzNmY5NmFjLi5iYjU1NWU1YmEyNjE1MCAxMDA2NDRcXG4tLS0gYS9mcy85cC92ZnNfaW5vZGUuY1xcbisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jXFxuQEAgLTc3Nyw2ICs3NzcsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbiBcXHRpbnQgcDlfb21vZGU7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG4gXFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTtcXG4gXFx0XFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxcbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xcbmluZGV4IGY3Mzk2ZDIwY2I2Y2RjLi5mZjNmYWNiNDIwYzIyNCAxMDA2NDRcXG4tLS0gYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jXFxuKysrIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xcbkBAIC0yMzksNiArMjM5LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzO1xcbiBcXHRzdHJ1Y3QgcG9zaXhfYWNsICpwYWNsID0gTlVMTCwgKmRhY2wgPSBOVUxMO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XFxuIFxcdFxcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XFxuIFxcdFxcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcXG5kaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuY1xcbmluZGV4IDcxMTYxZjJiMjE1MTM2Li5lNzlhYmRiZDlmNjFlOSAxMDA2NDRcXG4tLS0gYS9mcy9jZXBoL2ZpbGUuY1xcbisrKyBiL2ZzL2NlcGgvZmlsZS5jXFxuQEAgLTgxMSw2ICs4MTEsOSBAQCBpbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHQgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksXFxuIFxcdCAgICAgIGRfdW5oYXNoZWQoZGVudHJ5KSA/IFxcXCJ1bmhhc2hlZFxcXCIgOiBcXFwiaGFzaGVkXFxcIiwgZmxhZ3MsIG1vZGUpO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4gXFx1MDAzZSBOQU1FX01BWClcXG4gXFx0XFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuY1xcbmluZGV4IDBlMmExMDM5ZmE0M2VhLi5lMDE4Njk1NjVkNWVlNSAxMDA2NDRcXG4tLS0gYS9mcy9mdXNlL2Rpci5jXFxuKysrIGIvZnMvZnVzZS9kaXIuY1xcbkBAIC05MzUsNiArOTM1LDkgQEAgc3RhdGljIGludCBmdXNlX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICplbnRyeSxcXG4gXFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcXG4gXFx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGZ1c2VfaXNfYmFkKGRpcikpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jXFxuaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjk4NTlhZTAzNDFhOTllIDEwMDY0NFxcbi0tLSBhL2ZzL2dmczIvaW5vZGUuY1xcbisrKyBiL2ZzL2dmczIvaW5vZGUuY1xcbkBAIC0xMzg3LDYgKzEzODcsOSBAQCBzdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4ge1xcbiBcXHRib29sIGV4Y2wgPSAhIShmbGFncyBcXHUwMDI2IE9fRVhDTCk7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG4gXFx0XFx0c3RydWN0IGRlbnRyeSAqZCA9IF9fZ2ZzMl9sb29rdXAoZGlyLCBkZW50cnksIGZpbGUpO1xcbiBcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfT1BFTkVEKSB7XFxuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXFxuaW5kZXggNWNjOWYwZjQ2NmI4MzAuLmZlZjgyNmMwNGViNTA3IDEwMDY0NFxcbi0tLSBhL2ZzL25hbWVpLmNcXG4rKysgYi9mcy9uYW1laS5jXFxuQEAgLTEzODIsMTMgKzEzODIsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbiBcXG4gLyoqXFxuICAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XFxuLSAqXFx0XFx0XFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHlcXG4tICpcXHRcXHRcXHQgIGV4aXN0LlxcbisgKlxcdFxcdFxcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdFxcbiAgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXFxuICAqXFxuLSAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxcbisgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46XFxuICAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWRcXG4gICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzXFxuICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XFxuQEAgLTE0MTYsNiArMTQxNSwxNCBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG4gXFx0aWYgKGxpa2VseSghKGRpcl9tb2RlIFxcdTAwMjYgU19JU1ZUWCkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreVxcbitcXHQgKiBmb2xkZXJzLiBUaGVyZWZvcmUsIGZvciB0aGUgU19JU0RJUiBjYXNlLCBkaXNhYmxpbmdcXG4rXFx0ICogc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyIGlzIG5vdCBlbm91Z2ggdG8gYWxsb3cgY3JlYXRpbmcgYVxcbitcXHQgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzXFxuK1xcdCAqIG5vdCBleHBlY3RpbmcgdGhhdCBPX0NSRUFUfE9fRElSRUNUT1JZIGlzIHBvc3NpYmxlIG9uIG5ld2VyXFxuK1xcdCAqIGtlcm5lbHMuXFxuK1xcdCAqL1xcbiBcXHRpZiAoU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiAhc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTE0NDcsNiArMTQ1NCwxMiBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcInN0aWNreV9jcmVhdGVfcmVndWxhclxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBcXHUwMDNlPSAyIFxcdTAwMjZcXHUwMDI2IFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFx0XFx0XFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJzdGlja3lfY3JlYXRlX2RpclxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjc4MSw5ICsyNzk0LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxcbiBcXHRyZXR1cm4gcztcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoY29uc3Qgc3RydWN0IHFzdHIgbGFzdClcXG4re1xcbitcXHRyZXR1cm4gKGJvb2wpbGFzdC5uYW1lW2xhc3QubGVuXTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpsb29rdXBfbGFzdChzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4ge1xcbi1cXHRpZiAobmQtXFx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXFx1MDAyNlxcdTAwMjYgbmQtXFx1MDAzZWxhc3QubmFtZVtuZC1cXHUwMDNlbGFzdC5sZW5dKVxcbitcXHRpZiAobmQtXFx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXFx1MDAyNlxcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZC1cXHUwMDNlbGFzdCkpXFxuIFxcdFxcdG5kLVxcdTAwM2VmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTtcXG4gXFxuIFxcdHJldHVybiB3YWxrX2NvbXBvbmVudChuZCwgV0FMS19UUkFJTElORyk7XFxuQEAgLTQxNjQsNiArNDE4MiwyNCBAQCBzdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0cmV0dXJuIG1vZGU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmVcXG4raW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHQgICAgICAgdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmRpciA9IGRfaW5vZGUoZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuK1xcdGludCBlcnJvcjtcXG4rXFxuK1xcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdGVycm9yID0gZGlyLVxcdTAwM2VpX29wLVxcdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCB0cnVlKTtcXG4rXFx0aWYgKCFlcnJvcilcXG4rXFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcXG4rXFxuK1xcdHJldHVybiBlcnJvcjtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHZmc19jcmVhdGUgLSBjcmVhdGUgbmV3IGZpbGVcXG4gICogQGlkbWFwOlxcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cXG5AQCAtNDE5NiwxMyArNDIzMiw4IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4gXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4tXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0cmV0dXJuIGVycm9yO1xcbi1cXHRlcnJvciA9IGRpci1cXHUwMDNlaV9vcC1cXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7XFxuLVxcdGlmICghZXJyb3IpXFxuLVxcdFxcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XFxuLVxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdHJldHVybiB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGkpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7XFxuIFxcbkBAIC00MzE5LDIxICs0MzUwLDQwIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9wZW5fdG9fbmFtZWlfZmxhZ3MoaW50IGZsYWcpXFxuIFxcbiBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0XFx0Y29uc3Qgc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHR1bW9kZV90IG1vZGUpXFxuK1xcdFxcdFxcdHVtb2RlX3QgbW9kZSwgYm9vbCBjcmVhdGVfZGlyKVxcbiB7XFxuLVxcdGludCBlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlO1xcbitcXHRpbnQgZXJyb3I7XFxuK1xcbitcXHRpZiAoY3JlYXRlX2RpcilcXG4rXFx0XFx0ZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuIFxcdGlmICghZnN1aWRnaWRfaGFzX21hcHBpbmcoZGlyLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfc2IsIGlkbWFwKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuIFxcbi1cXHRlcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGRpci1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlLFxcbi1cXHRcXHRcXHRcXHQgTUFZX1dSSVRFIHwgTUFZX0VYRUMpO1xcbitcXHRlcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGRpcl9pbm9kZSwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuLVxcdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGlmIChjcmVhdGVfZGlyKVxcbitcXHRcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XFxuK1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpXFxuK3tcXG4rXFx0aWYgKGNyZWF0ZV9kaXIpXFxuK1xcdFxcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIDApO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTQzNDcsNyArNDM5Nyw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiAgKiBiZSBzZXQuICBUaGUgY2FsbGVyIHdpbGwgbmVlZCB0byBwZXJmb3JtIHRoZSBvcGVuIHRoZW1zZWx2ZXMuICBAcGF0aCB3aWxsXFxuICAqIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBuZXcgZGVudHJ5LiAgVGhpcyBtYXkgYmUgbmVnYXRpdmUuXFxuICAqXFxuLSAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuKyAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuIE9uIGVycm9yIHRoZSByZWYgdG8gZGVudHJ5IGlzIGtlcHQuXFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5AQCAtNDM1OSw2ICs0NDA5LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlcXG4gXFxuIFxcdGZpbGUtXFx1MDAzZV9fZl9wYXRoLmRlbnRyeSA9IERFTlRSWV9OT1RfU0VUO1xcbiBcXHRmaWxlLVxcdTAwM2VfX2ZfcGF0aC5tbnQgPSBwYXRoLVxcdTAwM2VtbnQ7XFxuK1xcbiBcXHRlcnJvciA9IGRpci1cXHUwMDNlaV9vcC1cXHUwMDNlYXRvbWljX29wZW4oZGlyLCBkZW50cnksIGZpbGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBvcGVuX3RvX25hbWVpX2ZsYWdzKG9wZW5fZmxhZyksIG1vZGUpO1xcbiBcXHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XFxuQEAgLTQzNzEsMjEgKzQ0MjIsMzkgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlcXG4gXFx0XFx0fSBlbHNlIGlmIChXQVJOX09OKGZpbGUtXFx1MDAzZWZfcGF0aC5kZW50cnkgPT0gREVOVFJZX05PVF9TRVQpKSB7XFxuIFxcdFxcdFxcdGVycm9yID0gLUVJTztcXG4gXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqb2xkID0gZGVudHJ5O1xcbitcXHRcXHRcXHRib29sIHJlcGxhY2VkID0gZmFsc2U7XFxuIFxcdFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX3BhdGguZGVudHJ5KSB7XFxuLVxcdFxcdFxcdFxcdGRwdXQoZGVudHJ5KTtcXG4gXFx0XFx0XFx0XFx0ZGVudHJ5ID0gZmlsZS1cXHUwMDNlZl9wYXRoLmRlbnRyeTtcXG4rXFx0XFx0XFx0XFx0cmVwbGFjZWQgPSBkZW50cnkgIT0gb2xkO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmICh1bmxpa2VseShkX2lzX25lZ2F0aXZlKGRlbnRyeSkpKVxcbitcXHRcXHRcXHRpZiAodW5saWtlbHkoZF9pc19uZWdhdGl2ZShkZW50cnkpKSkge1xcbitcXHRcXHRcXHRcXHQvKiBEbyBub3QgZHJvcCBvcmlnaW5hbCBkZW50cnkgcmVmIG9uIGVycm9yICovXFxuK1xcdFxcdFxcdFxcdGlmIChyZXBsYWNlZClcXG4rXFx0XFx0XFx0XFx0XFx0ZHB1dChkZW50cnkpO1xcbiBcXHRcXHRcXHRcXHRlcnJvciA9IC1FTk9FTlQ7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAocmVwbGFjZWQpIHtcXG4rXFx0XFx0XFx0XFx0ZHB1dChvbGQpO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXG4gXFx0aWYgKGVycm9yKSB7XFxuLVxcdFxcdGRwdXQoZGVudHJ5KTtcXG4gXFx0XFx0ZGVudHJ5ID0gRVJSX1BUUihlcnJvcik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxcbitcXHRcXHRcXHRmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpO1xcbitcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfT1BFTkVEKVxcbitcXHRcXHRcXHRmc25vdGlmeV9vcGVuKGZpbGUpO1xcbiBcXHR9XFxuK1xcbiBcXHRyZXR1cm4gZGVudHJ5O1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lXFxuK3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICopO1xcbiAvKlxcbiAgKiBMb29rIHVwIGFuZCBtYXliZSBjcmVhdGUgYW5kIG9wZW4gdGhlIGxhc3QgY29tcG9uZW50LlxcbiAgKlxcbkBAIC00NDEyLDYgKzQ0ODEsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XFxuIFxcdGludCBlcnJvciwgY3JlYXRlX2Vycm9yID0gMDtcXG4gXFx0dW1vZGVfdCBtb2RlID0gb3AtXFx1MDAzZW1vZGU7XFxuK1xcdGJvb2wgY3JlYXRlX2RpciA9IE9fSVNfTUtESVIob3Blbl9mbGFnKTtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShJU19ERUFERElSKGRpcl9pbm9kZSkpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG5AQCAtNDQzNyw3ICs0NTA3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0ZGVudHJ5ID0gTlVMTDtcXG4gXFx0fVxcbiBcXHRpZiAoZGVudHJ5LVxcdTAwM2VkX2lub2RlKSB7XFxuLVxcdFxcdC8qIENhY2hlZCBwb3NpdGl2ZSBkZW50cnk6IHdpbGwgb3BlbiBpbiBmX29wLVxcdTAwM2VvcGVuICovXFxuK1xcdFxcdC8qIENhY2hlZCBwb3NpdGl2ZSBkZW50cnk6IHdpbGwgb3BlbiBpbiBkb19vcGVuKCkuICovXFxuIFxcdFxcdHJldHVybiBkZW50cnk7XFxuIFxcdH1cXG4gXFxuQEAgLTQ0NTksMjEgKzQ1MjksMzUgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG4gXFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTClcXG4gXFx0XFx0XFx0b3Blbl9mbGFnIFxcdTAwMjY9IH5PX1RSVU5DO1xcbi1cXHRcXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLVxcdTAwM2VkX2lub2RlLCBtb2RlLCBtb2RlLCBtb2RlKTtcXG4rXFx0XFx0bW9kZSA9IG9fY3JlYXRlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgY3JlYXRlX2Rpcik7XFxuIFxcdFxcdGlmIChsaWtlbHkoZ290X3dyaXRlKSlcXG4gXFx0XFx0XFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBcXHUwMDI2bmQtXFx1MDAzZXBhdGgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBkZW50cnksIG1vZGUpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgZGVudHJ5LCBtb2RlLCBjcmVhdGVfZGlyKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRjcmVhdGVfZXJyb3IgPSAtRVJPRlM7XFxuK1xcdFxcdC8qIFJlZnVzZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdGhyb3VnaCBhIGRhbmdsaW5nICh0cmFpbGluZylcXG4rXFx0XFx0ICogc3ltbGluay4gRm9yIHJlZ3VsYXIgZmlsZXMgdGhpcyBoYXMgYmVlbiBhbGxvd2VkIGhpc3RvcmljYWxseVxcbitcXHRcXHQgKiBvbiBPX0NSRUFUIHdpdGhvdXQgT19FWENMLiAqL1xcbitcXHRcXHRpZiAodW5saWtlbHkobmQtXFx1MDAzZWRlcHRoKSBcXHUwMDI2XFx1MDAyNiBjcmVhdGVfZGlyIFxcdTAwMjZcXHUwMDI2ICFjcmVhdGVfZXJyb3IpXFxuK1xcdFxcdFxcdGNyZWF0ZV9lcnJvciA9IC1FTE9PUDtcXG4gXFx0fVxcbiBcXHRpZiAoY3JlYXRlX2Vycm9yKVxcbiBcXHRcXHRvcGVuX2ZsYWcgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuIFxcdGlmIChkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWF0b21pY19vcGVuKSB7XFxuK1xcdFxcdHN0cnVjdCBkZW50cnkgKm9yaWdfZGVudHJ5ID0gZGVudHJ5O1xcbiBcXHRcXHRpZiAobmQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTE9PS1VQX0RJUkVDVE9SWSlcXG4gXFx0XFx0XFx0b3Blbl9mbGFnIHw9IE9fRElSRUNUT1JZO1xcbiBcXHRcXHRkZW50cnkgPSBhdG9taWNfb3BlbihcXHUwMDI2bmQtXFx1MDAzZXBhdGgsIGRlbnRyeSwgZmlsZSwgb3Blbl9mbGFnLCBtb2RlKTtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXFx1MDAyNlxcdTAwMjYgZGVudHJ5ID09IEVSUl9QVFIoLUVOT0VOVCkpXFxuLVxcdFxcdFxcdGRlbnRyeSA9IEVSUl9QVFIoY3JlYXRlX2Vycm9yKTtcXG4rXFx0XFx0ZXJyb3IgPSBQVFJfRVJSX09SX1pFUk8oZGVudHJ5KTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGVycm9yKSlcXG4rXFx0XFx0XFx0ZGVudHJ5ID0gb3JpZ19kZW50cnk7IC8qIGF0b21pY19vcGVuKCkga2VlcHMgcmVmIG9uIGVycm9yICovXFxuK1xcdFxcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFxcdTAwMjZcXHUwMDI2IGVycm9yID09IC1FTk9FTlQpIHtcXG4rXFx0XFx0XFx0LyogU2hvdWxkIGhhdmUgZG9uZSBhIGNyZWF0ZSwgYnV0IHdlIGFscmVhZHkgZXJyb3JlZC4gKi9cXG4rXFx0XFx0XFx0YXVkaXRfaW5vZGVfY2hpbGQoZGlyLVxcdTAwM2VkX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTtcXG4rXFx0XFx0XFx0ZXJyb3IgPSBjcmVhdGVfZXJyb3I7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHVubGlrZWx5KGVycm9yKSlcXG4rXFx0XFx0XFx0Z290byBvdXRfZHB1dDtcXG4gXFx0XFx0cmV0dXJuIGRlbnRyeTtcXG4gXFx0fVxcbiBcXG5AQCAtNDQ5MCwzMCArNDU3NCw0NCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRcXHRcXHRkZW50cnkgPSByZXM7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXHRpZiAoZGVudHJ5LVxcdTAwM2VkX2lub2RlIHx8ICEob3AtXFx1MDAzZW9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpKSB7XFxuK1xcdFxcdC8qIE5vIG5lZWQgdG8gY3JlYXRlIGEgZmlsZS4gSWYgbG9va3VwIHJldHVybmVkIGEgcG9zaXRpdmVcXG4rXFx0XFx0ICogZGVudHJ5LCB0aGUgZmlsZSB3aWxsIGJlIG9wZW5lZCBpbiBkb19vcGVuKCkuICovXFxuK1xcdFxcdHJldHVybiBkZW50cnk7XFxuK1xcdH1cXG4gXFxuLVxcdC8qIE5lZ2F0aXZlIGRlbnRyeSwganVzdCBjcmVhdGUgdGhlIGZpbGUgKi9cXG4tXFx0aWYgKCFkZW50cnktXFx1MDAzZWRfaW5vZGUgXFx1MDAyNlxcdTAwMjYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpKSB7XFxuLVxcdFxcdC8qIGJ1dCBicmVhayB0aGUgZGlyZWN0b3J5IGxlYXNlIGZpcnN0ISAqL1xcbi1cXHRcXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXJfaW5vZGUsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XFxuLVxcdFxcdGlmIChlcnJvcilcXG4tXFx0XFx0XFx0Z290byBvdXRfZHB1dDtcXG4rXFx0LyogTmVnYXRpdmUgZGVudHJ5IHdpdGggT19DUkVBVCBmbGFnIHNldCAqL1xcbitcXHRhdWRpdF9pbm9kZV9jaGlsZChkaXItXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpO1xcbiBcXG4tXFx0XFx0ZmlsZS1cXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XFxuLVxcdFxcdGF1ZGl0X2lub2RlX2NoaWxkKGRpcl9pbm9kZSwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XFxuLVxcdFxcdGlmICghZGlyX2lub2RlLVxcdTAwM2VpX29wLVxcdTAwM2VjcmVhdGUpIHtcXG4tXFx0XFx0XFx0ZXJyb3IgPSAtRUFDQ0VTO1xcbi1cXHRcXHRcXHRnb3RvIG91dF9kcHV0O1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRlcnJvciA9IGRpcl9pbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0bW9kZSwgb3Blbl9mbGFnIFxcdTAwMjYgT19FWENMKTtcXG4tXFx0XFx0aWYgKGVycm9yKVxcbi1cXHRcXHRcXHRnb3RvIG91dF9kcHV0O1xcbi1cXHR9XFxuLVxcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFxcdTAwMjZcXHUwMDI2ICFkZW50cnktXFx1MDAzZWRfaW5vZGUpIHtcXG4rXFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikpIHtcXG4rXFx0XFx0LyogU2hvdWxkIGhhdmUgZG9uZSBhIGNyZWF0ZSwgYnV0IHdlIGFscmVhZHkgZXJyb3JlZCAqL1xcbiBcXHRcXHRlcnJvciA9IGNyZWF0ZV9lcnJvcjtcXG4gXFx0XFx0Z290byBvdXRfZHB1dDtcXG4gXFx0fVxcbitcXG4rXFx0aWYgKChjcmVhdGVfZGlyIFxcdTAwMjZcXHUwMDI2ICFkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZW1rZGlyKVxcbitcXHQgICAgfHwgKCFjcmVhdGVfZGlyIFxcdTAwMjZcXHUwMDI2ICFkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZSkpIHtcXG4rXFx0XFx0ZXJyb3IgPSAtRUFDQ0VTO1xcbitcXHRcXHRnb3RvIG91dF9kcHV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY3JlYXRlX2Rpcikge1xcbitcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpO1xcbitcXHRcXHRpZiAoSVNfRVJSKHJlcykpIHtcXG4rXFx0XFx0XFx0ZXJyb3IgPSBQVFJfRVJSKHJlcyk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGVycm9yID0gMDtcXG4rXFx0XFx0XFx0ZGVudHJ5ID0gcmVzO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGVycm9yID0gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XFxuK1xcdH1cXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIG91dF9kcHV0O1xcbitcXG4rXFx0ZmlsZS1cXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XFxuK1xcbiBcXHRyZXR1cm4gZGVudHJ5O1xcbiBcXG4gb3V0X2RwdXQ6XFxuQEAgLTQ1MjEsMTcgKzQ2MTksMTIgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4te1xcbi1cXHRyZXR1cm4gKGJvb2wpbmQtXFx1MDAzZWxhc3QubmFtZVtuZC1cXHUwMDNlbGFzdC5sZW5dO1xcbi19XFxuLVxcbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXFxuIHtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcbiBcXG4gXFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG4tXFx0XFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKVxcbitcXHRcXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZC1cXHUwMDNlbGFzdCkgXFx1MDAyNlxcdTAwMjYgIShvcGVuX2ZsYWcgXFx1MDAyNiBPX0RJUkVDVE9SWSkpXFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSVNESVIpO1xcbiBcXG4gXFx0XFx0LyogRG9uJ3QgYm90aGVyIG9uIGFuIE9fRVhDTCBjcmVhdGUgKi9cXG5AQCAtNDUzOSw3ICs0NjMyLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKVxcbiBcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKVxcbitcXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZC1cXHUwMDNlbGFzdCkpXFxuIFxcdFxcdG5kLVxcdTAwM2VmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTtcXG4gXFxuIFxcdGRlbnRyeSA9IGxvb2t1cF9mYXN0KG5kKTtcXG5AQCAtNDYwMiwxNiArNDY5NSwxMiBAQCBzdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdFxcdCAqL1xcbiBcXHR9XFxuIFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKVxcbi1cXHRcXHRpbm9kZV9sb2NrKGRpci1cXHUwMDNlZF9pbm9kZSk7XFxuK1xcdFxcdGlub2RlX2xvY2tfbmVzdGVkKGRpci1cXHUwMDNlZF9pbm9kZSwgSV9NVVRFWF9QQVJFTlQpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGlub2RlX2xvY2tfc2hhcmVkKGRpci1cXHUwMDNlZF9pbm9kZSk7XFxuK1xcbiBcXHRkZW50cnkgPSBsb29rdXBfb3BlbihuZCwgZmlsZSwgb3AsIGdvdF93cml0ZSwgXFx1MDAyNmRlbGVnYXRlZF9pbm9kZSk7XFxuLVxcdGlmICghSVNfRVJSKGRlbnRyeSkpIHtcXG4tXFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0NSRUFURUQpXFxuLVxcdFxcdFxcdGZzbm90aWZ5X2NyZWF0ZShkaXItXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSk7XFxuLVxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9PUEVORUQpXFxuLVxcdFxcdFxcdGZzbm90aWZ5X29wZW4oZmlsZSk7XFxuLVxcdH1cXG4rXFxuIFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKVxcbiBcXHRcXHRpbm9kZV91bmxvY2soZGlyLVxcdTAwM2VkX2lub2RlKTtcXG4gXFx0ZWxzZVxcbkBAIC00NjY5LDggKzQ3NTgsOSBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSB7XFxuIFxcdFxcdGlmICgob3Blbl9mbGFnIFxcdTAwMjYgT19FWENMKSBcXHUwMDI2XFx1MDAyNiAhKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4tXFx0XFx0aWYgKGRfaXNfZGlyKG5kLVxcdTAwM2VwYXRoLmRlbnRyeSkpXFxuK1xcdFxcdGlmICghKG9wZW5fZmxhZyBcXHUwMDI2IE9fRElSRUNUT1JZKSBcXHUwMDI2XFx1MDAyNiBkX2lzX2RpcihuZC1cXHUwMDNlcGF0aC5kZW50cnkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJU0RJUjtcXG4rXFxuIFxcdFxcdGVycm9yID0gbWF5X2NyZWF0ZV9pbl9zdGlja3koaWRtYXAsIG5kLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGRfYmFja2luZ19pbm9kZShuZC1cXHUwMDNlcGF0aC5kZW50cnkpKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGVycm9yKSlcXG5AQCAtNDk0Niw3ICs1MDM2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXFxuIFxcdCAqIERvIHRoZSBmaW5hbCBsb29rdXAuICBTdXBwcmVzcyAnY3JlYXRlJyBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nXFxuIFxcdCAqICcvJywgYW5kIGEgZGlyZWN0b3J5IHdhc24ndCByZXF1ZXN0ZWQuXFxuIFxcdCAqL1xcbi1cXHRpZiAobGFzdC5uYW1lW2xhc3QubGVuXSBcXHUwMDI2XFx1MDAyNiAhd2FudF9kaXIpXFxuK1xcdGlmICh0cmFpbGluZ19zbGFzaGVzKGxhc3QpIFxcdTAwMjZcXHUwMDI2ICF3YW50X2RpcilcXG4gXFx0XFx0Y3JlYXRlX2ZsYWdzIFxcdTAwMjY9IH5MT09LVVBfQ1JFQVRFO1xcbiBcXHRkZW50cnkgPSBzdGFydF9kaXJvcChwYXRoLVxcdTAwM2VkZW50cnksIFxcdTAwMjZsYXN0LCByZXZhbF9mbGFnIHwgY3JlYXRlX2ZsYWdzKTtcXG4gXFx0aWYgKElTX0VSUihkZW50cnkpKVxcbkBAIC01MDQxLDMyICs1MTMxLDE3IEBAIHN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcXG4gXFx0XFx0cGF0aC1cXHUwMDNlZGVudHJ5ID0gZGlyO1xcbiBcXHRcXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xcbiBcXG4tXFx0XFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUpO1xcbitcXHRcXHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgbW9kZSwgLypjcmVhdGVfZGlyPSovIGZhbHNlKTtcXG4gXFx0XFx0aWYgKGNyZWF0ZV9lcnJvcilcXG4gXFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuIFxcbi1cXHRcXHQvKiBhdG9taWNfb3BlbiB3aWxsIGRwdXQoZGVudHJ5KSBvbiBlcnJvciAqL1xcbi1cXHRcXHRkZ2V0KG9yaWdfZGVudHJ5KTtcXG4gXFx0XFx0ZGVudHJ5ID0gYXRvbWljX29wZW4ocGF0aCwgZGVudHJ5LCBmaWxlLCBmbGFncywgbW9kZSk7XFxuIFxcdFxcdGVycm9yID0gUFRSX0VSUl9PUl9aRVJPKGRlbnRyeSk7XFxuLVxcbi1cXHRcXHRpZiAoSVNfRVJSKGRlbnRyeSkpXFxuLVxcdFxcdFxcdC8qIGtlZXAgdGhlIG9yaWdpbmFsICovXFxuK1xcdFxcdGlmICh1bmxpa2VseShlcnJvcikpXFxuIFxcdFxcdFxcdGRlbnRyeSA9IG9yaWdfZGVudHJ5O1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdC8qIERyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSAqL1xcbi1cXHRcXHRcXHRkcHV0KG9yaWdfZGVudHJ5KTtcXG4tXFxuIFxcdFxcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFxcdTAwMjZcXHUwMDI2IGVycm9yID09IC1FTk9FTlQpXFxuIFxcdFxcdFxcdGVycm9yID0gY3JlYXRlX2Vycm9yO1xcbiBcXG4tXFx0XFx0aWYgKCFlcnJvcikge1xcbi1cXHRcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfQ1JFQVRFRClcXG4tXFx0XFx0XFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpci1cXHUwMDNlZF9pbm9kZSwgZGVudHJ5KTtcXG4tXFx0XFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX09QRU5FRClcXG4tXFx0XFx0XFx0XFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcXG4tXFx0XFx0fVxcbi1cXG4gXFx0XFx0cGF0aC1cXHUwMDNlZGVudHJ5ID0gZGVudHJ5O1xcbiBcXG4gXFx0fSBlbHNlIHtcXG5AQCAtNTIxOCw2ICs1MjkzLDM5IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkXFxuIFxcdHJldHVybiBmaWxlbmFtZV9ta25vZGF0KEFUX0ZEQ1dELCBuYW1lLCBtb2RlLCBkZXYpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lXFxuK3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXFxuK3tcXG4rXFx0aW50IGVycm9yO1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcXG4rXFx0dW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLVxcdTAwM2VpX3NiLVxcdTAwM2VzX21heF9saW5rcztcXG4rXFxuK1xcdGVycm9yID0gLUVNTElOSztcXG4rXFx0aWYgKG1heF9saW5rcyBcXHUwMDI2XFx1MDAyNiBkaXItXFx1MDAzZWlfbmxpbmsgXFx1MDAzZT0gbWF4X2xpbmtzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0ZGUgPSBkaXItXFx1MDAzZWlfb3AtXFx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGlmIChJU19FUlIoZGUpKSB7XFxuK1xcdFxcdGVycm9yID0gUFRSX0VSUihkZSk7XFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuK1xcdGlmIChkZSkge1xcbitcXHRcXHRkcHV0KGRlbnRyeSk7XFxuK1xcdFxcdGRlbnRyeSA9IGRlO1xcbitcXHR9XFxuK1xcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcXG4rXFx0cmV0dXJuIGRlbnRyeTtcXG4rXFxuK2VycjpcXG4rXFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xcbit9XFxuK1xcbiAvKipcXG4gICogdmZzX21rZGlyIC0gY3JlYXRlIGRpcmVjdG9yeSByZXR1cm5pbmcgY29ycmVjdCBkZW50cnkgaWYgcG9zc2libGVcXG4gICogQGlkbWFwOlxcdFxcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cXG5AQCAtNTI0NSw3ICs1MzUzLDYgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRlbGVnYXRlZF9pbm9kZSlcXG4ge1xcbiBcXHRpbnQgZXJyb3I7XFxuLVxcdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19tYXhfbGlua3M7XFxuIFxcdHN0cnVjdCBkZW50cnkgKmRlO1xcbiBcXG4gXFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2RlbnRyeShpZG1hcCwgZGlyLCBkZW50cnkpO1xcbkBAIC01MjYxLDI0ICs1MzY4LDEyIEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbi1cXHRlcnJvciA9IC1FTUxJTks7XFxuLVxcdGlmIChtYXhfbGlua3MgXFx1MDAyNlxcdTAwMjYgZGlyLVxcdTAwM2VpX25saW5rIFxcdTAwM2U9IG1heF9saW5rcylcXG4tXFx0XFx0Z290byBlcnI7XFxuLVxcbi1cXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XFxuLVxcdGlmIChlcnJvcilcXG4rXFx0ZGUgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XFxuK1xcdGlmIChJU19FUlIoZGUpKSB7XFxuK1xcdFxcdGVycm9yID0gUFRSX0VSUihkZSk7XFxuIFxcdFxcdGdvdG8gZXJyO1xcbi1cXG4tXFx0ZGUgPSBkaXItXFx1MDAzZWlfb3AtXFx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuLVxcdGVycm9yID0gUFRSX0VSUihkZSk7XFxuLVxcdGlmIChJU19FUlIoZGUpKVxcbi1cXHRcXHRnb3RvIGVycjtcXG4tXFx0aWYgKGRlKSB7XFxuLVxcdFxcdGRwdXQoZGVudHJ5KTtcXG4tXFx0XFx0ZGVudHJ5ID0gZGU7XFxuIFxcdH1cXG4tXFx0ZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpO1xcbi1cXHRyZXR1cm4gZGVudHJ5O1xcbitcXHRyZXR1cm4gZGU7XFxuIFxcbiBlcnI6XFxuIFxcdGVuZF9jcmVhdGluZyhkZW50cnkpO1xcbkBAIC01NTY1LDcgKzU2NjAsNyBAQCBpbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKVxcbiBcXHRcXHRnb3RvIGV4aXRfZHJvcF93cml0ZTtcXG4gXFxuIFxcdC8qIFdoeSBub3QgYmVmb3JlPyBCZWNhdXNlIHdlIHdhbnQgY29ycmVjdCBlcnJvciB2YWx1ZSAqL1xcbi1cXHRpZiAodW5saWtlbHkobGFzdC5uYW1lW2xhc3QubGVuXSkpIHtcXG4rXFx0aWYgKHVubGlrZWx5KHRyYWlsaW5nX3NsYXNoZXMobGFzdCkpKSB7XFxuIFxcdFxcdGlmIChkX2lzX2RpcihkZW50cnkpKVxcbiBcXHRcXHRcXHRlcnJvciA9IC1FSVNESVI7XFxuIFxcdFxcdGVsc2VcXG5AQCAtNjE2NywxNiArNjI2MiwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSxcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSB7XFxuIFxcdFxcdGlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHtcXG4gXFx0XFx0XFx0ZXJyb3IgPSAtRU5PVERJUjtcXG4tXFx0XFx0XFx0aWYgKG5ld19sYXN0Lm5hbWVbbmV3X2xhc3QubGVuXSlcXG4rXFx0XFx0XFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmV3X2xhc3QpKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0LyogdW5sZXNzIHRoZSBzb3VyY2UgaXMgYSBkaXJlY3RvcnkgdHJhaWxpbmcgc2xhc2hlcyBnaXZlIC1FTk9URElSICovXFxuIFxcdGlmICghZF9pc19kaXIocmQub2xkX2RlbnRyeSkpIHtcXG4gXFx0XFx0ZXJyb3IgPSAtRU5PVERJUjtcXG4tXFx0XFx0aWYgKG9sZF9sYXN0Lm5hbWVbb2xkX2xhc3QubGVuXSlcXG4rXFx0XFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMob2xkX2xhc3QpKVxcbiBcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbi1cXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IFJFTkFNRV9FWENIQU5HRSkgXFx1MDAyNlxcdTAwMjYgbmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKVxcbitcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IFJFTkFNRV9FWENIQU5HRSkgXFx1MDAyNlxcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZXdfbGFzdCkpXFxuIFxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuY1xcbmluZGV4IGM3YjcyM2MxODYyMGM5Li5jODE1ZDlhYTliNjlkYSAxMDA2NDRcXG4tLS0gYS9mcy9uZnMvZGlyLmNcXG4rKysgYi9mcy9uZnMvZGlyLmNcXG5AQCAtMjEyMSw2ICsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRkZnByaW50ayhWRlMsIFxcXCJORlM6IGF0b21pY19vcGVuKCVzLyVsbHUpLCAlcGRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19pZCwgZGlyLVxcdTAwM2VpX2lubywgZGVudHJ5KTtcXG4gXFxuK1xcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxcbitcXHRcXHRvcGVuX2ZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0ZXJyID0gbmZzX2NoZWNrX2ZsYWdzKG9wZW5fZmxhZ3MpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC0yMzEzLDYgKzIzMTYsOSBAQCBpbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHQgKi9cXG4gXFx0aW50IGVycm9yID0gMDtcXG4gXFxuK1xcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxcbitcXHRcXHRvcGVuX2ZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiBcXHUwMDNlIE5GU19TRVJWRVIoZGlyKS1cXHUwMDNlbmFtZWxlbilcXG4gXFx0XFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmNcXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uODdlODg2NGQ5NDgwODcgMTAwNjQ0XFxuLS0tIGEvZnMvb3Blbi5jXFxuKysrIGIvZnMvb3Blbi5jXFxuQEAgLTExOTAsMjkgKzExOTAsMzAgQEAgaW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXFxuIFxcdGlmIChXSUxMX0NSRUFURShmbGFncykpIHtcXG4gXFx0XFx0aWYgKGhvdy1cXHUwMDNlbW9kZSBcXHUwMDI2IH5TX0lBTExVR08pXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRvcC1cXHUwMDNlbW9kZSA9IGhvdy1cXHUwMDNlbW9kZSB8IFNfSUZSRUc7XFxuK1xcdFxcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcXG4rXFx0XFx0XFx0b3AtXFx1MDAzZW1vZGUgPSBob3ctXFx1MDAzZW1vZGUgfCBTX0lGRElSO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG9wLVxcdTAwM2Vtb2RlID0gaG93LVxcdTAwM2Vtb2RlIHwgU19JRlJFRztcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0aWYgKGhvdy1cXHUwMDNlbW9kZSAhPSAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0b3AtXFx1MDAzZW1vZGUgPSAwO1xcbiBcXHR9XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBCbG9jayBidWdzIHdoZXJlIE9fRElSRUNUT1JZIHwgT19DUkVBVCBjcmVhdGVkIHJlZ3VsYXIgZmlsZXMuXFxuLVxcdCAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0c1xcbi1cXHQgKiBPX1RNUEZJTEUgYmVsb3cgd2hpY2ggcmVxdWlyZXMgT19ESVJFQ1RPUlkgYmVpbmcgcmFpc2VkLlxcbi1cXHQgKi9cXG4tXFx0aWYgKChmbGFncyBcXHUwMDI2IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKSA9PSAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbiBcXHQvKiBOb3cgaGFuZGxlIHRoZSBjcmVhdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBPX1RNUEZJTEUuICovXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IF9fT19UTVBGSUxFKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEluIG9yZGVyIHRvIGVuc3VyZSBwcm9ncmFtcyBnZXQgZXhwbGljaXQgZXJyb3JzIHdoZW4gdHJ5aW5nXFxuIFxcdFxcdCAqIHRvIHVzZSBPX1RNUEZJTEUgb24gb2xkIGtlcm5lbHMgd2UgZW5mb3JjZSB0aGF0IE9fRElSRUNUT1JZXFxuLVxcdFxcdCAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUuXFxuK1xcdFxcdCAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUsIGJ1dCB3aXRob3V0IE9fQ1JFQVQuIFRoZVxcbitcXHRcXHQgKiByZWFzb24gZm9yIGRpc2FsbG93aW5nIE9fQ1JFQVR8T19UTVBGSUxFIGlzIHRoYXRcXG4rXFx0XFx0ICogT19ESVJFQ1RPUll8T19DUkVBVCB1c2VkIHRvIHdvcmsgYW5kIGNyZWF0ZWQgYSByZWd1bGFyIGZpbGVcXG4rXFx0XFx0ICogaWYgbm90aGluZyBleGlzdGVkIGF0IHRoZSBvcGVuIHBhdGguIEhlbmNlLCBhbGxvd2luZyB0aGVcXG4rXFx0XFx0ICogY29tYmluYXRpb24gd291bGQgaGF2ZSBjYXVzZWQgT19DUkVBVHxPX1RNUEZJTEUgdG8gY3JlYXRlIGFcXG4rXFx0XFx0ICogcmVndWxhciAobm9uLXRlbXBvcmFyeSkgZmlsZSBvbiBvbGQga2VybmVscywgd2hpbGUgdGhlIGNhbGxlclxcbitcXHRcXHQgKiB3b3VsZCBiZWxpZXZlIHRoZXkgY3JlYXRlZCBhbiBhY3R1YWwgT19UTVBGSUxFLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBPX0RJUkVDVE9SWSkpXFxuK1xcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgT19ESVJFQ1RPUlkpIHx8IChmbGFncyBcXHUwMDI2IE9fQ1JFQVQpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0aWYgKCEoYWNjX21vZGUgXFx1MDAyNiBNQVlfV1JJVEUpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMTI2OSw2ICsxMjcwLDE1IEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcbiBcXG4gXFx0b3AtXFx1MDAzZWludGVudCA9IGZsYWdzIFxcdTAwMjYgT19QQVRIID8gMCA6IExPT0tVUF9PUEVOO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogUmVxdWVzdGluZyB3cml0ZSBhY2Nlc3Mgb24gYSBkaXJlY3RvcnkgY2FuIG5ldmVyIHN1Y2NlZWQuIFJhdGhlclxcbitcXHQgKiB0aGFuIHBlcmZvcm1pbmcgYSBwYXRoLXdhbGsgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHRhcmdldCBpc1xcbitcXHQgKiBhY3R1YWxseSBhIGRpcmVjdG9yeSAoLUVJU0RJUikgb3Igbm90ICgtRU5PVERJUiksIHdlIHNob3J0LWNpcmN1aXRcXG4rXFx0ICogdG8gLUVOT1RESVIuXFxuK1xcdCAqL1xcbitcXHRpZiAoKGZsYWdzIFxcdTAwMjYgT19ESVJFQ1RPUlkpIFxcdTAwMjZcXHUwMDI2ICEoZmxhZ3MgXFx1MDAyNiBfX09fVE1QRklMRSkgXFx1MDAyNlxcdTAwMjYgKGFjY19tb2RlIFxcdTAwMjYgTUFZX1dSSVRFKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9URElSO1xcbitcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgT19DUkVBVCkge1xcbiBcXHRcXHRvcC1cXHUwMDNlaW50ZW50IHw9IExPT0tVUF9DUkVBVEU7XFxuIFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE9fRVhDTCkge1xcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuY1xcbmluZGV4IDg4YTRhMTc4N2ZmMDQ3Li43NWJmODZjYzA2MTIyZSAxMDA2NDRcXG4tLS0gYS9mcy9zbWIvY2xpZW50L2Rpci5jXFxuKysrIGIvZnMvc21iL2NsaWVudC9kaXIuY1xcbkBAIC01MzgsNiArNTM4LDkgQEAgaW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxcbiBcXHRpZiAodW5saWtlbHkoY2lmc19mb3JjZWRfc2h1dGRvd24oY2lmc19zYikpKVxcbiBcXHRcXHRyZXR1cm4gc21iX0VJTyhzbWJfZWlvX3RyYWNlX2ZvcmNlZF9zaHV0ZG93bik7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihvZmxhZ3MpKVxcbitcXHRcXHRvZmxhZ3MgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBQb3NpeCBvcGVuIGlzIG9ubHkgY2FsbGVkIChhdCBsb29rdXAgdGltZSkgZm9yIGZpbGUgY3JlYXRlIG5vdy4gRm9yXFxuIFxcdCAqIG9wZW5zIChyYXRoZXIgdGhhbiBjcmVhdGVzKSwgYmVjYXVzZSB3ZSBkbyBub3Qga25vdyBpZiBpdCBpcyBhIGZpbGVcXG5kaWZmIC0tZ2l0IGEvZnMvdmJveHNmL2Rpci5jIGIvZnMvdmJveHNmL2Rpci5jXFxuaW5kZXggYzViZDMyNzFhYTk2MTYuLjc3YWUyZjY5NmZkNDM3IDEwMDY0NFxcbi0tLSBhL2ZzL3Zib3hzZi9kaXIuY1xcbisrKyBiL2ZzL3Zib3hzZi9kaXIuY1xcbkBAIC0zMTgsNiArMzE4LDkgQEAgc3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdHU2NCBoYW5kbGU7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG4gXFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmJveHNmX2Rpcl9sb29rdXAocGFyZW50LCBkZW50cnksIDApO1xcbiBcXHRcXHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmNudGwuaCBiL2luY2x1ZGUvbGludXgvZmNudGwuaFxcbmluZGV4IDZhZDZiOWU3YTIyNmFmLi42Yjc1Mjc3YmU1NTlkZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcXG5AQCAtMzAsNiArMzAsMTIgQEBcXG4gICovXFxuICNkZWZpbmUgX19PX1JFR1VMQVJcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAzMClcXG4gXFxuKyNkZWZpbmUgT19NS0RJUl9NQVNLXFx0KE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSlcXG4rc3RhdGljIGlubGluZSBib29sIE9fSVNfTUtESVIodW5zaWduZWQgZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIChmbGFncyBcXHUwMDI2IE9fTUtESVJfTUFTSykgPT0gT19NS0RJUl9NQVNLO1xcbit9XFxuK1xcbiAvKiBMaXN0IG9mIGFsbCB2YWxpZCBmbGFncyBmb3IgdGhlIGhvdy1cXHUwMDNlcmVzb2x2ZSBhcmd1bWVudDogKi9cXG4gI2RlZmluZSBWQUxJRF9SRVNPTFZFX0ZMQUdTIFxcXFxcXG4gXFx0KFJFU09MVkVfTk9fWERFViB8IFJFU09MVkVfTk9fTUFHSUNMSU5LUyB8IFJFU09MVkVfTk9fU1lNTElOS1MgfCBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlXFxuaW5kZXggNjRhYzBkZmE0NmI3ZWYuLmYyNTdiM2RkYjQ3OTQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlXFxuQEAgLTEsNCArMSw1IEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbitvcGVuX29fY3JlYXRfb19kaXJcXG4gZG5vdGlmeV90ZXN0XFxuIGRldnB0c19wdHNcXG4gZmNsb2dcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxcbmluZGV4IDg1NDI3ZDdmMTliOWI1Li42NDVjNTJkMmQ0ZGViMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXFxuQEAgLTEsNyArMSw3IEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gXFxuIENGTEFHUyArPSAkKEtIRFJfSU5DTFVERVMpXFxuLVRFU1RfR0VOX1BST0dTIDo9IGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2dcXG4rVEVTVF9HRU5fUFJPR1MgOj0gb3Blbl9vX2NyZWF0X29fZGlyIGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2dcXG4gVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgOj0gZG5vdGlmeV90ZXN0XFxuIFxcbiBpbmNsdWRlIC4uL2xpYi5ta1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuY1xcbmluZGV4IDU1MWM0YTBmMzk1YTEyLi41OTNhNTEzNmU5OTE5MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuY1xcbkBAIC02LDEwICs2LDggQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc3NlcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc2NoZWQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW91bnQuaFxcdTAwM2VcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kZjNjZGJhZTJjODUyNFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xcbkBAIC0wLDAgKzEsMTk3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW1pdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IG9wZW5fb19jcmVhdF9vX2RpcihpbnQgZGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBtb2RlX3QgbW9kZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLFxcbitcXHRcXHQgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpO1xcbit9XFxuK1xcbisjZGVmaW5lIG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIGZsYWdzKSAoe1xcdFxcXFxcXG4rXFx0c3RydWN0IHN0YXQgX19zdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGludCBfX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyKGRmZCwgcGF0aG5hbWUsIFNfSVJXWFUsIGZsYWdzKTtcXHRcXFxcXFxuK1xcdEFTU0VSVF9HRShfX2ZkLCAwKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdEFTU0VSVF9FUShmc3RhdChfX2ZkLCBcXHUwMDI2X19zdCksIDApO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fZmQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4rI2RlZmluZSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChkZmQsIHBhdGhuYW1lKSBcXFxcXFxuK1xcdG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIDApXFxuK1xcbitGSVhUVVJFKG9wZW5fb19jcmVhdF9vX2Rpcikge1xcbitcXHRjaGFyIGRpcnBhdGhbUEFUSF9NQVhdO1xcbitcXHRpbnQgZGZkO1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChvcGVuX29fY3JlYXRfb19kaXIpXFxuK3tcXG4rXFx0c3RyY3B5KHNlbGYtXFx1MDAzZWRpcnBhdGgsIFxcXCIvdG1wL29wZW5fb19jcmVhdF9vX2Rpcl90ZXN0LlhYWFhYWFxcXCIpO1xcbitcXHRBU1NFUlRfTkUobWtkdGVtcChzZWxmLVxcdTAwM2VkaXJwYXRoKSwgTlVMTCk7XFxuK1xcdHNlbGYtXFx1MDAzZWRmZCA9IG9wZW4oc2VsZi1cXHUwMDNlZGlycGF0aCwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0Uoc2VsZi1cXHUwMDNlZGZkLCAwKTtcXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpXFxuK3tcXG4rXFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZGZkKTtcXG4rXFx0cm1kaXIoc2VsZi1cXHUwMDNlZGlycGF0aCk7XFxuK31cXG4rXFxuKy8qIERvZXMgb3Blbl9vX2NyZWF0X29fZGlyIHJldHVybiBhIGZkIGF0IGFsbD8gKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgcmV0dXJuc19mZClcXG4re1xcbitcXHRpbnQgZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChzZWxmLVxcdTAwM2VkZmQsIFxcXCJuZXdkaXJcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK1xcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJuZXdkaXJcXFwiLCBBVF9SRU1PVkVESVIpLCAwKTtcXG4rfVxcbitcXG4rLyogVGhlIGZkIG11c3QgcmVmZXIgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQuICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX2lzX2NyZWF0ZWRfZGlyKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0c3RydWN0IHN0YXQgc3RfdmlhX2ZkLCBzdF92aWFfcGF0aDtcXG4rXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFxuK1xcdGZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi1cXHUwMDNlZGZkLCBcXFwiY2hlY2tkaXJcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShmc3RhdChmZCwgXFx1MDAyNnN0X3ZpYV9mZCksIDApO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvY2hlY2tkaXJcXFwiLCBzZWxmLVxcdTAwM2VkaXJwYXRoKTtcXG4rXFx0QVNTRVJUX0VRKHN0YXQocGF0aCwgXFx1MDAyNnN0X3ZpYV9wYXRoKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2lubywgc3RfdmlhX3BhdGguc3RfaW5vKTtcXG4rXFx0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcXG4rfVxcbitcXG4rLyogTWlzc2luZyBwYXJlbnQgY29tcG9uZW50IG11c3QgZmFpbCB3aXRoIEVOT0VOVC4gKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vZW50X21pc3NpbmdfcGFyZW50KVxcbit7XFxuK1xcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cXHUwMDNlZGZkLCBcXFwibm9uZXhpc3RlbnQvY2hpbGRcXFwiLCBTX0lSV1hVLCAwKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7XFxuK31cXG4rXFxuKy8qIEFuIGludmFsaWQgZGZkIG11c3QgZmFpbCB3aXRoIEVCQURGLiAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlYmFkZilcXG4re1xcbitcXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKC00MiwgXFxcImJhZGZkaXJcXFwiLCBTX0lSV1hVLCAwKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVCQURGKTtcXG4rfVxcbitcXG4rLyogQSBkZmQgdGhhdCBwb2ludHMgdG8gYSBmaWxlIChub3QgYSBkaXJlY3RvcnkpIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub3RkaXJfZGZkKVxcbit7XFxuK1xcdGludCBmaWxlX2ZkO1xcbitcXG4rXFx0ZmlsZV9mZCA9IG9wZW5hdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJmaWxlXFxcIixcXG4rXFx0XFx0XFx0IE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XFxuK1xcdEFTU0VSVF9HRShmaWxlX2ZkLCAwKTtcXG4rXFxuK1xcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoZmlsZV9mZCwgXFxcInN1YmRpclxcXCIsIFNfSVJXWFUsIDApLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xcbitcXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwiZmlsZVxcXCIsIDApLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogT19FWENMIHRvZ2V0aGVyIHdpdGggT19DUkVBVHxPX0RJUkVDVE9SWSBtdXN0IGZhaWwgd2l0aCBFRVhJU1Qgd2hlblxcbisgKiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy5cXG4rICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIG9fZXhjbF9lZXhpc3QpXFxuK3tcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0ZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhzZWxmLVxcdTAwM2VkZmQsIFxcXCJleGNsZGlyXFxcIiwgT19FWENMKTtcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXFx1MDAzZWRmZCwgXFxcImV4Y2xkaXJcXFwiLCBTX0lSV1hVLCBPX0VYQ0wpLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRUVYSVNUKTtcXG4rXFxuK1xcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJleGNsZGlyXFxcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgb24gYSBwYXRoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXMgYSByZWd1bGFyIGZpbGVcXG4rICogbXVzdCBmYWlsIHdpdGggRU5PVERJUi5cXG4rICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGV4aXN0aW5nX2ZpbGVfZW5vdGRpcilcXG4re1xcbitcXHRpbnQgZmlsZV9mZDtcXG4rXFxuK1xcdGZpbGVfZmQgPSBvcGVuYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwicmVnZmlsZVxcXCIsXFxuK1xcdFxcdFxcdCBPX0NSRUFUIHwgT19XUk9OTFksIFNfSVJXWFUpO1xcbitcXHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XFxuK1xcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXFx1MDAzZWRmZCwgXFxcInJlZ2ZpbGVcXFwiLCBTX0lSV1hVLCAwKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXFx1MDAzZWRmZCwgXFxcInJlZ2ZpbGVcXFwiLCAwKSwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgY29tYmluZWQgd2l0aCBhIHdyaXRhYmxlIGFjY2VzcyBtb2RlIG11c3QgYmVcXG4rICogcmVqZWN0ZWQ6IGEgZGlyZWN0b3J5IGNhbm5vdCBiZSBvcGVuZWQgZm9yIHdyaXRpbmcuXFxuKyAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZWplY3RzX3dyaXRhYmxlX2FjY19tb2RlKVxcbit7XFxuK1xcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cXHUwMDNlZGZkLCBcXFwicmR3cmRpclxcXCIsIFNfSVJXWFUsIE9fUkRXUiksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcXG4rXFx0LyogQ2xlYW4gdXAgaWYgdGhlIGtlcm5lbCBjcmVhdGVkIHRoZSBkaXJlY3RvcnkgYW55d2F5LiAqL1xcbitcXHR1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJyZHdyZGlyXFxcIiwgQVRfUkVNT1ZFRElSKTtcXG4rfVxcbitcXG4rLypcXG4rICogb3BlbmF0KE9fQ1JFQVQpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBidXQgd2l0aG91dCBPX0RJUkVDVE9SWVxcbisgKiBtdXN0IGZhaWwgd2l0aCBFSVNESVIgYW5kIG11c3Qgbm90IGNyZWF0ZSBhbnl0aGluZyBhdCB0aGUgcGF0aC5cXG4rICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoX25vX29fZGlyKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0c3RydWN0IHN0YXQgc3Q7XFxuK1xcbitcXHRmZCA9IG9wZW5hdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJ0cmFpbGluZy9cXFwiLCBPX0NSRUFUIHwgT19XUk9OTFksIFNfSVJXWFUpO1xcbitcXHRFWFBFQ1RfRVEoZmQsIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFSVNESVIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKGZzdGF0YXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwidHJhaWxpbmdcXFwiLCBcXHUwMDI2c3QsIDApLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcXG4rXFxuK1xcdC8qIEJlc3QtZWZmb3J0IGNsZWFudXAgaW4gY2FzZSB0aGUga2VybmVsIGxlZnQgYSBmaWxlIGJlaGluZC4gKi9cXG4rXFx0aWYgKGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0dW5saW5rYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwidHJhaWxpbmdcXFwiLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIHJldHVybmVkIGZkIG11c3QgYmUgdXNhYmxlIGFzIGEgZGZkIGZvciBmdXJ0aGVyICphdCgpIGNhbGxzLlxcbisgKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZClcXG4re1xcbitcXHRpbnQgcGFyZW50X2ZkLCBjaGlsZF9mZDtcXG4rXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFxuK1xcdHBhcmVudF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtXFx1MDAzZWRmZCwgXFxcInBhcmVudFxcXCIpO1xcbitcXHRjaGlsZF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHBhcmVudF9mZCwgXFxcImNoaWxkXFxcIik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoY2hpbGRfZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKHBhcmVudF9mZCksIDApO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvcGFyZW50L2NoaWxkXFxcIiwgc2VsZi1cXHUwMDNlZGlycGF0aCk7XFxuK1xcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XFxuK1xcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIiVzL3BhcmVudFxcXCIsIHNlbGYtXFx1MDAzZWRpcnBhdGgpO1xcbitcXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xcbit9XFxuK1xcbitURVNUX0hBUk5FU1NfTUFJTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0MjoxNy41OTIxOTg2MDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTUyNjQ2MjAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXRoX29wZW5hdFwiLFxuICAgIFwiZG9fc3lzX29wZW5cIixcbiAgICBcInZmc19ta2RpclwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwiZmlsZW5hbWVfdW5saW5rYXRcIixcbiAgICBcImZpbGVuYW1lX3JlbmFtZWF0MlwiLFxuICAgIFwiY2lmc19hdG9taWNfb3BlblwiLFxuICAgIFwidjlmc192ZnNfYXRvbWljX29wZW5cIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxcIixcbiAgICBcImNlcGhfYXRvbWljX29wZW5cIixcbiAgICBcImZ1c2VfYXRvbWljX29wZW5cIixcbiAgICBcImdmczJfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3BlblwiLFxuICAgIFwibmZzX2F0b21pY19vcGVuX3YyM1wiLFxuICAgIFwidmJveHNmX2Rpcl9hdG9taWNfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVkZTIGxheWVyLCBhbGxvd2luZyBvcGVuYXQoKSB3aXRoIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSB0byBjcmVhdGUgZGlyZWN0b3JpZXMuIEl0IG1vZGlmaWVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIChmcy9uYW1laS5jLCBmcy9vcGVuLmMpIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKDlwLCBjZXBoLCBmdXNlLCBnZnMyLCBuZnMsIHNtYiwgdmJveHNmKSB0byBoYW5kbGUgdGhlIG5ldyBiZWhhdmlvciBpbiB0aGVpciBhdG9taWNfb3BlbiBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBpbiBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGZpbGUgb3BlbmluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlOGNkYWQ3YzEyY2ZhNTk4MDkwNjY1NjUxYzMzMzQ5ZDQ0MGIxZGFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTY6NDI6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jXG5pbmRleCA1NzgzZDAzMzZmOTZhYy4uYmI1NTVlNWJhMjYxNTAgMTAwNjQ0XG4tLS0gYS9mcy85cC92ZnNfaW5vZGUuY1xuKysrIGIvZnMvOXAvdmZzX2lub2RlLmNcbkBAIC03NzcsNiArNzc3LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gXHRpbnQgcDlfb21vZGU7XG4gXG4rXHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbmluZGV4IGY3Mzk2ZDIwY2I2Y2RjLi5mZjNmYWNiNDIwYzIyNCAxMDA2NDRcbi0tLSBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbisrKyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbkBAIC0yMzksNiArMjM5LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0c3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcztcbiBcdHN0cnVjdCBwb3NpeF9hY2wgKnBhY2wgPSBOVUxMLCAqZGFjbCA9IE5VTEw7XG4gXG4rXHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuY1xuaW5kZXggNzExNjFmMmIyMTUxMzYuLmU3OWFiZGJkOWY2MWU5IDEwMDY0NFxuLS0tIGEvZnMvY2VwaC9maWxlLmNcbisrKyBiL2ZzL2NlcGgvZmlsZS5jXG5AQCAtODExLDYgKzgxMSw5IEBAIGludCBjZXBoX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksXG4gXHQgICAgICBkX3VuaGFzaGVkKGRlbnRyeSkgPyBcInVuaGFzaGVkXCIgOiBcImhhc2hlZFwiLCBmbGFncywgbW9kZSk7XG4gXG4rXHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4gXHUwMDNlIE5BTUVfTUFYKVxuIFx0XHRyZXR1cm4gLUVOQU1FVE9PTE9ORztcbiBcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuY1xuaW5kZXggMGUyYTEwMzlmYTQzZWEuLmUwMTg2OTU2NWQ1ZWU1IDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9kaXIuY1xuKysrIGIvZnMvZnVzZS9kaXIuY1xuQEAgLTkzNSw2ICs5MzUsOSBAQCBzdGF0aWMgaW50IGZ1c2VfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmVudHJ5LFxuIFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbiBcdHN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGZ1c2VfaXNfYmFkKGRpcikpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuY1xuaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjk4NTlhZTAzNDFhOTllIDEwMDY0NFxuLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jXG4rKysgYi9mcy9nZnMyL2lub2RlLmNcbkBAIC0xMzg3LDYgKzEzODcsOSBAQCBzdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB7XG4gXHRib29sIGV4Y2wgPSAhIShmbGFncyBcdTAwMjYgT19FWENMKTtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKmQgPSBfX2dmczJfbG9va3VwKGRpciwgZGVudHJ5LCBmaWxlKTtcbiBcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpIHtcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggNWNjOWYwZjQ2NmI4MzAuLmZlZjgyNmMwNGViNTA3IDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuKysrIGIvZnMvbmFtZWkuY1xuQEAgLTEzODIsMTMgKzEzODIsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuIFxuIC8qKlxuICAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XG4tICpcdFx0XHQgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzIHRoYXQgYWxyZWFkeVxuLSAqXHRcdFx0ICBleGlzdC5cbisgKlx0XHRcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdFxuICAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXG4gICpcbi0gKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjpcbisgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46XG4gICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZFxuICAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xuICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XG5AQCAtMTQxNiw2ICsxNDE1LDE0IEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0aWYgKGxpa2VseSghKGRpcl9tb2RlIFx1MDAyNiBTX0lTVlRYKSkpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0LypcbitcdCAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreVxuK1x0ICogZm9sZGVycy4gVGhlcmVmb3JlLCBmb3IgdGhlIFNfSVNESVIgY2FzZSwgZGlzYWJsaW5nXG4rXHQgKiBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIgaXMgbm90IGVub3VnaCB0byBhbGxvdyBjcmVhdGluZyBhXG4rXHQgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzXG4rXHQgKiBub3QgZXhwZWN0aW5nIHRoYXQgT19DUkVBVHxPX0RJUkVDVE9SWSBpcyBwb3NzaWJsZSBvbiBuZXdlclxuK1x0ICoga2VybmVscy5cbitcdCAqL1xuIFx0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcilcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTQ0Nyw2ICsxNDU0LDEyIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0XHRcdFx0XHQgICAgICBcInN0aWNreV9jcmVhdGVfcmVndWxhclwiKTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuK1xuK1x0XHRpZiAoc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyIFx1MDAzZT0gMiBcdTAwMjZcdTAwMjYgU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXHRcdFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsXG4rXHRcdFx0XHRcdCAgICAgIFwic3RpY2t5X2NyZWF0ZV9kaXJcIik7XG4rXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTI3ODEsOSArMjc5NCwxNCBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncylcbiBcdHJldHVybiBzO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhjb25zdCBzdHJ1Y3QgcXN0ciBsYXN0KVxuK3tcbitcdHJldHVybiAoYm9vbClsYXN0Lm5hbWVbbGFzdC5sZW5dO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmxvb2t1cF9sYXN0KHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuIHtcbi1cdGlmIChuZC1cdTAwM2VsYXN0X3R5cGUgPT0gTEFTVF9OT1JNIFx1MDAyNlx1MDAyNiBuZC1cdTAwM2VsYXN0Lm5hbWVbbmQtXHUwMDNlbGFzdC5sZW5dKVxuK1x0aWYgKG5kLVx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXHUwMDI2XHUwMDI2IHRyYWlsaW5nX3NsYXNoZXMobmQtXHUwMDNlbGFzdCkpXG4gXHRcdG5kLVx1MDAzZWZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZO1xuIFxuIFx0cmV0dXJuIHdhbGtfY29tcG9uZW50KG5kLCBXQUxLX1RSQUlMSU5HKTtcbkBAIC00MTY0LDYgKzQxODIsMjQgQEAgc3RhdGljIGlubGluZSB1bW9kZV90IHZmc19wcmVwYXJlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRyZXR1cm4gbW9kZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZVxuK2ludCB2ZnNfY3JlYXRlX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0ICAgICAgIHVtb2RlX3QgbW9kZSwgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXG4re1xuK1x0c3RydWN0IGlub2RlICpkaXIgPSBkX2lub2RlKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4rXHRpbnQgZXJyb3I7XG4rXG4rXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCB0cnVlKTtcbitcdGlmICghZXJyb3IpXG4rXHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4rXG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuIC8qKlxuICAqIHZmc19jcmVhdGUgLSBjcmVhdGUgbmV3IGZpbGVcbiAgKiBAaWRtYXA6XHRpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXG5AQCAtNDE5NiwxMyArNDIzMiw4IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuLVx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdHJldHVybiBlcnJvcjtcbi1cdGVycm9yID0gZGlyLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7XG4tXHRpZiAoIWVycm9yKVxuLVx0XHRmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpO1xuLVx0cmV0dXJuIGVycm9yO1xuK1xuK1x0cmV0dXJuIHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBkaSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7XG4gXG5AQCAtNDMxOSwyMSArNDM1MCw0MCBAQCBzdGF0aWMgaW5saW5lIGludCBvcGVuX3RvX25hbWVpX2ZsYWdzKGludCBmbGFnKVxuIFxuIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdGNvbnN0IHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHR1bW9kZV90IG1vZGUpXG4rXHRcdFx0dW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpXG4ge1xuLVx0aW50IGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4rXHRzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZTtcbitcdGludCBlcnJvcjtcbitcbitcdGlmIChjcmVhdGVfZGlyKVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4gXHRpZiAoIWZzdWlkZ2lkX2hhc19tYXBwaW5nKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9zYiwgaWRtYXApKVxuIFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbi1cdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLFxuLVx0XHRcdFx0IE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbitcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0aWYgKGNyZWF0ZV9kaXIpXG4rXHRcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4rXG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpXG4re1xuK1x0aWYgKGNyZWF0ZV9kaXIpXG4rXHRcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIDApO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuIH1cbiBcbiAvKlxuQEAgLTQzNDcsNyArNDM5Nyw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuICAqIGJlIHNldC4gIFRoZSBjYWxsZXIgd2lsbCBuZWVkIHRvIHBlcmZvcm0gdGhlIG9wZW4gdGhlbXNlbHZlcy4gIEBwYXRoIHdpbGxcbiAgKiBoYXZlIGJlZW4gdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGRlbnRyeS4gIFRoaXMgbWF5IGJlIG5lZ2F0aXZlLlxuICAqXG4tICogUmV0dXJucyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlLiBPbiBlcnJvciB0aGUgcmVmIHRvIGRlbnRyeSBpcyBrZXB0LlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgZmlsZSAqZmlsZSxcbkBAIC00MzU5LDYgKzQ0MDksNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeVxuIFxuIFx0ZmlsZS1cdTAwM2VfX2ZfcGF0aC5kZW50cnkgPSBERU5UUllfTk9UX1NFVDtcbiBcdGZpbGUtXHUwMDNlX19mX3BhdGgubW50ID0gcGF0aC1cdTAwM2VtbnQ7XG4rXG4gXHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWF0b21pY19vcGVuKGRpciwgZGVudHJ5LCBmaWxlLFxuIFx0XHRcdFx0ICAgICAgIG9wZW5fdG9fbmFtZWlfZmxhZ3Mob3Blbl9mbGFnKSwgbW9kZSk7XG4gXHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XG5AQCAtNDM3MSwyMSArNDQyMiwzOSBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeVxuIFx0XHR9IGVsc2UgaWYgKFdBUk5fT04oZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5ID09IERFTlRSWV9OT1RfU0VUKSkge1xuIFx0XHRcdGVycm9yID0gLUVJTztcbiBcdFx0fSBlbHNlIHtcbitcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpvbGQgPSBkZW50cnk7XG4rXHRcdFx0Ym9vbCByZXBsYWNlZCA9IGZhbHNlO1xuIFx0XHRcdGlmIChmaWxlLVx1MDAzZWZfcGF0aC5kZW50cnkpIHtcbi1cdFx0XHRcdGRwdXQoZGVudHJ5KTtcbiBcdFx0XHRcdGRlbnRyeSA9IGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeTtcbitcdFx0XHRcdHJlcGxhY2VkID0gZGVudHJ5ICE9IG9sZDtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKHVubGlrZWx5KGRfaXNfbmVnYXRpdmUoZGVudHJ5KSkpXG4rXHRcdFx0aWYgKHVubGlrZWx5KGRfaXNfbmVnYXRpdmUoZGVudHJ5KSkpIHtcbitcdFx0XHRcdC8qIERvIG5vdCBkcm9wIG9yaWdpbmFsIGRlbnRyeSByZWYgb24gZXJyb3IgKi9cbitcdFx0XHRcdGlmIChyZXBsYWNlZClcbitcdFx0XHRcdFx0ZHB1dChkZW50cnkpO1xuIFx0XHRcdFx0ZXJyb3IgPSAtRU5PRU5UO1xuK1x0XHRcdH0gZWxzZSBpZiAocmVwbGFjZWQpIHtcbitcdFx0XHRcdGRwdXQob2xkKTtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbitcbiBcdGlmIChlcnJvcikge1xuLVx0XHRkcHV0KGRlbnRyeSk7XG4gXHRcdGRlbnRyeSA9IEVSUl9QVFIoZXJyb3IpO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxuK1x0XHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4rXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuK1x0XHRcdGZzbm90aWZ5X29wZW4oZmlsZSk7XG4gXHR9XG4rXG4gXHRyZXR1cm4gZGVudHJ5O1xuIH1cbiBcbitzdGF0aWMgaW5saW5lXG4rc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXG4rXHRcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTtcbiAvKlxuICAqIExvb2sgdXAgYW5kIG1heWJlIGNyZWF0ZSBhbmQgb3BlbiB0aGUgbGFzdCBjb21wb25lbnQuXG4gICpcbkBAIC00NDEyLDYgKzQ0ODEsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuIFx0aW50IGVycm9yLCBjcmVhdGVfZXJyb3IgPSAwO1xuIFx0dW1vZGVfdCBtb2RlID0gb3AtXHUwMDNlbW9kZTtcbitcdGJvb2wgY3JlYXRlX2RpciA9IE9fSVNfTUtESVIob3Blbl9mbGFnKTtcbiBcbiBcdGlmICh1bmxpa2VseShJU19ERUFERElSKGRpcl9pbm9kZSkpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbkBAIC00NDM3LDcgKzQ1MDcsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRkZW50cnkgPSBOVUxMO1xuIFx0fVxuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlKSB7XG4tXHRcdC8qIENhY2hlZCBwb3NpdGl2ZSBkZW50cnk6IHdpbGwgb3BlbiBpbiBmX29wLVx1MDAzZW9wZW4gKi9cbitcdFx0LyogQ2FjaGVkIHBvc2l0aXZlIGRlbnRyeTogd2lsbCBvcGVuIGluIGRvX29wZW4oKS4gKi9cbiBcdFx0cmV0dXJuIGRlbnRyeTtcbiBcdH1cbiBcbkBAIC00NDU5LDIxICs0NTI5LDM1IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTClcbiBcdFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19UUlVOQztcbi1cdFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpci1cdTAwM2VkX2lub2RlLCBtb2RlLCBtb2RlLCBtb2RlKTtcbitcdFx0bW9kZSA9IG9fY3JlYXRlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgY3JlYXRlX2Rpcik7XG4gXHRcdGlmIChsaWtlbHkoZ290X3dyaXRlKSlcbiBcdFx0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIFx1MDAyNm5kLVx1MDAzZXBhdGgsXG4tXHRcdFx0XHRcdFx0ICAgIGRlbnRyeSwgbW9kZSk7XG4rXHRcdFx0XHRcdFx0ICAgIGRlbnRyeSwgbW9kZSwgY3JlYXRlX2Rpcik7XG4gXHRcdGVsc2VcbiBcdFx0XHRjcmVhdGVfZXJyb3IgPSAtRVJPRlM7XG4rXHRcdC8qIFJlZnVzZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdGhyb3VnaCBhIGRhbmdsaW5nICh0cmFpbGluZylcbitcdFx0ICogc3ltbGluay4gRm9yIHJlZ3VsYXIgZmlsZXMgdGhpcyBoYXMgYmVlbiBhbGxvd2VkIGhpc3RvcmljYWxseVxuK1x0XHQgKiBvbiBPX0NSRUFUIHdpdGhvdXQgT19FWENMLiAqL1xuK1x0XHRpZiAodW5saWtlbHkobmQtXHUwMDNlZGVwdGgpIFx1MDAyNlx1MDAyNiBjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhY3JlYXRlX2Vycm9yKVxuK1x0XHRcdGNyZWF0ZV9lcnJvciA9IC1FTE9PUDtcbiBcdH1cbiBcdGlmIChjcmVhdGVfZXJyb3IpXG4gXHRcdG9wZW5fZmxhZyBcdTAwMjY9IH5PX0NSRUFUO1xuIFx0aWYgKGRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWF0b21pY19vcGVuKSB7XG4rXHRcdHN0cnVjdCBkZW50cnkgKm9yaWdfZGVudHJ5ID0gZGVudHJ5O1xuIFx0XHRpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9ESVJFQ1RPUlkpXG4gXHRcdFx0b3Blbl9mbGFnIHw9IE9fRElSRUNUT1JZO1xuIFx0XHRkZW50cnkgPSBhdG9taWNfb3BlbihcdTAwMjZuZC1cdTAwM2VwYXRoLCBkZW50cnksIGZpbGUsIG9wZW5fZmxhZywgbW9kZSk7XG4tXHRcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFx1MDAyNlx1MDAyNiBkZW50cnkgPT0gRVJSX1BUUigtRU5PRU5UKSlcbi1cdFx0XHRkZW50cnkgPSBFUlJfUFRSKGNyZWF0ZV9lcnJvcik7XG4rXHRcdGVycm9yID0gUFRSX0VSUl9PUl9aRVJPKGRlbnRyeSk7XG4rXHRcdGlmICh1bmxpa2VseShlcnJvcikpXG4rXHRcdFx0ZGVudHJ5ID0gb3JpZ19kZW50cnk7IC8qIGF0b21pY19vcGVuKCkga2VlcHMgcmVmIG9uIGVycm9yICovXG4rXHRcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFx1MDAyNlx1MDAyNiBlcnJvciA9PSAtRU5PRU5UKSB7XG4rXHRcdFx0LyogU2hvdWxkIGhhdmUgZG9uZSBhIGNyZWF0ZSwgYnV0IHdlIGFscmVhZHkgZXJyb3JlZC4gKi9cbitcdFx0XHRhdWRpdF9pbm9kZV9jaGlsZChkaXItXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XG4rXHRcdFx0ZXJyb3IgPSBjcmVhdGVfZXJyb3I7XG4rXHRcdH1cbitcdFx0aWYgKHVubGlrZWx5KGVycm9yKSlcbitcdFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0XHRyZXR1cm4gZGVudHJ5O1xuIFx0fVxuIFxuQEAgLTQ0OTAsMzAgKzQ1NzQsNDQgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHRkZW50cnkgPSByZXM7XG4gXHRcdH1cbiBcdH1cbitcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSB8fCAhKG9wLVx1MDAzZW9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkpIHtcbitcdFx0LyogTm8gbmVlZCB0byBjcmVhdGUgYSBmaWxlLiBJZiBsb29rdXAgcmV0dXJuZWQgYSBwb3NpdGl2ZVxuK1x0XHQgKiBkZW50cnksIHRoZSBmaWxlIHdpbGwgYmUgb3BlbmVkIGluIGRvX29wZW4oKS4gKi9cbitcdFx0cmV0dXJuIGRlbnRyeTtcbitcdH1cbiBcbi1cdC8qIE5lZ2F0aXZlIGRlbnRyeSwganVzdCBjcmVhdGUgdGhlIGZpbGUgKi9cbi1cdGlmICghZGVudHJ5LVx1MDAzZWRfaW5vZGUgXHUwMDI2XHUwMDI2IChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpKSB7XG4tXHRcdC8qIGJ1dCBicmVhayB0aGUgZGlyZWN0b3J5IGxlYXNlIGZpcnN0ISAqL1xuLVx0XHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXJfaW5vZGUsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XG4tXHRcdGlmIChlcnJvcilcbi1cdFx0XHRnb3RvIG91dF9kcHV0O1xuK1x0LyogTmVnYXRpdmUgZGVudHJ5IHdpdGggT19DUkVBVCBmbGFnIHNldCAqL1xuK1x0YXVkaXRfaW5vZGVfY2hpbGQoZGlyLVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpO1xuIFxuLVx0XHRmaWxlLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEO1xuLVx0XHRhdWRpdF9pbm9kZV9jaGlsZChkaXJfaW5vZGUsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpO1xuLVx0XHRpZiAoIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZSkge1xuLVx0XHRcdGVycm9yID0gLUVBQ0NFUztcbi1cdFx0XHRnb3RvIG91dF9kcHV0O1xuLVx0XHR9XG4tXG4tXHRcdGVycm9yID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcbi1cdFx0XHRcdFx0XHRtb2RlLCBvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTCk7XG4tXHRcdGlmIChlcnJvcilcbi1cdFx0XHRnb3RvIG91dF9kcHV0O1xuLVx0fVxuLVx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXHUwMDI2XHUwMDI2ICFkZW50cnktXHUwMDNlZF9pbm9kZSkge1xuK1x0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikpIHtcbitcdFx0LyogU2hvdWxkIGhhdmUgZG9uZSBhIGNyZWF0ZSwgYnV0IHdlIGFscmVhZHkgZXJyb3JlZCAqL1xuIFx0XHRlcnJvciA9IGNyZWF0ZV9lcnJvcjtcbiBcdFx0Z290byBvdXRfZHB1dDtcbiBcdH1cbitcbitcdGlmICgoY3JlYXRlX2RpciBcdTAwMjZcdTAwMjYgIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKVxuK1x0ICAgIHx8ICghY3JlYXRlX2RpciBcdTAwMjZcdTAwMjYgIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZSkpIHtcbitcdFx0ZXJyb3IgPSAtRUFDQ0VTO1xuK1x0XHRnb3RvIG91dF9kcHV0O1xuK1x0fVxuK1xuK1x0aWYgKGNyZWF0ZV9kaXIpIHtcbitcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxuK1x0XHRcdFx0XHRcdCAgICAgICBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpO1xuK1x0XHRpZiAoSVNfRVJSKHJlcykpIHtcbitcdFx0XHRlcnJvciA9IFBUUl9FUlIocmVzKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRlcnJvciA9IDA7XG4rXHRcdFx0ZGVudHJ5ID0gcmVzO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnJvciA9IHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpO1xuK1x0fVxuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIG91dF9kcHV0O1xuK1xuK1x0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcbitcbiBcdHJldHVybiBkZW50cnk7XG4gXG4gb3V0X2RwdXQ6XG5AQCAtNDUyMSwxNyArNDYxOSwxMiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbi17XG4tXHRyZXR1cm4gKGJvb2wpbmQtXHUwMDNlbGFzdC5uYW1lW25kLVx1MDAzZWxhc3QubGVuXTtcbi19XG4tXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKVxuIHtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiBcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbi1cdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKVxuK1x0XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZC1cdTAwM2VsYXN0KSBcdTAwMjZcdTAwMjYgIShvcGVuX2ZsYWcgXHUwMDI2IE9fRElSRUNUT1JZKSlcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlTRElSKTtcbiBcbiBcdFx0LyogRG9uJ3QgYm90aGVyIG9uIGFuIE9fRVhDTCBjcmVhdGUgKi9cbkBAIC00NTM5LDcgKzQ2MzIsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpXG4rXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZC1cdTAwM2VsYXN0KSlcbiBcdFx0bmQtXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XG4gXG4gXHRkZW50cnkgPSBsb29rdXBfZmFzdChuZCk7XG5AQCAtNDYwMiwxNiArNDY5NSwxMiBAQCBzdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRcdCAqL1xuIFx0fVxuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVClcbi1cdFx0aW5vZGVfbG9jayhkaXItXHUwMDNlZF9pbm9kZSk7XG4rXHRcdGlub2RlX2xvY2tfbmVzdGVkKGRpci1cdTAwM2VkX2lub2RlLCBJX01VVEVYX1BBUkVOVCk7XG4gXHRlbHNlXG4gXHRcdGlub2RlX2xvY2tfc2hhcmVkKGRpci1cdTAwM2VkX2lub2RlKTtcbitcbiBcdGRlbnRyeSA9IGxvb2t1cF9vcGVuKG5kLCBmaWxlLCBvcCwgZ290X3dyaXRlLCBcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xuLVx0aWYgKCFJU19FUlIoZGVudHJ5KSkge1xuLVx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpXG4tXHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpci1cdTAwM2VkX2lub2RlLCBkZW50cnkpO1xuLVx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRClcbi1cdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuLVx0fVxuK1xuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVClcbiBcdFx0aW5vZGVfdW5sb2NrKGRpci1cdTAwM2VkX2lub2RlKTtcbiBcdGVsc2VcbkBAIC00NjY5LDggKzQ3NTgsOSBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmICgob3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wpIFx1MDAyNlx1MDAyNiAhKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKSlcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbi1cdFx0aWYgKGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbitcdFx0aWYgKCEob3Blbl9mbGFnIFx1MDAyNiBPX0RJUkVDVE9SWSkgXHUwMDI2XHUwMDI2IGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbiBcdFx0XHRyZXR1cm4gLUVJU0RJUjtcbitcbiBcdFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2luX3N0aWNreShpZG1hcCwgbmQsXG4gXHRcdFx0XHRcdCAgICAgZF9iYWNraW5nX2lub2RlKG5kLVx1MDAzZXBhdGguZGVudHJ5KSk7XG4gXHRcdGlmICh1bmxpa2VseShlcnJvcikpXG5AQCAtNDk0Niw3ICs1MDM2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG4gXHQgKiBEbyB0aGUgZmluYWwgbG9va3VwLiAgU3VwcHJlc3MgJ2NyZWF0ZScgaWYgdGhlcmUgaXMgYSB0cmFpbGluZ1xuIFx0ICogJy8nLCBhbmQgYSBkaXJlY3Rvcnkgd2Fzbid0IHJlcXVlc3RlZC5cbiBcdCAqL1xuLVx0aWYgKGxhc3QubmFtZVtsYXN0Lmxlbl0gXHUwMDI2XHUwMDI2ICF3YW50X2RpcilcbitcdGlmICh0cmFpbGluZ19zbGFzaGVzKGxhc3QpIFx1MDAyNlx1MDAyNiAhd2FudF9kaXIpXG4gXHRcdGNyZWF0ZV9mbGFncyBcdTAwMjY9IH5MT09LVVBfQ1JFQVRFO1xuIFx0ZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC1cdTAwM2VkZW50cnksIFx1MDAyNmxhc3QsIHJldmFsX2ZsYWcgfCBjcmVhdGVfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUihkZW50cnkpKVxuQEAgLTUwNDEsMzIgKzUxMzEsMTcgQEAgc3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLFxuIFx0XHRwYXRoLVx1MDAzZWRlbnRyeSA9IGRpcjtcbiBcdFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbiBcbi1cdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUpO1xuK1x0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgbW9kZSwgLypjcmVhdGVfZGlyPSovIGZhbHNlKTtcbiBcdFx0aWYgKGNyZWF0ZV9lcnJvcilcbiBcdFx0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuIFxuLVx0XHQvKiBhdG9taWNfb3BlbiB3aWxsIGRwdXQoZGVudHJ5KSBvbiBlcnJvciAqL1xuLVx0XHRkZ2V0KG9yaWdfZGVudHJ5KTtcbiBcdFx0ZGVudHJ5ID0gYXRvbWljX29wZW4ocGF0aCwgZGVudHJ5LCBmaWxlLCBmbGFncywgbW9kZSk7XG4gXHRcdGVycm9yID0gUFRSX0VSUl9PUl9aRVJPKGRlbnRyeSk7XG4tXG4tXHRcdGlmIChJU19FUlIoZGVudHJ5KSlcbi1cdFx0XHQvKiBrZWVwIHRoZSBvcmlnaW5hbCAqL1xuK1x0XHRpZiAodW5saWtlbHkoZXJyb3IpKVxuIFx0XHRcdGRlbnRyeSA9IG9yaWdfZGVudHJ5O1xuLVx0XHRlbHNlXG4tXHRcdFx0LyogRHJvcCB0aGUgZXh0cmEgcmVmZXJlbmNlICovXG4tXHRcdFx0ZHB1dChvcmlnX2RlbnRyeSk7XG4tXG4gXHRcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFx1MDAyNlx1MDAyNiBlcnJvciA9PSAtRU5PRU5UKVxuIFx0XHRcdGVycm9yID0gY3JlYXRlX2Vycm9yO1xuIFxuLVx0XHRpZiAoIWVycm9yKSB7XG4tXHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxuLVx0XHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpci1cdTAwM2VkX2lub2RlLCBkZW50cnkpO1xuLVx0XHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuLVx0XHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbi1cdFx0fVxuLVxuIFx0XHRwYXRoLVx1MDAzZWRlbnRyeSA9IGRlbnRyeTtcbiBcbiBcdH0gZWxzZSB7XG5AQCAtNTIxOCw2ICs1MjkzLDM5IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkXG4gXHRyZXR1cm4gZmlsZW5hbWVfbWtub2RhdChBVF9GRENXRCwgbmFtZSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZVxuK3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbitcdFx0XHRcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcbit7XG4rXHRpbnQgZXJyb3I7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbitcdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfbWF4X2xpbmtzO1xuK1xuK1x0ZXJyb3IgPSAtRU1MSU5LO1xuK1x0aWYgKG1heF9saW5rcyBcdTAwMjZcdTAwMjYgZGlyLVx1MDAzZWlfbmxpbmsgXHUwMDNlPSBtYXhfbGlua3MpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0aWYgKElTX0VSUihkZSkpIHtcbitcdFx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXHRpZiAoZGUpIHtcbitcdFx0ZHB1dChkZW50cnkpO1xuK1x0XHRkZW50cnkgPSBkZTtcbitcdH1cbitcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcbitcdHJldHVybiBkZW50cnk7XG4rXG4rZXJyOlxuK1x0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuK31cbitcbiAvKipcbiAgKiB2ZnNfbWtkaXIgLSBjcmVhdGUgZGlyZWN0b3J5IHJldHVybmluZyBjb3JyZWN0IGRlbnRyeSBpZiBwb3NzaWJsZVxuICAqIEBpZG1hcDpcdFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuQEAgLTUyNDUsNyArNTM1Myw2IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRlbGVnYXRlZF9pbm9kZSlcbiB7XG4gXHRpbnQgZXJyb3I7XG4tXHR1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItXHUwMDNlaV9zYi1cdTAwM2VzX21heF9saW5rcztcbiBcdHN0cnVjdCBkZW50cnkgKmRlO1xuIFxuIFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2RlbnRyeShpZG1hcCwgZGlyLCBkZW50cnkpO1xuQEAgLTUyNjEsMjQgKzUzNjgsMTIgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRlcnJvciA9IC1FTUxJTks7XG4tXHRpZiAobWF4X2xpbmtzIFx1MDAyNlx1MDAyNiBkaXItXHUwMDNlaV9ubGluayBcdTAwM2U9IG1heF9saW5rcylcbi1cdFx0Z290byBlcnI7XG4tXG4tXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XG4tXHRpZiAoZXJyb3IpXG4rXHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcbitcdGlmIChJU19FUlIoZGUpKSB7XG4rXHRcdGVycm9yID0gUFRSX0VSUihkZSk7XG4gXHRcdGdvdG8gZXJyO1xuLVxuLVx0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuLVx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcbi1cdGlmIChJU19FUlIoZGUpKVxuLVx0XHRnb3RvIGVycjtcbi1cdGlmIChkZSkge1xuLVx0XHRkcHV0KGRlbnRyeSk7XG4tXHRcdGRlbnRyeSA9IGRlO1xuIFx0fVxuLVx0ZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpO1xuLVx0cmV0dXJuIGRlbnRyeTtcbitcdHJldHVybiBkZTtcbiBcbiBlcnI6XG4gXHRlbmRfY3JlYXRpbmcoZGVudHJ5KTtcbkBAIC01NTY1LDcgKzU2NjAsNyBAQCBpbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKVxuIFx0XHRnb3RvIGV4aXRfZHJvcF93cml0ZTtcbiBcbiBcdC8qIFdoeSBub3QgYmVmb3JlPyBCZWNhdXNlIHdlIHdhbnQgY29ycmVjdCBlcnJvciB2YWx1ZSAqL1xuLVx0aWYgKHVubGlrZWx5KGxhc3QubmFtZVtsYXN0Lmxlbl0pKSB7XG4rXHRpZiAodW5saWtlbHkodHJhaWxpbmdfc2xhc2hlcyhsYXN0KSkpIHtcbiBcdFx0aWYgKGRfaXNfZGlyKGRlbnRyeSkpXG4gXHRcdFx0ZXJyb3IgPSAtRUlTRElSO1xuIFx0XHRlbHNlXG5AQCAtNjE2NywxNiArNjI2MiwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSxcbiBcdGlmIChmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSB7XG4gXHRcdGlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHtcbiBcdFx0XHRlcnJvciA9IC1FTk9URElSO1xuLVx0XHRcdGlmIChuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4rXHRcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmV3X2xhc3QpKVxuIFx0XHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdFx0fVxuIFx0fVxuIFx0LyogdW5sZXNzIHRoZSBzb3VyY2UgaXMgYSBkaXJlY3RvcnkgdHJhaWxpbmcgc2xhc2hlcyBnaXZlIC1FTk9URElSICovXG4gXHRpZiAoIWRfaXNfZGlyKHJkLm9sZF9kZW50cnkpKSB7XG4gXHRcdGVycm9yID0gLUVOT1RESVI7XG4tXHRcdGlmIChvbGRfbGFzdC5uYW1lW29sZF9sYXN0Lmxlbl0pXG4rXHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG9sZF9sYXN0KSlcbiBcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuLVx0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgbmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKVxuK1x0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZXdfbGFzdCkpXG4gXHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmNcbmluZGV4IGM3YjcyM2MxODYyMGM5Li5jODE1ZDlhYTliNjlkYSAxMDA2NDRcbi0tLSBhL2ZzL25mcy9kaXIuY1xuKysrIGIvZnMvbmZzL2Rpci5jXG5AQCAtMjEyMSw2ICsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ZGZwcmludGsoVkZTLCBcIk5GUzogYXRvbWljX29wZW4oJXMvJWxsdSksICVwZFxcblwiLFxuIFx0XHRcdGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGRpci1cdTAwM2VpX2lubywgZGVudHJ5KTtcbiBcbitcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxuK1x0XHRvcGVuX2ZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRlcnIgPSBuZnNfY2hlY2tfZmxhZ3Mob3Blbl9mbGFncyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIzMTMsNiArMjMxNiw5IEBAIGludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgKi9cbiBcdGludCBlcnJvciA9IDA7XG4gXG4rXHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcbitcdFx0b3Blbl9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBORlNfU0VSVkVSKGRpciktXHUwMDNlbmFtZWxlbilcbiBcdFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uODdlODg2NGQ5NDgwODcgMTAwNjQ0XG4tLS0gYS9mcy9vcGVuLmNcbisrKyBiL2ZzL29wZW4uY1xuQEAgLTExOTAsMjkgKzExOTAsMzAgQEAgaW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG4gXHRpZiAoV0lMTF9DUkVBVEUoZmxhZ3MpKSB7XG4gXHRcdGlmIChob3ctXHUwMDNlbW9kZSBcdTAwMjYgflNfSUFMTFVHTylcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0b3AtXHUwMDNlbW9kZSA9IGhvdy1cdTAwM2Vtb2RlIHwgU19JRlJFRztcbitcdFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRcdG9wLVx1MDAzZW1vZGUgPSBob3ctXHUwMDNlbW9kZSB8IFNfSUZESVI7XG4rXHRcdGVsc2VcbitcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlICE9IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdG9wLVx1MDAzZW1vZGUgPSAwO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIEJsb2NrIGJ1Z3Mgd2hlcmUgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGNyZWF0ZWQgcmVndWxhciBmaWxlcy5cbi1cdCAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0c1xuLVx0ICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC5cbi1cdCAqL1xuLVx0aWYgKChmbGFncyBcdTAwMjYgKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpID09IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdC8qIE5vdyBoYW5kbGUgdGhlIGNyZWF0aXZlIGltcGxlbWVudGF0aW9uIG9mIE9fVE1QRklMRS4gKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgX19PX1RNUEZJTEUpIHtcbiBcdFx0LypcbiBcdFx0ICogSW4gb3JkZXIgdG8gZW5zdXJlIHByb2dyYW1zIGdldCBleHBsaWNpdCBlcnJvcnMgd2hlbiB0cnlpbmdcbiBcdFx0ICogdG8gdXNlIE9fVE1QRklMRSBvbiBvbGQga2VybmVscyB3ZSBlbmZvcmNlIHRoYXQgT19ESVJFQ1RPUllcbi1cdFx0ICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRS5cbitcdFx0ICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRSwgYnV0IHdpdGhvdXQgT19DUkVBVC4gVGhlXG4rXHRcdCAqIHJlYXNvbiBmb3IgZGlzYWxsb3dpbmcgT19DUkVBVHxPX1RNUEZJTEUgaXMgdGhhdFxuK1x0XHQgKiBPX0RJUkVDVE9SWXxPX0NSRUFUIHVzZWQgdG8gd29yayBhbmQgY3JlYXRlZCBhIHJlZ3VsYXIgZmlsZVxuK1x0XHQgKiBpZiBub3RoaW5nIGV4aXN0ZWQgYXQgdGhlIG9wZW4gcGF0aC4gSGVuY2UsIGFsbG93aW5nIHRoZVxuK1x0XHQgKiBjb21iaW5hdGlvbiB3b3VsZCBoYXZlIGNhdXNlZCBPX0NSRUFUfE9fVE1QRklMRSB0byBjcmVhdGUgYVxuK1x0XHQgKiByZWd1bGFyIChub24tdGVtcG9yYXJ5KSBmaWxlIG9uIG9sZCBrZXJuZWxzLCB3aGlsZSB0aGUgY2FsbGVyXG4rXHRcdCAqIHdvdWxkIGJlbGlldmUgdGhleSBjcmVhdGVkIGFuIGFjdHVhbCBPX1RNUEZJTEUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIShmbGFncyBcdTAwMjYgT19ESVJFQ1RPUlkpKVxuK1x0XHRpZiAoIShmbGFncyBcdTAwMjYgT19ESVJFQ1RPUlkpIHx8IChmbGFncyBcdTAwMjYgT19DUkVBVCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGlmICghKGFjY19tb2RlIFx1MDAyNiBNQVlfV1JJVEUpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEyNjksNiArMTI3MCwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcbiBcdG9wLVx1MDAzZWludGVudCA9IGZsYWdzIFx1MDAyNiBPX1BBVEggPyAwIDogTE9PS1VQX09QRU47XG4gXG4rXHQvKlxuK1x0ICogUmVxdWVzdGluZyB3cml0ZSBhY2Nlc3Mgb24gYSBkaXJlY3RvcnkgY2FuIG5ldmVyIHN1Y2NlZWQuIFJhdGhlclxuK1x0ICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXNcbitcdCAqIGFjdHVhbGx5IGEgZGlyZWN0b3J5ICgtRUlTRElSKSBvciBub3QgKC1FTk9URElSKSwgd2Ugc2hvcnQtY2lyY3VpdFxuK1x0ICogdG8gLUVOT1RESVIuXG4rXHQgKi9cbitcdGlmICgoZmxhZ3MgXHUwMDI2IE9fRElSRUNUT1JZKSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgX19PX1RNUEZJTEUpIFx1MDAyNlx1MDAyNiAoYWNjX21vZGUgXHUwMDI2IE1BWV9XUklURSkpXG4rXHRcdHJldHVybiAtRU5PVERJUjtcbitcbiBcdGlmIChmbGFncyBcdTAwMjYgT19DUkVBVCkge1xuIFx0XHRvcC1cdTAwM2VpbnRlbnQgfD0gTE9PS1VQX0NSRUFURTtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBPX0VYQ0wpIHtcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuaW5kZXggODhhNGExNzg3ZmYwNDcuLjc1YmY4NmNjMDYxMjJlIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuY1xuKysrIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuQEAgLTUzOCw2ICs1MzgsOSBAQCBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXG4gXHRpZiAodW5saWtlbHkoY2lmc19mb3JjZWRfc2h1dGRvd24oY2lmc19zYikpKVxuIFx0XHRyZXR1cm4gc21iX0VJTyhzbWJfZWlvX3RyYWNlX2ZvcmNlZF9zaHV0ZG93bik7XG4gXG4rXHRpZiAoT19JU19NS0RJUihvZmxhZ3MpKVxuK1x0XHRvZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdC8qXG4gXHQgKiBQb3NpeCBvcGVuIGlzIG9ubHkgY2FsbGVkIChhdCBsb29rdXAgdGltZSkgZm9yIGZpbGUgY3JlYXRlIG5vdy4gRm9yXG4gXHQgKiBvcGVucyAocmF0aGVyIHRoYW4gY3JlYXRlcyksIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgaWYgaXQgaXMgYSBmaWxlXG5kaWZmIC0tZ2l0IGEvZnMvdmJveHNmL2Rpci5jIGIvZnMvdmJveHNmL2Rpci5jXG5pbmRleCBjNWJkMzI3MWFhOTYxNi4uNzdhZTJmNjk2ZmQ0MzcgMTAwNjQ0XG4tLS0gYS9mcy92Ym94c2YvZGlyLmNcbisrKyBiL2ZzL3Zib3hzZi9kaXIuY1xuQEAgLTMxOCw2ICszMTgsOSBAQCBzdGF0aWMgaW50IHZib3hzZl9kaXJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHU2NCBoYW5kbGU7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmJveHNmX2Rpcl9sb29rdXAocGFyZW50LCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mY250bC5oIGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5pbmRleCA2YWQ2YjllN2EyMjZhZi4uNmI3NTI3N2JlNTU5ZGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZmNudGwuaFxuQEAgLTMwLDYgKzMwLDEyIEBAXG4gICovXG4gI2RlZmluZSBfX09fUkVHVUxBUlx0XHQoMSBcdTAwM2NcdTAwM2MgMzApXG4gXG4rI2RlZmluZSBPX01LRElSX01BU0tcdChPX0NSRUFUIHwgT19ESVJFQ1RPUlkpXG4rc3RhdGljIGlubGluZSBib29sIE9fSVNfTUtESVIodW5zaWduZWQgZmxhZ3MpXG4re1xuK1x0cmV0dXJuIChmbGFncyBcdTAwMjYgT19NS0RJUl9NQVNLKSA9PSBPX01LRElSX01BU0s7XG4rfVxuK1xuIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciB0aGUgaG93LVx1MDAzZXJlc29sdmUgYXJndW1lbnQ6ICovXG4gI2RlZmluZSBWQUxJRF9SRVNPTFZFX0ZMQUdTIFxcXG4gXHQoUkVTT0xWRV9OT19YREVWIHwgUkVTT0xWRV9OT19NQUdJQ0xJTktTIHwgUkVTT0xWRV9OT19TWU1MSU5LUyB8IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbmluZGV4IDY0YWMwZGZhNDZiN2VmLi5mMjU3YjNkZGI0Nzk0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbkBAIC0xLDQgKzEsNSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuK29wZW5fb19jcmVhdF9vX2RpclxuIGRub3RpZnlfdGVzdFxuIGRldnB0c19wdHNcbiBmY2xvZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbmluZGV4IDg1NDI3ZDdmMTliOWI1Li42NDVjNTJkMmQ0ZGViMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxuQEAgLTEsNyArMSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuIENGTEFHUyArPSAkKEtIRFJfSU5DTFVERVMpXG4tVEVTVF9HRU5fUFJPR1MgOj0gZGV2cHRzX3B0cyBmaWxlX3N0cmVzc29yIGFub25faW5vZGVfdGVzdCBrZXJuZnNfdGVzdCBmY2xvZ1xuK1RFU1RfR0VOX1BST0dTIDo9IG9wZW5fb19jcmVhdF9vX2RpciBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nXG4gVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgOj0gZG5vdGlmeV90ZXN0XG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuY1xuaW5kZXggNTUxYzRhMGYzOTVhMTIuLjU5M2E1MTM2ZTk5MTkyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuY1xuQEAgLTYsMTAgKzYsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9tb3VudC5oXHUwMDNlXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kZjNjZGJhZTJjODUyNFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmNcbkBAIC0wLDAgKzEsMTk3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IG9wZW5fb19jcmVhdF9vX2RpcihpbnQgZGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSxcbitcdFx0XHRcdCAgICAgbW9kZV90IG1vZGUsIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRyZXR1cm4gc3lzY2FsbChfX05SX29wZW5hdCwgZGZkLCBwYXRobmFtZSxcbitcdFx0ICAgICAgIGZsYWdzIHwgT19ESVJFQ1RPUlkgfCBPX0NSRUFULCBtb2RlKTtcbit9XG4rXG4rI2RlZmluZSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCBmbGFncykgKHtcdFxcXG4rXHRzdHJ1Y3Qgc3RhdCBfX3N0O1x0XHRcdFx0XHRcdFxcXG4rXHRpbnQgX19mZCA9IG9wZW5fb19jcmVhdF9vX2RpcihkZmQsIHBhdGhuYW1lLCBTX0lSV1hVLCBmbGFncyk7XHRcXFxuK1x0QVNTRVJUX0dFKF9fZmQsIDApO1x0XHRcdFx0XHRcdFxcXG4rXHRBU1NFUlRfRVEoZnN0YXQoX19mZCwgXHUwMDI2X19zdCksIDApO1x0XHRcdFx0XFxcbitcdEVYUEVDVF9UUlVFKFNfSVNESVIoX19zdC5zdF9tb2RlKSk7XHRcdFx0XHRcXFxuK1x0X19mZDtcdFx0XHRcdFx0XHRcdFx0XFxcbit9KVxuK1xuKyNkZWZpbmUgb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoZGZkLCBwYXRobmFtZSkgXFxcbitcdG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIDApXG4rXG4rRklYVFVSRShvcGVuX29fY3JlYXRfb19kaXIpIHtcbitcdGNoYXIgZGlycGF0aFtQQVRIX01BWF07XG4rXHRpbnQgZGZkO1xuK307XG4rXG4rRklYVFVSRV9TRVRVUChvcGVuX29fY3JlYXRfb19kaXIpXG4re1xuK1x0c3RyY3B5KHNlbGYtXHUwMDNlZGlycGF0aCwgXCIvdG1wL29wZW5fb19jcmVhdF9vX2Rpcl90ZXN0LlhYWFhYWFwiKTtcbitcdEFTU0VSVF9ORShta2R0ZW1wKHNlbGYtXHUwMDNlZGlycGF0aCksIE5VTEwpO1xuK1x0c2VsZi1cdTAwM2VkZmQgPSBvcGVuKHNlbGYtXHUwMDNlZGlycGF0aCwgT19ESVJFQ1RPUlkpO1xuK1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZGZkLCAwKTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpXG4re1xuK1x0Y2xvc2Uoc2VsZi1cdTAwM2VkZmQpO1xuK1x0cm1kaXIoc2VsZi1cdTAwM2VkaXJwYXRoKTtcbit9XG4rXG4rLyogRG9lcyBvcGVuX29fY3JlYXRfb19kaXIgcmV0dXJuIGEgZmQgYXQgYWxsPyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJldHVybnNfZmQpXG4re1xuK1x0aW50IGZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwibmV3ZGlyXCIpO1xuK1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwibmV3ZGlyXCIsIEFUX1JFTU9WRURJUiksIDApO1xuK31cbitcbisvKiBUaGUgZmQgbXVzdCByZWZlciB0byB0aGUgZGlyZWN0b3J5IHRoYXQgd2FzIGp1c3QgY3JlYXRlZC4gKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBmZF9pc19jcmVhdGVkX2Rpcilcbit7XG4rXHRpbnQgZmQ7XG4rXHRzdHJ1Y3Qgc3RhdCBzdF92aWFfZmQsIHN0X3ZpYV9wYXRoO1xuK1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbitcbitcdGZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwiY2hlY2tkaXJcIik7XG4rXG4rXHRBU1NFUlRfRVEoZnN0YXQoZmQsIFx1MDAyNnN0X3ZpYV9mZCksIDApO1xuK1xuK1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIiVzL2NoZWNrZGlyXCIsIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4rXHRBU1NFUlRfRVEoc3RhdChwYXRoLCBcdTAwMjZzdF92aWFfcGF0aCksIDApO1xuK1xuK1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9pbm8sIHN0X3ZpYV9wYXRoLnN0X2lubyk7XG4rXHRFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2Rldiwgc3RfdmlhX3BhdGguc3RfZGV2KTtcbitcbitcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuK1x0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcbit9XG4rXG4rLyogTWlzc2luZyBwYXJlbnQgY29tcG9uZW50IG11c3QgZmFpbCB3aXRoIEVOT0VOVC4gKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm9lbnRfbWlzc2luZ19wYXJlbnQpXG4re1xuK1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLVx1MDAzZWRmZCwgXCJub25leGlzdGVudC9jaGlsZFwiLCBTX0lSV1hVLCAwKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFTk9FTlQpO1xuK31cbitcbisvKiBBbiBpbnZhbGlkIGRmZCBtdXN0IGZhaWwgd2l0aCBFQkFERi4gKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlYmFkZilcbit7XG4rXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKC00MiwgXCJiYWRmZGlyXCIsIFNfSVJXWFUsIDApLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVCQURGKTtcbit9XG4rXG4rLyogQSBkZmQgdGhhdCBwb2ludHMgdG8gYSBmaWxlIChub3QgYSBkaXJlY3RvcnkpIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vdGRpcl9kZmQpXG4re1xuK1x0aW50IGZpbGVfZmQ7XG4rXG4rXHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcImZpbGVcIixcbitcdFx0XHQgT19DUkVBVCB8IE9fV1JPTkxZLCBTX0lSV1hVKTtcbitcdEFTU0VSVF9HRShmaWxlX2ZkLCAwKTtcbitcbitcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoZmlsZV9mZCwgXCJzdWJkaXJcIiwgU19JUldYVSwgMCksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4rXG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xuK1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcImZpbGVcIiwgMCksIDApO1xuK31cbitcbisvKlxuKyAqIE9fRVhDTCB0b2dldGhlciB3aXRoIE9fQ1JFQVR8T19ESVJFQ1RPUlkgbXVzdCBmYWlsIHdpdGggRUVYSVNUIHdoZW5cbisgKiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBvX2V4Y2xfZWV4aXN0KVxuK3tcbitcdGludCBmZDtcbitcbitcdGZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWRfZmxhZ3Moc2VsZi1cdTAwM2VkZmQsIFwiZXhjbGRpclwiLCBPX0VYQ0wpO1xuK1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXG4rXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXHUwMDNlZGZkLCBcImV4Y2xkaXJcIiwgU19JUldYVSwgT19FWENMKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFRVhJU1QpO1xuK1xuK1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcImV4Y2xkaXJcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogT19DUkVBVHxPX0RJUkVDVE9SWSBvbiBhIHBhdGggdGhhdCBhbHJlYWR5IGV4aXN0cyBhcyBhIHJlZ3VsYXIgZmlsZVxuKyAqIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuXG4rICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZXhpc3RpbmdfZmlsZV9lbm90ZGlyKVxuK3tcbitcdGludCBmaWxlX2ZkO1xuK1xuK1x0ZmlsZV9mZCA9IG9wZW5hdChzZWxmLVx1MDAzZWRmZCwgXCJyZWdmaWxlXCIsXG4rXHRcdFx0IE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XG4rXHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xuK1xuK1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLVx1MDAzZWRmZCwgXCJyZWdmaWxlXCIsIFNfSVJXWFUsIDApLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xuK1xuK1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcInJlZ2ZpbGVcIiwgMCksIDApO1xuK31cbitcbisvKlxuKyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgY29tYmluZWQgd2l0aCBhIHdyaXRhYmxlIGFjY2VzcyBtb2RlIG11c3QgYmVcbisgKiByZWplY3RlZDogYSBkaXJlY3RvcnkgY2Fubm90IGJlIG9wZW5lZCBmb3Igd3JpdGluZy5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZWplY3RzX3dyaXRhYmxlX2FjY19tb2RlKVxuK3tcbitcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cdTAwM2VkZmQsIFwicmR3cmRpclwiLCBTX0lSV1hVLCBPX1JEV1IpLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xuK1x0LyogQ2xlYW4gdXAgaWYgdGhlIGtlcm5lbCBjcmVhdGVkIHRoZSBkaXJlY3RvcnkgYW55d2F5LiAqL1xuK1x0dW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwicmR3cmRpclwiLCBBVF9SRU1PVkVESVIpO1xuK31cbitcbisvKlxuKyAqIG9wZW5hdChPX0NSRUFUKSB3aXRoIGEgdHJhaWxpbmcgc2xhc2ggYnV0IHdpdGhvdXQgT19ESVJFQ1RPUllcbisgKiBtdXN0IGZhaWwgd2l0aCBFSVNESVIgYW5kIG11c3Qgbm90IGNyZWF0ZSBhbnl0aGluZyBhdCB0aGUgcGF0aC5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCB0cmFpbGluZ19zbGFzaF9ub19vX2Rpcilcbit7XG4rXHRpbnQgZmQ7XG4rXHRzdHJ1Y3Qgc3RhdCBzdDtcbitcbitcdGZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcInRyYWlsaW5nL1wiLCBPX0NSRUFUIHwgT19XUk9OTFksIFNfSVJXWFUpO1xuK1x0RVhQRUNUX0VRKGZkLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVJU0RJUik7XG4rXG4rXHRFWFBFQ1RfRVEoZnN0YXRhdChzZWxmLVx1MDAzZWRmZCwgXCJ0cmFpbGluZ1wiLCBcdTAwMjZzdCwgMCksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbitcbitcdC8qIEJlc3QtZWZmb3J0IGNsZWFudXAgaW4gY2FzZSB0aGUga2VybmVsIGxlZnQgYSBmaWxlIGJlaGluZC4gKi9cbitcdGlmIChmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGZkKTtcbitcdHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcInRyYWlsaW5nXCIsIDApO1xuK31cbitcbisvKlxuKyAqIFRoZSByZXR1cm5lZCBmZCBtdXN0IGJlIHVzYWJsZSBhcyBhIGRmZCBmb3IgZnVydGhlciAqYXQoKSBjYWxscy5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBmZF91c2FibGVfYXNfZGZkKVxuK3tcbitcdGludCBwYXJlbnRfZmQsIGNoaWxkX2ZkO1xuK1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbitcbitcdHBhcmVudF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcInBhcmVudFwiKTtcbitcdGNoaWxkX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQocGFyZW50X2ZkLCBcImNoaWxkXCIpO1xuK1xuK1x0RVhQRUNUX0VRKGNsb3NlKGNoaWxkX2ZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEoY2xvc2UocGFyZW50X2ZkKSwgMCk7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvcGFyZW50L2NoaWxkXCIsIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4rXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuK1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIiVzL3BhcmVudFwiLCBzZWxmLVx1MDAzZWRpcnBhdGgpO1xuK1x0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcbit9XG4rXG4rVEVTVF9IQVJORVNTX01BSU5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQyOjE3LjU5MjIwMDgxMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NTMzMzYzNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBpbnRlcmFjdHMgd2l0aCBgb3BlbmF0KClgLiBCZWZvcmUsIGl0IHNlZW1zIGxpa2UgdGhpcyBjb21iaW5hdGlvbiBlaXRoZXIgZmFpbGVkIG91dHJpZ2h0IG9yLCBpbiBzb21lIGNhc2VzLCBjcmVhdGVkIGEgcmVndWxhciBmaWxlLiBOb3csIGl0IGxvb2tzIGxpa2Ugd2UncmUgYWN0dWFsbHkgKmVuYWJsaW5nKiB0aGUgY3JlYXRpb24gb2YgZGlyZWN0b3JpZXMgdGhyb3VnaCB0aGlzIGZsYWcgY29tYmluYXRpb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgYE9fSVNfTUtESVIoZmxhZ3MpYCBjaGVjay4gIEl0J3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQsIHRvdWNoaW5nIGNvcmUgVkZTIGNvZGUgKGBmcy9uYW1laS5jYCwgYGZzL29wZW4uY2ApIGFuZCB0aGVuIHByb3BhZ2F0aW5nIG91dCB0byBhIGJ1bmNoIG9mIGRpZmZlcmVudCBmaWxlc3lzdGVtcy5cblxuSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgY2hhbmdlZCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGFjdCBpcyBoZXJlLiBTaW5jZSB0aGlzIGhpdHMgdGhlIFZGUyBsZXZlbCwgaXQgaXMgYSBjcnVjaWFsIGFyZWEgZm9yIGZ1enppbmcuIFRoZSBmdW5jdGlvbmFsIHNoaWZ0IGlzIHRvIGFsbG93IGRpcmVjdG9yeSBjcmVhdGlvbiB3aXRoIGBvcGVuYXQoKWAgYW5kIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgLCB3aGljaCBpcyBlaXRoZXIgYSBuZXcgZmVhdHVyZSBvciBhIGZpeCB0byBwcmlvciBiZWhhdmlvci5cblxuSSdtIG1ha2luZyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGFzIHRoZSBrZXkgcG9pbnRzIG9mIGZvY3VzLiBGcm9tIHRoZSBjb2RlLCBJIHNlZTogYHZmc19ta2Rpcl9ub19wZXJtYCwgYG1heV9vX2NyZWF0ZWAsIGBhdG9taWNfb3BlbmAsIGBsb29rdXBfb3BlbmAsIGBsb29rdXBfZmFzdF9mb3Jfb3BlbmAsIGBvcGVuX2xhc3RfbG9va3Vwc2AsIGBkb19vcGVuYCwgYGRlbnRyeV9jcmVhdGVgLCBgdmZzX21rZGlyYCwgYW5kIGBidWlsZF9vcGVuX2ZsYWdzYC4gVGhlIGF0b21pYyBvcGVuIG1vZGlmaWNhdGlvbnMgaW4gdGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgY29kZSBhcmUgaW1wb3J0YW50LCB0b286IGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsYCwgYGNlcGhfYXRvbWljX29wZW5gLCBgZnVzZV9hdG9taWNfb3BlbmAsIGBnZnMyX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5fdjIzYCwgYGNpZnNfYXRvbWljX29wZW5gLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLlxuXG5TaW5jZSBpdCB0b3VjaGVzIHRoZSBWRlMsIEkgZG9uJ3QgbmVjZXNzYXJpbHkgbmVlZCBhbnkgZXhvdGljIGNvbmZpZ3MsIGJ1dCBJIHNob3VsZCBlbmFibGUgc3BlY2lmaWMgZmlsZXN5c3RlbXMuIEknbSBnb2luZyB0byBsaXN0IGBWQk9YU0ZfRlNgLCBgR0ZTMl9GU2AsIGBDRVBIX0ZTYCwgYW5kIGA5UF9GU2AgdG8gbWFrZSBzdXJlIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBjb3ZlcmVkLlxuXG5Ob3csIEknbSBnb2luZyB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbnMgd2l0aGluIGBmcy9uYW1laS5jYC4gSSBoYXZlIGB2ZnNfbWtkaXJfbm9fcGVybWAsIGBtYXlfb19jcmVhdGVgLCBgb19jcmVhdGVfbW9kZWAsIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYW5kIGBidWlsZF9vcGVuX2ZsYWdzYCB0byBsb29rIGF0LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYHZmc19ta2Rpcl9ub19wZXJtYCBpcyBhY3R1YWxseSB1c2VkLiBBaCwgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWMgaW5saW5lYCBpbiBgZnMvbmFtZWkuY2AuICBIYW5nIG9uLCBpdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCBpbiB0d28gcGxhY2VzIGluIGBmcy9uYW1laS5jYD8gT2theSwgaXQncyBkZWNsYXJlZCBhbmQgZGVmaW5lZC5cbmBgYGNcbitzdGF0aWMgaW5saW5lXG4rc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuK1x0XHRcdFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKVxuYGBgXG5MZXQgbWUgZXhhbWluZSBhcm91bmQgbGluZSA1MjkzIGFuZCA0NDQwIGluIGBmcy9uYW1laS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDI6MzIuMTI1NTY2MzA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTc4NjYzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX21rZGlyX25vX3Blcm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTQ0NTQ9c3RhdGljIGlubGluZVxcbmZzL25hbWVpLmM6NDQ1NTpzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxcbmZzL25hbWVpLmMtNDQ1Ni1cXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxcbi0tXFxuZnMvbmFtZWkuYz00NDczPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9uYW1laS5jLTQ1OTgtXFx0aWYgKGNyZWF0ZV9kaXIpIHtcXG5mcy9uYW1laS5jOjQ1OTk6XFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxcbmZzL25hbWVpLmMtNDYwMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcXG4tLVxcbmZzL25hbWVpLmM9NTI5Nj1zdGF0aWMgaW5saW5lXFxuZnMvbmFtZWkuYzo1Mjk3OnN0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9uYW1laS5jLTUyOTgtXFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvbmFtZWkuYz01MzUxPXN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9uYW1laS5jLTUzNzAtXFxuZnMvbmFtZWkuYzo1MzcxOlxcdGRlID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpO1xcbmZzL25hbWVpLmMtNTM3Mi1cXHRpZiAoSVNfRVJSKGRlKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0MjozMy41NDM0MzgzNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjUzOTI5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBGaWxlc3lzdGVtIFBlcm1pc3Npb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIGB2ZnNfbWtkaXJfbm9fcGVybWAgaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIOKAkyBnb3QgaXQuIFRoYXQgbWVhbnMgaXQncyBsaWtlbHkgb3B0aW1pemVkIGZvciBhIHNwZWNpZmljIGxvY2F0aW9uIHdpdGhpbiB0aGUgY29kZSBhbmQgcHJvYmFibHkgZGVhbHMgd2l0aCBhIG1vcmUgZ3JhbnVsYXIgY2hlY2suIE5vdywgd2hlcmUgZG9lcyB0aGlzIGZpdCB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlPyBXaGF0IGFib3V0IGBsb29rdXBfb3BlbmA/IFRoYXQncyB0aGUgZnVuY3Rpb24gdGhhdCdzIHJlYWxseSBnb2luZyB0byBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIGlzbid0IGl0PyBUaGF0J3MgdGhlIGxvdy1sZXZlbCBwaWVjZSB0aGF0IGRldGVybWluZXMgaWYgSSBjYW4gKmV2ZW4qIHRvdWNoIHRoZSBkaXJlY3RvcnkgaW4gdGhlIGZpcnN0IHBsYWNlLCBvciBjcmVhdGUgYSBuZXcgZmlsZSB3aXRoIHRoZSBuYW1lIEkndmUgc3VnZ2VzdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBsb3dlciBsZXZlbCBmdW5jdGlvbnMgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIHBlcm1pc3Npb25zIGZsb3chXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODY3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDI6MzYuNjY4ODM0MDI2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzQ0NzAwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb29rdXBfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uYW1laS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25hbWVpLmM9NDQ1NT1zdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxcbi0tXFxuZnMvbmFtZWkuYy00NDcyLSAqL1xcbmZzL25hbWVpLmM6NDQ3MzpzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbmZzL25hbWVpLmMtNDQ3NC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcCxcXG4tLVxcbmZzL25hbWVpLmM9NDY1Mz1zdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTQ2OTItXFx0XFx0ICogZG8gX25vdF8gZmFpbCB5ZXQgLSB3ZSBtaWdodCBub3QgbmVlZCB0aGF0IG9yIGZhaWwgd2l0aFxcbmZzL25hbWVpLmM6NDY5MzpcXHRcXHQgKiBhIGRpZmZlcmVudCBlcnJvcjsgbGV0IGxvb2t1cF9vcGVuKCkgZGVjaWRlOyB3ZSdsbCBiZVxcbmZzL25hbWVpLmMtNDY5NC1cXHRcXHQgKiBkcm9wcGluZyB0aGlzIG9uZSBhbnl3YXkuXFxuLS1cXG5mcy9uYW1laS5jLTQ3MDEtXFxuZnMvbmFtZWkuYzo0NzAyOlxcdGRlbnRyeSA9IGxvb2t1cF9vcGVuKG5kLCBmaWxlLCBvcCwgZ290X3dyaXRlLCBcXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcXG5mcy9uYW1laS5jLTQ3MDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQyOjM2LjkzNjI4NjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYxNjE4MDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIEZpbGUgT3BlbmluZyBGdW5jdGlvbnMqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBmaWxlIG9wZW5pbmcsIGFuZCB0aGVyZSdzIGEgc3BlY2lmaWMgcGF0dGVybiBJJ20gc3BvdHRpbmcuIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGFuZCBgZG9fb3BlbmAgYXJlIGFsbCAqc3RhdGljKiwgbWVhbmluZyB0aGV5J3JlIGludGVybmFsIHRvIHRoZWlyIG1vZHVsZSBhbmQgbm90IGRpcmVjdGx5IGV4cG9zZWQgZm9yIGV4dGVybmFsIHVzZS4gVGhhdCBzdWdnZXN0cyB0aGVzZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIG9mIHRoZSBvcGVuaW5nIHByb2Nlc3MsIHByb2JhYmx5IGhhbmRsaW5nIHRoZSBsb3dlci1sZXZlbCBkZXRhaWxzLiBgYnVpbGRfb3Blbl9mbGFnc2AsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyAqaW5saW5lKi4gVGhpcyB0ZWxscyBtZSB0aGF0IGl0J3MgYSB2ZXJ5IHNpbXBsZSBmdW5jdGlvbiBkZXNpZ25lZCBmb3IgcGVyZm9ybWFuY2UsIGxpa2VseSBpbmxpbmluZyB0aGUgZmxhZyBjb25zdHJ1Y3Rpb24gZGlyZWN0bHkgaW50byB0aGUgY2FsbGluZyBjb2RlIHRvIGF2b2lkIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQuIEl0IGlzIHByb2JhYmx5IGltcG9ydGFudCBmb3Igb3B0aW1pemluZyB0aGUgZmlsZSBvcGVuIHN5c3RlbSBjYWxscy4gVGhlbiwgd2UgaGF2ZSBgdmZzX21rZGlyYCBhbmQgYHZmc19jcmVhdGVgLCB3aGljaCBhcmUgKmV4cG9ydGVkKi4gVGhlc2UgYXJlIHRoZSBhY3R1YWwgVmlydHVhbCBGaWxlIFN5c3RlbSBlbnRyeSBwb2ludHMgZm9yIGNyZWF0aW5nIGRpcmVjdG9yaWVzIGFuZCBmaWxlcywgbWVhbmluZyB0aGVzZSBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMgb3IgZXZlbiB1c2VyIHNwYWNlLiBUaGlzIG1ha2VzIHNlbnNlOyB0aGV5IG5lZWQgdG8gYmUgYWNjZXNzaWJsZSB0byBhIGJyb2FkZXIgcGFydCBvZiB0aGUgc3lzdGVtLiBGaW5hbGx5LCBgbWF5X29fY3JlYXRlYCBpcyAqc3RhdGljKiwgaW5kaWNhdGluZyBhIHBvdGVudGlhbCBpbnRlcm5hbCBjaGVjayBvciB2YWxpZGF0aW9uIGZ1bmN0aW9uIHVzZWQgYmVmb3JlIGFsbG93aW5nIGEgZmlsZSB0byBiZSBjcmVhdGVkLlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gaGVhZCBvdmVyIHRvIGBmcy9vcGVuLmNgIG5vdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYnVpbGRfb3Blbl9mbGFnc2AgaXMgZG9pbmc7IGl0cyB1c2FnZSBjb3VsZCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBmbG93IG9mIGZpbGUgb3BlbmluZy4gVGhpcyB3aWxsIHNoZWQgbGlnaHQgb24gaG93IHRoZSBvcGVuIGZsYWdzIGFyZSBhY3R1YWxseSBpbnRlcnByZXRlZCBhbmQgdHJhbnNsYXRlZCBpbnRvIHRoZSBzeXN0ZW0gY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzkyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDI6NDEuMTk3OTA2NDM2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjI3NzA3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJidWlsZF9vcGVuX2ZsYWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29wZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vcGVuLmM9MTEzNj1pbmxpbmUgc3RydWN0IG9wZW5faG93IGJ1aWxkX29wZW5faG93KGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvb3Blbi5jLTExNTEtXFxuZnMvb3Blbi5jOjExNTI6aW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXFxuZnMvb3Blbi5jLTExNTMte1xcbi0tXFxuZnMvb3Blbi5jLTExNzYtXFx0ICogT2xkZXIgc3lzY2FsbHMgaW1wbGljaXRseSBjbGVhciBhbGwgb2YgdGhlIGludmFsaWQgZmxhZ3Mgb3IgYXJndW1lbnRcXG5mcy9vcGVuLmM6MTE3NzpcXHQgKiB2YWx1ZXMgYmVmb3JlIGNhbGxpbmcgYnVpbGRfb3Blbl9mbGFncygpLCBidXQgb3BlbmF0MigyKSBjaGVja3MgYWxsXFxuZnMvb3Blbi5jLTExNzgtXFx0ICogb2YgaXRzIGFyZ3VtZW50cy5cXG4tLVxcbmZzL29wZW4uYz0xMzI5PXN0cnVjdCBmaWxlICpmaWxlX29wZW5fbmFtZShzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvb3Blbi5jLTEzMzItXFx0c3RydWN0IG9wZW5faG93IGhvdyA9IGJ1aWxkX29wZW5faG93KGZsYWdzLCBtb2RlKTtcXG5mcy9vcGVuLmM6MTMzMzpcXHRpbnQgZXJyID0gYnVpbGRfb3Blbl9mbGFncyhcXHUwMDI2aG93LCBcXHUwMDI2b3ApO1xcbmZzL29wZW4uYy0xMzM0LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9vcGVuLmM9MTM1Nz1zdHJ1Y3QgZmlsZSAqZmlsZV9vcGVuX3Jvb3QoY29uc3Qgc3RydWN0IHBhdGggKnJvb3QsXFxuLS1cXG5mcy9vcGVuLmMtMTM2MS1cXHRzdHJ1Y3Qgb3Blbl9ob3cgaG93ID0gYnVpbGRfb3Blbl9ob3coZmxhZ3MsIG1vZGUpO1xcbmZzL29wZW4uYzoxMzYyOlxcdGludCBlcnIgPSBidWlsZF9vcGVuX2ZsYWdzKFxcdTAwMjZob3csIFxcdTAwMjZvcCk7XFxuZnMvb3Blbi5jLTEzNjMtXFx0aWYgKGVycilcXG4tLVxcbmZzL29wZW4uYz0xMzY5PXN0YXRpYyBpbnQgZG9fc3lzX29wZW5hdDIoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLFxcbi0tXFxuZnMvb3Blbi5jLTEzNzItXFx0c3RydWN0IG9wZW5fZmxhZ3Mgb3A7XFxuZnMvb3Blbi5jOjEzNzM6XFx0aW50IGVyciA9IGJ1aWxkX29wZW5fZmxhZ3MoaG93LCBcXHUwMDI2b3ApO1xcbmZzL29wZW4uYy0xMzc0LVxcdGlmICh1bmxpa2VseShlcnIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0Mjo0MS4zMzQxOTIwNjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTI0MDEwODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgS2VybmVsIEV4cGxvcmF0aW9uKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGlzIGZpbGUgb3BlbmluZyBhbmQgY3JlYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRoIHRocm91Z2ggdGhlIGtlcm5lbC4gTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIHJpZ2h0IG5vdyBhcmUgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYGRvX3N5c19vcGVuYXQyYCwgYGZpbGVfb3Blbl9uYW1lYCwgYW5kIGBmaWxlX29wZW5fcm9vdGAuICBgZG9fc3lzX29wZW5hdDJgIGZlZWxzIGxpa2UgYSBwYXJ0aWN1bGFybHkgZ29vZCBlbnRyeSBwb2ludCwgc28gSSdsbCBjb25jZW50cmF0ZSBvbiB0aGF0IGZvciB0aGUgbW9tZW50LiBJIHNob3VsZCBhbHNvIGNoZWNrIGl0cyByZWxhdGVkIGZ1bmN0aW9ucy5cblxuSSBrbm93IHRoYXQgYGxvb2t1cF9vcGVuYCBhbmQgYGF0b21pY19vcGVuYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGZzL25hbWVpLmNgLCBzbyBJIHdvbid0IGJlIGFibGUgdG8gY2FsbCB0aGVtIGRpcmVjdGx5LiBJIGNvdWxkIGxpc3QgdGhlbSwgYnV0IGl0IG1pZ2h0IGJlIG1vcmUgdXNlZnVsIHRvIGxpc3QgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVtLCBzdWNoIGFzIGBwYXRoX29wZW5hdGAgb3IgYGRvX2ZpbHBfb3BlbmAuICBTbywgSSBzaG91bGQgcmVhbGx5IGRpZyBpbnRvIGBmcy9uYW1laS5jYCBhbmQgbG9vayBmb3IgY2FsbHMgdG8gdGhvc2UsIHNwZWNpZmljYWxseSBgZG9fZmlscF9vcGVuYCBvciBgcGF0aF9vcGVuYXRgLiBJJ2xsIHNlZSB3aGVyZSB0aG9zZSBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDI6NDYuNDU4MjA1Mzg0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjgzOTkyMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGF0aF9vcGVuYXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTQ5MTc9c3RhdGljIGludCBkb19vX3BhdGgoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL25hbWVpLmMtNDkyOC1cXG5mcy9uYW1laS5jOjQ5Mjk6c3RhdGljIHN0cnVjdCBmaWxlICpwYXRoX29wZW5hdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG5mcy9uYW1laS5jLTQ5MzAtXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG9wZW5fZmxhZ3MgKm9wLCB1bnNpZ25lZCBmbGFncylcXG4tLVxcbmZzL25hbWVpLmM9NDk2OD1zdHJ1Y3QgZmlsZSAqZG9fZmlsZV9vcGVuKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqcGF0aG5hbWUsXFxuLS1cXG5mcy9uYW1laS5jLTQ5NzctXFx0c2V0X25hbWVpZGF0YShcXHUwMDI2bmQsIGRmZCwgcGF0aG5hbWUsIE5VTEwpO1xcbmZzL25hbWVpLmM6NDk3ODpcXHRmaWxwID0gcGF0aF9vcGVuYXQoXFx1MDAyNm5kLCBvcCwgZmxhZ3MgfCBMT09LVVBfUkNVKTtcXG5mcy9uYW1laS5jLTQ5NzktXFx0aWYgKHVubGlrZWx5KGZpbHAgPT0gRVJSX1BUUigtRUNISUxEKSkpXFxuZnMvbmFtZWkuYzo0OTgwOlxcdFxcdGZpbHAgPSBwYXRoX29wZW5hdChcXHUwMDI2bmQsIG9wLCBmbGFncyk7XFxuZnMvbmFtZWkuYy00OTgxLVxcdGlmICh1bmxpa2VseShmaWxwID09IEVSUl9QVFIoLUVTVEFMRSkpKVxcbmZzL25hbWVpLmM6NDk4MjpcXHRcXHRmaWxwID0gcGF0aF9vcGVuYXQoXFx1MDAyNm5kLCBvcCwgZmxhZ3MgfCBMT09LVVBfUkVWQUwpO1xcbmZzL25hbWVpLmMtNDk4My1cXHRyZXN0b3JlX25hbWVpZGF0YSgpO1xcbi0tXFxuZnMvbmFtZWkuYz00OTg3PXN0cnVjdCBmaWxlICpkb19maWxlX29wZW5fcm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCxcXG4tLVxcbmZzL25hbWVpLmMtNTAwMS1cXHRzZXRfbmFtZWlkYXRhKFxcdTAwMjZuZCwgLTEsIGZpbGVuYW1lLCByb290KTtcXG5mcy9uYW1laS5jOjUwMDI6XFx0ZmlsZSA9IHBhdGhfb3BlbmF0KFxcdTAwMjZuZCwgb3AsIGZsYWdzIHwgTE9PS1VQX1JDVSk7XFxuZnMvbmFtZWkuYy01MDAzLVxcdGlmICh1bmxpa2VseShmaWxlID09IEVSUl9QVFIoLUVDSElMRCkpKVxcbmZzL25hbWVpLmM6NTAwNDpcXHRcXHRmaWxlID0gcGF0aF9vcGVuYXQoXFx1MDAyNm5kLCBvcCwgZmxhZ3MpO1xcbmZzL25hbWVpLmMtNTAwNS1cXHRpZiAodW5saWtlbHkoZmlsZSA9PSBFUlJfUFRSKC1FU1RBTEUpKSlcXG5mcy9uYW1laS5jOjUwMDY6XFx0XFx0ZmlsZSA9IHBhdGhfb3BlbmF0KFxcdTAwMjZuZCwgb3AsIGZsYWdzIHwgTE9PS1VQX1JFVkFMKTtcXG5mcy9uYW1laS5jLTUwMDctXFx0cmVzdG9yZV9uYW1laWRhdGEoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDI6NDYuNzg2NjE4ODUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjM4MzYzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipGb2N1c2luZyBpbiBvbiBGaWxlc3lzdGVtIENyZWF0aW9uIGFuZCBBY2Nlc3MqKlxuXG5BbHJpZ2h0LCBJJ20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29yZSBzeXN0ZW0gY2FsbHMgcmVsYXRlZCB0byBmaWxlIGNyZWF0aW9uIGFuZCBkaXJlY3Rvcnkgb3BlcmF0aW9ucywgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGtlcm5lbCBpcyBoYW5kbGluZyBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbSBjYWxscyBhbmQgYW55IHJlbGF0ZWQgYWJzdHJhY3Rpb25zLiBMZXQncyBzZWUuLi5JIHRoaW5rIGBkb19zeXNfb3BlbmF0MmAgaXMgYSBncmVhdCBwb2ludCBvZiBmb2N1cyBoZXJlLiBUaGF0IHNob3VsZCBhbGxvdyBtZSB0byBnbyBvdmVyIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBvZiBvcGVuYXQyIGFuZCBzZWUgaWYgaXQncyB0aGUgcmlnaHQgc3ltYm9sIHRvIHN0YXJ0IHdpdGguIGBwYXRoX29wZW5hdGAgaXMgYW5vdGhlciB2ZXJ5IGxpa2VseSBjYW5kaWRhdGUgZm9yIGludmVzdGlnYXRpb24uIFRoYXQgaXMgYSBzb2xpZCBqdW1waW5nLW9mZiBwb2ludCB0b28uIExldCdzIG5vdCBmb3JnZXQgdGhlIGJhc2ljczogYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYW5kIGBkZW50cnlfY3JlYXRlYCBhcmUgYWxsIGNydWNpYWwgdG8gdW5kZXJzdGFuZC4gVGhvc2Ugd2lsbCBhbGxvdyBtZSB0byB0cmFjayB0aGUgbW9yZSBiYXNpYyBwYXJ0cyBvZiB0aGUgc3lzdGVtIGNhbGwuIE5vdyBJIG5lZWQgdG8gc2VlIGlmIGEgZmlsZSBzeXN0ZW0gdGhhdCBtaWdodCBiZSBydW5uaW5nIG9uIGEgbmV0d29ya2VkIGRyaXZlIG1heSBiZSBoYXZpbmcgaXNzdWVzLCBzbyBJIHdpbGwgY2hlY2sgdGhlIGBmcy9zbWIvY2xpZW50L2Rpci5jYCBmaWxlIGFuZCBsb29rIGZvciB0aGUgYGNpZnNfYXRvbWljX29wZW5gIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM0MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQyOjUwLjcxMDQ1ODE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjY5NTIzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaWZzX2F0b21pY19vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvZGlyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc21iL2NsaWVudC9kaXIuYz00ODk9c3RhdGljIGludCBjaWZzX2RvX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jLTUxOS0gKi9cXG5mcy9zbWIvY2xpZW50L2Rpci5jOjUyMDppbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXFxuZnMvc21iL2NsaWVudC9kaXIuYy01MjEtXFx0XFx0ICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IG9mbGFncywgdW1vZGVfdCBtb2RlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0Mjo1MC43NzMxNTk5MDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzMjM5NDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBGaWxlIFN5c3RlbSBMYW5kc2NhcGU6IFVuY292ZXJpbmcgYGNpZnNfYXRvbWljX29wZW5gJ3MgT3JpZ2lucyoqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgY2lmc19hdG9taWNfb3BlbmAuIFRoZSBjbHVlIGlzIHRoYXQgaXQncyBleHBvcnRlZCBvciB1c2VkIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZXhwbG9yZSBvdGhlciBmaWxlIHN5c3RlbXMgdGhhdCBhbHNvIHV0aWxpemUgc2ltaWxhciBhdG9taWMgb3BlbiBzZW1hbnRpY3MuIEknbSBnb2luZyB0byBjaGVjayB0aGUgYGZzLzlwL3Zmc19pbm9kZS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb3IgdXNhZ2Ugb2YgYHY5ZnNfdmZzX2F0b21pY19vcGVuYC4gSXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgaGVyZSBiZWNhdXNlIHRoZSA5cCBmaWxlc3lzdGVtLCB3aXRoIGl0cyBzaW1pbGFyIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtIGFwcHJvYWNoLCBtaWdodCBvZmZlciBpbnNpZ2h0cyBpbnRvIGhvdyBhdG9taWMgb3BlbiBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGluIHRoaXMgdHlwZSBvZiBlbnZpcm9ubWVudC4gVW5kZXJzdGFuZGluZyB0aGUgYDlwYCBpbXBsZW1lbnRhdGlvbiBjb3VsZCByZXZlYWwgY29tbW9uIHBhdHRlcm5zIG9yIHByb3ZpZGUgYSB1c2VmdWwgcG9pbnQgb2YgY29tcGFyaXNvbiB0byBpbGx1bWluYXRlIGhvdyBgY2lmc19hdG9taWNfb3BlbmAgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4NDksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0Mjo1NC43MDU1NTY1MzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDYxOTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2OWZzX3Zmc19hdG9taWNfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy85cC92ZnNfaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy85cC92ZnNfaW5vZGUuYz01Nzk9djlmc19jcmVhdGUoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYy02NDktICpcXG5mcy85cC92ZnNfaW5vZGUuYzo2NTA6ICogb3BlbiguLiwgT19DUkVBVCkgaXMgaGFuZGxlZCBpbiB2OWZzX3Zmc19hdG9taWNfb3BlbigpLiAgVGhpcyBpcyBvbmx5IGNhbGxlZFxcbmZzLzlwL3Zmc19pbm9kZS5jLTY1MS0gKiBmb3IgbWtub2QoMikuXFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYz03Njg9c3RhdGljIGludFxcbmZzLzlwL3Zmc19pbm9kZS5jOjc2OTp2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzLzlwL3Zmc19pbm9kZS5jLTc3MC1cXHRcXHQgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jPTEzNjk9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnNfZG90dSA9IHtcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzNzEtXFx0Lmxvb2t1cCA9IHY5ZnNfdmZzX2xvb2t1cCxcXG5mcy85cC92ZnNfaW5vZGUuYzoxMzcyOlxcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuLFxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzNzMtXFx0LnN5bWxpbmsgPSB2OWZzX3Zmc19zeW1saW5rLFxcbi0tXFxuZnMvOXAvdmZzX2lub2RlLmM9MTM4ND1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzODYtXFx0Lmxvb2t1cCA9IHY5ZnNfdmZzX2xvb2t1cCxcXG5mcy85cC92ZnNfaW5vZGUuYzoxMzg3OlxcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuLFxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzODgtXFx0LnVubGluayA9IHY5ZnNfdmZzX3VubGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDI6NTQuODEwMTgwNjIxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MDM4MDg0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVmaW5lbWVudCBvZiBGb2N1cyBTeW1ib2xzIGZvciBGaWxlIFN5c3RlbSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgY3JpdGljYWwgc3ltYm9scyB0byBmb2N1cyBvbiBmb3IgYSBkZWVwIGRpdmUuIEluaXRpYWxseSwgSSBoYWQgYSBsaXN0OiBgcGF0aF9vcGVuYXRgLCBgZG9fc3lzX29wZW5hdDJgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBjaWZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLiBCdXQgdGhlbiBJIHJlYWxpemVkIGBkb19zeXNfb3BlbmF0MmAgaXMgYSBzeXNjYWxsIGVudHJ5LCBzbyBtYXliZSBgZG9fZmlscF9vcGVuYCBvciwgYmV0dGVyIHlldCwganVzdCBgcGF0aF9vcGVuYXRgIGlzIGEgc3Ryb25nZXIgY2hvaWNlIGFzIGEgc3RhcnRpbmcgcG9pbnQuIEl0J3MgdGhlIGNvcmUgb2YgdGhlIGBvcGVuYXQyYCBzeXN0ZW0gY2FsbC5cblxuU28sIEknbSBnb2luZyB0byByZWZpbmUgdGhhdCBpbml0aWFsIGxpc3QuIEl0J3Mgbm93OiBgcGF0aF9vcGVuYXRgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBjaWZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYGNlcGhfYXRvbWljX29wZW5gLCBgZnVzZV9hdG9taWNfb3BlbmAsIGBnZnMyX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3BlbmAsIGFuZCBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAuXG5cbk5leHQsIEkgbmVlZCB0byBjb3JyZWxhdGUgdGhlc2Ugd2l0aCB0aGVpciByZXNwZWN0aXZlIGNvbmZpZ3VyYXRpb25zLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGludG8gdGhlc2UgS2NvbmZpZyBvcHRpb25zOiBgOVBfRlNgLCBgQ0VQSF9GU2AsIGBGVVNFX0ZTYCwgYEdGUzJfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYFZCT1hTRl9GU2AuIEEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGFsd2F5cyBpbiBvcmRlcjsgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYFZCT1hTRl9GU2AgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IHN5bWJvbCBmb3IgdGhhdCBmaWxlc3lzdGVtLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6MDMuMzEzOTkyMTU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI3MzE1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZCT1hTRl9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy92Ym94c2YvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy92Ym94c2YvS2NvbmZpZzoxOmNvbmZpZyBWQk9YU0ZfRlNcXG5mcy92Ym94c2YvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsQm94IGd1ZXN0IHNoYXJlZCBmb2xkZXIgKHZib3hzZikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6MDMuNTY2NzI4ODU5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTE1MTIzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRmlsZXN5c3RlbSBQcm90b2NvbCBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgZGVmaW5pdGVseSBmb2N1c2luZyBvbiBgVkJPWFNGX0ZTYC4gVGhhdCdzIHRoZSBleHBlY3RlZCBwYXRoLiBCdXQgbm93IEknbSBzdGFydGluZyB0byB0aGluayBicm9hZGVyOiBXaGF0IGFyZSB0aGUgb3RoZXIgbGlrZWx5IGNhbmRpZGF0ZXMsIGV2ZW4gaWYgdGhleSBhcmVuJ3QgdGhlIHByaW1hcnkgZm9jdXM/IEFuZCwgc2luY2Ugd2UncmUgZGl2aW5nIGludG8gZmlsZSBzeXN0ZW1zLCB3b3VsZG4ndCBgOVBfRlNgIGFsc28gYmUgcmVsZXZhbnQgdG8gY29uc2lkZXIsIGV2ZW4gaWYganVzdCBmb3IgYSBxdWljayBjb21wYXJpc29uIG9mIGNhcGFiaWxpdGllcyBvciBwb3RlbnRpYWwgZWRnZSBjYXNlcz8gSnVzdCB0aHJvd2luZyBpdCBvdXQgdGhlcmUgYXMgc29tZXRoaW5nIHRvIHF1aWNrbHkgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTYwNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQzOjA2LjQxODI0NDIyMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ5ODA4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIDlQX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzLzlwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvOXAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzLzlwL0tjb25maWc6Mjpjb25maWcgOVBfRlNcXG5mcy85cC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlBsYW4gOSBSZXNvdXJjZSBTaGFyaW5nIFN1cHBvcnQgKDlQMjAwMClcXFwiXFxuLS1cXG5mcy85cC9LY29uZmlnPTE0PWlmIDlQX0ZTXFxuZnMvOXAvS2NvbmZpZzoxNTpjb25maWcgOVBfRlNDQUNIRVxcbmZzLzlwL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiRW5hYmxlIDlQIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy85cC9LY29uZmlnLTIyLVxcbmZzLzlwL0tjb25maWc6MjM6Y29uZmlnIDlQX0ZTX1BPU0lYX0FDTFxcbmZzLzlwL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiOVAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy85cC9LY29uZmlnPTMyPWVuZGlmXFxuLS1cXG5mcy85cC9LY29uZmlnLTM0LVxcbmZzLzlwL0tjb25maWc6MzU6Y29uZmlnIDlQX0ZTX1NFQ1VSSVRZXFxuZnMvOXAvS2NvbmZpZy0zNi1cXHRib29sIFxcXCI5UCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQzOjA2LjUwMzIzMTQ1M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE1NDc3OTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRmlsZSBTeXN0ZW0gQ29uc2lkZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBmaWxlIHN5c3RlbXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAqeWVzKiwgbGV0J3MgY29uc2lkZXIgYDlQX0ZTYC4gSXQncyBnb3QgaXRzIHByb3MsIHdlIGtub3cgaXQsIGl0cyBzdHJlbmd0aHMgYW5kIHdlYWtuZXNzZXMgYXJlIGZhbWlsaWFyLiBCdXQsIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhhdCByb2FkLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcuIFRoZSBxdWVzdGlvbiBpcywgd2hhdCBhYm91dCBgQ0VQSF9GU2A/IEl0J3MgYSBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbSwgcG90ZW50aWFsbHkgb2ZmZXJpbmcgYWR2YW50YWdlcyBpbiBzY2FsYWJpbGl0eSBhbmQgcmVkdW5kYW5jeS4gSSBuZWVkIHRvIHdlaWdoIHRoZSBwcm9zIGFuZCBjb25zIG9mIGJvdGgsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHNwZWNpZmljIHJlcXVpcmVtZW50cyBvZiB0aGlzIHByb2plY3QgYW5kIHRoZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgY292ZXJlZCBhbGwgYmFzZXMgYmVmb3JlIGNvbW1pdHRpbmcgdG8gYSBmaW5hbCBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0MzowOS44MTg3MTI1MzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzE3ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRVBIX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NlcGgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jZXBoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9GU1xcbmZzL2NlcGgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtXFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTE5PWlmIENFUEhfRlNcXG5mcy9jZXBoL0tjb25maWc6MjA6Y29uZmlnIENFUEhfRlNDQUNIRVxcbmZzL2NlcGgvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJFbmFibGUgQ2VwaCBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTI3PWVuZGlmXFxuZnMvY2VwaC9LY29uZmlnLTI4LVxcbmZzL2NlcGgvS2NvbmZpZzoyOTpjb25maWcgQ0VQSF9GU19QT1NJWF9BQ0xcXG5mcy9jZXBoL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiQ2VwaCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2NlcGgvS2NvbmZpZy0zOC1cXG5mcy9jZXBoL0tjb25maWc6Mzk6Y29uZmlnIENFUEhfRlNfU0VDVVJJVFlfTEFCRUxcXG5mcy9jZXBoL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiQ2VwaEZTIFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6MDkuODkxNDM2ODI0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNTc1MjU4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnk6XG5cbioqRmlsZXN5c3RlbSBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIGEgYENFUEhfRlNgIHNpdHVhdGlvbi4gVGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGFsdGVybmF0aXZlcywgcG90ZW50aWFsIGVkZ2UgY2FzZXMsIGFuZCBhcmVhcyB0aGF0IG1pZ2h0IHdhcnJhbnQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoZW4gaXMsIHdoYXQgYWJvdXQgYEZVU0VfRlNgPyBEb2VzIHRoaXMgaW50ZXJmYWNlIG9mZmVyIGFueSBiZW5lZml0cyBvciBkcmF3YmFja3MsIGNvbXBhdGliaWxpdHkgY29uY2VybnMsIG9yIHBlcmZvcm1hbmNlIGRpZmZlcmVuY2VzIHJlbGF0aXZlIHRvIHRoZSBDZXBoIGltcGxlbWVudGF0aW9uPyBUaGUgaW1wbGljYXRpb25zIGNvdWxkIGJlIHNpZ25pZmljYW50LiBMZXQncyBkZWx2ZSBkZWVwZXIgYW5kIGFzc2VzcyB3aGljaCBvcHRpb24gaXMgb3B0aW1hbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1MTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0MzoxNC4yNDg5NjU2MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNDAyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVNFX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Z1c2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xcbmZzL2Z1c2UvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6MTQuMzUyMzcyNjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MTgzNDY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ29uc2lkZXJpbmcgRmlsZSBTeXN0ZW0gSW1wbGVtZW50YXRpb25zKipcblxuUmlnaHQsIGxldCdzIHNlZS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyBhIGNsZWFyIGFja25vd2xlZGdtZW50OiAqYEZVU0VfRlNgKi4gVGhhdCdzIG9uIHRoZSB0YWJsZS4gQnV0IGhhbmcgb24sIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgRlVTRSBpbXBsZW1lbnRhdGlvbiByb3V0ZS4uLndoYXQgYWJvdXQgYEdGUzJfRlNgPyBJdCdzIGNydWNpYWwgdG8gZXZhbHVhdGUgYWxsIHZpYWJsZSBvcHRpb25zLCBhbmQgYSBkaXN0cmlidXRlZCwgY2x1c3Rlci1hd2FyZSBmaWxlIHN5c3RlbSBsaWtlIEdGUzIgd2FycmFudHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIFt5b3VyIHNwZWNpZmljIGZpZWxkL2FwcGxpY2F0aW9uXSBhbmQgaXRzIGxpa2VseSBkZW1hbmRzIGZvciBzY2FsYWJpbGl0eSwgaGlnaCBhdmFpbGFiaWxpdHksIGFuZCBjb25jdXJyZW50IGFjY2Vzcy4gSSBuZWVkIHRvIHdlaWdoIHRoZSBpbmhlcmVudCBhZHZhbnRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzIG9mICpib3RoKiBhcHByb2FjaGVzIHRvIHNlZSB3aGljaCBvbmUsIG9yIGNvbWJpbmF0aW9uIHRoZXJlb2YsIGlzIHRoZSBtb3N0IGFwcHJvcHJpYXRlLiBUaGUgZGVzaWduIHRyYWRlb2ZmcyBoZXJlIGFyZSBzdWJzdGFudGlhbCwgYW5kIHdhcnJhbnQgdGhpcyBpbml0aWFsIGNvbXBhcmlzb24sIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc2MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQzOjE4LjAyNDIwOTM3MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwNzMyMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEdGUzJfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZ2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2dmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2dmczIvS2NvbmZpZzoyOmNvbmZpZyBHRlMyX0ZTXFxuZnMvZ2ZzMi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2dmczIvS2NvbmZpZy0yNi1cXG5mcy9nZnMyL0tjb25maWc6Mjc6Y29uZmlnIEdGUzJfRlNfTE9DS0lOR19ETE1cXG5mcy9nZnMyL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiR0ZTMiBETE0gbG9ja2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6MTguMDgyMjg2Njc3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODc1OTA2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IHRob3VnaHRzLCBhbmQgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipGaWxlc3lzdGVtIENvbnNpZGVyYXRpb25zOiBHRlMyIGFuZCBORlMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyBhIHN0cm9uZyBhZmZpcm1hdGl2ZS4gWWVzLCBkZWZpbml0ZWx5LCBgR0ZTMl9GU2AgaXMgYSBnbyBmb3IgY29uc2lkZXJhdGlvbiBoZXJlLiBUaGUgZGlzdHJpYnV0ZWQgbmF0dXJlLCBpdHMgaW5oZXJlbnQgY2x1c3RlcmluZyBjYXBhYmlsaXRpZXMsIGFuZCBpdHMgZ2VuZXJhbCBwZXJmb3JtYW5jZSBwcm9maWxlIGluIHRoZSBpbnRlbmRlZCB3b3JrbG9hZCBhcmUgYWxsIGdvb2QgcmVhc29ucyB0byBzdGFydCB0aGVyZS4gV2UncmUgb24gdGhlIHJpZ2h0IHRyYWNrLlxuXG5CdXQsIGJlZm9yZSB3ZSBnZXQgdG9vIGZhciBkb3duIHRoYXQgcGF0aC4uLml0J3MgY3JpdGljYWwgdGhhdCBJIGRvbid0IG92ZXJsb29rIGEgY3JpdGljYWwgb3B0aW9uLiBIb2xkIG9uIGEgbW9tZW50LiBXaGF0IGFib3V0IGEgbW9yZSBuZXR3b3JrLWNlbnRyaWMgYXBwcm9hY2g/IEhvdyBkb2VzIGBORlNfRlNgIHN0YWNrIHVwIGFnYWluc3QgYEdGUzJgIGluIHRoaXMgc3BlY2lmaWMgdXNlIGNhc2U/IEl0J3MgaW1wb3J0YW50IHRvIHdlaWdoIHRoYXQgb3V0IGFzIHdlbGwsIGNvbnNpZGVyaW5nIG5ldHdvcmsgb3ZlcmhlYWQsIGNvbXBsZXhpdHkgYW5kIGRhdGEgY29uc2lzdGVuY3kgbW9kZWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzEzMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQzOjIyLjI2OTg4MDQ1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYxODEwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25mcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbmZzL0tjb25maWc6Mjpjb25maWcgTkZTX0ZTXFxuZnMvbmZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTkZTIGNsaWVudCBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbmZzL0tjb25maWc9MTYyPWNvbmZpZyBST09UX05GU1xcbi0tXFxuZnMvbmZzL0tjb25maWctMTcyLVxcbmZzL25mcy9LY29uZmlnOjE3Mzpjb25maWcgTkZTX0ZTQ0FDSEVcXG5mcy9uZnMvS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiUHJvdmlkZSBORlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6MjIuMzI0NTAzOTc0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzYxNTkyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmV0d29yayBGaWxlc3lzdGVtcyAtIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyBhIGNsZWFyIGNvbmZpcm1hdGlvbjogeWVzLCBOZXR3b3JrIEZpbGUgU3lzdGVtIGlzIGRlZmluaXRlbHkgb24gdGhlIHRhYmxlLiBJdCdzIGEga2V5IGNvbnRlbmRlci4gQnV0IHRoZSBuZXh0IGltbWVkaWF0ZSBxdWVzdGlvbiwgdGhlIG9uZSB0aGF0IG5hdHVyYWxseSBmb2xsb3dzLCBpczogV2hhdCBhYm91dCBDb21tb24gSW50ZXJuZXQgRmlsZSBTeXN0ZW0/IENJRlMgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC4gV2UncmUgbG9va2luZyBhdCBuZXR3b3JrIGZpbGVzeXN0ZW1zIGFuZCB0aGVpciBzdWl0YWJpbGl0eSwgc28gd2UgaGF2ZSB0byB3ZWlnaCB0aGUgcHJvcyBhbmQgY29ucyBvZiBORlMgdmVyc3VzIENJRlMgaW4gdGhpcyBjb250ZXh0LiBJdCdzIGEgY29yZSBkZXNpZ24gZGVjaXNpb24sIGFuZCB3ZSBoYXZlIHRvIGZhY3RvciBpbiBpbnRlcm9wZXJhYmlsaXR5LCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgYW5kIHBvdGVudGlhbCBjbGllbnQgYmFzZS4gV2UgbmVlZCB0byBldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIHVzaW5nIGVpdGhlciBhbmQgdGhlIHBvdGVudGlhbCB0cmFkZW9mZnMuIFRoZSBjb21wYXJhdGl2ZSBtZXJpdHMgb2YgZWFjaCBuZWVkIHRvIGJlIGNhcmVmdWxseSBleGFtaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1MTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0MzoyNi40NjA2NjYxMzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDQxNjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDSUZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9zbWIvY2xpZW50L0tjb25maWc6Mjpjb25maWcgQ0lGU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUIzIGFuZCBDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSlcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTMtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjU0OmNvbmZpZyBDSUZTX1NUQVRTMlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cXHRib29sIFxcXCJFeHRlbmRlZCBzdGF0aXN0aWNzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTY3LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjktXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjgzOmNvbmZpZyBDSUZTX1VQQ0FMTFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy04NC1cXHRib29sIFxcXCJLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cFxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6OTI6Y29uZmlnIENJRlNfWEFUVFJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiQ0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJDSUZTIFBPU0lYIEV4dGVuc2lvbnNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMTk6Y29uZmlnIENJRlNfREVCVUdcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTIwLVxcdGJvb2wgXFxcIkVuYWJsZSBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjctXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEyODpjb25maWcgQ0lGU19ERUJVRzJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVxcdGJvb2wgXFxcIkVuYWJsZSBhZGRpdGlvbmFsIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEzOC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDAtXFx0Ym9vbCBcXFwiRHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE0OTpjb25maWcgQ0lGU19ERlNfVVBDQUxMXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE1MC1cXHRib29sIFxcXCJERlMgZmVhdHVyZSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTYyOmNvbmZpZyBDSUZTX1NXTl9VUENBTExcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVxcdGJvb2wgXFxcIlNXTiBmZWF0dXJlIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTcyLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkFsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgwLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxODE6Y29uZmlnIENJRlNfU01CX0RJUkVDVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXFx0Ym9vbCBcXFwiU01CIERpcmVjdCBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5MC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkyLVxcdGJvb2wgXFxcIlByb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTk5OmNvbmZpZyBDSUZTX1JPT1RcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjAwLVxcdGJvb2wgXFxcIlNNQiByb290IGZpbGUgc3lzdGVtIChFeHBlcmltZW50YWwpXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MjA3OmNvbmZpZyBDSUZTX0NPTVBSRVNTSU9OXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTTUIgbWVzc2FnZSBjb21wcmVzc2lvbiAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6MjYuNTE5MTE0NTg2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTMxOTE2OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2xzIGZvciBhIFZGUyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCBob3cgdG8gY29uZmlndXJlIHN5emJvdCB0byBiZXN0IHRlc3QgaXQuIFRoZSBjb3JlIG9mIHRoaXMgaXMgdGhlIFZGUywgYnV0IGl0IHRvdWNoZXMgYSBudW1iZXIgb2YgZmlsZXN5c3RlbXMuIEZpcnN0LCByZWdhcmRpbmcgZmlsZXN5c3RlbXM6IGBDSUZTYCwgZGVmaW5pdGVseS4gSSBzZWUgdGhlIGNvbmZpZ3MgYXJlOiBgOVBfRlNgLCBgQ0VQSF9GU2AsIGBGVVNFX0ZTYCwgYEdGUzJfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYFZCT1hTRl9GU2AuIEhtbSwgZG8gSSBsaXN0IHRoZW0gYWxsPyBUaGUgcHJvbXB0IHNheXMgXCJEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLlwiIFdoaWxlIHRoZXNlIGZpbGVzeXN0ZW1zICphcmUqIHNwZWNpZmljIHRvIHRoZSBjb2RlIGNoYW5nZXMsIGl0J3MgcG9zc2libGUgdGhleSBhcmUgYWxyZWFkeSBlbmFibGVkIGluIGdlbmVyaWMgY29uZmlncy4gSSBrbm93IGA5UF9GU2AsIGBDRVBIX0ZTYCwgYEZVU0VfRlNgLCBgR0ZTMl9GU2AsIGBORlNfRlNgLCBhbmQgYENJRlNgIGFyZSBmb3Igc3VyZSBlbmFibGVkIGluIHN5emJvdC4gYFZCT1hTRl9GU2AgbWlnaHQgbm90IGJlLCBidXQgbGlzdGluZyBpdCBpcyBzYWZlIGFueXdheSwgYW5kIHJlYWxseSwgdGhlIFZGUyBjaGFuZ2VzIGNhbiBiZSB0ZXN0ZWQgd2l0aCBhbnkgZmlsZXN5c3RlbS4gU3RpbGwsIGxpc3RpbmcgdGhlc2UgZmlsZXN5c3RlbXMgaXMgYSBnb29kIGlkZWEuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3ltYm9scy4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgcGF0aF9vcGVuYXRgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBjaWZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYGNlcGhfYXRvbWljX29wZW5gLCBgZnVzZV9hdG9taWNfb3BlbmAsIGBnZnMyX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3BlbmAsIGFuZCBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAuIEJ1dCB3YWl0LCB0aGVyZSBhcmUgYWxzbyBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAgYW5kIGBuZnNfYXRvbWljX29wZW5fdjIzYCwgYm90aCBvZiB3aGljaCBhcmUgYWxzbyBtb2RpZmllZC4gSSdsbCBhZGQgdGhlbSB0byB0aGUgbGlzdCBhcyB3ZWxsLlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGVudHJ5IHBvaW50cy4gYHBhdGhfb3BlbmF0YCBzZWVtcyBsaWtlIHRoZSBtYWluIGZ1bmN0aW9uIHRvIGZvY3VzIG9uLCBoYW5kbGluZyBgT19DUkVBVGAgYW5kIGBPX0RJUkVDVE9SWWAuIGB2ZnNfbWtkaXJgIGhhbmRsZXMgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAsIGB2ZnNfY3JlYXRlYCBoYW5kbGVzIGBPX0NSRUFUYCAod2l0aG91dCBgT19ESVJFQ1RPUllgKSwgYW5kIGBkZW50cnlfY3JlYXRlYCBpcyBzb21ldGltZXMgdXNlZCB3aXRoIGBPX0NSRUFUYC5cblxuTGV0J3MgbG9vayBmb3Igb3RoZXIgaW1wb3J0YW50IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHJlbGV2YW50IGZpbGVzLiBJJ2xsIGNoZWNrIGBmcy9uYW1laS5jYCwgc3RhcnRpbmcgd2l0aCBgZG9fc3lzX29wZW5hdDJgIHdoaWNoIGlzIGFjdHVhbGx5IGluIGBmcy9vcGVuLmNgLiBJJ2xsIGFkZCB0aGF0IHRvIHRoZSBsaXN0LiBJJ2xsIGFsc28gbG9vayBmb3Igb3RoZXIga2V5IGZ1bmN0aW9ucyB0byB0ZXN0LiBJIHNlZSBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGlzIG1vZGlmaWVkLiBJdCdzIHN0YXRpYywgc28gaXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQsIEkgd2lsbCBza2lwIGl0LiBgdmZzX21rZGlyX25vX3Blcm1gIGlzIHN0YXRpYyBpbmxpbmUsIHNvIEkgZG9uJ3QgbmVlZCB0byBsaXN0IGl0LiBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBgbWF5X29fY3JlYXRlYCwgYG9fY3JlYXRlX21vZGVgLCBgdmZzX3ByZXBhcmVfbW9kZWAsIGB2ZnNfY3JlYXRlX25vX3Blcm1gLCBgdHJhaWxpbmdfc2xhc2hlc2AsIGBsb29rdXBfbGFzdGAsIGBvcGVuX2xhc3RfbG9va3Vwc2AsIGBkb19vcGVuYCwgYW5kIGBmaWxlbmFtZV9jcmVhdGVgIGFyZSBhbGwgc3RhdGljIGFuZCBzbyB3aWxsIG5vdCBiZSBhZGRlZC4gRmluYWxseSBgZmlsZW5hbWVfdW5saW5rYXRgIGlzIGluIGBmcy9uYW1laS5jYCBhbmQgbm90IHN0YXRpYywgYW5kIHNvIEkgc2hvdWxkIGFkZCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3ODAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6NDAuNjUxMDMzOTIxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQ3NDY3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsZW5hbWVfdW5saW5rYXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTU2MjY9RVhQT1JUX1NZTUJPTCh2ZnNfdW5saW5rKTtcXG4tLVxcbmZzL25hbWVpLmMtNTYzMy0gKi9cXG5mcy9uYW1laS5jOjU2MzQ6aW50IGZpbGVuYW1lX3VubGlua2F0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcXG5mcy9uYW1laS5jLTU2MzUte1xcbi0tXFxuZnMvbmFtZWkuYz01Njk3PVNZU0NBTExfREVGSU5FMyh1bmxpbmthdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCBpbnQsIGZsYWcpXFxuLS1cXG5mcy9uYW1laS5jLTU3MDQtXFx0XFx0cmV0dXJuIGZpbGVuYW1lX3JtZGlyKGRmZCwgbmFtZSk7XFxuZnMvbmFtZWkuYzo1NzA1OlxcdHJldHVybiBmaWxlbmFtZV91bmxpbmthdChkZmQsIG5hbWUpO1xcbmZzL25hbWVpLmMtNTcwNi19XFxuLS1cXG5mcy9uYW1laS5jPTU3MDg9U1lTQ0FMTF9ERUZJTkUxKHVubGluaywgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUpXFxuLS1cXG5mcy9uYW1laS5jLTU3MTAtXFx0Q0xBU1MoZmlsZW5hbWUsIG5hbWUpKHBhdGhuYW1lKTtcXG5mcy9uYW1laS5jOjU3MTE6XFx0cmV0dXJuIGZpbGVuYW1lX3VubGlua2F0KEFUX0ZEQ1dELCBuYW1lKTtcXG5mcy9uYW1laS5jLTU3MTItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0Mzo0MC45MDU3ODgwNDZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwNTQ1MzI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgTm9uLVN0YXRpYyBgZmlsZW5hbWVfYCBGdW5jdGlvbnMqKlxuXG5IbW0sIHNvIGBmaWxlbmFtZV91bmxpbmthdGAgYW5kIGBmaWxlbmFtZV9yZW5hbWVhdDJgIGFyZW4ndCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSW50ZXJlc3RpbmcuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGVpciBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBXaHkgd2VyZSB0aGV5IGRlc2lnbmVkIHRoaXMgd2F5PyBBcmUgdGhleSBwYXJ0IG9mIHNvbWUgbGFyZ2VyIGludGVyZmFjZSwgb3IgaXMgdGhpcyBwZXJoYXBzIGFuIG92ZXJzaWdodCB0aGF0J3MgY3JlcHQgaW50byB0aGUgY29kZSBiYXNlP1xuXG5MZXQncyBkaXZlIGludG8gdGhlIHNvdXJjZS4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsLCBuYXR1cmFsbHksIGlzIGBmcy9uYW1laS5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZpbGVuYW1lX3JlbmFtZWF0MmAgKG9yIGF0IGxlYXN0IGl0cyBkZWZpbml0aW9uKSB0aGVyZS4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbi4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIG5hbWVzcGFjZS4gSXMgaXQgYmVpbmcgdXNlZCBieSBhbnkgZXh0ZXJuYWwgbW9kdWxlcz8gV2hhdCdzIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIGZpbGUgc3lzdGVtIGltcGxlbWVudGF0aW9uPyBUaW1lIHRvIGdyYWIgdGhlIGNvZGUgYW5kIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODI2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6NDUuNzExMjQzMjU5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDYxNzU1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWxlbmFtZV9yZW5hbWVhdDJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTYyMDI9RVhQT1JUX1NZTUJPTCh2ZnNfcmVuYW1lKTtcXG5mcy9uYW1laS5jLTYyMDMtXFxuZnMvbmFtZWkuYzo2MjA0OmludCBmaWxlbmFtZV9yZW5hbWVhdDIoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpmcm9tLFxcbmZzL25hbWVpLmMtNjIwNS1cXHRcXHQgICAgICAgaW50IG5ld2RmZCwgc3RydWN0IGZpbGVuYW1lICp0bywgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxuZnMvbmFtZWkuYz02MzA3PVNZU0NBTExfREVGSU5FNShyZW5hbWVhdDIsIGludCwgb2xkZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBvbGRuYW1lLFxcbi0tXFxuZnMvbmFtZWkuYy02MzExLVxcdENMQVNTKGZpbGVuYW1lLCBuZXcpKG5ld25hbWUpO1xcbmZzL25hbWVpLmM6NjMxMjpcXHRyZXR1cm4gZmlsZW5hbWVfcmVuYW1lYXQyKG9sZGRmZCwgb2xkLCBuZXdkZmQsIG5ldywgZmxhZ3MpO1xcbmZzL25hbWVpLmMtNjMxMy19XFxuLS1cXG5mcy9uYW1laS5jPTYzMTU9U1lTQ0FMTF9ERUZJTkU0KHJlbmFtZWF0LCBpbnQsIG9sZGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgb2xkbmFtZSxcXG4tLVxcbmZzL25hbWVpLmMtNjMxOS1cXHRDTEFTUyhmaWxlbmFtZSwgbmV3KShuZXduYW1lKTtcXG5mcy9uYW1laS5jOjYzMjA6XFx0cmV0dXJuIGZpbGVuYW1lX3JlbmFtZWF0MihvbGRkZmQsIG9sZCwgbmV3ZGZkLCBuZXcsIDApO1xcbmZzL25hbWVpLmMtNjMyMS19XFxuLS1cXG5mcy9uYW1laS5jPTYzMjM9U1lTQ0FMTF9ERUZJTkUyKHJlbmFtZSwgY29uc3QgY2hhciBfX3VzZXIgKiwgb2xkbmFtZSwgY29uc3QgY2hhciBfX3VzZXIgKiwgbmV3bmFtZSlcXG4tLVxcbmZzL25hbWVpLmMtNjMyNi1cXHRDTEFTUyhmaWxlbmFtZSwgbmV3KShuZXduYW1lKTtcXG5mcy9uYW1laS5jOjYzMjc6XFx0cmV0dXJuIGZpbGVuYW1lX3JlbmFtZWF0MihBVF9GRENXRCwgb2xkLCBBVF9GRENXRCwgbmV3LCAwKTtcXG5mcy9uYW1laS5jLTYzMjgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0Mzo0NS43ODE4NjU0ODJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY0Njg0NzAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IEZpbGVzeXN0ZW0gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIHRocm91Z2ggdGhlc2UgcmVjZW50IGNoYW5nZXMsIGFuZCBpdCBzZWVtcyBsaWtlIGBmaWxlbmFtZV91bmxpbmthdGAgYW5kIGBmaWxlbmFtZV9yZW5hbWVhdDJgIGhhdmUgYmVlbiBtb2RpZmllZCB0byB1c2UgdGhpcyBuZXcgYHRyYWlsaW5nX3NsYXNoZXNgIGZ1bmN0aW9uLCB3aGljaCBpcywgaG1tLCBhbiBpbmxpbmUgZnVuY3Rpb24uIEkgc2VlIGl0J3MgZGVmaW5lZCBsaWtlIHRoaXM6XG5gYGBjXG4rc3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoY29uc3Qgc3RydWN0IHFzdHIgbGFzdClcbit7XG4rXHRyZXR1cm4gKGJvb2wpbGFzdC5uYW1lW2xhc3QubGVuXTtcbit9XG5gYGBcbkVzc2VudGlhbGx5LCBpdCdzIGEgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyB0aGUgaW5kZXhpbmcgbWV0aG9kIGBsYXN0Lm5hbWVbbGFzdC5sZW5dYCB3aXRoIHRoZSBtb3JlIGV4cGxpY2l0IGZ1bmN0aW9uIGNhbGwgdG8gYHRyYWlsaW5nX3NsYXNoZXNgLiBUaGlzIGlzbid0IHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGxpZXMuIFRoYXQgc2VlbXMgdG8gYmUgaGFwcGVuaW5nIGluIGBvcGVuYXRgIHdoZW4gdXNpbmcgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0byByZWFsbHkgZGlnIGludG8gYXJlOiBgcGF0aF9vcGVuYXRgLCBgZG9fc3lzX29wZW5hdDJgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBhbmQgYGRlbnRyeV9jcmVhdGVgLiBUaG9zZSBmZWVsIGxpa2UgdGhlIGhlYXJ0IG9mIGl0LlxuXG5CdXQgdGhlbiB0aGVyZSdzIGFsc28gdGhlIHJlbGF0ZWQgZmlsZSBzeXN0ZW0gZnVuY3Rpb25zIEkgbmVlZCB0byBjaGVjaywgdGhlIGNoYW5nZXMgdGhhdCB1c2UgdGhlIG5ld2x5IGNyZWF0ZWQgYHRyYWlsaW5nX3NsYXNoZXNgIGZ1bmN0aW9uOiBgZmlsZW5hbWVfdW5saW5rYXRgLCBgZmlsZW5hbWVfcmVuYW1lYXQyYC4gQW5kIHRoZSBhdG9taWMgb3BlbiBmdW5jdGlvbnM6IGBjaWZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLiBHb3R0YSBtYWtlIHN1cmUgSSByZXZpZXcgYWxsIG9mIHRoZXNlLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBkb19zeXNfb3BlbmF0MmAgaXMgZXhwb3J0ZWQgb3Igc3RhdGljIHRvIGdldCBhbiBvdmVyYWxsIHZpZXcgb2YgdGhlIGZ1bmN0aW9ucyBpbiBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzU3NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0Mzo1My40Mjg3MTU3NzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjkxOTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19zeXNfb3BlbmF0MlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vcGVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb3Blbi5jPTEzNjc9RVhQT1JUX1NZTUJPTChmaWxlX29wZW5fcm9vdCk7XFxuZnMvb3Blbi5jLTEzNjgtXFxuZnMvb3Blbi5jOjEzNjk6c3RhdGljIGludCBkb19zeXNfb3BlbmF0MihpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsXFxuZnMvb3Blbi5jLTEzNzAtXFx0XFx0XFx0ICBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdylcXG4tLVxcbmZzL29wZW4uYz0xMzgxPWludCBkb19zeXNfb3BlbihpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvb3Blbi5jLTEzODMtXFx0c3RydWN0IG9wZW5faG93IGhvdyA9IGJ1aWxkX29wZW5faG93KGZsYWdzLCBtb2RlKTtcXG5mcy9vcGVuLmM6MTM4NDpcXHRyZXR1cm4gZG9fc3lzX29wZW5hdDIoZGZkLCBmaWxlbmFtZSwgXFx1MDAyNmhvdyk7XFxuZnMvb3Blbi5jLTEzODUtfVxcbi0tXFxuZnMvb3Blbi5jPTE0MDM9U1lTQ0FMTF9ERUZJTkU0KG9wZW5hdDIsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSxcXG4tLVxcbmZzL29wZW4uYy0xNDI2LVxcbmZzL29wZW4uYzoxNDI3OlxcdHJldHVybiBkb19zeXNfb3BlbmF0MihkZmQsIGZpbGVuYW1lLCBcXHUwMDI2dG1wKTtcXG5mcy9vcGVuLmMtMTQyOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQzOjUzLjYzMTY0NTUwOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDYxNjAxNTUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgT3BlbmF0IE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgYGRvX3N5c19vcGVuYCBhbmQgYGRvX3N5c19vcGVuYXQyYCwgYnV0IGFmdGVyIGEgc2Vjb25kIGxvb2ssIGBkb19zeXNfb3BlbmAgc2VlbXMgdG8gYmUgdGhlIHJpZ2h0IGNob2ljZSB0byBmb2N1cyBvbiwgYW5kIHdoaWxlIGl0IGlzbid0IHRoZSBzeXNjYWxsIGVudHJ5IGl0c2VsZiwgdGhhdCdzIHdoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQuIEknbGwgYWxzbyBhZGQgYHBhdGhfb3BlbmF0YCB0byBteSB0YXJnZXQgc3ltYm9scy5cblxuTGV0J3MgcmVmaW5lIHRoYXQgbGlzdDogYHBhdGhfb3BlbmF0YCwgYGRvX3N5c19vcGVuYCwgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYGRlbnRyeV9jcmVhdGVgLCBgZmlsZW5hbWVfdW5saW5rYXRgLCBgZmlsZW5hbWVfcmVuYW1lYXQyYCwgYW5kIHRoZSB2YXJpb3VzIGZpbGVzeXN0ZW0gYXRvbWljIG9wZW4gZnVuY3Rpb25zOiBgY2lmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsYCwgYGNlcGhfYXRvbWljX29wZW5gLCBgZnVzZV9hdG9taWNfb3BlbmAsIGBnZnMyX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5fdjIzYCwgYW5kIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC5cblxuTm93LCB0aW1lIHRvIGNvbmZpcm0gdGhlaXIgbG9jYXRpb25zOiBgZG9fc3lzX29wZW5gIGlzIGluIGBmcy9vcGVuLmNgLCBgcGF0aF9vcGVuYXRgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYCBhcmUgYWxsIGluIGBmcy9uYW1laS5jYC4gR29vZCwgdGhhdCdzIHdoYXQgSSBleHBlY3RlZC5cblxuQmFzZWQgb24gdGhlIHBhdGNoIGRlc2NyaXB0aW9uLCB0aGlzIGlzIGEgVkZTLWxldmVsIGNoYW5nZSB0aGF0J3MgYWxsb3dpbmcgYG9wZW5hdCgpYCB3aXRoIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgIHRvIGNyZWF0ZSBkaXJlY3Rvcmllcy4gVGhpcyB0b3VjaGVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljLCBzbyBJIG5lZWQgdG8gY2hlY2sgYWxsIHRoZSByZWxldmFudCBmaWxlc3lzdGVtcywgc3BlY2lmaWNhbGx5IHRob3NlIHdpdGggdGhlaXIgb3duIGBhdG9taWNfb3BlbmAgaW1wbGVtZW50YXRpb25zLCB0byBtYWtlIHN1cmUgdGhleSdyZSBoYW5kbGluZyB0aGlzIGNvcnJlY3RseS4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IG5lZWRzIHNlcmlvdXMgZnV6emluZyB0byB1bmNvdmVyIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3Igc2VjdXJpdHkgaXNzdWVzLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgZGlyZWN0b3J5IGNyZWF0aW9uIGFuZCBmaWxlIG9wZW5pbmcgcGF0aHMuXG5cbkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgZmlsZXN5c3RlbXMgcG90ZW50aWFsbHkgYWZmZWN0ZWQgYXJlIGNvdmVyZWQuIFRoZSBjb25maWdzIEkgYW0gYXdhcmUgb2YgYXJlIGA5UF9GU2AsIGBDRVBIX0ZTYCwgYEZVU0VfRlNgLCBgR0ZTMl9GU2AsIGBORlNfRlNgLCBgQ0lGU2AsIGFuZCBgVkJPWFNGX0ZTYC5cblxuQWxyaWdodCwgYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBldmVyeXRoaW5nIGNvdmVyZWQuIEJlc2lkZXMgdGhlIGNvcmUgYGZzL29wZW4uY2AgYW5kIGBmcy9uYW1laS5jYCBmaWxlcywgSSBzZWUgdXBkYXRlcyB0bzogYGZzLzlwL3Zmc19pbm9kZS5jYCwgYGZzLzlwL3Zmc19pbm9kZV9kb3RsLmNgLCBgZnMvY2VwaC9maWxlLmNgLCBgZnMvZnVzZS9kaXIuY2AsIGBmcy9nZnMyL2lub2RlLmNgLCBgZnMvbmZzL2Rpci5jYCwgYGZzL3NtYi9jbGllbnQvZGlyLmNgLCBhbmQgYGZzL3Zib3hzZi9kaXIuY2AuIE9rYXksIHRoYXQgc2VlbXMgY29tcHJlaGVuc2l2ZS5cblxuRmluYWxseSwgSSdsbCBxdWlja2x5IGNoZWNrIGlmIGBPX0lTX01LRElSYCBpcyB1c2VkIGFueXdoZXJlIGVsc2UgdG8gZW5zdXJlIG5vIG90aGVyIHVuZm9yZXNlZW4gaW50ZXJhY3Rpb25zIGFyZSBwcmVzZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYzNiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0NDowNC4yNDc2NjMzMzVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODI5OTEwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiT19JU19NS0RJUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvOXAvdmZzX2lub2RlLmM9NzY5PXY5ZnNfdmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYy03NzktXFxuZnMvOXAvdmZzX2lub2RlLmM6NzgwOlxcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcXG5mcy85cC92ZnNfaW5vZGUuYy03ODEtXFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuLS1cXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jPTIyNz12OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTI0MS1cXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjI0MjpcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy0yNDMtXFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuLS1cXG5mcy9jZXBoL2ZpbGUuYz03OTQ9aW50IGNlcGhfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2NlcGgvZmlsZS5jLTgxMy1cXG5mcy9jZXBoL2ZpbGUuYzo4MTQ6XFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbmZzL2NlcGgvZmlsZS5jLTgxNS1cXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4tLVxcbmZzL2Z1c2UvZGlyLmM9OTMwPXN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksXFxuLS1cXG5mcy9mdXNlL2Rpci5jLTkzNy1cXG5mcy9mdXNlL2Rpci5jOjkzODpcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuZnMvZnVzZS9kaXIuYy05MzktXFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuLS1cXG5mcy9nZnMyL2lub2RlLmM9MTM4ND1zdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy0xMzg5LVxcbmZzL2dmczIvaW5vZGUuYzoxMzkwOlxcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcXG5mcy9nZnMyL2lub2RlLmMtMTM5MS1cXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4tLVxcbmZzL25hbWVpLmM9NDQ3Mz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvbmFtZWkuYy00NDgzLVxcdHVtb2RlX3QgbW9kZSA9IG9wLVxcdTAwM2Vtb2RlO1xcbmZzL25hbWVpLmM6NDQ4NDpcXHRib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wZW5fZmxhZyk7XFxuZnMvbmFtZWkuYy00NDg1LVxcbi0tXFxuZnMvbmZzL2Rpci5jPTIxMDQ9aW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvbmZzL2Rpci5jLTIxMjMtXFxuZnMvbmZzL2Rpci5jOjIxMjQ6XFx0aWYgKE9fSVNfTUtESVIob3Blbl9mbGFncykpXFxuZnMvbmZzL2Rpci5jLTIxMjUtXFx0XFx0b3Blbl9mbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4tLVxcbmZzL25mcy9kaXIuYz0yMzA5PWludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9uZnMvZGlyLmMtMjMxOC1cXG5mcy9uZnMvZGlyLmM6MjMxOTpcXHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcXG5mcy9uZnMvZGlyLmMtMjMyMC1cXHRcXHRvcGVuX2ZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbi0tXFxuZnMvb3Blbi5jPTExNTI9aW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXFxuLS1cXG5mcy9vcGVuLmMtMTE5Mi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5mcy9vcGVuLmM6MTE5MzpcXHRcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuZnMvb3Blbi5jLTExOTQtXFx0XFx0XFx0b3AtXFx1MDAzZW1vZGUgPSBob3ctXFx1MDAzZW1vZGUgfCBTX0lGRElSO1xcbi0tXFxuZnMvc21iL2NsaWVudC9kaXIuYz01MjA9aW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxcbi0tXFxuZnMvc21iL2NsaWVudC9kaXIuYy01NDAtXFxuZnMvc21iL2NsaWVudC9kaXIuYzo1NDE6XFx0aWYgKE9fSVNfTUtESVIob2ZsYWdzKSlcXG5mcy9zbWIvY2xpZW50L2Rpci5jLTU0Mi1cXHRcXHRvZmxhZ3MgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuLS1cXG5mcy92Ym94c2YvZGlyLmM9MzEzPXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvdmJveHNmL2Rpci5jLTMyMC1cXG5mcy92Ym94c2YvZGlyLmM6MzIxOlxcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcXG5mcy92Ym94c2YvZGlyLmMtMzIyLVxcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mY250bC5oLTMzLSNkZWZpbmUgT19NS0RJUl9NQVNLXFx0KE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSlcXG5pbmNsdWRlL2xpbnV4L2ZjbnRsLmg6MzQ6c3RhdGljIGlubGluZSBib29sIE9fSVNfTUtESVIodW5zaWduZWQgZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9mY250bC5oLTM1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDQ6MDYuNzMwNjYwMDg0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzExNzAxODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkZpbmFsaXppbmcgdGhlIFJlc3BvbnNlOiBBIFJvdXRpbmUgQ29uZmlybWF0aW9uKipcblxuQWxyaWdodCwgSSd2ZSByZXZpZXdlZCB0aGUgZW50aXJlIHByb2Nlc3MsIGRvdWJsZS1jaGVja2VkIHRoZSBkYXRhLCBhbmQgcmlnb3JvdXNseSBhc3Nlc3NlZCB0aGUgbWV0aG9kb2xvZ3kuIEV2ZXJ5dGhpbmcgYWxpZ25zIHdpdGggZXhwZWN0YXRpb25zOyB0aGVyZSBhcmUgbm8gb2J2aW91cyBpbmNvbnNpc3RlbmNpZXMsIGFub21hbGllcywgb3IgcmVkIGZsYWdzIHRoYXQgd291bGQgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24gb3IgbmVjZXNzaXRhdGUgYSBjb3Vyc2UgY29ycmVjdGlvbi4gRnJvbSBhIHF1YWxpdGF0aXZlIGFuZCBxdWFudGl0YXRpdmUgcGVyc3BlY3RpdmUsIHRoZSBhbmFseXNpcyBhcHBlYXJzIHJvYnVzdCwgdGhlIGludGVycHJldGF0aW9ucyBhcmUgc291bmQsIGFuZCB0aGUgY29uY2x1c2lvbnMgYXJlIGRlZmVuc2libGUgZ2l2ZW4gdGhlIGlucHV0IGRhdGEgYW5kIGNob3NlbiBmcmFtZXdvcmsuIE5vdyBJIGNhbiBjb25maWRlbnRseSBtb3ZlIGZvcndhcmQgdG8gcHJlcGFyZSB0aGUgZmluYWwgcmVzcG9uc2UsIGNvbmZpZGVudCB0aGF0IGl0IHJlcHJlc2VudHMgYSBmYWl0aGZ1bCBhbmQgYWNjdXJhdGUgcG9ydHJheWFsIG9mIHRoZSBmaW5kaW5ncy4gVGltZSB0byBjcmFmdCB0aGUgbmFycmF0aXZlIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQwMSwiT3V0cHV0VG9rZW5zIjozNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0NDoxNy4wNDIzNjM5N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MjkzMjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXRoX29wZW5hdFwiLFxuICAgIFwiZG9fc3lzX29wZW5cIixcbiAgICBcInZmc19ta2RpclwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwiZmlsZW5hbWVfdW5saW5rYXRcIixcbiAgICBcImZpbGVuYW1lX3JlbmFtZWF0MlwiLFxuICAgIFwiY2lmc19hdG9taWNfb3BlblwiLFxuICAgIFwidjlmc192ZnNfYXRvbWljX29wZW5cIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxcIixcbiAgICBcImNlcGhfYXRvbWljX29wZW5cIixcbiAgICBcImZ1c2VfYXRvbWljX29wZW5cIixcbiAgICBcImdmczJfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3BlblwiLFxuICAgIFwibmZzX2F0b21pY19vcGVuX3YyM1wiLFxuICAgIFwidmJveHNmX2Rpcl9hdG9taWNfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVkZTIGxheWVyLCBhbGxvd2luZyBvcGVuYXQoKSB3aXRoIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSB0byBjcmVhdGUgZGlyZWN0b3JpZXMuIEl0IG1vZGlmaWVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIChmcy9uYW1laS5jLCBmcy9vcGVuLmMpIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKDlwLCBjZXBoLCBmdXNlLCBnZnMyLCBuZnMsIHNtYiwgdmJveHNmKSB0byBoYW5kbGUgdGhlIG5ldyBiZWhhdmlvciBpbiB0aGVpciBhdG9taWNfb3BlbiBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBpbiBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGZpbGUgb3BlbmluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXRoX29wZW5hdFwiLFxuICAgIFwiZG9fc3lzX29wZW5cIixcbiAgICBcInZmc19ta2RpclwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwiZmlsZW5hbWVfdW5saW5rYXRcIixcbiAgICBcImZpbGVuYW1lX3JlbmFtZWF0MlwiLFxuICAgIFwiY2lmc19hdG9taWNfb3BlblwiLFxuICAgIFwidjlmc192ZnNfYXRvbWljX29wZW5cIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxcIixcbiAgICBcImNlcGhfYXRvbWljX29wZW5cIixcbiAgICBcImZ1c2VfYXRvbWljX29wZW5cIixcbiAgICBcImdmczJfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3BlblwiLFxuICAgIFwibmZzX2F0b21pY19vcGVuX3YyM1wiLFxuICAgIFwidmJveHNmX2Rpcl9hdG9taWNfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVkZTIGxheWVyLCBhbGxvd2luZyBvcGVuYXQoKSB3aXRoIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSB0byBjcmVhdGUgZGlyZWN0b3JpZXMuIEl0IG1vZGlmaWVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIChmcy9uYW1laS5jLCBmcy9vcGVuLmMpIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKDlwLCBjZXBoLCBmdXNlLCBnZnMyLCBuZnMsIHNtYiwgdmJveHNmKSB0byBoYW5kbGUgdGhlIG5ldyBiZWhhdmlvciBpbiB0aGVpciBhdG9taWNfb3BlbiBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBpbiBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGZpbGUgb3BlbmluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowh98zf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 16:34:06 +0000 UTC FinishedAt: 2026-06-29 16:44:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "9P_FS", "CEPH_FS", "FUSE_FS", "GFS2_FS", "NFS_FS", "CIFS", "VBOXSF_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "9P_FS", "CEPH_FS", "FUSE_FS", "GFS2_FS", "NFS_FS", "CIFS", "VBOXSF_FS" ], "series_id": "19eccb0d-a373-4e2f-9de6-7085934482de" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "path_openat", "do_sys_open", "vfs_mkdir", "vfs_create", "dentry_create", "filename_unlinkat", "filename_renameat2", "cifs_atomic_open", "v9fs_vfs_atomic_open", "v9fs_vfs_atomic_open_dotl", "ceph_atomic_open", "fuse_atomic_open", "gfs2_atomic_open", "nfs_atomic_open", "nfs_atomic_open_v23", "vboxsf_dir_atomic_open" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7LAogICAgJiMzNDtHRlMyX0ZTJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O1ZCT1hTRl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhdGhfb3BlbmF0JiMzNDssCiAgICAmIzM0O2RvX3N5c19vcGVuJiMzNDssCiAgICAmIzM0O3Zmc19ta2RpciYjMzQ7LAogICAgJiMzNDt2ZnNfY3JlYXRlJiMzNDssCiAgICAmIzM0O2RlbnRyeV9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfdW5saW5rYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfcmVuYW1lYXQyJiMzNDssCiAgICAmIzM0O2NpZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7djlmc192ZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7djlmc192ZnNfYXRvbWljX29wZW5fZG90bCYjMzQ7LAogICAgJiMzNDtjZXBoX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2Z1c2VfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7Z2ZzMl9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtuZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuX3YyMyYjMzQ7LAogICAgJiMzNDt2Ym94c2ZfZGlyX2F0b21pY19vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVkZTIGxheWVyLCBhbGxvd2luZyBvcGVuYXQoKSB3aXRoIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSB0byBjcmVhdGUgZGlyZWN0b3JpZXMuIEl0IG1vZGlmaWVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIChmcy9uYW1laS5jLCBmcy9vcGVuLmMpIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKDlwLCBjZXBoLCBmdXNlLCBnZnMyLCBuZnMsIHNtYiwgdmJveHNmKSB0byBoYW5kbGUgdGhlIG5ldyBiZWhhdmlvciBpbiB0aGVpciBhdG9taWNfb3BlbiBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBpbiBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGZpbGUgb3BlbmluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU4Y2RhZDdjMTJjZmE1OTgwOTA2NjU2NTFjMzMzNDlkNDQwYjFkYWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxNjo0MjoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jXG5pbmRleCA1NzgzZDAzMzZmOTZhYy4uYmI1NTVlNWJhMjYxNTAgMTAwNjQ0XG4tLS0gYS9mcy85cC92ZnNfaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlLmNcbkBAIC03NzcsNiAmIzQzOzc3Nyw5IEBAIHY5ZnNfdmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0aW50IHA5X29tb2RlO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbiYjNDM7XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4mIzQzO1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTtcbiBcdFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxuZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG5pbmRleCBmNzM5NmQyMGNiNmNkYy4uZmYzZmFjYjQyMGMyMjQgMTAwNjQ0XG4tLS0gYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG5AQCAtMjM5LDYgJiM0MzsyMzksOSBAQCB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzO1xuIFx0c3RydWN0IHBvc2l4X2FjbCAqcGFjbCA9IE5VTEwsICpkYWNsID0gTlVMTDtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihmbGFncykpXG4mIzQzO1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9mcy9jZXBoL2ZpbGUuYyBiL2ZzL2NlcGgvZmlsZS5jXG5pbmRleCA3MTE2MWYyYjIxNTEzNi4uZTc5YWJkYmQ5ZjYxZTkgMTAwNjQ0XG4tLS0gYS9mcy9jZXBoL2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2VwaC9maWxlLmNcbkBAIC04MTEsNiAmIzQzOzgxMSw5IEBAIGludCBjZXBoX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksXG4gXHQgICAgICBkX3VuaGFzaGVkKGRlbnRyeSkgPyBcJiMzNDt1bmhhc2hlZFwmIzM0OyA6IFwmIzM0O2hhc2hlZFwmIzM0OywgZmxhZ3MsIG1vZGUpO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbiYjNDM7XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4mIzQzO1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBOQU1FX01BWClcbiBcdFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmNcbmluZGV4IDBlMmExMDM5ZmE0M2VhLi5lMDE4Njk1NjVkNWVlNSAxMDA2NDRcbi0tLSBhL2ZzL2Z1c2UvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Z1c2UvZGlyLmNcbkBAIC05MzUsNiAmIzQzOzkzNSw5IEBAIHN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksXG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuIFx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZnVzZV9pc19iYWQoZGlyKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jXG5pbmRleCA4YTc3Nzk0YmJkNGFmYy4uOTg1OWFlMDM0MWE5OWUgMTAwNjQ0XG4tLS0gYS9mcy9nZnMyL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2dmczIvaW5vZGUuY1xuQEAgLTEzODcsNiAmIzQzOzEzODcsOSBAQCBzdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB7XG4gXHRib29sIGV4Y2wgPSAhIShmbGFncyBcdTAwMjYgT19FWENMKTtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihmbGFncykpXG4mIzQzO1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKmQgPSBfX2dmczJfbG9va3VwKGRpciwgZGVudHJ5LCBmaWxlKTtcbiBcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpIHtcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggNWNjOWYwZjQ2NmI4MzAuLmZlZjgyNmMwNGViNTA3IDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuY1xuQEAgLTEzODIsMTMgJiM0MzsxMzgyLDEyIEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcbiBcbiAvKipcbiAgKiBtYXlfY3JlYXRlX2luX3N0aWNreSAtIENoZWNrIHdoZXRoZXIgYW4gT19DUkVBVCBvcGVuIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxuLSAqXHRcdFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHlcbi0gKlx0XHRcdCAgZXhpc3QuXG4mIzQzOyAqXHRcdFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90XG4gICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxuICAqIEBpbm9kZTogdGhlIGlub2RlIG9mIHRoZSBmaWxlIHRvIG9wZW5cbiAgKlxuLSAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxuJiM0MzsgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46XG4gICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZFxuICAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xuICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XG5AQCAtMTQxNiw2ICYjNDM7MTQxNSwxNCBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdGlmIChsaWtlbHkoIShkaXJfbW9kZSBcdTAwMjYgU19JU1ZUWCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreVxuJiM0MztcdCAqIGZvbGRlcnMuIFRoZXJlZm9yZSwgZm9yIHRoZSBTX0lTRElSIGNhc2UsIGRpc2FibGluZ1xuJiM0MztcdCAqIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBpcyBub3QgZW5vdWdoIHRvIGFsbG93IGNyZWF0aW5nIGFcbiYjNDM7XHQgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzXG4mIzQzO1x0ICogbm90IGV4cGVjdGluZyB0aGF0IE9fQ1JFQVR8T19ESVJFQ1RPUlkgaXMgcG9zc2libGUgb24gbmV3ZXJcbiYjNDM7XHQgKiBrZXJuZWxzLlxuJiM0MztcdCAqL1xuIFx0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcilcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTQ0Nyw2ICYjNDM7MTQ1NCwxMiBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdFx0XHRcdFx0ICAgICAgXCYjMzQ7c3RpY2t5X2NyZWF0ZV9yZWd1bGFyXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIgXHUwMDNlPSAyIFx1MDAyNlx1MDAyNiBTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiYjNDM7XHRcdFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcJiMzNDtzdGlja3lfY3JlYXRlX2RpclwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUFDQ0VTO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjc4MSw5ICYjNDM7Mjc5NCwxNCBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncylcbiBcdHJldHVybiBzO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoY29uc3Qgc3RydWN0IHFzdHIgbGFzdClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoYm9vbClsYXN0Lm5hbWVbbGFzdC5sZW5dO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbG9va3VwX2xhc3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4ge1xuLVx0aWYgKG5kLVx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXHUwMDI2XHUwMDI2IG5kLVx1MDAzZWxhc3QubmFtZVtuZC1cdTAwM2VsYXN0Lmxlbl0pXG4mIzQzO1x0aWYgKG5kLVx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXHUwMDI2XHUwMDI2IHRyYWlsaW5nX3NsYXNoZXMobmQtXHUwMDNlbGFzdCkpXG4gXHRcdG5kLVx1MDAzZWZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZO1xuIFxuIFx0cmV0dXJuIHdhbGtfY29tcG9uZW50KG5kLCBXQUxLX1RSQUlMSU5HKTtcbkBAIC00MTY0LDYgJiM0Mzs0MTgyLDI0IEBAIHN0YXRpYyBpbmxpbmUgdW1vZGVfdCB2ZnNfcHJlcGFyZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0cmV0dXJuIG1vZGU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO2ludCB2ZnNfY3JlYXRlX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdCAgICAgICB1bW9kZV90IG1vZGUsIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICpkaXIgPSBkX2lub2RlKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4mIzQzO1x0aW50IGVycm9yO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuJiM0MztcdGVycm9yID0gZGlyLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7XG4mIzQzO1x0aWYgKCFlcnJvcilcbiYjNDM7XHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB2ZnNfY3JlYXRlIC0gY3JlYXRlIG5ldyBmaWxlXG4gICogQGlkbWFwOlx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuQEAgLTQxOTYsMTMgJiM0Mzs0MjMyLDggQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4tXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0cmV0dXJuIGVycm9yO1xuLVx0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCB0cnVlKTtcbi1cdGlmICghZXJyb3IpXG4tXHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4tXHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHZmc19jcmVhdGUpO1xuIFxuQEAgLTQzMTksMjEgJiM0Mzs0MzUwLDQwIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9wZW5fdG9fbmFtZWlfZmxhZ3MoaW50IGZsYWcpXG4gXG4gc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0Y29uc3Qgc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdHVtb2RlX3QgbW9kZSlcbiYjNDM7XHRcdFx0dW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpXG4ge1xuLVx0aW50IGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4mIzQzO1x0c3RydWN0IGlub2RlICpkaXJfaW5vZGUgPSBkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4mIzQzO1x0aW50IGVycm9yO1xuJiM0MztcbiYjNDM7XHRpZiAoY3JlYXRlX2RpcilcbiYjNDM7XHRcdGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuIFx0aWYgKCFmc3VpZGdpZF9oYXNfbWFwcGluZyhkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfc2IsIGlkbWFwKSlcbiBcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXG4tXHRlcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSxcbi1cdFx0XHRcdCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4mIzQzO1x0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBkaXJfaW5vZGUsIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0aWYgKGNyZWF0ZV9kaXIpXG4mIzQzO1x0XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB1bW9kZV90IG9fY3JlYXRlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY3JlYXRlX2RpcilcbiYjNDM7XHRcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIDApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XG4gfVxuIFxuIC8qXG5AQCAtNDM0Nyw3ICYjNDM7NDM5Nyw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuICAqIGJlIHNldC4gIFRoZSBjYWxsZXIgd2lsbCBuZWVkIHRvIHBlcmZvcm0gdGhlIG9wZW4gdGhlbXNlbHZlcy4gIEBwYXRoIHdpbGxcbiAgKiBoYXZlIGJlZW4gdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGRlbnRyeS4gIFRoaXMgbWF5IGJlIG5lZ2F0aXZlLlxuICAqXG4tICogUmV0dXJucyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICogUmV0dXJucyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS4gT24gZXJyb3IgdGhlIHJlZiB0byBkZW50cnkgaXMga2VwdC5cbiAgKi9cbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0XHRcdCAgc3RydWN0IGZpbGUgKmZpbGUsXG5AQCAtNDM1OSw2ICYjNDM7NDQwOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5XG4gXG4gXHRmaWxlLVx1MDAzZV9fZl9wYXRoLmRlbnRyeSA9IERFTlRSWV9OT1RfU0VUO1xuIFx0ZmlsZS1cdTAwM2VfX2ZfcGF0aC5tbnQgPSBwYXRoLVx1MDAzZW1udDtcbiYjNDM7XG4gXHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWF0b21pY19vcGVuKGRpciwgZGVudHJ5LCBmaWxlLFxuIFx0XHRcdFx0ICAgICAgIG9wZW5fdG9fbmFtZWlfZmxhZ3Mob3Blbl9mbGFnKSwgbW9kZSk7XG4gXHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XG5AQCAtNDM3MSwyMSAmIzQzOzQ0MjIsMzkgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlcbiBcdFx0fSBlbHNlIGlmIChXQVJOX09OKGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeSA9PSBERU5UUllfTk9UX1NFVCkpIHtcbiBcdFx0XHRlcnJvciA9IC1FSU87XG4gXHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBkZW50cnkgKm9sZCA9IGRlbnRyeTtcbiYjNDM7XHRcdFx0Ym9vbCByZXBsYWNlZCA9IGZhbHNlO1xuIFx0XHRcdGlmIChmaWxlLVx1MDAzZWZfcGF0aC5kZW50cnkpIHtcbi1cdFx0XHRcdGRwdXQoZGVudHJ5KTtcbiBcdFx0XHRcdGRlbnRyeSA9IGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeTtcbiYjNDM7XHRcdFx0XHRyZXBsYWNlZCA9IGRlbnRyeSAhPSBvbGQ7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICh1bmxpa2VseShkX2lzX25lZ2F0aXZlKGRlbnRyeSkpKVxuJiM0MztcdFx0XHRpZiAodW5saWtlbHkoZF9pc19uZWdhdGl2ZShkZW50cnkpKSkge1xuJiM0MztcdFx0XHRcdC8qIERvIG5vdCBkcm9wIG9yaWdpbmFsIGRlbnRyeSByZWYgb24gZXJyb3IgKi9cbiYjNDM7XHRcdFx0XHRpZiAocmVwbGFjZWQpXG4mIzQzO1x0XHRcdFx0XHRkcHV0KGRlbnRyeSk7XG4gXHRcdFx0XHRlcnJvciA9IC1FTk9FTlQ7XG4mIzQzO1x0XHRcdH0gZWxzZSBpZiAocmVwbGFjZWQpIHtcbiYjNDM7XHRcdFx0XHRkcHV0KG9sZCk7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuJiM0MztcbiBcdGlmIChlcnJvcikge1xuLVx0XHRkcHV0KGRlbnRyeSk7XG4gXHRcdGRlbnRyeSA9IEVSUl9QVFIoZXJyb3IpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpXG4mIzQzO1x0XHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4mIzQzO1x0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRClcbiYjNDM7XHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbiBcdH1cbiYjNDM7XG4gXHRyZXR1cm4gZGVudHJ5O1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZVxuJiM0MztzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7XG4gLypcbiAgKiBMb29rIHVwIGFuZCBtYXliZSBjcmVhdGUgYW5kIG9wZW4gdGhlIGxhc3QgY29tcG9uZW50LlxuICAqXG5AQCAtNDQxMiw2ICYjNDM7NDQ4MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4gXHRpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvciA9IDA7XG4gXHR1bW9kZV90IG1vZGUgPSBvcC1cdTAwM2Vtb2RlO1xuJiM0MztcdGJvb2wgY3JlYXRlX2RpciA9IE9fSVNfTUtESVIob3Blbl9mbGFnKTtcbiBcbiBcdGlmICh1bmxpa2VseShJU19ERUFERElSKGRpcl9pbm9kZSkpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbkBAIC00NDM3LDcgJiM0Mzs0NTA3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0ZGVudHJ5ID0gTlVMTDtcbiBcdH1cbiBcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSkge1xuLVx0XHQvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZl9vcC1cdTAwM2VvcGVuICovXG4mIzQzO1x0XHQvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZG9fb3BlbigpLiAqL1xuIFx0XHRyZXR1cm4gZGVudHJ5O1xuIFx0fVxuIFxuQEAgLTQ0NTksMjEgJiM0Mzs0NTI5LDM1IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTClcbiBcdFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19UUlVOQztcbi1cdFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpci1cdTAwM2VkX2lub2RlLCBtb2RlLCBtb2RlLCBtb2RlKTtcbiYjNDM7XHRcdG1vZGUgPSBvX2NyZWF0ZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIGNyZWF0ZV9kaXIpO1xuIFx0XHRpZiAobGlrZWx5KGdvdF93cml0ZSkpXG4gXHRcdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBcdTAwMjZuZC1cdTAwM2VwYXRoLFxuLVx0XHRcdFx0XHRcdCAgICBkZW50cnksIG1vZGUpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgZGVudHJ5LCBtb2RlLCBjcmVhdGVfZGlyKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGNyZWF0ZV9lcnJvciA9IC1FUk9GUztcbiYjNDM7XHRcdC8qIFJlZnVzZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdGhyb3VnaCBhIGRhbmdsaW5nICh0cmFpbGluZylcbiYjNDM7XHRcdCAqIHN5bWxpbmsuIEZvciByZWd1bGFyIGZpbGVzIHRoaXMgaGFzIGJlZW4gYWxsb3dlZCBoaXN0b3JpY2FsbHlcbiYjNDM7XHRcdCAqIG9uIE9fQ1JFQVQgd2l0aG91dCBPX0VYQ0wuICovXG4mIzQzO1x0XHRpZiAodW5saWtlbHkobmQtXHUwMDNlZGVwdGgpIFx1MDAyNlx1MDAyNiBjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhY3JlYXRlX2Vycm9yKVxuJiM0MztcdFx0XHRjcmVhdGVfZXJyb3IgPSAtRUxPT1A7XG4gXHR9XG4gXHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19DUkVBVDtcbiBcdGlmIChkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VhdG9taWNfb3Blbikge1xuJiM0MztcdFx0c3RydWN0IGRlbnRyeSAqb3JpZ19kZW50cnkgPSBkZW50cnk7XG4gXHRcdGlmIChuZC1cdTAwM2VmbGFncyBcdTAwMjYgTE9PS1VQX0RJUkVDVE9SWSlcbiBcdFx0XHRvcGVuX2ZsYWcgfD0gT19ESVJFQ1RPUlk7XG4gXHRcdGRlbnRyeSA9IGF0b21pY19vcGVuKFx1MDAyNm5kLVx1MDAzZXBhdGgsIGRlbnRyeSwgZmlsZSwgb3Blbl9mbGFnLCBtb2RlKTtcbi1cdFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXHUwMDI2XHUwMDI2IGRlbnRyeSA9PSBFUlJfUFRSKC1FTk9FTlQpKVxuLVx0XHRcdGRlbnRyeSA9IEVSUl9QVFIoY3JlYXRlX2Vycm9yKTtcbiYjNDM7XHRcdGVycm9yID0gUFRSX0VSUl9PUl9aRVJPKGRlbnRyeSk7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoZXJyb3IpKVxuJiM0MztcdFx0XHRkZW50cnkgPSBvcmlnX2RlbnRyeTsgLyogYXRvbWljX29wZW4oKSBrZWVwcyByZWYgb24gZXJyb3IgKi9cbiYjNDM7XHRcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFx1MDAyNlx1MDAyNiBlcnJvciA9PSAtRU5PRU5UKSB7XG4mIzQzO1x0XHRcdC8qIFNob3VsZCBoYXZlIGRvbmUgYSBjcmVhdGUsIGJ1dCB3ZSBhbHJlYWR5IGVycm9yZWQuICovXG4mIzQzO1x0XHRcdGF1ZGl0X2lub2RlX2NoaWxkKGRpci1cdTAwM2VkX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTtcbiYjNDM7XHRcdFx0ZXJyb3IgPSBjcmVhdGVfZXJyb3I7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoZXJyb3IpKVxuJiM0MztcdFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0XHRyZXR1cm4gZGVudHJ5O1xuIFx0fVxuIFxuQEAgLTQ0OTAsMzAgJiM0Mzs0NTc0LDQ0IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0ZGVudHJ5ID0gcmVzO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1x0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlIHx8ICEob3AtXHUwMDNlb3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSkge1xuJiM0MztcdFx0LyogTm8gbmVlZCB0byBjcmVhdGUgYSBmaWxlLiBJZiBsb29rdXAgcmV0dXJuZWQgYSBwb3NpdGl2ZVxuJiM0MztcdFx0ICogZGVudHJ5LCB0aGUgZmlsZSB3aWxsIGJlIG9wZW5lZCBpbiBkb19vcGVuKCkuICovXG4mIzQzO1x0XHRyZXR1cm4gZGVudHJ5O1xuJiM0MztcdH1cbiBcbi1cdC8qIE5lZ2F0aXZlIGRlbnRyeSwganVzdCBjcmVhdGUgdGhlIGZpbGUgKi9cbi1cdGlmICghZGVudHJ5LVx1MDAzZWRfaW5vZGUgXHUwMDI2XHUwMDI2IChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpKSB7XG4tXHRcdC8qIGJ1dCBicmVhayB0aGUgZGlyZWN0b3J5IGxlYXNlIGZpcnN0ISAqL1xuLVx0XHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXJfaW5vZGUsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XG4tXHRcdGlmIChlcnJvcilcbi1cdFx0XHRnb3RvIG91dF9kcHV0O1xuJiM0MztcdC8qIE5lZ2F0aXZlIGRlbnRyeSB3aXRoIE9fQ1JFQVQgZmxhZyBzZXQgKi9cbiYjNDM7XHRhdWRpdF9pbm9kZV9jaGlsZChkaXItXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XG4gXG4tXHRcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XG4tXHRcdGF1ZGl0X2lub2RlX2NoaWxkKGRpcl9pbm9kZSwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XG4tXHRcdGlmICghZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKSB7XG4tXHRcdFx0ZXJyb3IgPSAtRUFDQ0VTO1xuLVx0XHRcdGdvdG8gb3V0X2RwdXQ7XG4tXHRcdH1cbi1cbi1cdFx0ZXJyb3IgPSBkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxuLVx0XHRcdFx0XHRcdG1vZGUsIG9wZW5fZmxhZyBcdTAwMjYgT19FWENMKTtcbi1cdFx0aWYgKGVycm9yKVxuLVx0XHRcdGdvdG8gb3V0X2RwdXQ7XG4tXHR9XG4tXHRpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSBcdTAwMjZcdTAwMjYgIWRlbnRyeS1cdTAwM2VkX2lub2RlKSB7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikpIHtcbiYjNDM7XHRcdC8qIFNob3VsZCBoYXZlIGRvbmUgYSBjcmVhdGUsIGJ1dCB3ZSBhbHJlYWR5IGVycm9yZWQgKi9cbiBcdFx0ZXJyb3IgPSBjcmVhdGVfZXJyb3I7XG4gXHRcdGdvdG8gb3V0X2RwdXQ7XG4gXHR9XG4mIzQzO1xuJiM0MztcdGlmICgoY3JlYXRlX2RpciBcdTAwMjZcdTAwMjYgIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKVxuJiM0MztcdCAgICB8fCAoIWNyZWF0ZV9kaXIgXHUwMDI2XHUwMDI2ICFkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUpKSB7XG4mIzQzO1x0XHRlcnJvciA9IC1FQUNDRVM7XG4mIzQzO1x0XHRnb3RvIG91dF9kcHV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGNyZWF0ZV9kaXIpIHtcbiYjNDM7XHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHJlcykpIHtcbiYjNDM7XHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHJlcyk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRlcnJvciA9IDA7XG4mIzQzO1x0XHRcdGRlbnRyeSA9IHJlcztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZXJyb3IgPSB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBvdXRfZHB1dDtcbiYjNDM7XG4mIzQzO1x0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcbiYjNDM7XG4gXHRyZXR1cm4gZGVudHJ5O1xuIFxuIG91dF9kcHV0OlxuQEAgLTQ1MjEsMTcgJiM0Mzs0NjE5LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRyZXR1cm4gRVJSX1BUUihlcnJvcik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuLXtcbi1cdHJldHVybiAoYm9vbCluZC1cdTAwM2VsYXN0Lm5hbWVbbmQtXHUwMDNlbGFzdC5sZW5dO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXG4ge1xuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuIFxuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkge1xuLVx0XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpXG4mIzQzO1x0XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZC1cdTAwM2VsYXN0KSBcdTAwMjZcdTAwMjYgIShvcGVuX2ZsYWcgXHUwMDI2IE9fRElSRUNUT1JZKSlcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlTRElSKTtcbiBcbiBcdFx0LyogRG9uJiMzOTt0IGJvdGhlciBvbiBhbiBPX0VYQ0wgY3JlYXRlICovXG5AQCAtNDUzOSw3ICYjNDM7NDYzMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZylcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcbiYjNDM7XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZC1cdTAwM2VsYXN0KSlcbiBcdFx0bmQtXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XG4gXG4gXHRkZW50cnkgPSBsb29rdXBfZmFzdChuZCk7XG5AQCAtNDYwMiwxNiAmIzQzOzQ2OTUsMTIgQEAgc3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0XHQgKi9cbiBcdH1cbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpXG4tXHRcdGlub2RlX2xvY2soZGlyLVx1MDAzZWRfaW5vZGUpO1xuJiM0MztcdFx0aW5vZGVfbG9ja19uZXN0ZWQoZGlyLVx1MDAzZWRfaW5vZGUsIElfTVVURVhfUEFSRU5UKTtcbiBcdGVsc2VcbiBcdFx0aW5vZGVfbG9ja19zaGFyZWQoZGlyLVx1MDAzZWRfaW5vZGUpO1xuJiM0MztcbiBcdGRlbnRyeSA9IGxvb2t1cF9vcGVuKG5kLCBmaWxlLCBvcCwgZ290X3dyaXRlLCBcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xuLVx0aWYgKCFJU19FUlIoZGVudHJ5KSkge1xuLVx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpXG4tXHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpci1cdTAwM2VkX2lub2RlLCBkZW50cnkpO1xuLVx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRClcbi1cdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuLVx0fVxuJiM0MztcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpXG4gXHRcdGlub2RlX3VubG9jayhkaXItXHUwMDNlZF9pbm9kZSk7XG4gXHRlbHNlXG5AQCAtNDY2OSw4ICYjNDM7NDc1OCw5IEBAIHN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbiBcdFx0aWYgKChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTCkgXHUwMDI2XHUwMDI2ICEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuLVx0XHRpZiAoZF9pc19kaXIobmQtXHUwMDNlcGF0aC5kZW50cnkpKVxuJiM0MztcdFx0aWYgKCEob3Blbl9mbGFnIFx1MDAyNiBPX0RJUkVDVE9SWSkgXHUwMDI2XHUwMDI2IGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbiBcdFx0XHRyZXR1cm4gLUVJU0RJUjtcbiYjNDM7XG4gXHRcdGVycm9yID0gbWF5X2NyZWF0ZV9pbl9zdGlja3koaWRtYXAsIG5kLFxuIFx0XHRcdFx0XHQgICAgIGRfYmFja2luZ19pbm9kZShuZC1cdTAwM2VwYXRoLmRlbnRyeSkpO1xuIFx0XHRpZiAodW5saWtlbHkoZXJyb3IpKVxuQEAgLTQ5NDYsNyAmIzQzOzUwMzYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmlsZW5hbWVfY3JlYXRlKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSxcbiBcdCAqIERvIHRoZSBmaW5hbCBsb29rdXAuICBTdXBwcmVzcyAmIzM5O2NyZWF0ZSYjMzk7IGlmIHRoZXJlIGlzIGEgdHJhaWxpbmdcbiBcdCAqICYjMzk7LyYjMzk7LCBhbmQgYSBkaXJlY3Rvcnkgd2FzbiYjMzk7dCByZXF1ZXN0ZWQuXG4gXHQgKi9cbi1cdGlmIChsYXN0Lm5hbWVbbGFzdC5sZW5dIFx1MDAyNlx1MDAyNiAhd2FudF9kaXIpXG4mIzQzO1x0aWYgKHRyYWlsaW5nX3NsYXNoZXMobGFzdCkgXHUwMDI2XHUwMDI2ICF3YW50X2RpcilcbiBcdFx0Y3JlYXRlX2ZsYWdzIFx1MDAyNj0gfkxPT0tVUF9DUkVBVEU7XG4gXHRkZW50cnkgPSBzdGFydF9kaXJvcChwYXRoLVx1MDAzZWRlbnRyeSwgXHUwMDI2bGFzdCwgcmV2YWxfZmxhZyB8IGNyZWF0ZV9mbGFncyk7XG4gXHRpZiAoSVNfRVJSKGRlbnRyeSkpXG5AQCAtNTA0MSwzMiAmIzQzOzUxMzEsMTcgQEAgc3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLFxuIFx0XHRwYXRoLVx1MDAzZWRlbnRyeSA9IGRpcjtcbiBcdFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbiBcbi1cdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUsIC8qY3JlYXRlX2Rpcj0qLyBmYWxzZSk7XG4gXHRcdGlmIChjcmVhdGVfZXJyb3IpXG4gXHRcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiBcbi1cdFx0LyogYXRvbWljX29wZW4gd2lsbCBkcHV0KGRlbnRyeSkgb24gZXJyb3IgKi9cbi1cdFx0ZGdldChvcmlnX2RlbnRyeSk7XG4gXHRcdGRlbnRyeSA9IGF0b21pY19vcGVuKHBhdGgsIGRlbnRyeSwgZmlsZSwgZmxhZ3MsIG1vZGUpO1xuIFx0XHRlcnJvciA9IFBUUl9FUlJfT1JfWkVSTyhkZW50cnkpO1xuLVxuLVx0XHRpZiAoSVNfRVJSKGRlbnRyeSkpXG4tXHRcdFx0Lyoga2VlcCB0aGUgb3JpZ2luYWwgKi9cbiYjNDM7XHRcdGlmICh1bmxpa2VseShlcnJvcikpXG4gXHRcdFx0ZGVudHJ5ID0gb3JpZ19kZW50cnk7XG4tXHRcdGVsc2Vcbi1cdFx0XHQvKiBEcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgKi9cbi1cdFx0XHRkcHV0KG9yaWdfZGVudHJ5KTtcbi1cbiBcdFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXHUwMDI2XHUwMDI2IGVycm9yID09IC1FTk9FTlQpXG4gXHRcdFx0ZXJyb3IgPSBjcmVhdGVfZXJyb3I7XG4gXG4tXHRcdGlmICghZXJyb3IpIHtcbi1cdFx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpXG4tXHRcdFx0XHRmc25vdGlmeV9jcmVhdGUoZGlyLVx1MDAzZWRfaW5vZGUsIGRlbnRyeSk7XG4tXHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpXG4tXHRcdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuLVx0XHR9XG4tXG4gXHRcdHBhdGgtXHUwMDNlZGVudHJ5ID0gZGVudHJ5O1xuIFxuIFx0fSBlbHNlIHtcbkBAIC01MjE4LDYgJiM0Mzs1MjkzLDM5IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkXG4gXHRyZXR1cm4gZmlsZW5hbWVfbWtub2RhdChBVF9GRENXRCwgbmFtZSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1x0c3RydWN0IGRlbnRyeSAqZGU7XG4mIzQzO1x0dW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhfbGlua3M7XG4mIzQzO1xuJiM0MztcdGVycm9yID0gLUVNTElOSztcbiYjNDM7XHRpZiAobWF4X2xpbmtzIFx1MDAyNlx1MDAyNiBkaXItXHUwMDNlaV9ubGluayBcdTAwM2U9IG1heF9saW5rcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGlmIChJU19FUlIoZGUpKSB7XG4mIzQzO1x0XHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChkZSkge1xuJiM0MztcdFx0ZHB1dChkZW50cnkpO1xuJiM0MztcdFx0ZGVudHJ5ID0gZGU7XG4mIzQzO1x0fVxuJiM0MztcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcbiYjNDM7XHRyZXR1cm4gZGVudHJ5O1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB2ZnNfbWtkaXIgLSBjcmVhdGUgZGlyZWN0b3J5IHJldHVybmluZyBjb3JyZWN0IGRlbnRyeSBpZiBwb3NzaWJsZVxuICAqIEBpZG1hcDpcdFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuQEAgLTUyNDUsNyAmIzQzOzUzNTMsNiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkZWxlZ2F0ZWRfaW5vZGUpXG4ge1xuIFx0aW50IGVycm9yO1xuLVx0dW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhfbGlua3M7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbiBcbiBcdGVycm9yID0gbWF5X2NyZWF0ZV9kZW50cnkoaWRtYXAsIGRpciwgZGVudHJ5KTtcbkBAIC01MjYxLDI0ICYjNDM7NTM2OCwxMiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGVycjtcbiBcbi1cdGVycm9yID0gLUVNTElOSztcbi1cdGlmIChtYXhfbGlua3MgXHUwMDI2XHUwMDI2IGRpci1cdTAwM2VpX25saW5rIFx1MDAzZT0gbWF4X2xpbmtzKVxuLVx0XHRnb3RvIGVycjtcbi1cbi1cdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGVsZWdhdGVkX2lub2RlKTtcbi1cdGlmIChlcnJvcilcbiYjNDM7XHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGRlKSkge1xuJiM0MztcdFx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcbiBcdFx0Z290byBlcnI7XG4tXG4tXHRkZSA9IGRpci1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4tXHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuLVx0aWYgKElTX0VSUihkZSkpXG4tXHRcdGdvdG8gZXJyO1xuLVx0aWYgKGRlKSB7XG4tXHRcdGRwdXQoZGVudHJ5KTtcbi1cdFx0ZGVudHJ5ID0gZGU7XG4gXHR9XG4tXHRmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeSk7XG4tXHRyZXR1cm4gZGVudHJ5O1xuJiM0MztcdHJldHVybiBkZTtcbiBcbiBlcnI6XG4gXHRlbmRfY3JlYXRpbmcoZGVudHJ5KTtcbkBAIC01NTY1LDcgJiM0Mzs1NjYwLDcgQEAgaW50IGZpbGVuYW1lX3VubGlua2F0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcbiBcdFx0Z290byBleGl0X2Ryb3Bfd3JpdGU7XG4gXG4gXHQvKiBXaHkgbm90IGJlZm9yZT8gQmVjYXVzZSB3ZSB3YW50IGNvcnJlY3QgZXJyb3IgdmFsdWUgKi9cbi1cdGlmICh1bmxpa2VseShsYXN0Lm5hbWVbbGFzdC5sZW5dKSkge1xuJiM0MztcdGlmICh1bmxpa2VseSh0cmFpbGluZ19zbGFzaGVzKGxhc3QpKSkge1xuIFx0XHRpZiAoZF9pc19kaXIoZGVudHJ5KSlcbiBcdFx0XHRlcnJvciA9IC1FSVNESVI7XG4gXHRcdGVsc2VcbkBAIC02MTY3LDE2ICYjNDM7NjI2MiwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSxcbiBcdGlmIChmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSB7XG4gXHRcdGlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHtcbiBcdFx0XHRlcnJvciA9IC1FTk9URElSO1xuLVx0XHRcdGlmIChuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4mIzQzO1x0XHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5ld19sYXN0KSlcbiBcdFx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXHRcdH1cbiBcdH1cbiBcdC8qIHVubGVzcyB0aGUgc291cmNlIGlzIGEgZGlyZWN0b3J5IHRyYWlsaW5nIHNsYXNoZXMgZ2l2ZSAtRU5PVERJUiAqL1xuIFx0aWYgKCFkX2lzX2RpcihyZC5vbGRfZGVudHJ5KSkge1xuIFx0XHRlcnJvciA9IC1FTk9URElSO1xuLVx0XHRpZiAob2xkX2xhc3QubmFtZVtvbGRfbGFzdC5sZW5dKVxuJiM0MztcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMob2xkX2xhc3QpKVxuIFx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4tXHRcdGlmICghKGZsYWdzIFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFx1MDAyNlx1MDAyNiBuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4mIzQzO1x0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZXdfbGFzdCkpXG4gXHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmNcbmluZGV4IGM3YjcyM2MxODYyMGM5Li5jODE1ZDlhYTliNjlkYSAxMDA2NDRcbi0tLSBhL2ZzL25mcy9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzL2Rpci5jXG5AQCAtMjEyMSw2ICYjNDM7MjEyMSw5IEBAIGludCBuZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdGRmcHJpbnRrKFZGUywgXCYjMzQ7TkZTOiBhdG9taWNfb3Blbiglcy8lbGx1KSwgJXBkXFxuXCYjMzQ7LFxuIFx0XHRcdGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGRpci1cdTAwM2VpX2lubywgZGVudHJ5KTtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcbiYjNDM7XHRcdG9wZW5fZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRlcnIgPSBuZnNfY2hlY2tfZmxhZ3Mob3Blbl9mbGFncyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIzMTMsNiAmIzQzOzIzMTYsOSBAQCBpbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ICovXG4gXHRpbnQgZXJyb3IgPSAwO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxuJiM0MztcdFx0b3Blbl9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGlmIChkZW50cnktXHUwMDNlZF9uYW1lLmxlbiBcdTAwM2UgTkZTX1NFUlZFUihkaXIpLVx1MDAzZW5hbWVsZW4pXG4gXHRcdHJldHVybiAtRU5BTUVUT09MT05HO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uY1xuaW5kZXggNDA4OTI1ZDdiZDBiNzcuLjg3ZTg4NjRkOTQ4MDg3IDEwMDY0NFxuLS0tIGEvZnMvb3Blbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vcGVuLmNcbkBAIC0xMTkwLDI5ICYjNDM7MTE5MCwzMCBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcdGlmIChXSUxMX0NSRUFURShmbGFncykpIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlIFx1MDAyNiB+U19JQUxMVUdPKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuJiM0MztcdFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGRElSO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlICE9IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdG9wLVx1MDAzZW1vZGUgPSAwO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIEJsb2NrIGJ1Z3Mgd2hlcmUgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGNyZWF0ZWQgcmVndWxhciBmaWxlcy5cbi1cdCAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0c1xuLVx0ICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC5cbi1cdCAqL1xuLVx0aWYgKChmbGFncyBcdTAwMjYgKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpID09IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdC8qIE5vdyBoYW5kbGUgdGhlIGNyZWF0aXZlIGltcGxlbWVudGF0aW9uIG9mIE9fVE1QRklMRS4gKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgX19PX1RNUEZJTEUpIHtcbiBcdFx0LypcbiBcdFx0ICogSW4gb3JkZXIgdG8gZW5zdXJlIHByb2dyYW1zIGdldCBleHBsaWNpdCBlcnJvcnMgd2hlbiB0cnlpbmdcbiBcdFx0ICogdG8gdXNlIE9fVE1QRklMRSBvbiBvbGQga2VybmVscyB3ZSBlbmZvcmNlIHRoYXQgT19ESVJFQ1RPUllcbi1cdFx0ICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRS5cbiYjNDM7XHRcdCAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUsIGJ1dCB3aXRob3V0IE9fQ1JFQVQuIFRoZVxuJiM0MztcdFx0ICogcmVhc29uIGZvciBkaXNhbGxvd2luZyBPX0NSRUFUfE9fVE1QRklMRSBpcyB0aGF0XG4mIzQzO1x0XHQgKiBPX0RJUkVDVE9SWXxPX0NSRUFUIHVzZWQgdG8gd29yayBhbmQgY3JlYXRlZCBhIHJlZ3VsYXIgZmlsZVxuJiM0MztcdFx0ICogaWYgbm90aGluZyBleGlzdGVkIGF0IHRoZSBvcGVuIHBhdGguIEhlbmNlLCBhbGxvd2luZyB0aGVcbiYjNDM7XHRcdCAqIGNvbWJpbmF0aW9uIHdvdWxkIGhhdmUgY2F1c2VkIE9fQ1JFQVR8T19UTVBGSUxFIHRvIGNyZWF0ZSBhXG4mIzQzO1x0XHQgKiByZWd1bGFyIChub24tdGVtcG9yYXJ5KSBmaWxlIG9uIG9sZCBrZXJuZWxzLCB3aGlsZSB0aGUgY2FsbGVyXG4mIzQzO1x0XHQgKiB3b3VsZCBiZWxpZXZlIHRoZXkgY3JlYXRlZCBhbiBhY3R1YWwgT19UTVBGSUxFLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE9fRElSRUNUT1JZKSlcbiYjNDM7XHRcdGlmICghKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgfHwgKGZsYWdzIFx1MDAyNiBPX0NSRUFUKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0aWYgKCEoYWNjX21vZGUgXHUwMDI2IE1BWV9XUklURSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTI2OSw2ICYjNDM7MTI3MCwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcbiBcdG9wLVx1MDAzZWludGVudCA9IGZsYWdzIFx1MDAyNiBPX1BBVEggPyAwIDogTE9PS1VQX09QRU47XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXF1ZXN0aW5nIHdyaXRlIGFjY2VzcyBvbiBhIGRpcmVjdG9yeSBjYW4gbmV2ZXIgc3VjY2VlZC4gUmF0aGVyXG4mIzQzO1x0ICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXNcbiYjNDM7XHQgKiBhY3R1YWxseSBhIGRpcmVjdG9yeSAoLUVJU0RJUikgb3Igbm90ICgtRU5PVERJUiksIHdlIHNob3J0LWNpcmN1aXRcbiYjNDM7XHQgKiB0byAtRU5PVERJUi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IF9fT19UTVBGSUxFKSBcdTAwMjZcdTAwMjYgKGFjY19tb2RlIFx1MDAyNiBNQVlfV1JJVEUpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9URElSO1xuJiM0MztcbiBcdGlmIChmbGFncyBcdTAwMjYgT19DUkVBVCkge1xuIFx0XHRvcC1cdTAwM2VpbnRlbnQgfD0gTE9PS1VQX0NSRUFURTtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBPX0VYQ0wpIHtcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuaW5kZXggODhhNGExNzg3ZmYwNDcuLjc1YmY4NmNjMDYxMjJlIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC9kaXIuY1xuQEAgLTUzOCw2ICYjNDM7NTM4LDkgQEAgaW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuIFx0aWYgKHVubGlrZWx5KGNpZnNfZm9yY2VkX3NodXRkb3duKGNpZnNfc2IpKSlcbiBcdFx0cmV0dXJuIHNtYl9FSU8oc21iX2Vpb190cmFjZV9mb3JjZWRfc2h1dGRvd24pO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKG9mbGFncykpXG4mIzQzO1x0XHRvZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHQvKlxuIFx0ICogUG9zaXggb3BlbiBpcyBvbmx5IGNhbGxlZCAoYXQgbG9va3VwIHRpbWUpIGZvciBmaWxlIGNyZWF0ZSBub3cuIEZvclxuIFx0ICogb3BlbnMgKHJhdGhlciB0aGFuIGNyZWF0ZXMpLCBiZWNhdXNlIHdlIGRvIG5vdCBrbm93IGlmIGl0IGlzIGEgZmlsZVxuZGlmZiAtLWdpdCBhL2ZzL3Zib3hzZi9kaXIuYyBiL2ZzL3Zib3hzZi9kaXIuY1xuaW5kZXggYzViZDMyNzFhYTk2MTYuLjc3YWUyZjY5NmZkNDM3IDEwMDY0NFxuLS0tIGEvZnMvdmJveHNmL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy92Ym94c2YvZGlyLmNcbkBAIC0zMTgsNiAmIzQzOzMxOCw5IEBAIHN0YXRpYyBpbnQgdmJveHNmX2Rpcl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0dTY0IGhhbmRsZTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2Ym94c2ZfZGlyX2xvb2t1cChwYXJlbnQsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcbmluZGV4IDZhZDZiOWU3YTIyNmFmLi42Yjc1Mjc3YmU1NTlkZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmNudGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5AQCAtMzAsNiAmIzQzOzMwLDEyIEBAXG4gICovXG4gI2RlZmluZSBfX09fUkVHVUxBUlx0XHQoMSBcdTAwM2NcdTAwM2MgMzApXG4gXG4mIzQzOyNkZWZpbmUgT19NS0RJUl9NQVNLXHQoT19DUkVBVCB8IE9fRElSRUNUT1JZKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgT19JU19NS0RJUih1bnNpZ25lZCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoZmxhZ3MgXHUwMDI2IE9fTUtESVJfTUFTSykgPT0gT19NS0RJUl9NQVNLO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciB0aGUgaG93LVx1MDAzZXJlc29sdmUgYXJndW1lbnQ6ICovXG4gI2RlZmluZSBWQUxJRF9SRVNPTFZFX0ZMQUdTIFxcXG4gXHQoUkVTT0xWRV9OT19YREVWIHwgUkVTT0xWRV9OT19NQUdJQ0xJTktTIHwgUkVTT0xWRV9OT19TWU1MSU5LUyB8IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbmluZGV4IDY0YWMwZGZhNDZiN2VmLi5mMjU3YjNkZGI0Nzk0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbkBAIC0xLDQgJiM0MzsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7b3Blbl9vX2NyZWF0X29fZGlyXG4gZG5vdGlmeV90ZXN0XG4gZGV2cHRzX3B0c1xuIGZjbG9nXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxuaW5kZXggODU0MjdkN2YxOWI5YjUuLjY0NWM1MmQyZDRkZWIzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG5AQCAtMSw3ICYjNDM7MSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuIENGTEFHUyAmIzQzOz0gJChLSERSX0lOQ0xVREVTKVxuLVRFU1RfR0VOX1BST0dTIDo9IGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2dcbiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gb3Blbl9vX2NyZWF0X29fZGlyIGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2dcbiBURVNUX0dFTl9QUk9HU19FWFRFTkRFRCA6PSBkbm90aWZ5X3Rlc3RcbiBcbiBpbmNsdWRlIC4uL2xpYi5ta1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZjbG9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG5pbmRleCA1NTFjNGEwZjM5NWExMi4uNTkzYTUxMzZlOTkxOTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG5AQCAtNiwxMCAmIzQzOzYsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW91bnQuaFx1MDAzZVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZGYzY2RiYWUyYzg1MjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jXG5AQCAtMCwwICYjNDM7MSwxOTcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgb3Blbl9vX2NyZWF0X29fZGlyKGludCBkZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLFxuJiM0MztcdFx0XHRcdCAgICAgbW9kZV90IG1vZGUsIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLFxuJiM0MztcdFx0ICAgICAgIGZsYWdzIHwgT19ESVJFQ1RPUlkgfCBPX0NSRUFULCBtb2RlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCBmbGFncykgKHtcdFxcXG4mIzQzO1x0c3RydWN0IHN0YXQgX19zdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGludCBfX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyKGRmZCwgcGF0aG5hbWUsIFNfSVJXWFUsIGZsYWdzKTtcdFxcXG4mIzQzO1x0QVNTRVJUX0dFKF9fZmQsIDApO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0QVNTRVJUX0VRKGZzdGF0KF9fZmQsIFx1MDAyNl9fc3QpLCAwKTtcdFx0XHRcdFxcXG4mIzQzO1x0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcdFx0XHRcdFxcXG4mIzQzO1x0X19mZDtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoZGZkLCBwYXRobmFtZSkgXFxcbiYjNDM7XHRvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCAwKVxuJiM0MztcbiYjNDM7RklYVFVSRShvcGVuX29fY3JlYXRfb19kaXIpIHtcbiYjNDM7XHRjaGFyIGRpcnBhdGhbUEFUSF9NQVhdO1xuJiM0MztcdGludCBkZmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKG9wZW5fb19jcmVhdF9vX2RpcilcbiYjNDM7e1xuJiM0MztcdHN0cmNweShzZWxmLVx1MDAzZWRpcnBhdGgsIFwmIzM0Oy90bXAvb3Blbl9vX2NyZWF0X29fZGlyX3Rlc3QuWFhYWFhYXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfTkUobWtkdGVtcChzZWxmLVx1MDAzZWRpcnBhdGgpLCBOVUxMKTtcbiYjNDM7XHRzZWxmLVx1MDAzZWRmZCA9IG9wZW4oc2VsZi1cdTAwM2VkaXJwYXRoLCBPX0RJUkVDVE9SWSk7XG4mIzQzO1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZGZkLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpXG4mIzQzO3tcbiYjNDM7XHRjbG9zZShzZWxmLVx1MDAzZWRmZCk7XG4mIzQzO1x0cm1kaXIoc2VsZi1cdTAwM2VkaXJwYXRoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRG9lcyBvcGVuX29fY3JlYXRfb19kaXIgcmV0dXJuIGEgZmQgYXQgYWxsPyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZXR1cm5zX2ZkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O25ld2RpclwmIzM0Oyk7XG4mIzQzO1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtuZXdkaXJcJiMzNDssIEFUX1JFTU9WRURJUiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgZmQgbXVzdCByZWZlciB0byB0aGUgZGlyZWN0b3J5IHRoYXQgd2FzIGp1c3QgY3JlYXRlZC4gKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfaXNfY3JlYXRlZF9kaXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0c3RydWN0IHN0YXQgc3RfdmlhX2ZkLCBzdF92aWFfcGF0aDtcbiYjNDM7XHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtjaGVja2RpclwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShmc3RhdChmZCwgXHUwMDI2c3RfdmlhX2ZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7JXMvY2hlY2tkaXJcJiMzNDssIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0YXQocGF0aCwgXHUwMDI2c3RfdmlhX3BhdGgpLCAwKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9pbm8sIHN0X3ZpYV9wYXRoLnN0X2lubyk7XG4mIzQzO1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE1pc3NpbmcgcGFyZW50IGNvbXBvbmVudCBtdXN0IGZhaWwgd2l0aCBFTk9FTlQuICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub2VudF9taXNzaW5nX3BhcmVudClcbiYjNDM7e1xuJiM0MztcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O25vbmV4aXN0ZW50L2NoaWxkXCYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQW4gaW52YWxpZCBkZmQgbXVzdCBmYWlsIHdpdGggRUJBREYuICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGViYWRmKVxuJiM0Mzt7XG4mIzQzO1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcigtNDIsIFwmIzM0O2JhZGZkaXJcJiMzNDssIFNfSVJXWFUsIDApLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFQkFERik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEEgZGZkIHRoYXQgcG9pbnRzIHRvIGEgZmlsZSAobm90IGEgZGlyZWN0b3J5KSBtdXN0IGZhaWwgd2l0aCBFTk9URElSLiAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm90ZGlyX2RmZClcbiYjNDM7e1xuJiM0MztcdGludCBmaWxlX2ZkO1xuJiM0MztcbiYjNDM7XHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtmaWxlXCYjMzQ7LFxuJiM0MztcdFx0XHQgT19DUkVBVCB8IE9fV1JPTkxZLCBTX0lSV1hVKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoZmlsZV9mZCwgXCYjMzQ7c3ViZGlyXCYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtmaWxlXCYjMzQ7LCAwKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9fRVhDTCB0b2dldGhlciB3aXRoIE9fQ1JFQVR8T19ESVJFQ1RPUlkgbXVzdCBmYWlsIHdpdGggRUVYSVNUIHdoZW5cbiYjNDM7ICogdGhlIHRhcmdldCBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuXG4mIzQzOyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBvX2V4Y2xfZWV4aXN0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtleGNsZGlyXCYjMzQ7LCBPX0VYQ0wpO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtleGNsZGlyXCYjMzQ7LCBTX0lSV1hVLCBPX0VYQ0wpLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFRVhJU1QpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O2V4Y2xkaXJcJiMzNDssIEFUX1JFTU9WRURJUiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBPX0NSRUFUfE9fRElSRUNUT1JZIG9uIGEgcGF0aCB0aGF0IGFscmVhZHkgZXhpc3RzIGFzIGEgcmVndWxhciBmaWxlXG4mIzQzOyAqIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuXG4mIzQzOyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBleGlzdGluZ19maWxlX2Vub3RkaXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmlsZV9mZDtcbiYjNDM7XG4mIzQzO1x0ZmlsZV9mZCA9IG9wZW5hdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7cmVnZmlsZVwmIzM0OyxcbiYjNDM7XHRcdFx0IE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XG4mIzQzO1x0QVNTRVJUX0dFKGZpbGVfZmQsIDApO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3JlZ2ZpbGVcJiMzNDssIFNfSVJXWFUsIDApLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtyZWdmaWxlXCYjMzQ7LCAwKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgY29tYmluZWQgd2l0aCBhIHdyaXRhYmxlIGFjY2VzcyBtb2RlIG11c3QgYmVcbiYjNDM7ICogcmVqZWN0ZWQ6IGEgZGlyZWN0b3J5IGNhbm5vdCBiZSBvcGVuZWQgZm9yIHdyaXRpbmcuXG4mIzQzOyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZWplY3RzX3dyaXRhYmxlX2FjY19tb2RlKVxuJiM0Mzt7XG4mIzQzO1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7cmR3cmRpclwmIzM0OywgU19JUldYVSwgT19SRFdSKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4mIzQzO1x0LyogQ2xlYW4gdXAgaWYgdGhlIGtlcm5lbCBjcmVhdGVkIHRoZSBkaXJlY3RvcnkgYW55d2F5LiAqL1xuJiM0MztcdHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtyZHdyZGlyXCYjMzQ7LCBBVF9SRU1PVkVESVIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBvcGVuYXQoT19DUkVBVCkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIGJ1dCB3aXRob3V0IE9fRElSRUNUT1JZXG4mIzQzOyAqIG11c3QgZmFpbCB3aXRoIEVJU0RJUiBhbmQgbXVzdCBub3QgY3JlYXRlIGFueXRoaW5nIGF0IHRoZSBwYXRoLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgdHJhaWxpbmdfc2xhc2hfbm9fb19kaXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0c3RydWN0IHN0YXQgc3Q7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDt0cmFpbGluZy9cJiMzNDssIE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XG4mIzQzO1x0RVhQRUNUX0VRKGZkLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFSVNESVIpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoZnN0YXRhdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7dHJhaWxpbmdcJiMzNDssIFx1MDAyNnN0LCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbiYjNDM7XG4mIzQzO1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqL1xuJiM0MztcdGlmIChmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0dW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3RyYWlsaW5nXCYjMzQ7LCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIHJldHVybmVkIGZkIG11c3QgYmUgdXNhYmxlIGFzIGEgZGZkIGZvciBmdXJ0aGVyICphdCgpIGNhbGxzLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZClcbiYjNDM7e1xuJiM0MztcdGludCBwYXJlbnRfZmQsIGNoaWxkX2ZkO1xuJiM0MztcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1xuJiM0MztcdHBhcmVudF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtwYXJlbnRcJiMzNDspO1xuJiM0MztcdGNoaWxkX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQocGFyZW50X2ZkLCBcJiMzNDtjaGlsZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShjaGlsZF9mZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShwYXJlbnRfZmQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDslcy9wYXJlbnQvY2hpbGRcJiMzNDssIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4mIzQzO1x0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcbiYjNDM7XHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0OyVzL3BhcmVudFwmIzM0Oywgc2VsZi1cdTAwM2VkaXJwYXRoKTtcbiYjNDM7XHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0hBUk5FU1NfTUFJTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7LAogICAgJiMzNDtHRlMyX0ZTJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O1ZCT1hTRl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhdGhfb3BlbmF0JiMzNDssCiAgICAmIzM0O2RvX3N5c19vcGVuJiMzNDssCiAgICAmIzM0O3Zmc19ta2RpciYjMzQ7LAogICAgJiMzNDt2ZnNfY3JlYXRlJiMzNDssCiAgICAmIzM0O2RlbnRyeV9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfdW5saW5rYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfcmVuYW1lYXQyJiMzNDssCiAgICAmIzM0O2NpZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7djlmc192ZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7djlmc192ZnNfYXRvbWljX29wZW5fZG90bCYjMzQ7LAogICAgJiMzNDtjZXBoX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2Z1c2VfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7Z2ZzMl9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtuZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuX3YyMyYjMzQ7LAogICAgJiMzNDt2Ym94c2ZfZGlyX2F0b21pY19vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVkZTIGxheWVyLCBhbGxvd2luZyBvcGVuYXQoKSB3aXRoIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSB0byBjcmVhdGUgZGlyZWN0b3JpZXMuIEl0IG1vZGlmaWVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIChmcy9uYW1laS5jLCBmcy9vcGVuLmMpIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKDlwLCBjZXBoLCBmdXNlLCBnZnMyLCBuZnMsIHNtYiwgdmJveHNmKSB0byBoYW5kbGUgdGhlIG5ldyBiZWhhdmlvciBpbiB0aGVpciBhdG9taWNfb3BlbiBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBpbiBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGZpbGUgb3BlbmluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZThjZGFkN2MxMmNmYTU5ODA5MDY2NTY1MWMzMzM0OWQ0NDBiMWRhZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDI5IDE2OjQyOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuYwppbmRleCA1NzgzZDAzMzZmOTZhYy4uYmI1NTVlNWJhMjYxNTAgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzLzlwL3Zmc19pbm9kZS5jCkBAIC03NzcsNiAmIzQzOzc3Nyw5IEBAIHY5ZnNfdmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgcDlfb21vZGU7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7CiAJCXN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7CiAJCWlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSkKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jCmluZGV4IGY3Mzk2ZDIwY2I2Y2RjLi5mZjNmYWNiNDIwYzIyNCAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jCkBAIC0yMzksNiAmIzQzOzIzOSw5IEBAIHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOwogCXN0cnVjdCBwb3NpeF9hY2wgKnBhY2wgPSBOVUxMLCAqZGFjbCA9IE5VTEw7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7CiAJCXN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7CiAJCWlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSkKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZmlsZS5jIGIvZnMvY2VwaC9maWxlLmMKaW5kZXggNzExNjFmMmIyMTUxMzYuLmU3OWFiZGJkOWY2MWU5IDEwMDY0NAotLS0gYS9mcy9jZXBoL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jZXBoL2ZpbGUuYwpAQCAtODExLDYgJiM0Mzs4MTEsOSBAQCBpbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCSAgICAgIGRpciwgY2VwaF92aW5vcChkaXIpLCBkZW50cnksIGRlbnRyeSwKIAkgICAgICBkX3VuaGFzaGVkKGRlbnRyeSkgPyAmIzM0O3VuaGFzaGVkJiMzNDsgOiAmIzM0O2hhc2hlZCYjMzQ7LCBmbGFncywgbW9kZSk7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkZW50cnktJmd0O2RfbmFtZS5sZW4gJmd0OyBOQU1FX01BWCkKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jCmluZGV4IDBlMmExMDM5ZmE0M2VhLi5lMDE4Njk1NjVkNWVlNSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mdXNlL2Rpci5jCkBAIC05MzUsNiAmIzQzOzkzNSw5IEBAIHN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksCiAJc3RydWN0IG1udF9pZG1hcCAqaWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oZGlyKTsKIAomIzQzOwlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQlmbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGZ1c2VfaXNfYmFkKGRpcikpCiAJCXJldHVybiAtRUlPOwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmMKaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjk4NTlhZTAzNDFhOTllIDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZ2ZzMi9pbm9kZS5jCkBAIC0xMzg3LDYgJiM0MzsxMzg3LDkgQEAgc3RhdGljIGludCBnZnMyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiB7CiAJYm9vbCBleGNsID0gISEoZmxhZ3MgJmFtcDsgT19FWENMKTsKIAomIzQzOwlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQlmbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHsKIAkJc3RydWN0IGRlbnRyeSAqZCA9IF9fZ2ZzMl9sb29rdXAoZGlyLCBkZW50cnksIGZpbGUpOwogCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCkgewpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggNWNjOWYwZjQ2NmI4MzAuLmZlZjgyNmMwNGViNTA3IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTEzODIsMTMgJiM0MzsxMzgyLDEyIEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaykKIAogLyoqCiAgKiBtYXlfY3JlYXRlX2luX3N0aWNreSAtIENoZWNrIHdoZXRoZXIgYW4gT19DUkVBVCBvcGVuIGluIGEgc3RpY2t5IGRpcmVjdG9yeQotICoJCQkgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzIHRoYXQgYWxyZWFkeQotICoJCQkgIGV4aXN0LgomIzQzOyAqCQkJICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90CiAgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb20KICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGEKICAqIEBpbm9kZTogdGhlIGlub2RlIG9mIHRoZSBmaWxlIHRvIG9wZW4KICAqCi0gKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjoKJiM0MzsgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46CiAgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkCiAgKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMKICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5CkBAIC0xNDE2LDYgJiM0MzsxNDE1LDE0IEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCWlmIChsaWtlbHkoIShkaXJfbW9kZSAmYW1wOyBTX0lTVlRYKSkpCiAJCXJldHVybiAwOwogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreQomIzQzOwkgKiBmb2xkZXJzLiBUaGVyZWZvcmUsIGZvciB0aGUgU19JU0RJUiBjYXNlLCBkaXNhYmxpbmcKJiM0MzsJICogc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyIGlzIG5vdCBlbm91Z2ggdG8gYWxsb3cgY3JlYXRpbmcgYQomIzQzOwkgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzCiYjNDM7CSAqIG5vdCBleHBlY3RpbmcgdGhhdCBPX0NSRUFUfE9fRElSRUNUT1JZIGlzIHBvc3NpYmxlIG9uIG5ld2VyCiYjNDM7CSAqIGtlcm5lbHMuCiYjNDM7CSAqLwogCWlmIChTX0lTUkVHKGlub2RlLSZndDtpX21vZGUpICZhbXA7JmFtcDsgIXN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikKIAkJcmV0dXJuIDA7CiAKQEAgLTE0NDcsNiAmIzQzOzE0NTQsMTIgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsCiAJCQkJCSAgICAgICYjMzQ7c3RpY2t5X2NyZWF0ZV9yZWd1bGFyJiMzNDspOwogCQkJcmV0dXJuIC1FQUNDRVM7CiAJCX0KJiM0MzsKJiM0MzsJCWlmIChzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIgJmd0Oz0gMiAmYW1wOyZhbXA7IFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpIHsKJiM0MzsJCQlhdWRpdF9sb2dfcGF0aF9kZW5pZWQoQVVESVRfQU5PTV9DUkVBVCwKJiM0MzsJCQkJCSAgICAgICYjMzQ7c3RpY2t5X2NyZWF0ZV9kaXImIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FQUNDRVM7CiYjNDM7CQl9CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNzgxLDkgJiM0MzsyNzk0LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKQogCXJldHVybiBzOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoY29uc3Qgc3RydWN0IHFzdHIgbGFzdCkKJiM0Mzt7CiYjNDM7CXJldHVybiAoYm9vbClsYXN0Lm5hbWVbbGFzdC5sZW5dOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbG9va3VwX2xhc3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0JaWYgKG5kLSZndDtsYXN0X3R5cGUgPT0gTEFTVF9OT1JNICZhbXA7JmFtcDsgbmQtJmd0O2xhc3QubmFtZVtuZC0mZ3Q7bGFzdC5sZW5dKQomIzQzOwlpZiAobmQtJmd0O2xhc3RfdHlwZSA9PSBMQVNUX05PUk0gJmFtcDsmYW1wOyB0cmFpbGluZ19zbGFzaGVzKG5kLSZndDtsYXN0KSkKIAkJbmQtJmd0O2ZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZOwogCiAJcmV0dXJuIHdhbGtfY29tcG9uZW50KG5kLCBXQUxLX1RSQUlMSU5HKTsKQEAgLTQxNjQsNiAmIzQzOzQxODIsMjQgQEAgc3RhdGljIGlubGluZSB1bW9kZV90IHZmc19wcmVwYXJlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJcmV0dXJuIG1vZGU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7aW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJICAgICAgIHVtb2RlX3QgbW9kZSwgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRfaW5vZGUoZGVudHJ5LSZndDtkX3BhcmVudCk7CiYjNDM7CWludCBlcnJvcjsKJiM0MzsKJiM0MzsJZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJZXJyb3IgPSBkaXItJmd0O2lfb3AtJmd0O2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIHRydWUpOwomIzQzOwlpZiAoIWVycm9yKQomIzQzOwkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKIC8qKgogICogdmZzX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgZmlsZQogICogQGlkbWFwOglpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tCkBAIC00MTk2LDEzICYjNDM7NDIzMiw4IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwKIAllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7Ci0JZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0JZXJyb3IgPSBkaXItJmd0O2lfb3AtJmd0O2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIHRydWUpOwotCWlmICghZXJyb3IpCi0JCWZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7Ci0JcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwlyZXR1cm4gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRpKTsKIH0KIEVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7CiAKQEAgLTQzMTksMjEgJiM0Mzs0MzUwLDQwIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9wZW5fdG9fbmFtZWlfZmxhZ3MoaW50IGZsYWcpCiAKIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJY29uc3Qgc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJdW1vZGVfdCBtb2RlKQomIzQzOwkJCXVtb2RlX3QgbW9kZSwgYm9vbCBjcmVhdGVfZGlyKQogewotCWludCBlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlOwomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChjcmVhdGVfZGlyKQomIzQzOwkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZWxzZQomIzQzOwkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAogCWlmICghZnN1aWRnaWRfaGFzX21hcHBpbmcoZGlyLSZndDtkZW50cnktJmd0O2Rfc2IsIGlkbWFwKSkKIAkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAKLQllcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLAotCQkJCSBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7CiYjNDM7CWVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwlpZiAoY3JlYXRlX2RpcikKJiM0MzsJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwllbHNlCiYjNDM7CQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnJvcjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1bW9kZV90IG9fY3JlYXRlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQljb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpCiYjNDM7ewomIzQzOwlpZiAoY3JlYXRlX2RpcikKJiM0MzsJCXJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIDApOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpOwogfQogCiAvKgpAQCAtNDM0Nyw3ICYjNDM7NDM5Nyw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogICogYmUgc2V0LiAgVGhlIGNhbGxlciB3aWxsIG5lZWQgdG8gcGVyZm9ybSB0aGUgb3BlbiB0aGVtc2VsdmVzLiAgQHBhdGggd2lsbAogICogaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIG5ldyBkZW50cnkuICBUaGlzIG1heSBiZSBuZWdhdGl2ZS4KICAqCi0gKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgomIzQzOyAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuIE9uIGVycm9yIHRoZSByZWYgdG8gZGVudHJ5IGlzIGtlcHQuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJCSAgc3RydWN0IGZpbGUgKmZpbGUsCkBAIC00MzU5LDYgJiM0Mzs0NDA5LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkKIAogCWZpbGUtJmd0O19fZl9wYXRoLmRlbnRyeSA9IERFTlRSWV9OT1RfU0VUOwogCWZpbGUtJmd0O19fZl9wYXRoLm1udCA9IHBhdGgtJmd0O21udDsKJiM0MzsKIAllcnJvciA9IGRpci0mZ3Q7aV9vcC0mZ3Q7YXRvbWljX29wZW4oZGlyLCBkZW50cnksIGZpbGUsCiAJCQkJICAgICAgIG9wZW5fdG9fbmFtZWlfZmxhZ3Mob3Blbl9mbGFnKSwgbW9kZSk7CiAJZF9sb29rdXBfZG9uZShkZW50cnkpOwpAQCAtNDM3MSwyMSAmIzQzOzQ0MjIsMzkgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkKIAkJfSBlbHNlIGlmIChXQVJOX09OKGZpbGUtJmd0O2ZfcGF0aC5kZW50cnkgPT0gREVOVFJZX05PVF9TRVQpKSB7CiAJCQllcnJvciA9IC1FSU87CiAJCX0gZWxzZSB7CiYjNDM7CQkJc3RydWN0IGRlbnRyeSAqb2xkID0gZGVudHJ5OwomIzQzOwkJCWJvb2wgcmVwbGFjZWQgPSBmYWxzZTsKIAkJCWlmIChmaWxlLSZndDtmX3BhdGguZGVudHJ5KSB7Ci0JCQkJZHB1dChkZW50cnkpOwogCQkJCWRlbnRyeSA9IGZpbGUtJmd0O2ZfcGF0aC5kZW50cnk7CiYjNDM7CQkJCXJlcGxhY2VkID0gZGVudHJ5ICE9IG9sZDsKIAkJCX0KLQkJCWlmICh1bmxpa2VseShkX2lzX25lZ2F0aXZlKGRlbnRyeSkpKQomIzQzOwkJCWlmICh1bmxpa2VseShkX2lzX25lZ2F0aXZlKGRlbnRyeSkpKSB7CiYjNDM7CQkJCS8qIERvIG5vdCBkcm9wIG9yaWdpbmFsIGRlbnRyeSByZWYgb24gZXJyb3IgKi8KJiM0MzsJCQkJaWYgKHJlcGxhY2VkKQomIzQzOwkJCQkJZHB1dChkZW50cnkpOwogCQkJCWVycm9yID0gLUVOT0VOVDsKJiM0MzsJCQl9IGVsc2UgaWYgKHJlcGxhY2VkKSB7CiYjNDM7CQkJCWRwdXQob2xkKTsKJiM0MzsJCQl9CiAJCX0KIAl9CiYjNDM7CiAJaWYgKGVycm9yKSB7Ci0JCWRwdXQoZGVudHJ5KTsKIAkJZGVudHJ5ID0gRVJSX1BUUihlcnJvcik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0NSRUFURUQpCiYjNDM7CQkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKJiM0MzsJCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfT1BFTkVEKQomIzQzOwkJCWZzbm90aWZ5X29wZW4oZmlsZSk7CiAJfQomIzQzOwogCXJldHVybiBkZW50cnk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwKJiM0MzsJCQkJIHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCwKJiM0MzsJCQkJIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7CiAvKgogICogTG9vayB1cCBhbmQgbWF5YmUgY3JlYXRlIGFuZCBvcGVuIHRoZSBsYXN0IGNvbXBvbmVudC4KICAqCkBAIC00NDEyLDYgJiM0Mzs0NDgxLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJaW50IGVycm9yLCBjcmVhdGVfZXJyb3IgPSAwOwogCXVtb2RlX3QgbW9kZSA9IG9wLSZndDttb2RlOwomIzQzOwlib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wZW5fZmxhZyk7CiAKIAlpZiAodW5saWtlbHkoSVNfREVBRERJUihkaXJfaW5vZGUpKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CkBAIC00NDM3LDcgJiM0Mzs0NTA3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJZGVudHJ5ID0gTlVMTDsKIAl9CiAJaWYgKGRlbnRyeS0mZ3Q7ZF9pbm9kZSkgewotCQkvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZl9vcC0mZ3Q7b3BlbiAqLwomIzQzOwkJLyogQ2FjaGVkIHBvc2l0aXZlIGRlbnRyeTogd2lsbCBvcGVuIGluIGRvX29wZW4oKS4gKi8KIAkJcmV0dXJuIGRlbnRyeTsKIAl9CiAKQEAgLTQ0NTksMjEgJiM0Mzs0NTI5LDM1IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJaWYgKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSB7CiAJCWlmIChvcGVuX2ZsYWcgJmFtcDsgT19FWENMKQogCQkJb3Blbl9mbGFnICZhbXA7PSB+T19UUlVOQzsKLQkJbW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpci0mZ3Q7ZF9pbm9kZSwgbW9kZSwgbW9kZSwgbW9kZSk7CiYjNDM7CQltb2RlID0gb19jcmVhdGVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBjcmVhdGVfZGlyKTsKIAkJaWYgKGxpa2VseShnb3Rfd3JpdGUpKQogCQkJY3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCAmYW1wO25kLSZndDtwYXRoLAotCQkJCQkJICAgIGRlbnRyeSwgbW9kZSk7CiYjNDM7CQkJCQkJICAgIGRlbnRyeSwgbW9kZSwgY3JlYXRlX2Rpcik7CiAJCWVsc2UKIAkJCWNyZWF0ZV9lcnJvciA9IC1FUk9GUzsKJiM0MzsJCS8qIFJlZnVzZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdGhyb3VnaCBhIGRhbmdsaW5nICh0cmFpbGluZykKJiM0MzsJCSAqIHN5bWxpbmsuIEZvciByZWd1bGFyIGZpbGVzIHRoaXMgaGFzIGJlZW4gYWxsb3dlZCBoaXN0b3JpY2FsbHkKJiM0MzsJCSAqIG9uIE9fQ1JFQVQgd2l0aG91dCBPX0VYQ0wuICovCiYjNDM7CQlpZiAodW5saWtlbHkobmQtJmd0O2RlcHRoKSAmYW1wOyZhbXA7IGNyZWF0ZV9kaXIgJmFtcDsmYW1wOyAhY3JlYXRlX2Vycm9yKQomIzQzOwkJCWNyZWF0ZV9lcnJvciA9IC1FTE9PUDsKIAl9CiAJaWYgKGNyZWF0ZV9lcnJvcikKIAkJb3Blbl9mbGFnICZhbXA7PSB+T19DUkVBVDsKIAlpZiAoZGlyX2lub2RlLSZndDtpX29wLSZndDthdG9taWNfb3BlbikgewomIzQzOwkJc3RydWN0IGRlbnRyeSAqb3JpZ19kZW50cnkgPSBkZW50cnk7CiAJCWlmIChuZC0mZ3Q7ZmxhZ3MgJmFtcDsgTE9PS1VQX0RJUkVDVE9SWSkKIAkJCW9wZW5fZmxhZyB8PSBPX0RJUkVDVE9SWTsKIAkJZGVudHJ5ID0gYXRvbWljX29wZW4oJmFtcDtuZC0mZ3Q7cGF0aCwgZGVudHJ5LCBmaWxlLCBvcGVuX2ZsYWcsIG1vZGUpOwotCQlpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSAmYW1wOyZhbXA7IGRlbnRyeSA9PSBFUlJfUFRSKC1FTk9FTlQpKQotCQkJZGVudHJ5ID0gRVJSX1BUUihjcmVhdGVfZXJyb3IpOwomIzQzOwkJZXJyb3IgPSBQVFJfRVJSX09SX1pFUk8oZGVudHJ5KTsKJiM0MzsJCWlmICh1bmxpa2VseShlcnJvcikpCiYjNDM7CQkJZGVudHJ5ID0gb3JpZ19kZW50cnk7IC8qIGF0b21pY19vcGVuKCkga2VlcHMgcmVmIG9uIGVycm9yICovCiYjNDM7CQlpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSAmYW1wOyZhbXA7IGVycm9yID09IC1FTk9FTlQpIHsKJiM0MzsJCQkvKiBTaG91bGQgaGF2ZSBkb25lIGEgY3JlYXRlLCBidXQgd2UgYWxyZWFkeSBlcnJvcmVkLiAqLwomIzQzOwkJCWF1ZGl0X2lub2RlX2NoaWxkKGRpci0mZ3Q7ZF9pbm9kZSwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7CiYjNDM7CQkJZXJyb3IgPSBjcmVhdGVfZXJyb3I7CiYjNDM7CQl9CiYjNDM7CQlpZiAodW5saWtlbHkoZXJyb3IpKQomIzQzOwkJCWdvdG8gb3V0X2RwdXQ7CiAJCXJldHVybiBkZW50cnk7CiAJfQogCkBAIC00NDkwLDMwICYjNDM7NDU3NCw0NCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJZGVudHJ5ID0gcmVzOwogCQl9CiAJfQomIzQzOwlpZiAoZGVudHJ5LSZndDtkX2lub2RlIHx8ICEob3AtJmd0O29wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSkgewomIzQzOwkJLyogTm8gbmVlZCB0byBjcmVhdGUgYSBmaWxlLiBJZiBsb29rdXAgcmV0dXJuZWQgYSBwb3NpdGl2ZQomIzQzOwkJICogZGVudHJ5LCB0aGUgZmlsZSB3aWxsIGJlIG9wZW5lZCBpbiBkb19vcGVuKCkuICovCiYjNDM7CQlyZXR1cm4gZGVudHJ5OwomIzQzOwl9CiAKLQkvKiBOZWdhdGl2ZSBkZW50cnksIGp1c3QgY3JlYXRlIHRoZSBmaWxlICovCi0JaWYgKCFkZW50cnktJmd0O2RfaW5vZGUgJmFtcDsmYW1wOyAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpKSB7Ci0JCS8qIGJ1dCBicmVhayB0aGUgZGlyZWN0b3J5IGxlYXNlIGZpcnN0ISAqLwotCQllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXJfaW5vZGUsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2RwdXQ7CiYjNDM7CS8qIE5lZ2F0aXZlIGRlbnRyeSB3aXRoIE9fQ1JFQVQgZmxhZyBzZXQgKi8KJiM0MzsJYXVkaXRfaW5vZGVfY2hpbGQoZGlyLSZndDtkX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTsKIAotCQlmaWxlLSZndDtmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDsKLQkJYXVkaXRfaW5vZGVfY2hpbGQoZGlyX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTsKLQkJaWYgKCFkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O2NyZWF0ZSkgewotCQkJZXJyb3IgPSAtRUFDQ0VTOwotCQkJZ290byBvdXRfZHB1dDsKLQkJfQotCi0JCWVycm9yID0gZGlyX2lub2RlLSZndDtpX29wLSZndDtjcmVhdGUoaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LAotCQkJCQkJbW9kZSwgb3Blbl9mbGFnICZhbXA7IE9fRVhDTCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2RwdXQ7Ci0JfQotCWlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpICZhbXA7JmFtcDsgIWRlbnRyeS0mZ3Q7ZF9pbm9kZSkgewomIzQzOwlpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSkgewomIzQzOwkJLyogU2hvdWxkIGhhdmUgZG9uZSBhIGNyZWF0ZSwgYnV0IHdlIGFscmVhZHkgZXJyb3JlZCAqLwogCQllcnJvciA9IGNyZWF0ZV9lcnJvcjsKIAkJZ290byBvdXRfZHB1dDsKIAl9CiYjNDM7CiYjNDM7CWlmICgoY3JlYXRlX2RpciAmYW1wOyZhbXA7ICFkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O21rZGlyKQomIzQzOwkgICAgfHwgKCFjcmVhdGVfZGlyICZhbXA7JmFtcDsgIWRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKSkgewomIzQzOwkJZXJyb3IgPSAtRUFDQ0VTOwomIzQzOwkJZ290byBvdXRfZHB1dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY3JlYXRlX2RpcikgewomIzQzOwkJc3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LAomIzQzOwkJCQkJCSAgICAgICBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpOwomIzQzOwkJaWYgKElTX0VSUihyZXMpKSB7CiYjNDM7CQkJZXJyb3IgPSBQVFJfRVJSKHJlcyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWVycm9yID0gMDsKJiM0MzsJCQlkZW50cnkgPSByZXM7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnJvciA9IHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpOwomIzQzOwl9CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gb3V0X2RwdXQ7CiYjNDM7CiYjNDM7CWZpbGUtJmd0O2ZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEOwomIzQzOwogCXJldHVybiBkZW50cnk7CiAKIG91dF9kcHV0OgpAQCAtNDUyMSwxNyAmIzQzOzQ2MTksMTIgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKHN0cnVjdCBuYW1laWRhdGEgKm5kKQotewotCXJldHVybiAoYm9vbCluZC0mZ3Q7bGFzdC5uYW1lW25kLSZndDtsYXN0Lmxlbl07Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZykKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAKIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpIHsKLQkJaWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKQomIzQzOwkJaWYgKHRyYWlsaW5nX3NsYXNoZXMobmQtJmd0O2xhc3QpICZhbXA7JmFtcDsgIShvcGVuX2ZsYWcgJmFtcDsgT19ESVJFQ1RPUlkpKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVJU0RJUik7CiAKIAkJLyogRG9uJiMzOTt0IGJvdGhlciBvbiBhbiBPX0VYQ0wgY3JlYXRlICovCkBAIC00NTM5LDcgJiM0Mzs0NjMyLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKQogCQkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKQomIzQzOwlpZiAodHJhaWxpbmdfc2xhc2hlcyhuZC0mZ3Q7bGFzdCkpCiAJCW5kLSZndDtmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTsKIAogCWRlbnRyeSA9IGxvb2t1cF9mYXN0KG5kKTsKQEAgLTQ2MDIsMTYgJiM0Mzs0Njk1LDEyIEBAIHN0YXRpYyBjb25zdCBjaGFyICpvcGVuX2xhc3RfbG9va3VwcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKIAkJICovCiAJfQogCWlmIChvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkKLQkJaW5vZGVfbG9jayhkaXItJmd0O2RfaW5vZGUpOwomIzQzOwkJaW5vZGVfbG9ja19uZXN0ZWQoZGlyLSZndDtkX2lub2RlLCBJX01VVEVYX1BBUkVOVCk7CiAJZWxzZQogCQlpbm9kZV9sb2NrX3NoYXJlZChkaXItJmd0O2RfaW5vZGUpOwomIzQzOwogCWRlbnRyeSA9IGxvb2t1cF9vcGVuKG5kLCBmaWxlLCBvcCwgZ290X3dyaXRlLCAmYW1wO2RlbGVnYXRlZF9pbm9kZSk7Ci0JaWYgKCFJU19FUlIoZGVudHJ5KSkgewotCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0NSRUFURUQpCi0JCQlmc25vdGlmeV9jcmVhdGUoZGlyLSZndDtkX2lub2RlLCBkZW50cnkpOwotCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCkKLQkJCWZzbm90aWZ5X29wZW4oZmlsZSk7Ci0JfQomIzQzOwogCWlmIChvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkKIAkJaW5vZGVfdW5sb2NrKGRpci0mZ3Q7ZF9pbm9kZSk7CiAJZWxzZQpAQCAtNDY2OSw4ICYjNDM7NDc1OCw5IEBAIHN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpIHsKIAkJaWYgKChvcGVuX2ZsYWcgJmFtcDsgT19FWENMKSAmYW1wOyZhbXA7ICEoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0NSRUFURUQpKQogCQkJcmV0dXJuIC1FRVhJU1Q7Ci0JCWlmIChkX2lzX2RpcihuZC0mZ3Q7cGF0aC5kZW50cnkpKQomIzQzOwkJaWYgKCEob3Blbl9mbGFnICZhbXA7IE9fRElSRUNUT1JZKSAmYW1wOyZhbXA7IGRfaXNfZGlyKG5kLSZndDtwYXRoLmRlbnRyeSkpCiAJCQlyZXR1cm4gLUVJU0RJUjsKJiM0MzsKIAkJZXJyb3IgPSBtYXlfY3JlYXRlX2luX3N0aWNreShpZG1hcCwgbmQsCiAJCQkJCSAgICAgZF9iYWNraW5nX2lub2RlKG5kLSZndDtwYXRoLmRlbnRyeSkpOwogCQlpZiAodW5saWtlbHkoZXJyb3IpKQpAQCAtNDk0Niw3ICYjNDM7NTAzNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmaWxlbmFtZV9jcmVhdGUoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLAogCSAqIERvIHRoZSBmaW5hbCBsb29rdXAuICBTdXBwcmVzcyAmIzM5O2NyZWF0ZSYjMzk7IGlmIHRoZXJlIGlzIGEgdHJhaWxpbmcKIAkgKiAmIzM5Oy8mIzM5OywgYW5kIGEgZGlyZWN0b3J5IHdhc24mIzM5O3QgcmVxdWVzdGVkLgogCSAqLwotCWlmIChsYXN0Lm5hbWVbbGFzdC5sZW5dICZhbXA7JmFtcDsgIXdhbnRfZGlyKQomIzQzOwlpZiAodHJhaWxpbmdfc2xhc2hlcyhsYXN0KSAmYW1wOyZhbXA7ICF3YW50X2RpcikKIAkJY3JlYXRlX2ZsYWdzICZhbXA7PSB+TE9PS1VQX0NSRUFURTsKIAlkZW50cnkgPSBzdGFydF9kaXJvcChwYXRoLSZndDtkZW50cnksICZhbXA7bGFzdCwgcmV2YWxfZmxhZyB8IGNyZWF0ZV9mbGFncyk7CiAJaWYgKElTX0VSUihkZW50cnkpKQpAQCAtNTA0MSwzMiAmIzQzOzUxMzEsMTcgQEAgc3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLAogCQlwYXRoLSZndDtkZW50cnkgPSBkaXI7CiAJCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7CiAKLQkJY3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUpOwomIzQzOwkJY3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUsIC8qY3JlYXRlX2Rpcj0qLyBmYWxzZSk7CiAJCWlmIChjcmVhdGVfZXJyb3IpCiAJCQlmbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiAKLQkJLyogYXRvbWljX29wZW4gd2lsbCBkcHV0KGRlbnRyeSkgb24gZXJyb3IgKi8KLQkJZGdldChvcmlnX2RlbnRyeSk7CiAJCWRlbnRyeSA9IGF0b21pY19vcGVuKHBhdGgsIGRlbnRyeSwgZmlsZSwgZmxhZ3MsIG1vZGUpOwogCQllcnJvciA9IFBUUl9FUlJfT1JfWkVSTyhkZW50cnkpOwotCi0JCWlmIChJU19FUlIoZGVudHJ5KSkKLQkJCS8qIGtlZXAgdGhlIG9yaWdpbmFsICovCiYjNDM7CQlpZiAodW5saWtlbHkoZXJyb3IpKQogCQkJZGVudHJ5ID0gb3JpZ19kZW50cnk7Ci0JCWVsc2UKLQkJCS8qIERyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSAqLwotCQkJZHB1dChvcmlnX2RlbnRyeSk7Ci0KIAkJaWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgJmFtcDsmYW1wOyBlcnJvciA9PSAtRU5PRU5UKQogCQkJZXJyb3IgPSBjcmVhdGVfZXJyb3I7CiAKLQkJaWYgKCFlcnJvcikgewotCQkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9DUkVBVEVEKQotCQkJCWZzbm90aWZ5X2NyZWF0ZShkaXItJmd0O2RfaW5vZGUsIGRlbnRyeSk7Ci0JCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCkKLQkJCQlmc25vdGlmeV9vcGVuKGZpbGUpOwotCQl9Ci0KIAkJcGF0aC0mZ3Q7ZGVudHJ5ID0gZGVudHJ5OwogCiAJfSBlbHNlIHsKQEAgLTUyMTgsNiAmIzQzOzUyOTMsMzkgQEAgU1lTQ0FMTF9ERUZJTkUzKG1rbm9kLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSwgdW1vZGVfdCwgbW9kZSwgdW5zaWduZWQsIGQKIAlyZXR1cm4gZmlsZW5hbWVfbWtub2RhdChBVF9GRENXRCwgbmFtZSwgbW9kZSwgZGV2KTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUKJiM0MztzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwKJiM0MzsJCQkJIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKQomIzQzO3sKJiM0MzsJaW50IGVycm9yOwomIzQzOwlzdHJ1Y3QgZGVudHJ5ICpkZTsKJiM0MzsJdW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLSZndDtpX3NiLSZndDtzX21heF9saW5rczsKJiM0MzsKJiM0MzsJZXJyb3IgPSAtRU1MSU5LOwomIzQzOwlpZiAobWF4X2xpbmtzICZhbXA7JmFtcDsgZGlyLSZndDtpX25saW5rICZndDs9IG1heF9saW5rcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWRlID0gZGlyLSZndDtpX29wLSZndDtta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwlpZiAoSVNfRVJSKGRlKSkgewomIzQzOwkJZXJyb3IgPSBQVFJfRVJSKGRlKTsKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CWlmIChkZSkgewomIzQzOwkJZHB1dChkZW50cnkpOwomIzQzOwkJZGVudHJ5ID0gZGU7CiYjNDM7CX0KJiM0MzsJZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpOwomIzQzOwlyZXR1cm4gZGVudHJ5OwomIzQzOwomIzQzO2VycjoKJiM0MzsJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwomIzQzO30KJiM0MzsKIC8qKgogICogdmZzX21rZGlyIC0gY3JlYXRlIGRpcmVjdG9yeSByZXR1cm5pbmcgY29ycmVjdCBkZW50cnkgaWYgcG9zc2libGUKICAqIEBpZG1hcDoJCWlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb20KQEAgLTUyNDUsNyAmIzQzOzUzNTMsNiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRlbGVnYXRlZF9pbm9kZSkKIHsKIAlpbnQgZXJyb3I7Ci0JdW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLSZndDtpX3NiLSZndDtzX21heF9saW5rczsKIAlzdHJ1Y3QgZGVudHJ5ICpkZTsKIAogCWVycm9yID0gbWF5X2NyZWF0ZV9kZW50cnkoaWRtYXAsIGRpciwgZGVudHJ5KTsKQEAgLTUyNjEsMjQgJiM0Mzs1MzY4LDEyIEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKGVycm9yKQogCQlnb3RvIGVycjsKIAotCWVycm9yID0gLUVNTElOSzsKLQlpZiAobWF4X2xpbmtzICZhbXA7JmFtcDsgZGlyLSZndDtpX25saW5rICZndDs9IG1heF9saW5rcykKLQkJZ290byBlcnI7Ci0KLQllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7Ci0JaWYgKGVycm9yKQomIzQzOwlkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTsKJiM0MzsJaWYgKElTX0VSUihkZSkpIHsKJiM0MzsJCWVycm9yID0gUFRSX0VSUihkZSk7CiAJCWdvdG8gZXJyOwotCi0JZGUgPSBkaXItJmd0O2lfb3AtJmd0O21rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7Ci0JZXJyb3IgPSBQVFJfRVJSKGRlKTsKLQlpZiAoSVNfRVJSKGRlKSkKLQkJZ290byBlcnI7Ci0JaWYgKGRlKSB7Ci0JCWRwdXQoZGVudHJ5KTsKLQkJZGVudHJ5ID0gZGU7CiAJfQotCWZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTsKLQlyZXR1cm4gZGVudHJ5OwomIzQzOwlyZXR1cm4gZGU7CiAKIGVycjoKIAllbmRfY3JlYXRpbmcoZGVudHJ5KTsKQEAgLTU1NjUsNyAmIzQzOzU2NjAsNyBAQCBpbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKQogCQlnb3RvIGV4aXRfZHJvcF93cml0ZTsKIAogCS8qIFdoeSBub3QgYmVmb3JlPyBCZWNhdXNlIHdlIHdhbnQgY29ycmVjdCBlcnJvciB2YWx1ZSAqLwotCWlmICh1bmxpa2VseShsYXN0Lm5hbWVbbGFzdC5sZW5dKSkgewomIzQzOwlpZiAodW5saWtlbHkodHJhaWxpbmdfc2xhc2hlcyhsYXN0KSkpIHsKIAkJaWYgKGRfaXNfZGlyKGRlbnRyeSkpCiAJCQllcnJvciA9IC1FSVNESVI7CiAJCWVsc2UKQEAgLTYxNjcsMTYgJiM0Mzs2MjYyLDE2IEBAIGludCBmaWxlbmFtZV9yZW5hbWVhdDIoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpmcm9tLAogCWlmIChmbGFncyAmYW1wOyBSRU5BTUVfRVhDSEFOR0UpIHsKIAkJaWYgKCFkX2lzX2RpcihyZC5uZXdfZGVudHJ5KSkgewogCQkJZXJyb3IgPSAtRU5PVERJUjsKLQkJCWlmIChuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pCiYjNDM7CQkJaWYgKHRyYWlsaW5nX3NsYXNoZXMobmV3X2xhc3QpKQogCQkJCWdvdG8gZXhpdF91bmxvY2s7CiAJCX0KIAl9CiAJLyogdW5sZXNzIHRoZSBzb3VyY2UgaXMgYSBkaXJlY3RvcnkgdHJhaWxpbmcgc2xhc2hlcyBnaXZlIC1FTk9URElSICovCiAJaWYgKCFkX2lzX2RpcihyZC5vbGRfZGVudHJ5KSkgewogCQllcnJvciA9IC1FTk9URElSOwotCQlpZiAob2xkX2xhc3QubmFtZVtvbGRfbGFzdC5sZW5dKQomIzQzOwkJaWYgKHRyYWlsaW5nX3NsYXNoZXMob2xkX2xhc3QpKQogCQkJZ290byBleGl0X3VubG9jazsKLQkJaWYgKCEoZmxhZ3MgJmFtcDsgUkVOQU1FX0VYQ0hBTkdFKSAmYW1wOyZhbXA7IG5ld19sYXN0Lm5hbWVbbmV3X2xhc3QubGVuXSkKJiM0MzsJCWlmICghKGZsYWdzICZhbXA7IFJFTkFNRV9FWENIQU5HRSkgJmFtcDsmYW1wOyB0cmFpbGluZ19zbGFzaGVzKG5ld19sYXN0KSkKIAkJCWdvdG8gZXhpdF91bmxvY2s7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggYzdiNzIzYzE4NjIwYzkuLmM4MTVkOWFhOWI2OWRhIDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzL2Rpci5jCkBAIC0yMTIxLDYgJiM0MzsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCWRmcHJpbnRrKFZGUywgJiMzNDtORlM6IGF0b21pY19vcGVuKCVzLyVsbHUpLCAlcGRcbiYjMzQ7LAogCQkJZGlyLSZndDtpX3NiLSZndDtzX2lkLCBkaXItJmd0O2lfaW5vLCBkZW50cnkpOwogCiYjNDM7CWlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKQomIzQzOwkJb3Blbl9mbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJZXJyID0gbmZzX2NoZWNrX2ZsYWdzKG9wZW5fZmxhZ3MpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0yMzEzLDYgJiM0MzsyMzE2LDkgQEAgaW50IG5mc19hdG9taWNfb3Blbl92MjMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkgKi8KIAlpbnQgZXJyb3IgPSAwOwogCiYjNDM7CWlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKQomIzQzOwkJb3Blbl9mbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGRlbnRyeS0mZ3Q7ZF9uYW1lLmxlbiAmZ3Q7IE5GU19TRVJWRVIoZGlyKS0mZ3Q7bmFtZWxlbikKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCA0MDg5MjVkN2JkMGI3Ny4uODdlODg2NGQ5NDgwODcgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vcGVuLmMKQEAgLTExOTAsMjkgJiM0MzsxMTkwLDMwIEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKQogCWlmIChXSUxMX0NSRUFURShmbGFncykpIHsKIAkJaWYgKGhvdy0mZ3Q7bW9kZSAmYW1wOyB+U19JQUxMVUdPKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW9wLSZndDttb2RlID0gaG93LSZndDttb2RlIHwgU19JRlJFRzsKJiM0MzsJCWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCQlvcC0mZ3Q7bW9kZSA9IGhvdy0mZ3Q7bW9kZSB8IFNfSUZESVI7CiYjNDM7CQllbHNlCiYjNDM7CQkJb3AtJmd0O21vZGUgPSBob3ctJmd0O21vZGUgfCBTX0lGUkVHOwogCX0gZWxzZSB7CiAJCWlmIChob3ctJmd0O21vZGUgIT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlvcC0mZ3Q7bW9kZSA9IDA7CiAJfQogCi0JLyoKLQkgKiBCbG9jayBidWdzIHdoZXJlIE9fRElSRUNUT1JZIHwgT19DUkVBVCBjcmVhdGVkIHJlZ3VsYXIgZmlsZXMuCi0JICogTm90ZSwgdGhhdCBibG9ja2luZyBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgaGVyZSBhbHNvIHByb3RlY3RzCi0JICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC4KLQkgKi8KLQlpZiAoKGZsYWdzICZhbXA7IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKSA9PSAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkvKiBOb3cgaGFuZGxlIHRoZSBjcmVhdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBPX1RNUEZJTEUuICovCiAJaWYgKGZsYWdzICZhbXA7IF9fT19UTVBGSUxFKSB7CiAJCS8qCiAJCSAqIEluIG9yZGVyIHRvIGVuc3VyZSBwcm9ncmFtcyBnZXQgZXhwbGljaXQgZXJyb3JzIHdoZW4gdHJ5aW5nCiAJCSAqIHRvIHVzZSBPX1RNUEZJTEUgb24gb2xkIGtlcm5lbHMgd2UgZW5mb3JjZSB0aGF0IE9fRElSRUNUT1JZCi0JCSAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUuCiYjNDM7CQkgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLCBidXQgd2l0aG91dCBPX0NSRUFULiBUaGUKJiM0MzsJCSAqIHJlYXNvbiBmb3IgZGlzYWxsb3dpbmcgT19DUkVBVHxPX1RNUEZJTEUgaXMgdGhhdAomIzQzOwkJICogT19ESVJFQ1RPUll8T19DUkVBVCB1c2VkIHRvIHdvcmsgYW5kIGNyZWF0ZWQgYSByZWd1bGFyIGZpbGUKJiM0MzsJCSAqIGlmIG5vdGhpbmcgZXhpc3RlZCBhdCB0aGUgb3BlbiBwYXRoLiBIZW5jZSwgYWxsb3dpbmcgdGhlCiYjNDM7CQkgKiBjb21iaW5hdGlvbiB3b3VsZCBoYXZlIGNhdXNlZCBPX0NSRUFUfE9fVE1QRklMRSB0byBjcmVhdGUgYQomIzQzOwkJICogcmVndWxhciAobm9uLXRlbXBvcmFyeSkgZmlsZSBvbiBvbGQga2VybmVscywgd2hpbGUgdGhlIGNhbGxlcgomIzQzOwkJICogd291bGQgYmVsaWV2ZSB0aGV5IGNyZWF0ZWQgYW4gYWN0dWFsIE9fVE1QRklMRS4KIAkJICovCi0JCWlmICghKGZsYWdzICZhbXA7IE9fRElSRUNUT1JZKSkKJiM0MzsJCWlmICghKGZsYWdzICZhbXA7IE9fRElSRUNUT1JZKSB8fCAoZmxhZ3MgJmFtcDsgT19DUkVBVCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKCEoYWNjX21vZGUgJmFtcDsgTUFZX1dSSVRFKSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTI2OSw2ICYjNDM7MTI3MCwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcCkKIAogCW9wLSZndDtpbnRlbnQgPSBmbGFncyAmYW1wOyBPX1BBVEggPyAwIDogTE9PS1VQX09QRU47CiAKJiM0MzsJLyoKJiM0MzsJICogUmVxdWVzdGluZyB3cml0ZSBhY2Nlc3Mgb24gYSBkaXJlY3RvcnkgY2FuIG5ldmVyIHN1Y2NlZWQuIFJhdGhlcgomIzQzOwkgKiB0aGFuIHBlcmZvcm1pbmcgYSBwYXRoLXdhbGsgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHRhcmdldCBpcwomIzQzOwkgKiBhY3R1YWxseSBhIGRpcmVjdG9yeSAoLUVJU0RJUikgb3Igbm90ICgtRU5PVERJUiksIHdlIHNob3J0LWNpcmN1aXQKJiM0MzsJICogdG8gLUVOT1RESVIuCiYjNDM7CSAqLwomIzQzOwlpZiAoKGZsYWdzICZhbXA7IE9fRElSRUNUT1JZKSAmYW1wOyZhbXA7ICEoZmxhZ3MgJmFtcDsgX19PX1RNUEZJTEUpICZhbXA7JmFtcDsgKGFjY19tb2RlICZhbXA7IE1BWV9XUklURSkpCiYjNDM7CQlyZXR1cm4gLUVOT1RESVI7CiYjNDM7CiAJaWYgKGZsYWdzICZhbXA7IE9fQ1JFQVQpIHsKIAkJb3AtJmd0O2ludGVudCB8PSBMT09LVVBfQ1JFQVRFOwogCQlpZiAoZmxhZ3MgJmFtcDsgT19FWENMKSB7CmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuYwppbmRleCA4OGE0YTE3ODdmZjA0Ny4uNzViZjg2Y2MwNjEyMmUgMTAwNjQ0Ci0tLSBhL2ZzL3NtYi9jbGllbnQvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC9kaXIuYwpAQCAtNTM4LDYgJiM0Mzs1MzgsOSBAQCBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksCiAJaWYgKHVubGlrZWx5KGNpZnNfZm9yY2VkX3NodXRkb3duKGNpZnNfc2IpKSkKIAkJcmV0dXJuIHNtYl9FSU8oc21iX2Vpb190cmFjZV9mb3JjZWRfc2h1dGRvd24pOwogCiYjNDM7CWlmIChPX0lTX01LRElSKG9mbGFncykpCiYjNDM7CQlvZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCS8qCiAJICogUG9zaXggb3BlbiBpcyBvbmx5IGNhbGxlZCAoYXQgbG9va3VwIHRpbWUpIGZvciBmaWxlIGNyZWF0ZSBub3cuIEZvcgogCSAqIG9wZW5zIChyYXRoZXIgdGhhbiBjcmVhdGVzKSwgYmVjYXVzZSB3ZSBkbyBub3Qga25vdyBpZiBpdCBpcyBhIGZpbGUKZGlmZiAtLWdpdCBhL2ZzL3Zib3hzZi9kaXIuYyBiL2ZzL3Zib3hzZi9kaXIuYwppbmRleCBjNWJkMzI3MWFhOTYxNi4uNzdhZTJmNjk2ZmQ0MzcgMTAwNjQ0Ci0tLSBhL2ZzL3Zib3hzZi9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy92Ym94c2YvZGlyLmMKQEAgLTMxOCw2ICYjNDM7MzE4LDkgQEAgc3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJdTY0IGhhbmRsZTsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2Ym94c2ZfZGlyX2xvb2t1cChwYXJlbnQsIGRlbnRyeSwgMCk7CiAJCWlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmNudGwuaCBiL2luY2x1ZGUvbGludXgvZmNudGwuaAppbmRleCA2YWQ2YjllN2EyMjZhZi4uNmI3NTI3N2JlNTU5ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmNudGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKQEAgLTMwLDYgJiM0MzszMCwxMiBAQAogICovCiAjZGVmaW5lIF9fT19SRUdVTEFSCQkoMSAmbHQ7Jmx0OyAzMCkKIAomIzQzOyNkZWZpbmUgT19NS0RJUl9NQVNLCShPX0NSRUFUIHwgT19ESVJFQ1RPUlkpCiYjNDM7c3RhdGljIGlubGluZSBib29sIE9fSVNfTUtESVIodW5zaWduZWQgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gKGZsYWdzICZhbXA7IE9fTUtESVJfTUFTSykgPT0gT19NS0RJUl9NQVNLOwomIzQzO30KJiM0MzsKIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciB0aGUgaG93LSZndDtyZXNvbHZlIGFyZ3VtZW50OiAqLwogI2RlZmluZSBWQUxJRF9SRVNPTFZFX0ZMQUdTIFwKIAkoUkVTT0xWRV9OT19YREVWIHwgUkVTT0xWRV9OT19NQUdJQ0xJTktTIHwgUkVTT0xWRV9OT19TWU1MSU5LUyB8IFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlCmluZGV4IDY0YWMwZGZhNDZiN2VmLi5mMjU3YjNkZGI0Nzk0NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlCkBAIC0xLDQgJiM0MzsxLDUgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzO29wZW5fb19jcmVhdF9vX2RpcgogZG5vdGlmeV90ZXN0CiBkZXZwdHNfcHRzCiBmY2xvZwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZQppbmRleCA4NTQyN2Q3ZjE5YjliNS4uNjQ1YzUyZDJkNGRlYjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlCkBAIC0xLDcgJiM0MzsxLDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIAogQ0ZMQUdTICYjNDM7PSAkKEtIRFJfSU5DTFVERVMpCi1URVNUX0dFTl9QUk9HUyA6PSBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nCiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gb3Blbl9vX2NyZWF0X29fZGlyIGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2cKIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEIDo9IGRub3RpZnlfdGVzdAogCiBpbmNsdWRlIC4uL2xpYi5tawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZjbG9nLmMKaW5kZXggNTUxYzRhMGYzOTVhMTIuLjU5M2E1MTM2ZTk5MTkyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZjbG9nLmMKQEAgLTYsMTAgJiM0Mzs2LDggQEAKIAogI2luY2x1ZGUgJmx0O2Fzc2VydC5oJmd0OwogI2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKLSNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwotI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwotI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9tb3VudC5oJmd0OwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kZjNjZGJhZTJjODUyNAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jCkBAIC0wLDAgJiM0MzsxLDE5NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgb3Blbl9vX2NyZWF0X29fZGlyKGludCBkZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAomIzQzOwkJCQkgICAgIG1vZGVfdCBtb2RlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzY2FsbChfX05SX29wZW5hdCwgZGZkLCBwYXRobmFtZSwKJiM0MzsJCSAgICAgICBmbGFncyB8IE9fRElSRUNUT1JZIHwgT19DUkVBVCwgbW9kZSk7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWRfZmxhZ3MoZGZkLCBwYXRobmFtZSwgZmxhZ3MpICh7CVwKJiM0MzsJc3RydWN0IHN0YXQgX19zdDsJCQkJCQlcCiYjNDM7CWludCBfX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyKGRmZCwgcGF0aG5hbWUsIFNfSVJXWFUsIGZsYWdzKTsJXAomIzQzOwlBU1NFUlRfR0UoX19mZCwgMCk7CQkJCQkJXAomIzQzOwlBU1NFUlRfRVEoZnN0YXQoX19mZCwgJmFtcDtfX3N0KSwgMCk7CQkJCVwKJiM0MzsJRVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTsJCQkJXAomIzQzOwlfX2ZkOwkJCQkJCQkJXAomIzQzO30pCiYjNDM7CiYjNDM7I2RlZmluZSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChkZmQsIHBhdGhuYW1lKSBcCiYjNDM7CW9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIDApCiYjNDM7CiYjNDM7RklYVFVSRShvcGVuX29fY3JlYXRfb19kaXIpIHsKJiM0MzsJY2hhciBkaXJwYXRoW1BBVEhfTUFYXTsKJiM0MzsJaW50IGRmZDsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAob3Blbl9vX2NyZWF0X29fZGlyKQomIzQzO3sKJiM0MzsJc3RyY3B5KHNlbGYtJmd0O2RpcnBhdGgsICYjMzQ7L3RtcC9vcGVuX29fY3JlYXRfb19kaXJfdGVzdC5YWFhYWFgmIzM0Oyk7CiYjNDM7CUFTU0VSVF9ORShta2R0ZW1wKHNlbGYtJmd0O2RpcnBhdGgpLCBOVUxMKTsKJiM0MzsJc2VsZi0mZ3Q7ZGZkID0gb3BlbihzZWxmLSZndDtkaXJwYXRoLCBPX0RJUkVDVE9SWSk7CiYjNDM7CUFTU0VSVF9HRShzZWxmLSZndDtkZmQsIDApOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKG9wZW5fb19jcmVhdF9vX2RpcikKJiM0Mzt7CiYjNDM7CWNsb3NlKHNlbGYtJmd0O2RmZCk7CiYjNDM7CXJtZGlyKHNlbGYtJmd0O2RpcnBhdGgpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEb2VzIG9wZW5fb19jcmVhdF9vX2RpciByZXR1cm4gYSBmZCBhdCBhbGw/ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgcmV0dXJuc19mZCkKJiM0Mzt7CiYjNDM7CWludCBmZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtJmd0O2RmZCwgJiMzNDtuZXdkaXImIzM0Oyk7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShmZCksIDApOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O25ld2RpciYjMzQ7LCBBVF9SRU1PVkVESVIpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIGZkIG11c3QgcmVmZXIgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQuICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfaXNfY3JlYXRlZF9kaXIpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CXN0cnVjdCBzdGF0IHN0X3ZpYV9mZCwgc3RfdmlhX3BhdGg7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CiYjNDM7CWZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O2NoZWNrZGlyJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoZnN0YXQoZmQsICZhbXA7c3RfdmlhX2ZkKSwgMCk7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDslcy9jaGVja2RpciYjMzQ7LCBzZWxmLSZndDtkaXJwYXRoKTsKJiM0MzsJQVNTRVJUX0VRKHN0YXQocGF0aCwgJmFtcDtzdF92aWFfcGF0aCksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2lubywgc3RfdmlhX3BhdGguc3RfaW5vKTsKJiM0MzsJRVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShmZCksIDApOwomIzQzOwlFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBNaXNzaW5nIHBhcmVudCBjb21wb25lbnQgbXVzdCBmYWlsIHdpdGggRU5PRU5ULiAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub2VudF9taXNzaW5nX3BhcmVudCkKJiM0Mzt7CiYjNDM7CUVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi0mZ3Q7ZGZkLCAmIzM0O25vbmV4aXN0ZW50L2NoaWxkJiMzNDssIFNfSVJXWFUsIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PRU5UKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQW4gaW52YWxpZCBkZmQgbXVzdCBmYWlsIHdpdGggRUJBREYuICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZWJhZGYpCiYjNDM7ewomIzQzOwlFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKC00MiwgJiMzNDtiYWRmZGlyJiMzNDssIFNfSVJXWFUsIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUJBREYpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBIGRmZCB0aGF0IHBvaW50cyB0byBhIGZpbGUgKG5vdCBhIGRpcmVjdG9yeSkgbXVzdCBmYWlsIHdpdGggRU5PVERJUi4gKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm90ZGlyX2RmZCkKJiM0Mzt7CiYjNDM7CWludCBmaWxlX2ZkOwomIzQzOwomIzQzOwlmaWxlX2ZkID0gb3BlbmF0KHNlbGYtJmd0O2RmZCwgJiMzNDtmaWxlJiMzNDssCiYjNDM7CQkJIE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7CiYjNDM7CUFTU0VSVF9HRShmaWxlX2ZkLCAwKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihmaWxlX2ZkLCAmIzM0O3N1YmRpciYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O2ZpbGUmIzM0OywgMCksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE9fRVhDTCB0b2dldGhlciB3aXRoIE9fQ1JFQVR8T19ESVJFQ1RPUlkgbXVzdCBmYWlsIHdpdGggRUVYSVNUIHdoZW4KJiM0MzsgKiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBvX2V4Y2xfZWV4aXN0KQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlmZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKHNlbGYtJmd0O2RmZCwgJiMzNDtleGNsZGlyJiMzNDssIE9fRVhDTCk7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShmZCksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtJmd0O2RmZCwgJiMzNDtleGNsZGlyJiMzNDssIFNfSVJXWFUsIE9fRVhDTCksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFRVhJU1QpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O2V4Y2xkaXImIzM0OywgQVRfUkVNT1ZFRElSKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogT19DUkVBVHxPX0RJUkVDVE9SWSBvbiBhIHBhdGggdGhhdCBhbHJlYWR5IGV4aXN0cyBhcyBhIHJlZ3VsYXIgZmlsZQomIzQzOyAqIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZXhpc3RpbmdfZmlsZV9lbm90ZGlyKQomIzQzO3sKJiM0MzsJaW50IGZpbGVfZmQ7CiYjNDM7CiYjNDM7CWZpbGVfZmQgPSBvcGVuYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3JlZ2ZpbGUmIzM0OywKJiM0MzsJCQkgT19DUkVBVCB8IE9fV1JPTkxZLCBTX0lSV1hVKTsKJiM0MzsJQVNTRVJUX0dFKGZpbGVfZmQsIDApOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtJmd0O2RmZCwgJiMzNDtyZWdmaWxlJiMzNDssIFNfSVJXWFUsIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PVERJUik7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUSh1bmxpbmthdChzZWxmLSZndDtkZmQsICYjMzQ7cmVnZmlsZSYjMzQ7LCAwKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogT19DUkVBVHxPX0RJUkVDVE9SWSBjb21iaW5lZCB3aXRoIGEgd3JpdGFibGUgYWNjZXNzIG1vZGUgbXVzdCBiZQomIzQzOyAqIHJlamVjdGVkOiBhIGRpcmVjdG9yeSBjYW5ub3QgYmUgb3BlbmVkIGZvciB3cml0aW5nLgomIzQzOyAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJlamVjdHNfd3JpdGFibGVfYWNjX21vZGUpCiYjNDM7ewomIzQzOwlFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtJmd0O2RmZCwgJiMzNDtyZHdyZGlyJiMzNDssIFNfSVJXWFUsIE9fUkRXUiksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTsKJiM0MzsJLyogQ2xlYW4gdXAgaWYgdGhlIGtlcm5lbCBjcmVhdGVkIHRoZSBkaXJlY3RvcnkgYW55d2F5LiAqLwomIzQzOwl1bmxpbmthdChzZWxmLSZndDtkZmQsICYjMzQ7cmR3cmRpciYjMzQ7LCBBVF9SRU1PVkVESVIpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIG9wZW5hdChPX0NSRUFUKSB3aXRoIGEgdHJhaWxpbmcgc2xhc2ggYnV0IHdpdGhvdXQgT19ESVJFQ1RPUlkKJiM0MzsgKiBtdXN0IGZhaWwgd2l0aCBFSVNESVIgYW5kIG11c3Qgbm90IGNyZWF0ZSBhbnl0aGluZyBhdCB0aGUgcGF0aC4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCB0cmFpbGluZ19zbGFzaF9ub19vX2RpcikKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJc3RydWN0IHN0YXQgc3Q7CiYjNDM7CiYjNDM7CWZkID0gb3BlbmF0KHNlbGYtJmd0O2RmZCwgJiMzNDt0cmFpbGluZy8mIzM0OywgT19DUkVBVCB8IE9fV1JPTkxZLCBTX0lSV1hVKTsKJiM0MzsJRVhQRUNUX0VRKGZkLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUlTRElSKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKGZzdGF0YXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3RyYWlsaW5nJiMzNDssICZhbXA7c3QsIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PRU5UKTsKJiM0MzsKJiM0MzsJLyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqLwomIzQzOwlpZiAoZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJdW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3RyYWlsaW5nJiMzNDssIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSByZXR1cm5lZCBmZCBtdXN0IGJlIHVzYWJsZSBhcyBhIGRmZCBmb3IgZnVydGhlciAqYXQoKSBjYWxscy4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBmZF91c2FibGVfYXNfZGZkKQomIzQzO3sKJiM0MzsJaW50IHBhcmVudF9mZCwgY2hpbGRfZmQ7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CiYjNDM7CXBhcmVudF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtJmd0O2RmZCwgJiMzNDtwYXJlbnQmIzM0Oyk7CiYjNDM7CWNoaWxkX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQocGFyZW50X2ZkLCAmIzM0O2NoaWxkJiMzNDspOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoY2hpbGRfZmQpLCAwKTsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKHBhcmVudF9mZCksIDApOwomIzQzOwomIzQzOwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7JXMvcGFyZW50L2NoaWxkJiMzNDssIHNlbGYtJmd0O2RpcnBhdGgpOwomIzQzOwlFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApOwomIzQzOwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7JXMvcGFyZW50JiMzNDssIHNlbGYtJmd0O2RpcnBhdGgpOwomIzQzOwlFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgaW50ZXJhY3RzIHdpdGggYG9wZW5hdCgpYC4gQmVmb3JlLCBpdCBzZWVtcyBsaWtlIHRoaXMgY29tYmluYXRpb24gZWl0aGVyIGZhaWxlZCBvdXRyaWdodCBvciwgaW4gc29tZSBjYXNlcywgY3JlYXRlZCBhIHJlZ3VsYXIgZmlsZS4gTm93LCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhY3R1YWxseSAqZW5hYmxpbmcqIHRoZSBjcmVhdGlvbiBvZiBkaXJlY3RvcmllcyB0aHJvdWdoIHRoaXMgZmxhZyBjb21iaW5hdGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgdGhpcyBgT19JU19NS0RJUihmbGFncylgIGNoZWNrLiAgSXQmIzM5O3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQsIHRvdWNoaW5nIGNvcmUgVkZTIGNvZGUgKGBmcy9uYW1laS5jYCwgYGZzL29wZW4uY2ApIGFuZCB0aGVuIHByb3BhZ2F0aW5nIG91dCB0byBhIGJ1bmNoIG9mIGRpZmZlcmVudCBmaWxlc3lzdGVtcy4KCkkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB3aGF0IHRoZSBwb3RlbnRpYWwgaW1wYWN0IGlzIGhlcmUuIFNpbmNlIHRoaXMgaGl0cyB0aGUgVkZTIGxldmVsLCBpdCBpcyBhIGNydWNpYWwgYXJlYSBmb3IgZnV6emluZy4gVGhlIGZ1bmN0aW9uYWwgc2hpZnQgaXMgdG8gYWxsb3cgZGlyZWN0b3J5IGNyZWF0aW9uIHdpdGggYG9wZW5hdCgpYCBhbmQgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAsIHdoaWNoIGlzIGVpdGhlciBhIG5ldyBmZWF0dXJlIG9yIGEgZml4IHRvIHByaW9yIGJlaGF2aW9yLgoKSSYjMzk7bSBtYWtpbmcgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBhcyB0aGUga2V5IHBvaW50cyBvZiBmb2N1cy4gRnJvbSB0aGUgY29kZSwgSSBzZWU6IGB2ZnNfbWtkaXJfbm9fcGVybWAsIGBtYXlfb19jcmVhdGVgLCBgYXRvbWljX29wZW5gLCBgbG9va3VwX29wZW5gLCBgbG9va3VwX2Zhc3RfZm9yX29wZW5gLCBgb3Blbl9sYXN0X2xvb2t1cHNgLCBgZG9fb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGFuZCBgYnVpbGRfb3Blbl9mbGFnc2AuIFRoZSBhdG9taWMgb3BlbiBtb2RpZmljYXRpb25zIGluIHRoZSBmaWxlc3lzdGVtLXNwZWNpZmljIGNvZGUgYXJlIGltcG9ydGFudCwgdG9vOiBgdjlmc192ZnNfYXRvbWljX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGZ1c2VfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGBjaWZzX2F0b21pY19vcGVuYCwgYW5kIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC4KClNpbmNlIGl0IHRvdWNoZXMgdGhlIFZGUywgSSBkb24mIzM5O3QgbmVjZXNzYXJpbHkgbmVlZCBhbnkgZXhvdGljIGNvbmZpZ3MsIGJ1dCBJIHNob3VsZCBlbmFibGUgc3BlY2lmaWMgZmlsZXN5c3RlbXMuIEkmIzM5O20gZ29pbmcgdG8gbGlzdCBgVkJPWFNGX0ZTYCwgYEdGUzJfRlNgLCBgQ0VQSF9GU2AsIGFuZCBgOVBfRlNgIHRvIG1ha2Ugc3VyZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgY292ZXJlZC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbnMgd2l0aGluIGBmcy9uYW1laS5jYC4gSSBoYXZlIGB2ZnNfbWtkaXJfbm9fcGVybWAsIGBtYXlfb19jcmVhdGVgLCBgb19jcmVhdGVfbW9kZWAsIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYW5kIGBidWlsZF9vcGVuX2ZsYWdzYCB0byBsb29rIGF0LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGB2ZnNfbWtkaXJfbm9fcGVybWAgaXMgYWN0dWFsbHkgdXNlZC4gQWgsIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBpbmxpbmVgIGluIGBmcy9uYW1laS5jYC4gIEhhbmcgb24sIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5lZCBpbiB0d28gcGxhY2VzIGluIGBmcy9uYW1laS5jYD8gT2theSwgaXQmIzM5O3MgZGVjbGFyZWQgYW5kIGRlZmluZWQuCmBgYGMKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiYjNDM7CQkJCSBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSkKYGBgCkxldCBtZSBleGFtaW5lIGFyb3VuZCBsaW5lIDUyOTMgYW5kIDQ0NDAgaW4gYGZzL25hbWVpLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zmc19ta2Rpcl9ub19wZXJtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uYW1laS5jPTQ0NTQ9c3RhdGljIGlubGluZVxuZnMvbmFtZWkuYzo0NDU1OnN0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosXG5mcy9uYW1laS5jLTQ0NTYtXHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxuLS1cbmZzL25hbWVpLmM9NDQ3Mz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL25hbWVpLmMtNDU5OC1cdGlmIChjcmVhdGVfZGlyKSB7XG5mcy9uYW1laS5jOjQ1OTk6XHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcbmZzL25hbWVpLmMtNDYwMC1cdFx0XHRcdFx0XHQgICAgICAgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcbi0tXG5mcy9uYW1laS5jPTUyOTY9c3RhdGljIGlubGluZVxuZnMvbmFtZWkuYzo1Mjk3OnN0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL25hbWVpLmMtNTI5OC1cdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbi0tXG5mcy9uYW1laS5jPTUzNTE9c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9uYW1laS5jLTUzNzAtXG5mcy9uYW1laS5jOjUzNzE6XHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcbmZzL25hbWVpLmMtNTM3Mi1cdGlmIChJU19FUlIoZGUpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgRmlsZXN5c3RlbSBQZXJtaXNzaW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGB2ZnNfbWtkaXJfbm9fcGVybWAgaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIOKAkyBnb3QgaXQuIFRoYXQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IG9wdGltaXplZCBmb3IgYSBzcGVjaWZpYyBsb2NhdGlvbiB3aXRoaW4gdGhlIGNvZGUgYW5kIHByb2JhYmx5IGRlYWxzIHdpdGggYSBtb3JlIGdyYW51bGFyIGNoZWNrLiBOb3csIHdoZXJlIGRvZXMgdGhpcyBmaXQgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZT8gV2hhdCBhYm91dCBgbG9va3VwX29wZW5gPyBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIHJlYWxseSBnb2luZyB0byBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIGlzbiYjMzk7dCBpdD8gVGhhdCYjMzk7cyB0aGUgbG93LWxldmVsIHBpZWNlIHRoYXQgZGV0ZXJtaW5lcyBpZiBJIGNhbiAqZXZlbiogdG91Y2ggdGhlIGRpcmVjdG9yeSBpbiB0aGUgZmlyc3QgcGxhY2UsIG9yIGNyZWF0ZSBhIG5ldyBmaWxlIHdpdGggdGhlIG5hbWUgSSYjMzk7dmUgc3VnZ2VzdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBsb3dlciBsZXZlbCBmdW5jdGlvbnMgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIHBlcm1pc3Npb25zIGZsb3chCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9va3VwX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uYW1laS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9NDQ1NT1zdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxuLS1cbmZzL25hbWVpLmMtNDQ3Mi0gKi9cbmZzL25hbWVpLmM6NDQ3MzpzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuZnMvbmFtZWkuYy00NDc0LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3AsXG4tLVxuZnMvbmFtZWkuYz00NjUzPXN0YXRpYyBjb25zdCBjaGFyICpvcGVuX2xhc3RfbG9va3VwcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbi0tXG5mcy9uYW1laS5jLTQ2OTItXHRcdCAqIGRvIF9ub3RfIGZhaWwgeWV0IC0gd2UgbWlnaHQgbm90IG5lZWQgdGhhdCBvciBmYWlsIHdpdGhcbmZzL25hbWVpLmM6NDY5MzpcdFx0ICogYSBkaWZmZXJlbnQgZXJyb3I7IGxldCBsb29rdXBfb3BlbigpIGRlY2lkZTsgd2UmIzM5O2xsIGJlXG5mcy9uYW1laS5jLTQ2OTQtXHRcdCAqIGRyb3BwaW5nIHRoaXMgb25lIGFueXdheS5cbi0tXG5mcy9uYW1laS5jLTQ3MDEtXG5mcy9uYW1laS5jOjQ3MDI6XHRkZW50cnkgPSBsb29rdXBfb3BlbihuZCwgZmlsZSwgb3AsIGdvdF93cml0ZSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbmZzL25hbWVpLmMtNDcwMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzM5MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIEZpbGUgT3BlbmluZyBGdW5jdGlvbnMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBmaWxlIG9wZW5pbmcsIGFuZCB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHBhdHRlcm4gSSYjMzk7bSBzcG90dGluZy4gYGxvb2t1cF9vcGVuYCwgYGF0b21pY19vcGVuYCwgYW5kIGBkb19vcGVuYCBhcmUgYWxsICpzdGF0aWMqLCBtZWFuaW5nIHRoZXkmIzM5O3JlIGludGVybmFsIHRvIHRoZWlyIG1vZHVsZSBhbmQgbm90IGRpcmVjdGx5IGV4cG9zZWQgZm9yIGV4dGVybmFsIHVzZS4gVGhhdCBzdWdnZXN0cyB0aGVzZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIG9mIHRoZSBvcGVuaW5nIHByb2Nlc3MsIHByb2JhYmx5IGhhbmRsaW5nIHRoZSBsb3dlci1sZXZlbCBkZXRhaWxzLiBgYnVpbGRfb3Blbl9mbGFnc2AsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyAqaW5saW5lKi4gVGhpcyB0ZWxscyBtZSB0aGF0IGl0JiMzOTtzIGEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gZGVzaWduZWQgZm9yIHBlcmZvcm1hbmNlLCBsaWtlbHkgaW5saW5pbmcgdGhlIGZsYWcgY29uc3RydWN0aW9uIGRpcmVjdGx5IGludG8gdGhlIGNhbGxpbmcgY29kZSB0byBhdm9pZCBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLiBJdCBpcyBwcm9iYWJseSBpbXBvcnRhbnQgZm9yIG9wdGltaXppbmcgdGhlIGZpbGUgb3BlbiBzeXN0ZW0gY2FsbHMuIFRoZW4sIHdlIGhhdmUgYHZmc19ta2RpcmAgYW5kIGB2ZnNfY3JlYXRlYCwgd2hpY2ggYXJlICpleHBvcnRlZCouIFRoZXNlIGFyZSB0aGUgYWN0dWFsIFZpcnR1YWwgRmlsZSBTeXN0ZW0gZW50cnkgcG9pbnRzIGZvciBjcmVhdGluZyBkaXJlY3RvcmllcyBhbmQgZmlsZXMsIG1lYW5pbmcgdGhlc2UgZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQgZnJvbSBvdGhlciBtb2R1bGVzIG9yIGV2ZW4gdXNlciBzcGFjZS4gVGhpcyBtYWtlcyBzZW5zZTsgdGhleSBuZWVkIHRvIGJlIGFjY2Vzc2libGUgdG8gYSBicm9hZGVyIHBhcnQgb2YgdGhlIHN5c3RlbS4gRmluYWxseSwgYG1heV9vX2NyZWF0ZWAgaXMgKnN0YXRpYyosIGluZGljYXRpbmcgYSBwb3RlbnRpYWwgaW50ZXJuYWwgY2hlY2sgb3IgdmFsaWRhdGlvbiBmdW5jdGlvbiB1c2VkIGJlZm9yZSBhbGxvd2luZyBhIGZpbGUgdG8gYmUgY3JlYXRlZC4KCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBvdmVyIHRvIGBmcy9vcGVuLmNgIG5vdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYnVpbGRfb3Blbl9mbGFnc2AgaXMgZG9pbmc7IGl0cyB1c2FnZSBjb3VsZCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBmbG93IG9mIGZpbGUgb3BlbmluZy4gVGhpcyB3aWxsIHNoZWQgbGlnaHQgb24gaG93IHRoZSBvcGVuIGZsYWdzIGFyZSBhY3R1YWxseSBpbnRlcnByZXRlZCBhbmQgdHJhbnNsYXRlZCBpbnRvIHRoZSBzeXN0ZW0gY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnVpbGRfb3Blbl9mbGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29wZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vcGVuLmM9MTEzNj1pbmxpbmUgc3RydWN0IG9wZW5faG93IGJ1aWxkX29wZW5faG93KGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxuLS1cbmZzL29wZW4uYy0xMTUxLVxuZnMvb3Blbi5jOjExNTI6aW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG5mcy9vcGVuLmMtMTE1My17XG4tLVxuZnMvb3Blbi5jLTExNzYtXHQgKiBPbGRlciBzeXNjYWxscyBpbXBsaWNpdGx5IGNsZWFyIGFsbCBvZiB0aGUgaW52YWxpZCBmbGFncyBvciBhcmd1bWVudFxuZnMvb3Blbi5jOjExNzc6XHQgKiB2YWx1ZXMgYmVmb3JlIGNhbGxpbmcgYnVpbGRfb3Blbl9mbGFncygpLCBidXQgb3BlbmF0MigyKSBjaGVja3MgYWxsXG5mcy9vcGVuLmMtMTE3OC1cdCAqIG9mIGl0cyBhcmd1bWVudHMuXG4tLVxuZnMvb3Blbi5jPTEzMjk9c3RydWN0IGZpbGUgKmZpbGVfb3Blbl9uYW1lKHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUpXG4tLVxuZnMvb3Blbi5jLTEzMzItXHRzdHJ1Y3Qgb3Blbl9ob3cgaG93ID0gYnVpbGRfb3Blbl9ob3coZmxhZ3MsIG1vZGUpO1xuZnMvb3Blbi5jOjEzMzM6XHRpbnQgZXJyID0gYnVpbGRfb3Blbl9mbGFncyhcdTAwMjZob3csIFx1MDAyNm9wKTtcbmZzL29wZW4uYy0xMzM0LVx0aWYgKGVycilcbi0tXG5mcy9vcGVuLmM9MTM1Nz1zdHJ1Y3QgZmlsZSAqZmlsZV9vcGVuX3Jvb3QoY29uc3Qgc3RydWN0IHBhdGggKnJvb3QsXG4tLVxuZnMvb3Blbi5jLTEzNjEtXHRzdHJ1Y3Qgb3Blbl9ob3cgaG93ID0gYnVpbGRfb3Blbl9ob3coZmxhZ3MsIG1vZGUpO1xuZnMvb3Blbi5jOjEzNjI6XHRpbnQgZXJyID0gYnVpbGRfb3Blbl9mbGFncyhcdTAwMjZob3csIFx1MDAyNm9wKTtcbmZzL29wZW4uYy0xMzYzLVx0aWYgKGVycilcbi0tXG5mcy9vcGVuLmM9MTM2OT1zdGF0aWMgaW50IGRvX3N5c19vcGVuYXQyKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSxcbi0tXG5mcy9vcGVuLmMtMTM3Mi1cdHN0cnVjdCBvcGVuX2ZsYWdzIG9wO1xuZnMvb3Blbi5jOjEzNzM6XHRpbnQgZXJyID0gYnVpbGRfb3Blbl9mbGFncyhob3csIFx1MDAyNm9wKTtcbmZzL29wZW4uYy0xMzc0LVx0aWYgKHVubGlrZWx5KGVycikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNTUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBLZXJuZWwgRXhwbG9yYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhpcyBmaWxlIG9wZW5pbmcgYW5kIGNyZWF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byB0cmFjZSB0aGUgcGF0aCB0aHJvdWdoIHRoZSBrZXJuZWwuIE15IHByaW1hcnkgZm9jdXMgc3ltYm9scyByaWdodCBub3cgYXJlIGB2ZnNfbWtkaXJgLCBgdmZzX2NyZWF0ZWAsIGBkb19zeXNfb3BlbmF0MmAsIGBmaWxlX29wZW5fbmFtZWAsIGFuZCBgZmlsZV9vcGVuX3Jvb3RgLiAgYGRvX3N5c19vcGVuYXQyYCBmZWVscyBsaWtlIGEgcGFydGljdWxhcmx5IGdvb2QgZW50cnkgcG9pbnQsIHNvIEkmIzM5O2xsIGNvbmNlbnRyYXRlIG9uIHRoYXQgZm9yIHRoZSBtb21lbnQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zLgoKSSBrbm93IHRoYXQgYGxvb2t1cF9vcGVuYCBhbmQgYGF0b21pY19vcGVuYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGZzL25hbWVpLmNgLCBzbyBJIHdvbiYjMzk7dCBiZSBhYmxlIHRvIGNhbGwgdGhlbSBkaXJlY3RseS4gSSBjb3VsZCBsaXN0IHRoZW0sIGJ1dCBpdCBtaWdodCBiZSBtb3JlIHVzZWZ1bCB0byBsaXN0IGV4cG9ydGVkIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlbSwgc3VjaCBhcyBgcGF0aF9vcGVuYXRgIG9yIGBkb19maWxwX29wZW5gLiAgU28sIEkgc2hvdWxkIHJlYWxseSBkaWcgaW50byBgZnMvbmFtZWkuY2AgYW5kIGxvb2sgZm9yIGNhbGxzIHRvIHRob3NlLCBzcGVjaWZpY2FsbHkgYGRvX2ZpbHBfb3BlbmAgb3IgYHBhdGhfb3BlbmF0YC4gSSYjMzk7bGwgc2VlIHdoZXJlIHRob3NlIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYXRoX29wZW5hdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz00OTE3PXN0YXRpYyBpbnQgZG9fb19wYXRoKHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncywgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvbmFtZWkuYy00OTI4LVxuZnMvbmFtZWkuYzo0OTI5OnN0YXRpYyBzdHJ1Y3QgZmlsZSAqcGF0aF9vcGVuYXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsXG5mcy9uYW1laS5jLTQ5MzAtXHRcdFx0Y29uc3Qgc3RydWN0IG9wZW5fZmxhZ3MgKm9wLCB1bnNpZ25lZCBmbGFncylcbi0tXG5mcy9uYW1laS5jPTQ5Njg9c3RydWN0IGZpbGUgKmRvX2ZpbGVfb3BlbihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKnBhdGhuYW1lLFxuLS1cbmZzL25hbWVpLmMtNDk3Ny1cdHNldF9uYW1laWRhdGEoXHUwMDI2bmQsIGRmZCwgcGF0aG5hbWUsIE5VTEwpO1xuZnMvbmFtZWkuYzo0OTc4Olx0ZmlscCA9IHBhdGhfb3BlbmF0KFx1MDAyNm5kLCBvcCwgZmxhZ3MgfCBMT09LVVBfUkNVKTtcbmZzL25hbWVpLmMtNDk3OS1cdGlmICh1bmxpa2VseShmaWxwID09IEVSUl9QVFIoLUVDSElMRCkpKVxuZnMvbmFtZWkuYzo0OTgwOlx0XHRmaWxwID0gcGF0aF9vcGVuYXQoXHUwMDI2bmQsIG9wLCBmbGFncyk7XG5mcy9uYW1laS5jLTQ5ODEtXHRpZiAodW5saWtlbHkoZmlscCA9PSBFUlJfUFRSKC1FU1RBTEUpKSlcbmZzL25hbWVpLmM6NDk4MjpcdFx0ZmlscCA9IHBhdGhfb3BlbmF0KFx1MDAyNm5kLCBvcCwgZmxhZ3MgfCBMT09LVVBfUkVWQUwpO1xuZnMvbmFtZWkuYy00OTgzLVx0cmVzdG9yZV9uYW1laWRhdGEoKTtcbi0tXG5mcy9uYW1laS5jPTQ5ODc9c3RydWN0IGZpbGUgKmRvX2ZpbGVfb3Blbl9yb290KGNvbnN0IHN0cnVjdCBwYXRoICpyb290LFxuLS1cbmZzL25hbWVpLmMtNTAwMS1cdHNldF9uYW1laWRhdGEoXHUwMDI2bmQsIC0xLCBmaWxlbmFtZSwgcm9vdCk7XG5mcy9uYW1laS5jOjUwMDI6XHRmaWxlID0gcGF0aF9vcGVuYXQoXHUwMDI2bmQsIG9wLCBmbGFncyB8IExPT0tVUF9SQ1UpO1xuZnMvbmFtZWkuYy01MDAzLVx0aWYgKHVubGlrZWx5KGZpbGUgPT0gRVJSX1BUUigtRUNISUxEKSkpXG5mcy9uYW1laS5jOjUwMDQ6XHRcdGZpbGUgPSBwYXRoX29wZW5hdChcdTAwMjZuZCwgb3AsIGZsYWdzKTtcbmZzL25hbWVpLmMtNTAwNS1cdGlmICh1bmxpa2VseShmaWxlID09IEVSUl9QVFIoLUVTVEFMRSkpKVxuZnMvbmFtZWkuYzo1MDA2Olx0XHRmaWxlID0gcGF0aF9vcGVuYXQoXHUwMDI2bmQsIG9wLCBmbGFncyB8IExPT0tVUF9SRVZBTCk7XG5mcy9uYW1laS5jLTUwMDctXHRyZXN0b3JlX25hbWVpZGF0YSgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipGb2N1c2luZyBpbiBvbiBGaWxlc3lzdGVtIENyZWF0aW9uIGFuZCBBY2Nlc3MqKgoKQWxyaWdodCwgSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb3JlIHN5c3RlbSBjYWxscyByZWxhdGVkIHRvIGZpbGUgY3JlYXRpb24gYW5kIGRpcmVjdG9yeSBvcGVyYXRpb25zLCBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGUga2VybmVsIGlzIGhhbmRsaW5nIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc3lzdGVtIGNhbGxzIGFuZCBhbnkgcmVsYXRlZCBhYnN0cmFjdGlvbnMuIExldCYjMzk7cyBzZWUuLi5JIHRoaW5rIGBkb19zeXNfb3BlbmF0MmAgaXMgYSBncmVhdCBwb2ludCBvZiBmb2N1cyBoZXJlLiBUaGF0IHNob3VsZCBhbGxvdyBtZSB0byBnbyBvdmVyIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBvZiBvcGVuYXQyIGFuZCBzZWUgaWYgaXQmIzM5O3MgdGhlIHJpZ2h0IHN5bWJvbCB0byBzdGFydCB3aXRoLiBgcGF0aF9vcGVuYXRgIGlzIGFub3RoZXIgdmVyeSBsaWtlbHkgY2FuZGlkYXRlIGZvciBpbnZlc3RpZ2F0aW9uLiBUaGF0IGlzIGEgc29saWQganVtcGluZy1vZmYgcG9pbnQgdG9vLiBMZXQmIzM5O3Mgbm90IGZvcmdldCB0aGUgYmFzaWNzOiBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBhbmQgYGRlbnRyeV9jcmVhdGVgIGFyZSBhbGwgY3J1Y2lhbCB0byB1bmRlcnN0YW5kLiBUaG9zZSB3aWxsIGFsbG93IG1lIHRvIHRyYWNrIHRoZSBtb3JlIGJhc2ljIHBhcnRzIG9mIHRoZSBzeXN0ZW0gY2FsbC4gTm93IEkgbmVlZCB0byBzZWUgaWYgYSBmaWxlIHN5c3RlbSB0aGF0IG1pZ2h0IGJlIHJ1bm5pbmcgb24gYSBuZXR3b3JrZWQgZHJpdmUgbWF5IGJlIGhhdmluZyBpc3N1ZXMsIHNvIEkgd2lsbCBjaGVjayB0aGUgYGZzL3NtYi9jbGllbnQvZGlyLmNgIGZpbGUgYW5kIGxvb2sgZm9yIHRoZSBgY2lmc19hdG9taWNfb3BlbmAgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NpZnNfYXRvbWljX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L2Rpci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvZGlyLmM9NDg5PXN0YXRpYyBpbnQgY2lmc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtNTE5LSAqL1xuZnMvc21iL2NsaWVudC9kaXIuYzo1MjA6aW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuZnMvc21iL2NsaWVudC9kaXIuYy01MjEtXHRcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NDkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEZpbGUgU3lzdGVtIExhbmRzY2FwZTogVW5jb3ZlcmluZyBgY2lmc19hdG9taWNfb3BlbmAmIzM5O3MgT3JpZ2lucyoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGBjaWZzX2F0b21pY19vcGVuYC4gVGhlIGNsdWUgaXMgdGhhdCBpdCYjMzk7cyBleHBvcnRlZCBvciB1c2VkIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZXhwbG9yZSBvdGhlciBmaWxlIHN5c3RlbXMgdGhhdCBhbHNvIHV0aWxpemUgc2ltaWxhciBhdG9taWMgb3BlbiBzZW1hbnRpY3MuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgdGhlIGBmcy85cC92ZnNfaW5vZGUuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvciB1c2FnZSBvZiBgdjlmc192ZnNfYXRvbWljX29wZW5gLiBJdCBtYWtlcyBzZW5zZSB0byBzdGFydCBoZXJlIGJlY2F1c2UgdGhlIDlwIGZpbGVzeXN0ZW0sIHdpdGggaXRzIHNpbWlsYXIgZGlzdHJpYnV0ZWQgZmlsZSBzeXN0ZW0gYXBwcm9hY2gsIG1pZ2h0IG9mZmVyIGluc2lnaHRzIGludG8gaG93IGF0b21pYyBvcGVuIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhpcyB0eXBlIG9mIGVudmlyb25tZW50LiBVbmRlcnN0YW5kaW5nIHRoZSBgOXBgIGltcGxlbWVudGF0aW9uIGNvdWxkIHJldmVhbCBjb21tb24gcGF0dGVybnMgb3IgcHJvdmlkZSBhIHVzZWZ1bCBwb2ludCBvZiBjb21wYXJpc29uIHRvIGlsbHVtaW5hdGUgaG93IGBjaWZzX2F0b21pY19vcGVuYCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2OWZzX3Zmc19hdG9taWNfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLzlwL3Zmc19pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL3Zmc19pbm9kZS5jPTU3OT12OWZzX2NyZWF0ZShzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy85cC92ZnNfaW5vZGUuYy02NDktICpcbmZzLzlwL3Zmc19pbm9kZS5jOjY1MDogKiBvcGVuKC4uLCBPX0NSRUFUKSBpcyBoYW5kbGVkIGluIHY5ZnNfdmZzX2F0b21pY19vcGVuKCkuICBUaGlzIGlzIG9ubHkgY2FsbGVkXG5mcy85cC92ZnNfaW5vZGUuYy02NTEtICogZm9yIG1rbm9kKDIpLlxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jPTc2OD1zdGF0aWMgaW50XG5mcy85cC92ZnNfaW5vZGUuYzo3Njk6djlmc192ZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzLzlwL3Zmc19pbm9kZS5jLTc3MC1cdFx0ICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUpXG4tLVxuZnMvOXAvdmZzX2lub2RlLmM9MTM2OT1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9uc19kb3R1ID0ge1xuLS1cbmZzLzlwL3Zmc19pbm9kZS5jLTEzNzEtXHQubG9va3VwID0gdjlmc192ZnNfbG9va3VwLFxuZnMvOXAvdmZzX2lub2RlLmM6MTM3MjpcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuLFxuZnMvOXAvdmZzX2lub2RlLmMtMTM3My1cdC5zeW1saW5rID0gdjlmc192ZnNfc3ltbGluayxcbi0tXG5mcy85cC92ZnNfaW5vZGUuYz0xMzg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2OWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzLzlwL3Zmc19pbm9kZS5jLTEzODYtXHQubG9va3VwID0gdjlmc192ZnNfbG9va3VwLFxuZnMvOXAvdmZzX2lub2RlLmM6MTM4NzpcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuLFxuZnMvOXAvdmZzX2lub2RlLmMtMTM4OC1cdC51bmxpbmsgPSB2OWZzX3Zmc191bmxpbmssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlZmluZW1lbnQgb2YgRm9jdXMgU3ltYm9scyBmb3IgRmlsZSBTeXN0ZW0gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY3JpdGljYWwgc3ltYm9scyB0byBmb2N1cyBvbiBmb3IgYSBkZWVwIGRpdmUuIEluaXRpYWxseSwgSSBoYWQgYSBsaXN0OiBgcGF0aF9vcGVuYXRgLCBgZG9fc3lzX29wZW5hdDJgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBjaWZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLiBCdXQgdGhlbiBJIHJlYWxpemVkIGBkb19zeXNfb3BlbmF0MmAgaXMgYSBzeXNjYWxsIGVudHJ5LCBzbyBtYXliZSBgZG9fZmlscF9vcGVuYCBvciwgYmV0dGVyIHlldCwganVzdCBgcGF0aF9vcGVuYXRgIGlzIGEgc3Ryb25nZXIgY2hvaWNlIGFzIGEgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBgb3BlbmF0MmAgc3lzdGVtIGNhbGwuCgpTbywgSSYjMzk7bSBnb2luZyB0byByZWZpbmUgdGhhdCBpbml0aWFsIGxpc3QuIEl0JiMzOTtzIG5vdzogYHBhdGhfb3BlbmF0YCwgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYGRlbnRyeV9jcmVhdGVgLCBgY2lmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGZ1c2VfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLgoKTmV4dCwgSSBuZWVkIHRvIGNvcnJlbGF0ZSB0aGVzZSB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGludG8gdGhlc2UgS2NvbmZpZyBvcHRpb25zOiBgOVBfRlNgLCBgQ0VQSF9GU2AsIGBGVVNFX0ZTYCwgYEdGUzJfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYFZCT1hTRl9GU2AuIEEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGFsd2F5cyBpbiBvcmRlcjsgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYFZCT1hTRl9GU2AgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IHN5bWJvbCBmb3IgdGhhdCBmaWxlc3lzdGVtLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWQk9YU0ZfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy92Ym94c2YvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy92Ym94c2YvS2NvbmZpZzoxOmNvbmZpZyBWQk9YU0ZfRlNcbmZzL3Zib3hzZi9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsQm94IGd1ZXN0IHNoYXJlZCBmb2xkZXIgKHZib3hzZikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYwNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRmlsZXN5c3RlbSBQcm90b2NvbCBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGRlZmluaXRlbHkgZm9jdXNpbmcgb24gYFZCT1hTRl9GU2AuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHBhdGguIEJ1dCBub3cgSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBicm9hZGVyOiBXaGF0IGFyZSB0aGUgb3RoZXIgbGlrZWx5IGNhbmRpZGF0ZXMsIGV2ZW4gaWYgdGhleSBhcmVuJiMzOTt0IHRoZSBwcmltYXJ5IGZvY3VzPyBBbmQsIHNpbmNlIHdlJiMzOTtyZSBkaXZpbmcgaW50byBmaWxlIHN5c3RlbXMsIHdvdWxkbiYjMzk7dCBgOVBfRlNgIGFsc28gYmUgcmVsZXZhbnQgdG8gY29uc2lkZXIsIGV2ZW4gaWYganVzdCBmb3IgYSBxdWljayBjb21wYXJpc29uIG9mIGNhcGFiaWxpdGllcyBvciBwb3RlbnRpYWwgZWRnZSBjYXNlcz8gSnVzdCB0aHJvd2luZyBpdCBvdXQgdGhlcmUgYXMgc29tZXRoaW5nIHRvIHF1aWNrbHkgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgOVBfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy85cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzLzlwL0tjb25maWc6Mjpjb25maWcgOVBfRlNcbmZzLzlwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1BsYW4gOSBSZXNvdXJjZSBTaGFyaW5nIFN1cHBvcnQgKDlQMjAwMClcJiMzNDtcbi0tXG5mcy85cC9LY29uZmlnPTE0PWlmIDlQX0ZTXG5mcy85cC9LY29uZmlnOjE1OmNvbmZpZyA5UF9GU0NBQ0hFXG5mcy85cC9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzLzlwL0tjb25maWctMjItXG5mcy85cC9LY29uZmlnOjIzOmNvbmZpZyA5UF9GU19QT1NJWF9BQ0xcbmZzLzlwL0tjb25maWctMjQtXHRib29sIFwmIzM0OzlQIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvOXAvS2NvbmZpZz0zMj1lbmRpZlxuLS1cbmZzLzlwL0tjb25maWctMzQtXG5mcy85cC9LY29uZmlnOjM1OmNvbmZpZyA5UF9GU19TRUNVUklUWVxuZnMvOXAvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7OVAgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDU5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkZpbGUgU3lzdGVtIENvbnNpZGVyYXRpb25zKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBmaWxlIHN5c3RlbXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAqeWVzKiwgbGV0JiMzOTtzIGNvbnNpZGVyIGA5UF9GU2AuIEl0JiMzOTtzIGdvdCBpdHMgcHJvcywgd2Uga25vdyBpdCwgaXRzIHN0cmVuZ3RocyBhbmQgd2Vha25lc3NlcyBhcmUgZmFtaWxpYXIuIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBmYXIgZG93biB0aGF0IHJvYWQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcuIFRoZSBxdWVzdGlvbiBpcywgd2hhdCBhYm91dCBgQ0VQSF9GU2A/IEl0JiMzOTtzIGEgZGlzdHJpYnV0ZWQgZmlsZSBzeXN0ZW0sIHBvdGVudGlhbGx5IG9mZmVyaW5nIGFkdmFudGFnZXMgaW4gc2NhbGFiaWxpdHkgYW5kIHJlZHVuZGFuY3kuIEkgbmVlZCB0byB3ZWlnaCB0aGUgcHJvcyBhbmQgY29ucyBvZiBib3RoLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBzcGVjaWZpYyByZXF1aXJlbWVudHMgb2YgdGhpcyBwcm9qZWN0IGFuZCB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGNvdmVyZWQgYWxsIGJhc2VzIGJlZm9yZSBjb21taXR0aW5nIHRvIGEgZmluYWwgZGVjaXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRVBIX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvY2VwaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NlcGgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvY2VwaC9LY29uZmlnOjI6Y29uZmlnIENFUEhfRlNcbmZzL2NlcGgvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q2VwaCBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbVwmIzM0O1xuLS1cbmZzL2NlcGgvS2NvbmZpZz0xOT1pZiBDRVBIX0ZTXG5mcy9jZXBoL0tjb25maWc6MjA6Y29uZmlnIENFUEhfRlNDQUNIRVxuZnMvY2VwaC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtFbmFibGUgQ2VwaCBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvY2VwaC9LY29uZmlnPTI3PWVuZGlmXG5mcy9jZXBoL0tjb25maWctMjgtXG5mcy9jZXBoL0tjb25maWc6Mjk6Y29uZmlnIENFUEhfRlNfUE9TSVhfQUNMXG5mcy9jZXBoL0tjb25maWctMzAtXHRib29sIFwmIzM0O0NlcGggUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9jZXBoL0tjb25maWctMzgtXG5mcy9jZXBoL0tjb25maWc6Mzk6Y29uZmlnIENFUEhfRlNfU0VDVVJJVFlfTEFCRUxcbmZzL2NlcGgvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7Q2VwaEZTIFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjUxNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeToKCioqRmlsZXN5c3RlbSBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYSBgQ0VQSF9GU2Agc2l0dWF0aW9uLiBUaGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYWx0ZXJuYXRpdmVzLCBwb3RlbnRpYWwgZWRnZSBjYXNlcywgYW5kIGFyZWFzIHRoYXQgbWlnaHQgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhlbiBpcywgd2hhdCBhYm91dCBgRlVTRV9GU2A/IERvZXMgdGhpcyBpbnRlcmZhY2Ugb2ZmZXIgYW55IGJlbmVmaXRzIG9yIGRyYXdiYWNrcywgY29tcGF0aWJpbGl0eSBjb25jZXJucywgb3IgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZXMgcmVsYXRpdmUgdG8gdGhlIENlcGggaW1wbGVtZW50YXRpb24/IFRoZSBpbXBsaWNhdGlvbnMgY291bGQgYmUgc2lnbmlmaWNhbnQuIExldCYjMzk7cyBkZWx2ZSBkZWVwZXIgYW5kIGFzc2VzcyB3aGljaCBvcHRpb24gaXMgb3B0aW1hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVU0VfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mdXNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xuZnMvZnVzZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjc2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyBGaWxlIFN5c3RlbSBJbXBsZW1lbnRhdGlvbnMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgYSBjbGVhciBhY2tub3dsZWRnbWVudDogKmBGVVNFX0ZTYCouIFRoYXQmIzM5O3Mgb24gdGhlIHRhYmxlLiBCdXQgaGFuZyBvbiwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBGVVNFIGltcGxlbWVudGF0aW9uIHJvdXRlLi4ud2hhdCBhYm91dCBgR0ZTMl9GU2A/IEl0JiMzOTtzIGNydWNpYWwgdG8gZXZhbHVhdGUgYWxsIHZpYWJsZSBvcHRpb25zLCBhbmQgYSBkaXN0cmlidXRlZCwgY2x1c3Rlci1hd2FyZSBmaWxlIHN5c3RlbSBsaWtlIEdGUzIgd2FycmFudHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIFt5b3VyIHNwZWNpZmljIGZpZWxkL2FwcGxpY2F0aW9uXSBhbmQgaXRzIGxpa2VseSBkZW1hbmRzIGZvciBzY2FsYWJpbGl0eSwgaGlnaCBhdmFpbGFiaWxpdHksIGFuZCBjb25jdXJyZW50IGFjY2Vzcy4gSSBuZWVkIHRvIHdlaWdoIHRoZSBpbmhlcmVudCBhZHZhbnRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzIG9mICpib3RoKiBhcHByb2FjaGVzIHRvIHNlZSB3aGljaCBvbmUsIG9yIGNvbWJpbmF0aW9uIHRoZXJlb2YsIGlzIHRoZSBtb3N0IGFwcHJvcHJpYXRlLiBUaGUgZGVzaWduIHRyYWRlb2ZmcyBoZXJlIGFyZSBzdWJzdGFudGlhbCwgYW5kIHdhcnJhbnQgdGhpcyBpbml0aWFsIGNvbXBhcmlzb24sIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgR0ZTMl9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2dmczIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9nZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2dmczIvS2NvbmZpZzoyOmNvbmZpZyBHRlMyX0ZTXG5mcy9nZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2dmczIvS2NvbmZpZy0yNi1cbmZzL2dmczIvS2NvbmZpZzoyNzpjb25maWcgR0ZTMl9GU19MT0NLSU5HX0RMTVxuZnMvZ2ZzMi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtHRlMyIERMTSBsb2NraW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTMyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSB0aG91Z2h0cywgYW5kIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkZpbGVzeXN0ZW0gQ29uc2lkZXJhdGlvbnM6IEdGUzIgYW5kIE5GUyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYSBzdHJvbmcgYWZmaXJtYXRpdmUuIFllcywgZGVmaW5pdGVseSwgYEdGUzJfRlNgIGlzIGEgZ28gZm9yIGNvbnNpZGVyYXRpb24gaGVyZS4gVGhlIGRpc3RyaWJ1dGVkIG5hdHVyZSwgaXRzIGluaGVyZW50IGNsdXN0ZXJpbmcgY2FwYWJpbGl0aWVzLCBhbmQgaXRzIGdlbmVyYWwgcGVyZm9ybWFuY2UgcHJvZmlsZSBpbiB0aGUgaW50ZW5kZWQgd29ya2xvYWQgYXJlIGFsbCBnb29kIHJlYXNvbnMgdG8gc3RhcnQgdGhlcmUuIFdlJiMzOTtyZSBvbiB0aGUgcmlnaHQgdHJhY2suCgpCdXQsIGJlZm9yZSB3ZSBnZXQgdG9vIGZhciBkb3duIHRoYXQgcGF0aC4uLml0JiMzOTtzIGNyaXRpY2FsIHRoYXQgSSBkb24mIzM5O3Qgb3Zlcmxvb2sgYSBjcml0aWNhbCBvcHRpb24uIEhvbGQgb24gYSBtb21lbnQuIFdoYXQgYWJvdXQgYSBtb3JlIG5ldHdvcmstY2VudHJpYyBhcHByb2FjaD8gSG93IGRvZXMgYE5GU19GU2Agc3RhY2sgdXAgYWdhaW5zdCBgR0ZTMmAgaW4gdGhpcyBzcGVjaWZpYyB1c2UgY2FzZT8gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHdlaWdoIHRoYXQgb3V0IGFzIHdlbGwsIGNvbnNpZGVyaW5nIG5ldHdvcmsgb3ZlcmhlYWQsIGNvbXBsZXhpdHkgYW5kIGRhdGEgY29uc2lzdGVuY3kgbW9kZWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL25mcy9LY29uZmlnOjI6Y29uZmlnIE5GU19GU1xuZnMvbmZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05GUyBjbGllbnQgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL25mcy9LY29uZmlnPTE2Mj1jb25maWcgUk9PVF9ORlNcbi0tXG5mcy9uZnMvS2NvbmZpZy0xNzItXG5mcy9uZnMvS2NvbmZpZzoxNzM6Y29uZmlnIE5GU19GU0NBQ0hFXG5mcy9uZnMvS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O1Byb3ZpZGUgTkZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1MTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5ldHdvcmsgRmlsZXN5c3RlbXMgLSBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGEgY2xlYXIgY29uZmlybWF0aW9uOiB5ZXMsIE5ldHdvcmsgRmlsZSBTeXN0ZW0gaXMgZGVmaW5pdGVseSBvbiB0aGUgdGFibGUuIEl0JiMzOTtzIGEga2V5IGNvbnRlbmRlci4gQnV0IHRoZSBuZXh0IGltbWVkaWF0ZSBxdWVzdGlvbiwgdGhlIG9uZSB0aGF0IG5hdHVyYWxseSBmb2xsb3dzLCBpczogV2hhdCBhYm91dCBDb21tb24gSW50ZXJuZXQgRmlsZSBTeXN0ZW0/IENJRlMgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgbmV0d29yayBmaWxlc3lzdGVtcyBhbmQgdGhlaXIgc3VpdGFiaWxpdHksIHNvIHdlIGhhdmUgdG8gd2VpZ2ggdGhlIHByb3MgYW5kIGNvbnMgb2YgTkZTIHZlcnN1cyBDSUZTIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgYSBjb3JlIGRlc2lnbiBkZWNpc2lvbiwgYW5kIHdlIGhhdmUgdG8gZmFjdG9yIGluIGludGVyb3BlcmFiaWxpdHksIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcywgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBhbmQgcG90ZW50aWFsIGNsaWVudCBiYXNlLiBXZSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdXNpbmcgZWl0aGVyIGFuZCB0aGUgcG90ZW50aWFsIHRyYWRlb2Zmcy4gVGhlIGNvbXBhcmF0aXZlIG1lcml0cyBvZiBlYWNoIG5lZWQgdG8gYmUgY2FyZWZ1bGx5IGV4YW1pbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0lGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXG5mcy9zbWIvY2xpZW50L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo1NDpjb25maWcgQ0lGU19TVEFUUzJcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7RXh0ZW5kZWQgc3RhdGlzdGljc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02Ny1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctODQtXHRib29sIFwmIzM0O0tlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjkyOmNvbmZpZyBDSUZTX1hBVFRSXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXHRib29sIFwmIzM0O0NJRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMDYtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDtDSUZTIFBPU0lYIEV4dGVuc2lvbnNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMjg6Y29uZmlnIENJRlNfREVCVUcyXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYWRkaXRpb25hbCBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMzgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7RHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNTAtXHRib29sIFwmIzM0O0RGUyBmZWF0dXJlIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE2Mjpjb25maWcgQ0lGU19TV05fVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVx0Ym9vbCBcJiMzNDtTV04gZmVhdHVyZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE3Mi1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0FsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTgxOmNvbmZpZyBDSUZTX1NNQl9ESVJFQ1RcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXHRib29sIFwmIzM0O1NNQiBEaXJlY3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXHRib29sIFwmIzM0O1Byb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwMC1cdGJvb2wgXCYjMzQ7U01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIwNzpjb25maWcgQ0lGU19DT01QUkVTU0lPTlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U01CIG1lc3NhZ2UgY29tcHJlc3Npb24gKEV4cGVyaW1lbnRhbClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3ODAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbHMgZm9yIGEgVkZTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBmaWd1cmluZyBvdXQgaG93IHRvIGNvbmZpZ3VyZSBzeXpib3QgdG8gYmVzdCB0ZXN0IGl0LiBUaGUgY29yZSBvZiB0aGlzIGlzIHRoZSBWRlMsIGJ1dCBpdCB0b3VjaGVzIGEgbnVtYmVyIG9mIGZpbGVzeXN0ZW1zLiBGaXJzdCwgcmVnYXJkaW5nIGZpbGVzeXN0ZW1zOiBgQ0lGU2AsIGRlZmluaXRlbHkuIEkgc2VlIHRoZSBjb25maWdzIGFyZTogYDlQX0ZTYCwgYENFUEhfRlNgLCBgRlVTRV9GU2AsIGBHRlMyX0ZTYCwgYE5GU19GU2AsIGBDSUZTYCwgYW5kIGBWQk9YU0ZfRlNgLiBIbW0sIGRvIEkgbGlzdCB0aGVtIGFsbD8gVGhlIHByb21wdCBzYXlzICYjMzQ7RG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0IHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4mIzM0OyBXaGlsZSB0aGVzZSBmaWxlc3lzdGVtcyAqYXJlKiBzcGVjaWZpYyB0byB0aGUgY29kZSBjaGFuZ2VzLCBpdCYjMzk7cyBwb3NzaWJsZSB0aGV5IGFyZSBhbHJlYWR5IGVuYWJsZWQgaW4gZ2VuZXJpYyBjb25maWdzLiBJIGtub3cgYDlQX0ZTYCwgYENFUEhfRlNgLCBgRlVTRV9GU2AsIGBHRlMyX0ZTYCwgYE5GU19GU2AsIGFuZCBgQ0lGU2AgYXJlIGZvciBzdXJlIGVuYWJsZWQgaW4gc3l6Ym90LiBgVkJPWFNGX0ZTYCBtaWdodCBub3QgYmUsIGJ1dCBsaXN0aW5nIGl0IGlzIHNhZmUgYW55d2F5LCBhbmQgcmVhbGx5LCB0aGUgVkZTIGNoYW5nZXMgY2FuIGJlIHRlc3RlZCB3aXRoIGFueSBmaWxlc3lzdGVtLiBTdGlsbCwgbGlzdGluZyB0aGVzZSBmaWxlc3lzdGVtcyBpcyBhIGdvb2QgaWRlYS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHN5bWJvbHMuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZTogYHBhdGhfb3BlbmF0YCwgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYGRlbnRyeV9jcmVhdGVgLCBgY2lmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGZ1c2VfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLiBCdXQgd2FpdCwgdGhlcmUgYXJlIGFsc28gYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgIGFuZCBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGJvdGggb2Ygd2hpY2ggYXJlIGFsc28gbW9kaWZpZWQuIEkmIzM5O2xsIGFkZCB0aGVtIHRvIHRoZSBsaXN0IGFzIHdlbGwuCgpJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGVudHJ5IHBvaW50cy4gYHBhdGhfb3BlbmF0YCBzZWVtcyBsaWtlIHRoZSBtYWluIGZ1bmN0aW9uIHRvIGZvY3VzIG9uLCBoYW5kbGluZyBgT19DUkVBVGAgYW5kIGBPX0RJUkVDVE9SWWAuIGB2ZnNfbWtkaXJgIGhhbmRsZXMgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAsIGB2ZnNfY3JlYXRlYCBoYW5kbGVzIGBPX0NSRUFUYCAod2l0aG91dCBgT19ESVJFQ1RPUllgKSwgYW5kIGBkZW50cnlfY3JlYXRlYCBpcyBzb21ldGltZXMgdXNlZCB3aXRoIGBPX0NSRUFUYC4KCkxldCYjMzk7cyBsb29rIGZvciBvdGhlciBpbXBvcnRhbnQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgcmVsZXZhbnQgZmlsZXMuIEkmIzM5O2xsIGNoZWNrIGBmcy9uYW1laS5jYCwgc3RhcnRpbmcgd2l0aCBgZG9fc3lzX29wZW5hdDJgIHdoaWNoIGlzIGFjdHVhbGx5IGluIGBmcy9vcGVuLmNgLiBJJiMzOTtsbCBhZGQgdGhhdCB0byB0aGUgbGlzdC4gSSYjMzk7bGwgYWxzbyBsb29rIGZvciBvdGhlciBrZXkgZnVuY3Rpb25zIHRvIHRlc3QuIEkgc2VlIGBtYXlfY3JlYXRlX2luX3N0aWNreWAgaXMgbW9kaWZpZWQuIEl0JiMzOTtzIHN0YXRpYywgc28gaXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQsIEkgd2lsbCBza2lwIGl0LiBgdmZzX21rZGlyX25vX3Blcm1gIGlzIHN0YXRpYyBpbmxpbmUsIHNvIEkgZG9uJiMzOTt0IG5lZWQgdG8gbGlzdCBpdC4gYGxvb2t1cF9vcGVuYCwgYGF0b21pY19vcGVuYCwgYG1heV9vX2NyZWF0ZWAsIGBvX2NyZWF0ZV9tb2RlYCwgYHZmc19wcmVwYXJlX21vZGVgLCBgdmZzX2NyZWF0ZV9ub19wZXJtYCwgYHRyYWlsaW5nX3NsYXNoZXNgLCBgbG9va3VwX2xhc3RgLCBgb3Blbl9sYXN0X2xvb2t1cHNgLCBgZG9fb3BlbmAsIGFuZCBgZmlsZW5hbWVfY3JlYXRlYCBhcmUgYWxsIHN0YXRpYyBhbmQgc28gd2lsbCBub3QgYmUgYWRkZWQuIEZpbmFsbHkgYGZpbGVuYW1lX3VubGlua2F0YCBpcyBpbiBgZnMvbmFtZWkuY2AgYW5kIG5vdCBzdGF0aWMsIGFuZCBzbyBJIHNob3VsZCBhZGQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGVuYW1lX3VubGlua2F0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uYW1laS5jPTU2MjY9RVhQT1JUX1NZTUJPTCh2ZnNfdW5saW5rKTtcbi0tXG5mcy9uYW1laS5jLTU2MzMtICovXG5mcy9uYW1laS5jOjU2MzQ6aW50IGZpbGVuYW1lX3VubGlua2F0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcbmZzL25hbWVpLmMtNTYzNS17XG4tLVxuZnMvbmFtZWkuYz01Njk3PVNZU0NBTExfREVGSU5FMyh1bmxpbmthdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCBpbnQsIGZsYWcpXG4tLVxuZnMvbmFtZWkuYy01NzA0LVx0XHRyZXR1cm4gZmlsZW5hbWVfcm1kaXIoZGZkLCBuYW1lKTtcbmZzL25hbWVpLmM6NTcwNTpcdHJldHVybiBmaWxlbmFtZV91bmxpbmthdChkZmQsIG5hbWUpO1xuZnMvbmFtZWkuYy01NzA2LX1cbi0tXG5mcy9uYW1laS5jPTU3MDg9U1lTQ0FMTF9ERUZJTkUxKHVubGluaywgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUpXG4tLVxuZnMvbmFtZWkuYy01NzEwLVx0Q0xBU1MoZmlsZW5hbWUsIG5hbWUpKHBhdGhuYW1lKTtcbmZzL25hbWVpLmM6NTcxMTpcdHJldHVybiBmaWxlbmFtZV91bmxpbmthdChBVF9GRENXRCwgbmFtZSk7XG5mcy9uYW1laS5jLTU3MTItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjgyNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBOb24tU3RhdGljIGBmaWxlbmFtZV9gIEZ1bmN0aW9ucyoqCgpIbW0sIHNvIGBmaWxlbmFtZV91bmxpbmthdGAgYW5kIGBmaWxlbmFtZV9yZW5hbWVhdDJgIGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlaXIgaW1tZWRpYXRlIGNvbXBpbGF0aW9uIHVuaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gV2h5IHdlcmUgdGhleSBkZXNpZ25lZCB0aGlzIHdheT8gQXJlIHRoZXkgcGFydCBvZiBzb21lIGxhcmdlciBpbnRlcmZhY2UsIG9yIGlzIHRoaXMgcGVyaGFwcyBhbiBvdmVyc2lnaHQgdGhhdCYjMzk7cyBjcmVwdCBpbnRvIHRoZSBjb2RlIGJhc2U/CgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBzb3VyY2UuIE15IGZpcnN0IHBvcnQgb2YgY2FsbCwgbmF0dXJhbGx5LCBpcyBgZnMvbmFtZWkuY2AuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBmaWxlbmFtZV9yZW5hbWVhdDJgIChvciBhdCBsZWFzdCBpdHMgZGVmaW5pdGlvbikgdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIG5hbWVzcGFjZS4gSXMgaXQgYmVpbmcgdXNlZCBieSBhbnkgZXh0ZXJuYWwgbW9kdWxlcz8gV2hhdCYjMzk7cyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbj8gVGltZSB0byBncmFiIHRoZSBjb2RlIGFuZCBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWxlbmFtZV9yZW5hbWVhdDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uYW1laS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9NjIwMj1FWFBPUlRfU1lNQk9MKHZmc19yZW5hbWUpO1xuZnMvbmFtZWkuYy02MjAzLVxuZnMvbmFtZWkuYzo2MjA0OmludCBmaWxlbmFtZV9yZW5hbWVhdDIoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpmcm9tLFxuZnMvbmFtZWkuYy02MjA1LVx0XHQgICAgICAgaW50IG5ld2RmZCwgc3RydWN0IGZpbGVuYW1lICp0bywgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmZzL25hbWVpLmM9NjMwNz1TWVNDQUxMX0RFRklORTUocmVuYW1lYXQyLCBpbnQsIG9sZGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgb2xkbmFtZSxcbi0tXG5mcy9uYW1laS5jLTYzMTEtXHRDTEFTUyhmaWxlbmFtZSwgbmV3KShuZXduYW1lKTtcbmZzL25hbWVpLmM6NjMxMjpcdHJldHVybiBmaWxlbmFtZV9yZW5hbWVhdDIob2xkZGZkLCBvbGQsIG5ld2RmZCwgbmV3LCBmbGFncyk7XG5mcy9uYW1laS5jLTYzMTMtfVxuLS1cbmZzL25hbWVpLmM9NjMxNT1TWVNDQUxMX0RFRklORTQocmVuYW1lYXQsIGludCwgb2xkZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBvbGRuYW1lLFxuLS1cbmZzL25hbWVpLmMtNjMxOS1cdENMQVNTKGZpbGVuYW1lLCBuZXcpKG5ld25hbWUpO1xuZnMvbmFtZWkuYzo2MzIwOlx0cmV0dXJuIGZpbGVuYW1lX3JlbmFtZWF0MihvbGRkZmQsIG9sZCwgbmV3ZGZkLCBuZXcsIDApO1xuZnMvbmFtZWkuYy02MzIxLX1cbi0tXG5mcy9uYW1laS5jPTYzMjM9U1lTQ0FMTF9ERUZJTkUyKHJlbmFtZSwgY29uc3QgY2hhciBfX3VzZXIgKiwgb2xkbmFtZSwgY29uc3QgY2hhciBfX3VzZXIgKiwgbmV3bmFtZSlcbi0tXG5mcy9uYW1laS5jLTYzMjYtXHRDTEFTUyhmaWxlbmFtZSwgbmV3KShuZXduYW1lKTtcbmZzL25hbWVpLmM6NjMyNzpcdHJldHVybiBmaWxlbmFtZV9yZW5hbWVhdDIoQVRfRkRDV0QsIG9sZCwgQVRfRkRDV0QsIG5ldywgMCk7XG5mcy9uYW1laS5jLTYzMjgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzU3NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IEZpbGVzeXN0ZW0gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgdGhyb3VnaCB0aGVzZSByZWNlbnQgY2hhbmdlcywgYW5kIGl0IHNlZW1zIGxpa2UgYGZpbGVuYW1lX3VubGlua2F0YCBhbmQgYGZpbGVuYW1lX3JlbmFtZWF0MmAgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIHVzZSB0aGlzIG5ldyBgdHJhaWxpbmdfc2xhc2hlc2AgZnVuY3Rpb24sIHdoaWNoIGlzLCBobW0sIGFuIGlubGluZSBmdW5jdGlvbi4gSSBzZWUgaXQmIzM5O3MgZGVmaW5lZCBsaWtlIHRoaXM6CmBgYGMKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhjb25zdCBzdHJ1Y3QgcXN0ciBsYXN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIChib29sKWxhc3QubmFtZVtsYXN0Lmxlbl07CiYjNDM7fQpgYGAKRXNzZW50aWFsbHksIGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyB0aGUgaW5kZXhpbmcgbWV0aG9kIGBsYXN0Lm5hbWVbbGFzdC5sZW5dYCB3aXRoIHRoZSBtb3JlIGV4cGxpY2l0IGZ1bmN0aW9uIGNhbGwgdG8gYHRyYWlsaW5nX3NsYXNoZXNgLiBUaGlzIGlzbiYjMzk7dCB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBsaWVzLiBUaGF0IHNlZW1zIHRvIGJlIGhhcHBlbmluZyBpbiBgb3BlbmF0YCB3aGVuIHVzaW5nIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHJlYWxseSBkaWcgaW50byBhcmU6IGBwYXRoX29wZW5hdGAsIGBkb19zeXNfb3BlbmF0MmAsIGB2ZnNfbWtkaXJgLCBgdmZzX2NyZWF0ZWAsIGFuZCBgZGVudHJ5X2NyZWF0ZWAuIFRob3NlIGZlZWwgbGlrZSB0aGUgaGVhcnQgb2YgaXQuCgpCdXQgdGhlbiB0aGVyZSYjMzk7cyBhbHNvIHRoZSByZWxhdGVkIGZpbGUgc3lzdGVtIGZ1bmN0aW9ucyBJIG5lZWQgdG8gY2hlY2ssIHRoZSBjaGFuZ2VzIHRoYXQgdXNlIHRoZSBuZXdseSBjcmVhdGVkIGB0cmFpbGluZ19zbGFzaGVzYCBmdW5jdGlvbjogYGZpbGVuYW1lX3VubGlua2F0YCwgYGZpbGVuYW1lX3JlbmFtZWF0MmAuIEFuZCB0aGUgYXRvbWljIG9wZW4gZnVuY3Rpb25zOiBgY2lmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsYCwgYGNlcGhfYXRvbWljX29wZW5gLCBgZnVzZV9hdG9taWNfb3BlbmAsIGBnZnMyX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5fdjIzYCwgYW5kIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC4gR290dGEgbWFrZSBzdXJlIEkgcmV2aWV3IGFsbCBvZiB0aGVzZS4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYGRvX3N5c19vcGVuYXQyYCBpcyBleHBvcnRlZCBvciBzdGF0aWMgdG8gZ2V0IGFuIG92ZXJhbGwgdmlldyBvZiB0aGUgZnVuY3Rpb25zIGluIHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3N5c19vcGVuYXQyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb3Blbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29wZW4uYz0xMzY3PUVYUE9SVF9TWU1CT0woZmlsZV9vcGVuX3Jvb3QpO1xuZnMvb3Blbi5jLTEzNjgtXG5mcy9vcGVuLmM6MTM2OTpzdGF0aWMgaW50IGRvX3N5c19vcGVuYXQyKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSxcbmZzL29wZW4uYy0xMzcwLVx0XHRcdCAgc3RydWN0IG9wZW5faG93ICpob3cpXG4tLVxuZnMvb3Blbi5jPTEzODE9aW50IGRvX3N5c19vcGVuKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUpXG4tLVxuZnMvb3Blbi5jLTEzODMtXHRzdHJ1Y3Qgb3Blbl9ob3cgaG93ID0gYnVpbGRfb3Blbl9ob3coZmxhZ3MsIG1vZGUpO1xuZnMvb3Blbi5jOjEzODQ6XHRyZXR1cm4gZG9fc3lzX29wZW5hdDIoZGZkLCBmaWxlbmFtZSwgXHUwMDI2aG93KTtcbmZzL29wZW4uYy0xMzg1LX1cbi0tXG5mcy9vcGVuLmM9MTQwMz1TWVNDQUxMX0RFRklORTQob3BlbmF0MiwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLFxuLS1cbmZzL29wZW4uYy0xNDI2LVxuZnMvb3Blbi5jOjE0Mjc6XHRyZXR1cm4gZG9fc3lzX29wZW5hdDIoZGZkLCBmaWxlbmFtZSwgXHUwMDI2dG1wKTtcbmZzL29wZW4uYy0xNDI4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2MzYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE9wZW5hdCBPX0NSRUFUIHwgT19ESVJFQ1RPUlkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgYGRvX3N5c19vcGVuYCBhbmQgYGRvX3N5c19vcGVuYXQyYCwgYnV0IGFmdGVyIGEgc2Vjb25kIGxvb2ssIGBkb19zeXNfb3BlbmAgc2VlbXMgdG8gYmUgdGhlIHJpZ2h0IGNob2ljZSB0byBmb2N1cyBvbiwgYW5kIHdoaWxlIGl0IGlzbiYjMzk7dCB0aGUgc3lzY2FsbCBlbnRyeSBpdHNlbGYsIHRoYXQmIzM5O3Mgd2hhdCBJIHdhbnQgdG8gdW5kZXJzdGFuZC4gSSYjMzk7bGwgYWxzbyBhZGQgYHBhdGhfb3BlbmF0YCB0byBteSB0YXJnZXQgc3ltYm9scy4KCkxldCYjMzk7cyByZWZpbmUgdGhhdCBsaXN0OiBgcGF0aF9vcGVuYXRgLCBgZG9fc3lzX29wZW5gLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGBmaWxlbmFtZV9yZW5hbWVhdDJgLCBhbmQgdGhlIHZhcmlvdXMgZmlsZXN5c3RlbSBhdG9taWMgb3BlbiBmdW5jdGlvbnM6IGBjaWZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLgoKTm93LCB0aW1lIHRvIGNvbmZpcm0gdGhlaXIgbG9jYXRpb25zOiBgZG9fc3lzX29wZW5gIGlzIGluIGBmcy9vcGVuLmNgLCBgcGF0aF9vcGVuYXRgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYCBhcmUgYWxsIGluIGBmcy9uYW1laS5jYC4gR29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQuCgpCYXNlZCBvbiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIHRoaXMgaXMgYSBWRlMtbGV2ZWwgY2hhbmdlIHRoYXQmIzM5O3MgYWxsb3dpbmcgYG9wZW5hdCgpYCB3aXRoIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgIHRvIGNyZWF0ZSBkaXJlY3Rvcmllcy4gVGhpcyB0b3VjaGVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljLCBzbyBJIG5lZWQgdG8gY2hlY2sgYWxsIHRoZSByZWxldmFudCBmaWxlc3lzdGVtcywgc3BlY2lmaWNhbGx5IHRob3NlIHdpdGggdGhlaXIgb3duIGBhdG9taWNfb3BlbmAgaW1wbGVtZW50YXRpb25zLCB0byBtYWtlIHN1cmUgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhpcyBjb3JyZWN0bHkuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBuZWVkcyBzZXJpb3VzIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcywgZXNwZWNpYWxseSBhcm91bmQgdGhlIGRpcmVjdG9yeSBjcmVhdGlvbiBhbmQgZmlsZSBvcGVuaW5nIHBhdGhzLgoKSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHRoZSBmaWxlc3lzdGVtcyBwb3RlbnRpYWxseSBhZmZlY3RlZCBhcmUgY292ZXJlZC4gVGhlIGNvbmZpZ3MgSSBhbSBhd2FyZSBvZiBhcmUgYDlQX0ZTYCwgYENFUEhfRlNgLCBgRlVTRV9GU2AsIGBHRlMyX0ZTYCwgYE5GU19GU2AsIGBDSUZTYCwgYW5kIGBWQk9YU0ZfRlNgLgoKQWxyaWdodCwgYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyBjb3ZlcmVkLiBCZXNpZGVzIHRoZSBjb3JlIGBmcy9vcGVuLmNgIGFuZCBgZnMvbmFtZWkuY2AgZmlsZXMsIEkgc2VlIHVwZGF0ZXMgdG86IGBmcy85cC92ZnNfaW5vZGUuY2AsIGBmcy85cC92ZnNfaW5vZGVfZG90bC5jYCwgYGZzL2NlcGgvZmlsZS5jYCwgYGZzL2Z1c2UvZGlyLmNgLCBgZnMvZ2ZzMi9pbm9kZS5jYCwgYGZzL25mcy9kaXIuY2AsIGBmcy9zbWIvY2xpZW50L2Rpci5jYCwgYW5kIGBmcy92Ym94c2YvZGlyLmNgLiBPa2F5LCB0aGF0IHNlZW1zIGNvbXByZWhlbnNpdmUuCgpGaW5hbGx5LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIGBPX0lTX01LRElSYCBpcyB1c2VkIGFueXdoZXJlIGVsc2UgdG8gZW5zdXJlIG5vIG90aGVyIHVuZm9yZXNlZW4gaW50ZXJhY3Rpb25zIGFyZSBwcmVzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtPX0lTX01LRElSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL3Zmc19pbm9kZS5jPTc2OT12OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jLTc3OS1cbmZzLzlwL3Zmc19pbm9kZS5jOjc4MDpcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbmZzLzlwL3Zmc19pbm9kZS5jLTc4MS1cdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbi0tXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jPTIyNz12OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy0yNDEtXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjI0MjpcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmMtMjQzLVx0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuLS1cbmZzL2NlcGgvZmlsZS5jPTc5ND1pbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2NlcGgvZmlsZS5jLTgxMy1cbmZzL2NlcGgvZmlsZS5jOjgxNDpcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbmZzL2NlcGgvZmlsZS5jLTgxNS1cdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbi0tXG5mcy9mdXNlL2Rpci5jPTkzMD1zdGF0aWMgaW50IGZ1c2VfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmVudHJ5LFxuLS1cbmZzL2Z1c2UvZGlyLmMtOTM3LVxuZnMvZnVzZS9kaXIuYzo5Mzg6XHRpZiAoT19JU19NS0RJUihmbGFncykpXG5mcy9mdXNlL2Rpci5jLTkzOS1cdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbi0tXG5mcy9nZnMyL2lub2RlLmM9MTM4ND1zdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9nZnMyL2lub2RlLmMtMTM4OS1cbmZzL2dmczIvaW5vZGUuYzoxMzkwOlx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuZnMvZ2ZzMi9pbm9kZS5jLTEzOTEtXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4tLVxuZnMvbmFtZWkuYz00NDczPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvbmFtZWkuYy00NDgzLVx0dW1vZGVfdCBtb2RlID0gb3AtXHUwMDNlbW9kZTtcbmZzL25hbWVpLmM6NDQ4NDpcdGJvb2wgY3JlYXRlX2RpciA9IE9fSVNfTUtESVIob3Blbl9mbGFnKTtcbmZzL25hbWVpLmMtNDQ4NS1cbi0tXG5mcy9uZnMvZGlyLmM9MjEwND1pbnQgbmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvbmZzL2Rpci5jLTIxMjMtXG5mcy9uZnMvZGlyLmM6MjEyNDpcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxuZnMvbmZzL2Rpci5jLTIxMjUtXHRcdG9wZW5fZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbi0tXG5mcy9uZnMvZGlyLmM9MjMwOT1pbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL25mcy9kaXIuYy0yMzE4LVxuZnMvbmZzL2Rpci5jOjIzMTk6XHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcbmZzL25mcy9kaXIuYy0yMzIwLVx0XHRvcGVuX2ZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4tLVxuZnMvb3Blbi5jPTExNTI9aW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG4tLVxuZnMvb3Blbi5jLTExOTItXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5mcy9vcGVuLmM6MTE5MzpcdFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuZnMvb3Blbi5jLTExOTQtXHRcdFx0b3AtXHUwMDNlbW9kZSA9IGhvdy1cdTAwM2Vtb2RlIHwgU19JRkRJUjtcbi0tXG5mcy9zbWIvY2xpZW50L2Rpci5jPTUyMD1pbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXG4tLVxuZnMvc21iL2NsaWVudC9kaXIuYy01NDAtXG5mcy9zbWIvY2xpZW50L2Rpci5jOjU0MTpcdGlmIChPX0lTX01LRElSKG9mbGFncykpXG5mcy9zbWIvY2xpZW50L2Rpci5jLTU0Mi1cdFx0b2ZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4tLVxuZnMvdmJveHNmL2Rpci5jPTMxMz1zdGF0aWMgaW50IHZib3hzZl9kaXJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy92Ym94c2YvZGlyLmMtMzIwLVxuZnMvdmJveHNmL2Rpci5jOjMyMTpcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbmZzL3Zib3hzZi9kaXIuYy0zMjItXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4tLVxuaW5jbHVkZS9saW51eC9mY250bC5oLTMzLSNkZWZpbmUgT19NS0RJUl9NQVNLXHQoT19DUkVBVCB8IE9fRElSRUNUT1JZKVxuaW5jbHVkZS9saW51eC9mY250bC5oOjM0OnN0YXRpYyBpbmxpbmUgYm9vbCBPX0lTX01LRElSKHVuc2lnbmVkIGZsYWdzKVxuaW5jbHVkZS9saW51eC9mY250bC5oLTM1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0MDEKCQkJCQkJCW91dHB1dDogMzQ2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipGaW5hbGl6aW5nIHRoZSBSZXNwb25zZTogQSBSb3V0aW5lIENvbmZpcm1hdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTt2ZSByZXZpZXdlZCB0aGUgZW50aXJlIHByb2Nlc3MsIGRvdWJsZS1jaGVja2VkIHRoZSBkYXRhLCBhbmQgcmlnb3JvdXNseSBhc3Nlc3NlZCB0aGUgbWV0aG9kb2xvZ3kuIEV2ZXJ5dGhpbmcgYWxpZ25zIHdpdGggZXhwZWN0YXRpb25zOyB0aGVyZSBhcmUgbm8gb2J2aW91cyBpbmNvbnNpc3RlbmNpZXMsIGFub21hbGllcywgb3IgcmVkIGZsYWdzIHRoYXQgd291bGQgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24gb3IgbmVjZXNzaXRhdGUgYSBjb3Vyc2UgY29ycmVjdGlvbi4gRnJvbSBhIHF1YWxpdGF0aXZlIGFuZCBxdWFudGl0YXRpdmUgcGVyc3BlY3RpdmUsIHRoZSBhbmFseXNpcyBhcHBlYXJzIHJvYnVzdCwgdGhlIGludGVycHJldGF0aW9ucyBhcmUgc291bmQsIGFuZCB0aGUgY29uY2x1c2lvbnMgYXJlIGRlZmVuc2libGUgZ2l2ZW4gdGhlIGlucHV0IGRhdGEgYW5kIGNob3NlbiBmcmFtZXdvcmsuIE5vdyBJIGNhbiBjb25maWRlbnRseSBtb3ZlIGZvcndhcmQgdG8gcHJlcGFyZSB0aGUgZmluYWwgcmVzcG9uc2UsIGNvbmZpZGVudCB0aGF0IGl0IHJlcHJlc2VudHMgYSBmYWl0aGZ1bCBhbmQgYWNjdXJhdGUgcG9ydHJheWFsIG9mIHRoZSBmaW5kaW5ncy4gVGltZSB0byBjcmFmdCB0aGUgbmFycmF0aXZlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7OVBfRlMmIzM0OywKICAgICYjMzQ7Q0VQSF9GUyYjMzQ7LAogICAgJiMzNDtGVVNFX0ZTJiMzNDssCiAgICAmIzM0O0dGUzJfRlMmIzM0OywKICAgICYjMzQ7TkZTX0ZTJiMzNDssCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7VkJPWFNGX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGF0aF9vcGVuYXQmIzM0OywKICAgICYjMzQ7ZG9fc3lzX29wZW4mIzM0OywKICAgICYjMzQ7dmZzX21rZGlyJiMzNDssCiAgICAmIzM0O3Zmc19jcmVhdGUmIzM0OywKICAgICYjMzQ7ZGVudHJ5X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtmaWxlbmFtZV91bmxpbmthdCYjMzQ7LAogICAgJiMzNDtmaWxlbmFtZV9yZW5hbWVhdDImIzM0OywKICAgICYjMzQ7Y2lmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsJiMzNDssCiAgICAmIzM0O2NlcGhfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7ZnVzZV9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtnZnMyX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtuZnNfYXRvbWljX29wZW5fdjIzJiMzNDssCiAgICAmIzM0O3Zib3hzZl9kaXJfYXRvbWljX29wZW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBWRlMgbGF5ZXIsIGFsbG93aW5nIG9wZW5hdCgpIHdpdGggT19DUkVBVCB8IE9fRElSRUNUT1JZIHRvIGNyZWF0ZSBkaXJlY3Rvcmllcy4gSXQgbW9kaWZpZXMgY29yZSBwYXRoIHJlc29sdXRpb24gYW5kIGZpbGUgY3JlYXRpb24gbG9naWMgKGZzL25hbWVpLmMsIGZzL29wZW4uYykgYW5kIHVwZGF0ZXMgc2V2ZXJhbCBmaWxlc3lzdGVtcyAoOXAsIGNlcGgsIGZ1c2UsIGdmczIsIG5mcywgc21iLCB2Ym94c2YpIHRvIGhhbmRsZSB0aGUgbmV3IGJlaGF2aW9yIGluIHRoZWlyIGF0b21pY19vcGVuIGltcGxlbWVudGF0aW9ucy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2VjdXJpdHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkIGluIGRpcmVjdG9yeSBjcmVhdGlvbiBhbmQgZmlsZSBvcGVuaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDssCiAgICAmIzM0O0ZVU0VfRlMmIzM0OywKICAgICYjMzQ7R0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtORlNfRlMmIzM0OywKICAgICYjMzQ7Q0lGUyYjMzQ7LAogICAgJiMzNDtWQk9YU0ZfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYXRoX29wZW5hdCYjMzQ7LAogICAgJiMzNDtkb19zeXNfb3BlbiYjMzQ7LAogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtkZW50cnlfY3JlYXRlJiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3VubGlua2F0JiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3JlbmFtZWF0MiYjMzQ7LAogICAgJiMzNDtjaWZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwmIzM0OywKICAgICYjMzQ7Y2VwaF9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtmdXNlX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2dmczJfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3Blbl92MjMmIzM0OywKICAgICYjMzQ7dmJveHNmX2Rpcl9hdG9taWNfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFZGUyBsYXllciwgYWxsb3dpbmcgb3BlbmF0KCkgd2l0aCBPX0NSRUFUIHwgT19ESVJFQ1RPUlkgdG8gY3JlYXRlIGRpcmVjdG9yaWVzLiBJdCBtb2RpZmllcyBjb3JlIHBhdGggcmVzb2x1dGlvbiBhbmQgZmlsZSBjcmVhdGlvbiBsb2dpYyAoZnMvbmFtZWkuYywgZnMvb3Blbi5jKSBhbmQgdXBkYXRlcyBzZXZlcmFsIGZpbGVzeXN0ZW1zICg5cCwgY2VwaCwgZnVzZSwgZ2ZzMiwgbmZzLCBzbWIsIHZib3hzZikgdG8gaGFuZGxlIHRoZSBuZXcgYmVoYXZpb3IgaW4gdGhlaXIgYXRvbWljX29wZW4gaW1wbGVtZW50YXRpb25zLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQgaW4gZGlyZWN0b3J5IGNyZWF0aW9uIGFuZCBmaWxlIG9wZW5pbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0MjoxNi44OTc5NDAwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDIyMDcyODM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXRoX29wZW5hdFwiLFxuICAgIFwiZG9fc3lzX29wZW5cIixcbiAgICBcInZmc19ta2RpclwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwiZmlsZW5hbWVfdW5saW5rYXRcIixcbiAgICBcImZpbGVuYW1lX3JlbmFtZWF0MlwiLFxuICAgIFwiY2lmc19hdG9taWNfb3BlblwiLFxuICAgIFwidjlmc192ZnNfYXRvbWljX29wZW5cIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxcIixcbiAgICBcImNlcGhfYXRvbWljX29wZW5cIixcbiAgICBcImZ1c2VfYXRvbWljX29wZW5cIixcbiAgICBcImdmczJfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3BlblwiLFxuICAgIFwibmZzX2F0b21pY19vcGVuX3YyM1wiLFxuICAgIFwidmJveHNmX2Rpcl9hdG9taWNfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVkZTIGxheWVyLCBhbGxvd2luZyBvcGVuYXQoKSB3aXRoIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSB0byBjcmVhdGUgZGlyZWN0b3JpZXMuIEl0IG1vZGlmaWVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIChmcy9uYW1laS5jLCBmcy9vcGVuLmMpIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKDlwLCBjZXBoLCBmdXNlLCBnZnMyLCBuZnMsIHNtYiwgdmJveHNmKSB0byBoYW5kbGUgdGhlIG5ldyBiZWhhdmlvciBpbiB0aGVpciBhdG9taWNfb3BlbiBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBpbiBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGZpbGUgb3BlbmluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDI6MTYuODk3OTQ1NTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MzUzMzQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU4Y2RhZDdjMTJjZmE1OTgwOTA2NjU2NTFjMzMzNDlkNDQwYjFkYWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTY6NDI6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuY1xcbmluZGV4IDU3ODNkMDMzNmY5NmFjLi5iYjU1NWU1YmEyNjE1MCAxMDA2NDRcXG4tLS0gYS9mcy85cC92ZnNfaW5vZGUuY1xcbisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jXFxuQEAgLTc3Nyw2ICs3NzcsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbiBcXHRpbnQgcDlfb21vZGU7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG4gXFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTtcXG4gXFx0XFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxcbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xcbmluZGV4IGY3Mzk2ZDIwY2I2Y2RjLi5mZjNmYWNiNDIwYzIyNCAxMDA2NDRcXG4tLS0gYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jXFxuKysrIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xcbkBAIC0yMzksNiArMjM5LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzO1xcbiBcXHRzdHJ1Y3QgcG9zaXhfYWNsICpwYWNsID0gTlVMTCwgKmRhY2wgPSBOVUxMO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XFxuIFxcdFxcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XFxuIFxcdFxcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcXG5kaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuY1xcbmluZGV4IDcxMTYxZjJiMjE1MTM2Li5lNzlhYmRiZDlmNjFlOSAxMDA2NDRcXG4tLS0gYS9mcy9jZXBoL2ZpbGUuY1xcbisrKyBiL2ZzL2NlcGgvZmlsZS5jXFxuQEAgLTgxMSw2ICs4MTEsOSBAQCBpbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHQgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksXFxuIFxcdCAgICAgIGRfdW5oYXNoZWQoZGVudHJ5KSA/IFxcXCJ1bmhhc2hlZFxcXCIgOiBcXFwiaGFzaGVkXFxcIiwgZmxhZ3MsIG1vZGUpO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4gXFx1MDAzZSBOQU1FX01BWClcXG4gXFx0XFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuY1xcbmluZGV4IDBlMmExMDM5ZmE0M2VhLi5lMDE4Njk1NjVkNWVlNSAxMDA2NDRcXG4tLS0gYS9mcy9mdXNlL2Rpci5jXFxuKysrIGIvZnMvZnVzZS9kaXIuY1xcbkBAIC05MzUsNiArOTM1LDkgQEAgc3RhdGljIGludCBmdXNlX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICplbnRyeSxcXG4gXFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcXG4gXFx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGZ1c2VfaXNfYmFkKGRpcikpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jXFxuaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjk4NTlhZTAzNDFhOTllIDEwMDY0NFxcbi0tLSBhL2ZzL2dmczIvaW5vZGUuY1xcbisrKyBiL2ZzL2dmczIvaW5vZGUuY1xcbkBAIC0xMzg3LDYgKzEzODcsOSBAQCBzdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4ge1xcbiBcXHRib29sIGV4Y2wgPSAhIShmbGFncyBcXHUwMDI2IE9fRVhDTCk7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG4gXFx0XFx0c3RydWN0IGRlbnRyeSAqZCA9IF9fZ2ZzMl9sb29rdXAoZGlyLCBkZW50cnksIGZpbGUpO1xcbiBcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfT1BFTkVEKSB7XFxuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXFxuaW5kZXggNWNjOWYwZjQ2NmI4MzAuLmZlZjgyNmMwNGViNTA3IDEwMDY0NFxcbi0tLSBhL2ZzL25hbWVpLmNcXG4rKysgYi9mcy9uYW1laS5jXFxuQEAgLTEzODIsMTMgKzEzODIsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbiBcXG4gLyoqXFxuICAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XFxuLSAqXFx0XFx0XFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHlcXG4tICpcXHRcXHRcXHQgIGV4aXN0LlxcbisgKlxcdFxcdFxcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdFxcbiAgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXFxuICAqXFxuLSAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxcbisgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46XFxuICAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWRcXG4gICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzXFxuICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XFxuQEAgLTE0MTYsNiArMTQxNSwxNCBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG4gXFx0aWYgKGxpa2VseSghKGRpcl9tb2RlIFxcdTAwMjYgU19JU1ZUWCkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreVxcbitcXHQgKiBmb2xkZXJzLiBUaGVyZWZvcmUsIGZvciB0aGUgU19JU0RJUiBjYXNlLCBkaXNhYmxpbmdcXG4rXFx0ICogc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyIGlzIG5vdCBlbm91Z2ggdG8gYWxsb3cgY3JlYXRpbmcgYVxcbitcXHQgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzXFxuK1xcdCAqIG5vdCBleHBlY3RpbmcgdGhhdCBPX0NSRUFUfE9fRElSRUNUT1JZIGlzIHBvc3NpYmxlIG9uIG5ld2VyXFxuK1xcdCAqIGtlcm5lbHMuXFxuK1xcdCAqL1xcbiBcXHRpZiAoU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiAhc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTE0NDcsNiArMTQ1NCwxMiBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcInN0aWNreV9jcmVhdGVfcmVndWxhclxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBcXHUwMDNlPSAyIFxcdTAwMjZcXHUwMDI2IFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFx0XFx0XFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJzdGlja3lfY3JlYXRlX2RpclxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjc4MSw5ICsyNzk0LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxcbiBcXHRyZXR1cm4gcztcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoY29uc3Qgc3RydWN0IHFzdHIgbGFzdClcXG4re1xcbitcXHRyZXR1cm4gKGJvb2wpbGFzdC5uYW1lW2xhc3QubGVuXTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpsb29rdXBfbGFzdChzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4ge1xcbi1cXHRpZiAobmQtXFx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXFx1MDAyNlxcdTAwMjYgbmQtXFx1MDAzZWxhc3QubmFtZVtuZC1cXHUwMDNlbGFzdC5sZW5dKVxcbitcXHRpZiAobmQtXFx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXFx1MDAyNlxcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZC1cXHUwMDNlbGFzdCkpXFxuIFxcdFxcdG5kLVxcdTAwM2VmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTtcXG4gXFxuIFxcdHJldHVybiB3YWxrX2NvbXBvbmVudChuZCwgV0FMS19UUkFJTElORyk7XFxuQEAgLTQxNjQsNiArNDE4MiwyNCBAQCBzdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0cmV0dXJuIG1vZGU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmVcXG4raW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHQgICAgICAgdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmRpciA9IGRfaW5vZGUoZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuK1xcdGludCBlcnJvcjtcXG4rXFxuK1xcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdGVycm9yID0gZGlyLVxcdTAwM2VpX29wLVxcdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCB0cnVlKTtcXG4rXFx0aWYgKCFlcnJvcilcXG4rXFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcXG4rXFxuK1xcdHJldHVybiBlcnJvcjtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHZmc19jcmVhdGUgLSBjcmVhdGUgbmV3IGZpbGVcXG4gICogQGlkbWFwOlxcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cXG5AQCAtNDE5NiwxMyArNDIzMiw4IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4gXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4tXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0cmV0dXJuIGVycm9yO1xcbi1cXHRlcnJvciA9IGRpci1cXHUwMDNlaV9vcC1cXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7XFxuLVxcdGlmICghZXJyb3IpXFxuLVxcdFxcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XFxuLVxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdHJldHVybiB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGkpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7XFxuIFxcbkBAIC00MzE5LDIxICs0MzUwLDQwIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9wZW5fdG9fbmFtZWlfZmxhZ3MoaW50IGZsYWcpXFxuIFxcbiBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0XFx0Y29uc3Qgc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHR1bW9kZV90IG1vZGUpXFxuK1xcdFxcdFxcdHVtb2RlX3QgbW9kZSwgYm9vbCBjcmVhdGVfZGlyKVxcbiB7XFxuLVxcdGludCBlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlO1xcbitcXHRpbnQgZXJyb3I7XFxuK1xcbitcXHRpZiAoY3JlYXRlX2RpcilcXG4rXFx0XFx0ZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuIFxcdGlmICghZnN1aWRnaWRfaGFzX21hcHBpbmcoZGlyLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfc2IsIGlkbWFwKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuIFxcbi1cXHRlcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGRpci1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlLFxcbi1cXHRcXHRcXHRcXHQgTUFZX1dSSVRFIHwgTUFZX0VYRUMpO1xcbitcXHRlcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGRpcl9pbm9kZSwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuLVxcdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGlmIChjcmVhdGVfZGlyKVxcbitcXHRcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XFxuK1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpXFxuK3tcXG4rXFx0aWYgKGNyZWF0ZV9kaXIpXFxuK1xcdFxcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIDApO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTQzNDcsNyArNDM5Nyw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiAgKiBiZSBzZXQuICBUaGUgY2FsbGVyIHdpbGwgbmVlZCB0byBwZXJmb3JtIHRoZSBvcGVuIHRoZW1zZWx2ZXMuICBAcGF0aCB3aWxsXFxuICAqIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBuZXcgZGVudHJ5LiAgVGhpcyBtYXkgYmUgbmVnYXRpdmUuXFxuICAqXFxuLSAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuKyAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuIE9uIGVycm9yIHRoZSByZWYgdG8gZGVudHJ5IGlzIGtlcHQuXFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5AQCAtNDM1OSw2ICs0NDA5LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlcXG4gXFxuIFxcdGZpbGUtXFx1MDAzZV9fZl9wYXRoLmRlbnRyeSA9IERFTlRSWV9OT1RfU0VUO1xcbiBcXHRmaWxlLVxcdTAwM2VfX2ZfcGF0aC5tbnQgPSBwYXRoLVxcdTAwM2VtbnQ7XFxuK1xcbiBcXHRlcnJvciA9IGRpci1cXHUwMDNlaV9vcC1cXHUwMDNlYXRvbWljX29wZW4oZGlyLCBkZW50cnksIGZpbGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBvcGVuX3RvX25hbWVpX2ZsYWdzKG9wZW5fZmxhZyksIG1vZGUpO1xcbiBcXHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XFxuQEAgLTQzNzEsMjEgKzQ0MjIsMzkgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlcXG4gXFx0XFx0fSBlbHNlIGlmIChXQVJOX09OKGZpbGUtXFx1MDAzZWZfcGF0aC5kZW50cnkgPT0gREVOVFJZX05PVF9TRVQpKSB7XFxuIFxcdFxcdFxcdGVycm9yID0gLUVJTztcXG4gXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqb2xkID0gZGVudHJ5O1xcbitcXHRcXHRcXHRib29sIHJlcGxhY2VkID0gZmFsc2U7XFxuIFxcdFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX3BhdGguZGVudHJ5KSB7XFxuLVxcdFxcdFxcdFxcdGRwdXQoZGVudHJ5KTtcXG4gXFx0XFx0XFx0XFx0ZGVudHJ5ID0gZmlsZS1cXHUwMDNlZl9wYXRoLmRlbnRyeTtcXG4rXFx0XFx0XFx0XFx0cmVwbGFjZWQgPSBkZW50cnkgIT0gb2xkO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmICh1bmxpa2VseShkX2lzX25lZ2F0aXZlKGRlbnRyeSkpKVxcbitcXHRcXHRcXHRpZiAodW5saWtlbHkoZF9pc19uZWdhdGl2ZShkZW50cnkpKSkge1xcbitcXHRcXHRcXHRcXHQvKiBEbyBub3QgZHJvcCBvcmlnaW5hbCBkZW50cnkgcmVmIG9uIGVycm9yICovXFxuK1xcdFxcdFxcdFxcdGlmIChyZXBsYWNlZClcXG4rXFx0XFx0XFx0XFx0XFx0ZHB1dChkZW50cnkpO1xcbiBcXHRcXHRcXHRcXHRlcnJvciA9IC1FTk9FTlQ7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAocmVwbGFjZWQpIHtcXG4rXFx0XFx0XFx0XFx0ZHB1dChvbGQpO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXG4gXFx0aWYgKGVycm9yKSB7XFxuLVxcdFxcdGRwdXQoZGVudHJ5KTtcXG4gXFx0XFx0ZGVudHJ5ID0gRVJSX1BUUihlcnJvcik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxcbitcXHRcXHRcXHRmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpO1xcbitcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfT1BFTkVEKVxcbitcXHRcXHRcXHRmc25vdGlmeV9vcGVuKGZpbGUpO1xcbiBcXHR9XFxuK1xcbiBcXHRyZXR1cm4gZGVudHJ5O1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lXFxuK3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICopO1xcbiAvKlxcbiAgKiBMb29rIHVwIGFuZCBtYXliZSBjcmVhdGUgYW5kIG9wZW4gdGhlIGxhc3QgY29tcG9uZW50LlxcbiAgKlxcbkBAIC00NDEyLDYgKzQ0ODEsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XFxuIFxcdGludCBlcnJvciwgY3JlYXRlX2Vycm9yID0gMDtcXG4gXFx0dW1vZGVfdCBtb2RlID0gb3AtXFx1MDAzZW1vZGU7XFxuK1xcdGJvb2wgY3JlYXRlX2RpciA9IE9fSVNfTUtESVIob3Blbl9mbGFnKTtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShJU19ERUFERElSKGRpcl9pbm9kZSkpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG5AQCAtNDQzNyw3ICs0NTA3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0ZGVudHJ5ID0gTlVMTDtcXG4gXFx0fVxcbiBcXHRpZiAoZGVudHJ5LVxcdTAwM2VkX2lub2RlKSB7XFxuLVxcdFxcdC8qIENhY2hlZCBwb3NpdGl2ZSBkZW50cnk6IHdpbGwgb3BlbiBpbiBmX29wLVxcdTAwM2VvcGVuICovXFxuK1xcdFxcdC8qIENhY2hlZCBwb3NpdGl2ZSBkZW50cnk6IHdpbGwgb3BlbiBpbiBkb19vcGVuKCkuICovXFxuIFxcdFxcdHJldHVybiBkZW50cnk7XFxuIFxcdH1cXG4gXFxuQEAgLTQ0NTksMjEgKzQ1MjksMzUgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG4gXFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTClcXG4gXFx0XFx0XFx0b3Blbl9mbGFnIFxcdTAwMjY9IH5PX1RSVU5DO1xcbi1cXHRcXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLVxcdTAwM2VkX2lub2RlLCBtb2RlLCBtb2RlLCBtb2RlKTtcXG4rXFx0XFx0bW9kZSA9IG9fY3JlYXRlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgY3JlYXRlX2Rpcik7XFxuIFxcdFxcdGlmIChsaWtlbHkoZ290X3dyaXRlKSlcXG4gXFx0XFx0XFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBcXHUwMDI2bmQtXFx1MDAzZXBhdGgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBkZW50cnksIG1vZGUpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgZGVudHJ5LCBtb2RlLCBjcmVhdGVfZGlyKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRjcmVhdGVfZXJyb3IgPSAtRVJPRlM7XFxuK1xcdFxcdC8qIFJlZnVzZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdGhyb3VnaCBhIGRhbmdsaW5nICh0cmFpbGluZylcXG4rXFx0XFx0ICogc3ltbGluay4gRm9yIHJlZ3VsYXIgZmlsZXMgdGhpcyBoYXMgYmVlbiBhbGxvd2VkIGhpc3RvcmljYWxseVxcbitcXHRcXHQgKiBvbiBPX0NSRUFUIHdpdGhvdXQgT19FWENMLiAqL1xcbitcXHRcXHRpZiAodW5saWtlbHkobmQtXFx1MDAzZWRlcHRoKSBcXHUwMDI2XFx1MDAyNiBjcmVhdGVfZGlyIFxcdTAwMjZcXHUwMDI2ICFjcmVhdGVfZXJyb3IpXFxuK1xcdFxcdFxcdGNyZWF0ZV9lcnJvciA9IC1FTE9PUDtcXG4gXFx0fVxcbiBcXHRpZiAoY3JlYXRlX2Vycm9yKVxcbiBcXHRcXHRvcGVuX2ZsYWcgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuIFxcdGlmIChkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWF0b21pY19vcGVuKSB7XFxuK1xcdFxcdHN0cnVjdCBkZW50cnkgKm9yaWdfZGVudHJ5ID0gZGVudHJ5O1xcbiBcXHRcXHRpZiAobmQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTE9PS1VQX0RJUkVDVE9SWSlcXG4gXFx0XFx0XFx0b3Blbl9mbGFnIHw9IE9fRElSRUNUT1JZO1xcbiBcXHRcXHRkZW50cnkgPSBhdG9taWNfb3BlbihcXHUwMDI2bmQtXFx1MDAzZXBhdGgsIGRlbnRyeSwgZmlsZSwgb3Blbl9mbGFnLCBtb2RlKTtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXFx1MDAyNlxcdTAwMjYgZGVudHJ5ID09IEVSUl9QVFIoLUVOT0VOVCkpXFxuLVxcdFxcdFxcdGRlbnRyeSA9IEVSUl9QVFIoY3JlYXRlX2Vycm9yKTtcXG4rXFx0XFx0ZXJyb3IgPSBQVFJfRVJSX09SX1pFUk8oZGVudHJ5KTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGVycm9yKSlcXG4rXFx0XFx0XFx0ZGVudHJ5ID0gb3JpZ19kZW50cnk7IC8qIGF0b21pY19vcGVuKCkga2VlcHMgcmVmIG9uIGVycm9yICovXFxuK1xcdFxcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFxcdTAwMjZcXHUwMDI2IGVycm9yID09IC1FTk9FTlQpIHtcXG4rXFx0XFx0XFx0LyogU2hvdWxkIGhhdmUgZG9uZSBhIGNyZWF0ZSwgYnV0IHdlIGFscmVhZHkgZXJyb3JlZC4gKi9cXG4rXFx0XFx0XFx0YXVkaXRfaW5vZGVfY2hpbGQoZGlyLVxcdTAwM2VkX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTtcXG4rXFx0XFx0XFx0ZXJyb3IgPSBjcmVhdGVfZXJyb3I7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHVubGlrZWx5KGVycm9yKSlcXG4rXFx0XFx0XFx0Z290byBvdXRfZHB1dDtcXG4gXFx0XFx0cmV0dXJuIGRlbnRyeTtcXG4gXFx0fVxcbiBcXG5AQCAtNDQ5MCwzMCArNDU3NCw0NCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRcXHRcXHRkZW50cnkgPSByZXM7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXHRpZiAoZGVudHJ5LVxcdTAwM2VkX2lub2RlIHx8ICEob3AtXFx1MDAzZW9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpKSB7XFxuK1xcdFxcdC8qIE5vIG5lZWQgdG8gY3JlYXRlIGEgZmlsZS4gSWYgbG9va3VwIHJldHVybmVkIGEgcG9zaXRpdmVcXG4rXFx0XFx0ICogZGVudHJ5LCB0aGUgZmlsZSB3aWxsIGJlIG9wZW5lZCBpbiBkb19vcGVuKCkuICovXFxuK1xcdFxcdHJldHVybiBkZW50cnk7XFxuK1xcdH1cXG4gXFxuLVxcdC8qIE5lZ2F0aXZlIGRlbnRyeSwganVzdCBjcmVhdGUgdGhlIGZpbGUgKi9cXG4tXFx0aWYgKCFkZW50cnktXFx1MDAzZWRfaW5vZGUgXFx1MDAyNlxcdTAwMjYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpKSB7XFxuLVxcdFxcdC8qIGJ1dCBicmVhayB0aGUgZGlyZWN0b3J5IGxlYXNlIGZpcnN0ISAqL1xcbi1cXHRcXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXJfaW5vZGUsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XFxuLVxcdFxcdGlmIChlcnJvcilcXG4tXFx0XFx0XFx0Z290byBvdXRfZHB1dDtcXG4rXFx0LyogTmVnYXRpdmUgZGVudHJ5IHdpdGggT19DUkVBVCBmbGFnIHNldCAqL1xcbitcXHRhdWRpdF9pbm9kZV9jaGlsZChkaXItXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpO1xcbiBcXG4tXFx0XFx0ZmlsZS1cXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XFxuLVxcdFxcdGF1ZGl0X2lub2RlX2NoaWxkKGRpcl9pbm9kZSwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XFxuLVxcdFxcdGlmICghZGlyX2lub2RlLVxcdTAwM2VpX29wLVxcdTAwM2VjcmVhdGUpIHtcXG4tXFx0XFx0XFx0ZXJyb3IgPSAtRUFDQ0VTO1xcbi1cXHRcXHRcXHRnb3RvIG91dF9kcHV0O1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRlcnJvciA9IGRpcl9pbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0bW9kZSwgb3Blbl9mbGFnIFxcdTAwMjYgT19FWENMKTtcXG4tXFx0XFx0aWYgKGVycm9yKVxcbi1cXHRcXHRcXHRnb3RvIG91dF9kcHV0O1xcbi1cXHR9XFxuLVxcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFxcdTAwMjZcXHUwMDI2ICFkZW50cnktXFx1MDAzZWRfaW5vZGUpIHtcXG4rXFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikpIHtcXG4rXFx0XFx0LyogU2hvdWxkIGhhdmUgZG9uZSBhIGNyZWF0ZSwgYnV0IHdlIGFscmVhZHkgZXJyb3JlZCAqL1xcbiBcXHRcXHRlcnJvciA9IGNyZWF0ZV9lcnJvcjtcXG4gXFx0XFx0Z290byBvdXRfZHB1dDtcXG4gXFx0fVxcbitcXG4rXFx0aWYgKChjcmVhdGVfZGlyIFxcdTAwMjZcXHUwMDI2ICFkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZW1rZGlyKVxcbitcXHQgICAgfHwgKCFjcmVhdGVfZGlyIFxcdTAwMjZcXHUwMDI2ICFkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZSkpIHtcXG4rXFx0XFx0ZXJyb3IgPSAtRUFDQ0VTO1xcbitcXHRcXHRnb3RvIG91dF9kcHV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY3JlYXRlX2Rpcikge1xcbitcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpO1xcbitcXHRcXHRpZiAoSVNfRVJSKHJlcykpIHtcXG4rXFx0XFx0XFx0ZXJyb3IgPSBQVFJfRVJSKHJlcyk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGVycm9yID0gMDtcXG4rXFx0XFx0XFx0ZGVudHJ5ID0gcmVzO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGVycm9yID0gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XFxuK1xcdH1cXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIG91dF9kcHV0O1xcbitcXG4rXFx0ZmlsZS1cXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XFxuK1xcbiBcXHRyZXR1cm4gZGVudHJ5O1xcbiBcXG4gb3V0X2RwdXQ6XFxuQEAgLTQ1MjEsMTcgKzQ2MTksMTIgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4te1xcbi1cXHRyZXR1cm4gKGJvb2wpbmQtXFx1MDAzZWxhc3QubmFtZVtuZC1cXHUwMDNlbGFzdC5sZW5dO1xcbi19XFxuLVxcbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXFxuIHtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcbiBcXG4gXFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG4tXFx0XFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKVxcbitcXHRcXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZC1cXHUwMDNlbGFzdCkgXFx1MDAyNlxcdTAwMjYgIShvcGVuX2ZsYWcgXFx1MDAyNiBPX0RJUkVDVE9SWSkpXFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSVNESVIpO1xcbiBcXG4gXFx0XFx0LyogRG9uJ3QgYm90aGVyIG9uIGFuIE9fRVhDTCBjcmVhdGUgKi9cXG5AQCAtNDUzOSw3ICs0NjMyLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKVxcbiBcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKVxcbitcXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZC1cXHUwMDNlbGFzdCkpXFxuIFxcdFxcdG5kLVxcdTAwM2VmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTtcXG4gXFxuIFxcdGRlbnRyeSA9IGxvb2t1cF9mYXN0KG5kKTtcXG5AQCAtNDYwMiwxNiArNDY5NSwxMiBAQCBzdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdFxcdCAqL1xcbiBcXHR9XFxuIFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKVxcbi1cXHRcXHRpbm9kZV9sb2NrKGRpci1cXHUwMDNlZF9pbm9kZSk7XFxuK1xcdFxcdGlub2RlX2xvY2tfbmVzdGVkKGRpci1cXHUwMDNlZF9pbm9kZSwgSV9NVVRFWF9QQVJFTlQpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGlub2RlX2xvY2tfc2hhcmVkKGRpci1cXHUwMDNlZF9pbm9kZSk7XFxuK1xcbiBcXHRkZW50cnkgPSBsb29rdXBfb3BlbihuZCwgZmlsZSwgb3AsIGdvdF93cml0ZSwgXFx1MDAyNmRlbGVnYXRlZF9pbm9kZSk7XFxuLVxcdGlmICghSVNfRVJSKGRlbnRyeSkpIHtcXG4tXFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0NSRUFURUQpXFxuLVxcdFxcdFxcdGZzbm90aWZ5X2NyZWF0ZShkaXItXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSk7XFxuLVxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9PUEVORUQpXFxuLVxcdFxcdFxcdGZzbm90aWZ5X29wZW4oZmlsZSk7XFxuLVxcdH1cXG4rXFxuIFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKVxcbiBcXHRcXHRpbm9kZV91bmxvY2soZGlyLVxcdTAwM2VkX2lub2RlKTtcXG4gXFx0ZWxzZVxcbkBAIC00NjY5LDggKzQ3NTgsOSBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSB7XFxuIFxcdFxcdGlmICgob3Blbl9mbGFnIFxcdTAwMjYgT19FWENMKSBcXHUwMDI2XFx1MDAyNiAhKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4tXFx0XFx0aWYgKGRfaXNfZGlyKG5kLVxcdTAwM2VwYXRoLmRlbnRyeSkpXFxuK1xcdFxcdGlmICghKG9wZW5fZmxhZyBcXHUwMDI2IE9fRElSRUNUT1JZKSBcXHUwMDI2XFx1MDAyNiBkX2lzX2RpcihuZC1cXHUwMDNlcGF0aC5kZW50cnkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJU0RJUjtcXG4rXFxuIFxcdFxcdGVycm9yID0gbWF5X2NyZWF0ZV9pbl9zdGlja3koaWRtYXAsIG5kLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGRfYmFja2luZ19pbm9kZShuZC1cXHUwMDNlcGF0aC5kZW50cnkpKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGVycm9yKSlcXG5AQCAtNDk0Niw3ICs1MDM2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXFxuIFxcdCAqIERvIHRoZSBmaW5hbCBsb29rdXAuICBTdXBwcmVzcyAnY3JlYXRlJyBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nXFxuIFxcdCAqICcvJywgYW5kIGEgZGlyZWN0b3J5IHdhc24ndCByZXF1ZXN0ZWQuXFxuIFxcdCAqL1xcbi1cXHRpZiAobGFzdC5uYW1lW2xhc3QubGVuXSBcXHUwMDI2XFx1MDAyNiAhd2FudF9kaXIpXFxuK1xcdGlmICh0cmFpbGluZ19zbGFzaGVzKGxhc3QpIFxcdTAwMjZcXHUwMDI2ICF3YW50X2RpcilcXG4gXFx0XFx0Y3JlYXRlX2ZsYWdzIFxcdTAwMjY9IH5MT09LVVBfQ1JFQVRFO1xcbiBcXHRkZW50cnkgPSBzdGFydF9kaXJvcChwYXRoLVxcdTAwM2VkZW50cnksIFxcdTAwMjZsYXN0LCByZXZhbF9mbGFnIHwgY3JlYXRlX2ZsYWdzKTtcXG4gXFx0aWYgKElTX0VSUihkZW50cnkpKVxcbkBAIC01MDQxLDMyICs1MTMxLDE3IEBAIHN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcXG4gXFx0XFx0cGF0aC1cXHUwMDNlZGVudHJ5ID0gZGlyO1xcbiBcXHRcXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xcbiBcXG4tXFx0XFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUpO1xcbitcXHRcXHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgbW9kZSwgLypjcmVhdGVfZGlyPSovIGZhbHNlKTtcXG4gXFx0XFx0aWYgKGNyZWF0ZV9lcnJvcilcXG4gXFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuIFxcbi1cXHRcXHQvKiBhdG9taWNfb3BlbiB3aWxsIGRwdXQoZGVudHJ5KSBvbiBlcnJvciAqL1xcbi1cXHRcXHRkZ2V0KG9yaWdfZGVudHJ5KTtcXG4gXFx0XFx0ZGVudHJ5ID0gYXRvbWljX29wZW4ocGF0aCwgZGVudHJ5LCBmaWxlLCBmbGFncywgbW9kZSk7XFxuIFxcdFxcdGVycm9yID0gUFRSX0VSUl9PUl9aRVJPKGRlbnRyeSk7XFxuLVxcbi1cXHRcXHRpZiAoSVNfRVJSKGRlbnRyeSkpXFxuLVxcdFxcdFxcdC8qIGtlZXAgdGhlIG9yaWdpbmFsICovXFxuK1xcdFxcdGlmICh1bmxpa2VseShlcnJvcikpXFxuIFxcdFxcdFxcdGRlbnRyeSA9IG9yaWdfZGVudHJ5O1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdC8qIERyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSAqL1xcbi1cXHRcXHRcXHRkcHV0KG9yaWdfZGVudHJ5KTtcXG4tXFxuIFxcdFxcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFxcdTAwMjZcXHUwMDI2IGVycm9yID09IC1FTk9FTlQpXFxuIFxcdFxcdFxcdGVycm9yID0gY3JlYXRlX2Vycm9yO1xcbiBcXG4tXFx0XFx0aWYgKCFlcnJvcikge1xcbi1cXHRcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfQ1JFQVRFRClcXG4tXFx0XFx0XFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpci1cXHUwMDNlZF9pbm9kZSwgZGVudHJ5KTtcXG4tXFx0XFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX09QRU5FRClcXG4tXFx0XFx0XFx0XFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcXG4tXFx0XFx0fVxcbi1cXG4gXFx0XFx0cGF0aC1cXHUwMDNlZGVudHJ5ID0gZGVudHJ5O1xcbiBcXG4gXFx0fSBlbHNlIHtcXG5AQCAtNTIxOCw2ICs1MjkzLDM5IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkXFxuIFxcdHJldHVybiBmaWxlbmFtZV9ta25vZGF0KEFUX0ZEQ1dELCBuYW1lLCBtb2RlLCBkZXYpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lXFxuK3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXFxuK3tcXG4rXFx0aW50IGVycm9yO1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcXG4rXFx0dW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLVxcdTAwM2VpX3NiLVxcdTAwM2VzX21heF9saW5rcztcXG4rXFxuK1xcdGVycm9yID0gLUVNTElOSztcXG4rXFx0aWYgKG1heF9saW5rcyBcXHUwMDI2XFx1MDAyNiBkaXItXFx1MDAzZWlfbmxpbmsgXFx1MDAzZT0gbWF4X2xpbmtzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0ZGUgPSBkaXItXFx1MDAzZWlfb3AtXFx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGlmIChJU19FUlIoZGUpKSB7XFxuK1xcdFxcdGVycm9yID0gUFRSX0VSUihkZSk7XFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuK1xcdGlmIChkZSkge1xcbitcXHRcXHRkcHV0KGRlbnRyeSk7XFxuK1xcdFxcdGRlbnRyeSA9IGRlO1xcbitcXHR9XFxuK1xcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcXG4rXFx0cmV0dXJuIGRlbnRyeTtcXG4rXFxuK2VycjpcXG4rXFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xcbit9XFxuK1xcbiAvKipcXG4gICogdmZzX21rZGlyIC0gY3JlYXRlIGRpcmVjdG9yeSByZXR1cm5pbmcgY29ycmVjdCBkZW50cnkgaWYgcG9zc2libGVcXG4gICogQGlkbWFwOlxcdFxcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cXG5AQCAtNTI0NSw3ICs1MzUzLDYgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRlbGVnYXRlZF9pbm9kZSlcXG4ge1xcbiBcXHRpbnQgZXJyb3I7XFxuLVxcdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19tYXhfbGlua3M7XFxuIFxcdHN0cnVjdCBkZW50cnkgKmRlO1xcbiBcXG4gXFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2RlbnRyeShpZG1hcCwgZGlyLCBkZW50cnkpO1xcbkBAIC01MjYxLDI0ICs1MzY4LDEyIEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbi1cXHRlcnJvciA9IC1FTUxJTks7XFxuLVxcdGlmIChtYXhfbGlua3MgXFx1MDAyNlxcdTAwMjYgZGlyLVxcdTAwM2VpX25saW5rIFxcdTAwM2U9IG1heF9saW5rcylcXG4tXFx0XFx0Z290byBlcnI7XFxuLVxcbi1cXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XFxuLVxcdGlmIChlcnJvcilcXG4rXFx0ZGUgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XFxuK1xcdGlmIChJU19FUlIoZGUpKSB7XFxuK1xcdFxcdGVycm9yID0gUFRSX0VSUihkZSk7XFxuIFxcdFxcdGdvdG8gZXJyO1xcbi1cXG4tXFx0ZGUgPSBkaXItXFx1MDAzZWlfb3AtXFx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuLVxcdGVycm9yID0gUFRSX0VSUihkZSk7XFxuLVxcdGlmIChJU19FUlIoZGUpKVxcbi1cXHRcXHRnb3RvIGVycjtcXG4tXFx0aWYgKGRlKSB7XFxuLVxcdFxcdGRwdXQoZGVudHJ5KTtcXG4tXFx0XFx0ZGVudHJ5ID0gZGU7XFxuIFxcdH1cXG4tXFx0ZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpO1xcbi1cXHRyZXR1cm4gZGVudHJ5O1xcbitcXHRyZXR1cm4gZGU7XFxuIFxcbiBlcnI6XFxuIFxcdGVuZF9jcmVhdGluZyhkZW50cnkpO1xcbkBAIC01NTY1LDcgKzU2NjAsNyBAQCBpbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKVxcbiBcXHRcXHRnb3RvIGV4aXRfZHJvcF93cml0ZTtcXG4gXFxuIFxcdC8qIFdoeSBub3QgYmVmb3JlPyBCZWNhdXNlIHdlIHdhbnQgY29ycmVjdCBlcnJvciB2YWx1ZSAqL1xcbi1cXHRpZiAodW5saWtlbHkobGFzdC5uYW1lW2xhc3QubGVuXSkpIHtcXG4rXFx0aWYgKHVubGlrZWx5KHRyYWlsaW5nX3NsYXNoZXMobGFzdCkpKSB7XFxuIFxcdFxcdGlmIChkX2lzX2RpcihkZW50cnkpKVxcbiBcXHRcXHRcXHRlcnJvciA9IC1FSVNESVI7XFxuIFxcdFxcdGVsc2VcXG5AQCAtNjE2NywxNiArNjI2MiwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSxcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSB7XFxuIFxcdFxcdGlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHtcXG4gXFx0XFx0XFx0ZXJyb3IgPSAtRU5PVERJUjtcXG4tXFx0XFx0XFx0aWYgKG5ld19sYXN0Lm5hbWVbbmV3X2xhc3QubGVuXSlcXG4rXFx0XFx0XFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmV3X2xhc3QpKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0LyogdW5sZXNzIHRoZSBzb3VyY2UgaXMgYSBkaXJlY3RvcnkgdHJhaWxpbmcgc2xhc2hlcyBnaXZlIC1FTk9URElSICovXFxuIFxcdGlmICghZF9pc19kaXIocmQub2xkX2RlbnRyeSkpIHtcXG4gXFx0XFx0ZXJyb3IgPSAtRU5PVERJUjtcXG4tXFx0XFx0aWYgKG9sZF9sYXN0Lm5hbWVbb2xkX2xhc3QubGVuXSlcXG4rXFx0XFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMob2xkX2xhc3QpKVxcbiBcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbi1cXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IFJFTkFNRV9FWENIQU5HRSkgXFx1MDAyNlxcdTAwMjYgbmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKVxcbitcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IFJFTkFNRV9FWENIQU5HRSkgXFx1MDAyNlxcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZXdfbGFzdCkpXFxuIFxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuY1xcbmluZGV4IGM3YjcyM2MxODYyMGM5Li5jODE1ZDlhYTliNjlkYSAxMDA2NDRcXG4tLS0gYS9mcy9uZnMvZGlyLmNcXG4rKysgYi9mcy9uZnMvZGlyLmNcXG5AQCAtMjEyMSw2ICsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRkZnByaW50ayhWRlMsIFxcXCJORlM6IGF0b21pY19vcGVuKCVzLyVsbHUpLCAlcGRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19pZCwgZGlyLVxcdTAwM2VpX2lubywgZGVudHJ5KTtcXG4gXFxuK1xcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxcbitcXHRcXHRvcGVuX2ZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0ZXJyID0gbmZzX2NoZWNrX2ZsYWdzKG9wZW5fZmxhZ3MpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC0yMzEzLDYgKzIzMTYsOSBAQCBpbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHQgKi9cXG4gXFx0aW50IGVycm9yID0gMDtcXG4gXFxuK1xcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxcbitcXHRcXHRvcGVuX2ZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiBcXHUwMDNlIE5GU19TRVJWRVIoZGlyKS1cXHUwMDNlbmFtZWxlbilcXG4gXFx0XFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmNcXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uODdlODg2NGQ5NDgwODcgMTAwNjQ0XFxuLS0tIGEvZnMvb3Blbi5jXFxuKysrIGIvZnMvb3Blbi5jXFxuQEAgLTExOTAsMjkgKzExOTAsMzAgQEAgaW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXFxuIFxcdGlmIChXSUxMX0NSRUFURShmbGFncykpIHtcXG4gXFx0XFx0aWYgKGhvdy1cXHUwMDNlbW9kZSBcXHUwMDI2IH5TX0lBTExVR08pXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRvcC1cXHUwMDNlbW9kZSA9IGhvdy1cXHUwMDNlbW9kZSB8IFNfSUZSRUc7XFxuK1xcdFxcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcXG4rXFx0XFx0XFx0b3AtXFx1MDAzZW1vZGUgPSBob3ctXFx1MDAzZW1vZGUgfCBTX0lGRElSO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG9wLVxcdTAwM2Vtb2RlID0gaG93LVxcdTAwM2Vtb2RlIHwgU19JRlJFRztcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0aWYgKGhvdy1cXHUwMDNlbW9kZSAhPSAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0b3AtXFx1MDAzZW1vZGUgPSAwO1xcbiBcXHR9XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBCbG9jayBidWdzIHdoZXJlIE9fRElSRUNUT1JZIHwgT19DUkVBVCBjcmVhdGVkIHJlZ3VsYXIgZmlsZXMuXFxuLVxcdCAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0c1xcbi1cXHQgKiBPX1RNUEZJTEUgYmVsb3cgd2hpY2ggcmVxdWlyZXMgT19ESVJFQ1RPUlkgYmVpbmcgcmFpc2VkLlxcbi1cXHQgKi9cXG4tXFx0aWYgKChmbGFncyBcXHUwMDI2IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKSA9PSAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbiBcXHQvKiBOb3cgaGFuZGxlIHRoZSBjcmVhdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBPX1RNUEZJTEUuICovXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IF9fT19UTVBGSUxFKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEluIG9yZGVyIHRvIGVuc3VyZSBwcm9ncmFtcyBnZXQgZXhwbGljaXQgZXJyb3JzIHdoZW4gdHJ5aW5nXFxuIFxcdFxcdCAqIHRvIHVzZSBPX1RNUEZJTEUgb24gb2xkIGtlcm5lbHMgd2UgZW5mb3JjZSB0aGF0IE9fRElSRUNUT1JZXFxuLVxcdFxcdCAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUuXFxuK1xcdFxcdCAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUsIGJ1dCB3aXRob3V0IE9fQ1JFQVQuIFRoZVxcbitcXHRcXHQgKiByZWFzb24gZm9yIGRpc2FsbG93aW5nIE9fQ1JFQVR8T19UTVBGSUxFIGlzIHRoYXRcXG4rXFx0XFx0ICogT19ESVJFQ1RPUll8T19DUkVBVCB1c2VkIHRvIHdvcmsgYW5kIGNyZWF0ZWQgYSByZWd1bGFyIGZpbGVcXG4rXFx0XFx0ICogaWYgbm90aGluZyBleGlzdGVkIGF0IHRoZSBvcGVuIHBhdGguIEhlbmNlLCBhbGxvd2luZyB0aGVcXG4rXFx0XFx0ICogY29tYmluYXRpb24gd291bGQgaGF2ZSBjYXVzZWQgT19DUkVBVHxPX1RNUEZJTEUgdG8gY3JlYXRlIGFcXG4rXFx0XFx0ICogcmVndWxhciAobm9uLXRlbXBvcmFyeSkgZmlsZSBvbiBvbGQga2VybmVscywgd2hpbGUgdGhlIGNhbGxlclxcbitcXHRcXHQgKiB3b3VsZCBiZWxpZXZlIHRoZXkgY3JlYXRlZCBhbiBhY3R1YWwgT19UTVBGSUxFLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBPX0RJUkVDVE9SWSkpXFxuK1xcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgT19ESVJFQ1RPUlkpIHx8IChmbGFncyBcXHUwMDI2IE9fQ1JFQVQpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0aWYgKCEoYWNjX21vZGUgXFx1MDAyNiBNQVlfV1JJVEUpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMTI2OSw2ICsxMjcwLDE1IEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcbiBcXG4gXFx0b3AtXFx1MDAzZWludGVudCA9IGZsYWdzIFxcdTAwMjYgT19QQVRIID8gMCA6IExPT0tVUF9PUEVOO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogUmVxdWVzdGluZyB3cml0ZSBhY2Nlc3Mgb24gYSBkaXJlY3RvcnkgY2FuIG5ldmVyIHN1Y2NlZWQuIFJhdGhlclxcbitcXHQgKiB0aGFuIHBlcmZvcm1pbmcgYSBwYXRoLXdhbGsgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHRhcmdldCBpc1xcbitcXHQgKiBhY3R1YWxseSBhIGRpcmVjdG9yeSAoLUVJU0RJUikgb3Igbm90ICgtRU5PVERJUiksIHdlIHNob3J0LWNpcmN1aXRcXG4rXFx0ICogdG8gLUVOT1RESVIuXFxuK1xcdCAqL1xcbitcXHRpZiAoKGZsYWdzIFxcdTAwMjYgT19ESVJFQ1RPUlkpIFxcdTAwMjZcXHUwMDI2ICEoZmxhZ3MgXFx1MDAyNiBfX09fVE1QRklMRSkgXFx1MDAyNlxcdTAwMjYgKGFjY19tb2RlIFxcdTAwMjYgTUFZX1dSSVRFKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9URElSO1xcbitcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgT19DUkVBVCkge1xcbiBcXHRcXHRvcC1cXHUwMDNlaW50ZW50IHw9IExPT0tVUF9DUkVBVEU7XFxuIFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE9fRVhDTCkge1xcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuY1xcbmluZGV4IDg4YTRhMTc4N2ZmMDQ3Li43NWJmODZjYzA2MTIyZSAxMDA2NDRcXG4tLS0gYS9mcy9zbWIvY2xpZW50L2Rpci5jXFxuKysrIGIvZnMvc21iL2NsaWVudC9kaXIuY1xcbkBAIC01MzgsNiArNTM4LDkgQEAgaW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxcbiBcXHRpZiAodW5saWtlbHkoY2lmc19mb3JjZWRfc2h1dGRvd24oY2lmc19zYikpKVxcbiBcXHRcXHRyZXR1cm4gc21iX0VJTyhzbWJfZWlvX3RyYWNlX2ZvcmNlZF9zaHV0ZG93bik7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihvZmxhZ3MpKVxcbitcXHRcXHRvZmxhZ3MgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBQb3NpeCBvcGVuIGlzIG9ubHkgY2FsbGVkIChhdCBsb29rdXAgdGltZSkgZm9yIGZpbGUgY3JlYXRlIG5vdy4gRm9yXFxuIFxcdCAqIG9wZW5zIChyYXRoZXIgdGhhbiBjcmVhdGVzKSwgYmVjYXVzZSB3ZSBkbyBub3Qga25vdyBpZiBpdCBpcyBhIGZpbGVcXG5kaWZmIC0tZ2l0IGEvZnMvdmJveHNmL2Rpci5jIGIvZnMvdmJveHNmL2Rpci5jXFxuaW5kZXggYzViZDMyNzFhYTk2MTYuLjc3YWUyZjY5NmZkNDM3IDEwMDY0NFxcbi0tLSBhL2ZzL3Zib3hzZi9kaXIuY1xcbisrKyBiL2ZzL3Zib3hzZi9kaXIuY1xcbkBAIC0zMTgsNiArMzE4LDkgQEAgc3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdHU2NCBoYW5kbGU7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG4gXFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmJveHNmX2Rpcl9sb29rdXAocGFyZW50LCBkZW50cnksIDApO1xcbiBcXHRcXHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmNudGwuaCBiL2luY2x1ZGUvbGludXgvZmNudGwuaFxcbmluZGV4IDZhZDZiOWU3YTIyNmFmLi42Yjc1Mjc3YmU1NTlkZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcXG5AQCAtMzAsNiArMzAsMTIgQEBcXG4gICovXFxuICNkZWZpbmUgX19PX1JFR1VMQVJcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAzMClcXG4gXFxuKyNkZWZpbmUgT19NS0RJUl9NQVNLXFx0KE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSlcXG4rc3RhdGljIGlubGluZSBib29sIE9fSVNfTUtESVIodW5zaWduZWQgZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIChmbGFncyBcXHUwMDI2IE9fTUtESVJfTUFTSykgPT0gT19NS0RJUl9NQVNLO1xcbit9XFxuK1xcbiAvKiBMaXN0IG9mIGFsbCB2YWxpZCBmbGFncyBmb3IgdGhlIGhvdy1cXHUwMDNlcmVzb2x2ZSBhcmd1bWVudDogKi9cXG4gI2RlZmluZSBWQUxJRF9SRVNPTFZFX0ZMQUdTIFxcXFxcXG4gXFx0KFJFU09MVkVfTk9fWERFViB8IFJFU09MVkVfTk9fTUFHSUNMSU5LUyB8IFJFU09MVkVfTk9fU1lNTElOS1MgfCBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlXFxuaW5kZXggNjRhYzBkZmE0NmI3ZWYuLmYyNTdiM2RkYjQ3OTQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlXFxuQEAgLTEsNCArMSw1IEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbitvcGVuX29fY3JlYXRfb19kaXJcXG4gZG5vdGlmeV90ZXN0XFxuIGRldnB0c19wdHNcXG4gZmNsb2dcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxcbmluZGV4IDg1NDI3ZDdmMTliOWI1Li42NDVjNTJkMmQ0ZGViMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXFxuQEAgLTEsNyArMSw3IEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gXFxuIENGTEFHUyArPSAkKEtIRFJfSU5DTFVERVMpXFxuLVRFU1RfR0VOX1BST0dTIDo9IGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2dcXG4rVEVTVF9HRU5fUFJPR1MgOj0gb3Blbl9vX2NyZWF0X29fZGlyIGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2dcXG4gVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgOj0gZG5vdGlmeV90ZXN0XFxuIFxcbiBpbmNsdWRlIC4uL2xpYi5ta1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuY1xcbmluZGV4IDU1MWM0YTBmMzk1YTEyLi41OTNhNTEzNmU5OTE5MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuY1xcbkBAIC02LDEwICs2LDggQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc3NlcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc2NoZWQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW91bnQuaFxcdTAwM2VcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kZjNjZGJhZTJjODUyNFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xcbkBAIC0wLDAgKzEsMTk3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW1pdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IG9wZW5fb19jcmVhdF9vX2RpcihpbnQgZGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBtb2RlX3QgbW9kZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLFxcbitcXHRcXHQgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpO1xcbit9XFxuK1xcbisjZGVmaW5lIG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIGZsYWdzKSAoe1xcdFxcXFxcXG4rXFx0c3RydWN0IHN0YXQgX19zdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGludCBfX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyKGRmZCwgcGF0aG5hbWUsIFNfSVJXWFUsIGZsYWdzKTtcXHRcXFxcXFxuK1xcdEFTU0VSVF9HRShfX2ZkLCAwKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdEFTU0VSVF9FUShmc3RhdChfX2ZkLCBcXHUwMDI2X19zdCksIDApO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fZmQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4rI2RlZmluZSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChkZmQsIHBhdGhuYW1lKSBcXFxcXFxuK1xcdG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIDApXFxuK1xcbitGSVhUVVJFKG9wZW5fb19jcmVhdF9vX2Rpcikge1xcbitcXHRjaGFyIGRpcnBhdGhbUEFUSF9NQVhdO1xcbitcXHRpbnQgZGZkO1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChvcGVuX29fY3JlYXRfb19kaXIpXFxuK3tcXG4rXFx0c3RyY3B5KHNlbGYtXFx1MDAzZWRpcnBhdGgsIFxcXCIvdG1wL29wZW5fb19jcmVhdF9vX2Rpcl90ZXN0LlhYWFhYWFxcXCIpO1xcbitcXHRBU1NFUlRfTkUobWtkdGVtcChzZWxmLVxcdTAwM2VkaXJwYXRoKSwgTlVMTCk7XFxuK1xcdHNlbGYtXFx1MDAzZWRmZCA9IG9wZW4oc2VsZi1cXHUwMDNlZGlycGF0aCwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0Uoc2VsZi1cXHUwMDNlZGZkLCAwKTtcXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpXFxuK3tcXG4rXFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZGZkKTtcXG4rXFx0cm1kaXIoc2VsZi1cXHUwMDNlZGlycGF0aCk7XFxuK31cXG4rXFxuKy8qIERvZXMgb3Blbl9vX2NyZWF0X29fZGlyIHJldHVybiBhIGZkIGF0IGFsbD8gKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgcmV0dXJuc19mZClcXG4re1xcbitcXHRpbnQgZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChzZWxmLVxcdTAwM2VkZmQsIFxcXCJuZXdkaXJcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK1xcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJuZXdkaXJcXFwiLCBBVF9SRU1PVkVESVIpLCAwKTtcXG4rfVxcbitcXG4rLyogVGhlIGZkIG11c3QgcmVmZXIgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQuICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX2lzX2NyZWF0ZWRfZGlyKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0c3RydWN0IHN0YXQgc3RfdmlhX2ZkLCBzdF92aWFfcGF0aDtcXG4rXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFxuK1xcdGZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi1cXHUwMDNlZGZkLCBcXFwiY2hlY2tkaXJcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShmc3RhdChmZCwgXFx1MDAyNnN0X3ZpYV9mZCksIDApO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvY2hlY2tkaXJcXFwiLCBzZWxmLVxcdTAwM2VkaXJwYXRoKTtcXG4rXFx0QVNTRVJUX0VRKHN0YXQocGF0aCwgXFx1MDAyNnN0X3ZpYV9wYXRoKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2lubywgc3RfdmlhX3BhdGguc3RfaW5vKTtcXG4rXFx0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcXG4rfVxcbitcXG4rLyogTWlzc2luZyBwYXJlbnQgY29tcG9uZW50IG11c3QgZmFpbCB3aXRoIEVOT0VOVC4gKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vZW50X21pc3NpbmdfcGFyZW50KVxcbit7XFxuK1xcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cXHUwMDNlZGZkLCBcXFwibm9uZXhpc3RlbnQvY2hpbGRcXFwiLCBTX0lSV1hVLCAwKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7XFxuK31cXG4rXFxuKy8qIEFuIGludmFsaWQgZGZkIG11c3QgZmFpbCB3aXRoIEVCQURGLiAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlYmFkZilcXG4re1xcbitcXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKC00MiwgXFxcImJhZGZkaXJcXFwiLCBTX0lSV1hVLCAwKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVCQURGKTtcXG4rfVxcbitcXG4rLyogQSBkZmQgdGhhdCBwb2ludHMgdG8gYSBmaWxlIChub3QgYSBkaXJlY3RvcnkpIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub3RkaXJfZGZkKVxcbit7XFxuK1xcdGludCBmaWxlX2ZkO1xcbitcXG4rXFx0ZmlsZV9mZCA9IG9wZW5hdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJmaWxlXFxcIixcXG4rXFx0XFx0XFx0IE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XFxuK1xcdEFTU0VSVF9HRShmaWxlX2ZkLCAwKTtcXG4rXFxuK1xcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoZmlsZV9mZCwgXFxcInN1YmRpclxcXCIsIFNfSVJXWFUsIDApLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xcbitcXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwiZmlsZVxcXCIsIDApLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogT19FWENMIHRvZ2V0aGVyIHdpdGggT19DUkVBVHxPX0RJUkVDVE9SWSBtdXN0IGZhaWwgd2l0aCBFRVhJU1Qgd2hlblxcbisgKiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy5cXG4rICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIG9fZXhjbF9lZXhpc3QpXFxuK3tcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0ZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhzZWxmLVxcdTAwM2VkZmQsIFxcXCJleGNsZGlyXFxcIiwgT19FWENMKTtcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXFx1MDAzZWRmZCwgXFxcImV4Y2xkaXJcXFwiLCBTX0lSV1hVLCBPX0VYQ0wpLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRUVYSVNUKTtcXG4rXFxuK1xcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJleGNsZGlyXFxcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgb24gYSBwYXRoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXMgYSByZWd1bGFyIGZpbGVcXG4rICogbXVzdCBmYWlsIHdpdGggRU5PVERJUi5cXG4rICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGV4aXN0aW5nX2ZpbGVfZW5vdGRpcilcXG4re1xcbitcXHRpbnQgZmlsZV9mZDtcXG4rXFxuK1xcdGZpbGVfZmQgPSBvcGVuYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwicmVnZmlsZVxcXCIsXFxuK1xcdFxcdFxcdCBPX0NSRUFUIHwgT19XUk9OTFksIFNfSVJXWFUpO1xcbitcXHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XFxuK1xcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXFx1MDAzZWRmZCwgXFxcInJlZ2ZpbGVcXFwiLCBTX0lSV1hVLCAwKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXFx1MDAzZWRmZCwgXFxcInJlZ2ZpbGVcXFwiLCAwKSwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgY29tYmluZWQgd2l0aCBhIHdyaXRhYmxlIGFjY2VzcyBtb2RlIG11c3QgYmVcXG4rICogcmVqZWN0ZWQ6IGEgZGlyZWN0b3J5IGNhbm5vdCBiZSBvcGVuZWQgZm9yIHdyaXRpbmcuXFxuKyAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZWplY3RzX3dyaXRhYmxlX2FjY19tb2RlKVxcbit7XFxuK1xcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cXHUwMDNlZGZkLCBcXFwicmR3cmRpclxcXCIsIFNfSVJXWFUsIE9fUkRXUiksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcXG4rXFx0LyogQ2xlYW4gdXAgaWYgdGhlIGtlcm5lbCBjcmVhdGVkIHRoZSBkaXJlY3RvcnkgYW55d2F5LiAqL1xcbitcXHR1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJyZHdyZGlyXFxcIiwgQVRfUkVNT1ZFRElSKTtcXG4rfVxcbitcXG4rLypcXG4rICogb3BlbmF0KE9fQ1JFQVQpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBidXQgd2l0aG91dCBPX0RJUkVDVE9SWVxcbisgKiBtdXN0IGZhaWwgd2l0aCBFSVNESVIgYW5kIG11c3Qgbm90IGNyZWF0ZSBhbnl0aGluZyBhdCB0aGUgcGF0aC5cXG4rICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoX25vX29fZGlyKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0c3RydWN0IHN0YXQgc3Q7XFxuK1xcbitcXHRmZCA9IG9wZW5hdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJ0cmFpbGluZy9cXFwiLCBPX0NSRUFUIHwgT19XUk9OTFksIFNfSVJXWFUpO1xcbitcXHRFWFBFQ1RfRVEoZmQsIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFSVNESVIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKGZzdGF0YXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwidHJhaWxpbmdcXFwiLCBcXHUwMDI2c3QsIDApLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcXG4rXFxuK1xcdC8qIEJlc3QtZWZmb3J0IGNsZWFudXAgaW4gY2FzZSB0aGUga2VybmVsIGxlZnQgYSBmaWxlIGJlaGluZC4gKi9cXG4rXFx0aWYgKGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0dW5saW5rYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwidHJhaWxpbmdcXFwiLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIHJldHVybmVkIGZkIG11c3QgYmUgdXNhYmxlIGFzIGEgZGZkIGZvciBmdXJ0aGVyICphdCgpIGNhbGxzLlxcbisgKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZClcXG4re1xcbitcXHRpbnQgcGFyZW50X2ZkLCBjaGlsZF9mZDtcXG4rXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFxuK1xcdHBhcmVudF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtXFx1MDAzZWRmZCwgXFxcInBhcmVudFxcXCIpO1xcbitcXHRjaGlsZF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHBhcmVudF9mZCwgXFxcImNoaWxkXFxcIik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoY2hpbGRfZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKHBhcmVudF9mZCksIDApO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvcGFyZW50L2NoaWxkXFxcIiwgc2VsZi1cXHUwMDNlZGlycGF0aCk7XFxuK1xcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XFxuK1xcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIiVzL3BhcmVudFxcXCIsIHNlbGYtXFx1MDAzZWRpcnBhdGgpO1xcbitcXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xcbit9XFxuK1xcbitURVNUX0hBUk5FU1NfTUFJTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0MjoxNy41OTIxOTg2MDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTUyNjQ2MjAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXRoX29wZW5hdFwiLFxuICAgIFwiZG9fc3lzX29wZW5cIixcbiAgICBcInZmc19ta2RpclwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwiZmlsZW5hbWVfdW5saW5rYXRcIixcbiAgICBcImZpbGVuYW1lX3JlbmFtZWF0MlwiLFxuICAgIFwiY2lmc19hdG9taWNfb3BlblwiLFxuICAgIFwidjlmc192ZnNfYXRvbWljX29wZW5cIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxcIixcbiAgICBcImNlcGhfYXRvbWljX29wZW5cIixcbiAgICBcImZ1c2VfYXRvbWljX29wZW5cIixcbiAgICBcImdmczJfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3BlblwiLFxuICAgIFwibmZzX2F0b21pY19vcGVuX3YyM1wiLFxuICAgIFwidmJveHNmX2Rpcl9hdG9taWNfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVkZTIGxheWVyLCBhbGxvd2luZyBvcGVuYXQoKSB3aXRoIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSB0byBjcmVhdGUgZGlyZWN0b3JpZXMuIEl0IG1vZGlmaWVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIChmcy9uYW1laS5jLCBmcy9vcGVuLmMpIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKDlwLCBjZXBoLCBmdXNlLCBnZnMyLCBuZnMsIHNtYiwgdmJveHNmKSB0byBoYW5kbGUgdGhlIG5ldyBiZWhhdmlvciBpbiB0aGVpciBhdG9taWNfb3BlbiBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBpbiBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGZpbGUgb3BlbmluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlOGNkYWQ3YzEyY2ZhNTk4MDkwNjY1NjUxYzMzMzQ5ZDQ0MGIxZGFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTY6NDI6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jXG5pbmRleCA1NzgzZDAzMzZmOTZhYy4uYmI1NTVlNWJhMjYxNTAgMTAwNjQ0XG4tLS0gYS9mcy85cC92ZnNfaW5vZGUuY1xuKysrIGIvZnMvOXAvdmZzX2lub2RlLmNcbkBAIC03NzcsNiArNzc3LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gXHRpbnQgcDlfb21vZGU7XG4gXG4rXHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbmluZGV4IGY3Mzk2ZDIwY2I2Y2RjLi5mZjNmYWNiNDIwYzIyNCAxMDA2NDRcbi0tLSBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbisrKyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbkBAIC0yMzksNiArMjM5LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0c3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcztcbiBcdHN0cnVjdCBwb3NpeF9hY2wgKnBhY2wgPSBOVUxMLCAqZGFjbCA9IE5VTEw7XG4gXG4rXHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuY1xuaW5kZXggNzExNjFmMmIyMTUxMzYuLmU3OWFiZGJkOWY2MWU5IDEwMDY0NFxuLS0tIGEvZnMvY2VwaC9maWxlLmNcbisrKyBiL2ZzL2NlcGgvZmlsZS5jXG5AQCAtODExLDYgKzgxMSw5IEBAIGludCBjZXBoX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksXG4gXHQgICAgICBkX3VuaGFzaGVkKGRlbnRyeSkgPyBcInVuaGFzaGVkXCIgOiBcImhhc2hlZFwiLCBmbGFncywgbW9kZSk7XG4gXG4rXHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4gXHUwMDNlIE5BTUVfTUFYKVxuIFx0XHRyZXR1cm4gLUVOQU1FVE9PTE9ORztcbiBcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuY1xuaW5kZXggMGUyYTEwMzlmYTQzZWEuLmUwMTg2OTU2NWQ1ZWU1IDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9kaXIuY1xuKysrIGIvZnMvZnVzZS9kaXIuY1xuQEAgLTkzNSw2ICs5MzUsOSBAQCBzdGF0aWMgaW50IGZ1c2VfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmVudHJ5LFxuIFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbiBcdHN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGZ1c2VfaXNfYmFkKGRpcikpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuY1xuaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjk4NTlhZTAzNDFhOTllIDEwMDY0NFxuLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jXG4rKysgYi9mcy9nZnMyL2lub2RlLmNcbkBAIC0xMzg3LDYgKzEzODcsOSBAQCBzdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB7XG4gXHRib29sIGV4Y2wgPSAhIShmbGFncyBcdTAwMjYgT19FWENMKTtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKmQgPSBfX2dmczJfbG9va3VwKGRpciwgZGVudHJ5LCBmaWxlKTtcbiBcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpIHtcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggNWNjOWYwZjQ2NmI4MzAuLmZlZjgyNmMwNGViNTA3IDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuKysrIGIvZnMvbmFtZWkuY1xuQEAgLTEzODIsMTMgKzEzODIsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuIFxuIC8qKlxuICAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XG4tICpcdFx0XHQgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzIHRoYXQgYWxyZWFkeVxuLSAqXHRcdFx0ICBleGlzdC5cbisgKlx0XHRcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdFxuICAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXG4gICpcbi0gKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjpcbisgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46XG4gICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZFxuICAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xuICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XG5AQCAtMTQxNiw2ICsxNDE1LDE0IEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0aWYgKGxpa2VseSghKGRpcl9tb2RlIFx1MDAyNiBTX0lTVlRYKSkpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0LypcbitcdCAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreVxuK1x0ICogZm9sZGVycy4gVGhlcmVmb3JlLCBmb3IgdGhlIFNfSVNESVIgY2FzZSwgZGlzYWJsaW5nXG4rXHQgKiBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIgaXMgbm90IGVub3VnaCB0byBhbGxvdyBjcmVhdGluZyBhXG4rXHQgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzXG4rXHQgKiBub3QgZXhwZWN0aW5nIHRoYXQgT19DUkVBVHxPX0RJUkVDVE9SWSBpcyBwb3NzaWJsZSBvbiBuZXdlclxuK1x0ICoga2VybmVscy5cbitcdCAqL1xuIFx0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcilcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTQ0Nyw2ICsxNDU0LDEyIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0XHRcdFx0XHQgICAgICBcInN0aWNreV9jcmVhdGVfcmVndWxhclwiKTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuK1xuK1x0XHRpZiAoc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyIFx1MDAzZT0gMiBcdTAwMjZcdTAwMjYgU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXHRcdFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsXG4rXHRcdFx0XHRcdCAgICAgIFwic3RpY2t5X2NyZWF0ZV9kaXJcIik7XG4rXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTI3ODEsOSArMjc5NCwxNCBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncylcbiBcdHJldHVybiBzO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhjb25zdCBzdHJ1Y3QgcXN0ciBsYXN0KVxuK3tcbitcdHJldHVybiAoYm9vbClsYXN0Lm5hbWVbbGFzdC5sZW5dO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmxvb2t1cF9sYXN0KHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuIHtcbi1cdGlmIChuZC1cdTAwM2VsYXN0X3R5cGUgPT0gTEFTVF9OT1JNIFx1MDAyNlx1MDAyNiBuZC1cdTAwM2VsYXN0Lm5hbWVbbmQtXHUwMDNlbGFzdC5sZW5dKVxuK1x0aWYgKG5kLVx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXHUwMDI2XHUwMDI2IHRyYWlsaW5nX3NsYXNoZXMobmQtXHUwMDNlbGFzdCkpXG4gXHRcdG5kLVx1MDAzZWZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZO1xuIFxuIFx0cmV0dXJuIHdhbGtfY29tcG9uZW50KG5kLCBXQUxLX1RSQUlMSU5HKTtcbkBAIC00MTY0LDYgKzQxODIsMjQgQEAgc3RhdGljIGlubGluZSB1bW9kZV90IHZmc19wcmVwYXJlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRyZXR1cm4gbW9kZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZVxuK2ludCB2ZnNfY3JlYXRlX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0ICAgICAgIHVtb2RlX3QgbW9kZSwgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXG4re1xuK1x0c3RydWN0IGlub2RlICpkaXIgPSBkX2lub2RlKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4rXHRpbnQgZXJyb3I7XG4rXG4rXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCB0cnVlKTtcbitcdGlmICghZXJyb3IpXG4rXHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4rXG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuIC8qKlxuICAqIHZmc19jcmVhdGUgLSBjcmVhdGUgbmV3IGZpbGVcbiAgKiBAaWRtYXA6XHRpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXG5AQCAtNDE5NiwxMyArNDIzMiw4IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuLVx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdHJldHVybiBlcnJvcjtcbi1cdGVycm9yID0gZGlyLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7XG4tXHRpZiAoIWVycm9yKVxuLVx0XHRmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpO1xuLVx0cmV0dXJuIGVycm9yO1xuK1xuK1x0cmV0dXJuIHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBkaSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7XG4gXG5AQCAtNDMxOSwyMSArNDM1MCw0MCBAQCBzdGF0aWMgaW5saW5lIGludCBvcGVuX3RvX25hbWVpX2ZsYWdzKGludCBmbGFnKVxuIFxuIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdGNvbnN0IHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHR1bW9kZV90IG1vZGUpXG4rXHRcdFx0dW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpXG4ge1xuLVx0aW50IGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4rXHRzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZTtcbitcdGludCBlcnJvcjtcbitcbitcdGlmIChjcmVhdGVfZGlyKVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4gXHRpZiAoIWZzdWlkZ2lkX2hhc19tYXBwaW5nKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9zYiwgaWRtYXApKVxuIFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbi1cdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLFxuLVx0XHRcdFx0IE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbitcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0aWYgKGNyZWF0ZV9kaXIpXG4rXHRcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4rXG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpXG4re1xuK1x0aWYgKGNyZWF0ZV9kaXIpXG4rXHRcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIDApO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuIH1cbiBcbiAvKlxuQEAgLTQzNDcsNyArNDM5Nyw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuICAqIGJlIHNldC4gIFRoZSBjYWxsZXIgd2lsbCBuZWVkIHRvIHBlcmZvcm0gdGhlIG9wZW4gdGhlbXNlbHZlcy4gIEBwYXRoIHdpbGxcbiAgKiBoYXZlIGJlZW4gdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGRlbnRyeS4gIFRoaXMgbWF5IGJlIG5lZ2F0aXZlLlxuICAqXG4tICogUmV0dXJucyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlLiBPbiBlcnJvciB0aGUgcmVmIHRvIGRlbnRyeSBpcyBrZXB0LlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgZmlsZSAqZmlsZSxcbkBAIC00MzU5LDYgKzQ0MDksNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeVxuIFxuIFx0ZmlsZS1cdTAwM2VfX2ZfcGF0aC5kZW50cnkgPSBERU5UUllfTk9UX1NFVDtcbiBcdGZpbGUtXHUwMDNlX19mX3BhdGgubW50ID0gcGF0aC1cdTAwM2VtbnQ7XG4rXG4gXHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWF0b21pY19vcGVuKGRpciwgZGVudHJ5LCBmaWxlLFxuIFx0XHRcdFx0ICAgICAgIG9wZW5fdG9fbmFtZWlfZmxhZ3Mob3Blbl9mbGFnKSwgbW9kZSk7XG4gXHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XG5AQCAtNDM3MSwyMSArNDQyMiwzOSBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeVxuIFx0XHR9IGVsc2UgaWYgKFdBUk5fT04oZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5ID09IERFTlRSWV9OT1RfU0VUKSkge1xuIFx0XHRcdGVycm9yID0gLUVJTztcbiBcdFx0fSBlbHNlIHtcbitcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpvbGQgPSBkZW50cnk7XG4rXHRcdFx0Ym9vbCByZXBsYWNlZCA9IGZhbHNlO1xuIFx0XHRcdGlmIChmaWxlLVx1MDAzZWZfcGF0aC5kZW50cnkpIHtcbi1cdFx0XHRcdGRwdXQoZGVudHJ5KTtcbiBcdFx0XHRcdGRlbnRyeSA9IGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeTtcbitcdFx0XHRcdHJlcGxhY2VkID0gZGVudHJ5ICE9IG9sZDtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKHVubGlrZWx5KGRfaXNfbmVnYXRpdmUoZGVudHJ5KSkpXG4rXHRcdFx0aWYgKHVubGlrZWx5KGRfaXNfbmVnYXRpdmUoZGVudHJ5KSkpIHtcbitcdFx0XHRcdC8qIERvIG5vdCBkcm9wIG9yaWdpbmFsIGRlbnRyeSByZWYgb24gZXJyb3IgKi9cbitcdFx0XHRcdGlmIChyZXBsYWNlZClcbitcdFx0XHRcdFx0ZHB1dChkZW50cnkpO1xuIFx0XHRcdFx0ZXJyb3IgPSAtRU5PRU5UO1xuK1x0XHRcdH0gZWxzZSBpZiAocmVwbGFjZWQpIHtcbitcdFx0XHRcdGRwdXQob2xkKTtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbitcbiBcdGlmIChlcnJvcikge1xuLVx0XHRkcHV0KGRlbnRyeSk7XG4gXHRcdGRlbnRyeSA9IEVSUl9QVFIoZXJyb3IpO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxuK1x0XHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4rXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuK1x0XHRcdGZzbm90aWZ5X29wZW4oZmlsZSk7XG4gXHR9XG4rXG4gXHRyZXR1cm4gZGVudHJ5O1xuIH1cbiBcbitzdGF0aWMgaW5saW5lXG4rc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXG4rXHRcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTtcbiAvKlxuICAqIExvb2sgdXAgYW5kIG1heWJlIGNyZWF0ZSBhbmQgb3BlbiB0aGUgbGFzdCBjb21wb25lbnQuXG4gICpcbkBAIC00NDEyLDYgKzQ0ODEsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuIFx0aW50IGVycm9yLCBjcmVhdGVfZXJyb3IgPSAwO1xuIFx0dW1vZGVfdCBtb2RlID0gb3AtXHUwMDNlbW9kZTtcbitcdGJvb2wgY3JlYXRlX2RpciA9IE9fSVNfTUtESVIob3Blbl9mbGFnKTtcbiBcbiBcdGlmICh1bmxpa2VseShJU19ERUFERElSKGRpcl9pbm9kZSkpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbkBAIC00NDM3LDcgKzQ1MDcsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRkZW50cnkgPSBOVUxMO1xuIFx0fVxuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlKSB7XG4tXHRcdC8qIENhY2hlZCBwb3NpdGl2ZSBkZW50cnk6IHdpbGwgb3BlbiBpbiBmX29wLVx1MDAzZW9wZW4gKi9cbitcdFx0LyogQ2FjaGVkIHBvc2l0aXZlIGRlbnRyeTogd2lsbCBvcGVuIGluIGRvX29wZW4oKS4gKi9cbiBcdFx0cmV0dXJuIGRlbnRyeTtcbiBcdH1cbiBcbkBAIC00NDU5LDIxICs0NTI5LDM1IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTClcbiBcdFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19UUlVOQztcbi1cdFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpci1cdTAwM2VkX2lub2RlLCBtb2RlLCBtb2RlLCBtb2RlKTtcbitcdFx0bW9kZSA9IG9fY3JlYXRlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgY3JlYXRlX2Rpcik7XG4gXHRcdGlmIChsaWtlbHkoZ290X3dyaXRlKSlcbiBcdFx0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIFx1MDAyNm5kLVx1MDAzZXBhdGgsXG4tXHRcdFx0XHRcdFx0ICAgIGRlbnRyeSwgbW9kZSk7XG4rXHRcdFx0XHRcdFx0ICAgIGRlbnRyeSwgbW9kZSwgY3JlYXRlX2Rpcik7XG4gXHRcdGVsc2VcbiBcdFx0XHRjcmVhdGVfZXJyb3IgPSAtRVJPRlM7XG4rXHRcdC8qIFJlZnVzZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdGhyb3VnaCBhIGRhbmdsaW5nICh0cmFpbGluZylcbitcdFx0ICogc3ltbGluay4gRm9yIHJlZ3VsYXIgZmlsZXMgdGhpcyBoYXMgYmVlbiBhbGxvd2VkIGhpc3RvcmljYWxseVxuK1x0XHQgKiBvbiBPX0NSRUFUIHdpdGhvdXQgT19FWENMLiAqL1xuK1x0XHRpZiAodW5saWtlbHkobmQtXHUwMDNlZGVwdGgpIFx1MDAyNlx1MDAyNiBjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhY3JlYXRlX2Vycm9yKVxuK1x0XHRcdGNyZWF0ZV9lcnJvciA9IC1FTE9PUDtcbiBcdH1cbiBcdGlmIChjcmVhdGVfZXJyb3IpXG4gXHRcdG9wZW5fZmxhZyBcdTAwMjY9IH5PX0NSRUFUO1xuIFx0aWYgKGRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWF0b21pY19vcGVuKSB7XG4rXHRcdHN0cnVjdCBkZW50cnkgKm9yaWdfZGVudHJ5ID0gZGVudHJ5O1xuIFx0XHRpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9ESVJFQ1RPUlkpXG4gXHRcdFx0b3Blbl9mbGFnIHw9IE9fRElSRUNUT1JZO1xuIFx0XHRkZW50cnkgPSBhdG9taWNfb3BlbihcdTAwMjZuZC1cdTAwM2VwYXRoLCBkZW50cnksIGZpbGUsIG9wZW5fZmxhZywgbW9kZSk7XG4tXHRcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFx1MDAyNlx1MDAyNiBkZW50cnkgPT0gRVJSX1BUUigtRU5PRU5UKSlcbi1cdFx0XHRkZW50cnkgPSBFUlJfUFRSKGNyZWF0ZV9lcnJvcik7XG4rXHRcdGVycm9yID0gUFRSX0VSUl9PUl9aRVJPKGRlbnRyeSk7XG4rXHRcdGlmICh1bmxpa2VseShlcnJvcikpXG4rXHRcdFx0ZGVudHJ5ID0gb3JpZ19kZW50cnk7IC8qIGF0b21pY19vcGVuKCkga2VlcHMgcmVmIG9uIGVycm9yICovXG4rXHRcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFx1MDAyNlx1MDAyNiBlcnJvciA9PSAtRU5PRU5UKSB7XG4rXHRcdFx0LyogU2hvdWxkIGhhdmUgZG9uZSBhIGNyZWF0ZSwgYnV0IHdlIGFscmVhZHkgZXJyb3JlZC4gKi9cbitcdFx0XHRhdWRpdF9pbm9kZV9jaGlsZChkaXItXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XG4rXHRcdFx0ZXJyb3IgPSBjcmVhdGVfZXJyb3I7XG4rXHRcdH1cbitcdFx0aWYgKHVubGlrZWx5KGVycm9yKSlcbitcdFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0XHRyZXR1cm4gZGVudHJ5O1xuIFx0fVxuIFxuQEAgLTQ0OTAsMzAgKzQ1NzQsNDQgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHRkZW50cnkgPSByZXM7XG4gXHRcdH1cbiBcdH1cbitcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSB8fCAhKG9wLVx1MDAzZW9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkpIHtcbitcdFx0LyogTm8gbmVlZCB0byBjcmVhdGUgYSBmaWxlLiBJZiBsb29rdXAgcmV0dXJuZWQgYSBwb3NpdGl2ZVxuK1x0XHQgKiBkZW50cnksIHRoZSBmaWxlIHdpbGwgYmUgb3BlbmVkIGluIGRvX29wZW4oKS4gKi9cbitcdFx0cmV0dXJuIGRlbnRyeTtcbitcdH1cbiBcbi1cdC8qIE5lZ2F0aXZlIGRlbnRyeSwganVzdCBjcmVhdGUgdGhlIGZpbGUgKi9cbi1cdGlmICghZGVudHJ5LVx1MDAzZWRfaW5vZGUgXHUwMDI2XHUwMDI2IChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpKSB7XG4tXHRcdC8qIGJ1dCBicmVhayB0aGUgZGlyZWN0b3J5IGxlYXNlIGZpcnN0ISAqL1xuLVx0XHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXJfaW5vZGUsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XG4tXHRcdGlmIChlcnJvcilcbi1cdFx0XHRnb3RvIG91dF9kcHV0O1xuK1x0LyogTmVnYXRpdmUgZGVudHJ5IHdpdGggT19DUkVBVCBmbGFnIHNldCAqL1xuK1x0YXVkaXRfaW5vZGVfY2hpbGQoZGlyLVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpO1xuIFxuLVx0XHRmaWxlLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEO1xuLVx0XHRhdWRpdF9pbm9kZV9jaGlsZChkaXJfaW5vZGUsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpO1xuLVx0XHRpZiAoIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZSkge1xuLVx0XHRcdGVycm9yID0gLUVBQ0NFUztcbi1cdFx0XHRnb3RvIG91dF9kcHV0O1xuLVx0XHR9XG4tXG4tXHRcdGVycm9yID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcbi1cdFx0XHRcdFx0XHRtb2RlLCBvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTCk7XG4tXHRcdGlmIChlcnJvcilcbi1cdFx0XHRnb3RvIG91dF9kcHV0O1xuLVx0fVxuLVx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXHUwMDI2XHUwMDI2ICFkZW50cnktXHUwMDNlZF9pbm9kZSkge1xuK1x0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikpIHtcbitcdFx0LyogU2hvdWxkIGhhdmUgZG9uZSBhIGNyZWF0ZSwgYnV0IHdlIGFscmVhZHkgZXJyb3JlZCAqL1xuIFx0XHRlcnJvciA9IGNyZWF0ZV9lcnJvcjtcbiBcdFx0Z290byBvdXRfZHB1dDtcbiBcdH1cbitcbitcdGlmICgoY3JlYXRlX2RpciBcdTAwMjZcdTAwMjYgIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKVxuK1x0ICAgIHx8ICghY3JlYXRlX2RpciBcdTAwMjZcdTAwMjYgIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZSkpIHtcbitcdFx0ZXJyb3IgPSAtRUFDQ0VTO1xuK1x0XHRnb3RvIG91dF9kcHV0O1xuK1x0fVxuK1xuK1x0aWYgKGNyZWF0ZV9kaXIpIHtcbitcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxuK1x0XHRcdFx0XHRcdCAgICAgICBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpO1xuK1x0XHRpZiAoSVNfRVJSKHJlcykpIHtcbitcdFx0XHRlcnJvciA9IFBUUl9FUlIocmVzKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRlcnJvciA9IDA7XG4rXHRcdFx0ZGVudHJ5ID0gcmVzO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnJvciA9IHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpO1xuK1x0fVxuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIG91dF9kcHV0O1xuK1xuK1x0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcbitcbiBcdHJldHVybiBkZW50cnk7XG4gXG4gb3V0X2RwdXQ6XG5AQCAtNDUyMSwxNyArNDYxOSwxMiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbi17XG4tXHRyZXR1cm4gKGJvb2wpbmQtXHUwMDNlbGFzdC5uYW1lW25kLVx1MDAzZWxhc3QubGVuXTtcbi19XG4tXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKVxuIHtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiBcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbi1cdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKVxuK1x0XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZC1cdTAwM2VsYXN0KSBcdTAwMjZcdTAwMjYgIShvcGVuX2ZsYWcgXHUwMDI2IE9fRElSRUNUT1JZKSlcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlTRElSKTtcbiBcbiBcdFx0LyogRG9uJ3QgYm90aGVyIG9uIGFuIE9fRVhDTCBjcmVhdGUgKi9cbkBAIC00NTM5LDcgKzQ2MzIsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpXG4rXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZC1cdTAwM2VsYXN0KSlcbiBcdFx0bmQtXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XG4gXG4gXHRkZW50cnkgPSBsb29rdXBfZmFzdChuZCk7XG5AQCAtNDYwMiwxNiArNDY5NSwxMiBAQCBzdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRcdCAqL1xuIFx0fVxuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVClcbi1cdFx0aW5vZGVfbG9jayhkaXItXHUwMDNlZF9pbm9kZSk7XG4rXHRcdGlub2RlX2xvY2tfbmVzdGVkKGRpci1cdTAwM2VkX2lub2RlLCBJX01VVEVYX1BBUkVOVCk7XG4gXHRlbHNlXG4gXHRcdGlub2RlX2xvY2tfc2hhcmVkKGRpci1cdTAwM2VkX2lub2RlKTtcbitcbiBcdGRlbnRyeSA9IGxvb2t1cF9vcGVuKG5kLCBmaWxlLCBvcCwgZ290X3dyaXRlLCBcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xuLVx0aWYgKCFJU19FUlIoZGVudHJ5KSkge1xuLVx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpXG4tXHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpci1cdTAwM2VkX2lub2RlLCBkZW50cnkpO1xuLVx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRClcbi1cdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuLVx0fVxuK1xuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVClcbiBcdFx0aW5vZGVfdW5sb2NrKGRpci1cdTAwM2VkX2lub2RlKTtcbiBcdGVsc2VcbkBAIC00NjY5LDggKzQ3NTgsOSBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmICgob3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wpIFx1MDAyNlx1MDAyNiAhKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKSlcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbi1cdFx0aWYgKGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbitcdFx0aWYgKCEob3Blbl9mbGFnIFx1MDAyNiBPX0RJUkVDVE9SWSkgXHUwMDI2XHUwMDI2IGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbiBcdFx0XHRyZXR1cm4gLUVJU0RJUjtcbitcbiBcdFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2luX3N0aWNreShpZG1hcCwgbmQsXG4gXHRcdFx0XHRcdCAgICAgZF9iYWNraW5nX2lub2RlKG5kLVx1MDAzZXBhdGguZGVudHJ5KSk7XG4gXHRcdGlmICh1bmxpa2VseShlcnJvcikpXG5AQCAtNDk0Niw3ICs1MDM2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG4gXHQgKiBEbyB0aGUgZmluYWwgbG9va3VwLiAgU3VwcHJlc3MgJ2NyZWF0ZScgaWYgdGhlcmUgaXMgYSB0cmFpbGluZ1xuIFx0ICogJy8nLCBhbmQgYSBkaXJlY3Rvcnkgd2Fzbid0IHJlcXVlc3RlZC5cbiBcdCAqL1xuLVx0aWYgKGxhc3QubmFtZVtsYXN0Lmxlbl0gXHUwMDI2XHUwMDI2ICF3YW50X2RpcilcbitcdGlmICh0cmFpbGluZ19zbGFzaGVzKGxhc3QpIFx1MDAyNlx1MDAyNiAhd2FudF9kaXIpXG4gXHRcdGNyZWF0ZV9mbGFncyBcdTAwMjY9IH5MT09LVVBfQ1JFQVRFO1xuIFx0ZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC1cdTAwM2VkZW50cnksIFx1MDAyNmxhc3QsIHJldmFsX2ZsYWcgfCBjcmVhdGVfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUihkZW50cnkpKVxuQEAgLTUwNDEsMzIgKzUxMzEsMTcgQEAgc3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLFxuIFx0XHRwYXRoLVx1MDAzZWRlbnRyeSA9IGRpcjtcbiBcdFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbiBcbi1cdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUpO1xuK1x0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgbW9kZSwgLypjcmVhdGVfZGlyPSovIGZhbHNlKTtcbiBcdFx0aWYgKGNyZWF0ZV9lcnJvcilcbiBcdFx0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuIFxuLVx0XHQvKiBhdG9taWNfb3BlbiB3aWxsIGRwdXQoZGVudHJ5KSBvbiBlcnJvciAqL1xuLVx0XHRkZ2V0KG9yaWdfZGVudHJ5KTtcbiBcdFx0ZGVudHJ5ID0gYXRvbWljX29wZW4ocGF0aCwgZGVudHJ5LCBmaWxlLCBmbGFncywgbW9kZSk7XG4gXHRcdGVycm9yID0gUFRSX0VSUl9PUl9aRVJPKGRlbnRyeSk7XG4tXG4tXHRcdGlmIChJU19FUlIoZGVudHJ5KSlcbi1cdFx0XHQvKiBrZWVwIHRoZSBvcmlnaW5hbCAqL1xuK1x0XHRpZiAodW5saWtlbHkoZXJyb3IpKVxuIFx0XHRcdGRlbnRyeSA9IG9yaWdfZGVudHJ5O1xuLVx0XHRlbHNlXG4tXHRcdFx0LyogRHJvcCB0aGUgZXh0cmEgcmVmZXJlbmNlICovXG4tXHRcdFx0ZHB1dChvcmlnX2RlbnRyeSk7XG4tXG4gXHRcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFx1MDAyNlx1MDAyNiBlcnJvciA9PSAtRU5PRU5UKVxuIFx0XHRcdGVycm9yID0gY3JlYXRlX2Vycm9yO1xuIFxuLVx0XHRpZiAoIWVycm9yKSB7XG4tXHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxuLVx0XHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpci1cdTAwM2VkX2lub2RlLCBkZW50cnkpO1xuLVx0XHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuLVx0XHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbi1cdFx0fVxuLVxuIFx0XHRwYXRoLVx1MDAzZWRlbnRyeSA9IGRlbnRyeTtcbiBcbiBcdH0gZWxzZSB7XG5AQCAtNTIxOCw2ICs1MjkzLDM5IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkXG4gXHRyZXR1cm4gZmlsZW5hbWVfbWtub2RhdChBVF9GRENXRCwgbmFtZSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZVxuK3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbitcdFx0XHRcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcbit7XG4rXHRpbnQgZXJyb3I7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbitcdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfbWF4X2xpbmtzO1xuK1xuK1x0ZXJyb3IgPSAtRU1MSU5LO1xuK1x0aWYgKG1heF9saW5rcyBcdTAwMjZcdTAwMjYgZGlyLVx1MDAzZWlfbmxpbmsgXHUwMDNlPSBtYXhfbGlua3MpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0aWYgKElTX0VSUihkZSkpIHtcbitcdFx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXHRpZiAoZGUpIHtcbitcdFx0ZHB1dChkZW50cnkpO1xuK1x0XHRkZW50cnkgPSBkZTtcbitcdH1cbitcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcbitcdHJldHVybiBkZW50cnk7XG4rXG4rZXJyOlxuK1x0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuK31cbitcbiAvKipcbiAgKiB2ZnNfbWtkaXIgLSBjcmVhdGUgZGlyZWN0b3J5IHJldHVybmluZyBjb3JyZWN0IGRlbnRyeSBpZiBwb3NzaWJsZVxuICAqIEBpZG1hcDpcdFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuQEAgLTUyNDUsNyArNTM1Myw2IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRlbGVnYXRlZF9pbm9kZSlcbiB7XG4gXHRpbnQgZXJyb3I7XG4tXHR1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItXHUwMDNlaV9zYi1cdTAwM2VzX21heF9saW5rcztcbiBcdHN0cnVjdCBkZW50cnkgKmRlO1xuIFxuIFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2RlbnRyeShpZG1hcCwgZGlyLCBkZW50cnkpO1xuQEAgLTUyNjEsMjQgKzUzNjgsMTIgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRlcnJvciA9IC1FTUxJTks7XG4tXHRpZiAobWF4X2xpbmtzIFx1MDAyNlx1MDAyNiBkaXItXHUwMDNlaV9ubGluayBcdTAwM2U9IG1heF9saW5rcylcbi1cdFx0Z290byBlcnI7XG4tXG4tXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XG4tXHRpZiAoZXJyb3IpXG4rXHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcbitcdGlmIChJU19FUlIoZGUpKSB7XG4rXHRcdGVycm9yID0gUFRSX0VSUihkZSk7XG4gXHRcdGdvdG8gZXJyO1xuLVxuLVx0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuLVx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcbi1cdGlmIChJU19FUlIoZGUpKVxuLVx0XHRnb3RvIGVycjtcbi1cdGlmIChkZSkge1xuLVx0XHRkcHV0KGRlbnRyeSk7XG4tXHRcdGRlbnRyeSA9IGRlO1xuIFx0fVxuLVx0ZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpO1xuLVx0cmV0dXJuIGRlbnRyeTtcbitcdHJldHVybiBkZTtcbiBcbiBlcnI6XG4gXHRlbmRfY3JlYXRpbmcoZGVudHJ5KTtcbkBAIC01NTY1LDcgKzU2NjAsNyBAQCBpbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKVxuIFx0XHRnb3RvIGV4aXRfZHJvcF93cml0ZTtcbiBcbiBcdC8qIFdoeSBub3QgYmVmb3JlPyBCZWNhdXNlIHdlIHdhbnQgY29ycmVjdCBlcnJvciB2YWx1ZSAqL1xuLVx0aWYgKHVubGlrZWx5KGxhc3QubmFtZVtsYXN0Lmxlbl0pKSB7XG4rXHRpZiAodW5saWtlbHkodHJhaWxpbmdfc2xhc2hlcyhsYXN0KSkpIHtcbiBcdFx0aWYgKGRfaXNfZGlyKGRlbnRyeSkpXG4gXHRcdFx0ZXJyb3IgPSAtRUlTRElSO1xuIFx0XHRlbHNlXG5AQCAtNjE2NywxNiArNjI2MiwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSxcbiBcdGlmIChmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSB7XG4gXHRcdGlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHtcbiBcdFx0XHRlcnJvciA9IC1FTk9URElSO1xuLVx0XHRcdGlmIChuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4rXHRcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmV3X2xhc3QpKVxuIFx0XHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdFx0fVxuIFx0fVxuIFx0LyogdW5sZXNzIHRoZSBzb3VyY2UgaXMgYSBkaXJlY3RvcnkgdHJhaWxpbmcgc2xhc2hlcyBnaXZlIC1FTk9URElSICovXG4gXHRpZiAoIWRfaXNfZGlyKHJkLm9sZF9kZW50cnkpKSB7XG4gXHRcdGVycm9yID0gLUVOT1RESVI7XG4tXHRcdGlmIChvbGRfbGFzdC5uYW1lW29sZF9sYXN0Lmxlbl0pXG4rXHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG9sZF9sYXN0KSlcbiBcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuLVx0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgbmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKVxuK1x0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZXdfbGFzdCkpXG4gXHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmNcbmluZGV4IGM3YjcyM2MxODYyMGM5Li5jODE1ZDlhYTliNjlkYSAxMDA2NDRcbi0tLSBhL2ZzL25mcy9kaXIuY1xuKysrIGIvZnMvbmZzL2Rpci5jXG5AQCAtMjEyMSw2ICsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ZGZwcmludGsoVkZTLCBcIk5GUzogYXRvbWljX29wZW4oJXMvJWxsdSksICVwZFxcblwiLFxuIFx0XHRcdGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGRpci1cdTAwM2VpX2lubywgZGVudHJ5KTtcbiBcbitcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxuK1x0XHRvcGVuX2ZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRlcnIgPSBuZnNfY2hlY2tfZmxhZ3Mob3Blbl9mbGFncyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIzMTMsNiArMjMxNiw5IEBAIGludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgKi9cbiBcdGludCBlcnJvciA9IDA7XG4gXG4rXHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcbitcdFx0b3Blbl9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBORlNfU0VSVkVSKGRpciktXHUwMDNlbmFtZWxlbilcbiBcdFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uODdlODg2NGQ5NDgwODcgMTAwNjQ0XG4tLS0gYS9mcy9vcGVuLmNcbisrKyBiL2ZzL29wZW4uY1xuQEAgLTExOTAsMjkgKzExOTAsMzAgQEAgaW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG4gXHRpZiAoV0lMTF9DUkVBVEUoZmxhZ3MpKSB7XG4gXHRcdGlmIChob3ctXHUwMDNlbW9kZSBcdTAwMjYgflNfSUFMTFVHTylcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0b3AtXHUwMDNlbW9kZSA9IGhvdy1cdTAwM2Vtb2RlIHwgU19JRlJFRztcbitcdFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRcdG9wLVx1MDAzZW1vZGUgPSBob3ctXHUwMDNlbW9kZSB8IFNfSUZESVI7XG4rXHRcdGVsc2VcbitcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlICE9IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdG9wLVx1MDAzZW1vZGUgPSAwO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIEJsb2NrIGJ1Z3Mgd2hlcmUgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGNyZWF0ZWQgcmVndWxhciBmaWxlcy5cbi1cdCAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0c1xuLVx0ICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC5cbi1cdCAqL1xuLVx0aWYgKChmbGFncyBcdTAwMjYgKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpID09IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdC8qIE5vdyBoYW5kbGUgdGhlIGNyZWF0aXZlIGltcGxlbWVudGF0aW9uIG9mIE9fVE1QRklMRS4gKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgX19PX1RNUEZJTEUpIHtcbiBcdFx0LypcbiBcdFx0ICogSW4gb3JkZXIgdG8gZW5zdXJlIHByb2dyYW1zIGdldCBleHBsaWNpdCBlcnJvcnMgd2hlbiB0cnlpbmdcbiBcdFx0ICogdG8gdXNlIE9fVE1QRklMRSBvbiBvbGQga2VybmVscyB3ZSBlbmZvcmNlIHRoYXQgT19ESVJFQ1RPUllcbi1cdFx0ICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRS5cbitcdFx0ICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRSwgYnV0IHdpdGhvdXQgT19DUkVBVC4gVGhlXG4rXHRcdCAqIHJlYXNvbiBmb3IgZGlzYWxsb3dpbmcgT19DUkVBVHxPX1RNUEZJTEUgaXMgdGhhdFxuK1x0XHQgKiBPX0RJUkVDVE9SWXxPX0NSRUFUIHVzZWQgdG8gd29yayBhbmQgY3JlYXRlZCBhIHJlZ3VsYXIgZmlsZVxuK1x0XHQgKiBpZiBub3RoaW5nIGV4aXN0ZWQgYXQgdGhlIG9wZW4gcGF0aC4gSGVuY2UsIGFsbG93aW5nIHRoZVxuK1x0XHQgKiBjb21iaW5hdGlvbiB3b3VsZCBoYXZlIGNhdXNlZCBPX0NSRUFUfE9fVE1QRklMRSB0byBjcmVhdGUgYVxuK1x0XHQgKiByZWd1bGFyIChub24tdGVtcG9yYXJ5KSBmaWxlIG9uIG9sZCBrZXJuZWxzLCB3aGlsZSB0aGUgY2FsbGVyXG4rXHRcdCAqIHdvdWxkIGJlbGlldmUgdGhleSBjcmVhdGVkIGFuIGFjdHVhbCBPX1RNUEZJTEUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIShmbGFncyBcdTAwMjYgT19ESVJFQ1RPUlkpKVxuK1x0XHRpZiAoIShmbGFncyBcdTAwMjYgT19ESVJFQ1RPUlkpIHx8IChmbGFncyBcdTAwMjYgT19DUkVBVCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGlmICghKGFjY19tb2RlIFx1MDAyNiBNQVlfV1JJVEUpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEyNjksNiArMTI3MCwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcbiBcdG9wLVx1MDAzZWludGVudCA9IGZsYWdzIFx1MDAyNiBPX1BBVEggPyAwIDogTE9PS1VQX09QRU47XG4gXG4rXHQvKlxuK1x0ICogUmVxdWVzdGluZyB3cml0ZSBhY2Nlc3Mgb24gYSBkaXJlY3RvcnkgY2FuIG5ldmVyIHN1Y2NlZWQuIFJhdGhlclxuK1x0ICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXNcbitcdCAqIGFjdHVhbGx5IGEgZGlyZWN0b3J5ICgtRUlTRElSKSBvciBub3QgKC1FTk9URElSKSwgd2Ugc2hvcnQtY2lyY3VpdFxuK1x0ICogdG8gLUVOT1RESVIuXG4rXHQgKi9cbitcdGlmICgoZmxhZ3MgXHUwMDI2IE9fRElSRUNUT1JZKSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgX19PX1RNUEZJTEUpIFx1MDAyNlx1MDAyNiAoYWNjX21vZGUgXHUwMDI2IE1BWV9XUklURSkpXG4rXHRcdHJldHVybiAtRU5PVERJUjtcbitcbiBcdGlmIChmbGFncyBcdTAwMjYgT19DUkVBVCkge1xuIFx0XHRvcC1cdTAwM2VpbnRlbnQgfD0gTE9PS1VQX0NSRUFURTtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBPX0VYQ0wpIHtcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuaW5kZXggODhhNGExNzg3ZmYwNDcuLjc1YmY4NmNjMDYxMjJlIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuY1xuKysrIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuQEAgLTUzOCw2ICs1MzgsOSBAQCBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXG4gXHRpZiAodW5saWtlbHkoY2lmc19mb3JjZWRfc2h1dGRvd24oY2lmc19zYikpKVxuIFx0XHRyZXR1cm4gc21iX0VJTyhzbWJfZWlvX3RyYWNlX2ZvcmNlZF9zaHV0ZG93bik7XG4gXG4rXHRpZiAoT19JU19NS0RJUihvZmxhZ3MpKVxuK1x0XHRvZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdC8qXG4gXHQgKiBQb3NpeCBvcGVuIGlzIG9ubHkgY2FsbGVkIChhdCBsb29rdXAgdGltZSkgZm9yIGZpbGUgY3JlYXRlIG5vdy4gRm9yXG4gXHQgKiBvcGVucyAocmF0aGVyIHRoYW4gY3JlYXRlcyksIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgaWYgaXQgaXMgYSBmaWxlXG5kaWZmIC0tZ2l0IGEvZnMvdmJveHNmL2Rpci5jIGIvZnMvdmJveHNmL2Rpci5jXG5pbmRleCBjNWJkMzI3MWFhOTYxNi4uNzdhZTJmNjk2ZmQ0MzcgMTAwNjQ0XG4tLS0gYS9mcy92Ym94c2YvZGlyLmNcbisrKyBiL2ZzL3Zib3hzZi9kaXIuY1xuQEAgLTMxOCw2ICszMTgsOSBAQCBzdGF0aWMgaW50IHZib3hzZl9kaXJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHU2NCBoYW5kbGU7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmJveHNmX2Rpcl9sb29rdXAocGFyZW50LCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mY250bC5oIGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5pbmRleCA2YWQ2YjllN2EyMjZhZi4uNmI3NTI3N2JlNTU5ZGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZmNudGwuaFxuQEAgLTMwLDYgKzMwLDEyIEBAXG4gICovXG4gI2RlZmluZSBfX09fUkVHVUxBUlx0XHQoMSBcdTAwM2NcdTAwM2MgMzApXG4gXG4rI2RlZmluZSBPX01LRElSX01BU0tcdChPX0NSRUFUIHwgT19ESVJFQ1RPUlkpXG4rc3RhdGljIGlubGluZSBib29sIE9fSVNfTUtESVIodW5zaWduZWQgZmxhZ3MpXG4re1xuK1x0cmV0dXJuIChmbGFncyBcdTAwMjYgT19NS0RJUl9NQVNLKSA9PSBPX01LRElSX01BU0s7XG4rfVxuK1xuIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciB0aGUgaG93LVx1MDAzZXJlc29sdmUgYXJndW1lbnQ6ICovXG4gI2RlZmluZSBWQUxJRF9SRVNPTFZFX0ZMQUdTIFxcXG4gXHQoUkVTT0xWRV9OT19YREVWIHwgUkVTT0xWRV9OT19NQUdJQ0xJTktTIHwgUkVTT0xWRV9OT19TWU1MSU5LUyB8IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbmluZGV4IDY0YWMwZGZhNDZiN2VmLi5mMjU3YjNkZGI0Nzk0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbkBAIC0xLDQgKzEsNSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuK29wZW5fb19jcmVhdF9vX2RpclxuIGRub3RpZnlfdGVzdFxuIGRldnB0c19wdHNcbiBmY2xvZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbmluZGV4IDg1NDI3ZDdmMTliOWI1Li42NDVjNTJkMmQ0ZGViMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxuQEAgLTEsNyArMSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuIENGTEFHUyArPSAkKEtIRFJfSU5DTFVERVMpXG4tVEVTVF9HRU5fUFJPR1MgOj0gZGV2cHRzX3B0cyBmaWxlX3N0cmVzc29yIGFub25faW5vZGVfdGVzdCBrZXJuZnNfdGVzdCBmY2xvZ1xuK1RFU1RfR0VOX1BST0dTIDo9IG9wZW5fb19jcmVhdF9vX2RpciBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nXG4gVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgOj0gZG5vdGlmeV90ZXN0XG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuY1xuaW5kZXggNTUxYzRhMGYzOTVhMTIuLjU5M2E1MTM2ZTk5MTkyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuY1xuQEAgLTYsMTAgKzYsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9tb3VudC5oXHUwMDNlXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kZjNjZGJhZTJjODUyNFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmNcbkBAIC0wLDAgKzEsMTk3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IG9wZW5fb19jcmVhdF9vX2RpcihpbnQgZGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSxcbitcdFx0XHRcdCAgICAgbW9kZV90IG1vZGUsIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRyZXR1cm4gc3lzY2FsbChfX05SX29wZW5hdCwgZGZkLCBwYXRobmFtZSxcbitcdFx0ICAgICAgIGZsYWdzIHwgT19ESVJFQ1RPUlkgfCBPX0NSRUFULCBtb2RlKTtcbit9XG4rXG4rI2RlZmluZSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCBmbGFncykgKHtcdFxcXG4rXHRzdHJ1Y3Qgc3RhdCBfX3N0O1x0XHRcdFx0XHRcdFxcXG4rXHRpbnQgX19mZCA9IG9wZW5fb19jcmVhdF9vX2RpcihkZmQsIHBhdGhuYW1lLCBTX0lSV1hVLCBmbGFncyk7XHRcXFxuK1x0QVNTRVJUX0dFKF9fZmQsIDApO1x0XHRcdFx0XHRcdFxcXG4rXHRBU1NFUlRfRVEoZnN0YXQoX19mZCwgXHUwMDI2X19zdCksIDApO1x0XHRcdFx0XFxcbitcdEVYUEVDVF9UUlVFKFNfSVNESVIoX19zdC5zdF9tb2RlKSk7XHRcdFx0XHRcXFxuK1x0X19mZDtcdFx0XHRcdFx0XHRcdFx0XFxcbit9KVxuK1xuKyNkZWZpbmUgb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoZGZkLCBwYXRobmFtZSkgXFxcbitcdG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIDApXG4rXG4rRklYVFVSRShvcGVuX29fY3JlYXRfb19kaXIpIHtcbitcdGNoYXIgZGlycGF0aFtQQVRIX01BWF07XG4rXHRpbnQgZGZkO1xuK307XG4rXG4rRklYVFVSRV9TRVRVUChvcGVuX29fY3JlYXRfb19kaXIpXG4re1xuK1x0c3RyY3B5KHNlbGYtXHUwMDNlZGlycGF0aCwgXCIvdG1wL29wZW5fb19jcmVhdF9vX2Rpcl90ZXN0LlhYWFhYWFwiKTtcbitcdEFTU0VSVF9ORShta2R0ZW1wKHNlbGYtXHUwMDNlZGlycGF0aCksIE5VTEwpO1xuK1x0c2VsZi1cdTAwM2VkZmQgPSBvcGVuKHNlbGYtXHUwMDNlZGlycGF0aCwgT19ESVJFQ1RPUlkpO1xuK1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZGZkLCAwKTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpXG4re1xuK1x0Y2xvc2Uoc2VsZi1cdTAwM2VkZmQpO1xuK1x0cm1kaXIoc2VsZi1cdTAwM2VkaXJwYXRoKTtcbit9XG4rXG4rLyogRG9lcyBvcGVuX29fY3JlYXRfb19kaXIgcmV0dXJuIGEgZmQgYXQgYWxsPyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJldHVybnNfZmQpXG4re1xuK1x0aW50IGZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwibmV3ZGlyXCIpO1xuK1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwibmV3ZGlyXCIsIEFUX1JFTU9WRURJUiksIDApO1xuK31cbitcbisvKiBUaGUgZmQgbXVzdCByZWZlciB0byB0aGUgZGlyZWN0b3J5IHRoYXQgd2FzIGp1c3QgY3JlYXRlZC4gKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBmZF9pc19jcmVhdGVkX2Rpcilcbit7XG4rXHRpbnQgZmQ7XG4rXHRzdHJ1Y3Qgc3RhdCBzdF92aWFfZmQsIHN0X3ZpYV9wYXRoO1xuK1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbitcbitcdGZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwiY2hlY2tkaXJcIik7XG4rXG4rXHRBU1NFUlRfRVEoZnN0YXQoZmQsIFx1MDAyNnN0X3ZpYV9mZCksIDApO1xuK1xuK1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIiVzL2NoZWNrZGlyXCIsIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4rXHRBU1NFUlRfRVEoc3RhdChwYXRoLCBcdTAwMjZzdF92aWFfcGF0aCksIDApO1xuK1xuK1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9pbm8sIHN0X3ZpYV9wYXRoLnN0X2lubyk7XG4rXHRFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2Rldiwgc3RfdmlhX3BhdGguc3RfZGV2KTtcbitcbitcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuK1x0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcbit9XG4rXG4rLyogTWlzc2luZyBwYXJlbnQgY29tcG9uZW50IG11c3QgZmFpbCB3aXRoIEVOT0VOVC4gKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm9lbnRfbWlzc2luZ19wYXJlbnQpXG4re1xuK1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLVx1MDAzZWRmZCwgXCJub25leGlzdGVudC9jaGlsZFwiLCBTX0lSV1hVLCAwKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFTk9FTlQpO1xuK31cbitcbisvKiBBbiBpbnZhbGlkIGRmZCBtdXN0IGZhaWwgd2l0aCBFQkFERi4gKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlYmFkZilcbit7XG4rXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKC00MiwgXCJiYWRmZGlyXCIsIFNfSVJXWFUsIDApLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVCQURGKTtcbit9XG4rXG4rLyogQSBkZmQgdGhhdCBwb2ludHMgdG8gYSBmaWxlIChub3QgYSBkaXJlY3RvcnkpIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vdGRpcl9kZmQpXG4re1xuK1x0aW50IGZpbGVfZmQ7XG4rXG4rXHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcImZpbGVcIixcbitcdFx0XHQgT19DUkVBVCB8IE9fV1JPTkxZLCBTX0lSV1hVKTtcbitcdEFTU0VSVF9HRShmaWxlX2ZkLCAwKTtcbitcbitcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoZmlsZV9mZCwgXCJzdWJkaXJcIiwgU19JUldYVSwgMCksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4rXG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xuK1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcImZpbGVcIiwgMCksIDApO1xuK31cbitcbisvKlxuKyAqIE9fRVhDTCB0b2dldGhlciB3aXRoIE9fQ1JFQVR8T19ESVJFQ1RPUlkgbXVzdCBmYWlsIHdpdGggRUVYSVNUIHdoZW5cbisgKiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBvX2V4Y2xfZWV4aXN0KVxuK3tcbitcdGludCBmZDtcbitcbitcdGZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWRfZmxhZ3Moc2VsZi1cdTAwM2VkZmQsIFwiZXhjbGRpclwiLCBPX0VYQ0wpO1xuK1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXG4rXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXHUwMDNlZGZkLCBcImV4Y2xkaXJcIiwgU19JUldYVSwgT19FWENMKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFRVhJU1QpO1xuK1xuK1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcImV4Y2xkaXJcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogT19DUkVBVHxPX0RJUkVDVE9SWSBvbiBhIHBhdGggdGhhdCBhbHJlYWR5IGV4aXN0cyBhcyBhIHJlZ3VsYXIgZmlsZVxuKyAqIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuXG4rICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZXhpc3RpbmdfZmlsZV9lbm90ZGlyKVxuK3tcbitcdGludCBmaWxlX2ZkO1xuK1xuK1x0ZmlsZV9mZCA9IG9wZW5hdChzZWxmLVx1MDAzZWRmZCwgXCJyZWdmaWxlXCIsXG4rXHRcdFx0IE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XG4rXHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xuK1xuK1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLVx1MDAzZWRmZCwgXCJyZWdmaWxlXCIsIFNfSVJXWFUsIDApLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xuK1xuK1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcInJlZ2ZpbGVcIiwgMCksIDApO1xuK31cbitcbisvKlxuKyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgY29tYmluZWQgd2l0aCBhIHdyaXRhYmxlIGFjY2VzcyBtb2RlIG11c3QgYmVcbisgKiByZWplY3RlZDogYSBkaXJlY3RvcnkgY2Fubm90IGJlIG9wZW5lZCBmb3Igd3JpdGluZy5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZWplY3RzX3dyaXRhYmxlX2FjY19tb2RlKVxuK3tcbitcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cdTAwM2VkZmQsIFwicmR3cmRpclwiLCBTX0lSV1hVLCBPX1JEV1IpLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xuK1x0LyogQ2xlYW4gdXAgaWYgdGhlIGtlcm5lbCBjcmVhdGVkIHRoZSBkaXJlY3RvcnkgYW55d2F5LiAqL1xuK1x0dW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwicmR3cmRpclwiLCBBVF9SRU1PVkVESVIpO1xuK31cbitcbisvKlxuKyAqIG9wZW5hdChPX0NSRUFUKSB3aXRoIGEgdHJhaWxpbmcgc2xhc2ggYnV0IHdpdGhvdXQgT19ESVJFQ1RPUllcbisgKiBtdXN0IGZhaWwgd2l0aCBFSVNESVIgYW5kIG11c3Qgbm90IGNyZWF0ZSBhbnl0aGluZyBhdCB0aGUgcGF0aC5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCB0cmFpbGluZ19zbGFzaF9ub19vX2Rpcilcbit7XG4rXHRpbnQgZmQ7XG4rXHRzdHJ1Y3Qgc3RhdCBzdDtcbitcbitcdGZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcInRyYWlsaW5nL1wiLCBPX0NSRUFUIHwgT19XUk9OTFksIFNfSVJXWFUpO1xuK1x0RVhQRUNUX0VRKGZkLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVJU0RJUik7XG4rXG4rXHRFWFBFQ1RfRVEoZnN0YXRhdChzZWxmLVx1MDAzZWRmZCwgXCJ0cmFpbGluZ1wiLCBcdTAwMjZzdCwgMCksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbitcbitcdC8qIEJlc3QtZWZmb3J0IGNsZWFudXAgaW4gY2FzZSB0aGUga2VybmVsIGxlZnQgYSBmaWxlIGJlaGluZC4gKi9cbitcdGlmIChmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGZkKTtcbitcdHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcInRyYWlsaW5nXCIsIDApO1xuK31cbitcbisvKlxuKyAqIFRoZSByZXR1cm5lZCBmZCBtdXN0IGJlIHVzYWJsZSBhcyBhIGRmZCBmb3IgZnVydGhlciAqYXQoKSBjYWxscy5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBmZF91c2FibGVfYXNfZGZkKVxuK3tcbitcdGludCBwYXJlbnRfZmQsIGNoaWxkX2ZkO1xuK1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbitcbitcdHBhcmVudF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcInBhcmVudFwiKTtcbitcdGNoaWxkX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQocGFyZW50X2ZkLCBcImNoaWxkXCIpO1xuK1xuK1x0RVhQRUNUX0VRKGNsb3NlKGNoaWxkX2ZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEoY2xvc2UocGFyZW50X2ZkKSwgMCk7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvcGFyZW50L2NoaWxkXCIsIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4rXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuK1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIiVzL3BhcmVudFwiLCBzZWxmLVx1MDAzZWRpcnBhdGgpO1xuK1x0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcbit9XG4rXG4rVEVTVF9IQVJORVNTX01BSU5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQyOjE3LjU5MjIwMDgxMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NTMzMzYzNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBpbnRlcmFjdHMgd2l0aCBgb3BlbmF0KClgLiBCZWZvcmUsIGl0IHNlZW1zIGxpa2UgdGhpcyBjb21iaW5hdGlvbiBlaXRoZXIgZmFpbGVkIG91dHJpZ2h0IG9yLCBpbiBzb21lIGNhc2VzLCBjcmVhdGVkIGEgcmVndWxhciBmaWxlLiBOb3csIGl0IGxvb2tzIGxpa2Ugd2UncmUgYWN0dWFsbHkgKmVuYWJsaW5nKiB0aGUgY3JlYXRpb24gb2YgZGlyZWN0b3JpZXMgdGhyb3VnaCB0aGlzIGZsYWcgY29tYmluYXRpb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgYE9fSVNfTUtESVIoZmxhZ3MpYCBjaGVjay4gIEl0J3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQsIHRvdWNoaW5nIGNvcmUgVkZTIGNvZGUgKGBmcy9uYW1laS5jYCwgYGZzL29wZW4uY2ApIGFuZCB0aGVuIHByb3BhZ2F0aW5nIG91dCB0byBhIGJ1bmNoIG9mIGRpZmZlcmVudCBmaWxlc3lzdGVtcy5cblxuSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgY2hhbmdlZCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGFjdCBpcyBoZXJlLiBTaW5jZSB0aGlzIGhpdHMgdGhlIFZGUyBsZXZlbCwgaXQgaXMgYSBjcnVjaWFsIGFyZWEgZm9yIGZ1enppbmcuIFRoZSBmdW5jdGlvbmFsIHNoaWZ0IGlzIHRvIGFsbG93IGRpcmVjdG9yeSBjcmVhdGlvbiB3aXRoIGBvcGVuYXQoKWAgYW5kIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgLCB3aGljaCBpcyBlaXRoZXIgYSBuZXcgZmVhdHVyZSBvciBhIGZpeCB0byBwcmlvciBiZWhhdmlvci5cblxuSSdtIG1ha2luZyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGFzIHRoZSBrZXkgcG9pbnRzIG9mIGZvY3VzLiBGcm9tIHRoZSBjb2RlLCBJIHNlZTogYHZmc19ta2Rpcl9ub19wZXJtYCwgYG1heV9vX2NyZWF0ZWAsIGBhdG9taWNfb3BlbmAsIGBsb29rdXBfb3BlbmAsIGBsb29rdXBfZmFzdF9mb3Jfb3BlbmAsIGBvcGVuX2xhc3RfbG9va3Vwc2AsIGBkb19vcGVuYCwgYGRlbnRyeV9jcmVhdGVgLCBgdmZzX21rZGlyYCwgYW5kIGBidWlsZF9vcGVuX2ZsYWdzYC4gVGhlIGF0b21pYyBvcGVuIG1vZGlmaWNhdGlvbnMgaW4gdGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgY29kZSBhcmUgaW1wb3J0YW50LCB0b286IGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsYCwgYGNlcGhfYXRvbWljX29wZW5gLCBgZnVzZV9hdG9taWNfb3BlbmAsIGBnZnMyX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5fdjIzYCwgYGNpZnNfYXRvbWljX29wZW5gLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLlxuXG5TaW5jZSBpdCB0b3VjaGVzIHRoZSBWRlMsIEkgZG9uJ3QgbmVjZXNzYXJpbHkgbmVlZCBhbnkgZXhvdGljIGNvbmZpZ3MsIGJ1dCBJIHNob3VsZCBlbmFibGUgc3BlY2lmaWMgZmlsZXN5c3RlbXMuIEknbSBnb2luZyB0byBsaXN0IGBWQk9YU0ZfRlNgLCBgR0ZTMl9GU2AsIGBDRVBIX0ZTYCwgYW5kIGA5UF9GU2AgdG8gbWFrZSBzdXJlIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBjb3ZlcmVkLlxuXG5Ob3csIEknbSBnb2luZyB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbnMgd2l0aGluIGBmcy9uYW1laS5jYC4gSSBoYXZlIGB2ZnNfbWtkaXJfbm9fcGVybWAsIGBtYXlfb19jcmVhdGVgLCBgb19jcmVhdGVfbW9kZWAsIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYW5kIGBidWlsZF9vcGVuX2ZsYWdzYCB0byBsb29rIGF0LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYHZmc19ta2Rpcl9ub19wZXJtYCBpcyBhY3R1YWxseSB1c2VkLiBBaCwgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWMgaW5saW5lYCBpbiBgZnMvbmFtZWkuY2AuICBIYW5nIG9uLCBpdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCBpbiB0d28gcGxhY2VzIGluIGBmcy9uYW1laS5jYD8gT2theSwgaXQncyBkZWNsYXJlZCBhbmQgZGVmaW5lZC5cbmBgYGNcbitzdGF0aWMgaW5saW5lXG4rc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuK1x0XHRcdFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKVxuYGBgXG5MZXQgbWUgZXhhbWluZSBhcm91bmQgbGluZSA1MjkzIGFuZCA0NDQwIGluIGBmcy9uYW1laS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDI6MzIuMTI1NTY2MzA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTc4NjYzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX21rZGlyX25vX3Blcm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTQ0NTQ9c3RhdGljIGlubGluZVxcbmZzL25hbWVpLmM6NDQ1NTpzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxcbmZzL25hbWVpLmMtNDQ1Ni1cXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxcbi0tXFxuZnMvbmFtZWkuYz00NDczPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9uYW1laS5jLTQ1OTgtXFx0aWYgKGNyZWF0ZV9kaXIpIHtcXG5mcy9uYW1laS5jOjQ1OTk6XFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxcbmZzL25hbWVpLmMtNDYwMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcXG4tLVxcbmZzL25hbWVpLmM9NTI5Nj1zdGF0aWMgaW5saW5lXFxuZnMvbmFtZWkuYzo1Mjk3OnN0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9uYW1laS5jLTUyOTgtXFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvbmFtZWkuYz01MzUxPXN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9uYW1laS5jLTUzNzAtXFxuZnMvbmFtZWkuYzo1MzcxOlxcdGRlID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpO1xcbmZzL25hbWVpLmMtNTM3Mi1cXHRpZiAoSVNfRVJSKGRlKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0MjozMy41NDM0MzgzNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjUzOTI5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBGaWxlc3lzdGVtIFBlcm1pc3Npb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIGB2ZnNfbWtkaXJfbm9fcGVybWAgaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIOKAkyBnb3QgaXQuIFRoYXQgbWVhbnMgaXQncyBsaWtlbHkgb3B0aW1pemVkIGZvciBhIHNwZWNpZmljIGxvY2F0aW9uIHdpdGhpbiB0aGUgY29kZSBhbmQgcHJvYmFibHkgZGVhbHMgd2l0aCBhIG1vcmUgZ3JhbnVsYXIgY2hlY2suIE5vdywgd2hlcmUgZG9lcyB0aGlzIGZpdCB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlPyBXaGF0IGFib3V0IGBsb29rdXBfb3BlbmA/IFRoYXQncyB0aGUgZnVuY3Rpb24gdGhhdCdzIHJlYWxseSBnb2luZyB0byBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIGlzbid0IGl0PyBUaGF0J3MgdGhlIGxvdy1sZXZlbCBwaWVjZSB0aGF0IGRldGVybWluZXMgaWYgSSBjYW4gKmV2ZW4qIHRvdWNoIHRoZSBkaXJlY3RvcnkgaW4gdGhlIGZpcnN0IHBsYWNlLCBvciBjcmVhdGUgYSBuZXcgZmlsZSB3aXRoIHRoZSBuYW1lIEkndmUgc3VnZ2VzdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBsb3dlciBsZXZlbCBmdW5jdGlvbnMgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIHBlcm1pc3Npb25zIGZsb3chXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODY3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDI6MzYuNjY4ODM0MDI2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzQ0NzAwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb29rdXBfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uYW1laS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25hbWVpLmM9NDQ1NT1zdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxcbi0tXFxuZnMvbmFtZWkuYy00NDcyLSAqL1xcbmZzL25hbWVpLmM6NDQ3MzpzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbmZzL25hbWVpLmMtNDQ3NC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcCxcXG4tLVxcbmZzL25hbWVpLmM9NDY1Mz1zdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTQ2OTItXFx0XFx0ICogZG8gX25vdF8gZmFpbCB5ZXQgLSB3ZSBtaWdodCBub3QgbmVlZCB0aGF0IG9yIGZhaWwgd2l0aFxcbmZzL25hbWVpLmM6NDY5MzpcXHRcXHQgKiBhIGRpZmZlcmVudCBlcnJvcjsgbGV0IGxvb2t1cF9vcGVuKCkgZGVjaWRlOyB3ZSdsbCBiZVxcbmZzL25hbWVpLmMtNDY5NC1cXHRcXHQgKiBkcm9wcGluZyB0aGlzIG9uZSBhbnl3YXkuXFxuLS1cXG5mcy9uYW1laS5jLTQ3MDEtXFxuZnMvbmFtZWkuYzo0NzAyOlxcdGRlbnRyeSA9IGxvb2t1cF9vcGVuKG5kLCBmaWxlLCBvcCwgZ290X3dyaXRlLCBcXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcXG5mcy9uYW1laS5jLTQ3MDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQyOjM2LjkzNjI4NjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYxNjE4MDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIEZpbGUgT3BlbmluZyBGdW5jdGlvbnMqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBmaWxlIG9wZW5pbmcsIGFuZCB0aGVyZSdzIGEgc3BlY2lmaWMgcGF0dGVybiBJJ20gc3BvdHRpbmcuIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGFuZCBgZG9fb3BlbmAgYXJlIGFsbCAqc3RhdGljKiwgbWVhbmluZyB0aGV5J3JlIGludGVybmFsIHRvIHRoZWlyIG1vZHVsZSBhbmQgbm90IGRpcmVjdGx5IGV4cG9zZWQgZm9yIGV4dGVybmFsIHVzZS4gVGhhdCBzdWdnZXN0cyB0aGVzZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIG9mIHRoZSBvcGVuaW5nIHByb2Nlc3MsIHByb2JhYmx5IGhhbmRsaW5nIHRoZSBsb3dlci1sZXZlbCBkZXRhaWxzLiBgYnVpbGRfb3Blbl9mbGFnc2AsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyAqaW5saW5lKi4gVGhpcyB0ZWxscyBtZSB0aGF0IGl0J3MgYSB2ZXJ5IHNpbXBsZSBmdW5jdGlvbiBkZXNpZ25lZCBmb3IgcGVyZm9ybWFuY2UsIGxpa2VseSBpbmxpbmluZyB0aGUgZmxhZyBjb25zdHJ1Y3Rpb24gZGlyZWN0bHkgaW50byB0aGUgY2FsbGluZyBjb2RlIHRvIGF2b2lkIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQuIEl0IGlzIHByb2JhYmx5IGltcG9ydGFudCBmb3Igb3B0aW1pemluZyB0aGUgZmlsZSBvcGVuIHN5c3RlbSBjYWxscy4gVGhlbiwgd2UgaGF2ZSBgdmZzX21rZGlyYCBhbmQgYHZmc19jcmVhdGVgLCB3aGljaCBhcmUgKmV4cG9ydGVkKi4gVGhlc2UgYXJlIHRoZSBhY3R1YWwgVmlydHVhbCBGaWxlIFN5c3RlbSBlbnRyeSBwb2ludHMgZm9yIGNyZWF0aW5nIGRpcmVjdG9yaWVzIGFuZCBmaWxlcywgbWVhbmluZyB0aGVzZSBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMgb3IgZXZlbiB1c2VyIHNwYWNlLiBUaGlzIG1ha2VzIHNlbnNlOyB0aGV5IG5lZWQgdG8gYmUgYWNjZXNzaWJsZSB0byBhIGJyb2FkZXIgcGFydCBvZiB0aGUgc3lzdGVtLiBGaW5hbGx5LCBgbWF5X29fY3JlYXRlYCBpcyAqc3RhdGljKiwgaW5kaWNhdGluZyBhIHBvdGVudGlhbCBpbnRlcm5hbCBjaGVjayBvciB2YWxpZGF0aW9uIGZ1bmN0aW9uIHVzZWQgYmVmb3JlIGFsbG93aW5nIGEgZmlsZSB0byBiZSBjcmVhdGVkLlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gaGVhZCBvdmVyIHRvIGBmcy9vcGVuLmNgIG5vdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYnVpbGRfb3Blbl9mbGFnc2AgaXMgZG9pbmc7IGl0cyB1c2FnZSBjb3VsZCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBmbG93IG9mIGZpbGUgb3BlbmluZy4gVGhpcyB3aWxsIHNoZWQgbGlnaHQgb24gaG93IHRoZSBvcGVuIGZsYWdzIGFyZSBhY3R1YWxseSBpbnRlcnByZXRlZCBhbmQgdHJhbnNsYXRlZCBpbnRvIHRoZSBzeXN0ZW0gY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzkyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDI6NDEuMTk3OTA2NDM2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjI3NzA3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJidWlsZF9vcGVuX2ZsYWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29wZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vcGVuLmM9MTEzNj1pbmxpbmUgc3RydWN0IG9wZW5faG93IGJ1aWxkX29wZW5faG93KGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvb3Blbi5jLTExNTEtXFxuZnMvb3Blbi5jOjExNTI6aW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXFxuZnMvb3Blbi5jLTExNTMte1xcbi0tXFxuZnMvb3Blbi5jLTExNzYtXFx0ICogT2xkZXIgc3lzY2FsbHMgaW1wbGljaXRseSBjbGVhciBhbGwgb2YgdGhlIGludmFsaWQgZmxhZ3Mgb3IgYXJndW1lbnRcXG5mcy9vcGVuLmM6MTE3NzpcXHQgKiB2YWx1ZXMgYmVmb3JlIGNhbGxpbmcgYnVpbGRfb3Blbl9mbGFncygpLCBidXQgb3BlbmF0MigyKSBjaGVja3MgYWxsXFxuZnMvb3Blbi5jLTExNzgtXFx0ICogb2YgaXRzIGFyZ3VtZW50cy5cXG4tLVxcbmZzL29wZW4uYz0xMzI5PXN0cnVjdCBmaWxlICpmaWxlX29wZW5fbmFtZShzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvb3Blbi5jLTEzMzItXFx0c3RydWN0IG9wZW5faG93IGhvdyA9IGJ1aWxkX29wZW5faG93KGZsYWdzLCBtb2RlKTtcXG5mcy9vcGVuLmM6MTMzMzpcXHRpbnQgZXJyID0gYnVpbGRfb3Blbl9mbGFncyhcXHUwMDI2aG93LCBcXHUwMDI2b3ApO1xcbmZzL29wZW4uYy0xMzM0LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9vcGVuLmM9MTM1Nz1zdHJ1Y3QgZmlsZSAqZmlsZV9vcGVuX3Jvb3QoY29uc3Qgc3RydWN0IHBhdGggKnJvb3QsXFxuLS1cXG5mcy9vcGVuLmMtMTM2MS1cXHRzdHJ1Y3Qgb3Blbl9ob3cgaG93ID0gYnVpbGRfb3Blbl9ob3coZmxhZ3MsIG1vZGUpO1xcbmZzL29wZW4uYzoxMzYyOlxcdGludCBlcnIgPSBidWlsZF9vcGVuX2ZsYWdzKFxcdTAwMjZob3csIFxcdTAwMjZvcCk7XFxuZnMvb3Blbi5jLTEzNjMtXFx0aWYgKGVycilcXG4tLVxcbmZzL29wZW4uYz0xMzY5PXN0YXRpYyBpbnQgZG9fc3lzX29wZW5hdDIoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLFxcbi0tXFxuZnMvb3Blbi5jLTEzNzItXFx0c3RydWN0IG9wZW5fZmxhZ3Mgb3A7XFxuZnMvb3Blbi5jOjEzNzM6XFx0aW50IGVyciA9IGJ1aWxkX29wZW5fZmxhZ3MoaG93LCBcXHUwMDI2b3ApO1xcbmZzL29wZW4uYy0xMzc0LVxcdGlmICh1bmxpa2VseShlcnIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0Mjo0MS4zMzQxOTIwNjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTI0MDEwODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgS2VybmVsIEV4cGxvcmF0aW9uKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGlzIGZpbGUgb3BlbmluZyBhbmQgY3JlYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRoIHRocm91Z2ggdGhlIGtlcm5lbC4gTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIHJpZ2h0IG5vdyBhcmUgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYGRvX3N5c19vcGVuYXQyYCwgYGZpbGVfb3Blbl9uYW1lYCwgYW5kIGBmaWxlX29wZW5fcm9vdGAuICBgZG9fc3lzX29wZW5hdDJgIGZlZWxzIGxpa2UgYSBwYXJ0aWN1bGFybHkgZ29vZCBlbnRyeSBwb2ludCwgc28gSSdsbCBjb25jZW50cmF0ZSBvbiB0aGF0IGZvciB0aGUgbW9tZW50LiBJIHNob3VsZCBhbHNvIGNoZWNrIGl0cyByZWxhdGVkIGZ1bmN0aW9ucy5cblxuSSBrbm93IHRoYXQgYGxvb2t1cF9vcGVuYCBhbmQgYGF0b21pY19vcGVuYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGZzL25hbWVpLmNgLCBzbyBJIHdvbid0IGJlIGFibGUgdG8gY2FsbCB0aGVtIGRpcmVjdGx5LiBJIGNvdWxkIGxpc3QgdGhlbSwgYnV0IGl0IG1pZ2h0IGJlIG1vcmUgdXNlZnVsIHRvIGxpc3QgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVtLCBzdWNoIGFzIGBwYXRoX29wZW5hdGAgb3IgYGRvX2ZpbHBfb3BlbmAuICBTbywgSSBzaG91bGQgcmVhbGx5IGRpZyBpbnRvIGBmcy9uYW1laS5jYCBhbmQgbG9vayBmb3IgY2FsbHMgdG8gdGhvc2UsIHNwZWNpZmljYWxseSBgZG9fZmlscF9vcGVuYCBvciBgcGF0aF9vcGVuYXRgLiBJJ2xsIHNlZSB3aGVyZSB0aG9zZSBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDI6NDYuNDU4MjA1Mzg0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjgzOTkyMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGF0aF9vcGVuYXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTQ5MTc9c3RhdGljIGludCBkb19vX3BhdGgoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL25hbWVpLmMtNDkyOC1cXG5mcy9uYW1laS5jOjQ5Mjk6c3RhdGljIHN0cnVjdCBmaWxlICpwYXRoX29wZW5hdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG5mcy9uYW1laS5jLTQ5MzAtXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG9wZW5fZmxhZ3MgKm9wLCB1bnNpZ25lZCBmbGFncylcXG4tLVxcbmZzL25hbWVpLmM9NDk2OD1zdHJ1Y3QgZmlsZSAqZG9fZmlsZV9vcGVuKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqcGF0aG5hbWUsXFxuLS1cXG5mcy9uYW1laS5jLTQ5NzctXFx0c2V0X25hbWVpZGF0YShcXHUwMDI2bmQsIGRmZCwgcGF0aG5hbWUsIE5VTEwpO1xcbmZzL25hbWVpLmM6NDk3ODpcXHRmaWxwID0gcGF0aF9vcGVuYXQoXFx1MDAyNm5kLCBvcCwgZmxhZ3MgfCBMT09LVVBfUkNVKTtcXG5mcy9uYW1laS5jLTQ5NzktXFx0aWYgKHVubGlrZWx5KGZpbHAgPT0gRVJSX1BUUigtRUNISUxEKSkpXFxuZnMvbmFtZWkuYzo0OTgwOlxcdFxcdGZpbHAgPSBwYXRoX29wZW5hdChcXHUwMDI2bmQsIG9wLCBmbGFncyk7XFxuZnMvbmFtZWkuYy00OTgxLVxcdGlmICh1bmxpa2VseShmaWxwID09IEVSUl9QVFIoLUVTVEFMRSkpKVxcbmZzL25hbWVpLmM6NDk4MjpcXHRcXHRmaWxwID0gcGF0aF9vcGVuYXQoXFx1MDAyNm5kLCBvcCwgZmxhZ3MgfCBMT09LVVBfUkVWQUwpO1xcbmZzL25hbWVpLmMtNDk4My1cXHRyZXN0b3JlX25hbWVpZGF0YSgpO1xcbi0tXFxuZnMvbmFtZWkuYz00OTg3PXN0cnVjdCBmaWxlICpkb19maWxlX29wZW5fcm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCxcXG4tLVxcbmZzL25hbWVpLmMtNTAwMS1cXHRzZXRfbmFtZWlkYXRhKFxcdTAwMjZuZCwgLTEsIGZpbGVuYW1lLCByb290KTtcXG5mcy9uYW1laS5jOjUwMDI6XFx0ZmlsZSA9IHBhdGhfb3BlbmF0KFxcdTAwMjZuZCwgb3AsIGZsYWdzIHwgTE9PS1VQX1JDVSk7XFxuZnMvbmFtZWkuYy01MDAzLVxcdGlmICh1bmxpa2VseShmaWxlID09IEVSUl9QVFIoLUVDSElMRCkpKVxcbmZzL25hbWVpLmM6NTAwNDpcXHRcXHRmaWxlID0gcGF0aF9vcGVuYXQoXFx1MDAyNm5kLCBvcCwgZmxhZ3MpO1xcbmZzL25hbWVpLmMtNTAwNS1cXHRpZiAodW5saWtlbHkoZmlsZSA9PSBFUlJfUFRSKC1FU1RBTEUpKSlcXG5mcy9uYW1laS5jOjUwMDY6XFx0XFx0ZmlsZSA9IHBhdGhfb3BlbmF0KFxcdTAwMjZuZCwgb3AsIGZsYWdzIHwgTE9PS1VQX1JFVkFMKTtcXG5mcy9uYW1laS5jLTUwMDctXFx0cmVzdG9yZV9uYW1laWRhdGEoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDI6NDYuNzg2NjE4ODUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjM4MzYzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipGb2N1c2luZyBpbiBvbiBGaWxlc3lzdGVtIENyZWF0aW9uIGFuZCBBY2Nlc3MqKlxuXG5BbHJpZ2h0LCBJJ20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29yZSBzeXN0ZW0gY2FsbHMgcmVsYXRlZCB0byBmaWxlIGNyZWF0aW9uIGFuZCBkaXJlY3Rvcnkgb3BlcmF0aW9ucywgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGtlcm5lbCBpcyBoYW5kbGluZyBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbSBjYWxscyBhbmQgYW55IHJlbGF0ZWQgYWJzdHJhY3Rpb25zLiBMZXQncyBzZWUuLi5JIHRoaW5rIGBkb19zeXNfb3BlbmF0MmAgaXMgYSBncmVhdCBwb2ludCBvZiBmb2N1cyBoZXJlLiBUaGF0IHNob3VsZCBhbGxvdyBtZSB0byBnbyBvdmVyIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBvZiBvcGVuYXQyIGFuZCBzZWUgaWYgaXQncyB0aGUgcmlnaHQgc3ltYm9sIHRvIHN0YXJ0IHdpdGguIGBwYXRoX29wZW5hdGAgaXMgYW5vdGhlciB2ZXJ5IGxpa2VseSBjYW5kaWRhdGUgZm9yIGludmVzdGlnYXRpb24uIFRoYXQgaXMgYSBzb2xpZCBqdW1waW5nLW9mZiBwb2ludCB0b28uIExldCdzIG5vdCBmb3JnZXQgdGhlIGJhc2ljczogYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYW5kIGBkZW50cnlfY3JlYXRlYCBhcmUgYWxsIGNydWNpYWwgdG8gdW5kZXJzdGFuZC4gVGhvc2Ugd2lsbCBhbGxvdyBtZSB0byB0cmFjayB0aGUgbW9yZSBiYXNpYyBwYXJ0cyBvZiB0aGUgc3lzdGVtIGNhbGwuIE5vdyBJIG5lZWQgdG8gc2VlIGlmIGEgZmlsZSBzeXN0ZW0gdGhhdCBtaWdodCBiZSBydW5uaW5nIG9uIGEgbmV0d29ya2VkIGRyaXZlIG1heSBiZSBoYXZpbmcgaXNzdWVzLCBzbyBJIHdpbGwgY2hlY2sgdGhlIGBmcy9zbWIvY2xpZW50L2Rpci5jYCBmaWxlIGFuZCBsb29rIGZvciB0aGUgYGNpZnNfYXRvbWljX29wZW5gIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM0MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQyOjUwLjcxMDQ1ODE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjY5NTIzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaWZzX2F0b21pY19vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvZGlyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc21iL2NsaWVudC9kaXIuYz00ODk9c3RhdGljIGludCBjaWZzX2RvX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jLTUxOS0gKi9cXG5mcy9zbWIvY2xpZW50L2Rpci5jOjUyMDppbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXFxuZnMvc21iL2NsaWVudC9kaXIuYy01MjEtXFx0XFx0ICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IG9mbGFncywgdW1vZGVfdCBtb2RlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0Mjo1MC43NzMxNTk5MDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzMjM5NDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBGaWxlIFN5c3RlbSBMYW5kc2NhcGU6IFVuY292ZXJpbmcgYGNpZnNfYXRvbWljX29wZW5gJ3MgT3JpZ2lucyoqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgY2lmc19hdG9taWNfb3BlbmAuIFRoZSBjbHVlIGlzIHRoYXQgaXQncyBleHBvcnRlZCBvciB1c2VkIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZXhwbG9yZSBvdGhlciBmaWxlIHN5c3RlbXMgdGhhdCBhbHNvIHV0aWxpemUgc2ltaWxhciBhdG9taWMgb3BlbiBzZW1hbnRpY3MuIEknbSBnb2luZyB0byBjaGVjayB0aGUgYGZzLzlwL3Zmc19pbm9kZS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb3IgdXNhZ2Ugb2YgYHY5ZnNfdmZzX2F0b21pY19vcGVuYC4gSXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgaGVyZSBiZWNhdXNlIHRoZSA5cCBmaWxlc3lzdGVtLCB3aXRoIGl0cyBzaW1pbGFyIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtIGFwcHJvYWNoLCBtaWdodCBvZmZlciBpbnNpZ2h0cyBpbnRvIGhvdyBhdG9taWMgb3BlbiBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGluIHRoaXMgdHlwZSBvZiBlbnZpcm9ubWVudC4gVW5kZXJzdGFuZGluZyB0aGUgYDlwYCBpbXBsZW1lbnRhdGlvbiBjb3VsZCByZXZlYWwgY29tbW9uIHBhdHRlcm5zIG9yIHByb3ZpZGUgYSB1c2VmdWwgcG9pbnQgb2YgY29tcGFyaXNvbiB0byBpbGx1bWluYXRlIGhvdyBgY2lmc19hdG9taWNfb3BlbmAgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4NDksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0Mjo1NC43MDU1NTY1MzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDYxOTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2OWZzX3Zmc19hdG9taWNfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy85cC92ZnNfaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy85cC92ZnNfaW5vZGUuYz01Nzk9djlmc19jcmVhdGUoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYy02NDktICpcXG5mcy85cC92ZnNfaW5vZGUuYzo2NTA6ICogb3BlbiguLiwgT19DUkVBVCkgaXMgaGFuZGxlZCBpbiB2OWZzX3Zmc19hdG9taWNfb3BlbigpLiAgVGhpcyBpcyBvbmx5IGNhbGxlZFxcbmZzLzlwL3Zmc19pbm9kZS5jLTY1MS0gKiBmb3IgbWtub2QoMikuXFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYz03Njg9c3RhdGljIGludFxcbmZzLzlwL3Zmc19pbm9kZS5jOjc2OTp2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzLzlwL3Zmc19pbm9kZS5jLTc3MC1cXHRcXHQgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jPTEzNjk9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnNfZG90dSA9IHtcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzNzEtXFx0Lmxvb2t1cCA9IHY5ZnNfdmZzX2xvb2t1cCxcXG5mcy85cC92ZnNfaW5vZGUuYzoxMzcyOlxcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuLFxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzNzMtXFx0LnN5bWxpbmsgPSB2OWZzX3Zmc19zeW1saW5rLFxcbi0tXFxuZnMvOXAvdmZzX2lub2RlLmM9MTM4ND1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzODYtXFx0Lmxvb2t1cCA9IHY5ZnNfdmZzX2xvb2t1cCxcXG5mcy85cC92ZnNfaW5vZGUuYzoxMzg3OlxcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuLFxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzODgtXFx0LnVubGluayA9IHY5ZnNfdmZzX3VubGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDI6NTQuODEwMTgwNjIxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MDM4MDg0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVmaW5lbWVudCBvZiBGb2N1cyBTeW1ib2xzIGZvciBGaWxlIFN5c3RlbSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgY3JpdGljYWwgc3ltYm9scyB0byBmb2N1cyBvbiBmb3IgYSBkZWVwIGRpdmUuIEluaXRpYWxseSwgSSBoYWQgYSBsaXN0OiBgcGF0aF9vcGVuYXRgLCBgZG9fc3lzX29wZW5hdDJgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBjaWZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLiBCdXQgdGhlbiBJIHJlYWxpemVkIGBkb19zeXNfb3BlbmF0MmAgaXMgYSBzeXNjYWxsIGVudHJ5LCBzbyBtYXliZSBgZG9fZmlscF9vcGVuYCBvciwgYmV0dGVyIHlldCwganVzdCBgcGF0aF9vcGVuYXRgIGlzIGEgc3Ryb25nZXIgY2hvaWNlIGFzIGEgc3RhcnRpbmcgcG9pbnQuIEl0J3MgdGhlIGNvcmUgb2YgdGhlIGBvcGVuYXQyYCBzeXN0ZW0gY2FsbC5cblxuU28sIEknbSBnb2luZyB0byByZWZpbmUgdGhhdCBpbml0aWFsIGxpc3QuIEl0J3Mgbm93OiBgcGF0aF9vcGVuYXRgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBjaWZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYGNlcGhfYXRvbWljX29wZW5gLCBgZnVzZV9hdG9taWNfb3BlbmAsIGBnZnMyX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3BlbmAsIGFuZCBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAuXG5cbk5leHQsIEkgbmVlZCB0byBjb3JyZWxhdGUgdGhlc2Ugd2l0aCB0aGVpciByZXNwZWN0aXZlIGNvbmZpZ3VyYXRpb25zLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGludG8gdGhlc2UgS2NvbmZpZyBvcHRpb25zOiBgOVBfRlNgLCBgQ0VQSF9GU2AsIGBGVVNFX0ZTYCwgYEdGUzJfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYFZCT1hTRl9GU2AuIEEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGFsd2F5cyBpbiBvcmRlcjsgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYFZCT1hTRl9GU2AgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IHN5bWJvbCBmb3IgdGhhdCBmaWxlc3lzdGVtLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6MDMuMzEzOTkyMTU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI3MzE1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZCT1hTRl9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy92Ym94c2YvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy92Ym94c2YvS2NvbmZpZzoxOmNvbmZpZyBWQk9YU0ZfRlNcXG5mcy92Ym94c2YvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsQm94IGd1ZXN0IHNoYXJlZCBmb2xkZXIgKHZib3hzZikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6MDMuNTY2NzI4ODU5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTE1MTIzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRmlsZXN5c3RlbSBQcm90b2NvbCBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgZGVmaW5pdGVseSBmb2N1c2luZyBvbiBgVkJPWFNGX0ZTYC4gVGhhdCdzIHRoZSBleHBlY3RlZCBwYXRoLiBCdXQgbm93IEknbSBzdGFydGluZyB0byB0aGluayBicm9hZGVyOiBXaGF0IGFyZSB0aGUgb3RoZXIgbGlrZWx5IGNhbmRpZGF0ZXMsIGV2ZW4gaWYgdGhleSBhcmVuJ3QgdGhlIHByaW1hcnkgZm9jdXM/IEFuZCwgc2luY2Ugd2UncmUgZGl2aW5nIGludG8gZmlsZSBzeXN0ZW1zLCB3b3VsZG4ndCBgOVBfRlNgIGFsc28gYmUgcmVsZXZhbnQgdG8gY29uc2lkZXIsIGV2ZW4gaWYganVzdCBmb3IgYSBxdWljayBjb21wYXJpc29uIG9mIGNhcGFiaWxpdGllcyBvciBwb3RlbnRpYWwgZWRnZSBjYXNlcz8gSnVzdCB0aHJvd2luZyBpdCBvdXQgdGhlcmUgYXMgc29tZXRoaW5nIHRvIHF1aWNrbHkgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTYwNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQzOjA2LjQxODI0NDIyMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ5ODA4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIDlQX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzLzlwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvOXAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzLzlwL0tjb25maWc6Mjpjb25maWcgOVBfRlNcXG5mcy85cC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlBsYW4gOSBSZXNvdXJjZSBTaGFyaW5nIFN1cHBvcnQgKDlQMjAwMClcXFwiXFxuLS1cXG5mcy85cC9LY29uZmlnPTE0PWlmIDlQX0ZTXFxuZnMvOXAvS2NvbmZpZzoxNTpjb25maWcgOVBfRlNDQUNIRVxcbmZzLzlwL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiRW5hYmxlIDlQIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy85cC9LY29uZmlnLTIyLVxcbmZzLzlwL0tjb25maWc6MjM6Y29uZmlnIDlQX0ZTX1BPU0lYX0FDTFxcbmZzLzlwL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiOVAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy85cC9LY29uZmlnPTMyPWVuZGlmXFxuLS1cXG5mcy85cC9LY29uZmlnLTM0LVxcbmZzLzlwL0tjb25maWc6MzU6Y29uZmlnIDlQX0ZTX1NFQ1VSSVRZXFxuZnMvOXAvS2NvbmZpZy0zNi1cXHRib29sIFxcXCI5UCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQzOjA2LjUwMzIzMTQ1M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE1NDc3OTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRmlsZSBTeXN0ZW0gQ29uc2lkZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBmaWxlIHN5c3RlbXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAqeWVzKiwgbGV0J3MgY29uc2lkZXIgYDlQX0ZTYC4gSXQncyBnb3QgaXRzIHByb3MsIHdlIGtub3cgaXQsIGl0cyBzdHJlbmd0aHMgYW5kIHdlYWtuZXNzZXMgYXJlIGZhbWlsaWFyLiBCdXQsIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhhdCByb2FkLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcuIFRoZSBxdWVzdGlvbiBpcywgd2hhdCBhYm91dCBgQ0VQSF9GU2A/IEl0J3MgYSBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbSwgcG90ZW50aWFsbHkgb2ZmZXJpbmcgYWR2YW50YWdlcyBpbiBzY2FsYWJpbGl0eSBhbmQgcmVkdW5kYW5jeS4gSSBuZWVkIHRvIHdlaWdoIHRoZSBwcm9zIGFuZCBjb25zIG9mIGJvdGgsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHNwZWNpZmljIHJlcXVpcmVtZW50cyBvZiB0aGlzIHByb2plY3QgYW5kIHRoZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgY292ZXJlZCBhbGwgYmFzZXMgYmVmb3JlIGNvbW1pdHRpbmcgdG8gYSBmaW5hbCBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0MzowOS44MTg3MTI1MzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzE3ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRVBIX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NlcGgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jZXBoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9GU1xcbmZzL2NlcGgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtXFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTE5PWlmIENFUEhfRlNcXG5mcy9jZXBoL0tjb25maWc6MjA6Y29uZmlnIENFUEhfRlNDQUNIRVxcbmZzL2NlcGgvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJFbmFibGUgQ2VwaCBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTI3PWVuZGlmXFxuZnMvY2VwaC9LY29uZmlnLTI4LVxcbmZzL2NlcGgvS2NvbmZpZzoyOTpjb25maWcgQ0VQSF9GU19QT1NJWF9BQ0xcXG5mcy9jZXBoL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiQ2VwaCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2NlcGgvS2NvbmZpZy0zOC1cXG5mcy9jZXBoL0tjb25maWc6Mzk6Y29uZmlnIENFUEhfRlNfU0VDVVJJVFlfTEFCRUxcXG5mcy9jZXBoL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiQ2VwaEZTIFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6MDkuODkxNDM2ODI0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNTc1MjU4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnk6XG5cbioqRmlsZXN5c3RlbSBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIGEgYENFUEhfRlNgIHNpdHVhdGlvbi4gVGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGFsdGVybmF0aXZlcywgcG90ZW50aWFsIGVkZ2UgY2FzZXMsIGFuZCBhcmVhcyB0aGF0IG1pZ2h0IHdhcnJhbnQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoZW4gaXMsIHdoYXQgYWJvdXQgYEZVU0VfRlNgPyBEb2VzIHRoaXMgaW50ZXJmYWNlIG9mZmVyIGFueSBiZW5lZml0cyBvciBkcmF3YmFja3MsIGNvbXBhdGliaWxpdHkgY29uY2VybnMsIG9yIHBlcmZvcm1hbmNlIGRpZmZlcmVuY2VzIHJlbGF0aXZlIHRvIHRoZSBDZXBoIGltcGxlbWVudGF0aW9uPyBUaGUgaW1wbGljYXRpb25zIGNvdWxkIGJlIHNpZ25pZmljYW50LiBMZXQncyBkZWx2ZSBkZWVwZXIgYW5kIGFzc2VzcyB3aGljaCBvcHRpb24gaXMgb3B0aW1hbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1MTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0MzoxNC4yNDg5NjU2MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNDAyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVNFX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Z1c2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xcbmZzL2Z1c2UvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6MTQuMzUyMzcyNjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MTgzNDY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ29uc2lkZXJpbmcgRmlsZSBTeXN0ZW0gSW1wbGVtZW50YXRpb25zKipcblxuUmlnaHQsIGxldCdzIHNlZS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyBhIGNsZWFyIGFja25vd2xlZGdtZW50OiAqYEZVU0VfRlNgKi4gVGhhdCdzIG9uIHRoZSB0YWJsZS4gQnV0IGhhbmcgb24sIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgRlVTRSBpbXBsZW1lbnRhdGlvbiByb3V0ZS4uLndoYXQgYWJvdXQgYEdGUzJfRlNgPyBJdCdzIGNydWNpYWwgdG8gZXZhbHVhdGUgYWxsIHZpYWJsZSBvcHRpb25zLCBhbmQgYSBkaXN0cmlidXRlZCwgY2x1c3Rlci1hd2FyZSBmaWxlIHN5c3RlbSBsaWtlIEdGUzIgd2FycmFudHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIFt5b3VyIHNwZWNpZmljIGZpZWxkL2FwcGxpY2F0aW9uXSBhbmQgaXRzIGxpa2VseSBkZW1hbmRzIGZvciBzY2FsYWJpbGl0eSwgaGlnaCBhdmFpbGFiaWxpdHksIGFuZCBjb25jdXJyZW50IGFjY2Vzcy4gSSBuZWVkIHRvIHdlaWdoIHRoZSBpbmhlcmVudCBhZHZhbnRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzIG9mICpib3RoKiBhcHByb2FjaGVzIHRvIHNlZSB3aGljaCBvbmUsIG9yIGNvbWJpbmF0aW9uIHRoZXJlb2YsIGlzIHRoZSBtb3N0IGFwcHJvcHJpYXRlLiBUaGUgZGVzaWduIHRyYWRlb2ZmcyBoZXJlIGFyZSBzdWJzdGFudGlhbCwgYW5kIHdhcnJhbnQgdGhpcyBpbml0aWFsIGNvbXBhcmlzb24sIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc2MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQzOjE4LjAyNDIwOTM3MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwNzMyMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEdGUzJfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZ2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2dmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2dmczIvS2NvbmZpZzoyOmNvbmZpZyBHRlMyX0ZTXFxuZnMvZ2ZzMi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2dmczIvS2NvbmZpZy0yNi1cXG5mcy9nZnMyL0tjb25maWc6Mjc6Y29uZmlnIEdGUzJfRlNfTE9DS0lOR19ETE1cXG5mcy9nZnMyL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiR0ZTMiBETE0gbG9ja2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6MTguMDgyMjg2Njc3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODc1OTA2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IHRob3VnaHRzLCBhbmQgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipGaWxlc3lzdGVtIENvbnNpZGVyYXRpb25zOiBHRlMyIGFuZCBORlMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyBhIHN0cm9uZyBhZmZpcm1hdGl2ZS4gWWVzLCBkZWZpbml0ZWx5LCBgR0ZTMl9GU2AgaXMgYSBnbyBmb3IgY29uc2lkZXJhdGlvbiBoZXJlLiBUaGUgZGlzdHJpYnV0ZWQgbmF0dXJlLCBpdHMgaW5oZXJlbnQgY2x1c3RlcmluZyBjYXBhYmlsaXRpZXMsIGFuZCBpdHMgZ2VuZXJhbCBwZXJmb3JtYW5jZSBwcm9maWxlIGluIHRoZSBpbnRlbmRlZCB3b3JrbG9hZCBhcmUgYWxsIGdvb2QgcmVhc29ucyB0byBzdGFydCB0aGVyZS4gV2UncmUgb24gdGhlIHJpZ2h0IHRyYWNrLlxuXG5CdXQsIGJlZm9yZSB3ZSBnZXQgdG9vIGZhciBkb3duIHRoYXQgcGF0aC4uLml0J3MgY3JpdGljYWwgdGhhdCBJIGRvbid0IG92ZXJsb29rIGEgY3JpdGljYWwgb3B0aW9uLiBIb2xkIG9uIGEgbW9tZW50LiBXaGF0IGFib3V0IGEgbW9yZSBuZXR3b3JrLWNlbnRyaWMgYXBwcm9hY2g/IEhvdyBkb2VzIGBORlNfRlNgIHN0YWNrIHVwIGFnYWluc3QgYEdGUzJgIGluIHRoaXMgc3BlY2lmaWMgdXNlIGNhc2U/IEl0J3MgaW1wb3J0YW50IHRvIHdlaWdoIHRoYXQgb3V0IGFzIHdlbGwsIGNvbnNpZGVyaW5nIG5ldHdvcmsgb3ZlcmhlYWQsIGNvbXBsZXhpdHkgYW5kIGRhdGEgY29uc2lzdGVuY3kgbW9kZWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzEzMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQzOjIyLjI2OTg4MDQ1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYxODEwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25mcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbmZzL0tjb25maWc6Mjpjb25maWcgTkZTX0ZTXFxuZnMvbmZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTkZTIGNsaWVudCBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbmZzL0tjb25maWc9MTYyPWNvbmZpZyBST09UX05GU1xcbi0tXFxuZnMvbmZzL0tjb25maWctMTcyLVxcbmZzL25mcy9LY29uZmlnOjE3Mzpjb25maWcgTkZTX0ZTQ0FDSEVcXG5mcy9uZnMvS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiUHJvdmlkZSBORlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6MjIuMzI0NTAzOTc0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzYxNTkyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmV0d29yayBGaWxlc3lzdGVtcyAtIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyBhIGNsZWFyIGNvbmZpcm1hdGlvbjogeWVzLCBOZXR3b3JrIEZpbGUgU3lzdGVtIGlzIGRlZmluaXRlbHkgb24gdGhlIHRhYmxlLiBJdCdzIGEga2V5IGNvbnRlbmRlci4gQnV0IHRoZSBuZXh0IGltbWVkaWF0ZSBxdWVzdGlvbiwgdGhlIG9uZSB0aGF0IG5hdHVyYWxseSBmb2xsb3dzLCBpczogV2hhdCBhYm91dCBDb21tb24gSW50ZXJuZXQgRmlsZSBTeXN0ZW0/IENJRlMgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC4gV2UncmUgbG9va2luZyBhdCBuZXR3b3JrIGZpbGVzeXN0ZW1zIGFuZCB0aGVpciBzdWl0YWJpbGl0eSwgc28gd2UgaGF2ZSB0byB3ZWlnaCB0aGUgcHJvcyBhbmQgY29ucyBvZiBORlMgdmVyc3VzIENJRlMgaW4gdGhpcyBjb250ZXh0LiBJdCdzIGEgY29yZSBkZXNpZ24gZGVjaXNpb24sIGFuZCB3ZSBoYXZlIHRvIGZhY3RvciBpbiBpbnRlcm9wZXJhYmlsaXR5LCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgYW5kIHBvdGVudGlhbCBjbGllbnQgYmFzZS4gV2UgbmVlZCB0byBldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIHVzaW5nIGVpdGhlciBhbmQgdGhlIHBvdGVudGlhbCB0cmFkZW9mZnMuIFRoZSBjb21wYXJhdGl2ZSBtZXJpdHMgb2YgZWFjaCBuZWVkIHRvIGJlIGNhcmVmdWxseSBleGFtaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1MTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0MzoyNi40NjA2NjYxMzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDQxNjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDSUZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9zbWIvY2xpZW50L0tjb25maWc6Mjpjb25maWcgQ0lGU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUIzIGFuZCBDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSlcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTMtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjU0OmNvbmZpZyBDSUZTX1NUQVRTMlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cXHRib29sIFxcXCJFeHRlbmRlZCBzdGF0aXN0aWNzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTY3LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjktXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjgzOmNvbmZpZyBDSUZTX1VQQ0FMTFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy04NC1cXHRib29sIFxcXCJLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cFxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6OTI6Y29uZmlnIENJRlNfWEFUVFJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiQ0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJDSUZTIFBPU0lYIEV4dGVuc2lvbnNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMTk6Y29uZmlnIENJRlNfREVCVUdcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTIwLVxcdGJvb2wgXFxcIkVuYWJsZSBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjctXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEyODpjb25maWcgQ0lGU19ERUJVRzJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVxcdGJvb2wgXFxcIkVuYWJsZSBhZGRpdGlvbmFsIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEzOC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDAtXFx0Ym9vbCBcXFwiRHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE0OTpjb25maWcgQ0lGU19ERlNfVVBDQUxMXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE1MC1cXHRib29sIFxcXCJERlMgZmVhdHVyZSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTYyOmNvbmZpZyBDSUZTX1NXTl9VUENBTExcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVxcdGJvb2wgXFxcIlNXTiBmZWF0dXJlIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTcyLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkFsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgwLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxODE6Y29uZmlnIENJRlNfU01CX0RJUkVDVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXFx0Ym9vbCBcXFwiU01CIERpcmVjdCBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5MC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkyLVxcdGJvb2wgXFxcIlByb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTk5OmNvbmZpZyBDSUZTX1JPT1RcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjAwLVxcdGJvb2wgXFxcIlNNQiByb290IGZpbGUgc3lzdGVtIChFeHBlcmltZW50YWwpXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MjA3OmNvbmZpZyBDSUZTX0NPTVBSRVNTSU9OXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTTUIgbWVzc2FnZSBjb21wcmVzc2lvbiAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6MjYuNTE5MTE0NTg2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTMxOTE2OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2xzIGZvciBhIFZGUyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCBob3cgdG8gY29uZmlndXJlIHN5emJvdCB0byBiZXN0IHRlc3QgaXQuIFRoZSBjb3JlIG9mIHRoaXMgaXMgdGhlIFZGUywgYnV0IGl0IHRvdWNoZXMgYSBudW1iZXIgb2YgZmlsZXN5c3RlbXMuIEZpcnN0LCByZWdhcmRpbmcgZmlsZXN5c3RlbXM6IGBDSUZTYCwgZGVmaW5pdGVseS4gSSBzZWUgdGhlIGNvbmZpZ3MgYXJlOiBgOVBfRlNgLCBgQ0VQSF9GU2AsIGBGVVNFX0ZTYCwgYEdGUzJfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYFZCT1hTRl9GU2AuIEhtbSwgZG8gSSBsaXN0IHRoZW0gYWxsPyBUaGUgcHJvbXB0IHNheXMgXCJEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLlwiIFdoaWxlIHRoZXNlIGZpbGVzeXN0ZW1zICphcmUqIHNwZWNpZmljIHRvIHRoZSBjb2RlIGNoYW5nZXMsIGl0J3MgcG9zc2libGUgdGhleSBhcmUgYWxyZWFkeSBlbmFibGVkIGluIGdlbmVyaWMgY29uZmlncy4gSSBrbm93IGA5UF9GU2AsIGBDRVBIX0ZTYCwgYEZVU0VfRlNgLCBgR0ZTMl9GU2AsIGBORlNfRlNgLCBhbmQgYENJRlNgIGFyZSBmb3Igc3VyZSBlbmFibGVkIGluIHN5emJvdC4gYFZCT1hTRl9GU2AgbWlnaHQgbm90IGJlLCBidXQgbGlzdGluZyBpdCBpcyBzYWZlIGFueXdheSwgYW5kIHJlYWxseSwgdGhlIFZGUyBjaGFuZ2VzIGNhbiBiZSB0ZXN0ZWQgd2l0aCBhbnkgZmlsZXN5c3RlbS4gU3RpbGwsIGxpc3RpbmcgdGhlc2UgZmlsZXN5c3RlbXMgaXMgYSBnb29kIGlkZWEuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3ltYm9scy4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgcGF0aF9vcGVuYXRgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBjaWZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYGNlcGhfYXRvbWljX29wZW5gLCBgZnVzZV9hdG9taWNfb3BlbmAsIGBnZnMyX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3BlbmAsIGFuZCBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAuIEJ1dCB3YWl0LCB0aGVyZSBhcmUgYWxzbyBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAgYW5kIGBuZnNfYXRvbWljX29wZW5fdjIzYCwgYm90aCBvZiB3aGljaCBhcmUgYWxzbyBtb2RpZmllZC4gSSdsbCBhZGQgdGhlbSB0byB0aGUgbGlzdCBhcyB3ZWxsLlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGVudHJ5IHBvaW50cy4gYHBhdGhfb3BlbmF0YCBzZWVtcyBsaWtlIHRoZSBtYWluIGZ1bmN0aW9uIHRvIGZvY3VzIG9uLCBoYW5kbGluZyBgT19DUkVBVGAgYW5kIGBPX0RJUkVDVE9SWWAuIGB2ZnNfbWtkaXJgIGhhbmRsZXMgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAsIGB2ZnNfY3JlYXRlYCBoYW5kbGVzIGBPX0NSRUFUYCAod2l0aG91dCBgT19ESVJFQ1RPUllgKSwgYW5kIGBkZW50cnlfY3JlYXRlYCBpcyBzb21ldGltZXMgdXNlZCB3aXRoIGBPX0NSRUFUYC5cblxuTGV0J3MgbG9vayBmb3Igb3RoZXIgaW1wb3J0YW50IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHJlbGV2YW50IGZpbGVzLiBJJ2xsIGNoZWNrIGBmcy9uYW1laS5jYCwgc3RhcnRpbmcgd2l0aCBgZG9fc3lzX29wZW5hdDJgIHdoaWNoIGlzIGFjdHVhbGx5IGluIGBmcy9vcGVuLmNgLiBJJ2xsIGFkZCB0aGF0IHRvIHRoZSBsaXN0LiBJJ2xsIGFsc28gbG9vayBmb3Igb3RoZXIga2V5IGZ1bmN0aW9ucyB0byB0ZXN0LiBJIHNlZSBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGlzIG1vZGlmaWVkLiBJdCdzIHN0YXRpYywgc28gaXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQsIEkgd2lsbCBza2lwIGl0LiBgdmZzX21rZGlyX25vX3Blcm1gIGlzIHN0YXRpYyBpbmxpbmUsIHNvIEkgZG9uJ3QgbmVlZCB0byBsaXN0IGl0LiBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBgbWF5X29fY3JlYXRlYCwgYG9fY3JlYXRlX21vZGVgLCBgdmZzX3ByZXBhcmVfbW9kZWAsIGB2ZnNfY3JlYXRlX25vX3Blcm1gLCBgdHJhaWxpbmdfc2xhc2hlc2AsIGBsb29rdXBfbGFzdGAsIGBvcGVuX2xhc3RfbG9va3Vwc2AsIGBkb19vcGVuYCwgYW5kIGBmaWxlbmFtZV9jcmVhdGVgIGFyZSBhbGwgc3RhdGljIGFuZCBzbyB3aWxsIG5vdCBiZSBhZGRlZC4gRmluYWxseSBgZmlsZW5hbWVfdW5saW5rYXRgIGlzIGluIGBmcy9uYW1laS5jYCBhbmQgbm90IHN0YXRpYywgYW5kIHNvIEkgc2hvdWxkIGFkZCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3ODAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6NDAuNjUxMDMzOTIxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQ3NDY3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsZW5hbWVfdW5saW5rYXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTU2MjY9RVhQT1JUX1NZTUJPTCh2ZnNfdW5saW5rKTtcXG4tLVxcbmZzL25hbWVpLmMtNTYzMy0gKi9cXG5mcy9uYW1laS5jOjU2MzQ6aW50IGZpbGVuYW1lX3VubGlua2F0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcXG5mcy9uYW1laS5jLTU2MzUte1xcbi0tXFxuZnMvbmFtZWkuYz01Njk3PVNZU0NBTExfREVGSU5FMyh1bmxpbmthdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCBpbnQsIGZsYWcpXFxuLS1cXG5mcy9uYW1laS5jLTU3MDQtXFx0XFx0cmV0dXJuIGZpbGVuYW1lX3JtZGlyKGRmZCwgbmFtZSk7XFxuZnMvbmFtZWkuYzo1NzA1OlxcdHJldHVybiBmaWxlbmFtZV91bmxpbmthdChkZmQsIG5hbWUpO1xcbmZzL25hbWVpLmMtNTcwNi19XFxuLS1cXG5mcy9uYW1laS5jPTU3MDg9U1lTQ0FMTF9ERUZJTkUxKHVubGluaywgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUpXFxuLS1cXG5mcy9uYW1laS5jLTU3MTAtXFx0Q0xBU1MoZmlsZW5hbWUsIG5hbWUpKHBhdGhuYW1lKTtcXG5mcy9uYW1laS5jOjU3MTE6XFx0cmV0dXJuIGZpbGVuYW1lX3VubGlua2F0KEFUX0ZEQ1dELCBuYW1lKTtcXG5mcy9uYW1laS5jLTU3MTItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0Mzo0MC45MDU3ODgwNDZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwNTQ1MzI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgTm9uLVN0YXRpYyBgZmlsZW5hbWVfYCBGdW5jdGlvbnMqKlxuXG5IbW0sIHNvIGBmaWxlbmFtZV91bmxpbmthdGAgYW5kIGBmaWxlbmFtZV9yZW5hbWVhdDJgIGFyZW4ndCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSW50ZXJlc3RpbmcuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGVpciBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBXaHkgd2VyZSB0aGV5IGRlc2lnbmVkIHRoaXMgd2F5PyBBcmUgdGhleSBwYXJ0IG9mIHNvbWUgbGFyZ2VyIGludGVyZmFjZSwgb3IgaXMgdGhpcyBwZXJoYXBzIGFuIG92ZXJzaWdodCB0aGF0J3MgY3JlcHQgaW50byB0aGUgY29kZSBiYXNlP1xuXG5MZXQncyBkaXZlIGludG8gdGhlIHNvdXJjZS4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsLCBuYXR1cmFsbHksIGlzIGBmcy9uYW1laS5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZpbGVuYW1lX3JlbmFtZWF0MmAgKG9yIGF0IGxlYXN0IGl0cyBkZWZpbml0aW9uKSB0aGVyZS4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbi4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIG5hbWVzcGFjZS4gSXMgaXQgYmVpbmcgdXNlZCBieSBhbnkgZXh0ZXJuYWwgbW9kdWxlcz8gV2hhdCdzIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIGZpbGUgc3lzdGVtIGltcGxlbWVudGF0aW9uPyBUaW1lIHRvIGdyYWIgdGhlIGNvZGUgYW5kIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODI2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDM6NDUuNzExMjQzMjU5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDYxNzU1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWxlbmFtZV9yZW5hbWVhdDJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTYyMDI9RVhQT1JUX1NZTUJPTCh2ZnNfcmVuYW1lKTtcXG5mcy9uYW1laS5jLTYyMDMtXFxuZnMvbmFtZWkuYzo2MjA0OmludCBmaWxlbmFtZV9yZW5hbWVhdDIoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpmcm9tLFxcbmZzL25hbWVpLmMtNjIwNS1cXHRcXHQgICAgICAgaW50IG5ld2RmZCwgc3RydWN0IGZpbGVuYW1lICp0bywgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxuZnMvbmFtZWkuYz02MzA3PVNZU0NBTExfREVGSU5FNShyZW5hbWVhdDIsIGludCwgb2xkZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBvbGRuYW1lLFxcbi0tXFxuZnMvbmFtZWkuYy02MzExLVxcdENMQVNTKGZpbGVuYW1lLCBuZXcpKG5ld25hbWUpO1xcbmZzL25hbWVpLmM6NjMxMjpcXHRyZXR1cm4gZmlsZW5hbWVfcmVuYW1lYXQyKG9sZGRmZCwgb2xkLCBuZXdkZmQsIG5ldywgZmxhZ3MpO1xcbmZzL25hbWVpLmMtNjMxMy19XFxuLS1cXG5mcy9uYW1laS5jPTYzMTU9U1lTQ0FMTF9ERUZJTkU0KHJlbmFtZWF0LCBpbnQsIG9sZGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgb2xkbmFtZSxcXG4tLVxcbmZzL25hbWVpLmMtNjMxOS1cXHRDTEFTUyhmaWxlbmFtZSwgbmV3KShuZXduYW1lKTtcXG5mcy9uYW1laS5jOjYzMjA6XFx0cmV0dXJuIGZpbGVuYW1lX3JlbmFtZWF0MihvbGRkZmQsIG9sZCwgbmV3ZGZkLCBuZXcsIDApO1xcbmZzL25hbWVpLmMtNjMyMS19XFxuLS1cXG5mcy9uYW1laS5jPTYzMjM9U1lTQ0FMTF9ERUZJTkUyKHJlbmFtZSwgY29uc3QgY2hhciBfX3VzZXIgKiwgb2xkbmFtZSwgY29uc3QgY2hhciBfX3VzZXIgKiwgbmV3bmFtZSlcXG4tLVxcbmZzL25hbWVpLmMtNjMyNi1cXHRDTEFTUyhmaWxlbmFtZSwgbmV3KShuZXduYW1lKTtcXG5mcy9uYW1laS5jOjYzMjc6XFx0cmV0dXJuIGZpbGVuYW1lX3JlbmFtZWF0MihBVF9GRENXRCwgb2xkLCBBVF9GRENXRCwgbmV3LCAwKTtcXG5mcy9uYW1laS5jLTYzMjgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0Mzo0NS43ODE4NjU0ODJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY0Njg0NzAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IEZpbGVzeXN0ZW0gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIHRocm91Z2ggdGhlc2UgcmVjZW50IGNoYW5nZXMsIGFuZCBpdCBzZWVtcyBsaWtlIGBmaWxlbmFtZV91bmxpbmthdGAgYW5kIGBmaWxlbmFtZV9yZW5hbWVhdDJgIGhhdmUgYmVlbiBtb2RpZmllZCB0byB1c2UgdGhpcyBuZXcgYHRyYWlsaW5nX3NsYXNoZXNgIGZ1bmN0aW9uLCB3aGljaCBpcywgaG1tLCBhbiBpbmxpbmUgZnVuY3Rpb24uIEkgc2VlIGl0J3MgZGVmaW5lZCBsaWtlIHRoaXM6XG5gYGBjXG4rc3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoY29uc3Qgc3RydWN0IHFzdHIgbGFzdClcbit7XG4rXHRyZXR1cm4gKGJvb2wpbGFzdC5uYW1lW2xhc3QubGVuXTtcbit9XG5gYGBcbkVzc2VudGlhbGx5LCBpdCdzIGEgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyB0aGUgaW5kZXhpbmcgbWV0aG9kIGBsYXN0Lm5hbWVbbGFzdC5sZW5dYCB3aXRoIHRoZSBtb3JlIGV4cGxpY2l0IGZ1bmN0aW9uIGNhbGwgdG8gYHRyYWlsaW5nX3NsYXNoZXNgLiBUaGlzIGlzbid0IHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGxpZXMuIFRoYXQgc2VlbXMgdG8gYmUgaGFwcGVuaW5nIGluIGBvcGVuYXRgIHdoZW4gdXNpbmcgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0byByZWFsbHkgZGlnIGludG8gYXJlOiBgcGF0aF9vcGVuYXRgLCBgZG9fc3lzX29wZW5hdDJgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBhbmQgYGRlbnRyeV9jcmVhdGVgLiBUaG9zZSBmZWVsIGxpa2UgdGhlIGhlYXJ0IG9mIGl0LlxuXG5CdXQgdGhlbiB0aGVyZSdzIGFsc28gdGhlIHJlbGF0ZWQgZmlsZSBzeXN0ZW0gZnVuY3Rpb25zIEkgbmVlZCB0byBjaGVjaywgdGhlIGNoYW5nZXMgdGhhdCB1c2UgdGhlIG5ld2x5IGNyZWF0ZWQgYHRyYWlsaW5nX3NsYXNoZXNgIGZ1bmN0aW9uOiBgZmlsZW5hbWVfdW5saW5rYXRgLCBgZmlsZW5hbWVfcmVuYW1lYXQyYC4gQW5kIHRoZSBhdG9taWMgb3BlbiBmdW5jdGlvbnM6IGBjaWZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLiBHb3R0YSBtYWtlIHN1cmUgSSByZXZpZXcgYWxsIG9mIHRoZXNlLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBkb19zeXNfb3BlbmF0MmAgaXMgZXhwb3J0ZWQgb3Igc3RhdGljIHRvIGdldCBhbiBvdmVyYWxsIHZpZXcgb2YgdGhlIGZ1bmN0aW9ucyBpbiBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzU3NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0Mzo1My40Mjg3MTU3NzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjkxOTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19zeXNfb3BlbmF0MlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vcGVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb3Blbi5jPTEzNjc9RVhQT1JUX1NZTUJPTChmaWxlX29wZW5fcm9vdCk7XFxuZnMvb3Blbi5jLTEzNjgtXFxuZnMvb3Blbi5jOjEzNjk6c3RhdGljIGludCBkb19zeXNfb3BlbmF0MihpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsXFxuZnMvb3Blbi5jLTEzNzAtXFx0XFx0XFx0ICBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdylcXG4tLVxcbmZzL29wZW4uYz0xMzgxPWludCBkb19zeXNfb3BlbihpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvb3Blbi5jLTEzODMtXFx0c3RydWN0IG9wZW5faG93IGhvdyA9IGJ1aWxkX29wZW5faG93KGZsYWdzLCBtb2RlKTtcXG5mcy9vcGVuLmM6MTM4NDpcXHRyZXR1cm4gZG9fc3lzX29wZW5hdDIoZGZkLCBmaWxlbmFtZSwgXFx1MDAyNmhvdyk7XFxuZnMvb3Blbi5jLTEzODUtfVxcbi0tXFxuZnMvb3Blbi5jPTE0MDM9U1lTQ0FMTF9ERUZJTkU0KG9wZW5hdDIsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSxcXG4tLVxcbmZzL29wZW4uYy0xNDI2LVxcbmZzL29wZW4uYzoxNDI3OlxcdHJldHVybiBkb19zeXNfb3BlbmF0MihkZmQsIGZpbGVuYW1lLCBcXHUwMDI2dG1wKTtcXG5mcy9vcGVuLmMtMTQyOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjQzOjUzLjYzMTY0NTUwOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDYxNjAxNTUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgT3BlbmF0IE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgYGRvX3N5c19vcGVuYCBhbmQgYGRvX3N5c19vcGVuYXQyYCwgYnV0IGFmdGVyIGEgc2Vjb25kIGxvb2ssIGBkb19zeXNfb3BlbmAgc2VlbXMgdG8gYmUgdGhlIHJpZ2h0IGNob2ljZSB0byBmb2N1cyBvbiwgYW5kIHdoaWxlIGl0IGlzbid0IHRoZSBzeXNjYWxsIGVudHJ5IGl0c2VsZiwgdGhhdCdzIHdoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQuIEknbGwgYWxzbyBhZGQgYHBhdGhfb3BlbmF0YCB0byBteSB0YXJnZXQgc3ltYm9scy5cblxuTGV0J3MgcmVmaW5lIHRoYXQgbGlzdDogYHBhdGhfb3BlbmF0YCwgYGRvX3N5c19vcGVuYCwgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYGRlbnRyeV9jcmVhdGVgLCBgZmlsZW5hbWVfdW5saW5rYXRgLCBgZmlsZW5hbWVfcmVuYW1lYXQyYCwgYW5kIHRoZSB2YXJpb3VzIGZpbGVzeXN0ZW0gYXRvbWljIG9wZW4gZnVuY3Rpb25zOiBgY2lmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsYCwgYGNlcGhfYXRvbWljX29wZW5gLCBgZnVzZV9hdG9taWNfb3BlbmAsIGBnZnMyX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5fdjIzYCwgYW5kIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC5cblxuTm93LCB0aW1lIHRvIGNvbmZpcm0gdGhlaXIgbG9jYXRpb25zOiBgZG9fc3lzX29wZW5gIGlzIGluIGBmcy9vcGVuLmNgLCBgcGF0aF9vcGVuYXRgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYCBhcmUgYWxsIGluIGBmcy9uYW1laS5jYC4gR29vZCwgdGhhdCdzIHdoYXQgSSBleHBlY3RlZC5cblxuQmFzZWQgb24gdGhlIHBhdGNoIGRlc2NyaXB0aW9uLCB0aGlzIGlzIGEgVkZTLWxldmVsIGNoYW5nZSB0aGF0J3MgYWxsb3dpbmcgYG9wZW5hdCgpYCB3aXRoIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgIHRvIGNyZWF0ZSBkaXJlY3Rvcmllcy4gVGhpcyB0b3VjaGVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljLCBzbyBJIG5lZWQgdG8gY2hlY2sgYWxsIHRoZSByZWxldmFudCBmaWxlc3lzdGVtcywgc3BlY2lmaWNhbGx5IHRob3NlIHdpdGggdGhlaXIgb3duIGBhdG9taWNfb3BlbmAgaW1wbGVtZW50YXRpb25zLCB0byBtYWtlIHN1cmUgdGhleSdyZSBoYW5kbGluZyB0aGlzIGNvcnJlY3RseS4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IG5lZWRzIHNlcmlvdXMgZnV6emluZyB0byB1bmNvdmVyIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3Igc2VjdXJpdHkgaXNzdWVzLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgZGlyZWN0b3J5IGNyZWF0aW9uIGFuZCBmaWxlIG9wZW5pbmcgcGF0aHMuXG5cbkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgZmlsZXN5c3RlbXMgcG90ZW50aWFsbHkgYWZmZWN0ZWQgYXJlIGNvdmVyZWQuIFRoZSBjb25maWdzIEkgYW0gYXdhcmUgb2YgYXJlIGA5UF9GU2AsIGBDRVBIX0ZTYCwgYEZVU0VfRlNgLCBgR0ZTMl9GU2AsIGBORlNfRlNgLCBgQ0lGU2AsIGFuZCBgVkJPWFNGX0ZTYC5cblxuQWxyaWdodCwgYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBldmVyeXRoaW5nIGNvdmVyZWQuIEJlc2lkZXMgdGhlIGNvcmUgYGZzL29wZW4uY2AgYW5kIGBmcy9uYW1laS5jYCBmaWxlcywgSSBzZWUgdXBkYXRlcyB0bzogYGZzLzlwL3Zmc19pbm9kZS5jYCwgYGZzLzlwL3Zmc19pbm9kZV9kb3RsLmNgLCBgZnMvY2VwaC9maWxlLmNgLCBgZnMvZnVzZS9kaXIuY2AsIGBmcy9nZnMyL2lub2RlLmNgLCBgZnMvbmZzL2Rpci5jYCwgYGZzL3NtYi9jbGllbnQvZGlyLmNgLCBhbmQgYGZzL3Zib3hzZi9kaXIuY2AuIE9rYXksIHRoYXQgc2VlbXMgY29tcHJlaGVuc2l2ZS5cblxuRmluYWxseSwgSSdsbCBxdWlja2x5IGNoZWNrIGlmIGBPX0lTX01LRElSYCBpcyB1c2VkIGFueXdoZXJlIGVsc2UgdG8gZW5zdXJlIG5vIG90aGVyIHVuZm9yZXNlZW4gaW50ZXJhY3Rpb25zIGFyZSBwcmVzZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYzNiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0NDowNC4yNDc2NjMzMzVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODI5OTEwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiT19JU19NS0RJUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvOXAvdmZzX2lub2RlLmM9NzY5PXY5ZnNfdmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYy03NzktXFxuZnMvOXAvdmZzX2lub2RlLmM6NzgwOlxcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcXG5mcy85cC92ZnNfaW5vZGUuYy03ODEtXFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuLS1cXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jPTIyNz12OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTI0MS1cXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjI0MjpcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy0yNDMtXFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuLS1cXG5mcy9jZXBoL2ZpbGUuYz03OTQ9aW50IGNlcGhfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2NlcGgvZmlsZS5jLTgxMy1cXG5mcy9jZXBoL2ZpbGUuYzo4MTQ6XFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbmZzL2NlcGgvZmlsZS5jLTgxNS1cXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4tLVxcbmZzL2Z1c2UvZGlyLmM9OTMwPXN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksXFxuLS1cXG5mcy9mdXNlL2Rpci5jLTkzNy1cXG5mcy9mdXNlL2Rpci5jOjkzODpcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuZnMvZnVzZS9kaXIuYy05MzktXFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuLS1cXG5mcy9nZnMyL2lub2RlLmM9MTM4ND1zdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy0xMzg5LVxcbmZzL2dmczIvaW5vZGUuYzoxMzkwOlxcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcXG5mcy9nZnMyL2lub2RlLmMtMTM5MS1cXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4tLVxcbmZzL25hbWVpLmM9NDQ3Mz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvbmFtZWkuYy00NDgzLVxcdHVtb2RlX3QgbW9kZSA9IG9wLVxcdTAwM2Vtb2RlO1xcbmZzL25hbWVpLmM6NDQ4NDpcXHRib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wZW5fZmxhZyk7XFxuZnMvbmFtZWkuYy00NDg1LVxcbi0tXFxuZnMvbmZzL2Rpci5jPTIxMDQ9aW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvbmZzL2Rpci5jLTIxMjMtXFxuZnMvbmZzL2Rpci5jOjIxMjQ6XFx0aWYgKE9fSVNfTUtESVIob3Blbl9mbGFncykpXFxuZnMvbmZzL2Rpci5jLTIxMjUtXFx0XFx0b3Blbl9mbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4tLVxcbmZzL25mcy9kaXIuYz0yMzA5PWludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9uZnMvZGlyLmMtMjMxOC1cXG5mcy9uZnMvZGlyLmM6MjMxOTpcXHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcXG5mcy9uZnMvZGlyLmMtMjMyMC1cXHRcXHRvcGVuX2ZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbi0tXFxuZnMvb3Blbi5jPTExNTI9aW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXFxuLS1cXG5mcy9vcGVuLmMtMTE5Mi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5mcy9vcGVuLmM6MTE5MzpcXHRcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuZnMvb3Blbi5jLTExOTQtXFx0XFx0XFx0b3AtXFx1MDAzZW1vZGUgPSBob3ctXFx1MDAzZW1vZGUgfCBTX0lGRElSO1xcbi0tXFxuZnMvc21iL2NsaWVudC9kaXIuYz01MjA9aW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxcbi0tXFxuZnMvc21iL2NsaWVudC9kaXIuYy01NDAtXFxuZnMvc21iL2NsaWVudC9kaXIuYzo1NDE6XFx0aWYgKE9fSVNfTUtESVIob2ZsYWdzKSlcXG5mcy9zbWIvY2xpZW50L2Rpci5jLTU0Mi1cXHRcXHRvZmxhZ3MgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuLS1cXG5mcy92Ym94c2YvZGlyLmM9MzEzPXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvdmJveHNmL2Rpci5jLTMyMC1cXG5mcy92Ym94c2YvZGlyLmM6MzIxOlxcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcXG5mcy92Ym94c2YvZGlyLmMtMzIyLVxcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mY250bC5oLTMzLSNkZWZpbmUgT19NS0RJUl9NQVNLXFx0KE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSlcXG5pbmNsdWRlL2xpbnV4L2ZjbnRsLmg6MzQ6c3RhdGljIGlubGluZSBib29sIE9fSVNfTUtESVIodW5zaWduZWQgZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9mY250bC5oLTM1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6NDQ6MDYuNzMwNjYwMDg0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzExNzAxODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkZpbmFsaXppbmcgdGhlIFJlc3BvbnNlOiBBIFJvdXRpbmUgQ29uZmlybWF0aW9uKipcblxuQWxyaWdodCwgSSd2ZSByZXZpZXdlZCB0aGUgZW50aXJlIHByb2Nlc3MsIGRvdWJsZS1jaGVja2VkIHRoZSBkYXRhLCBhbmQgcmlnb3JvdXNseSBhc3Nlc3NlZCB0aGUgbWV0aG9kb2xvZ3kuIEV2ZXJ5dGhpbmcgYWxpZ25zIHdpdGggZXhwZWN0YXRpb25zOyB0aGVyZSBhcmUgbm8gb2J2aW91cyBpbmNvbnNpc3RlbmNpZXMsIGFub21hbGllcywgb3IgcmVkIGZsYWdzIHRoYXQgd291bGQgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24gb3IgbmVjZXNzaXRhdGUgYSBjb3Vyc2UgY29ycmVjdGlvbi4gRnJvbSBhIHF1YWxpdGF0aXZlIGFuZCBxdWFudGl0YXRpdmUgcGVyc3BlY3RpdmUsIHRoZSBhbmFseXNpcyBhcHBlYXJzIHJvYnVzdCwgdGhlIGludGVycHJldGF0aW9ucyBhcmUgc291bmQsIGFuZCB0aGUgY29uY2x1c2lvbnMgYXJlIGRlZmVuc2libGUgZ2l2ZW4gdGhlIGlucHV0IGRhdGEgYW5kIGNob3NlbiBmcmFtZXdvcmsuIE5vdyBJIGNhbiBjb25maWRlbnRseSBtb3ZlIGZvcndhcmQgdG8gcHJlcGFyZSB0aGUgZmluYWwgcmVzcG9uc2UsIGNvbmZpZGVudCB0aGF0IGl0IHJlcHJlc2VudHMgYSBmYWl0aGZ1bCBhbmQgYWNjdXJhdGUgcG9ydHJheWFsIG9mIHRoZSBmaW5kaW5ncy4gVGltZSB0byBjcmFmdCB0aGUgbmFycmF0aXZlIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQwMSwiT3V0cHV0VG9rZW5zIjozNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjo0NDoxNy4wNDIzNjM5N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MjkzMjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXRoX29wZW5hdFwiLFxuICAgIFwiZG9fc3lzX29wZW5cIixcbiAgICBcInZmc19ta2RpclwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwiZmlsZW5hbWVfdW5saW5rYXRcIixcbiAgICBcImZpbGVuYW1lX3JlbmFtZWF0MlwiLFxuICAgIFwiY2lmc19hdG9taWNfb3BlblwiLFxuICAgIFwidjlmc192ZnNfYXRvbWljX29wZW5cIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxcIixcbiAgICBcImNlcGhfYXRvbWljX29wZW5cIixcbiAgICBcImZ1c2VfYXRvbWljX29wZW5cIixcbiAgICBcImdmczJfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3BlblwiLFxuICAgIFwibmZzX2F0b21pY19vcGVuX3YyM1wiLFxuICAgIFwidmJveHNmX2Rpcl9hdG9taWNfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVkZTIGxheWVyLCBhbGxvd2luZyBvcGVuYXQoKSB3aXRoIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSB0byBjcmVhdGUgZGlyZWN0b3JpZXMuIEl0IG1vZGlmaWVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIChmcy9uYW1laS5jLCBmcy9vcGVuLmMpIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKDlwLCBjZXBoLCBmdXNlLCBnZnMyLCBuZnMsIHNtYiwgdmJveHNmKSB0byBoYW5kbGUgdGhlIG5ldyBiZWhhdmlvciBpbiB0aGVpciBhdG9taWNfb3BlbiBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBpbiBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGZpbGUgb3BlbmluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXRoX29wZW5hdFwiLFxuICAgIFwiZG9fc3lzX29wZW5cIixcbiAgICBcInZmc19ta2RpclwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwiZmlsZW5hbWVfdW5saW5rYXRcIixcbiAgICBcImZpbGVuYW1lX3JlbmFtZWF0MlwiLFxuICAgIFwiY2lmc19hdG9taWNfb3BlblwiLFxuICAgIFwidjlmc192ZnNfYXRvbWljX29wZW5cIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxcIixcbiAgICBcImNlcGhfYXRvbWljX29wZW5cIixcbiAgICBcImZ1c2VfYXRvbWljX29wZW5cIixcbiAgICBcImdmczJfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3BlblwiLFxuICAgIFwibmZzX2F0b21pY19vcGVuX3YyM1wiLFxuICAgIFwidmJveHNmX2Rpcl9hdG9taWNfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVkZTIGxheWVyLCBhbGxvd2luZyBvcGVuYXQoKSB3aXRoIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSB0byBjcmVhdGUgZGlyZWN0b3JpZXMuIEl0IG1vZGlmaWVzIGNvcmUgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIChmcy9uYW1laS5jLCBmcy9vcGVuLmMpIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKDlwLCBjZXBoLCBmdXNlLCBnZnMyLCBuZnMsIHNtYiwgdmJveHNmKSB0byBoYW5kbGUgdGhlIG5ldyBiZWhhdmlvciBpbiB0aGVpciBhdG9taWNfb3BlbiBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBpbiBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGZpbGUgb3BlbmluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowh98zf[1] Phase: Succeeded StartedAt: 2026-06-29 16:44:28 +0000 UTC FinishedAt: 2026-06-29 16:44:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 16:44:28 +0000 UTC FinishedAt: 2026-06-29 16:44:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2] Phase: Succeeded StartedAt: 2026-06-29 16:44:28 +0000 UTC FinishedAt: 2026-06-29 20:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-29 16:44:28 +0000 UTC FinishedAt: 2026-06-29 20:56:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-29 16:44:28 +0000 UTC FinishedAt: 2026-06-29 16:44:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-29 16:44:28 +0000 UTC FinishedAt: 2026-06-29 16:44:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflowh98zf/series-workflowh98zf-convert-artifact-2326226633/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-29 16:44:38 +0000 UTC FinishedAt: 2026-06-29 17:19:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-29 16:44:38 +0000 UTC FinishedAt: 2026-06-29 17:19:06 +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:*595e0378-9a0b-4af6-99f0-cf33ba6d46ee,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-workflowh98zf/series-workflowh98zf-convert-artifact-2326226633/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": "8faa0f01-20f4-42c2-b8d6-d6826bfb5f54", "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-workflowh98zf/series-workflowh98zf-build-action-3920160167/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-29 16:44:38 +0000 UTC FinishedAt: 2026-06-29 17:18:50 +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:*595e0378-9a0b-4af6-99f0-cf33ba6d46ee,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-workflowh98zf/series-workflowh98zf-convert-artifact-2326226633/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": "8faa0f01-20f4-42c2-b8d6-d6826bfb5f54", "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-workflowh98zf/series-workflowh98zf-build-action-3920160167/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-29 17:19:06 +0000 UTC FinishedAt: 2026-06-29 17:19:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-29 17:19:06 +0000 UTC FinishedAt: 2026-06-29 17:19:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-29 17:19:06 +0000 UTC FinishedAt: 2026-06-29 17:19:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-29 17:19:06 +0000 UTC FinishedAt: 2026-06-29 17:19:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflowh98zf/series-workflowh98zf-convert-artifact-180265948/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-29 17:19:59 +0000 UTC FinishedAt: 2026-06-29 17:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-29 17:19:59 +0000 UTC FinishedAt: 2026-06-29 17:22:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8faa0f01-20f4-42c2-b8d6-d6826bfb5f54,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-workflowh98zf/series-workflowh98zf-build-action-3920160167/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-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-29 17:22:32 +0000 UTC FinishedAt: 2026-06-29 17:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-29 17:22:32 +0000 UTC FinishedAt: 2026-06-29 17:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-29 17:22:32 +0000 UTC FinishedAt: 2026-06-29 17:51:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-29 17:22:32 +0000 UTC FinishedAt: 2026-06-29 17:51:46 +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:*595e0378-9a0b-4af6-99f0-cf33ba6d46ee,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-workflowh98zf/series-workflowh98zf-convert-artifact-180265948/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": "eec560f5-dda0-4b65-b90c-651685672dbb", "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-workflowh98zf/series-workflowh98zf-build-action-493185080/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-29 17:22:32 +0000 UTC FinishedAt: 2026-06-29 17:51:36 +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:*595e0378-9a0b-4af6-99f0-cf33ba6d46ee,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-workflowh98zf/series-workflowh98zf-convert-artifact-180265948/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": "eec560f5-dda0-4b65-b90c-651685672dbb", "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-workflowh98zf/series-workflowh98zf-build-action-493185080/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-29 17:51:46 +0000 UTC FinishedAt: 2026-06-29 17:51:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-29 17:51:46 +0000 UTC FinishedAt: 2026-06-29 17:51:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-29 17:51:46 +0000 UTC FinishedAt: 2026-06-29 17:53:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-29 17:51:46 +0000 UTC FinishedAt: 2026-06-29 17:53:44 +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:*eec560f5-dda0-4b65-b90c-651685672dbb,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-workflowh98zf/series-workflowh98zf-build-action-493185080/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-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-29 17:53:54 +0000 UTC FinishedAt: 2026-06-29 20:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-29 17:53:54 +0000 UTC FinishedAt: 2026-06-29 20:56:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*8faa0f01-20f4-42c2-b8d6-d6826bfb5f54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*eec560f5-dda0-4b65-b90c-651685672dbb,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-workflowh98zf/series-workflowh98zf-build-action-3920160167/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-workflowh98zf/series-workflowh98zf-build-action-493185080/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-29 17:53:54 +0000 UTC FinishedAt: 2026-06-29 17:55:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-29 17:53:54 +0000 UTC FinishedAt: 2026-06-29 17:55:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowh98zf/series-workflowh98zf-convert-artifact-2577919397/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-29 17:53:54 +0000 UTC FinishedAt: 2026-06-29 17:53:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-29 17:53:54 +0000 UTC FinishedAt: 2026-06-29 17:53:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-29 17:53:54 +0000 UTC FinishedAt: 2026-06-29 17:53:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-29 17:55:09 +0000 UTC FinishedAt: 2026-06-29 20:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh98zf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_openat","do_sys_open","vfs_mkdir","vfs_create","dentry_create","filename_unlinkat","filename_renameat2","cifs_atomic_open","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"19eccb0d-a373-4e2f-9de6-7085934482de","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-29 17:55:09 +0000 UTC FinishedAt: 2026-06-29 20:56:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8faa0f01-20f4-42c2-b8d6-d6826bfb5f54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*eec560f5-dda0-4b65-b90c-651685672dbb,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-workflowh98zf/series-workflowh98zf-build-action-3920160167/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-workflowh98zf/series-workflowh98zf-build-action-493185080/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-workflowh98zf/series-workflowh98zf-convert-artifact-2577919397/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,}