Name: series-workflowwcnpv Phase: Succeeded StartedAt: 2026-07-31 01:12:56 +0000 UTC FinishedAt: 2026-07-31 02:09:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcnpv[0] Phase: Succeeded StartedAt: 2026-07-31 01:12:56 +0000 UTC FinishedAt: 2026-07-31 01:16:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcnpv[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 01:12:56 +0000 UTC FinishedAt: 2026-07-31 01:16:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "95d6a9ccef99117115e41e9adb271243bd5e985b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KPROBES", "FUNCTION_TRACER", "TRACEPOINTS", "PERF_EVENTS", "RCU_TORTURE_TEST", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "95d6a9ccef99117115e41e9adb271243bd5e985b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KPROBES", "FUNCTION_TRACER", "TRACEPOINTS", "PERF_EVENTS", "RCU_TORTURE_TEST", "BPF_SYSCALL" ], "series_id": "d8998ec7-6753-48fe-ae7d-019bea631f5e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "rcu_barrier", "srcu_barrier", "rcutree_migrate_callbacks", "srcu_offline_drain" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tQUk9CRVMmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDssCiAgICAmIzM0O1RSQUNFUE9JTlRTJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O1JDVV9UT1JUVVJFX1RFU1QmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyY3VfYmFycmllciYjMzQ7LAogICAgJiMzNDtzcmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7cmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtzcmN1X29mZmxpbmVfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmFsIG1lY2hhbmlzbSBmb3IgY2FsbF9yY3UoKSBhbmQgY2FsbF9zcmN1KCkgdG8gc2FmZWx5IGhhbmRsZSBjYWxsYmFjayBlbnF1ZXVlcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkIChlLmcuLCBmcm9tIE5NSXMgb3IgQlBGIHByb2dyYW1zKS4gSXQgYWRkcyBsb2NrbGVzcyBsaXN0cyBhbmQgaXJxX3dvcmsgdG8gZGVmZXIgdGhlIGFjdHVhbCBlbnF1ZXVlIHVudGlsIGl0IGlzIHNhZmUuIEl0IGFsc28gdXBkYXRlcyByY3VfYmFycmllcigpLCBzcmN1X2JhcnJpZXIoKSwgYW5kIENQVSBob3RwbHVnIHBhdGhzIHRvIGZsdXNoIHRoZXNlIGRlZmVycmVkIGNhbGxiYWNrcy4gQWRkaXRpb25hbGx5LCBpdCBhZGRzIE5NSSB0ZXN0aW5nIHRvIHJjdXRvcnR1cmUgdXNpbmcgcGVyZiBldmVudHMsIGFuZCBhIEJQRiBzZWxmdGVzdC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgUkNVIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiBGb2N1cyBzeW1ib2xzIGluY2x1ZGUgdGhlIGJhcnJpZXIgYW5kIENQVSBvZmZsaW5lIGZ1bmN0aW9ucyB0aGF0IGRyYWluIHRoZSBuZXcgZGVmZXJyZWQgbGlzdHMuIFJlcXVpcmVkIGNvbmZpZ3MgaW5jbHVkZSBLUFJPQkVTL0ZVTkNUSU9OX1RSQUNFUi9UUkFDRVBPSU5UUyB0byBlbmFibGUgQ09ORklHX1JDVV9ERUZFUiwgUEVSRl9FVkVOVFMgYW5kIFJDVV9UT1JUVVJFX1RFU1QgZm9yIHRoZSByY3V0b3J0dXJlIGNoYW5nZXMsIGFuZCBCUEZfU1lTQ0FMTCBhcyBCUEYgaXMgYSBwcmltYXJ5IHRyaWdnZXIgZm9yIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNlZjM2NzQyYjE3YmViMGU3MzQ2YjU4ZjUxOGJhN2U4NmE3NjY3NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMToxNDozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcbmluZGV4IGZiY2YxM2JjMTJkMTUuLjQ3Mjc1ZDE4Mjk2NmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2RlZmluZSBfTElOVVhfU1JDVV9USU5ZX0hcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FpdC5oXHUwMDNlXG4gXG4gc3RydWN0IHNyY3Vfc3RydWN0IHtcbkBAIC0yNiw2ICYjNDM7MjcsOCBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xuIFx0c3RydWN0IHJjdV9oZWFkICoqc3JjdV9jYl90YWlsO1x0LyogUGVuZGluZyBjYWxsYmFja3M6IFRhaWwuICovXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3JjdV93b3JrO1x0LyogRm9yIGRyaXZpbmcgZ3JhY2UgcGVyaW9kcy4gKi9cbiBcdHN0cnVjdCBpcnFfd29yayBzcmN1X2lycV93b3JrO1x0LyogRGVmZXIgc2NoZWR1bGVfd29yaygpIHRvIGlycSB3b3JrLiAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NicztcdC8qIENhbGxiYWNrcyBkZWZlcnJlZCBvbiByZS1lbnRyeS4gKi9cbiYjNDM7XHRzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfaXc7XHRcdC8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovXG4gI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DXG4gXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDtcbiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovXG5AQCAtMzMsNiAmIzQzOzM2LDcgQEAgc3RydWN0IHNyY3Vfc3RydWN0IHtcbiBcbiB2b2lkIHNyY3VfZHJpdmVfZ3Aoc3RydWN0IHdvcmtfc3RydWN0ICp3cCk7XG4gdm9pZCBzcmN1X3RpbnlfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XG4mIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbiBcbiAjZGVmaW5lIF9fU1JDVV9TVFJVQ1RfSU5JVChuYW1lLCBfX2lnbm9yZWQsIF9fX2lnbm9yZWQsIF9fX19pZ25vcmVkKVx0XFxcbiB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbkBAIC00MCw2ICYjNDM7NDQsOCBAQCB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbiBcdC5zcmN1X2NiX3RhaWwgPSBcdTAwMjZuYW1lLnNyY3VfY2JfaGVhZCxcdFx0XHRcdFxcXG4gXHQuc3JjdV93b3JrID0gX19XT1JLX0lOSVRJQUxJWkVSKG5hbWUuc3JjdV93b3JrLCBzcmN1X2RyaXZlX2dwKSxcdFxcXG4gXHQuc3JjdV9pcnFfd29yayA9IHsgLmZ1bmMgPSBzcmN1X3RpbnlfaXJxX3dvcmsgfSxcdFx0XFxcbiYjNDM7XHQuZGVmZXJfY2JzID0gTExJU1RfSEVBRF9JTklUKG5hbWUuZGVmZXJfY2JzKSxcdFx0XHRcXFxuJiM0MztcdC5kZWZlcl9pdyA9IHsgLmZ1bmMgPSBzcmN1X2RlZmVyX2RyYWluIH0sXHRcdFx0XHRcXFxuIFx0X19TUkNVX0RFUF9NQVBfSU5JVChuYW1lKVx0XHRcdFx0XHRcXFxuIH1cbiBcbkBAIC0xMzEsMTAgJiM0MzsxMzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4te1xuLVx0c3luY2hyb25pemVfc3JjdShzc3ApO1xuLX1cbiYjNDM7dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApIHsgfVxuICNkZWZpbmUgc3JjdV9jaGVja19yZWFkX2ZsYXZvcihzc3AsIHJlYWRfZmxhdm9yKSBkbyB7IH0gd2hpbGUgKDApXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXG5pbmRleCA3NWU1NGU0Zjk2M2ZhLi4xY2U3NTlmYjcwOTQ4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbkBAIC0xMyw2ICYjNDM7MTMsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdV9ub2RlX3RyZWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiBcbiBzdHJ1Y3Qgc3JjdV9ub2RlO1xuIHN0cnVjdCBzcmN1X3N0cnVjdDtcbkBAIC00MSw2ICYjNDM7NDMsOCBAQCBzdHJ1Y3Qgc3JjdV9kYXRhIHtcbiBcdGJvb2wgc3JjdV9jYmxpc3RfaW52b2tpbmc7XHRcdC8qIEludm9raW5nIHRoZXNlIENCcz8gKi9cbiBcdHN0cnVjdCB0aW1lcl9saXN0IGRlbGF5X3dvcms7XHRcdC8qIERlbGF5IGZvciBDQiBpbnZva2luZyAqL1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XHRcdC8qIENvbnRleHQgZm9yIENCIGludm9raW5nLiAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NicztcdFx0LyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlIGRlZmVyX2xpbms7XHRcdC8qIExpbmtzIG9udG8gdGhlIHBlci1DUFUgZGVmZXJyYWwgZHJhaW4gbGlzdCAqL1xuIFx0c3RydWN0IHJjdV9oZWFkIHNyY3VfYmFycmllcl9oZWFkO1x0LyogRm9yIHNyY3VfYmFycmllcigpIHVzZS4gKi9cbiBcdHN0cnVjdCByY3VfaGVhZCBzcmN1X2VjX2hlYWQ7XHRcdC8qIEZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKSB1c2UuICovXG4gXHRpbnQgc3JjdV9lY19zdGF0ZTtcdFx0XHQvKiAgU3RhdGUgZm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpLiAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvS2NvbmZpZyBiL2tlcm5lbC9yY3UvS2NvbmZpZ1xuaW5kZXggMzMyZGY3YTdhNjM0Ny4uYmM5NDgzYzBiNWQ4NCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9LY29uZmlnXG5AQCAtMTc1LDYgJiM0MzsxNzUsMTIgQEAgY29uZmlnIFJDVV9TVEFMTF9DT01NT05cbiBjb25maWcgUkNVX05FRURfU0VHQ0JMSVNUXG4gXHRkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFRSRUVfU1JDVSB8fCBUQVNLU19SQ1VfR0VORVJJQyApXG4gXG4mIzQzOyMgVGhlIGRlZmVycmFsIChhbmQgdGhlIElSUV9XT1JLIGl0IHVzZXMpIGlzIG9ubHkgbmVlZGVkIHdoZXJlIGNhbGxfcmN1KCkgL1xuJiM0MzsjIGNhbGxfc3JjdSgpIGNhbiBiZSBpbnZva2VkIHdoaWxlIGEgY2FsbGJhY2stbGlzdCBvcGVyYXRpb24gaXMgaW4gZmxpZ2h0LlxuJiM0Mztjb25maWcgUkNVX0RFRkVSXG4mIzQzO1x0ZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNcbiYjNDM7XHRzZWxlY3QgSVJRX1dPUktcbiYjNDM7XG4gY29uZmlnIFJDVV9GQU5PVVRcbiBcdGludCBcJiMzNDtUcmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgZmFub3V0IHZhbHVlXCYjMzQ7XG4gXHRyYW5nZSAyIDY0IGlmIDY0QklUXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3UuaCBiL2tlcm5lbC9yY3UvcmN1LmhcbmluZGV4IDM5YTlmNmZhOWE3YjIuLjAzNmQyODUxNmU5MmQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3JjdS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3JjdS5oXG5AQCAtNTcyLDYgJiM0Mzs1NzIsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tzX2NibGlzdF9pbml0X2dlbmVyaWModm9pZCkgeyB9XG4gI2RlZmluZSBSQ1VfU0NIRURVTEVSX0lOSVRcdDFcbiAjZGVmaW5lIFJDVV9TQ0hFRFVMRVJfUlVOTklOR1x0MlxuIFxuJiM0MzsvKlxuJiM0MzsgKiBTaG91bGQgYSBjYWxsX3JjdSgpL2NhbGxfc3JjdSgpIGNhbGxiYWNrIGJlIGRlZmVycmVkIHJhdGhlciB0aGFuIGVucXVldWVkXG4mIzQzOyAqIG5vdz8gIERlZmVyIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkOiBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIG1heVxuJiM0MzsgKiBiZSBpbiBmbGlnaHQgb24gdGhpcyBDUFUsIHNvIGVucXVldWluZyBub3cgY291bGQgY29ycnVwdCBpdC4gIEJ1dCBub3Qgd2hpbGVcbiYjNDM7ICogdGhlIHNjaGVkdWxlciBpcyBkb3duIC0tIGVhcmx5IGJvb3QgaXMgc2luZ2xlLXRocmVhZGVkIGFuZCBjYW4gY2FsbCB0aGlzXG4mIzQzOyAqIGJlZm9yZSBpbml0X0lSUSgpIG1ha2VzIGlycV93b3JrIHVzYWJsZSAoZS5nLiByY3VfaW5pdCgpJiMzOTtzIHNlbGYtdGVzdHMpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNob3VsZF9yY3VfZGVmZXIodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlycXNfZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgcmN1X3NjaGVkdWxlcl9hY3RpdmUgIT0gUkNVX1NDSEVEVUxFUl9JTkFDVElWRTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRHJhaW4gYW4gb3V0Z29pbmcgQ1BVJiMzOTtzIGRlZmVycmVkIFNSQ1UgY2FsbGJhY2tzOyBzZWUgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLiAqL1xuJiM0Mzt2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTtcbiYjNDM7XG4gZW51bSByY3V0b3J0dXJlX3R5cGUge1xuIFx0UkNVX0ZMQVZPUixcbiBcdFJDVV9UQVNLU19GTEFWT1IsXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuY1xuaW5kZXggM2QwYjU5YTdiMGIzOC4uYTA2MTAwYjgyMzU5NyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuY1xuQEAgLTQ4LDYgJiM0Mzs0OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGljay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25taS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3JjdS5oXCYjMzQ7XG4gXG5AQCAtMTE1LDYgJiM0MzsxMTYsNyBAQCB0b3J0dXJlX3BhcmFtKGludCwgbGVha3BvaW50ZXIsIDAsIFwmIzM0O0xlYWsgcG9pbnRlciBkZXJlZmVyZW5jZXMgZnJvbSByZWFkZXJzXCYjMzQ7KTtcbiB0b3J0dXJlX3BhcmFtKGludCwgbl9iYXJyaWVyX2NicywgMCwgXCYjMzQ7IyBvZiBjYWxsYmFja3Mva3RocmVhZHMgZm9yIGJhcnJpZXIgdGVzdGluZ1wmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5fdXBfZG93biwgMzIsIFwmIzM0OyMgb2YgY29uY3VycmVudCB1cC9kb3duIGhydGltZXItYmFzZWQgUkNVIHJlYWRlcnNcJiMzNDspO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBuZmFrZXdyaXRlcnMsIDQsIFwmIzM0O051bWJlciBvZiBSQ1UgZmFrZSB3cml0ZXIgdGhyZWFkc1wmIzM0Oyk7XG4mIzQzO3RvcnR1cmVfcGFyYW0oYm9vbCwgbm1pX2NhbGxzLCB0cnVlLCBcJiMzNDtFeGVyY2lzZSAtXHUwMDNlY2FsbCgpIGZyb20gTk1JIG9uIG5taV9jYXBhYmxlIGZsYXZvcnNcJiMzNDspO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBucmVhZGVycywgLTEsIFwmIzM0O051bWJlciBvZiBSQ1UgcmVhZGVyIHRocmVhZHNcJiMzNDspO1xuIHRvcnR1cmVfcGFyYW0oYm9vbCwgbndyaXRlcnMsIDEsIFwmIzM0O051bWJlciBvZiBSQ1Ugd3JpdGVyIHRocmVhZHMgKDAgb3IgMSlcJiMzNDspO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBvYmplY3RfZGVidWcsIDAsIFwmIzM0O0VuYWJsZSBkZWJ1Zy1vYmplY3QgZG91YmxlIGNhbGxfcmN1KCkgdGVzdGluZ1wmIzM0Oyk7XG5AQCAtMjE2LDYgJiM0MzsyMTgsOCBAQCBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0X2ZhaWx1cmU7XG4gc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdHM7XG4gc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV90aW1lcnM7XG4gc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9pcnFzO1xuJiM0MztzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYWxsO1xuJiM0MztzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYjtcbiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfYXR0ZW1wdHM7XG4gc3RhdGljIGxvbmcgbl9iYXJyaWVyX3N1Y2Nlc3NlczsgLyogZGlkIHJjdV9iYXJyaWVyIHRlc3Qgc3VjY2VlZD8gKi9cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBuX3JlYWRfZXhpdHM7XG5AQCAtNDMzLDYgJiM0Mzs0MzcsNyBAQCBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHtcbiBcdGJvb2wgKCppc190YXNrX3JjdV9ib29zdGVkKSh2b2lkKTtcbiBcdGxvbmcgY2JmbG9vZF9tYXg7XG4gXHRpbnQgaXJxX2NhcGFibGU7XG4mIzQzO1x0aW50IG5taV9jYXBhYmxlO1xuIFx0aW50IGNhbl9ib29zdDtcbiBcdGludCBleHRlbmRhYmxlcztcbiBcdGludCBzbG93X2dwcztcbkBAIC02NDYsNiAmIzQzOzY1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHJjdV9vcHMgPSB7XG4gXHQuZXh0ZW5kYWJsZXNcdFx0PSBSQ1VUT1JUVVJFX01BWF9FWFRFTkQsXG4gXHQuZGVidWdfb2JqZWN0c1x0XHQ9IDEsXG4gXHQuc3RhcnRfcG9sbF9pcnFzb2ZmXHQ9IDEsXG4mIzQzO1x0Lm5taV9jYXBhYmxlXHRcdD0gMSxcbiBcdC5uYW1lXHRcdFx0PSBcJiMzNDtyY3VcJiMzNDtcbiB9O1xuIFxuQEAgLTkzNiw2ICYjNDM7OTQyLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdV9vcHMgPSB7XG4gXHQuZGVidWdfb2JqZWN0c1x0PSAxLFxuIFx0LmhhdmVfdXBfZG93blx0PSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpXG4gXHRcdFx0XHQ/IDAgOiBTUkNVX1JFQURfRkxBVk9SX05PUk1BTCB8IFNSQ1VfUkVBRF9GTEFWT1JfRkFTVF9VUERPV04sXG4mIzQzO1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwmIzM0O3NyY3VcJiMzNDtcbiB9O1xuIFxuQEAgLTk5OSw2ICYjNDM7MTAwNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHNyY3VkX29wcyA9IHtcbiBcdC5kZWJ1Z19vYmplY3RzXHQ9IDEsXG4gXHQuaGF2ZV91cF9kb3duXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcbiBcdFx0XHRcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcbiYjNDM7XHQubm1pX2NhcGFibGVcdD0gMSxcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7c3JjdWRcJiMzNDtcbiB9O1xuIFxuQEAgLTEyNjMsNiAmIzQzOzEyNzEsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyB0YXNrc190cmFjaW5nX29wcyA9IHtcbiBcdC5jYmZsb29kX21heFx0PSA1MDAwMCxcbiBcdC5pcnFfY2FwYWJsZVx0PSAxLFxuIFx0LnNsb3dfZ3BzXHQ9IDEsXG4mIzQzO1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwmIzM0O3Rhc2tzLXRyYWNpbmdcJiMzNDtcbiB9O1xuIFxuQEAgLTI2NTMsMTIgJiM0MzsyNjYyLDk3IEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKVxuIFxuIHN0YXRpYyBERUZJTkVfVE9SVFVSRV9SQU5ET01fUEVSQ1BVKHJjdV90b3J0dXJlX3RpbWVyX3JhbmQpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBFeGVyY2lzZSAtXHUwMDNlY2FsbCgpIGZyb20gTk1JIGNvbnRleHQgZm9yIGZsYXZvcnMgdGhhdCBhZHZlcnRpc2UgLVx1MDAzZW5taV9jYXBhYmxlLlxuJiM0MzsgKiBBIHBlci1DUFUgaGFyZHdhcmUgcGVyZiBjb3VudGVyIG92ZXJmbG93cyBpbnRvIGFuIE5NSSAtLSBhIHJlYWwgTk1JIG9uIHg4NixcbiYjNDM7ICogb3IgYSBwc2V1ZG8tTk1JIG9uIGFybTY0IGJvb3RlZCB3aXRoIGlycWNoaXAuZ2ljdjNfcHNldWRvX25taT0xIC0tIGFuZCBpdHNcbiYjNDM7ICogaGFuZGxlciBzdWJtaXRzIG9uZSBwcmVhbGxvY2F0ZWQgY2FsbGJhY2sgdmlhIC1cdTAwM2VjYWxsKCkuICBPbmx5IG9uZSBjYWxsYmFjayBpc1xuJiM0MzsgKiBpbiBmbGlnaHQgYXQgYSB0aW1lIChndWFyZGVkIGJ5IGFuIGF0b21pYyksIHdoaWNoIGF2b2lkcyBhbGxvY2F0aW5nIGluIE5NSVxuJiM0MzsgKiBhbmQgaXMgZW5vdWdoIHRvIGV4ZXJjaXNlIHRoZSBkZWZlcnJhbC4gIFRoaXMgbWlycm9ycyBob3cgQlBGIHByb2dyYW1zIHJlYWNoXG4mIzQzOyAqIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkuICBSZXF1aXJlcyBhIGhhcmR3YXJlIFBNVTsgd2hlbiB0aGUgb3ZlcmZsb3cgaXMgbm90IGFuIE5NSVxuJiM0MzsgKiB0aGUgaGFuZGxlciBkb2VzIG5vdGhpbmcuXG4mIzQzOyAqL1xuJiM0MzsjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0ge1xuJiM0MztcdC50eXBlXHRcdD0gUEVSRl9UWVBFX0hBUkRXQVJFLFxuJiM0MztcdC5jb25maWdcdFx0PSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsXG4mIzQzO1x0LnNpemVcdFx0PSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXG4mIzQzO1x0LnBpbm5lZFx0XHQ9IDEsXG4mIzQzO1x0LmRpc2FibGVkXHQ9IDEsXG4mIzQzO1x0LmZyZXFcdFx0PSAxLFxuJiM0MztcdC5zYW1wbGVfZnJlcVx0PSAxMDAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50ICoqcmN1X3RvcnR1cmVfbm1pX2V2ZW50cztcbiYjNDM7c3RhdGljIHN0cnVjdCByY3VfaGVhZCByY3VfdG9ydHVyZV9ubWlfcmg7XG4mIzQzO3N0YXRpYyBhdG9taWNfdCByY3VfdG9ydHVyZV9ubWlfcmhfaW51c2U7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApXG4mIzQzO3tcbiYjNDM7XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cmN1X3RvcnR1cmVfbm1pX3JoX2ludXNlLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWluX25taSgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmIChjdXJfb3BzLVx1MDAzZWNhbGwgXHUwMDI2XHUwMDI2ICFhdG9taWNfeGNoZyhcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDEpKSB7XG4mIzQzO1x0XHRjdXJfb3BzLVx1MDAzZWNhbGwoXHUwMDI2cmN1X3RvcnR1cmVfbm1pX3JoLCByY3VfdG9ydHVyZV9ubWlfY2IpO1xuJiM0MztcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcbiYjNDM7XHRpbnQgY3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIW5taV9jYWxscyB8fCAhY3VyX29wcy1cdTAwM2VubWlfY2FwYWJsZSB8fCAhY3VyX29wcy1cdTAwM2VjYWxsKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBrY2FsbG9jKG5yX2NwdV9pZHMsIHNpemVvZigqcmN1X3RvcnR1cmVfbm1pX2V2ZW50cyksXG4mIzQzO1x0XHRcdFx0XHQgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7XG4mIzQzO1x0XHRldmVudCA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKFx1MDAyNnJjdV90b3J0dXJlX25taV9hdHRyLCBjcHUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IE5VTEwsIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdywgTlVMTCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGV2ZW50KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRyY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV0gPSBldmVudDtcbiYjNDM7XHRcdHBlcmZfZXZlbnRfZW5hYmxlKGV2ZW50KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuJiM0MztcdFx0aWYgKCFyY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0cGVyZl9ldmVudF9kaXNhYmxlKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7XG4mIzQzO1x0XHRwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7XG4mIzQzO1x0fVxuJiM0MztcdGtmcmVlKHJjdV90b3J0dXJlX25taV9ldmVudHMpO1xuJiM0MztcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzOyNlbHNlIC8qICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkgeyB9XG4mIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpIHsgfVxuJiM0MzsjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUyAqL1xuJiM0MztcbiAvKlxuICAqIFJDVSB0b3J0dXJlIHJlYWRlciBmcm9tIHRpbWVyIGhhbmRsZXIuICBEZXJlZmVyZW5jZXMgcmN1X3RvcnR1cmVfY3VycmVudCxcbiAgKiBpbmNyZW1lbnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgcGlwZWxpbmUgYXJyYXkuICBUaGVcbiAgKiBjb3VudGVyIGluIHRoZSBlbGVtZW50IHNob3VsZCBuZXZlciBiZSBncmVhdGVyIHRoYW4gMSwgb3RoZXJ3aXNlLCB0aGVcbiAgKiBSQ1UgaW1wbGVtZW50YXRpb24gaXMgYnJva2VuLlxuICAqL1xuJiM0MztcbiBzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdW51c2VkKVxuIHtcbiBcdFdBUk5fT05fT05DRSghaW5fc2VydmluZ19zb2Z0aXJxKCkpO1xuQEAgLTMwNDEsNiAmIzQzOzMxMzUsOSBAQCByY3VfdG9ydHVyZV9zdGF0c19wcmludCh2b2lkKVxuIFx0XHRkYXRhX3JhY2Uobl9iYXJyaWVyX2F0dGVtcHRzKSxcbiBcdFx0ZGF0YV9yYWNlKG5fcmN1X3RvcnR1cmVfYmFycmllcl9lcnJvcikpO1xuIFx0cHJfY29udChcJiMzNDtyZWFkLWV4aXRzOiAlbGQgXCYjMzQ7LCBkYXRhX3JhY2Uobl9yZWFkX2V4aXRzKSk7IC8vIFN0YXRpc3RpYy5cbiYjNDM7XHRwcl9jb250KFwmIzM0O25taS1jYWxsczogJWxkIG5taS1jYnM6ICVsZCBcJiMzNDssXG4mIzQzO1x0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxuJiM0MztcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpO1xuIFx0cHJfY29udChcJiMzNDtub2NiLXRvZ2dsZXM6ICVsZDolbGQgXCYjMzQ7LFxuIFx0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fbm9jYl9vZmZsb2FkKSwgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX25vY2JfZGVvZmZsb2FkKSk7XG4gXHRwcl9jb250KFwmIzM0O2dwd3JhcHM6ICVsZFxcblwmIzM0Oywgbl9ncHdyYXBzKTtcbkBAIC00MzE1LDYgJiM0Mzs0NDEyLDggQEAgcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKVxuIFx0XHRrZnJlZShyZWFkZXJfdGFza3MpO1xuIFx0XHRyZWFkZXJfdGFza3MgPSBOVUxMO1xuIFx0fVxuJiM0MztcdC8qIERpc2FibGUgdGhlIHBlcmYgY291bnRlcnMgKGFuZCB0aHVzIHRoZSBOTUkgLVx1MDAzZWNhbGwoKSBmaXJpbmcpIG5vdy4gKi9cbiYjNDM7XHRyY3VfdG9ydHVyZV9ubWlfY2xlYW51cCgpO1xuIFx0a2ZyZWUocmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrKTtcbiBcdHJjdV90b3J0dXJlX3JlYWRlcl9tYmNoayA9IE5VTEw7XG4gXG5AQCAtNDM0NCw2ICYjNDM7NDQ0MywyMCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpXG4gXHRcdHByX2luZm8oXCYjMzQ7JXM6IEludm9raW5nICVwUygpLlxcblwmIzM0OywgX19mdW5jX18sIGN1cl9vcHMtXHUwMDNlY2JfYmFycmllcik7XG4gXHRcdGN1cl9vcHMtXHUwMDNlY2JfYmFycmllcigpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGNiX2JhcnJpZXIoKSBhYm92ZSBkcmFpbmVkIGV2ZXJ5IGRlZmVycmVkIE5NSSAtXHUwMDNlY2FsbCgpIGNhbGxiYWNrLCBzbyB0aGVcbiYjNDM7XHQgKiBjb3VudCBpc3N1ZWQgZnJvbSBOTUkgbXVzdCBlcXVhbCB0aGUgY291bnQgaW52b2tlZDsgYSBtaXNtYXRjaCBtZWFucyBhXG4mIzQzO1x0ICogY2FsbGJhY2sgd2FzIGxvc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCkgIT1cbiYjNDM7XHQgICAgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpIHtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0OyVzOiBOTUkgLVx1MDAzZWNhbGwoKSBsb3N0IGEgY2FsbGJhY2s6IGlzc3VlZCAlbGQgaW52b2tlZCAlbGRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBfX2Z1bmNfXywgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKSxcbiYjNDM7XHRcdFx0IGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpKTtcbiYjNDM7XHRcdGF0b21pY19pbmMoXHUwMDI2bl9yY3VfdG9ydHVyZV9lcnJvcik7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChjdXJfb3BzLVx1MDAzZWNsZWFudXAgIT0gTlVMTClcbiBcdFx0Y3VyX29wcy1cdTAwM2VjbGVhbnVwKCk7XG4gXG5AQCAtNDc3Niw2ICYjNDM7NDg4OSw4IEBAIHJjdV90b3J0dXJlX2luaXQodm9pZClcbiBcdFx0Zmlyc3RlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIHVud2luZDtcbiBcdH1cbiYjNDM7XHQvKiBBcm0gdGhlIHBlci1DUFUgcGVyZiBjb3VudGVycyB0aGF0IGRyaXZlIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkuICovXG4mIzQzO1x0cmN1X3RvcnR1cmVfbm1pX2luaXQoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWFscmVhZGVyczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrW2ldLnJ0Y19jaGtyZHIgPSAtMTtcbiBcdFx0Zmlyc3RlcnIgPSB0b3J0dXJlX2NyZWF0ZV9rdGhyZWFkKHJjdV90b3J0dXJlX3JlYWRlciwgKHZvaWQgKilpLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuaW5kZXggNTU4YmE4ZDMxNmRiNi4uMDNhMDdhMWYzYTMwYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9zcmN1dGlueS5jXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVlbXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbkBAIC00Myw2ICYjNDM7NDQsOCBAQCBzdGF0aWMgaW50IGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIFx0SU5JVF9XT1JLKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3dvcmssIHNyY3VfZHJpdmVfZ3ApO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfd29yay5lbnRyeSk7XG4gXHRpbml0X2lycV93b3JrKFx1MDAyNnNzcC1cdTAwM2VzcmN1X2lycV93b3JrLCBzcmN1X3RpbnlfaXJxX3dvcmspO1xuJiM0MztcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKTtcbiYjNDM7XHRpbml0X2lycV93b3JrKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9pdywgc3JjdV9kZWZlcl9kcmFpbik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjEzLDExICYjNDM7MjE2LDExIEBAIHN0YXRpYyB2b2lkIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIH1cbiBcbiAvKlxuLSAqIEVucXVldWUgYW4gU1JDVSBjYWxsYmFjayBvbiB0aGUgc3BlY2lmaWVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZSxcbi0gKiBpbml0aWF0aW5nIGdyYWNlLXBlcmlvZCBwcm9jZXNzaW5nIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHJ1bm5pbmcuXG4mIzQzOyAqIEVucXVldWUgQHJocCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHNyY3VfZGVmZXJfZHJhaW4oKSB0b1xuJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLlxuICAqL1xuLXZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbi1cdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxuJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuJiM0MztcdFx0XHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuQEAgLTIzMSw2ICYjNDM7MjM0LDM5IEBAIHZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiBcdHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCk7XG4gXHRwcmVlbXB0X2VuYWJsZSgpO1xuIH1cbiYjNDM7XG4mIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X3N0cnVjdCwgZGVmZXJfaXcpO1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlLCAqbmV4dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYWxsYmFja3MgaGF2ZSBubyBtdXR1YWwgb3JkZXJpbmcgZ3VhcmFudGVlIGFuZCBzcmN1X2JhcnJpZXIoKSBoYXNcbiYjNDM7XHQgKiBhbHJlYWR5IGZsdXNoZWQgdXMsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKSkge1xuJiM0MztcdFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbiYjNDM7XG4mIzQzO1x0XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cdTAwM2VmdW5jKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9kZWZlcl9kcmFpbik7XG4mIzQzO1xuJiM0Mzt2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4mIzQzO1x0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7XG4mIzQzO1x0XHRyaHAtXHUwMDNlZnVuYyA9IGZ1bmM7XG4mIzQzO1x0XHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2NicykpXG4mIzQzO1x0XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9pdyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuJiM0MztcbiYjNDM7XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMpO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9zcmN1KTtcbiBcbiAvKlxuQEAgLTI2MCw2ICYjNDM7Mjk2LDE1IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7XG4gXG4mIzQzOy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBmb3IgYWxsIGluLWZsaWdodCBvbmVzLiAqL1xuJiM0Mzt2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiYjNDM7e1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlZGVmZXJfaXcpO1xuJiM0MztcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2JhcnJpZXIpO1xuJiM0MztcbiAvKlxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxuICAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuaW5kZXggMzA0MTEyNjc0ZThhMi4uYjlmZTU3ZmY5MTAwMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXG5AQCAtMjAsNiAmIzQzOzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJjcHUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWVtcHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuQEAgLTc5LDYgJiM0Mzs4MCw0NiBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3NyY3Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBzdGF0aWMgdm9pZCBzcmN1X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqd29yayk7XG4gc3RhdGljIHZvaWQgc3JjdV9kZWxheV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLiAgVGhlIGlycV93b3JrIGlzIGdsb2JhbCAoc2hhcmVkIGJ5IGV2ZXJ5XG4mIzQzOyAqIHNyY3Vfc3RydWN0KSwgc28gaXQgbXVzdCBmaW5kIHdoaWNoIHNyY3Vfc3RydWN0cyBkZWZlcnJlZCBjYWxsYmFja3M6IGFcbiYjNDM7ICogY2FsbGJhY2sgaXMgc3RhZ2VkIG9uIGl0cyBzcmN1X2RhdGEmIzM5O3MgLVx1MDAzZWRlZmVyX2NicywgYW5kIHRoYXQgc3JjdV9kYXRhIGlzXG4mIzQzOyAqIGNoYWluZWQgKC1cdTAwM2VkZWZlcl9saW5rKSBvbnRvIHRoaXMgcGVyLUNQVSAtXHUwMDNlbGlzdCB0aGF0IHRoZSBpcnFfd29yayB3YWxrcy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBzcmN1X2RlZmVyIHtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3RfaGVhZFx0bGlzdDtcbiYjNDM7XHRzdHJ1Y3QgaXJxX3dvcmtcdFx0aXc7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3RcdFx0bG9jaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3JjdV9kZWZlciwgc3JjdV9kZWZlcikgPSB7XG4mIzQzO1x0LmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoc3JjdV9kZWZlci5sb2NrKSxcbiYjNDM7XHQuaXcgPSBJUlFfV09SS19JTklUX0hBUkQoc3JjdV9kZWZlcl9kcmFpbiksXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZWdpc3RlciBwZW5kaW5nIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcyBzbyBhIGZvbGxvd2luZyBzcmN1X2JhcnJpZXIoKVxuJiM0MzsgKiB3YWl0cyBmb3IgdGhlbS4gIEFuIG9ubGluZSBDUFUmIzM5O3Mgb3duIGlycV93b3JrIHJlLWlzc3VlcyBpdHMgY2FsbGJhY2tzLCBzbyB3YWl0XG4mIzQzOyAqIGl0IG91dDsgYW4gb2ZmbGluZSBDUFUmIzM5O3MgaXJxX3dvcmsgbWF5IG5ldmVyIHJ1biBhZ2Fpbiwgc28gZHJhaW4gaXRzIGxpc3RcbiYjNDM7ICogZGlyZWN0bHkgb250byB0aGlzIENQVSBpbnN0ZWFkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9mbHVzaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4mIzQzO1x0XHRpZiAoY3B1X29ubGluZShjcHUpKVxuJiM0MztcdFx0XHRpcnFfd29ya19zeW5jKFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHNyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBJbml0aWFsaXplIFNSQ1UgcGVyLUNQVSBkYXRhLiAgTm90ZSB0aGF0IHN0YXRpY2FsbHkgYWxsb2NhdGVkXG4gICogc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlcyBtaWdodCBhbHJlYWR5IGhhdmUgc3JjdV9yZWFkX2xvY2soKSBhbmRcbkBAIC0xMDcsNiAmIzQzOzE0OCwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3NyY3Vfc3RydWN0X2RhdGEoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRcdHNkcC1cdTAwM2VjcHUgPSBjcHU7XG4gXHRcdElOSVRfV09SSyhcdTAwMjZzZHAtXHUwMDNld29yaywgc3JjdV9pbnZva2VfY2FsbGJhY2tzKTtcbiBcdFx0dGltZXJfc2V0dXAoXHUwMDI2c2RwLVx1MDAzZWRlbGF5X3dvcmssIHNyY3VfZGVsYXlfdGltZXIsIDApO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIC1cdTAwM2VkZWZlcl9jYnMgYW5kIC1cdTAwM2VkZWZlcl9saW5rIGFyZSB2YWxpZCB3aGVuIHplcm9lZCBhbmQgYXJlIG5vdFxuJiM0MztcdFx0ICogcmVpbml0aWFsaXplZCBoZXJlLCBsZXN0IHdlIGNsb2JiZXIgY2FsbGJhY2tzIGEgcmVlbnRyYW50XG4mIzQzO1x0XHQgKiBjYWxsX3NyY3UoKSBhbHJlYWR5IHN0YWdlZC4gIFNlZSBfX2NhbGxfc3JjdSgpLlxuJiM0MztcdFx0ICovXG4gXHRcdHNkcC1cdTAwM2Vzc3AgPSBzc3A7XG4gXHR9XG4gfVxuQEAgLTY5Nyw2ICYjNDM7NzQzLDggQEAgdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIFx0XHRyZXR1cm47IC8qIEp1c3QgbGVhayBpdCEgKi9cbiBcdC8qIFdhaXQgZm9yIGlycV93b3JrIHRvIGZpbmlzaCBmaXJzdCBhcyBpdCBtYXkgcXVldWUgYSBuZXcgd29yay4gKi9cbiBcdGlycV93b3JrX3N5bmMoXHUwMDI2c3VwLVx1MDAzZWlycV93b3JrKTtcbiYjNDM7XHQvKiBEcmFpbiBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIChzaGFyZWQgaXJxX3dvcmspIGJlZm9yZSBmcmVlaW5nIC1cdTAwM2VzZGEuICovXG4mIzQzO1x0c3JjdV9kZWZlcl9mbHVzaCgpO1xuIFx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnN1cC1cdTAwM2V3b3JrKTtcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiBcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwID0gcGVyX2NwdV9wdHIoc3NwLVx1MDAzZXNkYSwgY3B1KTtcbkBAIC0xNDEwLDggJiM0MzsxNDU4LDE4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLFxuICAqIHNyY3VfcmVhZF9sb2NrKCksIGFuZCBzcmN1X3JlYWRfdW5sb2NrKCkgdGhhdCBhcmUgYWxsIHBhc3NlZCB0aGUgc2FtZVxuICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4tXHRcdFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgc3JjdV9jYmxpc3QgYW5kIHRoZSBzcmN1X25vZGUgdHJlZSBhcmUgb25seSBldmVyIGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0c1xuJiM0MzsgKiBkaXNhYmxlZCAoc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKSBlbnF1ZXVlcyB1bmRlciByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSBhbmRcbiYjNDM7ICogbWF5IHdhbGsgdGhlIHRyZWU7IGNhbGxiYWNrIGludm9jYXRpb24gYW5kIGdyYWNlLXBlcmlvZCB3b3JrIGxpa2V3aXNlKS4gIFNvXG4mIzQzOyAqIGxpa2UgY2FsbF9yY3UoKSwgZW5xdWV1aW5nIHdoaWxlIGEgbGlzdCBvcGVyYXRpb24gaXMgaW4gZmxpZ2h0IG9uIHRoaXMgQ1BVXG4mIzQzOyAqIHdvdWxkIGNvcnJ1cHQgaXQgb3IgZGVhZGxvY2sgLS0gZS5nLiBjYWxsX3JjdV90YXNrc190cmFjZSgpLCB3aGljaCBpc1xuJiM0MzsgKiBjYWxsX3NyY3UoKSBvbiBhIGRlZGljYXRlZCBzcmN1X3N0cnVjdCwgZnJvbSBhIEJQRiBwcm9ncmFtLiAgX19jYWxsX3NyY3UoKVxuJiM0MzsgKiBkZWZlcnMgd2hlbmV2ZXIgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIHZpYSBhIHBlci1DUFUgaXJxX3dvcms7IG9ubHkga2VybmVsc1xuJiM0MzsgKiB3aGVyZSB0aGF0IGNhbiBoYXBwZW4gKENPTkZJR19SQ1VfREVGRVIpIG5lZWQgdGhpcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHNyY3VfZG9fZW5xdWV1ZShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4mIzQzO1x0XHRcdCAgICByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXG4ge1xuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHJocCkpIHtcbiBcdFx0LyogUHJvYmFibGUgZG91YmxlIGNhbGxfc3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4gKi9cbkBAIC0xNDIzLDYgJiM0MzsxNDgxLDcyIEBAIHN0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiBcdCh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiYjNDM7XHRcdFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuJiM0MztcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwID0gdGhpc19jcHVfcHRyKHNzcC1cdTAwM2VzZGEpO1xuJiM0MztcbiYjNDM7XHRcdHJocC1cdTAwM2VmdW5jID0gZnVuYztcbiYjNDM7XHRcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopcmhwLCBcdTAwMjZzZHAtXHUwMDNlZGVmZXJfY2JzKSkge1xuJiM0MztcdFx0XHQvKiBGaXJzdCBkZWZlcnJhbCBvbiB0aGlzIHNyY3VfZGF0YTogY2hhaW4gaXQgZm9yIHRoZSBkcmFpbi4gKi9cbiYjNDM7XHRcdFx0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSB0aGlzX2NwdV9wdHIoXHUwMDI2c3JjdV9kZWZlcik7XG4mIzQzO1xuJiM0MztcdFx0XHRzZHAtXHUwMDNlc3NwID0gc3NwO1xuJiM0MztcdFx0XHRpZiAobGxpc3RfYWRkKFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9saW5rLCBcdTAwMjZzbmRwLVx1MDAzZWxpc3QpKVxuJiM0MztcdFx0XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnNuZHAtXHUwMDNlaXcpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXHUwMDI2XHUwMDI2IGluX25taSgpKTtcbiYjNDM7XG4mIzQzO1x0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jLCBkb19ub3JtKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmUtaXNzdWUgdGhpcyBDUFUmIzM5O3MgZGVmZXJyZWQgY2FsbGJhY2tzLCBnb2luZyBzdHJhaWdodCB0byBzcmN1X2RvX2VucXVldWUoKSBzb1xuJiM0MzsgKiB0aGV5IGNhbm5vdCBkZWZlciBhZ2Fpbi4gIFRoZSBpcnFfd29yayB3YWxrcyBpdHMgLVx1MDAzZWxpc3Qgb2Ygc3JjdV9kYXRhLCBlYWNoXG4mIzQzOyAqIGNhcnJ5aW5nIGl0cyBvd24gLVx1MDAzZWRlZmVyX2Nicy4gIC1cdTAwM2Vsb2NrIGlzIGhlbGQgYWNyb3NzIHRoZSBkcmFpbiBzbyBkcmFpbmVyc1xuJiM0MzsgKiAoaXJxX3dvcmssIHNyY3VfZGVmZXJfZmx1c2goKSBhbmQgc3JjdV9vZmZsaW5lX2RyYWluKCkpIHNlcmlhbGl6ZSBhbmQgbmV2ZXJcbiYjNDM7ICogbGVhdmUgYSBjYWxsYmFjayBvZmYgdGhlIGxpc3RzIHlldCBub3Qgb24gYSBjYWxsYmFjayBsaXN0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X2RlZmVyLCBpdyk7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKnNub2RlLCAqc25leHQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNuZHAtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX3NhZmUoc25vZGUsIHNuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnNuZHAtXHUwMDNlbGlzdCkpIHtcbiYjNDM7XHRcdHN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IGNvbnRhaW5lcl9vZihzbm9kZSwgc3RydWN0IHNyY3VfZGF0YSwgZGVmZXJfbGluayk7XG4mIzQzO1x0XHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCA9IHNkcC1cdTAwM2Vzc3A7XG4mIzQzO1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqY25vZGUsICpjbmV4dDtcbiYjNDM7XG4mIzQzO1x0XHRjbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2c2RwLVx1MDAzZWRlZmVyX2Nicyk7XG4mIzQzO1x0XHRsbGlzdF9mb3JfZWFjaF9zYWZlKGNub2RlLCBjbmV4dCwgY25vZGUpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopY25vZGU7XG4mIzQzO1xuJiM0MztcdFx0XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cdTAwM2VmdW5jLCB0cnVlKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c25kcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERyYWluIEBjcHUmIzM5O3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzOyBjYWxsZWQgZnJvbVxuJiM0MzsgKiByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkgb25jZSBAY3B1IGlzIGRlYWQuICBPbmUgcGFzcyBjb3ZlcnMgZXZlcnlcbiYjNDM7ICogc3JjdV9zdHJ1Y3QsIGFzIHRoZSBwZXItQ1BVIHNyY3VfZGVmZXIgbGlzdCBjaGFpbnMgdGhlbSBhbGwsIGFuZCB0aGVcbiYjNDM7ICogcmUtaXNzdWUgbGFuZHMgb24gdGhlIGN1cnJlbnQgQ1BVJiMzOTtzIHNyY3VfZGF0YS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0c3JjdV9kZWZlcl9kcmFpbihcdTAwMjZwZXJfY3B1KHNyY3VfZGVmZXIsIGNwdSkuaXcpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGNhbGxfc3JjdSgpIC0gUXVldWUgYSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhbiBTUkNVIGdyYWNlIHBlcmlvZFxuICAqIEBzc3A6IHNyY3Vfc3RydWN0IGluIHF1ZXVlIHRoZSBjYWxsYmFja1xuQEAgLTE2NzcsOSAmIzQzOzE4MDEsMTcgQEAgdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4ge1xuIFx0aW50IGNwdTtcbiBcdGludCBpZHg7XG4tXHR1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcztcbiBcbiBcdGNoZWNrX2luaXRfc3JjdV9zdHJ1Y3Qoc3NwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAgVGhlXG4mIzQzO1x0ICogc2hhcmVkIGlycV93b3JrIG1heSBhbHNvIGRyYWluIG90aGVyIHNyY3Vfc3RydWN0cyYjMzk7LCB3aGljaCBpcyBoYXJtbGVzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcmN1X2RlZmVyX2ZsdXNoKCk7XG4mIzQzO1xuJiM0MztcdHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZzc3AtXHUwMDNlc3JjdV9zdXAtXHUwMDNlc3JjdV9iYXJyaWVyX211dGV4KTtcbiBcdGlmIChyY3Vfc2VxX2RvbmUoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEsIHMpKSB7XG4gXHRcdHNtcF9tYigpOyAvKiBGb3JjZSBvcmRlcmluZyBmb2xsb3dpbmcgcmV0dXJuLiAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdGlueS5jIGIva2VybmVsL3JjdS90aW55LmNcbmluZGV4IGRjY2NjZDZiZTk0MTEuLjcxMjQ5ZWFjNjEwMjEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RpbnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90aW55LmNcbkBAIC0xMSw2ICYjNDM7MTEsOCBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuQEAgLTQyLDggJiM0Mzs0NCw4MyBAQCBzdGF0aWMgc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9jdHJsYmxrID0ge1xuIFx0LmdwX3NlcVx0XHQ9IDAgLSAzMDBVTCxcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGV2ZXIgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICh0aGlzXG4mIzQzOyAqIGVucXVldWUsIGNhbGxiYWNrIGludm9jYXRpb24sIGdyYWNlLXBlcmlvZCB3b3JrKSwgc28gZW5xdWV1aW5nIHdoaWxlIGEgbGlzdFxuJiM0MzsgKiBvcGVyYXRpb24gaXMgaW4gZmxpZ2h0IHdvdWxkIGNvcnJ1cHQgaXQuICBEZWZlciB3aGVuZXZlciBpbnRlcnJ1cHRzIGFyZVxuJiM0MzsgKiBkaXNhYmxlZDogdGhlIGNhbGxiYWNrIGdvZXMgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXQgYW4gaXJxX3dvcmsgcmUtaXNzdWVzXG4mIzQzOyAqIGxhdGVyLiAgT25lIGdsb2JhbCBsaXN0IGFuZCBpcnFfd29yayBzdWZmaWNlLCBhcyBUaW55IFJDVSBpcyB1bmlwcm9jZXNzb3IuXG4mIzQzOyAqIE9ubHkga2VybmVscyB3aGVyZSB0aGF0IGNhbiBoYXBwZW4gKENPTkZJR19SQ1VfREVGRVIpIG5lZWQgdGhpcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcbiYjNDM7c3RhdGljIExMSVNUX0hFQUQocmN1X2RlZmVyX2xpc3QpO1xuJiM0MztzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHJjdV9kZWZlcl9pdywgcmN1X2RlZmVyX2RyYWluKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEVucXVldWUgQGhlYWQgb24gdGhlIGNhbGxiYWNrIGxpc3QuICBBbHNvIGNhbGxlZCBieSByY3VfZGVmZXJfZHJhaW4oKSB0b1xuJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xuJiM0MztcdFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmRvdWJsZWZyZWVzKSBcdTAwM2MgNCkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7JXMoKTogRG91YmxlLWZyZWVkIENCICVwLVx1MDAzZSVwUygpISEhICBcJiMzNDssIF9fZnVuY19fLCBoZWFkLCBoZWFkLVx1MDAzZWZ1bmMpO1xuJiM0MztcdFx0XHRtZW1fZHVtcF9vYmooaGVhZCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoZWFkLVx1MDAzZWZ1bmMgPSBmdW5jO1xuJiM0MztcdGhlYWQtXHUwMDNlbmV4dCA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHQqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7XG4mIzQzO1x0cmN1X2N0cmxibGsuY3VydGFpbCA9IFx1MDAyNmhlYWQtXHUwMDNlbmV4dDtcbiYjNDM7XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShpc19pZGxlX3Rhc2soY3VycmVudCkpKSB7XG4mIzQzO1x0XHQvKiBmb3JjZSBzY2hlZHVsaW5nIGZvciByY3VfcXMoKSAqL1xuJiM0MztcdFx0cmVzY2hlZF9jcHUoMCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlLCAqbmV4dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYWxsYmFja3MgaGF2ZSBubyBtdXR1YWwgb3JkZXJpbmcgZ3VhcmFudGVlIGFuZCByY3VfYmFycmllcigpIGhhc1xuJiM0MztcdCAqIGFscmVhZHkgZmx1c2hlZCB1cywgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnJjdV9kZWZlcl9saXN0KSkge1xuJiM0MztcdFx0c3RydWN0IHJjdV9oZWFkICpoZWFkID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7XG4mIzQzO1xuJiM0MztcdFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cdTAwM2VmdW5jKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiYjNDM7e1xuJiM0MztcdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4mIzQzO1x0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCBcdTAwMjZyY3VfZGVmZXJfbGlzdCkpXG4mIzQzO1x0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZyY3VfZGVmZXJfaXcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlycV93b3JrX3N5bmMoXHUwMDI2cmN1X2RlZmVyX2l3KTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG4ge1xuJiM0MztcdC8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgZmlyc3QuICovXG4mIzQzO1x0cmN1X2RlZmVyX2ZsdXNoKCk7XG4gXHR3YWl0X3JjdV9ncChjYWxsX3JjdV9odXJyeSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpO1xuQEAgLTE1NywyOSAmIzQzOzIzNCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3UpO1xuICAqL1xuIHZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxuIHtcbi1cdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHtcbi1cdFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmRvdWJsZWZyZWVzKSBcdTAwM2MgNCkge1xuLVx0XHRcdHByX2VycihcJiMzNDslcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtXHUwMDNlJXBTKCkhISEgIFwmIzM0OywgX19mdW5jX18sIGhlYWQsIGhlYWQtXHUwMDNlZnVuYyk7XG4tXHRcdFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xuLVx0XHR9XG4mIzQzO1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuJiM0MztcdFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4tXHRoZWFkLVx1MDAzZW5leHQgPSBOVUxMO1xuLVxuLVx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuLVx0KnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkO1xuLVx0cmN1X2N0cmxibGsuY3VydGFpbCA9IFx1MDAyNmhlYWQtXHUwMDNlbmV4dDtcbi1cdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiYjNDM7XHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuIFxuLVx0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcbi1cdFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cbi1cdFx0cmVzY2hlZF9jcHUoMCk7XG4tXHR9XG4mIzQzO1x0cmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuYyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5pbmRleCA2MmJmMmJmNTUxZjQ5Li43ZDBhZTk0YmRmMzlmIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvZGVidWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25taS5oXHUwMDNlXG5AQCAtMzE0OCwyMSAmIzQzOzMxNDksMjcgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2Jfb3ZsZChzdHJ1Y3QgcmN1X2RhdGEgKnJkcClcbiBcdHJhd19zcGluX3VubG9ja19yY3Vfbm9kZShybnApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZFxuLV9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGV2ZXIgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIChlbnF1ZXVlLFxuJiM0MzsgKiBjYWxsYmFjayBpbnZvY2F0aW9uLCBncmFjZS1wZXJpb2Qgd29yaykuICBBIGNhbGxfcmN1KCkgd2l0aCBpbnRlcnJ1cHRzIGFscmVhZHlcbiYjNDM7ICogZGlzYWJsZWQgbWF5IGludGVycnVwdCBvbmUgb2YgdGhvc2UsIHNvIF9fY2FsbF9yY3VfY29tbW9uKCkgZGVmZXJzOiB0aGVcbiYjNDM7ICogY2FsbGJhY2sgaXMgc3RhZ2VkIG9uIGEgcGVyLUNQVSBsbGlzdCB0aGF0IGFuIGlycV93b3JrIHJlLWlzc3VlcyBvbmNlXG4mIzQzOyAqIGludGVycnVwdHMgYXJlIG9uLiAgT25seSBDT05GSUdfUkNVX0RFRkVSIGtlcm5lbHMgY2FuIGhpdCB0aGlzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRW5xdWV1ZSBAaGVhZCBvbiB0aGlzIENQVSYjMzk7cyByY3Vfc2VnY2JsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKClcbiYjNDM7ICogdG8gcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsXG4mIzQzOyAqIGNvbmRpdGlvbi4gIEVpdGhlciBjYWxsZXIgbWF5IGhhdmUgaW50ZXJydXB0cyBhbHJlYWR5IGRpc2FibGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4ge1xuIFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGJvb2wgbGF6eTtcbiBcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xuIFxuLVx0LyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi9cbi1cdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XG4tXG4tXHQvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFByb2JhYmxlIGRvdWJsZSBjYWxsX3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay5cbkBAIC0zMjA2LDYgJiM0MzszMjEzLDgzIEBAIF9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuIFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUmUtaXNzdWUgZGVmZXJyZWQgY2FsbGJhY2tzLCBnb2luZyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdFxuJiM0MzsgKiBkZWZlciBhZ2Fpbi4gIGRlZmVyX2xvY2sgaXMgaGVsZCBhY3Jvc3MgbGxpc3RfZGVsX2FsbCgpIGFuZCB0aGUgcmUtaXNzdWUgc29cbiYjNDM7ICogdGhlIGRyYWluZXJzIC0tIHRoaXMgQ1BVJiMzOTtzIGlycV93b3JrLCByY3VfZGVmZXJfZmx1c2goKSBhbmRcbiYjNDM7ICogcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpIC0tIHNlcmlhbGl6ZSBhbmQgbmV2ZXIgbGVhdmUgYSBjYWxsYmFjayBvZmZcbiYjNDM7ICogLVx1MDAzZWRlZmVyX2hlYWQgeWV0IG5vdCBvbiBhIGNhbGxiYWNrIGxpc3QuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gY29udGFpbmVyX29mKGl3LCBzdHJ1Y3QgcmN1X2RhdGEsIGRlZmVyX3dvcmspO1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlLCAqbmV4dDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2hlYWQpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbiYjNDM7XG4mIzQzO1x0XHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBoZWFkLVx1MDAzZWZ1bmMsIGZhbHNlKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU3RhZ2UgQGhlYWQgZm9yIHRoaXMgQ1BVJiMzOTtzIGlycV93b3JrIHdoZW4gY2FsbF9yY3UoKSBjYW5ub3QgZW5xdWV1ZSBub3cuICovXG4mIzQzO3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gdGhpc19jcHVfcHRyKFx1MDAyNnJjdV9kYXRhKTtcbiYjNDM7XG4mIzQzO1x0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbiYjNDM7XHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSlcbiYjNDM7XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl93b3JrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3MgaW50byB0aGUgY2FsbGJhY2sgbGlzdHMgc28gYSBmb2xsb3dpbmdcbiYjNDM7ICogcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gIFRoaXMgcnVucyBiZWZvcmUgcmN1X2JhcnJpZXIoKSBzY2FucyB0aGVcbiYjNDM7ICogbGlzdHMuICBBbiBvbmxpbmUgQ1BVJiMzOTtzIG93biBpcnFfd29yayByZS1pc3N1ZXMgaXRzIGNhbGxiYWNrcywgc28gd2FpdCBpdCBvdXQ7XG4mIzQzOyAqIGFuIG9mZmxpbmUgQ1BVJiMzOTtzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4sIHNvIGRyYWluIGl0cyBsaXN0IGRpcmVjdGx5XG4mIzQzOyAqIG9udG8gdGhpcyBDUFUgaW5zdGVhZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKFx1MDAyNnJjdV9kYXRhLCBjcHUpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjcHVfb25saW5lKGNwdSkpXG4mIzQzO1x0XHRcdGlycV93b3JrX3N5bmMoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7X19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4mIzQzO3tcbiYjNDM7XHQvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqL1xuJiM0MztcdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XG4mIzQzO1xuJiM0MztcdC8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi9cbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuJiM0MztcdFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuJiM0MztcbiYjNDM7XHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBmdW5jLCBsYXp5X2luKTtcbiYjNDM7fVxuJiM0MztcbiAjaWZkZWYgQ09ORklHX1JDVV9MQVpZXG4gc3RhdGljIGJvb2wgZW5hYmxlX3JjdV9sYXp5IF9fcmVhZF9tb3N0bHkgPSAhSVNfRU5BQkxFRChDT05GSUdfUkNVX0xBWllfREVGQVVMVF9PRkYpO1xuIG1vZHVsZV9wYXJhbShlbmFibGVfcmN1X2xhenksIGJvb2wsIDA0NDQpO1xuQEAgLTM4OTYsOCAmIzQzOzM5ODAsMTIgQEAgdm9pZCByY3VfYmFycmllcih2b2lkKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHVuc2lnbmVkIGxvbmcgZ3NlcTtcbiBcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xuLVx0dW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnJjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHM7XG4mIzQzO1xuJiM0MztcdC8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgYmVmb3JlIHNuYXBzaG90dGluZyB0aGUgc2VxdWVuY2UuICovXG4mIzQzO1x0cmN1X2RlZmVyX2ZsdXNoKCk7XG4gXG4mIzQzO1x0cyA9IHJjdV9zZXFfc25hcChcdTAwMjZyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7XG4gXHRyY3VfYmFycmllcl90cmFjZShUUFMoXCYjMzQ7QmVnaW5cJiMzNDspLCAtMSwgcyk7XG4gXG4gXHQvKiBUYWtlIG11dGV4IHRvIHNlcmlhbGl6ZSBjb25jdXJyZW50IHJjdV9iYXJyaWVyKCkgcmVxdWVzdHMuICovXG5AQCAtNDIzMSw2ICYjNDM7NDMxOSwxMCBAQCByY3VfYm9vdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpXG4gXHRyZHAtXHUwMDNlcmN1X29ubF9ncF9zdGF0ZSA9IFJDVV9HUF9DTEVBTkVEO1xuIFx0cmRwLVx1MDAzZWxhc3Rfc2NoZWRfY2xvY2sgPSBqaWZmaWVzO1xuIFx0cmRwLVx1MDAzZWNwdSA9IGNwdTtcbiYjNDM7XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2hlYWQpO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jayk7XG4mIzQzO1x0LyogSGFyZCBpcnFfd29yayBzbyB0aGUgcmUtaXNzdWUgcnVucyBwcm9tcHRseS4gKi9cbiYjNDM7XHRyZHAtXHUwMDNlZGVmZXJfd29yayA9IElSUV9XT1JLX0lOSVRfSEFSRChyY3VfZGVmZXJfZHJhaW4pO1xuIFx0cmN1X2Jvb3RfaW5pdF9ub2NiX3BlcmNwdV9kYXRhKHJkcCk7XG4gfVxuIFxuQEAgLTQ1MjgsNiAmIzQzOzQ2MjAsMTYgQEAgdm9pZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKGludCBjcHUpXG4gXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKFx1MDAyNnJjdV9kYXRhLCBjcHUpO1xuIFx0Ym9vbCBuZWVkd2FrZTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENhbGxiYWNrcyB0aGUgb3V0Z29pbmcgQ1BVIGRlZmVycmVkIGxhdGUgaW4gdGhlIG9mZmxpbmUgcGF0aCAocGFzdCB0aGVcbiYjNDM7XHQgKiBwb2ludCBpdHMgaXJxX3dvcmsgY2FuIHJ1bikgc2l0IG9uIC1cdTAwM2VkZWZlcl9oZWFkLCB3aGljaCB0aGUgLVx1MDAzZWNibGlzdFxuJiM0MztcdCAqIG1pZ3JhdGlvbiBiZWxvdyBkb2VzIG5vdCBjb3Zlci4gIERyYWluIHRoZW0gaGVyZSwgYmVmb3JlIHRoZSBlYXJseVxuJiM0MztcdCAqIHJldHVybnM7IHRoZSByZS1pc3N1ZSBsYW5kcyBvbiB0aGlzIENQVS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuJiM0MztcdC8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJiMzOTtzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcy4gKi9cbiYjNDM7XHRzcmN1X29mZmxpbmVfZHJhaW4oY3B1KTtcbiYjNDM7XG4gXHRpZiAocmN1X3JkcF9pc19vZmZsb2FkZWQocmRwKSlcbiBcdFx0cmV0dXJuO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5oIGIva2VybmVsL3JjdS90cmVlLmhcbmluZGV4IDliODVlZWFhMDA3MWEuLjQxYzJiMjBmMGM4M2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90cmVlLmhcbkBAIC0yMjksNiAmIzQzOzIyOSwxMSBAQCBzdHJ1Y3QgcmN1X2RhdGEge1xuIFx0c3RydWN0IHJjdV9oZWFkIGJhcnJpZXJfaGVhZDtcbiBcdGludCBleHBfd2F0Y2hpbmdfc25hcDtcdFx0LyogRG91YmxlLWNoZWNrIG5lZWQgZm9yIElQSS4gKi9cbiBcbiYjNDM7XHQvKiBEZWZlcnJhbCBvZiBhbiBOTUkvcmVlbnRyYW50IGNhbGxfcmN1KCk7IHNlZSBfX2NhbGxfcmN1X2NvbW1vbigpLiAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2hlYWQ7XG4mIzQzO1x0c3RydWN0IGlycV93b3JrIGRlZmVyX3dvcms7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3QgZGVmZXJfbG9jaztcbiYjNDM7XG4gXHQvKiA1KSBDYWxsYmFjayBvZmZsb2FkaW5nLiAqL1xuICNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVXG4gXHRzdHJ1Y3Qgc3dhaXRfcXVldWVfaGVhZCBub2NiX2NiX3dxOyAvKiBGb3Igbm9jYiBrdGhyZWFkcyB0byBzbGVlcCBvbi4gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY2ZWNkOTNiZTMwZjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmNcbkBAIC0wLDAgJiM0MzsxLDU4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIEV4ZXJjaXNlIHJlLWVudHJ5IGludG8gY2FsbF9zcmN1KCkgZnJvbSBCUEY7IHNlZSBwcm9ncy9yY3VfcmVlbnRyeS5jLiAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cmN1X3JlZW50cnkuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHN5c19waWRmZF9vcGVuKHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN5c2NhbGwoX19OUl9waWRmZF9vcGVuLCBwaWQsIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3JjdV9yZWVudHJ5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmN1X3JlZW50cnkgKnNrZWw7XG4mIzQzO1x0aW50IGVyciwgcGlkZmQgPSAtMSwgbWFwX2ZkO1xuJiM0MztcdF9fdTY0IHZhbCA9IDE7XG4mIzQzO1x0Y3B1X3NldF90IHNldDtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHJjdV9yZWVudHJ5X19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IHJjdV9yZWVudHJ5X19hdHRhY2goc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtza2VsX2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCB0aGUgcmUtZW50cnkgb24gYSBzaW5nbGUgQ1BVLiAqL1xuJiM0MztcdENQVV9aRVJPKFx1MDAyNnNldCk7XG4mIzQzO1x0Q1BVX1NFVCgwLCBcdTAwMjZzZXQpO1xuJiM0MztcdGlmIChzY2hlZF9zZXRhZmZpbml0eSgwLCBzaXplb2Yoc2V0KSwgXHUwMDI2c2V0KSlcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDtzY2hlZF9zZXRhZmZpbml0eVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHBpZGZkID0gc3lzX3BpZGZkX29wZW4oZ2V0cGlkKCksIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKHBpZGZkLCAwLCBcJiMzNDtwaWRmZF9vcGVuXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy50YXNrX3N0Zyk7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkLCBcdTAwMjZ2YWwsIEJQRl9OT0VYSVNUKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2Jvb3RfY3JlYXRlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBBcm0gdGhlIGhhbmRsZXIgZm9yIHRoaXMgdGhyZWFkLCB0aGVuIHRyaWdnZXIgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF9kZWxldGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkKTtcbiYjNDM7XHRBU1NFUlRfT0soZXJyLCBcJiMzNDtib290X2RlbGV0ZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgVHJlZSBTUkNVIGVucXVldWVzIHZpYSByY3Vfc2VnY2JsaXN0X2VucXVldWUoKTsgc2tpcCBlbHNld2hlcmUuICovXG4mIzQzO1x0aWYgKCFza2VsLVx1MDAzZWJzcy1cdTAwM2VoaXRzKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlZW50ZXJlZCwgMSwgXCYjMzQ7cmVlbnRyeV9kZWZlcnJlZFwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAocGlkZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UocGlkZmQpO1xuJiM0MztcdHJjdV9yZWVudHJ5X19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ5MmE5MjdmZjUxYzBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jXG5AQCAtMCwwICYjNDM7MSw0NSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBSZS1lbnRlciBjYWxsX3NyY3UoKSBmcm9tIGEgQlBGIHByb2dyYW0uICBmZW50cnkgb24gcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKClcbiYjNDM7ICogZmlyZXMgaW5zaWRlIGNhbGxfc3JjdSgpJiMzOTtzIGVucXVldWUgKHJlYWNoZWQgZnJvbSBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZCgpXG4mIzQzOyAqIHdpdGggdGhlIHNyY3VfZGF0YSAtXHUwMDNlbG9jayBoZWxkKTsgdGhlIGhhbmRsZXIgdGhlbiBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpXG4mIzQzOyAqIC0tIGl0c2VsZiBjYWxsX3NyY3UoKSBvbiByY3VfdGFza3NfdHJhY2Vfc3JjdV9zdHJ1Y3QgLS0gcmUtZW50ZXJpbmcgdGhlIHNhbWVcbiYjNDM7ICogc3JjdV9kYXRhIG9uIHRoZSBzYW1lIENQVS5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9UQVNLX1NUT1JBR0UpO1xuJiM0MztcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuJiM0Mzt9IHRhc2tfc3RnIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztpbnQgdGFyZ2V0X3BpZDtcbiYjNDM7aW50IGhpdHM7XG4mIzQzO2ludCByZWVudGVyZWQ7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L3JjdV9zZWdjYmxpc3RfZW5xdWV1ZVwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHJlZW50ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlZW50ZXJlZCB8fCAhdGFyZ2V0X3BpZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjdXIgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRpZiAoIWN1ciB8fCBjdXItXHUwMDNlcGlkICE9IHRhcmdldF9waWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogUmUtZW50ZXIgdmlhIGEgdGFzay1zdG9yYWdlIGRlbGV0ZSwgd2hpY2ggY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cbiYjNDM7XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZoaXRzLCAxKTtcbiYjNDM7XHRicGZfdGFza19zdG9yYWdlX2dldChcdTAwMjZ0YXNrX3N0ZywgY3VyLCAwLCBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpO1xuJiM0MztcdGJwZl90YXNrX3N0b3JhZ2VfZGVsZXRlKFx1MDAyNnRhc2tfc3RnLCBjdXIpO1xuJiM0MztcbiYjNDM7XHRyZWVudGVyZWQgPSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tQUk9CRVMmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDssCiAgICAmIzM0O1RSQUNFUE9JTlRTJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O1JDVV9UT1JUVVJFX1RFU1QmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyY3VfYmFycmllciYjMzQ7LAogICAgJiMzNDtzcmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7cmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtzcmN1X29mZmxpbmVfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmFsIG1lY2hhbmlzbSBmb3IgY2FsbF9yY3UoKSBhbmQgY2FsbF9zcmN1KCkgdG8gc2FmZWx5IGhhbmRsZSBjYWxsYmFjayBlbnF1ZXVlcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkIChlLmcuLCBmcm9tIE5NSXMgb3IgQlBGIHByb2dyYW1zKS4gSXQgYWRkcyBsb2NrbGVzcyBsaXN0cyBhbmQgaXJxX3dvcmsgdG8gZGVmZXIgdGhlIGFjdHVhbCBlbnF1ZXVlIHVudGlsIGl0IGlzIHNhZmUuIEl0IGFsc28gdXBkYXRlcyByY3VfYmFycmllcigpLCBzcmN1X2JhcnJpZXIoKSwgYW5kIENQVSBob3RwbHVnIHBhdGhzIHRvIGZsdXNoIHRoZXNlIGRlZmVycmVkIGNhbGxiYWNrcy4gQWRkaXRpb25hbGx5LCBpdCBhZGRzIE5NSSB0ZXN0aW5nIHRvIHJjdXRvcnR1cmUgdXNpbmcgcGVyZiBldmVudHMsIGFuZCBhIEJQRiBzZWxmdGVzdC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgUkNVIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiBGb2N1cyBzeW1ib2xzIGluY2x1ZGUgdGhlIGJhcnJpZXIgYW5kIENQVSBvZmZsaW5lIGZ1bmN0aW9ucyB0aGF0IGRyYWluIHRoZSBuZXcgZGVmZXJyZWQgbGlzdHMuIFJlcXVpcmVkIGNvbmZpZ3MgaW5jbHVkZSBLUFJPQkVTL0ZVTkNUSU9OX1RSQUNFUi9UUkFDRVBPSU5UUyB0byBlbmFibGUgQ09ORklHX1JDVV9ERUZFUiwgUEVSRl9FVkVOVFMgYW5kIFJDVV9UT1JUVVJFX1RFU1QgZm9yIHRoZSByY3V0b3J0dXJlIGNoYW5nZXMsIGFuZCBCUEZfU1lTQ0FMTCBhcyBCUEYgaXMgYSBwcmltYXJ5IHRyaWdnZXIgZm9yIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNlZjM2NzQyYjE3YmViMGU3MzQ2YjU4ZjUxOGJhN2U4NmE3NjY3NDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAwMToxNDozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaAppbmRleCBmYmNmMTNiYzEyZDE1Li40NzI3NWQxODI5NjZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogI2RlZmluZSBfTElOVVhfU1JDVV9USU5ZX0gKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrX3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3dhaXQuaCZndDsKIAogc3RydWN0IHNyY3Vfc3RydWN0IHsKQEAgLTI2LDYgJiM0MzsyNyw4IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7CiAJc3RydWN0IHJjdV9oZWFkICoqc3JjdV9jYl90YWlsOwkvKiBQZW5kaW5nIGNhbGxiYWNrczogVGFpbC4gKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3JjdV93b3JrOwkvKiBGb3IgZHJpdmluZyBncmFjZSBwZXJpb2RzLiAqLwogCXN0cnVjdCBpcnFfd29yayBzcmN1X2lycV93b3JrOwkvKiBEZWZlciBzY2hlZHVsZV93b3JrKCkgdG8gaXJxIHdvcmsuICovCiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NiczsJLyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqLwomIzQzOwlzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfaXc7CQkvKiBSZWdpc3RlcnMgZGVmZXJfY2JzIGxhdGVyLiAqLwogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCiAJc3RydWN0IGxvY2tkZXBfbWFwIGRlcF9tYXA7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCkBAIC0zMyw2ICYjNDM7MzYsNyBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgewogCiB2b2lkIHNyY3VfZHJpdmVfZ3Aoc3RydWN0IHdvcmtfc3RydWN0ICp3cCk7CiB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTsKJiM0Mzt2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppcnFfd29yayk7CiAKICNkZWZpbmUgX19TUkNVX1NUUlVDVF9JTklUKG5hbWUsIF9faWdub3JlZCwgX19faWdub3JlZCwgX19fX2lnbm9yZWQpCVwKIHsJCQkJCQkJCQlcCkBAIC00MCw2ICYjNDM7NDQsOCBAQCB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTsKIAkuc3JjdV9jYl90YWlsID0gJmFtcDtuYW1lLnNyY3VfY2JfaGVhZCwJCQkJXAogCS5zcmN1X3dvcmsgPSBfX1dPUktfSU5JVElBTElaRVIobmFtZS5zcmN1X3dvcmssIHNyY3VfZHJpdmVfZ3ApLAlcCiAJLnNyY3VfaXJxX3dvcmsgPSB7IC5mdW5jID0gc3JjdV90aW55X2lycV93b3JrIH0sCQlcCiYjNDM7CS5kZWZlcl9jYnMgPSBMTElTVF9IRUFEX0lOSVQobmFtZS5kZWZlcl9jYnMpLAkJCVwKJiM0MzsJLmRlZmVyX2l3ID0geyAuZnVuYyA9IHNyY3VfZGVmZXJfZHJhaW4gfSwJCQkJXAogCV9fU1JDVV9ERVBfTUFQX0lOSVQobmFtZSkJCQkJCVwKIH0KIApAQCAtMTMxLDEwICYjNDM7MTM3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogCXN5bmNocm9uaXplX3NyY3Uoc3NwKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKLXsKLQlzeW5jaHJvbml6ZV9zcmN1KHNzcCk7Ci19CiYjNDM7dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3JjdV9leHBlZGl0ZV9jdXJyZW50KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKSB7IH0KICNkZWZpbmUgc3JjdV9jaGVja19yZWFkX2ZsYXZvcihzc3AsIHJlYWRfZmxhdm9yKSBkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmgKaW5kZXggNzVlNTRlNGY5NjNmYS4uMWNlNzU5ZmI3MDk0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaApAQCAtMTMsNiAmIzQzOzEzLDggQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdV9ub2RlX3RyZWUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb21wbGV0aW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrX3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAKIHN0cnVjdCBzcmN1X25vZGU7CiBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Q7CkBAIC00MSw2ICYjNDM7NDMsOCBAQCBzdHJ1Y3Qgc3JjdV9kYXRhIHsKIAlib29sIHNyY3VfY2JsaXN0X2ludm9raW5nOwkJLyogSW52b2tpbmcgdGhlc2UgQ0JzPyAqLwogCXN0cnVjdCB0aW1lcl9saXN0IGRlbGF5X3dvcms7CQkvKiBEZWxheSBmb3IgQ0IgaW52b2tpbmcgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsJCS8qIENvbnRleHQgZm9yIENCIGludm9raW5nLiAqLwomIzQzOwlzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9jYnM7CQkvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovCiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlIGRlZmVyX2xpbms7CQkvKiBMaW5rcyBvbnRvIHRoZSBwZXItQ1BVIGRlZmVycmFsIGRyYWluIGxpc3QgKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9iYXJyaWVyX2hlYWQ7CS8qIEZvciBzcmN1X2JhcnJpZXIoKSB1c2UuICovCiAJc3RydWN0IHJjdV9oZWFkIHNyY3VfZWNfaGVhZDsJCS8qIEZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKSB1c2UuICovCiAJaW50IHNyY3VfZWNfc3RhdGU7CQkJLyogIFN0YXRlIGZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKS4gKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvS2NvbmZpZyBiL2tlcm5lbC9yY3UvS2NvbmZpZwppbmRleCAzMzJkZjdhN2E2MzQ3Li5iYzk0ODNjMGI1ZDg0IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9LY29uZmlnCkBAIC0xNzUsNiAmIzQzOzE3NSwxMiBAQCBjb25maWcgUkNVX1NUQUxMX0NPTU1PTgogY29uZmlnIFJDVV9ORUVEX1NFR0NCTElTVAogCWRlZl9ib29sICggVFJFRV9SQ1UgfHwgVFJFRV9TUkNVIHx8IFRBU0tTX1JDVV9HRU5FUklDICkKIAomIzQzOyMgVGhlIGRlZmVycmFsIChhbmQgdGhlIElSUV9XT1JLIGl0IHVzZXMpIGlzIG9ubHkgbmVlZGVkIHdoZXJlIGNhbGxfcmN1KCkgLwomIzQzOyMgY2FsbF9zcmN1KCkgY2FuIGJlIGludm9rZWQgd2hpbGUgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQuCiYjNDM7Y29uZmlnIFJDVV9ERUZFUgomIzQzOwlkZWZfYm9vbCBIQVZFX05NSSB8fCBLUFJPQkVTIHx8IEZVTkNUSU9OX1RSQUNFUiB8fCBUUkFDRVBPSU5UUwomIzQzOwlzZWxlY3QgSVJRX1dPUksKJiM0MzsKIGNvbmZpZyBSQ1VfRkFOT1VUCiAJaW50ICYjMzQ7VHJlZS1iYXNlZCBoaWVyYXJjaGljYWwgUkNVIGZhbm91dCB2YWx1ZSYjMzQ7CiAJcmFuZ2UgMiA2NCBpZiA2NEJJVApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3UuaCBiL2tlcm5lbC9yY3UvcmN1LmgKaW5kZXggMzlhOWY2ZmE5YTdiMi4uMDM2ZDI4NTE2ZTkyZCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9yY3UuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3JjdS5oCkBAIC01NzIsNiAmIzQzOzU3MiwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza3NfY2JsaXN0X2luaXRfZ2VuZXJpYyh2b2lkKSB7IH0KICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9JTklUCTEKICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9SVU5OSU5HCTIKIAomIzQzOy8qCiYjNDM7ICogU2hvdWxkIGEgY2FsbF9yY3UoKS9jYWxsX3NyY3UoKSBjYWxsYmFjayBiZSBkZWZlcnJlZCByYXRoZXIgdGhhbiBlbnF1ZXVlZAomIzQzOyAqIG5vdz8gIERlZmVyIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkOiBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIG1heQomIzQzOyAqIGJlIGluIGZsaWdodCBvbiB0aGlzIENQVSwgc28gZW5xdWV1aW5nIG5vdyBjb3VsZCBjb3JydXB0IGl0LiAgQnV0IG5vdCB3aGlsZQomIzQzOyAqIHRoZSBzY2hlZHVsZXIgaXMgZG93biAtLSBlYXJseSBib290IGlzIHNpbmdsZS10aHJlYWRlZCBhbmQgY2FuIGNhbGwgdGhpcwomIzQzOyAqIGJlZm9yZSBpbml0X0lSUSgpIG1ha2VzIGlycV93b3JrIHVzYWJsZSAoZS5nLiByY3VfaW5pdCgpJiMzOTtzIHNlbGYtdGVzdHMpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBpcnFzX2Rpc2FibGVkKCkgJmFtcDsmYW1wOyByY3Vfc2NoZWR1bGVyX2FjdGl2ZSAhPSBSQ1VfU0NIRURVTEVSX0lOQUNUSVZFOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUmIzM5O3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovCiYjNDM7dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSk7CiYjNDM7CiBlbnVtIHJjdXRvcnR1cmVfdHlwZSB7CiAJUkNVX0ZMQVZPUiwKIAlSQ1VfVEFTS1NfRkxBVk9SLApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwppbmRleCAzZDBiNTlhN2IwYjM4Li5hMDYxMDBiODIzNTk3IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwpAQCAtNDgsNiAmIzQzOzQ4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC90aWNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfdHJhY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ubWkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGVyZl9ldmVudC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3JjdS5oJiMzNDsKIApAQCAtMTE1LDYgJiM0MzsxMTYsNyBAQCB0b3J0dXJlX3BhcmFtKGludCwgbGVha3BvaW50ZXIsIDAsICYjMzQ7TGVhayBwb2ludGVyIGRlcmVmZXJlbmNlcyBmcm9tIHJlYWRlcnMmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGludCwgbl9iYXJyaWVyX2NicywgMCwgJiMzNDsjIG9mIGNhbGxiYWNrcy9rdGhyZWFkcyBmb3IgYmFycmllciB0ZXN0aW5nJiMzNDspOwogdG9ydHVyZV9wYXJhbShpbnQsIG5fdXBfZG93biwgMzIsICYjMzQ7IyBvZiBjb25jdXJyZW50IHVwL2Rvd24gaHJ0aW1lci1iYXNlZCBSQ1UgcmVhZGVycyYjMzQ7KTsKIHRvcnR1cmVfcGFyYW0oaW50LCBuZmFrZXdyaXRlcnMsIDQsICYjMzQ7TnVtYmVyIG9mIFJDVSBmYWtlIHdyaXRlciB0aHJlYWRzJiMzNDspOwomIzQzO3RvcnR1cmVfcGFyYW0oYm9vbCwgbm1pX2NhbGxzLCB0cnVlLCAmIzM0O0V4ZXJjaXNlIC0mZ3Q7Y2FsbCgpIGZyb20gTk1JIG9uIG5taV9jYXBhYmxlIGZsYXZvcnMmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGludCwgbnJlYWRlcnMsIC0xLCAmIzM0O051bWJlciBvZiBSQ1UgcmVhZGVyIHRocmVhZHMmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGJvb2wsIG53cml0ZXJzLCAxLCAmIzM0O051bWJlciBvZiBSQ1Ugd3JpdGVyIHRocmVhZHMgKDAgb3IgMSkmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGludCwgb2JqZWN0X2RlYnVnLCAwLCAmIzM0O0VuYWJsZSBkZWJ1Zy1vYmplY3QgZG91YmxlIGNhbGxfcmN1KCkgdGVzdGluZyYjMzQ7KTsKQEAgLTIxNiw2ICYjNDM7MjE4LDggQEAgc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdF9mYWlsdXJlOwogc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdHM7CiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX3RpbWVyczsKIHN0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfaXJxczsKJiM0MztzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYWxsOwomIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NiOwogc3RhdGljIGxvbmcgbl9iYXJyaWVyX2F0dGVtcHRzOwogc3RhdGljIGxvbmcgbl9iYXJyaWVyX3N1Y2Nlc3NlczsgLyogZGlkIHJjdV9iYXJyaWVyIHRlc3Qgc3VjY2VlZD8gKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5fcmVhZF9leGl0czsKQEAgLTQzMyw2ICYjNDM7NDM3LDcgQEAgc3RydWN0IHJjdV90b3J0dXJlX29wcyB7CiAJYm9vbCAoKmlzX3Rhc2tfcmN1X2Jvb3N0ZWQpKHZvaWQpOwogCWxvbmcgY2JmbG9vZF9tYXg7CiAJaW50IGlycV9jYXBhYmxlOwomIzQzOwlpbnQgbm1pX2NhcGFibGU7CiAJaW50IGNhbl9ib29zdDsKIAlpbnQgZXh0ZW5kYWJsZXM7CiAJaW50IHNsb3dfZ3BzOwpAQCAtNjQ2LDYgJiM0Mzs2NTEsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyByY3Vfb3BzID0gewogCS5leHRlbmRhYmxlcwkJPSBSQ1VUT1JUVVJFX01BWF9FWFRFTkQsCiAJLmRlYnVnX29iamVjdHMJCT0gMSwKIAkuc3RhcnRfcG9sbF9pcnFzb2ZmCT0gMSwKJiM0MzsJLm5taV9jYXBhYmxlCQk9IDEsCiAJLm5hbWUJCQk9ICYjMzQ7cmN1JiMzNDsKIH07CiAKQEAgLTkzNiw2ICYjNDM7OTQyLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdV9vcHMgPSB7CiAJLmRlYnVnX29iamVjdHMJPSAxLAogCS5oYXZlX3VwX2Rvd24JPSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpCiAJCQkJPyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLAomIzQzOwkubm1pX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICYjMzQ7c3JjdSYjMzQ7CiB9OwogCkBAIC05OTksNiAmIzQzOzEwMDYsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1ZF9vcHMgPSB7CiAJLmRlYnVnX29iamVjdHMJPSAxLAogCS5oYXZlX3VwX2Rvd24JPSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpCiAJCQkJPyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLAomIzQzOwkubm1pX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICYjMzQ7c3JjdWQmIzM0OwogfTsKIApAQCAtMTI2Myw2ICYjNDM7MTI3MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHRhc2tzX3RyYWNpbmdfb3BzID0gewogCS5jYmZsb29kX21heAk9IDUwMDAwLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLnNsb3dfZ3BzCT0gMSwKJiM0MzsJLm5taV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAmIzM0O3Rhc2tzLXRyYWNpbmcmIzM0OwogfTsKIApAQCAtMjY1MywxMiAmIzQzOzI2NjIsOTcgQEAgc3RhdGljIGJvb2wgcmN1X3RvcnR1cmVfb25lX3JlYWQoc3RydWN0IHRvcnR1cmVfcmFuZG9tX3N0YXRlICp0cnNwLCBsb25nIG15aWQpCiAKIHN0YXRpYyBERUZJTkVfVE9SVFVSRV9SQU5ET01fUEVSQ1BVKHJjdV90b3J0dXJlX3RpbWVyX3JhbmQpOwogCiYjNDM7LyoKJiM0MzsgKiBFeGVyY2lzZSAtJmd0O2NhbGwoKSBmcm9tIE5NSSBjb250ZXh0IGZvciBmbGF2b3JzIHRoYXQgYWR2ZXJ0aXNlIC0mZ3Q7bm1pX2NhcGFibGUuCiYjNDM7ICogQSBwZXItQ1BVIGhhcmR3YXJlIHBlcmYgY291bnRlciBvdmVyZmxvd3MgaW50byBhbiBOTUkgLS0gYSByZWFsIE5NSSBvbiB4ODYsCiYjNDM7ICogb3IgYSBwc2V1ZG8tTk1JIG9uIGFybTY0IGJvb3RlZCB3aXRoIGlycWNoaXAuZ2ljdjNfcHNldWRvX25taT0xIC0tIGFuZCBpdHMKJiM0MzsgKiBoYW5kbGVyIHN1Ym1pdHMgb25lIHByZWFsbG9jYXRlZCBjYWxsYmFjayB2aWEgLSZndDtjYWxsKCkuICBPbmx5IG9uZSBjYWxsYmFjayBpcwomIzQzOyAqIGluIGZsaWdodCBhdCBhIHRpbWUgKGd1YXJkZWQgYnkgYW4gYXRvbWljKSwgd2hpY2ggYXZvaWRzIGFsbG9jYXRpbmcgaW4gTk1JCiYjNDM7ICogYW5kIGlzIGVub3VnaCB0byBleGVyY2lzZSB0aGUgZGVmZXJyYWwuICBUaGlzIG1pcnJvcnMgaG93IEJQRiBwcm9ncmFtcyByZWFjaAomIzQzOyAqIC0mZ3Q7Y2FsbCgpIGZyb20gTk1JLiAgUmVxdWlyZXMgYSBoYXJkd2FyZSBQTVU7IHdoZW4gdGhlIG92ZXJmbG93IGlzIG5vdCBhbiBOTUkKJiM0MzsgKiB0aGUgaGFuZGxlciBkb2VzIG5vdGhpbmcuCiYjNDM7ICovCiYjNDM7I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0gewomIzQzOwkudHlwZQkJPSBQRVJGX1RZUEVfSEFSRFdBUkUsCiYjNDM7CS5jb25maWcJCT0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLAomIzQzOwkuc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksCiYjNDM7CS5waW5uZWQJCT0gMSwKJiM0MzsJLmRpc2FibGVkCT0gMSwKJiM0MzsJLmZyZXEJCT0gMSwKJiM0MzsJLnNhbXBsZV9mcmVxCT0gMTAwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudCAqKnJjdV90b3J0dXJlX25taV9ldmVudHM7CiYjNDM7c3RhdGljIHN0cnVjdCByY3VfaGVhZCByY3VfdG9ydHVyZV9ubWlfcmg7CiYjNDM7c3RhdGljIGF0b21pY190IHJjdV90b3J0dXJlX25taV9yaF9pbnVzZTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApCiYjNDM7ewomIzQzOwlhdG9taWNfbG9uZ19pbmMoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYik7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAomIzQzOwkJCQkgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAomIzQzOwkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQomIzQzO3sKJiM0MzsJaWYgKCFpbl9ubWkoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJaWYgKGN1cl9vcHMtJmd0O2NhbGwgJmFtcDsmYW1wOyAhYXRvbWljX3hjaGcoJmFtcDtyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDEpKSB7CiYjNDM7CQljdXJfb3BzLSZndDtjYWxsKCZhbXA7cmN1X3RvcnR1cmVfbm1pX3JoLCByY3VfdG9ydHVyZV9ubWlfY2IpOwomIzQzOwkJYXRvbWljX2xvbmdfaW5jKCZhbXA7bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFubWlfY2FsbHMgfHwgIWN1cl9vcHMtJmd0O25taV9jYXBhYmxlIHx8ICFjdXJfb3BzLSZndDtjYWxsKQomIzQzOwkJcmV0dXJuOwomIzQzOwlyY3VfdG9ydHVyZV9ubWlfZXZlbnRzID0ga2NhbGxvYyhucl9jcHVfaWRzLCBzaXplb2YoKnJjdV90b3J0dXJlX25taV9ldmVudHMpLAomIzQzOwkJCQkJIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiYjNDM7CQlldmVudCA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKCZhbXA7cmN1X3RvcnR1cmVfbm1pX2F0dHIsIGNwdSwKJiM0MzsJCQkJCQkJIE5VTEwsIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdywgTlVMTCk7CiYjNDM7CQlpZiAoSVNfRVJSKGV2ZW50KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSA9IGV2ZW50OwomIzQzOwkJcGVyZl9ldmVudF9lbmFibGUoZXZlbnQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKJiM0MzsJCWlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcGVyZl9ldmVudF9kaXNhYmxlKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7CiYjNDM7CQlwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7CiYjNDM7CX0KJiM0MzsJa2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7CiYjNDM7CXJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMOwomIzQzO30KJiM0MzsjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkgeyB9CiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZCkgeyB9CiYjNDM7I2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KJiM0MzsKIC8qCiAgKiBSQ1UgdG9ydHVyZSByZWFkZXIgZnJvbSB0aW1lciBoYW5kbGVyLiAgRGVyZWZlcmVuY2VzIHJjdV90b3J0dXJlX2N1cnJlbnQsCiAgKiBpbmNyZW1lbnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgcGlwZWxpbmUgYXJyYXkuICBUaGUKICAqIGNvdW50ZXIgaW4gdGhlIGVsZW1lbnQgc2hvdWxkIG5ldmVyIGJlIGdyZWF0ZXIgdGhhbiAxLCBvdGhlcndpc2UsIHRoZQogICogUkNVIGltcGxlbWVudGF0aW9uIGlzIGJyb2tlbi4KICAqLwomIzQzOwogc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnVudXNlZCkKIHsKIAlXQVJOX09OX09OQ0UoIWluX3NlcnZpbmdfc29mdGlycSgpKTsKQEAgLTMwNDEsNiAmIzQzOzMxMzUsOSBAQCByY3VfdG9ydHVyZV9zdGF0c19wcmludCh2b2lkKQogCQlkYXRhX3JhY2Uobl9iYXJyaWVyX2F0dGVtcHRzKSwKIAkJZGF0YV9yYWNlKG5fcmN1X3RvcnR1cmVfYmFycmllcl9lcnJvcikpOwogCXByX2NvbnQoJiMzNDtyZWFkLWV4aXRzOiAlbGQgJiMzNDssIGRhdGFfcmFjZShuX3JlYWRfZXhpdHMpKTsgLy8gU3RhdGlzdGljLgomIzQzOwlwcl9jb250KCYjMzQ7bm1pLWNhbGxzOiAlbGQgbm1pLWNiczogJWxkICYjMzQ7LAomIzQzOwkJYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLAomIzQzOwkJYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NiKSk7CiAJcHJfY29udCgmIzM0O25vY2ItdG9nZ2xlczogJWxkOiVsZCAmIzM0OywKIAkJYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fbm9jYl9vZmZsb2FkKSwgYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fbm9jYl9kZW9mZmxvYWQpKTsKIAlwcl9jb250KCYjMzQ7Z3B3cmFwczogJWxkXG4mIzM0Oywgbl9ncHdyYXBzKTsKQEAgLTQzMTUsNiAmIzQzOzQ0MTIsOCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpCiAJCWtmcmVlKHJlYWRlcl90YXNrcyk7CiAJCXJlYWRlcl90YXNrcyA9IE5VTEw7CiAJfQomIzQzOwkvKiBEaXNhYmxlIHRoZSBwZXJmIGNvdW50ZXJzIChhbmQgdGh1cyB0aGUgTk1JIC0mZ3Q7Y2FsbCgpIGZpcmluZykgbm93LiAqLwomIzQzOwlyY3VfdG9ydHVyZV9ubWlfY2xlYW51cCgpOwogCWtmcmVlKHJjdV90b3J0dXJlX3JlYWRlcl9tYmNoayk7CiAJcmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrID0gTlVMTDsKIApAQCAtNDM0NCw2ICYjNDM7NDQ0MywyMCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpCiAJCXByX2luZm8oJiMzNDslczogSW52b2tpbmcgJXBTKCkuXG4mIzM0OywgX19mdW5jX18sIGN1cl9vcHMtJmd0O2NiX2JhcnJpZXIpOwogCQljdXJfb3BzLSZndDtjYl9iYXJyaWVyKCk7CiAJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBjYl9iYXJyaWVyKCkgYWJvdmUgZHJhaW5lZCBldmVyeSBkZWZlcnJlZCBOTUkgLSZndDtjYWxsKCkgY2FsbGJhY2ssIHNvIHRoZQomIzQzOwkgKiBjb3VudCBpc3N1ZWQgZnJvbSBOTUkgbXVzdCBlcXVhbCB0aGUgY291bnQgaW52b2tlZDsgYSBtaXNtYXRjaCBtZWFucyBhCiYjNDM7CSAqIGNhbGxiYWNrIHdhcyBsb3N0LgomIzQzOwkgKi8KJiM0MzsJaWYgKGF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYWxsKSAhPQomIzQzOwkgICAgYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NiKSkgewomIzQzOwkJcHJfYWxlcnQoJiMzNDslczogTk1JIC0mZ3Q7Y2FsbCgpIGxvc3QgYSBjYWxsYmFjazogaXNzdWVkICVsZCBpbnZva2VkICVsZFxuJiMzNDssCiYjNDM7CQkJIF9fZnVuY19fLCBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksCiYjNDM7CQkJIGF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYikpOwomIzQzOwkJYXRvbWljX2luYygmYW1wO25fcmN1X3RvcnR1cmVfZXJyb3IpOwomIzQzOwl9CiYjNDM7CiAJaWYgKGN1cl9vcHMtJmd0O2NsZWFudXAgIT0gTlVMTCkKIAkJY3VyX29wcy0mZ3Q7Y2xlYW51cCgpOwogCkBAIC00Nzc2LDYgJiM0Mzs0ODg5LDggQEAgcmN1X3RvcnR1cmVfaW5pdCh2b2lkKQogCQlmaXJzdGVyciA9IC1FTk9NRU07CiAJCWdvdG8gdW53aW5kOwogCX0KJiM0MzsJLyogQXJtIHRoZSBwZXItQ1BVIHBlcmYgY291bnRlcnMgdGhhdCBkcml2ZSAtJmd0O2NhbGwoKSBmcm9tIE5NSS4gKi8KJiM0MzsJcmN1X3RvcnR1cmVfbm1pX2luaXQoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJlYWxyZWFkZXJzOyBpJiM0MzsmIzQzOykgewogCQlyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGtbaV0ucnRjX2Noa3JkciA9IC0xOwogCQlmaXJzdGVyciA9IHRvcnR1cmVfY3JlYXRlX2t0aHJlYWQocmN1X3RvcnR1cmVfcmVhZGVyLCAodm9pZCAqKWksCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmMKaW5kZXggNTU4YmE4ZDMxNmRiNi4uMDNhMDdhMWYzYTMwYiAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcmVlbXB0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfd2FpdC5oJmd0OwpAQCAtNDMsNiAmIzQzOzQ0LDggQEAgc3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIAlJTklUX1dPUksoJmFtcDtzc3AtJmd0O3NyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtzc3AtJmd0O3NyY3Vfd29yay5lbnRyeSk7CiAJaW5pdF9pcnFfd29yaygmYW1wO3NzcC0mZ3Q7c3JjdV9pcnFfd29yaywgc3JjdV90aW55X2lycV93b3JrKTsKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7c3NwLSZndDtkZWZlcl9jYnMpOwomIzQzOwlpbml0X2lycV93b3JrKCZhbXA7c3NwLSZndDtkZWZlcl9pdywgc3JjdV9kZWZlcl9kcmFpbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxMywxMSAmIzQzOzIxNiwxMSBAQCBzdGF0aWMgdm9pZCBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIH0KIAogLyoKLSAqIEVucXVldWUgYW4gU1JDVSBjYWxsYmFjayBvbiB0aGUgc3BlY2lmaWVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZSwKLSAqIGluaXRpYXRpbmcgZ3JhY2UtcGVyaW9kIHByb2Nlc3NpbmcgaWYgaXQgaXMgbm90IGFscmVhZHkgcnVubmluZy4KJiM0MzsgKiBFbnF1ZXVlIEByaHAgb24gdGhlIGNhbGxiYWNrIGxpc3QuICBBbHNvIGNhbGxlZCBieSBzcmN1X2RlZmVyX2RyYWluKCkgdG8KJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLgogICovCi12b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsCi0JICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpCiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kb19lbnF1ZXVlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKJiM0MzsJCQkgICAgcmN1X2NhbGxiYWNrX3QgZnVuYykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yMzEsNiAmIzQzOzIzNCwzOSBAQCB2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsCiAJc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3NwKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQomIzQzOwomIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KQomIzQzO3sKJiM0MzsJc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X3N0cnVjdCwgZGVmZXJfaXcpOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENhbGxiYWNrcyBoYXZlIG5vIG11dHVhbCBvcmRlcmluZyBndWFyYW50ZWUgYW5kIHNyY3VfYmFycmllcigpIGhhcwomIzQzOwkgKiBhbHJlYWR5IGZsdXNoZWQgdXMsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLgomIzQzOwkgKi8KJiM0MzsJbGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKCZhbXA7c3NwLSZndDtkZWZlcl9jYnMpKSB7CiYjNDM7CQlzdHJ1Y3QgcmN1X2hlYWQgKnJocCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlOwomIzQzOwomIzQzOwkJc3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtJmd0O2Z1bmMpOwomIzQzOwl9CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfZGVmZXJfZHJhaW4pOwomIzQzOwomIzQzO3ZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKJiM0MzsJICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpCiYjNDM7ewomIzQzOwlpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7CiYjNDM7CQlyaHAtJmd0O2Z1bmMgPSBmdW5jOwomIzQzOwkJaWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsICZhbXA7c3NwLSZndDtkZWZlcl9jYnMpKQomIzQzOwkJCWlycV93b3JrX3F1ZXVlKCZhbXA7c3NwLSZndDtkZWZlcl9pdyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovCiYjNDM7CVdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpICZhbXA7JmFtcDsgaW5fbm1pKCkpOwomIzQzOwomIzQzOwlzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMpOwomIzQzO30KIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfc3JjdSk7CiAKIC8qCkBAIC0yNjAsNiAmIzQzOzI5NiwxNSBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTsKIAomIzQzOy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBmb3IgYWxsIGluLWZsaWdodCBvbmVzLiAqLwomIzQzO3ZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQomIzQzO3sKJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpCiYjNDM7CQlpcnFfd29ya19zeW5jKCZhbXA7c3NwLSZndDtkZWZlcl9pdyk7CiYjNDM7CXN5bmNocm9uaXplX3NyY3Uoc3NwKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9iYXJyaWVyKTsKJiM0MzsKIC8qCiAgKiBnZXRfc3RhdGVfc3luY2hyb25pemVfc3JjdSAtIFByb3ZpZGUgYW4gZW5kLW9mLWdyYWNlLXBlcmlvZCBjb29raWUKICAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9zcmN1dHJlZS5jIGIva2VybmVsL3JjdS9zcmN1dHJlZS5jCmluZGV4IDMwNDExMjY3NGU4YTIuLmI5ZmU1N2ZmOTEwMDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcGVyY3B1LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJlZW1wdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfd2FpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc21wLmgmZ3Q7CkBAIC03OSw2ICYjNDM7ODAsNDYgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19zcmN1KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgdm9pZCBzcmN1X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqd29yayk7CiBzdGF0aWMgdm9pZCBzcmN1X2RlbGF5X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTsKIAomIzQzO3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLiAgVGhlIGlycV93b3JrIGlzIGdsb2JhbCAoc2hhcmVkIGJ5IGV2ZXJ5CiYjNDM7ICogc3JjdV9zdHJ1Y3QpLCBzbyBpdCBtdXN0IGZpbmQgd2hpY2ggc3JjdV9zdHJ1Y3RzIGRlZmVycmVkIGNhbGxiYWNrczogYQomIzQzOyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJiMzOTtzIC0mZ3Q7ZGVmZXJfY2JzLCBhbmQgdGhhdCBzcmN1X2RhdGEgaXMKJiM0MzsgKiBjaGFpbmVkICgtJmd0O2RlZmVyX2xpbmspIG9udG8gdGhpcyBwZXItQ1BVIC0mZ3Q7bGlzdCB0aGF0IHRoZSBpcnFfd29yayB3YWxrcy4KJiM0MzsgKi8KJiM0MztzdHJ1Y3Qgc3JjdV9kZWZlciB7CiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkCWxpc3Q7CiYjNDM7CXN0cnVjdCBpcnFfd29yawkJaXc7CiYjNDM7CXJhd19zcGlubG9ja190CQlsb2NrOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzcmN1X2RlZmVyLCBzcmN1X2RlZmVyKSA9IHsKJiM0MzsJLmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoc3JjdV9kZWZlci5sb2NrKSwKJiM0MzsJLml3ID0gSVJRX1dPUktfSU5JVF9IQVJEKHNyY3VfZGVmZXJfZHJhaW4pLAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZWdpc3RlciBwZW5kaW5nIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcyBzbyBhIGZvbGxvd2luZyBzcmN1X2JhcnJpZXIoKQomIzQzOyAqIHdhaXRzIGZvciB0aGVtLiAgQW4gb25saW5lIENQVSYjMzk7cyBvd24gaXJxX3dvcmsgcmUtaXNzdWVzIGl0cyBjYWxsYmFja3MsIHNvIHdhaXQKJiM0MzsgKiBpdCBvdXQ7IGFuIG9mZmxpbmUgQ1BVJiMzOTtzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4sIHNvIGRyYWluIGl0cyBsaXN0CiYjNDM7ICogZGlyZWN0bHkgb250byB0aGlzIENQVSBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZmx1c2godm9pZCkKJiM0Mzt7CiYjNDM7CWludCBjcHU7CiYjNDM7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewomIzQzOwkJaWYgKGNwdV9vbmxpbmUoY3B1KSkKJiM0MzsJCQlpcnFfd29ya19zeW5jKCZhbXA7cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzcmN1X2RlZmVyX2RyYWluKCZhbXA7cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qCiAgKiBJbml0aWFsaXplIFNSQ1UgcGVyLUNQVSBkYXRhLiAgTm90ZSB0aGF0IHN0YXRpY2FsbHkgYWxsb2NhdGVkCiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmVzIG1pZ2h0IGFscmVhZHkgaGF2ZSBzcmN1X3JlYWRfbG9jaygpIGFuZApAQCAtMTA3LDYgJiM0MzsxNDgsMTEgQEAgc3RhdGljIHZvaWQgaW5pdF9zcmN1X3N0cnVjdF9kYXRhKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogCQlzZHAtJmd0O2NwdSA9IGNwdTsKIAkJSU5JVF9XT1JLKCZhbXA7c2RwLSZndDt3b3JrLCBzcmN1X2ludm9rZV9jYWxsYmFja3MpOwogCQl0aW1lcl9zZXR1cCgmYW1wO3NkcC0mZ3Q7ZGVsYXlfd29yaywgc3JjdV9kZWxheV90aW1lciwgMCk7CiYjNDM7CQkvKgomIzQzOwkJICogLSZndDtkZWZlcl9jYnMgYW5kIC0mZ3Q7ZGVmZXJfbGluayBhcmUgdmFsaWQgd2hlbiB6ZXJvZWQgYW5kIGFyZSBub3QKJiM0MzsJCSAqIHJlaW5pdGlhbGl6ZWQgaGVyZSwgbGVzdCB3ZSBjbG9iYmVyIGNhbGxiYWNrcyBhIHJlZW50cmFudAomIzQzOwkJICogY2FsbF9zcmN1KCkgYWxyZWFkeSBzdGFnZWQuICBTZWUgX19jYWxsX3NyY3UoKS4KJiM0MzsJCSAqLwogCQlzZHAtJmd0O3NzcCA9IHNzcDsKIAl9CiB9CkBAIC02OTcsNiAmIzQzOzc0Myw4IEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIAkJcmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovCiAJLyogV2FpdCBmb3IgaXJxX3dvcmsgdG8gZmluaXNoIGZpcnN0IGFzIGl0IG1heSBxdWV1ZSBhIG5ldyB3b3JrLiAqLwogCWlycV93b3JrX3N5bmMoJmFtcDtzdXAtJmd0O2lycV93b3JrKTsKJiM0MzsJLyogRHJhaW4gYW55IGRlZmVycmVkIGNhbGxiYWNrcyAoc2hhcmVkIGlycV93b3JrKSBiZWZvcmUgZnJlZWluZyAtJmd0O3NkYS4gKi8KJiM0MzsJc3JjdV9kZWZlcl9mbHVzaCgpOwogCWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO3N1cC0mZ3Q7d29yayk7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzdHJ1Y3Qgc3JjdV9kYXRhICpzZHAgPSBwZXJfY3B1X3B0cihzc3AtJmd0O3NkYSwgY3B1KTsKQEAgLTE0MTAsOCAmIzQzOzE0NTgsMTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsCiAgKiBzcmN1X3JlYWRfbG9jaygpLCBhbmQgc3JjdV9yZWFkX3VubG9jaygpIHRoYXQgYXJlIGFsbCBwYXNzZWQgdGhlIHNhbWUKICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZS4KICAqLwotc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAotCQkJcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKQomIzQzOy8qCiYjNDM7ICogVGhlIHNyY3VfY2JsaXN0IGFuZCB0aGUgc3JjdV9ub2RlIHRyZWUgYXJlIG9ubHkgZXZlciBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMKJiM0MzsgKiBkaXNhYmxlZCAoc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKSBlbnF1ZXVlcyB1bmRlciByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSBhbmQKJiM0MzsgKiBtYXkgd2FsayB0aGUgdHJlZTsgY2FsbGJhY2sgaW52b2NhdGlvbiBhbmQgZ3JhY2UtcGVyaW9kIHdvcmsgbGlrZXdpc2UpLiAgU28KJiM0MzsgKiBsaWtlIGNhbGxfcmN1KCksIGVucXVldWluZyB3aGlsZSBhIGxpc3Qgb3BlcmF0aW9uIGlzIGluIGZsaWdodCBvbiB0aGlzIENQVQomIzQzOyAqIHdvdWxkIGNvcnJ1cHQgaXQgb3IgZGVhZGxvY2sgLS0gZS5nLiBjYWxsX3JjdV90YXNrc190cmFjZSgpLCB3aGljaCBpcwomIzQzOyAqIGNhbGxfc3JjdSgpIG9uIGEgZGVkaWNhdGVkIHNyY3Vfc3RydWN0LCBmcm9tIGEgQlBGIHByb2dyYW0uICBfX2NhbGxfc3JjdSgpCiYjNDM7ICogZGVmZXJzIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCB2aWEgYSBwZXItQ1BVIGlycV93b3JrOyBvbmx5IGtlcm5lbHMKJiM0MzsgKiB3aGVyZSB0aGF0IGNhbiBoYXBwZW4gKENPTkZJR19SQ1VfREVGRVIpIG5lZWQgdGhpcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAomIzQzOwkJCSAgICByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pCiB7CiAJaWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHJocCkpIHsKIAkJLyogUHJvYmFibGUgZG91YmxlIGNhbGxfc3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4gKi8KQEAgLTE0MjMsNiAmIzQzOzE0ODEsNzIgQEAgc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAogCSh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKJiM0MzsJCQlyY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pCiYjNDM7ewomIzQzOwlpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7CiYjNDM7CQlzdHJ1Y3Qgc3JjdV9kYXRhICpzZHAgPSB0aGlzX2NwdV9wdHIoc3NwLSZndDtzZGEpOwomIzQzOwomIzQzOwkJcmhwLSZndDtmdW5jID0gZnVuYzsKJiM0MzsJCWlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopcmhwLCAmYW1wO3NkcC0mZ3Q7ZGVmZXJfY2JzKSkgewomIzQzOwkJCS8qIEZpcnN0IGRlZmVycmFsIG9uIHRoaXMgc3JjdV9kYXRhOiBjaGFpbiBpdCBmb3IgdGhlIGRyYWluLiAqLwomIzQzOwkJCXN0cnVjdCBzcmN1X2RlZmVyICpzbmRwID0gdGhpc19jcHVfcHRyKCZhbXA7c3JjdV9kZWZlcik7CiYjNDM7CiYjNDM7CQkJc2RwLSZndDtzc3AgPSBzc3A7CiYjNDM7CQkJaWYgKGxsaXN0X2FkZCgmYW1wO3NkcC0mZ3Q7ZGVmZXJfbGluaywgJmFtcDtzbmRwLSZndDtsaXN0KSkKJiM0MzsJCQkJaXJxX3dvcmtfcXVldWUoJmFtcDtzbmRwLSZndDtpdyk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovCiYjNDM7CVdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpICZhbXA7JmFtcDsgaW5fbm1pKCkpOwomIzQzOwomIzQzOwlzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMsIGRvX25vcm0pOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlLWlzc3VlIHRoaXMgQ1BVJiMzOTtzIGRlZmVycmVkIGNhbGxiYWNrcywgZ29pbmcgc3RyYWlnaHQgdG8gc3JjdV9kb19lbnF1ZXVlKCkgc28KJiM0MzsgKiB0aGV5IGNhbm5vdCBkZWZlciBhZ2Fpbi4gIFRoZSBpcnFfd29yayB3YWxrcyBpdHMgLSZndDtsaXN0IG9mIHNyY3VfZGF0YSwgZWFjaAomIzQzOyAqIGNhcnJ5aW5nIGl0cyBvd24gLSZndDtkZWZlcl9jYnMuICAtJmd0O2xvY2sgaXMgaGVsZCBhY3Jvc3MgdGhlIGRyYWluIHNvIGRyYWluZXJzCiYjNDM7ICogKGlycV93b3JrLCBzcmN1X2RlZmVyX2ZsdXNoKCkgYW5kIHNyY3Vfb2ZmbGluZV9kcmFpbigpKSBzZXJpYWxpemUgYW5kIG5ldmVyCiYjNDM7ICogbGVhdmUgYSBjYWxsYmFjayBvZmYgdGhlIGxpc3RzIHlldCBub3Qgb24gYSBjYWxsYmFjayBsaXN0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzcmN1X2RlZmVyICpzbmRwID0gY29udGFpbmVyX29mKGl3LCBzdHJ1Y3Qgc3JjdV9kZWZlciwgaXcpOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqc25vZGUsICpzbmV4dDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7c25kcC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKHNub2RlLCBzbmV4dCwgbGxpc3RfZGVsX2FsbCgmYW1wO3NuZHAtJmd0O2xpc3QpKSB7CiYjNDM7CQlzdHJ1Y3Qgc3JjdV9kYXRhICpzZHAgPSBjb250YWluZXJfb2Yoc25vZGUsIHN0cnVjdCBzcmN1X2RhdGEsIGRlZmVyX2xpbmspOwomIzQzOwkJc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBzZHAtJmd0O3NzcDsKJiM0MzsJCXN0cnVjdCBsbGlzdF9ub2RlICpjbm9kZSwgKmNuZXh0OwomIzQzOwomIzQzOwkJY25vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7c2RwLSZndDtkZWZlcl9jYnMpOwomIzQzOwkJbGxpc3RfZm9yX2VhY2hfc2FmZShjbm9kZSwgY25leHQsIGNub2RlKSB7CiYjNDM7CQkJc3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopY25vZGU7CiYjNDM7CiYjNDM7CQkJc3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtJmd0O2Z1bmMsIHRydWUpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c25kcC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERyYWluIEBjcHUmIzM5O3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzOyBjYWxsZWQgZnJvbQomIzQzOyAqIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKSBvbmNlIEBjcHUgaXMgZGVhZC4gIE9uZSBwYXNzIGNvdmVycyBldmVyeQomIzQzOyAqIHNyY3Vfc3RydWN0LCBhcyB0aGUgcGVyLUNQVSBzcmN1X2RlZmVyIGxpc3QgY2hhaW5zIHRoZW0gYWxsLCBhbmQgdGhlCiYjNDM7ICogcmUtaXNzdWUgbGFuZHMgb24gdGhlIGN1cnJlbnQgQ1BVJiMzOTtzIHNyY3VfZGF0YS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KQomIzQzO3sKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlzcmN1X2RlZmVyX2RyYWluKCZhbXA7cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGNhbGxfc3JjdSgpIC0gUXVldWUgYSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhbiBTUkNVIGdyYWNlIHBlcmlvZAogICogQHNzcDogc3JjdV9zdHJ1Y3QgaW4gcXVldWUgdGhlIGNhbGxiYWNrCkBAIC0xNjc3LDkgJiM0MzsxODAxLDE3IEBAIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogewogCWludCBjcHU7CiAJaW50IGlkeDsKLQl1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoJmFtcDtzc3AtJmd0O3NyY3Vfc3VwLSZndDtzcmN1X2JhcnJpZXJfc2VxKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzOwogCiAJY2hlY2tfaW5pdF9zcmN1X3N0cnVjdChzc3ApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAgVGhlCiYjNDM7CSAqIHNoYXJlZCBpcnFfd29yayBtYXkgYWxzbyBkcmFpbiBvdGhlciBzcmN1X3N0cnVjdHMmIzM5Oywgd2hpY2ggaXMgaGFybWxlc3MuCiYjNDM7CSAqLwomIzQzOwlzcmN1X2RlZmVyX2ZsdXNoKCk7CiYjNDM7CiYjNDM7CXMgPSByY3Vfc2VxX3NuYXAoJmFtcDtzc3AtJmd0O3NyY3Vfc3VwLSZndDtzcmN1X2JhcnJpZXJfc2VxKTsKIAltdXRleF9sb2NrKCZhbXA7c3NwLSZndDtzcmN1X3N1cC0mZ3Q7c3JjdV9iYXJyaWVyX211dGV4KTsKIAlpZiAocmN1X3NlcV9kb25lKCZhbXA7c3NwLSZndDtzcmN1X3N1cC0mZ3Q7c3JjdV9iYXJyaWVyX3NlcSwgcykpIHsKIAkJc21wX21iKCk7IC8qIEZvcmNlIG9yZGVyaW5nIGZvbGxvd2luZyByZXR1cm4uICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RpbnkuYyBiL2tlcm5lbC9yY3UvdGlueS5jCmluZGV4IGRjY2NjZDZiZTk0MTEuLjcxMjQ5ZWFjNjEwMjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdGlueS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvdGlueS5jCkBAIC0xMSw2ICYjNDM7MTEsOCBAQAogICovCiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pcnFfd29yay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25vdGlmaWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfd2FpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwpAQCAtNDIsOCAmIzQzOzQ0LDgzIEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2N0cmxibGsgPSB7CiAJLmdwX3NlcQkJPSAwIC0gMzAwVUwsCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGV2ZXIgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICh0aGlzCiYjNDM7ICogZW5xdWV1ZSwgY2FsbGJhY2sgaW52b2NhdGlvbiwgZ3JhY2UtcGVyaW9kIHdvcmspLCBzbyBlbnF1ZXVpbmcgd2hpbGUgYSBsaXN0CiYjNDM7ICogb3BlcmF0aW9uIGlzIGluIGZsaWdodCB3b3VsZCBjb3JydXB0IGl0LiAgRGVmZXIgd2hlbmV2ZXIgaW50ZXJydXB0cyBhcmUKJiM0MzsgKiBkaXNhYmxlZDogdGhlIGNhbGxiYWNrIGdvZXMgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXQgYW4gaXJxX3dvcmsgcmUtaXNzdWVzCiYjNDM7ICogbGF0ZXIuICBPbmUgZ2xvYmFsIGxpc3QgYW5kIGlycV93b3JrIHN1ZmZpY2UsIGFzIFRpbnkgUkNVIGlzIHVuaXByb2Nlc3Nvci4KJiM0MzsgKiBPbmx5IGtlcm5lbHMgd2hlcmUgdGhhdCBjYW4gaGFwcGVuIChDT05GSUdfUkNVX0RFRkVSKSBuZWVkIHRoaXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpOwomIzQzO3N0YXRpYyBMTElTVF9IRUFEKHJjdV9kZWZlcl9saXN0KTsKJiM0MztzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHJjdV9kZWZlcl9pdywgcmN1X2RlZmVyX2RyYWluKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEVucXVldWUgQGhlYWQgb24gdGhlIGNhbGxiYWNrIGxpc3QuICBBbHNvIGNhbGxlZCBieSByY3VfZGVmZXJfZHJhaW4oKSB0bwomIzQzOyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKQomIzQzO3sKJiM0MzsJc3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHsKJiM0MzsJCWlmIChhdG9taWNfaW5jX3JldHVybigmYW1wO2RvdWJsZWZyZWVzKSAmbHQ7IDQpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDslcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtJmd0OyVwUygpISEhICAmIzM0OywgX19mdW5jX18sIGhlYWQsIGhlYWQtJmd0O2Z1bmMpOwomIzQzOwkJCW1lbV9kdW1wX29iaihoZWFkKTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwloZWFkLSZndDtmdW5jID0gZnVuYzsKJiM0MzsJaGVhZC0mZ3Q7bmV4dCA9IE5VTEw7CiYjNDM7CiYjNDM7CWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJKnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkOwomIzQzOwlyY3VfY3RybGJsay5jdXJ0YWlsID0gJmFtcDtoZWFkLSZndDtuZXh0OwomIzQzOwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShpc19pZGxlX3Rhc2soY3VycmVudCkpKSB7CiYjNDM7CQkvKiBmb3JjZSBzY2hlZHVsaW5nIGZvciByY3VfcXMoKSAqLwomIzQzOwkJcmVzY2hlZF9jcHUoMCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENhbGxiYWNrcyBoYXZlIG5vIG11dHVhbCBvcmRlcmluZyBndWFyYW50ZWUgYW5kIHJjdV9iYXJyaWVyKCkgaGFzCiYjNDM7CSAqIGFscmVhZHkgZmx1c2hlZCB1cywgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuCiYjNDM7CSAqLwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoJmFtcDtyY3VfZGVmZXJfbGlzdCkpIHsKJiM0MzsJCXN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlOwomIzQzOwomIzQzOwkJcmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC0mZ3Q7ZnVuYyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKQomIzQzO3sKJiM0MzsJaGVhZC0mZ3Q7ZnVuYyA9IGZ1bmM7CiYjNDM7CWlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgJmFtcDtyY3VfZGVmZXJfbGlzdCkpCiYjNDM7CQlpcnFfd29ya19xdWV1ZSgmYW1wO3JjdV9kZWZlcl9pdyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3Mgc28gYSBmb2xsb3dpbmcgcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gKi8KJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJaXJxX3dvcmtfc3luYygmYW1wO3JjdV9kZWZlcl9pdyk7CiYjNDM7fQomIzQzOwogdm9pZCByY3VfYmFycmllcih2b2lkKQogewomIzQzOwkvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGZpcnN0LiAqLwomIzQzOwlyY3VfZGVmZXJfZmx1c2goKTsKIAl3YWl0X3JjdV9ncChjYWxsX3JjdV9odXJyeSk7CiB9CiBFWFBPUlRfU1lNQk9MKHJjdV9iYXJyaWVyKTsKQEAgLTE1NywyOSAmIzQzOzIzNCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3UpOwogICovCiB2b2lkIGNhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYykKIHsKLQlzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkgewotCQlpZiAoYXRvbWljX2luY19yZXR1cm4oJmFtcDtkb3VibGVmcmVlcykgJmx0OyA0KSB7Ci0JCQlwcl9lcnIoJiMzNDslcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtJmd0OyVwUygpISEhICAmIzM0OywgX19mdW5jX18sIGhlYWQsIGhlYWQtJmd0O2Z1bmMpOwotCQkJbWVtX2R1bXBfb2JqKGhlYWQpOwotCQl9CiYjNDM7CWlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHsKJiM0MzsJCWNhbGxfcmN1X2RlZmVyKGhlYWQsIGZ1bmMpOwogCQlyZXR1cm47CiAJfQogCi0JaGVhZC0mZ3Q7ZnVuYyA9IGZ1bmM7Ci0JaGVhZC0mZ3Q7bmV4dCA9IE5VTEw7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JKnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkOwotCXJjdV9jdHJsYmxrLmN1cnRhaWwgPSAmYW1wO2hlYWQtJmd0O25leHQ7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwkvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi8KJiM0MzsJV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgJmFtcDsmYW1wOyBpbl9ubWkoKSk7CiAKLQlpZiAodW5saWtlbHkoaXNfaWRsZV90YXNrKGN1cnJlbnQpKSkgewotCQkvKiBmb3JjZSBzY2hlZHVsaW5nIGZvciByY3VfcXMoKSAqLwotCQlyZXNjaGVkX2NwdSgwKTsKLQl9CiYjNDM7CXJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3UpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuYyBiL2tlcm5lbC9yY3UvdHJlZS5jCmluZGV4IDYyYmYyYmY1NTFmNDkuLjdkMGFlOTRiZGYzOWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvdHJlZS5jCkBAIC0yNCw2ICYjNDM7MjQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NtcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlX3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbnRlcnJ1cHQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL2RlYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbm1pLmgmZ3Q7CkBAIC0zMTQ4LDIxICYjNDM7MzE0OSwyNyBAQCBzdGF0aWMgdm9pZCBjaGVja19jYl9vdmxkKHN0cnVjdCByY3VfZGF0YSAqcmRwKQogCXJhd19zcGluX3VubG9ja19yY3Vfbm9kZShybnApOwogfQogCi1zdGF0aWMgdm9pZAotX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pCiYjNDM7LyoKJiM0MzsgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGV2ZXIgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIChlbnF1ZXVlLAomIzQzOyAqIGNhbGxiYWNrIGludm9jYXRpb24sIGdyYWNlLXBlcmlvZCB3b3JrKS4gIEEgY2FsbF9yY3UoKSB3aXRoIGludGVycnVwdHMgYWxyZWFkeQomIzQzOyAqIGRpc2FibGVkIG1heSBpbnRlcnJ1cHQgb25lIG9mIHRob3NlLCBzbyBfX2NhbGxfcmN1X2NvbW1vbigpIGRlZmVyczogdGhlCiYjNDM7ICogY2FsbGJhY2sgaXMgc3RhZ2VkIG9uIGEgcGVyLUNQVSBsbGlzdCB0aGF0IGFuIGlycV93b3JrIHJlLWlzc3VlcyBvbmNlCiYjNDM7ICogaW50ZXJydXB0cyBhcmUgb24uICBPbmx5IENPTkZJR19SQ1VfREVGRVIga2VybmVscyBjYW4gaGl0IHRoaXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRW5xdWV1ZSBAaGVhZCBvbiB0aGlzIENQVSYjMzk7cyByY3Vfc2VnY2JsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKCkKJiM0MzsgKiB0byByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwKJiM0MzsgKiBjb25kaXRpb24uICBFaXRoZXIgY2FsbGVyIG1heSBoYXZlIGludGVycnVwdHMgYWxyZWFkeSBkaXNhYmxlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbikKIHsKIAlzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlib29sIGxhenk7CiAJc3RydWN0IHJjdV9kYXRhICpyZHA7CiAKLQkvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqLwotCVdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkICZhbXA7IChzaXplb2Yodm9pZCAqKSAtIDEpKTsKLQotCS8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi8KLQlpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSkKLQkJcmV0dXJuOwotCiAJaWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7CiAJCS8qCiAJCSAqIFByb2JhYmxlIGRvdWJsZSBjYWxsX3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4KQEAgLTMyMDYsNiAmIzQzOzMyMTMsODMgQEAgX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3MsIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBlbnF1ZXVlIHNvIHRoZXkgY2Fubm90CiYjNDM7ICogZGVmZXIgYWdhaW4uICBkZWZlcl9sb2NrIGlzIGhlbGQgYWNyb3NzIGxsaXN0X2RlbF9hbGwoKSBhbmQgdGhlIHJlLWlzc3VlIHNvCiYjNDM7ICogdGhlIGRyYWluZXJzIC0tIHRoaXMgQ1BVJiMzOTtzIGlycV93b3JrLCByY3VfZGVmZXJfZmx1c2goKSBhbmQKJiM0MzsgKiByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkgLS0gc2VyaWFsaXplIGFuZCBuZXZlciBsZWF2ZSBhIGNhbGxiYWNrIG9mZgomIzQzOyAqIC0mZ3Q7ZGVmZXJfaGVhZCB5ZXQgbm90IG9uIGEgY2FsbGJhY2sgbGlzdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByY3VfZGF0YSAqcmRwID0gY29udGFpbmVyX29mKGl3LCBzdHJ1Y3QgcmN1X2RhdGEsIGRlZmVyX3dvcmspOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3JkcC0mZ3Q7ZGVmZXJfbG9jaywgZmxhZ3MpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoJmFtcDtyZHAtJmd0O2RlZmVyX2hlYWQpKSB7CiYjNDM7CQlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTsKJiM0MzsKJiM0MzsJCXJjdV9kb19lbnF1ZXVlKGhlYWQsIGhlYWQtJmd0O2Z1bmMsIGZhbHNlKTsKJiM0MzsJfQomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3JkcC0mZ3Q7ZGVmZXJfbG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTdGFnZSBAaGVhZCBmb3IgdGhpcyBDUFUmIzM5O3MgaXJxX3dvcmsgd2hlbiBjYWxsX3JjdSgpIGNhbm5vdCBlbnF1ZXVlIG5vdy4gKi8KJiM0MztzdGF0aWMgdm9pZCBjYWxsX3JjdV9kZWZlcihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHRoaXNfY3B1X3B0cigmYW1wO3JjdV9kYXRhKTsKJiM0MzsKJiM0MzsJaGVhZC0mZ3Q7ZnVuYyA9IGZ1bmM7CiYjNDM7CWlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgJmFtcDtyZHAtJmd0O2RlZmVyX2hlYWQpKQomIzQzOwkJaXJxX3dvcmtfcXVldWUoJmFtcDtyZHAtJmd0O2RlZmVyX3dvcmspOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlZ2lzdGVyIHBlbmRpbmcgZGVmZXJyZWQgY2FsbGJhY2tzIGludG8gdGhlIGNhbGxiYWNrIGxpc3RzIHNvIGEgZm9sbG93aW5nCiYjNDM7ICogcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gIFRoaXMgcnVucyBiZWZvcmUgcmN1X2JhcnJpZXIoKSBzY2FucyB0aGUKJiM0MzsgKiBsaXN0cy4gIEFuIG9ubGluZSBDUFUmIzM5O3Mgb3duIGlycV93b3JrIHJlLWlzc3VlcyBpdHMgY2FsbGJhY2tzLCBzbyB3YWl0IGl0IG91dDsKJiM0MzsgKiBhbiBvZmZsaW5lIENQVSYjMzk7cyBpcnFfd29yayBtYXkgbmV2ZXIgcnVuIGFnYWluLCBzbyBkcmFpbiBpdHMgbGlzdCBkaXJlY3RseQomIzQzOyAqIG9udG8gdGhpcyBDUFUgaW5zdGVhZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZCkKJiM0Mzt7CiYjNDM7CWludCBjcHU7CiYjNDM7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewomIzQzOwkJc3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cigmYW1wO3JjdV9kYXRhLCBjcHUpOwomIzQzOwomIzQzOwkJaWYgKGNwdV9vbmxpbmUoY3B1KSkKJiM0MzsJCQlpcnFfd29ya19zeW5jKCZhbXA7cmRwLSZndDtkZWZlcl93b3JrKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlyY3VfZGVmZXJfZHJhaW4oJmFtcDtyZHAtJmd0O2RlZmVyX3dvcmspOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7X19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pCiYjNDM7ewomIzQzOwkvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqLwomIzQzOwlXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCAmYW1wOyAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7CiYjNDM7CiYjNDM7CS8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi8KJiM0MzsJaWYgKFdBUk5fT05fT05DRSghZnVuYykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHsKJiM0MzsJCWNhbGxfcmN1X2RlZmVyKGhlYWQsIGZ1bmMpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqLwomIzQzOwlXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSAmYW1wOyZhbXA7IGluX25taSgpKTsKJiM0MzsKJiM0MzsJcmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYywgbGF6eV9pbik7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19SQ1VfTEFaWQogc3RhdGljIGJvb2wgZW5hYmxlX3JjdV9sYXp5IF9fcmVhZF9tb3N0bHkgPSAhSVNfRU5BQkxFRChDT05GSUdfUkNVX0xBWllfREVGQVVMVF9PRkYpOwogbW9kdWxlX3BhcmFtKGVuYWJsZV9yY3VfbGF6eSwgYm9vbCwgMDQ0NCk7CkBAIC0zODk2LDggJiM0MzszOTgwLDEyIEBAIHZvaWQgcmN1X2JhcnJpZXIodm9pZCkKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgZ3NlcTsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKLQl1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoJmFtcDtyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgczsKJiM0MzsKJiM0MzsJLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gKi8KJiM0MzsJcmN1X2RlZmVyX2ZsdXNoKCk7CiAKJiM0MzsJcyA9IHJjdV9zZXFfc25hcCgmYW1wO3JjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTsKIAlyY3VfYmFycmllcl90cmFjZShUUFMoJiMzNDtCZWdpbiYjMzQ7KSwgLTEsIHMpOwogCiAJLyogVGFrZSBtdXRleCB0byBzZXJpYWxpemUgY29uY3VycmVudCByY3VfYmFycmllcigpIHJlcXVlc3RzLiAqLwpAQCAtNDIzMSw2ICYjNDM7NDMxOSwxMCBAQCByY3VfYm9vdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpCiAJcmRwLSZndDtyY3Vfb25sX2dwX3N0YXRlID0gUkNVX0dQX0NMRUFORUQ7CiAJcmRwLSZndDtsYXN0X3NjaGVkX2Nsb2NrID0gamlmZmllczsKIAlyZHAtJmd0O2NwdSA9IGNwdTsKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7cmRwLSZndDtkZWZlcl9oZWFkKTsKJiM0MzsJcmF3X3NwaW5fbG9ja19pbml0KCZhbXA7cmRwLSZndDtkZWZlcl9sb2NrKTsKJiM0MzsJLyogSGFyZCBpcnFfd29yayBzbyB0aGUgcmUtaXNzdWUgcnVucyBwcm9tcHRseS4gKi8KJiM0MzsJcmRwLSZndDtkZWZlcl93b3JrID0gSVJRX1dPUktfSU5JVF9IQVJEKHJjdV9kZWZlcl9kcmFpbik7CiAJcmN1X2Jvb3RfaW5pdF9ub2NiX3BlcmNwdV9kYXRhKHJkcCk7CiB9CiAKQEAgLTQ1MjgsNiAmIzQzOzQ2MjAsMTYgQEAgdm9pZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKGludCBjcHUpCiAJc3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cigmYW1wO3JjdV9kYXRhLCBjcHUpOwogCWJvb2wgbmVlZHdha2U7CiAKJiM0MzsJLyoKJiM0MzsJICogQ2FsbGJhY2tzIHRoZSBvdXRnb2luZyBDUFUgZGVmZXJyZWQgbGF0ZSBpbiB0aGUgb2ZmbGluZSBwYXRoIChwYXN0IHRoZQomIzQzOwkgKiBwb2ludCBpdHMgaXJxX3dvcmsgY2FuIHJ1bikgc2l0IG9uIC0mZ3Q7ZGVmZXJfaGVhZCwgd2hpY2ggdGhlIC0mZ3Q7Y2JsaXN0CiYjNDM7CSAqIG1pZ3JhdGlvbiBiZWxvdyBkb2VzIG5vdCBjb3Zlci4gIERyYWluIHRoZW0gaGVyZSwgYmVmb3JlIHRoZSBlYXJseQomIzQzOwkgKiByZXR1cm5zOyB0aGUgcmUtaXNzdWUgbGFuZHMgb24gdGhpcyBDUFUuCiYjNDM7CSAqLwomIzQzOwlyY3VfZGVmZXJfZHJhaW4oJmFtcDtyZHAtJmd0O2RlZmVyX3dvcmspOwomIzQzOwkvKiBMaWtld2lzZSBmb3IgdGhlIG91dGdvaW5nIENQVSYjMzk7cyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3MuICovCiYjNDM7CXNyY3Vfb2ZmbGluZV9kcmFpbihjcHUpOwomIzQzOwogCWlmIChyY3VfcmRwX2lzX29mZmxvYWRlZChyZHApKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5oIGIva2VybmVsL3JjdS90cmVlLmgKaW5kZXggOWI4NWVlYWEwMDcxYS4uNDFjMmIyMGYwYzgzZSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90cmVlLmgKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90cmVlLmgKQEAgLTIyOSw2ICYjNDM7MjI5LDExIEBAIHN0cnVjdCByY3VfZGF0YSB7CiAJc3RydWN0IHJjdV9oZWFkIGJhcnJpZXJfaGVhZDsKIAlpbnQgZXhwX3dhdGNoaW5nX3NuYXA7CQkvKiBEb3VibGUtY2hlY2sgbmVlZCBmb3IgSVBJLiAqLwogCiYjNDM7CS8qIERlZmVycmFsIG9mIGFuIE5NSS9yZWVudHJhbnQgY2FsbF9yY3UoKTsgc2VlIF9fY2FsbF9yY3VfY29tbW9uKCkuICovCiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2hlYWQ7CiYjNDM7CXN0cnVjdCBpcnFfd29yayBkZWZlcl93b3JrOwomIzQzOwlyYXdfc3BpbmxvY2tfdCBkZWZlcl9sb2NrOwomIzQzOwogCS8qIDUpIENhbGxiYWNrIG9mZmxvYWRpbmcuICovCiAjaWZkZWYgQ09ORklHX1JDVV9OT0NCX0NQVQogCXN0cnVjdCBzd2FpdF9xdWV1ZV9oZWFkIG5vY2JfY2Jfd3E7IC8qIEZvciBub2NiIGt0aHJlYWRzIHRvIHNsZWVwIG9uLiAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZjZlY2Q5M2JlMzBmNAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmMKQEAgLTAsMCAmIzQzOzEsNTggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIEV4ZXJjaXNlIHJlLWVudHJ5IGludG8gY2FsbF9zcmN1KCkgZnJvbSBCUEY7IHNlZSBwcm9ncy9yY3VfcmVlbnRyeS5jLiAqLwomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7cmN1X3JlZW50cnkuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHN5c19waWRmZF9vcGVuKHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN5c2NhbGwoX19OUl9waWRmZF9vcGVuLCBwaWQsIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3JjdV9yZWVudHJ5KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmN1X3JlZW50cnkgKnNrZWw7CiYjNDM7CWludCBlcnIsIHBpZGZkID0gLTEsIG1hcF9mZDsKJiM0MzsJX191NjQgdmFsID0gMTsKJiM0MzsJY3B1X3NldF90IHNldDsKJiM0MzsKJiM0MzsJc2tlbCA9IHJjdV9yZWVudHJ5X19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gcmN1X3JlZW50cnlfX2F0dGFjaChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NrZWxfYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIEtlZXAgdGhlIHJlLWVudHJ5IG9uIGEgc2luZ2xlIENQVS4gKi8KJiM0MzsJQ1BVX1pFUk8oJmFtcDtzZXQpOwomIzQzOwlDUFVfU0VUKDAsICZhbXA7c2V0KTsKJiM0MzsJaWYgKHNjaGVkX3NldGFmZmluaXR5KDAsIHNpemVvZihzZXQpLCAmYW1wO3NldCkpCiYjNDM7CQlwZXJyb3IoJiMzNDtzY2hlZF9zZXRhZmZpbml0eSYjMzQ7KTsKJiM0MzsKJiM0MzsJcGlkZmQgPSBzeXNfcGlkZmRfb3BlbihnZXRwaWQoKSwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHBpZGZkLCAwLCAmIzM0O3BpZGZkX29wZW4mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJbWFwX2ZkID0gYnBmX21hcF9fZmQoc2tlbC0mZ3Q7bWFwcy50YXNrX3N0Zyk7CiYjNDM7CWVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwX2ZkLCAmYW1wO3BpZGZkLCAmYW1wO3ZhbCwgQlBGX05PRVhJU1QpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7Ym9vdF9jcmVhdGUmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogQXJtIHRoZSBoYW5kbGVyIGZvciB0aGlzIHRocmVhZCwgdGhlbiB0cmlnZ2VyIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkuICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dGFyZ2V0X3BpZCA9IHN5c2NhbGwoX19OUl9nZXR0aWQpOwomIzQzOwllcnIgPSBicGZfbWFwX2RlbGV0ZV9lbGVtKG1hcF9mZCwgJmFtcDtwaWRmZCk7CiYjNDM7CUFTU0VSVF9PSyhlcnIsICYjMzQ7Ym9vdF9kZWxldGUmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIE9ubHkgVHJlZSBTUkNVIGVucXVldWVzIHZpYSByY3Vfc2VnY2JsaXN0X2VucXVldWUoKTsgc2tpcCBlbHNld2hlcmUuICovCiYjNDM7CWlmICghc2tlbC0mZ3Q7YnNzLSZndDtoaXRzKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtyZWVudGVyZWQsIDEsICYjMzQ7cmVlbnRyeV9kZWZlcnJlZCYjMzQ7KTsKJiM0MztvdXQ6CiYjNDM7CWlmIChwaWRmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UocGlkZmQpOwomIzQzOwlyY3VfcmVlbnRyeV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ5MmE5MjdmZjUxYzAKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuYwpAQCAtMCwwICYjNDM7MSw0NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBSZS1lbnRlciBjYWxsX3NyY3UoKSBmcm9tIGEgQlBGIHByb2dyYW0uICBmZW50cnkgb24gcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKCkKJiM0MzsgKiBmaXJlcyBpbnNpZGUgY2FsbF9zcmN1KCkmIzM5O3MgZW5xdWV1ZSAocmVhY2hlZCBmcm9tIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKCkKJiM0MzsgKiB3aXRoIHRoZSBzcmN1X2RhdGEgLSZndDtsb2NrIGhlbGQpOyB0aGUgaGFuZGxlciB0aGVuIGNhbGxzIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkKJiM0MzsgKiAtLSBpdHNlbGYgY2FsbF9zcmN1KCkgb24gcmN1X3Rhc2tzX3RyYWNlX3NyY3Vfc3RydWN0IC0tIHJlLWVudGVyaW5nIHRoZSBzYW1lCiYjNDM7ICogc3JjdV9kYXRhIG9uIHRoZSBzYW1lIENQVS4KJiM0MzsgKi8KJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9UQVNLX1NUT1JBR0UpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzO30gdGFza19zdGcgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7aW50IHRhcmdldF9waWQ7CiYjNDM7aW50IGhpdHM7CiYjNDM7aW50IHJlZW50ZXJlZDsKJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvcmN1X3NlZ2NibGlzdF9lbnF1ZXVlJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHJlZW50ZXIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjsKJiM0MzsKJiM0MzsJaWYgKHJlZW50ZXJlZCB8fCAhdGFyZ2V0X3BpZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwljdXIgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJaWYgKCFjdXIgfHwgY3VyLSZndDtwaWQgIT0gdGFyZ2V0X3BpZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBSZS1lbnRlciB2aWEgYSB0YXNrLXN0b3JhZ2UgZGVsZXRlLCB3aGljaCBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqLwomIzQzOwlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO2hpdHMsIDEpOwomIzQzOwlicGZfdGFza19zdG9yYWdlX2dldCgmYW1wO3Rhc2tfc3RnLCBjdXIsIDAsIEJQRl9MT0NBTF9TVE9SQUdFX0dFVF9GX0NSRUFURSk7CiYjNDM7CWJwZl90YXNrX3N0b3JhZ2VfZGVsZXRlKCZhbXA7dGFza19zdGcsIGN1cik7CiYjNDM7CiYjNDM7CXJlZW50ZXJlZCA9IDE7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMzMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUkNVIERlZmVycmFsIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFJDVSBwYXRjaC4gSXQmIzM5O3MgbWFraW5nIGNoYW5nZXMgdG8gU1JDVSBhbmQgdGhlIGdlbmVyYWwgUkNVIGRlZmVycmFsIG1lY2hhbmlzbXMsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYENPTkZJR19SQ1VfREVGRVJgLiBUaGlzIG5ldyBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIE5NSSwgS1BST0JFUywgdGhlIGZ1bmN0aW9uIHRyYWNlciwgb3IgdHJhY2Vwb2ludHMuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGRlZmVycmFsIGZvciBgY2FsbF9yY3UoKWAgYW5kIGBjYWxsX3NyY3UoKWAgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgdG8gYXZvaWQgY29ycnVwdGluZyBjYWxsYmFjayBsaXN0cyBkdXJpbmcgbWFuaXB1bGF0aW9uLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIGdvb2QgY2h1bmsgb2YgUkNVIGNvZGUg4oCTIGBzcmN1dGlueS5jYCwgYHNyY3V0cmVlLmNgLCBgdGlueS5jYCwgYHRyZWUuY2AsIGFuZCBldmVuIHRoZSB0b3J0dXJlIHRlc3QuIFBsdXMsIHRoZXkmIzM5O3ZlIGFkZGVkIGEgbmV3IEJQRiBzZWxmdGVzdCwgYHJjdV9yZWVudHJ5LmNgLCB3aGljaCBpcyBhIGdvb2Qgc2lnbiBvZiB0aG9yb3VnaG5lc3MuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgY2FuIHNlZSBgQ09ORklHX1JDVV9ERUZFUmAgaXMgYSBjb3JlIGtlcm5lbCBtb2RpZmljYXRpb24uIFByZXR0eSByZWFjaGFibGUgdG9vLCBjb25zaWRlcmluZyBob3cgaGVhdmlseSB1c2VkIGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgIGFyZS4gVGhlIGRlZmVycmFsIGxvZ2ljIGl0c2VsZiBraWNrcyBpbiB3aGVuIGBzaG91bGRfcmN1X2RlZmVyKClgIGlzIHRydWU7IGluIG90aGVyIHdvcmRzLCB3aGVuIGBpcnFzX2Rpc2FibGVkKClgIGFuZCBgcmN1X3NjaGVkdWxlcl9hY3RpdmUgIT0gUkNVX1NDSEVEVUxFUl9JTkFDVElWRWAuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBpZGVudGlmeSBrZXkgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBJJiMzOTt2ZSBnb3QgYSBwcmVsaW1pbmFyeSBsaXN0OiBgc3JjdV9kZWZlcl9kcmFpbmAsIGByY3VfZGVmZXJfZHJhaW5gLCBgY2FsbF9zcmN1YCwgYGNhbGxfcmN1YCwgYHNyY3VfYmFycmllcmAsIGByY3VfYmFycmllcmAsIGBzcmN1X29mZmxpbmVfZHJhaW5gLCBhbmQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLiBCdXQgd2FpdCwgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgc3VwZXIgaG90LXBhdGggZnVuY3Rpb25zIHRvIGdldCBhIG1vcmUgYmFsYW5jZWQgdGVzdCBkaXN0cmlidXRpb24uIFRoYXQgcnVsZXMgb3V0IGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgLCBldmVuIHRob3VnaCB0aGV5IGFyZSB0ZW1wdGluZyB0YXJnZXRzLiBJJiMzOTtsbCBuZWVkIHRvIHJlLWV2YWx1YXRlIHdoYXQgaXMgYWN0dWFsbHkgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldC4KCkxldCYjMzk7cyBsb29rIGF0IGBzcmN1X2RlZmVyX2RyYWluYCBhbmQgYHJjdV9kZWZlcl9kcmFpbmAsIGFuZCBkZXRlcm1pbmUgd2hldGhlciB0aGV5JiMzOTtyZSBzdGF0aWMgb3IgZXhwb3J0ZWQuIFR1cm5zIG91dCBgc3JjdV9kZWZlcl9kcmFpbmAgaXMgZXhwb3J0ZWQgaW4gYHNyY3V0aW55LmNgIGJ1dCBzdGF0aWMgaW4gYHNyY3V0cmVlLmNgLCB3aGlsZSBgcmN1X2RlZmVyX2RyYWluYCBpcyBzdGF0aWMgaW4gYm90aCBgdGlueS5jYCBhbmQgYHRyZWUuY2AuIEhtbSwgYSBzbGlnaHQgaW5jb25zaXN0ZW5jeS4KCk5vdywgd2hhdCBhYm91dCB0aGUgb3RoZXIgZnVuY3Rpb25zIG9uIG15IGxpc3Q/IExldCYjMzk7cyBjaGVjayBgc3JjdV9vZmZsaW5lX2RyYWluYCBhbmQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLiBOZWl0aGVyIG9mIHRoZXNlIGlzIHN0YXRpYy4gVGhpcyBsb29rcyBwcm9taXNpbmcuIEkgd2lsbCBjb25maXJtIHRoYXQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgYW5kIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBhcmUgdGhlIHJpZ2h0IHRhcmdldCBmdW5jdGlvbnMgd2l0aCBncmVwcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkgc3JjdV9vZmZsaW5lX2RyYWluJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvcmN1Lmg9NTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpXG4tLVxua2VybmVsL3JjdS9yY3UuaC01OTAtLyogRHJhaW4gYW4gb3V0Z29pbmcgQ1BVJiMzOTtzIGRlZmVycmVkIFNSQ1UgY2FsbGJhY2tzOyBzZWUgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLiAqL1xua2VybmVsL3JjdS9yY3UuaDo1OTE6dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSk7XG5rZXJuZWwvcmN1L3JjdS5oLTU5Mi1cbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTUxNT1zdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1NDItICovXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTU0Mzp2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1NDQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODk5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgcGFydGljdWxhciBtaWdyYXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGxhcmdlciBSQ1UgdHJlZSBjb250ZXh0LiBUaGUgbmFtZSBhbG9uZSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgZGVhbGluZyB3aXRoIGNhbGxiYWNrIG1pZ3JhdGlvbiBkdXJpbmcgUkNVIHRyZWUgbW9kaWZpY2F0aW9ucywgd2hpY2ggaXMgYSBjcml0aWNhbCBhcmVhIGZvciBlbnN1cmluZyBkYXRhIGNvbnNpc3RlbmN5IGFuZCBhdm9pZGluZyByYWNlcywgZXNwZWNpYWxseSB1bmRlciBoZWF2eSBsb2FkLiBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlIGltcGxlbWVudGF0aW9uIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIFJDVSBndWFyYW50ZWVzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBob3cgZ3JhY2UgcGVyaW9kcyBhcmUgbWFuYWdlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjYWxsYmFja3MgYmVpbmcgbW92ZWQuIEFyZSB3ZSB0YWtpbmcgaW50byBhY2NvdW50IHBvdGVudGlhbCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgdG8gdGhlIHRyZWUgd2hpbGUgbWlncmF0aW5nPyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBsb2NrcyBvciBhdG9taWMgb3BlcmF0aW9ucyBpbnZvbHZlZCBhbmQgc2VlIGhvdyB0aGV5IGludGVycGxheSB3aXRoIHRoZSBncmFjZSBwZXJpb2QgbG9naWMgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGluZGVlZCBwcmV2ZW50aW5nIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBwcmVzZXJ2aW5nIHRoZSBzZW1hbnRpY3Mgb2YgUkNVJiMzOTtzIHF1aWVzY2VudCBzdGF0ZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGUgY2FsbGJhY2tzIHRoZW1zZWx2ZXMgYXJlIGJlaW5nIGhhbmRsZWQgYXRvbWljYWxseSwgYW5kIGlmIG5vdCwgaG93IHRoZSBzeXN0ZW0gaXMgbWFuYWdpbmcgdGhhdCBjb21wbGV4aXR5LiBJJiMzOTtsbCBmb2N1cyBvbiBwb3RlbnRpYWwgZWRnZSBjYXNlcywgc3VjaCBhcyByZWN1cnNpdmUgY2FsbGJhY2sgaW52b2NhdGlvbiBvciB0aGUgaGFuZGxpbmcgb2YgZXhwZWRpdGVkIGdyYWNlIHBlcmlvZHMgZHVyaW5nIGEgbWlncmF0aW9uLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW5lZmZpY2llbmNpZXMgaGVyZSwgc3VjaCBhcyB1bm5lY2Vzc2FyeSBsb2NraW5nIG9yIHVubmVjZXNzYXJ5IGJhcnJpZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JjdXRyZWUuaD0xMTA9aW50IHJjdXRyZWVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSk7XG4tLVxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmgtMTE2LVxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmg6MTE3OnZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KTtcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oLTExOC1cbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz00NTYwPXZvaWQgcmN1dHJlZV9yZXBvcnRfY3B1X2RlYWQodm9pZClcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy00NjE0LSAqL1xua2VybmVsL3JjdS90cmVlLmM6NDYxNTp2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDA4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkJhcnJpZXJzLCBCYXJyaWVycyBFdmVyeXdoZXJlISoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG1lbW9yeSBiYXJyaWVycywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgYW5kIFNSQ1UgKFNsZWVwYWJsZSBSQ1UpIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBXaGVuIEkmIzM5O20gd29ya2luZyB3aXRoIHRoZXNlLCB0aGUgcXVlc3Rpb24gb2Ygc3luY2hyb25pemF0aW9uIGlzIGFsd2F5cyBwcmVzZW50LCBidXQgdGhlIGRldGFpbHMgY2hhbmdlLCBkZXBlbmRpbmcgb24gd2hpY2ggUkNVIGZsYXZvciBJJiMzOTttIGRlYWxpbmcgd2l0aC4KClNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gc29saWRpZnkgdGhlIGNvbm5lY3Rpb24gd2l0aCBgcmN1X2JhcnJpZXJgIGFuZCBgc3JjdV9iYXJyaWVyYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgdGhhdCB1cGRhdGVzIHBlcmZvcm1lZCB3aXRoaW4gYW4gUkNVIGNyaXRpY2FsIHNlY3Rpb24gYmVjb21lIHZpc2libGUgdG8gcmVhZGVycyAqYWZ0ZXIqIHRoZSBncmFjZSBwZXJpb2QuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlaXIgaW1wbGVtZW50YXRpb25zLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbW9kZWwgKGxpa2UsIGNvbnNpZGVyaW5nIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzKSwgaXMga2V5LgoKTXkgZm9jdXMgaXMgdG8gZW5zdXJlIHRoYXQgSSYjMzk7dmUgYWNjb3VudGVkIGZvciBldmVyeSBwb3NzaWJsZSBzY2VuYXJpbyB3aGVyZSBkYXRhIHJhY2VzIGFyZSBhdm9pZGVkIG9yIGhhbmRsZWQgY29ycmVjdGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgd2hlbiB1c2luZyB0aGVzZSBwYXJ0aWN1bGFyIGJhcnJpZXIgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkgcmN1X2JhcnJpZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTUxPXZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKTtcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDo1Mjp2b2lkIHJjdV9iYXJyaWVyX3Rhc2tzKHZvaWQpO1xuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTUzLXZvaWQgc3luY2hyb25pemVfcmN1KHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oPTM2PXZvaWQgc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oLTM3LVxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmg6Mzg6dm9pZCByY3VfYmFycmllcih2b2lkKTtcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oLTM5LXZvaWQgcmN1X21vbWVudGFyeV9lcXModm9pZCk7XG4tLVxua2VybmVsL3JjdS90YXNrcy5oPTEyMjI9RVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X3Rhc2tzKTtcbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIyOS0gKi9cbmtlcm5lbC9yY3UvdGFza3MuaDoxMjMwOnZvaWQgcmN1X2JhcnJpZXJfdGFza3Modm9pZClcbmtlcm5lbC9yY3UvdGFza3MuaC0xMjMxLXtcbi0tXG5rZXJuZWwvcmN1L3RpbnkuYz0xMTM9c3RhdGljIHZvaWQgcmN1X2RlZmVyX2ZsdXNoKHZvaWQpXG4tLVxua2VybmVsL3JjdS90aW55LmMtMTE5LVxua2VybmVsL3JjdS90aW55LmM6MTIwOnZvaWQgcmN1X2JhcnJpZXIodm9pZClcbmtlcm5lbC9yY3UvdGlueS5jLTEyMS17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9Mzk1MT1zdGF0aWMgdm9pZCByY3VfYmFycmllcl9oYW5kbGVyKHZvaWQgKmNwdV9pbilcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0zOTc2LSAqL1xua2VybmVsL3JjdS90cmVlLmM6Mzk3Nzp2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG5rZXJuZWwvcmN1L3RyZWUuYy0zOTc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTExMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipTUkNVIEJhcnJpZXIgTXVzaW5ncyoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgc3JjdV9iYXJyaWVyYC4uLiB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB3aXRoIHRoYXQgYmVhc3Q/IFdlJiMzOTt2ZSBnb3Qgb3VyIGdyYWNlIHBlcmlvZCBsb2dpYywgdGhlIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgYW5kIHRoZW4gdGhpcyBiYXJyaWVyIGZ1bmN0aW9uLiBJJiMzOTttIHRyeWluZyB0byBtZW50YWxseSBtYXAgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIHVzYWdlLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGFuZCB3aGF0IGd1YXJhbnRlZXMgaXQgKnRydWx5KiBwcm92aWRlcy4KCkkmIzM5O20gcGljdHVyaW5nIGhvdyBgc3JjdV9iYXJyaWVyYCBlbnN1cmVzIHRoYXQgYWxsIGV4aXN0aW5nIHJlYWRlcnMgaGF2ZSBleGl0ZWQgdGhlaXIgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucy4gVGhhdCBpbXBsaWVzIGEgc3luY2hyb25pemF0aW9uIHBvaW50LCBidXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJlIHRoZSBjcnV4LiBJcyBpdCBhIGZ1bGwgbWVtb3J5IGJhcnJpZXI/IElzIHRoZXJlIGFueSBzcGVjaWZpYyBvcmRlcmluZyBlbmZvcmNlZD8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBDUFUgY2FjaGUgY29oZXJlbmN5IGF0IGFsbCwgb3IgaXMgdGhhdCBoYW5kbGVkIGltcGxpY2l0bHkgYnkgdGhlIFJDVSBpbmZyYXN0cnVjdHVyZSBpdHNlbGY/CgpJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLCB0aGlua2luZyBhYm91dCBob3cgaXQgcHJldmVudHMgZGF0YSByYWNlcyBiZXR3ZWVuIHJlYWRlcnMgYW5kIHdyaXRlcnMuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlJiMzOTtzIGFueSByb29tIGZvciBvcHRpbWl6YXRpb24gdGhlcmUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIG92ZXJhbGwgUkNVIGludGVncml0eS4gQXJlIHRoZXJlIHBvdGVudGlhbCBwaXRmYWxscyBpbiBob3cgaXQgaGFuZGxlcyBuZXN0ZWQgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG9yIHBvdGVudGlhbCBmb3IgYW55IGVkZ2UgY2FzZSBzY2VuYXJpb3MgdGhhdCBjb3VsZCBzdGlsbCBsZWFkIHRvIGlzc3Vlcz8gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBoYXZlIHRob3VnaHQgb2YgdGhlc2UgdGhpbmdzLCBidXQgSSBsaWtlIHRvIHJldmlldyB0aGUgY29kZSB0byBiZSBzdXJlLCBpbiBteSBvd24gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKSBzcmN1X2JhcnJpZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zcmN1dGlueS5oPTEzNT1zdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4tLVxuaW5jbHVkZS9saW51eC9zcmN1dGlueS5oLTEzOS1cbmluY2x1ZGUvbGludXgvc3JjdXRpbnkuaDoxNDA6dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xuaW5jbHVkZS9saW51eC9zcmN1dGlueS5oLTE0MS1cbi0tXG5pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmg9MjQyPXZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xuaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oOjI0Mzp2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XG5pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmgtMjQ0LXZvaWQgc3JjdV9leHBlZGl0ZV9jdXJyZW50KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9Mjk3PUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpO1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yOTktLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcywgdGhlbiB3YWl0IGZvciBhbGwgaW4tZmxpZ2h0IG9uZXMuICovXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MzAwOnZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTMwMS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE3ODI9c3RhdGljIHZvaWQgc3JjdV9iYXJyaWVyX29uZV9jcHUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCBzcmN1X2RhdGEgKnNkcClcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTc5OS0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxODAwOnZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE4MDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg4NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBhIE5ldyBSQ1UgQ29uZmlndXJhdGlvbiBPcHRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBDT05GSUdfUkNVX0RFRkVSYC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBzb3VyY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBuZXcgZmxhZyAqbWVhbnMqIGZvciB0aGUgUkNVIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIGBrZXJuZWwvcmN1L0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBoZWxwIHRleHQsIGFuZCB3aGVyZSB0aGlzIG9wdGlvbiBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBSQ1UgY29uZmlndXJhdGlvbiBjaG9pY2VzLiBJcyB0aGlzIHJlbGF0ZWQgdG8gZ3JhY2UgcGVyaW9kcywgZXhwZWRpdGVkIFJDVSwgb3IgYSBzcGVjaWZpYyBmbGF2b3Igb2YgZGVmZXJyZWQgcmVjbGFtYXRpb24/IElzIGl0IGEgY29tcGlsZS10aW1lIG9wdGltaXphdGlvbiwgb3Igc29tZXRoaW5nIHRoYXQgYWx0ZXJzIHJ1bnRpbWUgYmVoYXZpb3Igc2lnbmlmaWNhbnRseT8gVGhlIEtjb25maWcgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgdGhpcyBuZXcgcGllY2Ugb2YgdGhlIFJDVSBwdXp6bGUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIGl0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBvZiB0aGUgUkNVIHN1YnN5c3RlbS4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkNVX0RFRkVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvS2NvbmZpZz0xNzU9Y29uZmlnIFJDVV9ORUVEX1NFR0NCTElTVFxuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy0xNzktIyBjYWxsX3NyY3UoKSBjYW4gYmUgaW52b2tlZCB3aGlsZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIGlzIGluIGZsaWdodC5cbmtlcm5lbC9yY3UvS2NvbmZpZzoxODA6Y29uZmlnIFJDVV9ERUZFUlxua2VybmVsL3JjdS9LY29uZmlnLTE4MS1cdGRlZl9ib29sIEhBVkVfTk1JIHx8IEtQUk9CRVMgfHwgRlVOQ1RJT05fVFJBQ0VSIHx8IFRSQUNFUE9JTlRTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjY5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJDVV9ERUZFUiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBgQ09ORklHX1JDVV9ERUZFUmAgaXMgYXV0b21hdGljYWxseSBzZXQgYmFzZWQgb24gc29tZSBvdGhlciBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBkZWZpbmVkIGFzIGEgYm9vbGVhbiBleHByZXNzaW9uOiBgZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNgLiBSaWdodCwgc28gdGhpcyBpc24mIzM5O3Qgc29tZXRoaW5nIEkgY2FuIGV4cGxpY2l0bHkgZW5hYmxlIGluIGEgdXNlci1mYWNpbmcgYC5jb25maWdgIGZpbGUgZGlyZWN0bHksIGFzIGl0IGhhcyBubyBwcm9tcHQuIEl0JiMzOTtzIGRldGVybWluZWQgYnkgdGhlIHByZXNlbmNlIG9mIGBIQVZFX05NSWAsIGBLUFJPQkVTYCwgYEZVTkNUSU9OX1RSQUNFUmAsIG9yIGBUUkFDRVBPSU5UU2AuIAoKU2luY2UgYEhBVkVfTk1JYCBpcyBwcmV0dHkgY29tbW9uIG9uIHg4NiwganVzdCBsaXN0aW5nIGBSQ1VfREVGRVJgIGlzIHJlZHVuZGFudC4gSSBjYW4gZW5hYmxlIGBLUFJPQkVTYCwgYEZVTkNUSU9OX1RSQUNFUmAsIG9yIGBUUkFDRVBPSU5UU2AgdG8gZW5zdXJlIGBSQ1VfREVGRVJgIGdldHMgZW5hYmxlZC4KCldhaXQgYSBzZWNvbmTigKYgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gbGlzdCBpdGVtcyAqd2l0aG91dCogdGhlIGBDT05GSUdfYCBwcmVmaXggaW4gdGhlIG91dHB1dCBhcnJheS4gSWYgaXQmIzM5O3MgYGRlZl9ib29sIEhBVkVfTk1JIHx8IEtQUk9CRVMgfHwgRlVOQ1RJT05fVFJBQ0VSIHx8IFRSQUNFUE9JTlRTYCwgSSYjMzk7bSBnb2luZyB0byBsaXN0IGBLUFJPQkVTYCBvciBgRlVOQ1RJT05fVFJBQ0VSYCB0byBiZSBzYWZlIGFuZCBhdm9pZCBpc3N1ZXMgaWYgYEhBVkVfTk1JYCBpcyBhbHJlYWR5IGVuYWJsZWQuIFRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSByZXF1aXJlZCBvdXRwdXQuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgcmN1X3RvcnR1cmVfbm1pX2luaXRgIHdoaWNoIGlzIGluIGBrZXJuZWwvcmN1L3JjdXRvcnR1cmUuY2AgdG8gc2VlIGlmIGl0IGJyaW5ncyBpbiBgQ09ORklHX1BFUkZfRVZFTlRTYC4gT2theSwgaXQgdXNlcyBgQ09ORklHX1BFUkZfRVZFTlRTYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmN1X3RvcnR1cmVfbm1pX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS9yY3V0b3J0dXJlLmM9MjY5Nj1zdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuLS1cbmtlcm5lbC9yY3UvcmN1dG9ydHVyZS5jLTI3MDctXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYzoyNzA4OnN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9pbml0KHZvaWQpXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYy0yNzA5LXtcbi0tXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYz0yNzI5PXN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpXG4tLVxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmMtMjc0NC0jZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYzoyNzQ1OnN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9pbml0KHZvaWQpIHsgfVxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmMtMjc0Ni1zdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2xlYW51cCh2b2lkKSB7IH1cbi0tXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYz00NzQ0PXJjdV90b3J0dXJlX2luaXQodm9pZClcbi0tXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYy00ODkyLVx0LyogQXJtIHRoZSBwZXItQ1BVIHBlcmYgY291bnRlcnMgdGhhdCBkcml2ZSAtXHUwMDNlY2FsbCgpIGZyb20gTk1JLiAqL1xua2VybmVsL3JjdS9yY3V0b3J0dXJlLmM6NDg5MzpcdHJjdV90b3J0dXJlX25taV9pbml0KCk7XG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYy00ODk0LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlYWxyZWFkZXJzOyBpJiM0MzsmIzQzOykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMyNAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBSQ1UgVG9ydHVyZSBUZXN0aW5nIGFuZCBEZWZlcnJhbCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSB0ZXN0IHRoZSBOb24tTWFza2FibGUgSW50ZXJydXB0IChOTUkpIHBhdGggaW4gYHJjdXRvcnR1cmVgLiBJdCYjMzk7cyBjbGVhciB0aGF0IEkgbmVlZCBgUEVSRl9FVkVOVFNgIGVuYWJsZWQsIGFuZCwgb2YgY291cnNlLCB0aGUgYFJDVV9UT1JUVVJFX1RFU1RgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBIb3dldmVyLCBgcmN1dG9ydHVyZWAgaXRzZWxmIGlzIGEgdGVzdCBtb2R1bGU7IEkgZG9uJiMzOTt0IG5lY2Vzc2FyaWx5IG5lZWQgdG8gZm9jdXMgb24gZnV6emluZyAqaXQqIGRpcmVjdGx5LiBUaGUgbW9yZSB2YWx1YWJsZSB0YXJnZXQgZm9yIGZ1enppbmcsIEkgdGhpbmssIGlzIHRoZSBjb3JlIFJDVSBkZWZlcnJhbCBsb2dpYy4gVGhhdOKAmXMgd2hlcmUgdGhlIHJlYWwgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB3aWxsIGJlLgoKVGhlIGRlZmVycmFsIGxvZ2ljIGlzLCBvZiBjb3Vyc2UsIGNlbnRyYWwgdG8gYGNhbGxfcmN1YCBhbmQgYGNhbGxfc3JjdWAsIGFuZCB0aG9zZSBhcmUgY2FsbGVkICpldmVyeXdoZXJlKi4gVGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5ICpoYW5kbGUqIHRoZSBkZWZlcnJlZCBjYWxsYmFja3MgYXJlIHRoaW5ncyBsaWtlOiBgc3JjdV9kZWZlcl9kcmFpbmAsIGByY3VfZGVmZXJfZHJhaW5gLCBgc3JjdV9vZmZsaW5lX2RyYWluYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBgcmN1X2JhcnJpZXJgLCBhbmQgYHNyY3VfYmFycmllcmAuCgpXYWl0IGEgbWludXRlLi4uIEkmIzM5O20gbm90aWNpbmcgc29tZXRoaW5nLiBgcmN1X2RlZmVyX2RyYWluYCBhbmQgYHNyY3VfZGVmZXJfZHJhaW5gIGFyZSAqc3RhdGljKiB3aXRoaW4gYHRyZWUuY2AgYW5kIGBzcmN1dHJlZS5jYC4gVGhhdOKAmXMgc2lnbmlmaWNhbnQuIEhtbSwgKnNyY3VfZGVmZXJfZHJhaW4qIGlzIGV4cG9ydGVkIGZyb20gYHNyY3V0aW55LmNgLCBidXQgaXQmIzM5O3Mgc3RhdGljIGluIGBzcmN1dHJlZS5jYC4gIFNpbmNlIGBzcmN1dHJlZS5jYCBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgU01QIHN5c3RlbXMsIGl0IG1lYW5zIGBzcmN1X2RlZmVyX2RyYWluYCBpcyBzdGF0aWMgaW4gdGhlIG1vc3QgY29tbW9uIGNhc2UuIFRoYXQgaW1wbGllcyBsaW1pdGVkIGFjY2VzcyBmb3IgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBgc3JjdV9vZmZsaW5lX2RyYWluYCBpcyBleHBvcnRlZCBhcyB3ZWxsLiBUaGlzIG1pZ2h0IGluZmx1ZW5jZSBteSBmdXp6aW5nIHN0cmF0ZWd5IGFuZCB0ZXN0IGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipzcmN1X29mZmxpbmVfZHJhaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAzNQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipBbmFseXppbmcgS2VybmVsIFN5bmNocm9uaXphdGlvbiBQcmltaXRpdmVzKioKCkFscmlnaHQsIHNvIHRoZSB0aGluZyBpc24mIzM5O3QgKnN0YXRpY2FsbHkqIGRlZmluZWQsIGJ1dCBpdCYjMzk7cyBub3Qgc2ltcGx5IGFuIGludGVybmFsLCBzdGF0aWMgY29uc3RydWN0IGVpdGhlci4gSW50cmlndWluZy4gTGV0JiMzOTtzIGRpZyBkZWVwZXI6IHNwZWNpZmljYWxseSwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGlzbiYjMzk7dCBzdGF0aWMsIG1lYW5pbmcgaXQmIzM5O3MgcG90ZW50aWFsbHkgdmlzaWJsZSBiZXlvbmQgaXRzIGltbWVkaWF0ZSBzY29wZS4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBOb3csIGF0IGxlYXN0IEkgKmRvKiBrbm93IHRoYXQgYHJjdV9iYXJyaWVyYCBhbmQgYHNyY3VfYmFycmllcmAgYXJlLCBpbiBmYWN0LCBleHBvcnRlZC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdCwgcHJvdmlkaW5nIHNvbWUgY29uY3JldGUgcG9pbnRzIG9mIHJlZmVyZW5jZS4KClRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB2ZXJpZnkgdGhlIGV4cG9ydCBzdGF0dXMgb2YgYHJjdV9iYXJyaWVyYCBhbmQgYHNyY3VfYmFycmllcmAgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGJlaW5nIHVzZWQuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlaXIgZXhwb3J0IHN0YXR1cyBhbmQgd2hhdCB0aGF0IGltcGxpZXMgaW4gdGVybXMgb2Yga2VybmVsIGRlc2lnbiBhbmQgZGVwZW5kZW5jeS4gS25vd2luZyB0aGVpciBpbnRlcmZhY2UgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXkmIzM5O3JlIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnJjdV9iYXJyaWVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3Uvc3JjdXRpbnkuYz0zMDA9dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTMwNS19XG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MzA2OkVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7XG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMzA3LVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xODAwPXZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xODQyLX1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxODQzOkVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7XG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTg0NC1cbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTIzMD12b2lkIHJjdV9iYXJyaWVyX3Rhc2tzKHZvaWQpXG4tLVxua2VybmVsL3JjdS90YXNrcy5oLTEyMzMtfVxua2VybmVsL3JjdS90YXNrcy5oOjEyMzQ6RVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXJfdGFza3MpO1xua2VybmVsL3JjdS90YXNrcy5oLTEyMzUtXG4tLVxua2VybmVsL3JjdS90aW55LmM9MTIwPXZvaWQgcmN1X2JhcnJpZXIodm9pZClcbi0tXG5rZXJuZWwvcmN1L3RpbnkuYy0xMjUtfVxua2VybmVsL3JjdS90aW55LmM6MTI2OkVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpO1xua2VybmVsL3JjdS90aW55LmMtMTI3LVxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTM5Nzc9dm9pZCByY3VfYmFycmllcih2b2lkKVxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQwNzQtfVxua2VybmVsL3JjdS90cmVlLmM6NDA3NTpFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcik7XG5rZXJuZWwvcmN1L3RyZWUuYy00MDc2LVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9MTM0Mz12b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTM0Ny19XG5tbS9zbGFiX2NvbW1vbi5jOjEzNDg6RVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyKTtcbm1tL3NsYWJfY29tbW9uLmMtMTM0OS1cbm1tL3NsYWJfY29tbW9uLmM9MTM1MD12b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEzNTQtfVxubW0vc2xhYl9jb21tb24uYzoxMzU1OkVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZSk7XG5tbS9zbGFiX2NvbW1vbi5jLTEzNTYtXG4tLVxubW0vc2xhYl9jb21tb24uYz0yMTc3PXZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0yMTgxLX1cbm1tL3NsYWJfY29tbW9uLmM6MjE4MjpFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXIpO1xubW0vc2xhYl9jb21tb24uYy0yMTgzLVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9MjE5MT12b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTIyMDQtfVxubW0vc2xhYl9jb21tb24uYzoyMjA1OkVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZSk7XG5tbS9zbGFiX2NvbW1vbi5jLTIyMDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTYzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgTGluZSBvZiBSZWFzb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byB0YXJnZXQgc29tZSBSQ1UgZGVmZXJyYWwgbG9naWMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggZGVmZXJyZWQgUkNVIGZsdXNoaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYHJjdV9iYXJyaWVyYCBhbmQgYHNyY3VfYmFycmllcmAgc2VlbWVkIGxpa2UgZ29vZCB0YXJnZXRzIHNpbmNlIHRoZXkmIzM5O3JlIGV4cG9ydGVkIGFuZCBJIHNhdyB0aGV5IHdlcmUgbW9kaWZpZWQgdG8gY2FsbCBgcmN1X2RlZmVyX2ZsdXNoKClgIGFuZCBgc3JjdV9kZWZlcl9mbHVzaCgpYC4gV2FpdCwgdGhhdCYjMzk7cyBub3QgcmlnaHQsIHRob3NlIGBfZGVmZXJfZmx1c2hgIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBzbyB0aGF0IGFwcHJvYWNoIHdvbiYjMzk7dCB3b3JrLgoKQnV0LCBJIHNlZSBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgQ1BVIGhvdHBsdWcgYW5kIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEFsc28sIGBzcmN1X29mZmxpbmVfZHJhaW5gIGlzIGFsc28gY2FsbGVkIGR1cmluZyBDUFUgaG90cGx1Zywgc28gdGhvc2UgdHdvIGFyZSBwb3RlbnRpYWwgdGFyZ2V0cy4KCkkgcmVtZW1iZXIgdGhlIGByY3VfcmVlbnRyeS5jYCBzZWxmdGVzdCwgYW5kIGl0IHVzZXMgQlBGIHRvIHRyaWdnZXIgYGNhbGxfcmN1X3Rhc2tzX3RyYWNlYCBmcm9tIGByY3Vfc2VnY2JsaXN0X2VucXVldWVgIHZpYSBgYnBmX3Rhc2tfc3RvcmFnZV9kZWxldGVgLiBUaGF0IHN1Z2dlc3RzIHRoYXQgQlBGIGNhbiB0cmlnZ2VyIHRoaXMgZGVmZXJyYWwgbG9naWMsIHdoaWNoIG1lYW5zIGZ1enppbmcgQlBGIHN5c2NhbGxzIGFuZCBtYXBzIGlzIGEgZ29vZCBhdmVudWUgdG8gZXhwbG9yZS4gVGhlIGdvb2QgdGhpbmcgaXMgdGhhdCBJIGRvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgQlBGIGZ1bmN0aW9ucywganVzdCBmb2N1cyBvbiB0aGUgUkNVIGZ1bmN0aW9ucy4KClNvLCBoZXJlJiMzOTtzIHRoZSBjb3JlIHNldCBvZiBzeW1ib2xzIEkmIzM5O20gZm9jdXNpbmcgb246IGByY3VfYmFycmllcmAsIGBzcmN1X2JhcnJpZXJgLCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AsIGFuZCBgc3JjdV9vZmZsaW5lX2RyYWluYC4KCkhvd2V2ZXIsIG5vdyBJIHJlbWVtYmVyIHRoYXQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGFuZCBgc3JjdV9vZmZsaW5lX2RyYWluYCBhcmVuJiMzOTt0IHN5c2NhbGxzOyB0aGV5JiMzOTtyZSBpbnRlcm5hbCBrZXJuZWwgZnVuY3Rpb25zLiBTeXprYWxsZXIgY2FuJiMzOTt0IGRpcmVjdGx5IGNhbGwgdGhlbS4gSG93ZXZlciwgaXQgKmNhbiogdHJpZ2dlciBDUFUgaG90cGx1Zywgd2hpY2gsIGluIHR1cm4sIGNhbGxzIHRoZXNlIGZ1bmN0aW9ucy4KClN5emthbGxlciAqY2FuKiBkaXJlY3RseSBjYWxsIGByY3VfYmFycmllcmAgYW5kIGBzcmN1X2JhcnJpZXJgIHZpYSB2YXJpb3VzIHN5c2NhbGxzIG9yIGlmIHdlIGFkZCB0aGVtIGRpcmVjdGx5IHRvIHN5emxhbmcsIGJ1dCB0aGV5JiMzOTtyZSBwcm9iYWJseSBhbHJlYWR5IHJlYWNoYWJsZSB0aHJvdWdoIG1hbnkgb3RoZXIgZXhpc3RpbmcgcGF0aHMuCgpUaGUga2V5IGluc2lnaHQgaXMgdGhpczogZXZlbiBpZiBJIGp1c3QgbGlzdCBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgYXMgdGFyZ2V0cywgU3l6a2FsbGVyJiMzOTtzIGNvdmVyYWdlIGd1aWRhbmNlIHdpbGwgdGhlbiB0cnkgdG8gcmVhY2ggdGhlbS4gVGhhdCBtaWdodCBiZSB0aGUgc2ltcGxlc3QgYXBwcm9hY2guCgpJIG5lZWQgdG8gY2hlY2sgaG93IHRvIHJlYWNoIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vTWVtb3J5LU9yZGVyaW5nL1RyZWUtUkNVLU1lbW9yeS1PcmRlcmluZy5yc3Q9Mjk0PWZpbmFsIGNvZGUgcGF0aCBvbiB0aGUgcmlnaHQgaXMgdGFrZW4gb25seSBpbiBrZXJuZWxzIGJ1aWx0IHdpdGhcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vTWVtb3J5LU9yZGVyaW5nL1RyZWUtUkNVLU1lbW9yeS1PcmRlcmluZy5yc3QtMjk2LWBgcmN1X2FkdmFuY2VfY2JzKClgYCwgYGByY3VfbWlncmF0ZV9jYWxsYmFja3NgYCxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9NZW1vcnktT3JkZXJpbmcvVHJlZS1SQ1UtTWVtb3J5LU9yZGVyaW5nLnJzdDoyOTc6YGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKClgYCwgYW5kIGBgdGFrZWRvd25fY3B1KClgYCwgd2hpY2ggaW4gdHVyblxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL01lbW9yeS1PcmRlcmluZy9UcmVlLVJDVS1NZW1vcnktT3JkZXJpbmcucnN0LTI5OC1pcyBpbnZva2VkIG9uIGEgc3Vydml2aW5nIENQVSBhZnRlciB0aGUgb3V0Z29pbmcgQ1BVIGhhcyBiZWVuIGNvbXBsZXRlbHlcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vTWVtb3J5LU9yZGVyaW5nL1RyZWVSQ1UtY2FsbGJhY2stcmVnaXN0cnkuc3ZnLTU2NS0gICAgICAgaWQ9XCYjMzQ7dGV4dDIwMi03LTktNlwmIzM0O1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL01lbW9yeS1PcmRlcmluZy9UcmVlUkNVLWNhbGxiYWNrLXJlZ2lzdHJ5LnN2Zzo1NjY6ICAgICAgIHN0eWxlPVwmIzM0O2ZvbnQtc2l6ZToxOTJweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpib2xkO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4wMjVpbjtmb250LWZhbS4uLlxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL01lbW9yeS1PcmRlcmluZy9UcmVlUkNVLWNhbGxiYWNrLXJlZ2lzdHJ5LnN2Zy01NjctICAgIFx1MDAzY3RleHRcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vTWVtb3J5LU9yZGVyaW5nL1RyZWVSQ1UtZ3Auc3ZnLTE0NDctICAgICAgIGlkPVwmIzM0O3RleHQyMDItNy05LTZcJiMzNDtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9NZW1vcnktT3JkZXJpbmcvVHJlZVJDVS1ncC5zdmc6MTQ0ODogICAgICAgc3R5bGU9XCYjMzQ7Zm9udC1zaXplOjE5MnB4O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbmNob3I6c3RhcnQ7ZmlsbDojMDAwMDAwO3N0cm9rZS13aWR0aDowLjAyNWluO2ZvbnQtZmFtaWx5OkNvdXJpZXJcJiMzNDtcdTAwM2VyLi4uXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vTWVtb3J5LU9yZGVyaW5nL1RyZWVSQ1UtZ3Auc3ZnLTE0NDktICAgIFx1MDAzY3RleHRcbi0tXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oPTU1MD1lbnVtXG4tLVxuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaC01NjktICogXyBSQ1U6XG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oOjU3MDogKiBcdDEpIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKSBtaWdyYXRlcyB0aGUgcXVldWUuXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oLTU3MS0gKiBcdDIpIHJjdXRyZWVfcmVwb3J0X2NwdV9kZWFkKCkgcmVwb3J0cyB0aGUgZmluYWwgcXVpZXNjZW50IHN0YXRlcy5cbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaD0xMTA9aW50IHJjdXRyZWVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSk7XG4tLVxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmgtMTE2LVxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmg6MTE3OnZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KTtcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oLTExOC1cbi0tXG5rZXJuZWwvY3B1LmM9MTMwMj1zdGF0aWMgaW50IHRha2Vkb3duX2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbmtlcm5lbC9jcHUuYy0xMzUxLVx0ICovXG5rZXJuZWwvY3B1LmM6MTM1MjpcdHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoY3B1KTtcbmtlcm5lbC9jcHUuYy0xMzUzLVxuLS1cbmtlcm5lbC9yY3UvcmN1Lmg9NTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpXG4tLVxua2VybmVsL3JjdS9yY3UuaC01ODktXG5rZXJuZWwvcmN1L3JjdS5oOjU5MDovKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUmIzM5O3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovXG5rZXJuZWwvcmN1L3JjdS5oLTU5MS12b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTUxNT1zdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1MzgtICogRHJhaW4gQGNwdSYjMzk7cyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3M7IGNhbGxlZCBmcm9tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTUzOTogKiByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkgb25jZSBAY3B1IGlzIGRlYWQuICBPbmUgcGFzcyBjb3ZlcnMgZXZlcnlcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTQwLSAqIHNyY3Vfc3RydWN0LCBhcyB0aGUgcGVyLUNQVSBzcmN1X2RlZmVyIGxpc3QgY2hhaW5zIHRoZW0gYWxsLCBhbmQgdGhlXG4tLVxua2VybmVsL3JjdS90cmVlLmM9MzE2Nj1zdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0zMjE5LSAqIHRoZSBkcmFpbmVycyAtLSB0aGlzIENQVSYjMzk7cyBpcnFfd29yaywgcmN1X2RlZmVyX2ZsdXNoKCkgYW5kXG5rZXJuZWwvcmN1L3RyZWUuYzozMjIwOiAqIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKSAtLSBzZXJpYWxpemUgYW5kIG5ldmVyIGxlYXZlIGEgY2FsbGJhY2sgb2ZmXG5rZXJuZWwvcmN1L3RyZWUuYy0zMjIxLSAqIC1cdTAwM2VkZWZlcl9oZWFkIHlldCBub3Qgb24gYSBjYWxsYmFjayBsaXN0LlxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTQ1NjA9dm9pZCByY3V0cmVlX3JlcG9ydF9jcHVfZGVhZCh2b2lkKVxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MTQtICovXG5rZXJuZWwvcmN1L3RyZWUuYzo0NjE1OnZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KVxua2VybmVsL3JjdS90cmVlLmMtNDYxNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDA2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSQ1UgQ29kZSBmb3IgU3l6a2FsbGVyIFRlc3RpbmcqKgoKT2theSwgc28gYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGlzIGRlZmluaXRlbHkgY2FsbGVkIGZyb20gYHRha2Vkb3duX2NwdWAgd2l0aGluIGBrZXJuZWwvY3B1LmNgLiBUaGF0JiMzOTtzIGluIHRoZSBDUFUgaG90cGx1ZyBwYXRoLCB3aGljaCBtYWtlcyBpdCBhIHNvbGlkIHRhcmdldC4gTm93LCBsZXQmIzM5O3MgZXhwbG9yZSBvdGhlciBzdWl0YWJsZSBmdW5jdGlvbnMuIGBjYWxsX3JjdV9kZWZlcmAgaXMgaW50ZXJuYWwgdG8gdGhlIGRlZmVycmFsIGxvZ2ljLiBBbmQgYmVjYXVzZSBpdCYjMzk7cyBzdGF0aWMgaXQmIzM5O3Mgbm90IGlkZWFsLiBTYW1lIHdpdGggYHNyY3VfZGVmZXJfZHJhaW5gIGFuZCBgcmN1X2RlZmVyX2RyYWluYCwgdGhleSYjMzk7cmUgdGhlIGlycV93b3JrIGhhbmRsZXJzLgoKQnV0LCBob2xkIG9uLi4uIGByY3VfZGVmZXJfZHJhaW5gIGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYElSUV9XT1JLX0lOSVRfSEFSRGAsIHdoaWNoIG1lYW5zIGl0IGlzbiYjMzk7dCBpbmxpbmVkISBFeGNlbGxlbnQsIHRoYXQgbWFrZXMgaXQgbW9yZSBhY2Nlc3NpYmxlLgoKRm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMsIEkgbmVlZCB0byBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFNvLCBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgbG9vayBsaWtlIGdvb2Qgb3B0aW9ucy4KCk5vdywgYWJvdXQgYENPTkZJR19SQ1VfREVGRVJgLiBJdCBkZXBlbmRzIG9uIGBIQVZFX05NSSB8fCBLUFJPQkVTIHx8IEZVTkNUSU9OX1RSQUNFUiB8fCBUUkFDRVBPSU5UU2AuIFRvIGVuc3VyZSBpdCYjMzk7cyBlbmFibGVkLCBJJiMzOTtsbCBuZWVkIHRvIGFkZCBgS1BST0JFU2AgYW5kIGBGVU5DVElPTl9UUkFDRVJgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEFsc28sIGBQRVJGX0VWRU5UU2AgaXMgbmVjZXNzYXJ5IGZvciBgcmN1X3RvcnR1cmVfbm1pX2luaXRgLiBBbmQgb2YgY291cnNlLCBJIG5lZWQgYFJDVV9UT1JUVVJFX1RFU1RgIHRvIHJ1biB0aGUgdG9ydHVyZSB0ZXN0cy4KCkJ1dCwgYFJDVV9UT1JUVVJFX1RFU1RgIGlzIGEgbW9kdWxlLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgbG9hZCBpdCBieSBkZWZhdWx0IHVubGVzcyBpdCYjMzk7cyBidWlsdC1pbiBvciBleHBsaWNpdGx5IGxvYWRlZC4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gbGlzdCBjb25maWd1cmF0aW9uIGZsYWdzIG5lZWRlZCB0byBjb21waWxlIGFuZCB0ZXN0IHRoZSAqbW9kaWZpZWQqIGNvZGUuIFNvLCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBgUEVSRl9FVkVOVFNgLCBhbmQgYFJDVV9UT1JUVVJFX1RFU1RgLiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCBgUkNVX1RPUlRVUkVfVEVTVGAgaW4gYGtlcm5lbC9yY3UvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSQ1VfVE9SVFVSRV9URVNUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zz0yNj1jb25maWcgUkNVX1NDQUxFX1RFU1Rcbi0tXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctNDAtXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWc6NDE6Y29uZmlnIFJDVV9UT1JUVVJFX1RFU1Rcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy00Mi1cdHRyaXN0YXRlIFwmIzM0O3RvcnR1cmUgdGVzdHMgZm9yIFJDVVwmIzM0O1xuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy01NS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo1Njpjb25maWcgUkNVX1RPUlRVUkVfVEVTVF9DSEtfUkRSX1NUQVRFXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctNTctXHRib29sIFwmIzM0O0NoZWNrIHJjdXRvcnR1cmUgcmVhZGVyIHN0YXRlXCYjMzQ7XG4tLVxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTcxLVxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnOjcyOmNvbmZpZyBSQ1VfVE9SVFVSRV9URVNUX0xPR19DUFVcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy03My1cdGJvb2wgXCYjMzQ7TG9nIENQVSBmb3IgcmN1dG9ydHVyZSBmYWlsdXJlc1wmIzM0O1xuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy04Ni1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo4Nzpjb25maWcgUkNVX1RPUlRVUkVfVEVTVF9MT0dfR1Bcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy04OC1cdGJvb2wgXCYjMzQ7TG9nIGdyYWNlLXBlcmlvZCBudW1iZXJzIGZvciByY3V0b3J0dXJlIGZhaWx1cmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjczCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIERlcGVuZGVuY3kgQ2hhaW4qKgoKT2theSwgc28gYFJDVV9UT1JUVVJFX1RFU1RgIGlzIGZsYWdnaW5nIGEgZGVwZW5kZW5jeSBvbiBgVE9SVFVSRV9URVNUYC4gVGhhdCYjMzk7cyBhIGNvbW1vbiBwYXR0ZXJuIGluIHRoZSBmcmFtZXdvcms7IG9uZSB0ZXN0IG9mdGVuIGJ1aWxkcyB1cG9uIGFub3RoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYFRPUlRVUkVfVEVTVGAgdG8gZmlndXJlIG91dCB3aHkgYFJDVV9UT1JUVVJFX1RFU1RgIG1pZ2h0IGJlIGZhaWxpbmcsIG9yIGJlaGF2aW5nIGluIGFuIHVuZXhwZWN0ZWQgbWFubmVyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBUT1JUVVJFX1RFU1RgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUT1JUVVJFX1RFU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS9LY29uZmlnLmRlYnVnPTExPWNvbmZpZyBQUk9WRV9SQ1VfTElTVFxuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy0yMS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1ZzoyMjpjb25maWcgVE9SVFVSRV9URVNUXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctMjMtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk0NQoJCQkJCQkJb3V0cHV0OiAzMTYKCQkJCQkJCXRob3VnaHRzOiAyMTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBSQ1UgRGVmZXJyYWwgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSB0YXNrIGlzIHRvIGlkZW50aWZ5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLgoKSSBzZWUgdGhhdCBgVE9SVFVSRV9URVNUYCBpcyBhIHRyaXN0YXRlLCBhbmQgZW5hYmxlZCBieSBgUkNVX1RPUlRVUkVfVEVTVGAuICBTbywgZW5hYmxpbmcgYFJDVV9UT1JUVVJFX1RFU1RgIGlzIHRoZSByaWdodCB0aGluZyB0byBkby4KClRoZSBCUEYgdGVzdCB1dGlsaXplcyBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuIFRoZSBwcmVzZW5jZSBvZiBhIG5ldyBCUEYgc2VsZi10ZXN0LCBzcGVjaWZpY2FsbHkgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmNgLCBzY3JlYW1zIHRoYXQgQlBGIGlzIGEgZ3JlYXQgYXZlbnVlIGZvciB0ZXN0aW5nIHRoaXMuICBTbywgYEJQRl9TWVNDQUxMYCBpcyBkZWZpbml0ZWx5IGEga2V5IGNvbmZpZyB0byBlbmFibGUuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSByZWxldmFudCBmdW5jdGlvbnMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZmluZCBlbnRyeSBwb2ludHMgdGhhdCB0cmlnZ2VyIHRoZSBuZXcgZGVmZXJyZWQgY2FsbGJhY2sgbG9naWMgYnV0IGFyZW4mIzM5O3QgaG90IHBhdGhzLCB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZSBvbiBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAuIEFyZSB0aGV5IGhvdCBwYXRocz8gTm8sIG5vLCBubywgYW5kIG5vLiBUaGlzIGxvb2tzIHByb21pc2luZy4KCmBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIGJ1dCB0aGV5IGFyZSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gdGhvc2UgYXJlIG91dC4gVGhlIGdvYWwgaXMgdG8gZmx1c2gvbWlncmF0ZSB0aGUgbmV3IGRlZmVycmFsIGNhbGxiYWNrcy4KCkkmIzM5O20gdGhpbmtpbmc6IGBzcmN1X2RlZmVyX2RyYWluYCBpcyBleHBvcnRlZCBpbiBgc3JjdXRpbnkuY2AsIGJ1dCBzdGF0aWMgaW4gYHNyY3V0cmVlLmNgLiBgc3JjdV9vZmZsaW5lX2RyYWluYCBpcyBub3Qgc3RhdGljIGluIGBzcmN1dHJlZS5jYCwgc28gaXQmIzM5O3MgYSBiZXR0ZXIgY2hvaWNlLiBgcmN1X2JhcnJpZXJgIGNhbGxzIGByY3VfZGVmZXJfZmx1c2goKWAsIHdoaWNoIGlzIHN0YXRpYywgc28gYHJjdV9iYXJyaWVyYCBpcyBhIGdvb2QgdGFyZ2V0LiBMaWtld2lzZSwgYHNyY3VfYmFycmllcmAgY2FsbHMgc3RhdGljIGBzcmN1X2RlZmVyX2ZsdXNoKClgLCBzbyBgc3JjdV9iYXJyaWVyYCBpcyBnb29kLiBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgY2FsbHMgYHJjdV9kZWZlcl9kcmFpbmAgYW5kIGBzcmN1X29mZmxpbmVfZHJhaW5gLCBhbHNvIGxvb2tzIGdvb2QuIGBzcmN1X29mZmxpbmVfZHJhaW5gIGl0c2VsZiBjYWxscyBgc3JjdV9kZWZlcl9kcmFpbmAuIFRoZSBsaXN0OgotIGByY3VfYmFycmllcmAKLSBgc3JjdV9iYXJyaWVyYAotIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYAotIGBzcmN1X29mZmxpbmVfZHJhaW5gCgpTZWVtcyBwcmV0dHkgc29saWQuCgpDb25maWctd2lzZSwgSSYjMzk7dmUgZ290OiBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBgUEVSRl9FVkVOVFNgLCBgUkNVX1RPUlRVUkVfVEVTVGAsIGFuZCBgQlBGX1NZU0NBTExgLgoKQWgsIGJ1dCB3YWl0ISBgQ09ORklHX1JDVV9ERUZFUmAgaXMgZGVmaW5lZCBpbiB0ZXJtcyBvZiBgSEFWRV9OTUlgLCBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYFRSQUNFUE9JTlRTYC4gU28sIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBlbmFibGVkLCBJIG5lZWQgdG8gbGlzdCB0aG9zZS4gYEhBVkVfTk1JYCBpcyB1c3VhbGx5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgYnV0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgYEtQUk9CRVNgLCBgRlVOQ1RJT05fVFJBQ0VSYCwgYW5kIGBUUkFDRVBPSU5UU2AgY292ZXIgdXMuCgpgUkNVX1RPUlRVUkVfVEVTVGAgaXMgYSBtb2R1bGUuIFdoaWxlIGl0IGNvdWxkIGludHJvZHVjZSBzb21lIG5vaXNlIGlmIGl0JiMzOTtzIGJ1aWx0LWluLCB0aGUgcGF0Y2ggKm1vZGlmaWVzKiBgcmN1dG9ydHVyZS5jYCwgYWRkaW5nIE5NSSB0ZXN0aW5nLCBzbyBlbmFibGluZyBpdCBzZWVtcyBjb3JyZWN0LgoKQW5kIGBCUEZfU1lTQ0FMTGAgaXMgY3JpdGljYWwgYmVjYXVzZSBCUEYgaXMgYSBwcmltYXJ5IGRyaXZlciBvZiB0aGlzIG5ldyBsb2dpYywgYW5kIGl0IHRyaWdnZXJzIGBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcmAgaW4gYHJjdXRvcnR1cmUuY2Agc28gYFBFUkZfRVZFTlRTYCBpcyBuZWVkZWQuCgpUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmFsIG1lY2hhbmlzbSBmb3IgYGNhbGxfcmN1KClgIGFuZCBgY2FsbF9zcmN1KClgIHdoZW4gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIG5vdGFibHkgZm9yIE5NSXMgYW5kIEJQRiBwcm9ncmFtcy4gSXQgY2hhbmdlcyBjb3JlIFJDVSBhbmQgU1JDVSBsb2dpYywgYWRkaW5nIG5ldyBkZWZlcnJlZCBjYWxsYmFjayBsaXN0cyBhbmQgaXJxX3dvcmsgcXVldWVzLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBOTUkgdGVzdGluZyBpbiBgcmN1dG9ydHVyZWAgYW5kIGEgQlBGIHNlbGZ0ZXN0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYW5kIHdhcnJhbnRzIGZ1enppbmcuIGByY3VfYmFycmllcmAsIGBzcmN1X2JhcnJpZXJgLCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AsIGFuZCBgc3JjdV9vZmZsaW5lX2RyYWluYCBhcmUgZ29vZCBmb2N1cyBzeW1ib2xzIGJlY2F1c2UgdGhleSYjMzk7cmUgbm9uLWhvdHBhdGggZW50cnkgcG9pbnRzIHRoYXQgZmx1c2ggb3IgbWlncmF0ZSB0aGUgbmV3IGRlZmVycmVkIGxpc3RzLiBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYFRSQUNFUE9JTlRTYCBlbmFibGUgYENPTkZJR19SQ1VfREVGRVJgLCBgUEVSRl9FVkVOVFNgIGFuZCBgUkNVX1RPUlRVUkVfVEVTVGAgY292ZXIgdGhlIE5NSSB0ZXN0cywgYW5kIGBCUEZfU1lTQ0FMTGAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgQlBGIGlzIGEgcHJpbWFyeSB1c2VyLgoKTGV0JiMzOTtzIHF1aWNrbHkgcmVmaW5lIHRoZSBmb2N1cyBzeW1ib2xzLCB3aGljaCBpcwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLUFJPQkVTJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7LAogICAgJiMzNDtUUkFDRVBPSU5UUyYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtSQ1VfVE9SVFVSRV9URVNUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7c3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O3JjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MmIzM0OywKICAgICYjMzQ7c3JjdV9vZmZsaW5lX2RyYWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJhbCBtZWNoYW5pc20gZm9yIGNhbGxfcmN1KCkgYW5kIGNhbGxfc3JjdSgpIHRvIHNhZmVseSBoYW5kbGUgY2FsbGJhY2sgZW5xdWV1ZXMgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAoZS5nLiwgZnJvbSBOTUlzIG9yIEJQRiBwcm9ncmFtcykuIEl0IGFkZHMgbG9ja2xlc3MgbGlzdHMgYW5kIGlycV93b3JrIHRvIGRlZmVyIHRoZSBhY3R1YWwgZW5xdWV1ZSB1bnRpbCBpdCBpcyBzYWZlLiBJdCBhbHNvIHVwZGF0ZXMgcmN1X2JhcnJpZXIoKSwgc3JjdV9iYXJyaWVyKCksIGFuZCBDUFUgaG90cGx1ZyBwYXRocyB0byBmbHVzaCB0aGVzZSBkZWZlcnJlZCBjYWxsYmFja3MuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBOTUkgdGVzdGluZyB0byByY3V0b3J0dXJlIHVzaW5nIHBlcmYgZXZlbnRzLCBhbmQgYSBCUEYgc2VsZnRlc3QuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIFJDVSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gRm9jdXMgc3ltYm9scyBpbmNsdWRlIHRoZSBiYXJyaWVyIGFuZCBDUFUgb2ZmbGluZSBmdW5jdGlvbnMgdGhhdCBkcmFpbiB0aGUgbmV3IGRlZmVycmVkIGxpc3RzLiBSZXF1aXJlZCBjb25maWdzIGluY2x1ZGUgS1BST0JFUy9GVU5DVElPTl9UUkFDRVIvVFJBQ0VQT0lOVFMgdG8gZW5hYmxlIENPTkZJR19SQ1VfREVGRVIsIFBFUkZfRVZFTlRTIGFuZCBSQ1VfVE9SVFVSRV9URVNUIGZvciB0aGUgcmN1dG9ydHVyZSBjaGFuZ2VzLCBhbmQgQlBGX1NZU0NBTEwgYXMgQlBGIGlzIGEgcHJpbWFyeSB0cmlnZ2VyIGZvciB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tQUk9CRVMmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDssCiAgICAmIzM0O1RSQUNFUE9JTlRTJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O1JDVV9UT1JUVVJFX1RFU1QmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyY3VfYmFycmllciYjMzQ7LAogICAgJiMzNDtzcmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7cmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtzcmN1X29mZmxpbmVfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmFsIG1lY2hhbmlzbSBmb3IgY2FsbF9yY3UoKSBhbmQgY2FsbF9zcmN1KCkgdG8gc2FmZWx5IGhhbmRsZSBjYWxsYmFjayBlbnF1ZXVlcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkIChlLmcuLCBmcm9tIE5NSXMgb3IgQlBGIHByb2dyYW1zKS4gSXQgYWRkcyBsb2NrbGVzcyBsaXN0cyBhbmQgaXJxX3dvcmsgdG8gZGVmZXIgdGhlIGFjdHVhbCBlbnF1ZXVlIHVudGlsIGl0IGlzIHNhZmUuIEl0IGFsc28gdXBkYXRlcyByY3VfYmFycmllcigpLCBzcmN1X2JhcnJpZXIoKSwgYW5kIENQVSBob3RwbHVnIHBhdGhzIHRvIGZsdXNoIHRoZXNlIGRlZmVycmVkIGNhbGxiYWNrcy4gQWRkaXRpb25hbGx5LCBpdCBhZGRzIE5NSSB0ZXN0aW5nIHRvIHJjdXRvcnR1cmUgdXNpbmcgcGVyZiBldmVudHMsIGFuZCBhIEJQRiBzZWxmdGVzdC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgUkNVIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiBGb2N1cyBzeW1ib2xzIGluY2x1ZGUgdGhlIGJhcnJpZXIgYW5kIENQVSBvZmZsaW5lIGZ1bmN0aW9ucyB0aGF0IGRyYWluIHRoZSBuZXcgZGVmZXJyZWQgbGlzdHMuIFJlcXVpcmVkIGNvbmZpZ3MgaW5jbHVkZSBLUFJPQkVTL0ZVTkNUSU9OX1RSQUNFUi9UUkFDRVBPSU5UUyB0byBlbmFibGUgQ09ORklHX1JDVV9ERUZFUiwgUEVSRl9FVkVOVFMgYW5kIFJDVV9UT1JUVVJFX1RFU1QgZm9yIHRoZSByY3V0b3J0dXJlIGNoYW5nZXMsIGFuZCBCUEZfU1lTQ0FMTCBhcyBCUEYgaXMgYSBwcmltYXJ5IHRyaWdnZXIgZm9yIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjMyLjcxNTI2OTQwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTc1NDE2NzU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLUFJPQkVTXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIixcbiAgICBcIlRSQUNFUE9JTlRTXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiUkNVX1RPUlRVUkVfVEVTVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9iYXJyaWVyXCIsXG4gICAgXCJyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzXCIsXG4gICAgXCJzcmN1X29mZmxpbmVfZHJhaW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVmZXJyYWwgbWVjaGFuaXNtIGZvciBjYWxsX3JjdSgpIGFuZCBjYWxsX3NyY3UoKSB0byBzYWZlbHkgaGFuZGxlIGNhbGxiYWNrIGVucXVldWVzIHdoZW4gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgKGUuZy4sIGZyb20gTk1JcyBvciBCUEYgcHJvZ3JhbXMpLiBJdCBhZGRzIGxvY2tsZXNzIGxpc3RzIGFuZCBpcnFfd29yayB0byBkZWZlciB0aGUgYWN0dWFsIGVucXVldWUgdW50aWwgaXQgaXMgc2FmZS4gSXQgYWxzbyB1cGRhdGVzIHJjdV9iYXJyaWVyKCksIHNyY3VfYmFycmllcigpLCBhbmQgQ1BVIGhvdHBsdWcgcGF0aHMgdG8gZmx1c2ggdGhlc2UgZGVmZXJyZWQgY2FsbGJhY2tzLiBBZGRpdGlvbmFsbHksIGl0IGFkZHMgTk1JIHRlc3RpbmcgdG8gcmN1dG9ydHVyZSB1c2luZyBwZXJmIGV2ZW50cywgYW5kIGEgQlBGIHNlbGZ0ZXN0LiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBSQ1UgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuIEZvY3VzIHN5bWJvbHMgaW5jbHVkZSB0aGUgYmFycmllciBhbmQgQ1BVIG9mZmxpbmUgZnVuY3Rpb25zIHRoYXQgZHJhaW4gdGhlIG5ldyBkZWZlcnJlZCBsaXN0cy4gUmVxdWlyZWQgY29uZmlncyBpbmNsdWRlIEtQUk9CRVMvRlVOQ1RJT05fVFJBQ0VSL1RSQUNFUE9JTlRTIHRvIGVuYWJsZSBDT05GSUdfUkNVX0RFRkVSLCBQRVJGX0VWRU5UUyBhbmQgUkNVX1RPUlRVUkVfVEVTVCBmb3IgdGhlIHJjdXRvcnR1cmUgY2hhbmdlcywgYW5kIEJQRl9TWVNDQUxMIGFzIEJQRiBpcyBhIHByaW1hcnkgdHJpZ2dlciBmb3IgdGhpcyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDozMi43MTUyNzU0NjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyOTM3NDQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNlZjM2NzQyYjE3YmViMGU3MzQ2YjU4ZjUxOGJhN2U4NmE3NjY3NDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDE6MTQ6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oIGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oXFxuaW5kZXggZmJjZjEzYmMxMmQxNS4uNDcyNzVkMTgyOTY2YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcXG5AQCAtMTIsNiArMTIsNyBAQFxcbiAjZGVmaW5lIF9MSU5VWF9TUkNVX1RJTllfSFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhaXQuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBzcmN1X3N0cnVjdCB7XFxuQEAgLTI2LDYgKzI3LDggQEAgc3RydWN0IHNyY3Vfc3RydWN0IHtcXG4gXFx0c3RydWN0IHJjdV9oZWFkICoqc3JjdV9jYl90YWlsO1xcdC8qIFBlbmRpbmcgY2FsbGJhY2tzOiBUYWlsLiAqL1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3JjdV93b3JrO1xcdC8qIEZvciBkcml2aW5nIGdyYWNlIHBlcmlvZHMuICovXFxuIFxcdHN0cnVjdCBpcnFfd29yayBzcmN1X2lycV93b3JrO1xcdC8qIERlZmVyIHNjaGVkdWxlX3dvcmsoKSB0byBpcnEgd29yay4gKi9cXG4rXFx0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzO1xcdC8qIENhbGxiYWNrcyBkZWZlcnJlZCBvbiByZS1lbnRyeS4gKi9cXG4rXFx0c3RydWN0IGlycV93b3JrIGRlZmVyX2l3O1xcdFxcdC8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovXFxuICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQ1xcbiBcXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDtcXG4gI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqL1xcbkBAIC0zMyw2ICszNiw3IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7XFxuIFxcbiB2b2lkIHNyY3VfZHJpdmVfZ3Aoc3RydWN0IHdvcmtfc3RydWN0ICp3cCk7XFxuIHZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspO1xcbit2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XFxuIFxcbiAjZGVmaW5lIF9fU1JDVV9TVFJVQ1RfSU5JVChuYW1lLCBfX2lnbm9yZWQsIF9fX2lnbm9yZWQsIF9fX19pZ25vcmVkKVxcdFxcXFxcXG4ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtNDAsNiArNDQsOCBAQCB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcXG4gXFx0LnNyY3VfY2JfdGFpbCA9IFxcdTAwMjZuYW1lLnNyY3VfY2JfaGVhZCxcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdC5zcmN1X3dvcmsgPSBfX1dPUktfSU5JVElBTElaRVIobmFtZS5zcmN1X3dvcmssIHNyY3VfZHJpdmVfZ3ApLFxcdFxcXFxcXG4gXFx0LnNyY3VfaXJxX3dvcmsgPSB7IC5mdW5jID0gc3JjdV90aW55X2lycV93b3JrIH0sXFx0XFx0XFxcXFxcbitcXHQuZGVmZXJfY2JzID0gTExJU1RfSEVBRF9JTklUKG5hbWUuZGVmZXJfY2JzKSxcXHRcXHRcXHRcXFxcXFxuK1xcdC5kZWZlcl9pdyA9IHsgLmZ1bmMgPSBzcmN1X2RlZmVyX2RyYWluIH0sXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRfX1NSQ1VfREVQX01BUF9JTklUKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiB9XFxuIFxcbkBAIC0xMzEsMTAgKzEzNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gXFx0c3luY2hyb25pemVfc3JjdShzc3ApO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbi17XFxuLVxcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcXG4tfVxcbit2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3JjdV9leHBlZGl0ZV9jdXJyZW50KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKSB7IH1cXG4gI2RlZmluZSBzcmN1X2NoZWNrX3JlYWRfZmxhdm9yKHNzcCwgcmVhZF9mbGF2b3IpIGRvIHsgfSB3aGlsZSAoMClcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXFxuaW5kZXggNzVlNTRlNGY5NjNmYS4uMWNlNzU5ZmI3MDk0OCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcXG5AQCAtMTMsNiArMTMsOCBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdV9ub2RlX3RyZWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IHNyY3Vfbm9kZTtcXG4gc3RydWN0IHNyY3Vfc3RydWN0O1xcbkBAIC00MSw2ICs0Myw4IEBAIHN0cnVjdCBzcmN1X2RhdGEge1xcbiBcXHRib29sIHNyY3VfY2JsaXN0X2ludm9raW5nO1xcdFxcdC8qIEludm9raW5nIHRoZXNlIENCcz8gKi9cXG4gXFx0c3RydWN0IHRpbWVyX2xpc3QgZGVsYXlfd29yaztcXHRcXHQvKiBEZWxheSBmb3IgQ0IgaW52b2tpbmcgKi9cXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XFx0XFx0LyogQ29udGV4dCBmb3IgQ0IgaW52b2tpbmcuICovXFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NicztcXHRcXHQvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovXFxuK1xcdHN0cnVjdCBsbGlzdF9ub2RlIGRlZmVyX2xpbms7XFx0XFx0LyogTGlua3Mgb250byB0aGUgcGVyLUNQVSBkZWZlcnJhbCBkcmFpbiBsaXN0ICovXFxuIFxcdHN0cnVjdCByY3VfaGVhZCBzcmN1X2JhcnJpZXJfaGVhZDtcXHQvKiBGb3Igc3JjdV9iYXJyaWVyKCkgdXNlLiAqL1xcbiBcXHRzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9lY19oZWFkO1xcdFxcdC8qIEZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKSB1c2UuICovXFxuIFxcdGludCBzcmN1X2VjX3N0YXRlO1xcdFxcdFxcdC8qICBTdGF0ZSBmb3Igc3JjdV9leHBlZGl0ZV9jdXJyZW50KCkuICovXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvS2NvbmZpZyBiL2tlcm5lbC9yY3UvS2NvbmZpZ1xcbmluZGV4IDMzMmRmN2E3YTYzNDcuLmJjOTQ4M2MwYjVkODQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS9LY29uZmlnXFxuKysrIGIva2VybmVsL3JjdS9LY29uZmlnXFxuQEAgLTE3NSw2ICsxNzUsMTIgQEAgY29uZmlnIFJDVV9TVEFMTF9DT01NT05cXG4gY29uZmlnIFJDVV9ORUVEX1NFR0NCTElTVFxcbiBcXHRkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFRSRUVfU1JDVSB8fCBUQVNLU19SQ1VfR0VORVJJQyApXFxuIFxcbisjIFRoZSBkZWZlcnJhbCAoYW5kIHRoZSBJUlFfV09SSyBpdCB1c2VzKSBpcyBvbmx5IG5lZWRlZCB3aGVyZSBjYWxsX3JjdSgpIC9cXG4rIyBjYWxsX3NyY3UoKSBjYW4gYmUgaW52b2tlZCB3aGlsZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIGlzIGluIGZsaWdodC5cXG4rY29uZmlnIFJDVV9ERUZFUlxcbitcXHRkZWZfYm9vbCBIQVZFX05NSSB8fCBLUFJPQkVTIHx8IEZVTkNUSU9OX1RSQUNFUiB8fCBUUkFDRVBPSU5UU1xcbitcXHRzZWxlY3QgSVJRX1dPUktcXG4rXFxuIGNvbmZpZyBSQ1VfRkFOT1VUXFxuIFxcdGludCBcXFwiVHJlZS1iYXNlZCBoaWVyYXJjaGljYWwgUkNVIGZhbm91dCB2YWx1ZVxcXCJcXG4gXFx0cmFuZ2UgMiA2NCBpZiA2NEJJVFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdS5oIGIva2VybmVsL3JjdS9yY3UuaFxcbmluZGV4IDM5YTlmNmZhOWE3YjIuLjAzNmQyODUxNmU5MmQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS9yY3UuaFxcbisrKyBiL2tlcm5lbC9yY3UvcmN1LmhcXG5AQCAtNTcyLDYgKzU3MiwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza3NfY2JsaXN0X2luaXRfZ2VuZXJpYyh2b2lkKSB7IH1cXG4gI2RlZmluZSBSQ1VfU0NIRURVTEVSX0lOSVRcXHQxXFxuICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9SVU5OSU5HXFx0MlxcbiBcXG4rLypcXG4rICogU2hvdWxkIGEgY2FsbF9yY3UoKS9jYWxsX3NyY3UoKSBjYWxsYmFjayBiZSBkZWZlcnJlZCByYXRoZXIgdGhhbiBlbnF1ZXVlZFxcbisgKiBub3c/ICBEZWZlciB3aGVuZXZlciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZDogYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBtYXlcXG4rICogYmUgaW4gZmxpZ2h0IG9uIHRoaXMgQ1BVLCBzbyBlbnF1ZXVpbmcgbm93IGNvdWxkIGNvcnJ1cHQgaXQuICBCdXQgbm90IHdoaWxlXFxuKyAqIHRoZSBzY2hlZHVsZXIgaXMgZG93biAtLSBlYXJseSBib290IGlzIHNpbmdsZS10aHJlYWRlZCBhbmQgY2FuIGNhbGwgdGhpc1xcbisgKiBiZWZvcmUgaW5pdF9JUlEoKSBtYWtlcyBpcnFfd29yayB1c2FibGUgKGUuZy4gcmN1X2luaXQoKSdzIHNlbGYtdGVzdHMpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yY3VfZGVmZXIodm9pZClcXG4re1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBpcnFzX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgcmN1X3NjaGVkdWxlcl9hY3RpdmUgIT0gUkNVX1NDSEVEVUxFUl9JTkFDVElWRTtcXG4rfVxcbitcXG4rLyogRHJhaW4gYW4gb3V0Z29pbmcgQ1BVJ3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovXFxuK3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xcbitcXG4gZW51bSByY3V0b3J0dXJlX3R5cGUge1xcbiBcXHRSQ1VfRkxBVk9SLFxcbiBcXHRSQ1VfVEFTS1NfRkxBVk9SLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXFxuaW5kZXggM2QwYjU5YTdiMGIzOC4uYTA2MTAwYjgyMzU5NyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuY1xcbisrKyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXFxuQEAgLTQ4LDYgKzQ4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlX3RyYWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ubWkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJyY3UuaFxcXCJcXG4gXFxuQEAgLTExNSw2ICsxMTYsNyBAQCB0b3J0dXJlX3BhcmFtKGludCwgbGVha3BvaW50ZXIsIDAsIFxcXCJMZWFrIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGZyb20gcmVhZGVyc1xcXCIpO1xcbiB0b3J0dXJlX3BhcmFtKGludCwgbl9iYXJyaWVyX2NicywgMCwgXFxcIiMgb2YgY2FsbGJhY2tzL2t0aHJlYWRzIGZvciBiYXJyaWVyIHRlc3RpbmdcXFwiKTtcXG4gdG9ydHVyZV9wYXJhbShpbnQsIG5fdXBfZG93biwgMzIsIFxcXCIjIG9mIGNvbmN1cnJlbnQgdXAvZG93biBocnRpbWVyLWJhc2VkIFJDVSByZWFkZXJzXFxcIik7XFxuIHRvcnR1cmVfcGFyYW0oaW50LCBuZmFrZXdyaXRlcnMsIDQsIFxcXCJOdW1iZXIgb2YgUkNVIGZha2Ugd3JpdGVyIHRocmVhZHNcXFwiKTtcXG4rdG9ydHVyZV9wYXJhbShib29sLCBubWlfY2FsbHMsIHRydWUsIFxcXCJFeGVyY2lzZSAtXFx1MDAzZWNhbGwoKSBmcm9tIE5NSSBvbiBubWlfY2FwYWJsZSBmbGF2b3JzXFxcIik7XFxuIHRvcnR1cmVfcGFyYW0oaW50LCBucmVhZGVycywgLTEsIFxcXCJOdW1iZXIgb2YgUkNVIHJlYWRlciB0aHJlYWRzXFxcIik7XFxuIHRvcnR1cmVfcGFyYW0oYm9vbCwgbndyaXRlcnMsIDEsIFxcXCJOdW1iZXIgb2YgUkNVIHdyaXRlciB0aHJlYWRzICgwIG9yIDEpXFxcIik7XFxuIHRvcnR1cmVfcGFyYW0oaW50LCBvYmplY3RfZGVidWcsIDAsIFxcXCJFbmFibGUgZGVidWctb2JqZWN0IGRvdWJsZSBjYWxsX3JjdSgpIHRlc3RpbmdcXFwiKTtcXG5AQCAtMjE2LDYgKzIxOCw4IEBAIHN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RfZmFpbHVyZTtcXG4gc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdHM7XFxuIHN0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfdGltZXJzO1xcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX2lycXM7XFxuK3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NhbGw7XFxuK3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NiO1xcbiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfYXR0ZW1wdHM7XFxuIHN0YXRpYyBsb25nIG5fYmFycmllcl9zdWNjZXNzZXM7IC8qIGRpZCByY3VfYmFycmllciB0ZXN0IHN1Y2NlZWQ/ICovXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5fcmVhZF9leGl0cztcXG5AQCAtNDMzLDYgKzQzNyw3IEBAIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMge1xcbiBcXHRib29sICgqaXNfdGFza19yY3VfYm9vc3RlZCkodm9pZCk7XFxuIFxcdGxvbmcgY2JmbG9vZF9tYXg7XFxuIFxcdGludCBpcnFfY2FwYWJsZTtcXG4rXFx0aW50IG5taV9jYXBhYmxlO1xcbiBcXHRpbnQgY2FuX2Jvb3N0O1xcbiBcXHRpbnQgZXh0ZW5kYWJsZXM7XFxuIFxcdGludCBzbG93X2dwcztcXG5AQCAtNjQ2LDYgKzY1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHJjdV9vcHMgPSB7XFxuIFxcdC5leHRlbmRhYmxlc1xcdFxcdD0gUkNVVE9SVFVSRV9NQVhfRVhURU5ELFxcbiBcXHQuZGVidWdfb2JqZWN0c1xcdFxcdD0gMSxcXG4gXFx0LnN0YXJ0X3BvbGxfaXJxc29mZlxcdD0gMSxcXG4rXFx0Lm5taV9jYXBhYmxlXFx0XFx0PSAxLFxcbiBcXHQubmFtZVxcdFxcdFxcdD0gXFxcInJjdVxcXCJcXG4gfTtcXG4gXFxuQEAgLTkzNiw2ICs5NDIsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1X29wcyA9IHtcXG4gXFx0LmRlYnVnX29iamVjdHNcXHQ9IDEsXFxuIFxcdC5oYXZlX3VwX2Rvd25cXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcXG4gXFx0XFx0XFx0XFx0PyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLFxcbitcXHQubm1pX2NhcGFibGVcXHQ9IDEsXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwic3JjdVxcXCJcXG4gfTtcXG4gXFxuQEAgLTk5OSw2ICsxMDA2LDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdWRfb3BzID0ge1xcbiBcXHQuZGVidWdfb2JqZWN0c1xcdD0gMSxcXG4gXFx0LmhhdmVfdXBfZG93blxcdD0gSVNfRU5BQkxFRChDT05GSUdfVElOWV9TUkNVKVxcbiBcXHRcXHRcXHRcXHQ/IDAgOiBTUkNVX1JFQURfRkxBVk9SX05PUk1BTCB8IFNSQ1VfUkVBRF9GTEFWT1JfRkFTVF9VUERPV04sXFxuK1xcdC5ubWlfY2FwYWJsZVxcdD0gMSxcXG4gXFx0Lm5hbWVcXHRcXHQ9IFxcXCJzcmN1ZFxcXCJcXG4gfTtcXG4gXFxuQEAgLTEyNjMsNiArMTI3MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHRhc2tzX3RyYWNpbmdfb3BzID0ge1xcbiBcXHQuY2JmbG9vZF9tYXhcXHQ9IDUwMDAwLFxcbiBcXHQuaXJxX2NhcGFibGVcXHQ9IDEsXFxuIFxcdC5zbG93X2dwc1xcdD0gMSxcXG4rXFx0Lm5taV9jYXBhYmxlXFx0PSAxLFxcbiBcXHQubmFtZVxcdFxcdD0gXFxcInRhc2tzLXRyYWNpbmdcXFwiXFxuIH07XFxuIFxcbkBAIC0yNjUzLDEyICsyNjYyLDk3IEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKVxcbiBcXG4gc3RhdGljIERFRklORV9UT1JUVVJFX1JBTkRPTV9QRVJDUFUocmN1X3RvcnR1cmVfdGltZXJfcmFuZCk7XFxuIFxcbisvKlxcbisgKiBFeGVyY2lzZSAtXFx1MDAzZWNhbGwoKSBmcm9tIE5NSSBjb250ZXh0IGZvciBmbGF2b3JzIHRoYXQgYWR2ZXJ0aXNlIC1cXHUwMDNlbm1pX2NhcGFibGUuXFxuKyAqIEEgcGVyLUNQVSBoYXJkd2FyZSBwZXJmIGNvdW50ZXIgb3ZlcmZsb3dzIGludG8gYW4gTk1JIC0tIGEgcmVhbCBOTUkgb24geDg2LFxcbisgKiBvciBhIHBzZXVkby1OTUkgb24gYXJtNjQgYm9vdGVkIHdpdGggaXJxY2hpcC5naWN2M19wc2V1ZG9fbm1pPTEgLS0gYW5kIGl0c1xcbisgKiBoYW5kbGVyIHN1Ym1pdHMgb25lIHByZWFsbG9jYXRlZCBjYWxsYmFjayB2aWEgLVxcdTAwM2VjYWxsKCkuICBPbmx5IG9uZSBjYWxsYmFjayBpc1xcbisgKiBpbiBmbGlnaHQgYXQgYSB0aW1lIChndWFyZGVkIGJ5IGFuIGF0b21pYyksIHdoaWNoIGF2b2lkcyBhbGxvY2F0aW5nIGluIE5NSVxcbisgKiBhbmQgaXMgZW5vdWdoIHRvIGV4ZXJjaXNlIHRoZSBkZWZlcnJhbC4gIFRoaXMgbWlycm9ycyBob3cgQlBGIHByb2dyYW1zIHJlYWNoXFxuKyAqIC1cXHUwMDNlY2FsbCgpIGZyb20gTk1JLiAgUmVxdWlyZXMgYSBoYXJkd2FyZSBQTVU7IHdoZW4gdGhlIG92ZXJmbG93IGlzIG5vdCBhbiBOTUlcXG4rICogdGhlIGhhbmRsZXIgZG9lcyBub3RoaW5nLlxcbisgKi9cXG4rI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xcbitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciByY3VfdG9ydHVyZV9ubWlfYXR0ciA9IHtcXG4rXFx0LnR5cGVcXHRcXHQ9IFBFUkZfVFlQRV9IQVJEV0FSRSxcXG4rXFx0LmNvbmZpZ1xcdFxcdD0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxcbitcXHQuc2l6ZVxcdFxcdD0gc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIpLFxcbitcXHQucGlubmVkXFx0XFx0PSAxLFxcbitcXHQuZGlzYWJsZWRcXHQ9IDEsXFxuK1xcdC5mcmVxXFx0XFx0PSAxLFxcbitcXHQuc2FtcGxlX2ZyZXFcXHQ9IDEwMDAsXFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKipyY3VfdG9ydHVyZV9ubWlfZXZlbnRzO1xcbitzdGF0aWMgc3RydWN0IHJjdV9oZWFkIHJjdV90b3J0dXJlX25taV9yaDtcXG4rc3RhdGljIGF0b21pY190IHJjdV90b3J0dXJlX25taV9yaF9pbnVzZTtcXG4rXFxuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jYihzdHJ1Y3QgcmN1X2hlYWQgKnJocClcXG4re1xcbitcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cmN1X3RvcnR1cmVfbm1pX3JoX2ludXNlLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4re1xcbitcXHRpZiAoIWluX25taSgpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChjdXJfb3BzLVxcdTAwM2VjYWxsIFxcdTAwMjZcXHUwMDI2ICFhdG9taWNfeGNoZyhcXHUwMDI2cmN1X3RvcnR1cmVfbm1pX3JoX2ludXNlLCAxKSkge1xcbitcXHRcXHRjdXJfb3BzLVxcdTAwM2VjYWxsKFxcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmgsIHJjdV90b3J0dXJlX25taV9jYik7XFxuK1xcdFxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRpZiAoIW5taV9jYWxscyB8fCAhY3VyX29wcy1cXHUwMDNlbm1pX2NhcGFibGUgfHwgIWN1cl9vcHMtXFx1MDAzZWNhbGwpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0cmN1X3RvcnR1cmVfbm1pX2V2ZW50cyA9IGtjYWxsb2MobnJfY3B1X2lkcywgc2l6ZW9mKCpyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKSxcXG4rXFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcXG4rXFx0XFx0ZXZlbnQgPSBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcihcXHUwMDI2cmN1X3RvcnR1cmVfbm1pX2F0dHIsIGNwdSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IE5VTEwsIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdywgTlVMTCk7XFxuK1xcdFxcdGlmIChJU19FUlIoZXZlbnQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdID0gZXZlbnQ7XFxuK1xcdFxcdHBlcmZfZXZlbnRfZW5hYmxlKGV2ZW50KTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2xlYW51cCh2b2lkKVxcbit7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbitcXHRcXHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHBlcmZfZXZlbnRfZGlzYWJsZShyY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV0pO1xcbitcXHRcXHRwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7XFxuK1xcdH1cXG4rXFx0a2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7XFxuK1xcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMO1xcbit9XFxuKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi9cXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkgeyB9XFxuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpIHsgfVxcbisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUyAqL1xcbitcXG4gLypcXG4gICogUkNVIHRvcnR1cmUgcmVhZGVyIGZyb20gdGltZXIgaGFuZGxlci4gIERlcmVmZXJlbmNlcyByY3VfdG9ydHVyZV9jdXJyZW50LFxcbiAgKiBpbmNyZW1lbnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgcGlwZWxpbmUgYXJyYXkuICBUaGVcXG4gICogY291bnRlciBpbiB0aGUgZWxlbWVudCBzaG91bGQgbmV2ZXIgYmUgZ3JlYXRlciB0aGFuIDEsIG90aGVyd2lzZSwgdGhlXFxuICAqIFJDVSBpbXBsZW1lbnRhdGlvbiBpcyBicm9rZW4uXFxuICAqL1xcbitcXG4gc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnVudXNlZClcXG4ge1xcbiBcXHRXQVJOX09OX09OQ0UoIWluX3NlcnZpbmdfc29mdGlycSgpKTtcXG5AQCAtMzA0MSw2ICszMTM1LDkgQEAgcmN1X3RvcnR1cmVfc3RhdHNfcHJpbnQodm9pZClcXG4gXFx0XFx0ZGF0YV9yYWNlKG5fYmFycmllcl9hdHRlbXB0cyksXFxuIFxcdFxcdGRhdGFfcmFjZShuX3JjdV90b3J0dXJlX2JhcnJpZXJfZXJyb3IpKTtcXG4gXFx0cHJfY29udChcXFwicmVhZC1leGl0czogJWxkIFxcXCIsIGRhdGFfcmFjZShuX3JlYWRfZXhpdHMpKTsgLy8gU3RhdGlzdGljLlxcbitcXHRwcl9jb250KFxcXCJubWktY2FsbHM6ICVsZCBubWktY2JzOiAlbGQgXFxcIixcXG4rXFx0XFx0YXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksXFxuK1xcdFxcdGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSk7XFxuIFxcdHByX2NvbnQoXFxcIm5vY2ItdG9nZ2xlczogJWxkOiVsZCBcXFwiLFxcbiBcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZuX25vY2Jfb2ZmbG9hZCksIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fbm9jYl9kZW9mZmxvYWQpKTtcXG4gXFx0cHJfY29udChcXFwiZ3B3cmFwczogJWxkXFxcXG5cXFwiLCBuX2dwd3JhcHMpO1xcbkBAIC00MzE1LDYgKzQ0MTIsOCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpXFxuIFxcdFxcdGtmcmVlKHJlYWRlcl90YXNrcyk7XFxuIFxcdFxcdHJlYWRlcl90YXNrcyA9IE5VTEw7XFxuIFxcdH1cXG4rXFx0LyogRGlzYWJsZSB0aGUgcGVyZiBjb3VudGVycyAoYW5kIHRodXMgdGhlIE5NSSAtXFx1MDAzZWNhbGwoKSBmaXJpbmcpIG5vdy4gKi9cXG4rXFx0cmN1X3RvcnR1cmVfbm1pX2NsZWFudXAoKTtcXG4gXFx0a2ZyZWUocmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrKTtcXG4gXFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrID0gTlVMTDtcXG4gXFxuQEAgLTQzNDQsNiArNDQ0MywyMCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpXFxuIFxcdFxcdHByX2luZm8oXFxcIiVzOiBJbnZva2luZyAlcFMoKS5cXFxcblxcXCIsIF9fZnVuY19fLCBjdXJfb3BzLVxcdTAwM2VjYl9iYXJyaWVyKTtcXG4gXFx0XFx0Y3VyX29wcy1cXHUwMDNlY2JfYmFycmllcigpO1xcbiBcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBjYl9iYXJyaWVyKCkgYWJvdmUgZHJhaW5lZCBldmVyeSBkZWZlcnJlZCBOTUkgLVxcdTAwM2VjYWxsKCkgY2FsbGJhY2ssIHNvIHRoZVxcbitcXHQgKiBjb3VudCBpc3N1ZWQgZnJvbSBOTUkgbXVzdCBlcXVhbCB0aGUgY291bnQgaW52b2tlZDsgYSBtaXNtYXRjaCBtZWFucyBhXFxuK1xcdCAqIGNhbGxiYWNrIHdhcyBsb3N0LlxcbitcXHQgKi9cXG4rXFx0aWYgKGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpICE9XFxuK1xcdCAgICBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpIHtcXG4rXFx0XFx0cHJfYWxlcnQoXFxcIiVzOiBOTUkgLVxcdTAwM2VjYWxsKCkgbG9zdCBhIGNhbGxiYWNrOiBpc3N1ZWQgJWxkIGludm9rZWQgJWxkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgX19mdW5jX18sIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxcbitcXHRcXHRcXHQgYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpKTtcXG4rXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2bl9yY3VfdG9ydHVyZV9lcnJvcik7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChjdXJfb3BzLVxcdTAwM2VjbGVhbnVwICE9IE5VTEwpXFxuIFxcdFxcdGN1cl9vcHMtXFx1MDAzZWNsZWFudXAoKTtcXG4gXFxuQEAgLTQ3NzYsNiArNDg4OSw4IEBAIHJjdV90b3J0dXJlX2luaXQodm9pZClcXG4gXFx0XFx0Zmlyc3RlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIHVud2luZDtcXG4gXFx0fVxcbitcXHQvKiBBcm0gdGhlIHBlci1DUFUgcGVyZiBjb3VudGVycyB0aGF0IGRyaXZlIC1cXHUwMDNlY2FsbCgpIGZyb20gTk1JLiAqL1xcbitcXHRyY3VfdG9ydHVyZV9ubWlfaW5pdCgpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJlYWxyZWFkZXJzOyBpKyspIHtcXG4gXFx0XFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrW2ldLnJ0Y19jaGtyZHIgPSAtMTtcXG4gXFx0XFx0Zmlyc3RlcnIgPSB0b3J0dXJlX2NyZWF0ZV9rdGhyZWFkKHJjdV90b3J0dXJlX3JlYWRlciwgKHZvaWQgKilpLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcXG5pbmRleCA1NThiYThkMzE2ZGI2Li4wM2EwN2ExZjNhMzBiIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xcbkBAIC0xMCw2ICsxMCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFfd29yay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmVlbXB0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcXHUwMDNlXFxuQEAgLTQzLDYgKzQ0LDggQEAgc3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfd29yay5lbnRyeSk7XFxuIFxcdGluaXRfaXJxX3dvcmsoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9pcnFfd29yaywgc3JjdV90aW55X2lycV93b3JrKTtcXG4rXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZzc3AtXFx1MDAzZWRlZmVyX2Nicyk7XFxuK1xcdGluaXRfaXJxX3dvcmsoXFx1MDAyNnNzcC1cXHUwMDNlZGVmZXJfaXcsIHNyY3VfZGVmZXJfZHJhaW4pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjEzLDExICsyMTYsMTEgQEAgc3RhdGljIHZvaWQgc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIH1cXG4gXFxuIC8qXFxuLSAqIEVucXVldWUgYW4gU1JDVSBjYWxsYmFjayBvbiB0aGUgc3BlY2lmaWVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZSxcXG4tICogaW5pdGlhdGluZyBncmFjZS1wZXJpb2QgcHJvY2Vzc2luZyBpZiBpdCBpcyBub3QgYWxyZWFkeSBydW5uaW5nLlxcbisgKiBFbnF1ZXVlIEByaHAgb24gdGhlIGNhbGxiYWNrIGxpc3QuICBBbHNvIGNhbGxlZCBieSBzcmN1X2RlZmVyX2RyYWluKCkgdG9cXG4rICogcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsIGNvbmRpdGlvbi5cXG4gICovXFxuLXZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4tXFx0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXFxuK3N0YXRpYyB2b2lkIHNyY3VfZG9fZW5xdWV1ZShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuK1xcdFxcdFxcdCAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbkBAIC0yMzEsNiArMjM0LDM5IEBAIHZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4gXFx0c3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3NwKTtcXG4gXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gfVxcbitcXG4rdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuK3tcXG4rXFx0c3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X3N0cnVjdCwgZGVmZXJfaXcpO1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBDYWxsYmFja3MgaGF2ZSBubyBtdXR1YWwgb3JkZXJpbmcgZ3VhcmFudGVlIGFuZCBzcmN1X2JhcnJpZXIoKSBoYXNcXG4rXFx0ICogYWxyZWFkeSBmbHVzaGVkIHVzLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy5cXG4rXFx0ICovXFxuK1xcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2c3NwLVxcdTAwM2VkZWZlcl9jYnMpKSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCAqcmhwID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7XFxuK1xcbitcXHRcXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cXHUwMDNlZnVuYyk7XFxuK1xcdH1cXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2RlZmVyX2RyYWluKTtcXG4rXFxuK3ZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4rXFx0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXFxuK3tcXG4rXFx0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xcbitcXHRcXHRyaHAtXFx1MDAzZWZ1bmMgPSBmdW5jO1xcbitcXHRcXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgXFx1MDAyNnNzcC1cXHUwMDNlZGVmZXJfY2JzKSlcXG4rXFx0XFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNnNzcC1cXHUwMDNlZGVmZXJfaXcpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xcbitcXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcXHUwMDI2XFx1MDAyNiBpbl9ubWkoKSk7XFxuK1xcbitcXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfc3JjdSk7XFxuIFxcbiAvKlxcbkBAIC0yNjAsNiArMjk2LDE1IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcXG4gXFxuKy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBmb3IgYWxsIGluLWZsaWdodCBvbmVzLiAqL1xcbit2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4re1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2c3NwLVxcdTAwM2VkZWZlcl9pdyk7XFxuK1xcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2JhcnJpZXIpO1xcbitcXG4gLypcXG4gICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llXFxuICAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcXG5pbmRleCAzMDQxMTI2NzRlOGEyLi5iOWZlNTdmZjkxMDAwIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xcbkBAIC0yMCw2ICsyMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJjcHUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWVtcHQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NtcC5oXFx1MDAzZVxcbkBAIC03OSw2ICs4MCw0NiBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3NyY3Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gc3RhdGljIHZvaWQgc3JjdV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKndvcmspO1xcbiBzdGF0aWMgdm9pZCBzcmN1X2RlbGF5X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4gXFxuK3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XFxuK1xcbisvKlxcbisgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLiAgVGhlIGlycV93b3JrIGlzIGdsb2JhbCAoc2hhcmVkIGJ5IGV2ZXJ5XFxuKyAqIHNyY3Vfc3RydWN0KSwgc28gaXQgbXVzdCBmaW5kIHdoaWNoIHNyY3Vfc3RydWN0cyBkZWZlcnJlZCBjYWxsYmFja3M6IGFcXG4rICogY2FsbGJhY2sgaXMgc3RhZ2VkIG9uIGl0cyBzcmN1X2RhdGEncyAtXFx1MDAzZWRlZmVyX2NicywgYW5kIHRoYXQgc3JjdV9kYXRhIGlzXFxuKyAqIGNoYWluZWQgKC1cXHUwMDNlZGVmZXJfbGluaykgb250byB0aGlzIHBlci1DUFUgLVxcdTAwM2VsaXN0IHRoYXQgdGhlIGlycV93b3JrIHdhbGtzLlxcbisgKi9cXG4rc3RydWN0IHNyY3VfZGVmZXIge1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZFxcdGxpc3Q7XFxuK1xcdHN0cnVjdCBpcnFfd29ya1xcdFxcdGl3O1xcbitcXHRyYXdfc3BpbmxvY2tfdFxcdFxcdGxvY2s7XFxuK307XFxuK1xcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNyY3VfZGVmZXIsIHNyY3VfZGVmZXIpID0ge1xcbitcXHQubG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRChzcmN1X2RlZmVyLmxvY2spLFxcbitcXHQuaXcgPSBJUlFfV09SS19JTklUX0hBUkQoc3JjdV9kZWZlcl9kcmFpbiksXFxuK307XFxuK1xcbisvKlxcbisgKiBSZWdpc3RlciBwZW5kaW5nIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcyBzbyBhIGZvbGxvd2luZyBzcmN1X2JhcnJpZXIoKVxcbisgKiB3YWl0cyBmb3IgdGhlbS4gIEFuIG9ubGluZSBDUFUncyBvd24gaXJxX3dvcmsgcmUtaXNzdWVzIGl0cyBjYWxsYmFja3MsIHNvIHdhaXRcXG4rICogaXQgb3V0OyBhbiBvZmZsaW5lIENQVSdzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4sIHNvIGRyYWluIGl0cyBsaXN0XFxuKyAqIGRpcmVjdGx5IG9udG8gdGhpcyBDUFUgaW5zdGVhZC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZmx1c2godm9pZClcXG4re1xcbitcXHRpbnQgY3B1O1xcbitcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuK1xcdFxcdGlmIChjcHVfb25saW5lKGNwdSkpXFxuK1xcdFxcdFxcdGlycV93b3JrX3N5bmMoXFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0c3JjdV9kZWZlcl9kcmFpbihcXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKlxcbiAgKiBJbml0aWFsaXplIFNSQ1UgcGVyLUNQVSBkYXRhLiAgTm90ZSB0aGF0IHN0YXRpY2FsbHkgYWxsb2NhdGVkXFxuICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgbWlnaHQgYWxyZWFkeSBoYXZlIHNyY3VfcmVhZF9sb2NrKCkgYW5kXFxuQEAgLTEwNyw2ICsxNDgsMTEgQEAgc3RhdGljIHZvaWQgaW5pdF9zcmN1X3N0cnVjdF9kYXRhKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbiBcXHRcXHRzZHAtXFx1MDAzZWNwdSA9IGNwdTtcXG4gXFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZzZHAtXFx1MDAzZXdvcmssIHNyY3VfaW52b2tlX2NhbGxiYWNrcyk7XFxuIFxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZzZHAtXFx1MDAzZWRlbGF5X3dvcmssIHNyY3VfZGVsYXlfdGltZXIsIDApO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiAtXFx1MDAzZWRlZmVyX2NicyBhbmQgLVxcdTAwM2VkZWZlcl9saW5rIGFyZSB2YWxpZCB3aGVuIHplcm9lZCBhbmQgYXJlIG5vdFxcbitcXHRcXHQgKiByZWluaXRpYWxpemVkIGhlcmUsIGxlc3Qgd2UgY2xvYmJlciBjYWxsYmFja3MgYSByZWVudHJhbnRcXG4rXFx0XFx0ICogY2FsbF9zcmN1KCkgYWxyZWFkeSBzdGFnZWQuICBTZWUgX19jYWxsX3NyY3UoKS5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHNkcC1cXHUwMDNlc3NwID0gc3NwO1xcbiBcXHR9XFxuIH1cXG5AQCAtNjk3LDYgKzc0Myw4IEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gXFx0XFx0cmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovXFxuIFxcdC8qIFdhaXQgZm9yIGlycV93b3JrIHRvIGZpbmlzaCBmaXJzdCBhcyBpdCBtYXkgcXVldWUgYSBuZXcgd29yay4gKi9cXG4gXFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2c3VwLVxcdTAwM2VpcnFfd29yayk7XFxuK1xcdC8qIERyYWluIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgKHNoYXJlZCBpcnFfd29yaykgYmVmb3JlIGZyZWVpbmcgLVxcdTAwM2VzZGEuICovXFxuK1xcdHNyY3VfZGVmZXJfZmx1c2goKTtcXG4gXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzdXAtXFx1MDAzZXdvcmspO1xcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuIFxcdFxcdHN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IHBlcl9jcHVfcHRyKHNzcC1cXHUwMDNlc2RhLCBjcHUpO1xcbkBAIC0xNDEwLDggKzE0NTgsMTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsXFxuICAqIHNyY3VfcmVhZF9sb2NrKCksIGFuZCBzcmN1X3JlYWRfdW5sb2NrKCkgdGhhdCBhcmUgYWxsIHBhc3NlZCB0aGUgc2FtZVxcbiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuLVxcdFxcdFxcdHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSlcXG4rLypcXG4rICogVGhlIHNyY3VfY2JsaXN0IGFuZCB0aGUgc3JjdV9ub2RlIHRyZWUgYXJlIG9ubHkgZXZlciBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHNcXG4rICogZGlzYWJsZWQgKHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKCkgZW5xdWV1ZXMgdW5kZXIgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgYW5kXFxuKyAqIG1heSB3YWxrIHRoZSB0cmVlOyBjYWxsYmFjayBpbnZvY2F0aW9uIGFuZCBncmFjZS1wZXJpb2Qgd29yayBsaWtld2lzZSkuICBTb1xcbisgKiBsaWtlIGNhbGxfcmN1KCksIGVucXVldWluZyB3aGlsZSBhIGxpc3Qgb3BlcmF0aW9uIGlzIGluIGZsaWdodCBvbiB0aGlzIENQVVxcbisgKiB3b3VsZCBjb3JydXB0IGl0IG9yIGRlYWRsb2NrIC0tIGUuZy4gY2FsbF9yY3VfdGFza3NfdHJhY2UoKSwgd2hpY2ggaXNcXG4rICogY2FsbF9zcmN1KCkgb24gYSBkZWRpY2F0ZWQgc3JjdV9zdHJ1Y3QsIGZyb20gYSBCUEYgcHJvZ3JhbS4gIF9fY2FsbF9zcmN1KClcXG4rICogZGVmZXJzIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCB2aWEgYSBwZXItQ1BVIGlycV93b3JrOyBvbmx5IGtlcm5lbHNcXG4rICogd2hlcmUgdGhhdCBjYW4gaGFwcGVuIChDT05GSUdfUkNVX0RFRkVSKSBuZWVkIHRoaXMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbitcXHRcXHRcXHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxcbiB7XFxuIFxcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShyaHApKSB7XFxuIFxcdFxcdC8qIFByb2JhYmxlIGRvdWJsZSBjYWxsX3NyY3UoKSwgc28gbGVhayB0aGUgY2FsbGJhY2suICovXFxuQEAgLTE0MjMsNiArMTQ4MSw3MiBAQCBzdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuIFxcdCh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbitcXHRcXHRcXHRyY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXFxuK3tcXG4rXFx0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xcbitcXHRcXHRzdHJ1Y3Qgc3JjdV9kYXRhICpzZHAgPSB0aGlzX2NwdV9wdHIoc3NwLVxcdTAwM2VzZGEpO1xcbitcXG4rXFx0XFx0cmhwLVxcdTAwM2VmdW5jID0gZnVuYztcXG4rXFx0XFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsIFxcdTAwMjZzZHAtXFx1MDAzZWRlZmVyX2NicykpIHtcXG4rXFx0XFx0XFx0LyogRmlyc3QgZGVmZXJyYWwgb24gdGhpcyBzcmN1X2RhdGE6IGNoYWluIGl0IGZvciB0aGUgZHJhaW4uICovXFxuK1xcdFxcdFxcdHN0cnVjdCBzcmN1X2RlZmVyICpzbmRwID0gdGhpc19jcHVfcHRyKFxcdTAwMjZzcmN1X2RlZmVyKTtcXG4rXFxuK1xcdFxcdFxcdHNkcC1cXHUwMDNlc3NwID0gc3NwO1xcbitcXHRcXHRcXHRpZiAobGxpc3RfYWRkKFxcdTAwMjZzZHAtXFx1MDAzZWRlZmVyX2xpbmssIFxcdTAwMjZzbmRwLVxcdTAwM2VsaXN0KSlcXG4rXFx0XFx0XFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNnNuZHAtXFx1MDAzZWl3KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xcbitcXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcXHUwMDI2XFx1MDAyNiBpbl9ubWkoKSk7XFxuK1xcbitcXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMsIGRvX25vcm0pO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZS1pc3N1ZSB0aGlzIENQVSdzIGRlZmVycmVkIGNhbGxiYWNrcywgZ29pbmcgc3RyYWlnaHQgdG8gc3JjdV9kb19lbnF1ZXVlKCkgc29cXG4rICogdGhleSBjYW5ub3QgZGVmZXIgYWdhaW4uICBUaGUgaXJxX3dvcmsgd2Fsa3MgaXRzIC1cXHUwMDNlbGlzdCBvZiBzcmN1X2RhdGEsIGVhY2hcXG4rICogY2FycnlpbmcgaXRzIG93biAtXFx1MDAzZWRlZmVyX2Nicy4gIC1cXHUwMDNlbG9jayBpcyBoZWxkIGFjcm9zcyB0aGUgZHJhaW4gc28gZHJhaW5lcnNcXG4rICogKGlycV93b3JrLCBzcmN1X2RlZmVyX2ZsdXNoKCkgYW5kIHNyY3Vfb2ZmbGluZV9kcmFpbigpKSBzZXJpYWxpemUgYW5kIG5ldmVyXFxuKyAqIGxlYXZlIGEgY2FsbGJhY2sgb2ZmIHRoZSBsaXN0cyB5ZXQgbm90IG9uIGEgY2FsbGJhY2sgbGlzdC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG4re1xcbitcXHRzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCA9IGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3VfZGVmZXIsIGl3KTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKnNub2RlLCAqc25leHQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnNuZHAtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0bGxpc3RfZm9yX2VhY2hfc2FmZShzbm9kZSwgc25leHQsIGxsaXN0X2RlbF9hbGwoXFx1MDAyNnNuZHAtXFx1MDAzZWxpc3QpKSB7XFxuK1xcdFxcdHN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IGNvbnRhaW5lcl9vZihzbm9kZSwgc3RydWN0IHNyY3VfZGF0YSwgZGVmZXJfbGluayk7XFxuK1xcdFxcdHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwID0gc2RwLVxcdTAwM2Vzc3A7XFxuK1xcdFxcdHN0cnVjdCBsbGlzdF9ub2RlICpjbm9kZSwgKmNuZXh0O1xcbitcXG4rXFx0XFx0Y25vZGUgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZzZHAtXFx1MDAzZWRlZmVyX2Nicyk7XFxuK1xcdFxcdGxsaXN0X2Zvcl9lYWNoX3NhZmUoY25vZGUsIGNuZXh0LCBjbm9kZSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgcmN1X2hlYWQgKnJocCA9IChzdHJ1Y3QgcmN1X2hlYWQgKiljbm9kZTtcXG4rXFxuK1xcdFxcdFxcdHNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgcmhwLVxcdTAwM2VmdW5jLCB0cnVlKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzbmRwLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERyYWluIEBjcHUncyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3M7IGNhbGxlZCBmcm9tXFxuKyAqIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKSBvbmNlIEBjcHUgaXMgZGVhZC4gIE9uZSBwYXNzIGNvdmVycyBldmVyeVxcbisgKiBzcmN1X3N0cnVjdCwgYXMgdGhlIHBlci1DUFUgc3JjdV9kZWZlciBsaXN0IGNoYWlucyB0aGVtIGFsbCwgYW5kIHRoZVxcbisgKiByZS1pc3N1ZSBsYW5kcyBvbiB0aGUgY3VycmVudCBDUFUncyBzcmN1X2RhdGEuXFxuKyAqL1xcbit2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KVxcbit7XFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRzcmN1X2RlZmVyX2RyYWluKFxcdTAwMjZwZXJfY3B1KHNyY3VfZGVmZXIsIGNwdSkuaXcpO1xcbit9XFxuK1xcbiAvKipcXG4gICogY2FsbF9zcmN1KCkgLSBRdWV1ZSBhIGNhbGxiYWNrIGZvciBpbnZvY2F0aW9uIGFmdGVyIGFuIFNSQ1UgZ3JhY2UgcGVyaW9kXFxuICAqIEBzc3A6IHNyY3Vfc3RydWN0IGluIHF1ZXVlIHRoZSBjYWxsYmFja1xcbkBAIC0xNjc3LDkgKzE4MDEsMTcgQEAgdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIHtcXG4gXFx0aW50IGNwdTtcXG4gXFx0aW50IGlkeDtcXG4tXFx0dW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfc3VwLVxcdTAwM2VzcmN1X2JhcnJpZXJfc2VxKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzO1xcbiBcXG4gXFx0Y2hlY2tfaW5pdF9zcmN1X3N0cnVjdChzc3ApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gIFRoZVxcbitcXHQgKiBzaGFyZWQgaXJxX3dvcmsgbWF5IGFsc28gZHJhaW4gb3RoZXIgc3JjdV9zdHJ1Y3RzJywgd2hpY2ggaXMgaGFybWxlc3MuXFxuK1xcdCAqL1xcbitcXHRzcmN1X2RlZmVyX2ZsdXNoKCk7XFxuK1xcbitcXHRzID0gcmN1X3NlcV9zbmFwKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfc3VwLVxcdTAwM2VzcmN1X2JhcnJpZXJfc2VxKTtcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2c3NwLVxcdTAwM2VzcmN1X3N1cC1cXHUwMDNlc3JjdV9iYXJyaWVyX211dGV4KTtcXG4gXFx0aWYgKHJjdV9zZXFfZG9uZShcXHUwMDI2c3NwLVxcdTAwM2VzcmN1X3N1cC1cXHUwMDNlc3JjdV9iYXJyaWVyX3NlcSwgcykpIHtcXG4gXFx0XFx0c21wX21iKCk7IC8qIEZvcmNlIG9yZGVyaW5nIGZvbGxvd2luZyByZXR1cm4uICovXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdGlueS5jIGIva2VybmVsL3JjdS90aW55LmNcXG5pbmRleCBkY2NjY2Q2YmU5NDExLi43MTI0OWVhYzYxMDIxIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvdGlueS5jXFxuKysrIGIva2VybmVsL3JjdS90aW55LmNcXG5AQCAtMTEsNiArMTEsOCBAQFxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxX3dvcmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xsaXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ub3RpZmllci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuQEAgLTQyLDggKzQ0LDgzIEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2N0cmxibGsgPSB7XFxuIFxcdC5ncF9zZXFcXHRcXHQ9IDAgLSAzMDBVTCxcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIFRoZSBjYWxsYmFjayBsaXN0IGlzIG9ubHkgZXZlciBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKHRoaXNcXG4rICogZW5xdWV1ZSwgY2FsbGJhY2sgaW52b2NhdGlvbiwgZ3JhY2UtcGVyaW9kIHdvcmspLCBzbyBlbnF1ZXVpbmcgd2hpbGUgYSBsaXN0XFxuKyAqIG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQgd291bGQgY29ycnVwdCBpdC4gIERlZmVyIHdoZW5ldmVyIGludGVycnVwdHMgYXJlXFxuKyAqIGRpc2FibGVkOiB0aGUgY2FsbGJhY2sgZ29lcyBvbiBhIGxvY2tsZXNzIGxpc3QgdGhhdCBhbiBpcnFfd29yayByZS1pc3N1ZXNcXG4rICogbGF0ZXIuICBPbmUgZ2xvYmFsIGxpc3QgYW5kIGlycV93b3JrIHN1ZmZpY2UsIGFzIFRpbnkgUkNVIGlzIHVuaXByb2Nlc3Nvci5cXG4rICogT25seSBrZXJuZWxzIHdoZXJlIHRoYXQgY2FuIGhhcHBlbiAoQ09ORklHX1JDVV9ERUZFUikgbmVlZCB0aGlzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xcbitzdGF0aWMgTExJU1RfSEVBRChyY3VfZGVmZXJfbGlzdCk7XFxuK3N0YXRpYyBERUZJTkVfSVJRX1dPUksocmN1X2RlZmVyX2l3LCByY3VfZGVmZXJfZHJhaW4pO1xcbitcXG4rLypcXG4rICogRW5xdWV1ZSBAaGVhZCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpIHRvXFxuKyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXFxuK3tcXG4rXFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XFxuK1xcdFxcdGlmIChhdG9taWNfaW5jX3JldHVybihcXHUwMDI2ZG91YmxlZnJlZXMpIFxcdTAwM2MgNCkge1xcbitcXHRcXHRcXHRwcl9lcnIoXFxcIiVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC1cXHUwMDNlJXBTKCkhISEgIFxcXCIsIF9fZnVuY19fLCBoZWFkLCBoZWFkLVxcdTAwM2VmdW5jKTtcXG4rXFx0XFx0XFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aGVhZC1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuK1xcdGhlYWQtXFx1MDAzZW5leHQgPSBOVUxMO1xcbitcXG4rXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbitcXHQqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7XFxuK1xcdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcXHUwMDI2aGVhZC1cXHUwMDNlbmV4dDtcXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcXG4rXFx0XFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cXG4rXFx0XFx0cmVzY2hlZF9jcHUoMCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuK3tcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogQ2FsbGJhY2tzIGhhdmUgbm8gbXV0dWFsIG9yZGVyaW5nIGd1YXJhbnRlZSBhbmQgcmN1X2JhcnJpZXIoKSBoYXNcXG4rXFx0ICogYWxyZWFkeSBmbHVzaGVkIHVzLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy5cXG4rXFx0ICovXFxuK1xcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2cmN1X2RlZmVyX2xpc3QpKSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xcbitcXG4rXFx0XFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cXHUwMDNlZnVuYyk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxcbit7XFxuK1xcdGhlYWQtXFx1MDAzZWZ1bmMgPSBmdW5jO1xcbitcXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFxcdTAwMjZyY3VfZGVmZXJfbGlzdCkpXFxuK1xcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZyY3VfZGVmZXJfaXcpO1xcbit9XFxuK1xcbisvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICovXFxuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxcbit7XFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpcnFfd29ya19zeW5jKFxcdTAwMjZyY3VfZGVmZXJfaXcpO1xcbit9XFxuK1xcbiB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXFxuIHtcXG4rXFx0LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBmaXJzdC4gKi9cXG4rXFx0cmN1X2RlZmVyX2ZsdXNoKCk7XFxuIFxcdHdhaXRfcmN1X2dwKGNhbGxfcmN1X2h1cnJ5KTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHJjdV9iYXJyaWVyKTtcXG5AQCAtMTU3LDI5ICsyMzQsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1KTtcXG4gICovXFxuIHZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxcbiB7XFxuLVxcdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFxuLVxcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xcbi1cXHRcXHRpZiAoYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmRvdWJsZWZyZWVzKSBcXHUwMDNjIDQpIHtcXG4tXFx0XFx0XFx0cHJfZXJyKFxcXCIlcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtXFx1MDAzZSVwUygpISEhICBcXFwiLCBfX2Z1bmNfXywgaGVhZCwgaGVhZC1cXHUwMDNlZnVuYyk7XFxuLVxcdFxcdFxcdG1lbV9kdW1wX29iaihoZWFkKTtcXG4tXFx0XFx0fVxcbitcXHRpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7XFxuK1xcdFxcdGNhbGxfcmN1X2RlZmVyKGhlYWQsIGZ1bmMpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdGhlYWQtXFx1MDAzZWZ1bmMgPSBmdW5jO1xcbi1cXHRoZWFkLVxcdTAwM2VuZXh0ID0gTlVMTDtcXG4tXFxuLVxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4tXFx0KnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkO1xcbi1cXHRyY3VfY3RybGJsay5jdXJ0YWlsID0gXFx1MDAyNmhlYWQtXFx1MDAzZW5leHQ7XFxuLVxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4rXFx0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXFxuK1xcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFxcdTAwMjZcXHUwMDI2IGluX25taSgpKTtcXG4gXFxuLVxcdGlmICh1bmxpa2VseShpc19pZGxlX3Rhc2soY3VycmVudCkpKSB7XFxuLVxcdFxcdC8qIGZvcmNlIHNjaGVkdWxpbmcgZm9yIHJjdV9xcygpICovXFxuLVxcdFxcdHJlc2NoZWRfY3B1KDApO1xcbi1cXHR9XFxuK1xcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5jIGIva2VybmVsL3JjdS90cmVlLmNcXG5pbmRleCA2MmJmMmJmNTUxZjQ5Li43ZDBhZTk0YmRmMzlmIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvdHJlZS5jXFxuKysrIGIva2VybmVsL3JjdS90cmVlLmNcXG5AQCAtMjQsNiArMjQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc21wLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xsaXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvZGVidWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25taS5oXFx1MDAzZVxcbkBAIC0zMTQ4LDIxICszMTQ5LDI3IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2NiX292bGQoc3RydWN0IHJjdV9kYXRhICpyZHApXFxuIFxcdHJhd19zcGluX3VubG9ja19yY3Vfbm9kZShybnApO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZFxcbi1fX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcXG4rLypcXG4rICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBldmVyIGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAoZW5xdWV1ZSxcXG4rICogY2FsbGJhY2sgaW52b2NhdGlvbiwgZ3JhY2UtcGVyaW9kIHdvcmspLiAgQSBjYWxsX3JjdSgpIHdpdGggaW50ZXJydXB0cyBhbHJlYWR5XFxuKyAqIGRpc2FibGVkIG1heSBpbnRlcnJ1cHQgb25lIG9mIHRob3NlLCBzbyBfX2NhbGxfcmN1X2NvbW1vbigpIGRlZmVyczogdGhlXFxuKyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBhIHBlci1DUFUgbGxpc3QgdGhhdCBhbiBpcnFfd29yayByZS1pc3N1ZXMgb25jZVxcbisgKiBpbnRlcnJ1cHRzIGFyZSBvbi4gIE9ubHkgQ09ORklHX1JDVV9ERUZFUiBrZXJuZWxzIGNhbiBoaXQgdGhpcy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcXG4rXFxuKy8qXFxuKyAqIEVucXVldWUgQGhlYWQgb24gdGhpcyBDUFUncyByY3Vfc2VnY2JsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKClcXG4rICogdG8gcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsXFxuKyAqIGNvbmRpdGlvbi4gIEVpdGhlciBjYWxsZXIgbWF5IGhhdmUgaW50ZXJydXB0cyBhbHJlYWR5IGRpc2FibGVkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXFxuIHtcXG4gXFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRib29sIGxhenk7XFxuIFxcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xcbiBcXG4tXFx0LyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKCh1bnNpZ25lZCBsb25nKWhlYWQgXFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XFxuLVxcbi1cXHQvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovXFxuLVxcdGlmIChXQVJOX09OX09OQ0UoIWZ1bmMpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogUHJvYmFibGUgZG91YmxlIGNhbGxfcmN1KCksIHNvIGxlYWsgdGhlIGNhbGxiYWNrLlxcbkBAIC0zMjA2LDYgKzMyMTMsODMgQEAgX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXFxuIFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gfVxcbiBcXG4rLypcXG4rICogUmUtaXNzdWUgZGVmZXJyZWQgY2FsbGJhY2tzLCBnb2luZyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdFxcbisgKiBkZWZlciBhZ2Fpbi4gIGRlZmVyX2xvY2sgaXMgaGVsZCBhY3Jvc3MgbGxpc3RfZGVsX2FsbCgpIGFuZCB0aGUgcmUtaXNzdWUgc29cXG4rICogdGhlIGRyYWluZXJzIC0tIHRoaXMgQ1BVJ3MgaXJxX3dvcmssIHJjdV9kZWZlcl9mbHVzaCgpIGFuZFxcbisgKiByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkgLS0gc2VyaWFsaXplIGFuZCBuZXZlciBsZWF2ZSBhIGNhbGxiYWNrIG9mZlxcbisgKiAtXFx1MDAzZWRlZmVyX2hlYWQgeWV0IG5vdCBvbiBhIGNhbGxiYWNrIGxpc3QuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG4re1xcbitcXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHJjdV9kYXRhLCBkZWZlcl93b3JrKTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcXG4rXFx0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2hlYWQpKSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xcbitcXG4rXFx0XFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cXHUwMDNlZnVuYywgZmFsc2UpO1xcbitcXHR9XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcXG4rfVxcbitcXG4rLyogU3RhZ2UgQGhlYWQgZm9yIHRoaXMgQ1BVJ3MgaXJxX3dvcmsgd2hlbiBjYWxsX3JjdSgpIGNhbm5vdCBlbnF1ZXVlIG5vdy4gKi9cXG4rc3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxcbit7XFxuK1xcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gdGhpc19jcHVfcHRyKFxcdTAwMjZyY3VfZGF0YSk7XFxuK1xcbitcXHRoZWFkLVxcdTAwM2VmdW5jID0gZnVuYztcXG4rXFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCBcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl9oZWFkKSlcXG4rXFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfd29yayk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlZ2lzdGVyIHBlbmRpbmcgZGVmZXJyZWQgY2FsbGJhY2tzIGludG8gdGhlIGNhbGxiYWNrIGxpc3RzIHNvIGEgZm9sbG93aW5nXFxuKyAqIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICBUaGlzIHJ1bnMgYmVmb3JlIHJjdV9iYXJyaWVyKCkgc2NhbnMgdGhlXFxuKyAqIGxpc3RzLiAgQW4gb25saW5lIENQVSdzIG93biBpcnFfd29yayByZS1pc3N1ZXMgaXRzIGNhbGxiYWNrcywgc28gd2FpdCBpdCBvdXQ7XFxuKyAqIGFuIG9mZmxpbmUgQ1BVJ3MgaXJxX3dvcmsgbWF5IG5ldmVyIHJ1biBhZ2Fpbiwgc28gZHJhaW4gaXRzIGxpc3QgZGlyZWN0bHlcXG4rICogb250byB0aGlzIENQVSBpbnN0ZWFkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2ZsdXNoKHZvaWQpXFxuK3tcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbitcXHRcXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKFxcdTAwMjZyY3VfZGF0YSwgY3B1KTtcXG4rXFxuK1xcdFxcdGlmIChjcHVfb25saW5lKGNwdSkpXFxuK1xcdFxcdFxcdGlycV93b3JrX3N5bmMoXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfd29yayk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cmN1X2RlZmVyX2RyYWluKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX3dvcmspO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkXFxuK19fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxcbit7XFxuK1xcdC8qIE1pc2FsaWduZWQgcmN1X2hlYWQhICovXFxuK1xcdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFxcdTAwMjYgKHNpemVvZih2b2lkICopIC0gMSkpO1xcbitcXG4rXFx0LyogQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSBpZiBjYWxsYmFjayBpcyBOVUxMLiAqL1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xcbitcXHRcXHRjYWxsX3JjdV9kZWZlcihoZWFkLCBmdW5jKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cXG4rXFx0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXFx1MDAyNlxcdTAwMjYgaW5fbm1pKCkpO1xcbitcXG4rXFx0cmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYywgbGF6eV9pbik7XFxuK31cXG4rXFxuICNpZmRlZiBDT05GSUdfUkNVX0xBWllcXG4gc3RhdGljIGJvb2wgZW5hYmxlX3JjdV9sYXp5IF9fcmVhZF9tb3N0bHkgPSAhSVNfRU5BQkxFRChDT05GSUdfUkNVX0xBWllfREVGQVVMVF9PRkYpO1xcbiBtb2R1bGVfcGFyYW0oZW5hYmxlX3JjdV9sYXp5LCBib29sLCAwNDQ0KTtcXG5AQCAtMzg5Niw4ICszOTgwLDEyIEBAIHZvaWQgcmN1X2JhcnJpZXIodm9pZClcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0dW5zaWduZWQgbG9uZyBnc2VxO1xcbiBcXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcDtcXG4tXFx0dW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKFxcdTAwMjZyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcztcXG4rXFxuK1xcdC8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgYmVmb3JlIHNuYXBzaG90dGluZyB0aGUgc2VxdWVuY2UuICovXFxuK1xcdHJjdV9kZWZlcl9mbHVzaCgpO1xcbiBcXG4rXFx0cyA9IHJjdV9zZXFfc25hcChcXHUwMDI2cmN1X3N0YXRlLmJhcnJpZXJfc2VxdWVuY2UpO1xcbiBcXHRyY3VfYmFycmllcl90cmFjZShUUFMoXFxcIkJlZ2luXFxcIiksIC0xLCBzKTtcXG4gXFxuIFxcdC8qIFRha2UgbXV0ZXggdG8gc2VyaWFsaXplIGNvbmN1cnJlbnQgcmN1X2JhcnJpZXIoKSByZXF1ZXN0cy4gKi9cXG5AQCAtNDIzMSw2ICs0MzE5LDEwIEBAIHJjdV9ib290X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSlcXG4gXFx0cmRwLVxcdTAwM2VyY3Vfb25sX2dwX3N0YXRlID0gUkNVX0dQX0NMRUFORUQ7XFxuIFxcdHJkcC1cXHUwMDNlbGFzdF9zY2hlZF9jbG9jayA9IGppZmZpZXM7XFxuIFxcdHJkcC1cXHUwMDNlY3B1ID0gY3B1O1xcbitcXHRpbml0X2xsaXN0X2hlYWQoXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfaGVhZCk7XFxuK1xcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl9sb2NrKTtcXG4rXFx0LyogSGFyZCBpcnFfd29yayBzbyB0aGUgcmUtaXNzdWUgcnVucyBwcm9tcHRseS4gKi9cXG4rXFx0cmRwLVxcdTAwM2VkZWZlcl93b3JrID0gSVJRX1dPUktfSU5JVF9IQVJEKHJjdV9kZWZlcl9kcmFpbik7XFxuIFxcdHJjdV9ib290X2luaXRfbm9jYl9wZXJjcHVfZGF0YShyZHApO1xcbiB9XFxuIFxcbkBAIC00NTI4LDYgKzQ2MjAsMTYgQEAgdm9pZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKGludCBjcHUpXFxuIFxcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJjdV9kYXRhLCBjcHUpO1xcbiBcXHRib29sIG5lZWR3YWtlO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogQ2FsbGJhY2tzIHRoZSBvdXRnb2luZyBDUFUgZGVmZXJyZWQgbGF0ZSBpbiB0aGUgb2ZmbGluZSBwYXRoIChwYXN0IHRoZVxcbitcXHQgKiBwb2ludCBpdHMgaXJxX3dvcmsgY2FuIHJ1bikgc2l0IG9uIC1cXHUwMDNlZGVmZXJfaGVhZCwgd2hpY2ggdGhlIC1cXHUwMDNlY2JsaXN0XFxuK1xcdCAqIG1pZ3JhdGlvbiBiZWxvdyBkb2VzIG5vdCBjb3Zlci4gIERyYWluIHRoZW0gaGVyZSwgYmVmb3JlIHRoZSBlYXJseVxcbitcXHQgKiByZXR1cm5zOyB0aGUgcmUtaXNzdWUgbGFuZHMgb24gdGhpcyBDUFUuXFxuK1xcdCAqL1xcbitcXHRyY3VfZGVmZXJfZHJhaW4oXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfd29yayk7XFxuK1xcdC8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJ3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzLiAqL1xcbitcXHRzcmN1X29mZmxpbmVfZHJhaW4oY3B1KTtcXG4rXFxuIFxcdGlmIChyY3VfcmRwX2lzX29mZmxvYWRlZChyZHApKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuaCBiL2tlcm5lbC9yY3UvdHJlZS5oXFxuaW5kZXggOWI4NWVlYWEwMDcxYS4uNDFjMmIyMGYwYzgzZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuaFxcbisrKyBiL2tlcm5lbC9yY3UvdHJlZS5oXFxuQEAgLTIyOSw2ICsyMjksMTEgQEAgc3RydWN0IHJjdV9kYXRhIHtcXG4gXFx0c3RydWN0IHJjdV9oZWFkIGJhcnJpZXJfaGVhZDtcXG4gXFx0aW50IGV4cF93YXRjaGluZ19zbmFwO1xcdFxcdC8qIERvdWJsZS1jaGVjayBuZWVkIGZvciBJUEkuICovXFxuIFxcbitcXHQvKiBEZWZlcnJhbCBvZiBhbiBOTUkvcmVlbnRyYW50IGNhbGxfcmN1KCk7IHNlZSBfX2NhbGxfcmN1X2NvbW1vbigpLiAqL1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9oZWFkO1xcbitcXHRzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfd29yaztcXG4rXFx0cmF3X3NwaW5sb2NrX3QgZGVmZXJfbG9jaztcXG4rXFxuIFxcdC8qIDUpIENhbGxiYWNrIG9mZmxvYWRpbmcuICovXFxuICNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVXFxuIFxcdHN0cnVjdCBzd2FpdF9xdWV1ZV9oZWFkIG5vY2JfY2Jfd3E7IC8qIEZvciBub2NiIGt0aHJlYWRzIHRvIHNsZWVwIG9uLiAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjZlY2Q5M2JlMzBmNFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jXFxuQEAgLTAsMCArMSw1OCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBFeGVyY2lzZSByZS1lbnRyeSBpbnRvIGNhbGxfc3JjdSgpIGZyb20gQlBGOyBzZWUgcHJvZ3MvcmN1X3JlZW50cnkuYy4gKi9cXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbisjaW5jbHVkZSBcXHUwMDNjc2NoZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zeXNjYWxsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJyY3VfcmVlbnRyeS5za2VsLmhcXFwiXFxuK1xcbitzdGF0aWMgaW50IHN5c19waWRmZF9vcGVuKHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBzeXNjYWxsKF9fTlJfcGlkZmRfb3BlbiwgcGlkLCBmbGFncyk7XFxuK31cXG4rXFxuK3ZvaWQgdGVzdF9yY3VfcmVlbnRyeSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCByY3VfcmVlbnRyeSAqc2tlbDtcXG4rXFx0aW50IGVyciwgcGlkZmQgPSAtMSwgbWFwX2ZkO1xcbitcXHRfX3U2NCB2YWwgPSAxO1xcbitcXHRjcHVfc2V0X3Qgc2V0O1xcbitcXG4rXFx0c2tlbCA9IHJjdV9yZWVudHJ5X19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbF9vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGVyciA9IHJjdV9yZWVudHJ5X19hdHRhY2goc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNrZWxfYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogS2VlcCB0aGUgcmUtZW50cnkgb24gYSBzaW5nbGUgQ1BVLiAqL1xcbitcXHRDUFVfWkVSTyhcXHUwMDI2c2V0KTtcXG4rXFx0Q1BVX1NFVCgwLCBcXHUwMDI2c2V0KTtcXG4rXFx0aWYgKHNjaGVkX3NldGFmZmluaXR5KDAsIHNpemVvZihzZXQpLCBcXHUwMDI2c2V0KSlcXG4rXFx0XFx0cGVycm9yKFxcXCJzY2hlZF9zZXRhZmZpbml0eVxcXCIpO1xcbitcXG4rXFx0cGlkZmQgPSBzeXNfcGlkZmRfb3BlbihnZXRwaWQoKSwgMCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHBpZGZkLCAwLCBcXFwicGlkZmRfb3BlblxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0bWFwX2ZkID0gYnBmX21hcF9fZmQoc2tlbC1cXHUwMDNlbWFwcy50YXNrX3N0Zyk7XFxuK1xcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwX2ZkLCBcXHUwMDI2cGlkZmQsIFxcdTAwMjZ2YWwsIEJQRl9OT0VYSVNUKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYm9vdF9jcmVhdGVcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBBcm0gdGhlIGhhbmRsZXIgZm9yIHRoaXMgdGhyZWFkLCB0aGVuIHRyaWdnZXIgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0YXJnZXRfcGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7XFxuK1xcdGVyciA9IGJwZl9tYXBfZGVsZXRlX2VsZW0obWFwX2ZkLCBcXHUwMDI2cGlkZmQpO1xcbitcXHRBU1NFUlRfT0soZXJyLCBcXFwiYm9vdF9kZWxldGVcXFwiKTtcXG4rXFxuK1xcdC8qIE9ubHkgVHJlZSBTUkNVIGVucXVldWVzIHZpYSByY3Vfc2VnY2JsaXN0X2VucXVldWUoKTsgc2tpcCBlbHNld2hlcmUuICovXFxuK1xcdGlmICghc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VoaXRzKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVlbnRlcmVkLCAxLCBcXFwicmVlbnRyeV9kZWZlcnJlZFxcXCIpO1xcbitvdXQ6XFxuK1xcdGlmIChwaWRmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShwaWRmZCk7XFxuK1xcdHJjdV9yZWVudHJ5X19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ5MmE5MjdmZjUxYzBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmNcXG5AQCAtMCwwICsxLDQ1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIFJlLWVudGVyIGNhbGxfc3JjdSgpIGZyb20gYSBCUEYgcHJvZ3JhbS4gIGZlbnRyeSBvbiByY3Vfc2VnY2JsaXN0X2VucXVldWUoKVxcbisgKiBmaXJlcyBpbnNpZGUgY2FsbF9zcmN1KCkncyBlbnF1ZXVlIChyZWFjaGVkIGZyb20gc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKVxcbisgKiB3aXRoIHRoZSBzcmN1X2RhdGEgLVxcdTAwM2Vsb2NrIGhlbGQpOyB0aGUgaGFuZGxlciB0aGVuIGNhbGxzIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKClcXG4rICogLS0gaXRzZWxmIGNhbGxfc3JjdSgpIG9uIHJjdV90YXNrc190cmFjZV9zcmN1X3N0cnVjdCAtLSByZS1lbnRlcmluZyB0aGUgc2FtZVxcbisgKiBzcmN1X2RhdGEgb24gdGhlIHNhbWUgQ1BVLlxcbisgKi9cXG4rI2luY2x1ZGUgXFxcInZtbGludXguaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcXHUwMDNlXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfVEFTS19TVE9SQUdFKTtcXG4rXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcXG4rfSB0YXNrX3N0ZyBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitpbnQgdGFyZ2V0X3BpZDtcXG4raW50IGhpdHM7XFxuK2ludCByZWVudGVyZWQ7XFxuK1xcbitTRUMoXFxcImZlbnRyeS9yY3Vfc2VnY2JsaXN0X2VucXVldWVcXFwiKVxcbitpbnQgQlBGX1BST0cocmVlbnRlcilcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjtcXG4rXFxuK1xcdGlmIChyZWVudGVyZWQgfHwgIXRhcmdldF9waWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Y3VyID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdGlmICghY3VyIHx8IGN1ci1cXHUwMDNlcGlkICE9IHRhcmdldF9waWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogUmUtZW50ZXIgdmlhIGEgdGFzay1zdG9yYWdlIGRlbGV0ZSwgd2hpY2ggY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cXG4rXFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNmhpdHMsIDEpO1xcbitcXHRicGZfdGFza19zdG9yYWdlX2dldChcXHUwMDI2dGFza19zdGcsIGN1ciwgMCwgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKTtcXG4rXFx0YnBmX3Rhc2tfc3RvcmFnZV9kZWxldGUoXFx1MDAyNnRhc2tfc3RnLCBjdXIpO1xcbitcXG4rXFx0cmVlbnRlcmVkID0gMTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MzMuMDQ1MjA4OTI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE1NDI0MjE5MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiLFxuICAgIFwiVFJBQ0VQT0lOVFNcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJSQ1VfVE9SVFVSRV9URVNUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJjdV9iYXJyaWVyXCIsXG4gICAgXCJzcmN1X2JhcnJpZXJcIixcbiAgICBcInJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NcIixcbiAgICBcInNyY3Vfb2ZmbGluZV9kcmFpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJhbCBtZWNoYW5pc20gZm9yIGNhbGxfcmN1KCkgYW5kIGNhbGxfc3JjdSgpIHRvIHNhZmVseSBoYW5kbGUgY2FsbGJhY2sgZW5xdWV1ZXMgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAoZS5nLiwgZnJvbSBOTUlzIG9yIEJQRiBwcm9ncmFtcykuIEl0IGFkZHMgbG9ja2xlc3MgbGlzdHMgYW5kIGlycV93b3JrIHRvIGRlZmVyIHRoZSBhY3R1YWwgZW5xdWV1ZSB1bnRpbCBpdCBpcyBzYWZlLiBJdCBhbHNvIHVwZGF0ZXMgcmN1X2JhcnJpZXIoKSwgc3JjdV9iYXJyaWVyKCksIGFuZCBDUFUgaG90cGx1ZyBwYXRocyB0byBmbHVzaCB0aGVzZSBkZWZlcnJlZCBjYWxsYmFja3MuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBOTUkgdGVzdGluZyB0byByY3V0b3J0dXJlIHVzaW5nIHBlcmYgZXZlbnRzLCBhbmQgYSBCUEYgc2VsZnRlc3QuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIFJDVSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gRm9jdXMgc3ltYm9scyBpbmNsdWRlIHRoZSBiYXJyaWVyIGFuZCBDUFUgb2ZmbGluZSBmdW5jdGlvbnMgdGhhdCBkcmFpbiB0aGUgbmV3IGRlZmVycmVkIGxpc3RzLiBSZXF1aXJlZCBjb25maWdzIGluY2x1ZGUgS1BST0JFUy9GVU5DVElPTl9UUkFDRVIvVFJBQ0VQT0lOVFMgdG8gZW5hYmxlIENPTkZJR19SQ1VfREVGRVIsIFBFUkZfRVZFTlRTIGFuZCBSQ1VfVE9SVFVSRV9URVNUIGZvciB0aGUgcmN1dG9ydHVyZSBjaGFuZ2VzLCBhbmQgQlBGX1NZU0NBTEwgYXMgQlBGIGlzIGEgcHJpbWFyeSB0cmlnZ2VyIGZvciB0aGlzIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNlZjM2NzQyYjE3YmViMGU3MzQ2YjU4ZjUxOGJhN2U4NmE3NjY3NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMToxNDozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuaW5kZXggZmJjZjEzYmMxMmQxNS4uNDcyNzVkMTgyOTY2YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oXG5AQCAtMTIsNiArMTIsNyBAQFxuICNkZWZpbmUgX0xJTlVYX1NSQ1VfVElOWV9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmtfdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FpdC5oXHUwMDNlXG4gXG4gc3RydWN0IHNyY3Vfc3RydWN0IHtcbkBAIC0yNiw2ICsyNyw4IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgKipzcmN1X2NiX3RhaWw7XHQvKiBQZW5kaW5nIGNhbGxiYWNrczogVGFpbC4gKi9cbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzcmN1X3dvcms7XHQvKiBGb3IgZHJpdmluZyBncmFjZSBwZXJpb2RzLiAqL1xuIFx0c3RydWN0IGlycV93b3JrIHNyY3VfaXJxX3dvcms7XHQvKiBEZWZlciBzY2hlZHVsZV93b3JrKCkgdG8gaXJxIHdvcmsuICovXG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9jYnM7XHQvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovXG4rXHRzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfaXc7XHRcdC8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovXG4gI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DXG4gXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDtcbiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovXG5AQCAtMzMsNiArMzYsNyBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xuIFxuIHZvaWQgc3JjdV9kcml2ZV9ncChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndwKTtcbiB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbit2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XG4gXG4gI2RlZmluZSBfX1NSQ1VfU1RSVUNUX0lOSVQobmFtZSwgX19pZ25vcmVkLCBfX19pZ25vcmVkLCBfX19faWdub3JlZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG5AQCAtNDAsNiArNDQsOCBAQCB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbiBcdC5zcmN1X2NiX3RhaWwgPSBcdTAwMjZuYW1lLnNyY3VfY2JfaGVhZCxcdFx0XHRcdFxcXG4gXHQuc3JjdV93b3JrID0gX19XT1JLX0lOSVRJQUxJWkVSKG5hbWUuc3JjdV93b3JrLCBzcmN1X2RyaXZlX2dwKSxcdFxcXG4gXHQuc3JjdV9pcnFfd29yayA9IHsgLmZ1bmMgPSBzcmN1X3RpbnlfaXJxX3dvcmsgfSxcdFx0XFxcbitcdC5kZWZlcl9jYnMgPSBMTElTVF9IRUFEX0lOSVQobmFtZS5kZWZlcl9jYnMpLFx0XHRcdFxcXG4rXHQuZGVmZXJfaXcgPSB7IC5mdW5jID0gc3JjdV9kZWZlcl9kcmFpbiB9LFx0XHRcdFx0XFxcbiBcdF9fU1JDVV9ERVBfTUFQX0lOSVQobmFtZSlcdFx0XHRcdFx0XFxcbiB9XG4gXG5AQCAtMTMxLDEwICsxMzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4te1xuLVx0c3luY2hyb25pemVfc3JjdShzc3ApO1xuLX1cbit2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHNyY3VfZXhwZWRpdGVfY3VycmVudChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkgeyB9XG4gI2RlZmluZSBzcmN1X2NoZWNrX3JlYWRfZmxhdm9yKHNzcCwgcmVhZF9mbGF2b3IpIGRvIHsgfSB3aGlsZSAoMClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbmluZGV4IDc1ZTU0ZTRmOTYzZmEuLjFjZTc1OWZiNzA5NDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxuQEAgLTEzLDYgKzEzLDggQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3Vfbm9kZV90cmVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuIFxuIHN0cnVjdCBzcmN1X25vZGU7XG4gc3RydWN0IHNyY3Vfc3RydWN0O1xuQEAgLTQxLDYgKzQzLDggQEAgc3RydWN0IHNyY3VfZGF0YSB7XG4gXHRib29sIHNyY3VfY2JsaXN0X2ludm9raW5nO1x0XHQvKiBJbnZva2luZyB0aGVzZSBDQnM/ICovXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdCBkZWxheV93b3JrO1x0XHQvKiBEZWxheSBmb3IgQ0IgaW52b2tpbmcgKi9cbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1x0XHQvKiBDb250ZXh0IGZvciBDQiBpbnZva2luZy4gKi9cbitcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NicztcdFx0LyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqL1xuK1x0c3RydWN0IGxsaXN0X25vZGUgZGVmZXJfbGluaztcdFx0LyogTGlua3Mgb250byB0aGUgcGVyLUNQVSBkZWZlcnJhbCBkcmFpbiBsaXN0ICovXG4gXHRzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9iYXJyaWVyX2hlYWQ7XHQvKiBGb3Igc3JjdV9iYXJyaWVyKCkgdXNlLiAqL1xuIFx0c3RydWN0IHJjdV9oZWFkIHNyY3VfZWNfaGVhZDtcdFx0LyogRm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpIHVzZS4gKi9cbiBcdGludCBzcmN1X2VjX3N0YXRlO1x0XHRcdC8qICBTdGF0ZSBmb3Igc3JjdV9leHBlZGl0ZV9jdXJyZW50KCkuICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9LY29uZmlnIGIva2VybmVsL3JjdS9LY29uZmlnXG5pbmRleCAzMzJkZjdhN2E2MzQ3Li5iYzk0ODNjMGI1ZDg0IDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9LY29uZmlnXG4rKysgYi9rZXJuZWwvcmN1L0tjb25maWdcbkBAIC0xNzUsNiArMTc1LDEyIEBAIGNvbmZpZyBSQ1VfU1RBTExfQ09NTU9OXG4gY29uZmlnIFJDVV9ORUVEX1NFR0NCTElTVFxuIFx0ZGVmX2Jvb2wgKCBUUkVFX1JDVSB8fCBUUkVFX1NSQ1UgfHwgVEFTS1NfUkNVX0dFTkVSSUMgKVxuIFxuKyMgVGhlIGRlZmVycmFsIChhbmQgdGhlIElSUV9XT1JLIGl0IHVzZXMpIGlzIG9ubHkgbmVlZGVkIHdoZXJlIGNhbGxfcmN1KCkgL1xuKyMgY2FsbF9zcmN1KCkgY2FuIGJlIGludm9rZWQgd2hpbGUgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQuXG4rY29uZmlnIFJDVV9ERUZFUlxuK1x0ZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNcbitcdHNlbGVjdCBJUlFfV09SS1xuK1xuIGNvbmZpZyBSQ1VfRkFOT1VUXG4gXHRpbnQgXCJUcmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgZmFub3V0IHZhbHVlXCJcbiBcdHJhbmdlIDIgNjQgaWYgNjRCSVRcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdS5oIGIva2VybmVsL3JjdS9yY3UuaFxuaW5kZXggMzlhOWY2ZmE5YTdiMi4uMDM2ZDI4NTE2ZTkyZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvcmN1LmhcbisrKyBiL2tlcm5lbC9yY3UvcmN1LmhcbkBAIC01NzIsNiArNTcyLDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrc19jYmxpc3RfaW5pdF9nZW5lcmljKHZvaWQpIHsgfVxuICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9JTklUXHQxXG4gI2RlZmluZSBSQ1VfU0NIRURVTEVSX1JVTk5JTkdcdDJcbiBcbisvKlxuKyAqIFNob3VsZCBhIGNhbGxfcmN1KCkvY2FsbF9zcmN1KCkgY2FsbGJhY2sgYmUgZGVmZXJyZWQgcmF0aGVyIHRoYW4gZW5xdWV1ZWRcbisgKiBub3c/ICBEZWZlciB3aGVuZXZlciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZDogYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBtYXlcbisgKiBiZSBpbiBmbGlnaHQgb24gdGhpcyBDUFUsIHNvIGVucXVldWluZyBub3cgY291bGQgY29ycnVwdCBpdC4gIEJ1dCBub3Qgd2hpbGVcbisgKiB0aGUgc2NoZWR1bGVyIGlzIGRvd24gLS0gZWFybHkgYm9vdCBpcyBzaW5nbGUtdGhyZWFkZWQgYW5kIGNhbiBjYWxsIHRoaXNcbisgKiBiZWZvcmUgaW5pdF9JUlEoKSBtYWtlcyBpcnFfd29yayB1c2FibGUgKGUuZy4gcmN1X2luaXQoKSdzIHNlbGYtdGVzdHMpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpXG4re1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gaXJxc19kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiByY3Vfc2NoZWR1bGVyX2FjdGl2ZSAhPSBSQ1VfU0NIRURVTEVSX0lOQUNUSVZFO1xuK31cbitcbisvKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUncyBkZWZlcnJlZCBTUkNVIGNhbGxiYWNrczsgc2VlIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4gKi9cbit2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTtcbitcbiBlbnVtIHJjdXRvcnR1cmVfdHlwZSB7XG4gXHRSQ1VfRkxBVk9SLFxuIFx0UkNVX1RBU0tTX0ZMQVZPUixcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXG5pbmRleCAzZDBiNTlhN2IwYjM4Li5hMDYxMDBiODIzNTk3IDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcbisrKyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXG5AQCAtNDgsNiArNDgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3RyYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ubWkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicmN1LmhcIlxuIFxuQEAgLTExNSw2ICsxMTYsNyBAQCB0b3J0dXJlX3BhcmFtKGludCwgbGVha3BvaW50ZXIsIDAsIFwiTGVhayBwb2ludGVyIGRlcmVmZXJlbmNlcyBmcm9tIHJlYWRlcnNcIik7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5fYmFycmllcl9jYnMsIDAsIFwiIyBvZiBjYWxsYmFja3Mva3RocmVhZHMgZm9yIGJhcnJpZXIgdGVzdGluZ1wiKTtcbiB0b3J0dXJlX3BhcmFtKGludCwgbl91cF9kb3duLCAzMiwgXCIjIG9mIGNvbmN1cnJlbnQgdXAvZG93biBocnRpbWVyLWJhc2VkIFJDVSByZWFkZXJzXCIpO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBuZmFrZXdyaXRlcnMsIDQsIFwiTnVtYmVyIG9mIFJDVSBmYWtlIHdyaXRlciB0aHJlYWRzXCIpO1xuK3RvcnR1cmVfcGFyYW0oYm9vbCwgbm1pX2NhbGxzLCB0cnVlLCBcIkV4ZXJjaXNlIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkgb24gbm1pX2NhcGFibGUgZmxhdm9yc1wiKTtcbiB0b3J0dXJlX3BhcmFtKGludCwgbnJlYWRlcnMsIC0xLCBcIk51bWJlciBvZiBSQ1UgcmVhZGVyIHRocmVhZHNcIik7XG4gdG9ydHVyZV9wYXJhbShib29sLCBud3JpdGVycywgMSwgXCJOdW1iZXIgb2YgUkNVIHdyaXRlciB0aHJlYWRzICgwIG9yIDEpXCIpO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBvYmplY3RfZGVidWcsIDAsIFwiRW5hYmxlIGRlYnVnLW9iamVjdCBkb3VibGUgY2FsbF9yY3UoKSB0ZXN0aW5nXCIpO1xuQEAgLTIxNiw2ICsyMTgsOCBAQCBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0X2ZhaWx1cmU7XG4gc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdHM7XG4gc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV90aW1lcnM7XG4gc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9pcnFzO1xuK3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NhbGw7XG4rc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9ubWlfY2I7XG4gc3RhdGljIGxvbmcgbl9iYXJyaWVyX2F0dGVtcHRzO1xuIHN0YXRpYyBsb25nIG5fYmFycmllcl9zdWNjZXNzZXM7IC8qIGRpZCByY3VfYmFycmllciB0ZXN0IHN1Y2NlZWQ/ICovXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbl9yZWFkX2V4aXRzO1xuQEAgLTQzMyw2ICs0MzcsNyBAQCBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHtcbiBcdGJvb2wgKCppc190YXNrX3JjdV9ib29zdGVkKSh2b2lkKTtcbiBcdGxvbmcgY2JmbG9vZF9tYXg7XG4gXHRpbnQgaXJxX2NhcGFibGU7XG4rXHRpbnQgbm1pX2NhcGFibGU7XG4gXHRpbnQgY2FuX2Jvb3N0O1xuIFx0aW50IGV4dGVuZGFibGVzO1xuIFx0aW50IHNsb3dfZ3BzO1xuQEAgLTY0Niw2ICs2NTEsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyByY3Vfb3BzID0ge1xuIFx0LmV4dGVuZGFibGVzXHRcdD0gUkNVVE9SVFVSRV9NQVhfRVhURU5ELFxuIFx0LmRlYnVnX29iamVjdHNcdFx0PSAxLFxuIFx0LnN0YXJ0X3BvbGxfaXJxc29mZlx0PSAxLFxuK1x0Lm5taV9jYXBhYmxlXHRcdD0gMSxcbiBcdC5uYW1lXHRcdFx0PSBcInJjdVwiXG4gfTtcbiBcbkBAIC05MzYsNiArOTQyLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdV9vcHMgPSB7XG4gXHQuZGVidWdfb2JqZWN0c1x0PSAxLFxuIFx0LmhhdmVfdXBfZG93blx0PSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpXG4gXHRcdFx0XHQ/IDAgOiBTUkNVX1JFQURfRkxBVk9SX05PUk1BTCB8IFNSQ1VfUkVBRF9GTEFWT1JfRkFTVF9VUERPV04sXG4rXHQubm1pX2NhcGFibGVcdD0gMSxcbiBcdC5uYW1lXHRcdD0gXCJzcmN1XCJcbiB9O1xuIFxuQEAgLTk5OSw2ICsxMDA2LDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdWRfb3BzID0ge1xuIFx0LmRlYnVnX29iamVjdHNcdD0gMSxcbiBcdC5oYXZlX3VwX2Rvd25cdD0gSVNfRU5BQkxFRChDT05GSUdfVElOWV9TUkNVKVxuIFx0XHRcdFx0PyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLFxuK1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwic3JjdWRcIlxuIH07XG4gXG5AQCAtMTI2Myw2ICsxMjcxLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgdGFza3NfdHJhY2luZ19vcHMgPSB7XG4gXHQuY2JmbG9vZF9tYXhcdD0gNTAwMDAsXG4gXHQuaXJxX2NhcGFibGVcdD0gMSxcbiBcdC5zbG93X2dwc1x0PSAxLFxuK1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwidGFza3MtdHJhY2luZ1wiXG4gfTtcbiBcbkBAIC0yNjUzLDEyICsyNjYyLDk3IEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKVxuIFxuIHN0YXRpYyBERUZJTkVfVE9SVFVSRV9SQU5ET01fUEVSQ1BVKHJjdV90b3J0dXJlX3RpbWVyX3JhbmQpO1xuIFxuKy8qXG4rICogRXhlcmNpc2UgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSSBjb250ZXh0IGZvciBmbGF2b3JzIHRoYXQgYWR2ZXJ0aXNlIC1cdTAwM2VubWlfY2FwYWJsZS5cbisgKiBBIHBlci1DUFUgaGFyZHdhcmUgcGVyZiBjb3VudGVyIG92ZXJmbG93cyBpbnRvIGFuIE5NSSAtLSBhIHJlYWwgTk1JIG9uIHg4NixcbisgKiBvciBhIHBzZXVkby1OTUkgb24gYXJtNjQgYm9vdGVkIHdpdGggaXJxY2hpcC5naWN2M19wc2V1ZG9fbm1pPTEgLS0gYW5kIGl0c1xuKyAqIGhhbmRsZXIgc3VibWl0cyBvbmUgcHJlYWxsb2NhdGVkIGNhbGxiYWNrIHZpYSAtXHUwMDNlY2FsbCgpLiAgT25seSBvbmUgY2FsbGJhY2sgaXNcbisgKiBpbiBmbGlnaHQgYXQgYSB0aW1lIChndWFyZGVkIGJ5IGFuIGF0b21pYyksIHdoaWNoIGF2b2lkcyBhbGxvY2F0aW5nIGluIE5NSVxuKyAqIGFuZCBpcyBlbm91Z2ggdG8gZXhlcmNpc2UgdGhlIGRlZmVycmFsLiAgVGhpcyBtaXJyb3JzIGhvdyBCUEYgcHJvZ3JhbXMgcmVhY2hcbisgKiAtXHUwMDNlY2FsbCgpIGZyb20gTk1JLiAgUmVxdWlyZXMgYSBoYXJkd2FyZSBQTVU7IHdoZW4gdGhlIG92ZXJmbG93IGlzIG5vdCBhbiBOTUlcbisgKiB0aGUgaGFuZGxlciBkb2VzIG5vdGhpbmcuXG4rICovXG4rI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0ge1xuK1x0LnR5cGVcdFx0PSBQRVJGX1RZUEVfSEFSRFdBUkUsXG4rXHQuY29uZmlnXHRcdD0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxuK1x0LnNpemVcdFx0PSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXG4rXHQucGlubmVkXHRcdD0gMSxcbitcdC5kaXNhYmxlZFx0PSAxLFxuK1x0LmZyZXFcdFx0PSAxLFxuK1x0LnNhbXBsZV9mcmVxXHQ9IDEwMDAsXG4rfTtcbitcbitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKipyY3VfdG9ydHVyZV9ubWlfZXZlbnRzO1xuK3N0YXRpYyBzdHJ1Y3QgcmN1X2hlYWQgcmN1X3RvcnR1cmVfbm1pX3JoO1xuK3N0YXRpYyBhdG9taWNfdCByY3VfdG9ydHVyZV9ubWlfcmhfaW51c2U7XG4rXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NiKHN0cnVjdCByY3VfaGVhZCAqcmhwKVxuK3tcbitcdGF0b21pY19sb25nX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYik7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnJjdV90b3J0dXJlX25taV9yaF9pbnVzZSwgMCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbit7XG4rXHRpZiAoIWluX25taSgpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoY3VyX29wcy1cdTAwM2VjYWxsIFx1MDAyNlx1MDAyNiAhYXRvbWljX3hjaGcoXHUwMDI2cmN1X3RvcnR1cmVfbm1pX3JoX2ludXNlLCAxKSkge1xuK1x0XHRjdXJfb3BzLVx1MDAzZWNhbGwoXHUwMDI2cmN1X3RvcnR1cmVfbm1pX3JoLCByY3VfdG9ydHVyZV9ubWlfY2IpO1xuK1x0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50O1xuK1x0aW50IGNwdTtcbitcbitcdGlmICghbm1pX2NhbGxzIHx8ICFjdXJfb3BzLVx1MDAzZW5taV9jYXBhYmxlIHx8ICFjdXJfb3BzLVx1MDAzZWNhbGwpXG4rXHRcdHJldHVybjtcbitcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBrY2FsbG9jKG5yX2NwdV9pZHMsIHNpemVvZigqcmN1X3RvcnR1cmVfbm1pX2V2ZW50cyksXG4rXHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbitcdGlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50cylcbitcdFx0cmV0dXJuO1xuK1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbitcdFx0ZXZlbnQgPSBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcihcdTAwMjZyY3VfdG9ydHVyZV9ubWlfYXR0ciwgY3B1LFxuK1x0XHRcdFx0XHRcdFx0IE5VTEwsIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdywgTlVMTCk7XG4rXHRcdGlmIChJU19FUlIoZXZlbnQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV0gPSBldmVudDtcbitcdFx0cGVyZl9ldmVudF9lbmFibGUoZXZlbnQpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2xlYW51cCh2b2lkKVxuK3tcbitcdGludCBjcHU7XG4rXG4rXHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXG4rXHRcdHJldHVybjtcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbitcdFx0aWYgKCFyY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV0pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHBlcmZfZXZlbnRfZGlzYWJsZShyY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV0pO1xuK1x0XHRwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7XG4rXHR9XG4rXHRrZnJlZShyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKTtcbitcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMO1xuK31cbisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkgeyB9XG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZCkgeyB9XG4rI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi9cbitcbiAvKlxuICAqIFJDVSB0b3J0dXJlIHJlYWRlciBmcm9tIHRpbWVyIGhhbmRsZXIuICBEZXJlZmVyZW5jZXMgcmN1X3RvcnR1cmVfY3VycmVudCxcbiAgKiBpbmNyZW1lbnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgcGlwZWxpbmUgYXJyYXkuICBUaGVcbiAgKiBjb3VudGVyIGluIHRoZSBlbGVtZW50IHNob3VsZCBuZXZlciBiZSBncmVhdGVyIHRoYW4gMSwgb3RoZXJ3aXNlLCB0aGVcbiAgKiBSQ1UgaW1wbGVtZW50YXRpb24gaXMgYnJva2VuLlxuICAqL1xuK1xuIHN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp1bnVzZWQpXG4ge1xuIFx0V0FSTl9PTl9PTkNFKCFpbl9zZXJ2aW5nX3NvZnRpcnEoKSk7XG5AQCAtMzA0MSw2ICszMTM1LDkgQEAgcmN1X3RvcnR1cmVfc3RhdHNfcHJpbnQodm9pZClcbiBcdFx0ZGF0YV9yYWNlKG5fYmFycmllcl9hdHRlbXB0cyksXG4gXHRcdGRhdGFfcmFjZShuX3JjdV90b3J0dXJlX2JhcnJpZXJfZXJyb3IpKTtcbiBcdHByX2NvbnQoXCJyZWFkLWV4aXRzOiAlbGQgXCIsIGRhdGFfcmFjZShuX3JlYWRfZXhpdHMpKTsgLy8gU3RhdGlzdGljLlxuK1x0cHJfY29udChcIm5taS1jYWxsczogJWxkIG5taS1jYnM6ICVsZCBcIixcbitcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKSxcbitcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpO1xuIFx0cHJfY29udChcIm5vY2ItdG9nZ2xlczogJWxkOiVsZCBcIixcbiBcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX25vY2Jfb2ZmbG9hZCksIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9ub2NiX2Rlb2ZmbG9hZCkpO1xuIFx0cHJfY29udChcImdwd3JhcHM6ICVsZFxcblwiLCBuX2dwd3JhcHMpO1xuQEAgLTQzMTUsNiArNDQxMiw4IEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZClcbiBcdFx0a2ZyZWUocmVhZGVyX3Rhc2tzKTtcbiBcdFx0cmVhZGVyX3Rhc2tzID0gTlVMTDtcbiBcdH1cbitcdC8qIERpc2FibGUgdGhlIHBlcmYgY291bnRlcnMgKGFuZCB0aHVzIHRoZSBOTUkgLVx1MDAzZWNhbGwoKSBmaXJpbmcpIG5vdy4gKi9cbitcdHJjdV90b3J0dXJlX25taV9jbGVhbnVwKCk7XG4gXHRrZnJlZShyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGspO1xuIFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrID0gTlVMTDtcbiBcbkBAIC00MzQ0LDYgKzQ0NDMsMjAgQEAgcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKVxuIFx0XHRwcl9pbmZvKFwiJXM6IEludm9raW5nICVwUygpLlxcblwiLCBfX2Z1bmNfXywgY3VyX29wcy1cdTAwM2VjYl9iYXJyaWVyKTtcbiBcdFx0Y3VyX29wcy1cdTAwM2VjYl9iYXJyaWVyKCk7XG4gXHR9XG4rXG4rXHQvKlxuK1x0ICogY2JfYmFycmllcigpIGFib3ZlIGRyYWluZWQgZXZlcnkgZGVmZXJyZWQgTk1JIC1cdTAwM2VjYWxsKCkgY2FsbGJhY2ssIHNvIHRoZVxuK1x0ICogY291bnQgaXNzdWVkIGZyb20gTk1JIG11c3QgZXF1YWwgdGhlIGNvdW50IGludm9rZWQ7IGEgbWlzbWF0Y2ggbWVhbnMgYVxuK1x0ICogY2FsbGJhY2sgd2FzIGxvc3QuXG4rXHQgKi9cbitcdGlmIChhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpICE9XG4rXHQgICAgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpIHtcbitcdFx0cHJfYWxlcnQoXCIlczogTk1JIC1cdTAwM2VjYWxsKCkgbG9zdCBhIGNhbGxiYWNrOiBpc3N1ZWQgJWxkIGludm9rZWQgJWxkXFxuXCIsXG4rXHRcdFx0IF9fZnVuY19fLCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxuK1x0XHRcdCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSk7XG4rXHRcdGF0b21pY19pbmMoXHUwMDI2bl9yY3VfdG9ydHVyZV9lcnJvcik7XG4rXHR9XG4rXG4gXHRpZiAoY3VyX29wcy1cdTAwM2VjbGVhbnVwICE9IE5VTEwpXG4gXHRcdGN1cl9vcHMtXHUwMDNlY2xlYW51cCgpO1xuIFxuQEAgLTQ3NzYsNiArNDg4OSw4IEBAIHJjdV90b3J0dXJlX2luaXQodm9pZClcbiBcdFx0Zmlyc3RlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIHVud2luZDtcbiBcdH1cbitcdC8qIEFybSB0aGUgcGVyLUNQVSBwZXJmIGNvdW50ZXJzIHRoYXQgZHJpdmUgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSS4gKi9cbitcdHJjdV90b3J0dXJlX25taV9pbml0KCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucmVhbHJlYWRlcnM7IGkrKykge1xuIFx0XHRyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGtbaV0ucnRjX2Noa3JkciA9IC0xO1xuIFx0XHRmaXJzdGVyciA9IHRvcnR1cmVfY3JlYXRlX2t0aHJlYWQocmN1X3RvcnR1cmVfcmVhZGVyLCAodm9pZCAqKWksXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9zcmN1dGlueS5jIGIva2VybmVsL3JjdS9zcmN1dGlueS5jXG5pbmRleCA1NThiYThkMzE2ZGI2Li4wM2EwN2ExZjNhMzBiIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jXG4rKysgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbkBAIC0xMCw2ICsxMCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVlbXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbkBAIC00Myw2ICs0NCw4IEBAIHN0YXRpYyBpbnQgaW5pdF9zcmN1X3N0cnVjdF9maWVsZHMoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRJTklUX1dPUksoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzc3AtXHUwMDNlc3JjdV93b3JrLmVudHJ5KTtcbiBcdGluaXRfaXJxX3dvcmsoXHUwMDI2c3NwLVx1MDAzZXNyY3VfaXJxX3dvcmssIHNyY3VfdGlueV9pcnFfd29yayk7XG4rXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2Nicyk7XG4rXHRpbml0X2lycV93b3JrKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9pdywgc3JjdV9kZWZlcl9kcmFpbik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjEzLDExICsyMTYsMTEgQEAgc3RhdGljIHZvaWQgc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gfVxuIFxuIC8qXG4tICogRW5xdWV1ZSBhbiBTUkNVIGNhbGxiYWNrIG9uIHRoZSBzcGVjaWZpZWQgc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlLFxuLSAqIGluaXRpYXRpbmcgZ3JhY2UtcGVyaW9kIHByb2Nlc3NpbmcgaWYgaXQgaXMgbm90IGFscmVhZHkgcnVubmluZy5cbisgKiBFbnF1ZXVlIEByaHAgb24gdGhlIGNhbGxiYWNrIGxpc3QuICBBbHNvIGNhbGxlZCBieSBzcmN1X2RlZmVyX2RyYWluKCkgdG9cbisgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLlxuICAqL1xuLXZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbi1cdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxuK3N0YXRpYyB2b2lkIHNyY3VfZG9fZW5xdWV1ZShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4rXHRcdFx0ICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbkBAIC0yMzEsNiArMjM0LDM5IEBAIHZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiBcdHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCk7XG4gXHRwcmVlbXB0X2VuYWJsZSgpO1xuIH1cbitcbit2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbit7XG4rXHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCA9IGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3Vfc3RydWN0LCBkZWZlcl9pdyk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4rXG4rXHQvKlxuK1x0ICogQ2FsbGJhY2tzIGhhdmUgbm8gbXV0dWFsIG9yZGVyaW5nIGd1YXJhbnRlZSBhbmQgc3JjdV9iYXJyaWVyKCkgaGFzXG4rXHQgKiBhbHJlYWR5IGZsdXNoZWQgdXMsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLlxuK1x0ICovXG4rXHRsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2NicykpIHtcbitcdFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbitcbitcdFx0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtXHUwMDNlZnVuYyk7XG4rXHR9XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfZGVmZXJfZHJhaW4pO1xuK1xuK3ZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbitcdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxuK3tcbitcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbitcdFx0cmhwLVx1MDAzZWZ1bmMgPSBmdW5jO1xuK1x0XHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2NicykpXG4rXHRcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2l3KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXG4rXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuK1xuK1x0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jKTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9zcmN1KTtcbiBcbiAvKlxuQEAgLTI2MCw2ICsyOTYsMTUgQEAgdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcbiBcbisvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzLCB0aGVuIHdhaXQgZm9yIGFsbCBpbi1mbGlnaHQgb25lcy4gKi9cbit2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbit7XG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbitcdFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlZGVmZXJfaXcpO1xuK1x0c3luY2hyb25pemVfc3JjdShzc3ApO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2JhcnJpZXIpO1xuK1xuIC8qXG4gICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llXG4gICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9zcmN1dHJlZS5jIGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXG5pbmRleCAzMDQxMTI2NzRlOGEyLi5iOWZlNTdmZjkxMDAwIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9zcmN1dHJlZS5jXG4rKysgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcbkBAIC0yMCw2ICsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVlbXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuQEAgLTc5LDYgKzgwLDQ2IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3Nfc3JjdShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIHN0YXRpYyB2b2lkIHNyY3VfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICp3b3JrKTtcbiBzdGF0aWMgdm9pZCBzcmN1X2RlbGF5X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbiBcbitzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xuK1xuKy8qXG4rICogUGVyLUNQVSBjYWxsX3NyY3UoKSBkZWZlcnJhbCBzdGF0ZS4gIFRoZSBpcnFfd29yayBpcyBnbG9iYWwgKHNoYXJlZCBieSBldmVyeVxuKyAqIHNyY3Vfc3RydWN0KSwgc28gaXQgbXVzdCBmaW5kIHdoaWNoIHNyY3Vfc3RydWN0cyBkZWZlcnJlZCBjYWxsYmFja3M6IGFcbisgKiBjYWxsYmFjayBpcyBzdGFnZWQgb24gaXRzIHNyY3VfZGF0YSdzIC1cdTAwM2VkZWZlcl9jYnMsIGFuZCB0aGF0IHNyY3VfZGF0YSBpc1xuKyAqIGNoYWluZWQgKC1cdTAwM2VkZWZlcl9saW5rKSBvbnRvIHRoaXMgcGVyLUNQVSAtXHUwMDNlbGlzdCB0aGF0IHRoZSBpcnFfd29yayB3YWxrcy5cbisgKi9cbitzdHJ1Y3Qgc3JjdV9kZWZlciB7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZFx0bGlzdDtcbitcdHN0cnVjdCBpcnFfd29ya1x0XHRpdztcbitcdHJhd19zcGlubG9ja190XHRcdGxvY2s7XG4rfTtcbitcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNyY3VfZGVmZXIsIHNyY3VfZGVmZXIpID0ge1xuK1x0LmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoc3JjdV9kZWZlci5sb2NrKSxcbitcdC5pdyA9IElSUV9XT1JLX0lOSVRfSEFSRChzcmN1X2RlZmVyX2RyYWluKSxcbit9O1xuK1xuKy8qXG4rICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3Mgc28gYSBmb2xsb3dpbmcgc3JjdV9iYXJyaWVyKClcbisgKiB3YWl0cyBmb3IgdGhlbS4gIEFuIG9ubGluZSBDUFUncyBvd24gaXJxX3dvcmsgcmUtaXNzdWVzIGl0cyBjYWxsYmFja3MsIHNvIHdhaXRcbisgKiBpdCBvdXQ7IGFuIG9mZmxpbmUgQ1BVJ3MgaXJxX3dvcmsgbWF5IG5ldmVyIHJ1biBhZ2Fpbiwgc28gZHJhaW4gaXRzIGxpc3RcbisgKiBkaXJlY3RseSBvbnRvIHRoaXMgQ1BVIGluc3RlYWQuXG4rICovXG4rc3RhdGljIHZvaWQgc3JjdV9kZWZlcl9mbHVzaCh2b2lkKVxuK3tcbitcdGludCBjcHU7XG4rXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdHJldHVybjtcbitcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbitcdFx0aWYgKGNwdV9vbmxpbmUoY3B1KSlcbitcdFx0XHRpcnFfd29ya19zeW5jKFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XG4rXHRcdGVsc2VcbitcdFx0XHRzcmN1X2RlZmVyX2RyYWluKFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogSW5pdGlhbGl6ZSBTUkNVIHBlci1DUFUgZGF0YS4gIE5vdGUgdGhhdCBzdGF0aWNhbGx5IGFsbG9jYXRlZFxuICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgbWlnaHQgYWxyZWFkeSBoYXZlIHNyY3VfcmVhZF9sb2NrKCkgYW5kXG5AQCAtMTA3LDYgKzE0OCwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3NyY3Vfc3RydWN0X2RhdGEoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRcdHNkcC1cdTAwM2VjcHUgPSBjcHU7XG4gXHRcdElOSVRfV09SSyhcdTAwMjZzZHAtXHUwMDNld29yaywgc3JjdV9pbnZva2VfY2FsbGJhY2tzKTtcbiBcdFx0dGltZXJfc2V0dXAoXHUwMDI2c2RwLVx1MDAzZWRlbGF5X3dvcmssIHNyY3VfZGVsYXlfdGltZXIsIDApO1xuK1x0XHQvKlxuK1x0XHQgKiAtXHUwMDNlZGVmZXJfY2JzIGFuZCAtXHUwMDNlZGVmZXJfbGluayBhcmUgdmFsaWQgd2hlbiB6ZXJvZWQgYW5kIGFyZSBub3RcbitcdFx0ICogcmVpbml0aWFsaXplZCBoZXJlLCBsZXN0IHdlIGNsb2JiZXIgY2FsbGJhY2tzIGEgcmVlbnRyYW50XG4rXHRcdCAqIGNhbGxfc3JjdSgpIGFscmVhZHkgc3RhZ2VkLiAgU2VlIF9fY2FsbF9zcmN1KCkuXG4rXHRcdCAqL1xuIFx0XHRzZHAtXHUwMDNlc3NwID0gc3NwO1xuIFx0fVxuIH1cbkBAIC02OTcsNiArNzQzLDggQEAgdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIFx0XHRyZXR1cm47IC8qIEp1c3QgbGVhayBpdCEgKi9cbiBcdC8qIFdhaXQgZm9yIGlycV93b3JrIHRvIGZpbmlzaCBmaXJzdCBhcyBpdCBtYXkgcXVldWUgYSBuZXcgd29yay4gKi9cbiBcdGlycV93b3JrX3N5bmMoXHUwMDI2c3VwLVx1MDAzZWlycV93b3JrKTtcbitcdC8qIERyYWluIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgKHNoYXJlZCBpcnFfd29yaykgYmVmb3JlIGZyZWVpbmcgLVx1MDAzZXNkYS4gKi9cbitcdHNyY3VfZGVmZXJfZmx1c2goKTtcbiBcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzdXAtXHUwMDNld29yayk7XG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdHN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IHBlcl9jcHVfcHRyKHNzcC1cdTAwM2VzZGEsIGNwdSk7XG5AQCAtMTQxMCw4ICsxNDU4LDE4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLFxuICAqIHNyY3VfcmVhZF9sb2NrKCksIGFuZCBzcmN1X3JlYWRfdW5sb2NrKCkgdGhhdCBhcmUgYWxsIHBhc3NlZCB0aGUgc2FtZVxuICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4tXHRcdFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxuKy8qXG4rICogVGhlIHNyY3VfY2JsaXN0IGFuZCB0aGUgc3JjdV9ub2RlIHRyZWUgYXJlIG9ubHkgZXZlciBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHNcbisgKiBkaXNhYmxlZCAoc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKSBlbnF1ZXVlcyB1bmRlciByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSBhbmRcbisgKiBtYXkgd2FsayB0aGUgdHJlZTsgY2FsbGJhY2sgaW52b2NhdGlvbiBhbmQgZ3JhY2UtcGVyaW9kIHdvcmsgbGlrZXdpc2UpLiAgU29cbisgKiBsaWtlIGNhbGxfcmN1KCksIGVucXVldWluZyB3aGlsZSBhIGxpc3Qgb3BlcmF0aW9uIGlzIGluIGZsaWdodCBvbiB0aGlzIENQVVxuKyAqIHdvdWxkIGNvcnJ1cHQgaXQgb3IgZGVhZGxvY2sgLS0gZS5nLiBjYWxsX3JjdV90YXNrc190cmFjZSgpLCB3aGljaCBpc1xuKyAqIGNhbGxfc3JjdSgpIG9uIGEgZGVkaWNhdGVkIHNyY3Vfc3RydWN0LCBmcm9tIGEgQlBGIHByb2dyYW0uICBfX2NhbGxfc3JjdSgpXG4rICogZGVmZXJzIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCB2aWEgYSBwZXItQ1BVIGlycV93b3JrOyBvbmx5IGtlcm5lbHNcbisgKiB3aGVyZSB0aGF0IGNhbiBoYXBwZW4gKENPTkZJR19SQ1VfREVGRVIpIG5lZWQgdGhpcy5cbisgKi9cbitzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuK1x0XHRcdCAgICByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXG4ge1xuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHJocCkpIHtcbiBcdFx0LyogUHJvYmFibGUgZG91YmxlIGNhbGxfc3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4gKi9cbkBAIC0xNDIzLDYgKzE0ODEsNzIgQEAgc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuIFx0KHZvaWQpc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3NwLCByaHAsIGRvX25vcm0pO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4rXHRcdFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxuK3tcbitcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbitcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwID0gdGhpc19jcHVfcHRyKHNzcC1cdTAwM2VzZGEpO1xuK1xuK1x0XHRyaHAtXHUwMDNlZnVuYyA9IGZ1bmM7XG4rXHRcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopcmhwLCBcdTAwMjZzZHAtXHUwMDNlZGVmZXJfY2JzKSkge1xuK1x0XHRcdC8qIEZpcnN0IGRlZmVycmFsIG9uIHRoaXMgc3JjdV9kYXRhOiBjaGFpbiBpdCBmb3IgdGhlIGRyYWluLiAqL1xuK1x0XHRcdHN0cnVjdCBzcmN1X2RlZmVyICpzbmRwID0gdGhpc19jcHVfcHRyKFx1MDAyNnNyY3VfZGVmZXIpO1xuK1xuK1x0XHRcdHNkcC1cdTAwM2Vzc3AgPSBzc3A7XG4rXHRcdFx0aWYgKGxsaXN0X2FkZChcdTAwMjZzZHAtXHUwMDNlZGVmZXJfbGluaywgXHUwMDI2c25kcC1cdTAwM2VsaXN0KSlcbitcdFx0XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnNuZHAtXHUwMDNlaXcpO1xuK1x0XHR9XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuK1x0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXHUwMDI2XHUwMDI2IGluX25taSgpKTtcbitcbitcdHNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgZnVuYywgZG9fbm9ybSk7XG4rfVxuK1xuKy8qXG4rICogUmUtaXNzdWUgdGhpcyBDUFUncyBkZWZlcnJlZCBjYWxsYmFja3MsIGdvaW5nIHN0cmFpZ2h0IHRvIHNyY3VfZG9fZW5xdWV1ZSgpIHNvXG4rICogdGhleSBjYW5ub3QgZGVmZXIgYWdhaW4uICBUaGUgaXJxX3dvcmsgd2Fsa3MgaXRzIC1cdTAwM2VsaXN0IG9mIHNyY3VfZGF0YSwgZWFjaFxuKyAqIGNhcnJ5aW5nIGl0cyBvd24gLVx1MDAzZWRlZmVyX2Nicy4gIC1cdTAwM2Vsb2NrIGlzIGhlbGQgYWNyb3NzIHRoZSBkcmFpbiBzbyBkcmFpbmVyc1xuKyAqIChpcnFfd29yaywgc3JjdV9kZWZlcl9mbHVzaCgpIGFuZCBzcmN1X29mZmxpbmVfZHJhaW4oKSkgc2VyaWFsaXplIGFuZCBuZXZlclxuKyAqIGxlYXZlIGEgY2FsbGJhY2sgb2ZmIHRoZSBsaXN0cyB5ZXQgbm90IG9uIGEgY2FsbGJhY2sgbGlzdC5cbisgKi9cbitzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4re1xuK1x0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X2RlZmVyLCBpdyk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqc25vZGUsICpzbmV4dDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c25kcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHNub2RlLCBzbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZzbmRwLVx1MDAzZWxpc3QpKSB7XG4rXHRcdHN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IGNvbnRhaW5lcl9vZihzbm9kZSwgc3RydWN0IHNyY3VfZGF0YSwgZGVmZXJfbGluayk7XG4rXHRcdHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwID0gc2RwLVx1MDAzZXNzcDtcbitcdFx0c3RydWN0IGxsaXN0X25vZGUgKmNub2RlLCAqY25leHQ7XG4rXG4rXHRcdGNub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZzZHAtXHUwMDNlZGVmZXJfY2JzKTtcbitcdFx0bGxpc3RfZm9yX2VhY2hfc2FmZShjbm9kZSwgY25leHQsIGNub2RlKSB7XG4rXHRcdFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopY25vZGU7XG4rXG4rXHRcdFx0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtXHUwMDNlZnVuYywgdHJ1ZSk7XG4rXHRcdH1cbitcdH1cbitcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnNuZHAtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK31cbitcbisvKlxuKyAqIERyYWluIEBjcHUncyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3M7IGNhbGxlZCBmcm9tXG4rICogcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpIG9uY2UgQGNwdSBpcyBkZWFkLiAgT25lIHBhc3MgY292ZXJzIGV2ZXJ5XG4rICogc3JjdV9zdHJ1Y3QsIGFzIHRoZSBwZXItQ1BVIHNyY3VfZGVmZXIgbGlzdCBjaGFpbnMgdGhlbSBhbGwsIGFuZCB0aGVcbisgKiByZS1pc3N1ZSBsYW5kcyBvbiB0aGUgY3VycmVudCBDUFUncyBzcmN1X2RhdGEuXG4rICovXG4rdm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSlcbit7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdHJldHVybjtcbitcdHNyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTtcbit9XG4rXG4gLyoqXG4gICogY2FsbF9zcmN1KCkgLSBRdWV1ZSBhIGNhbGxiYWNrIGZvciBpbnZvY2F0aW9uIGFmdGVyIGFuIFNSQ1UgZ3JhY2UgcGVyaW9kXG4gICogQHNzcDogc3JjdV9zdHJ1Y3QgaW4gcXVldWUgdGhlIGNhbGxiYWNrXG5AQCAtMTY3Nyw5ICsxODAxLDE3IEBAIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIHtcbiBcdGludCBjcHU7XG4gXHRpbnQgaWR4O1xuLVx0dW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxKTtcbitcdHVuc2lnbmVkIGxvbmcgcztcbiBcbiBcdGNoZWNrX2luaXRfc3JjdV9zdHJ1Y3Qoc3NwKTtcbitcbitcdC8qXG4rXHQgKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAgVGhlXG4rXHQgKiBzaGFyZWQgaXJxX3dvcmsgbWF5IGFsc28gZHJhaW4gb3RoZXIgc3JjdV9zdHJ1Y3RzJywgd2hpY2ggaXMgaGFybWxlc3MuXG4rXHQgKi9cbitcdHNyY3VfZGVmZXJfZmx1c2goKTtcbitcbitcdHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZzc3AtXHUwMDNlc3JjdV9zdXAtXHUwMDNlc3JjdV9iYXJyaWVyX211dGV4KTtcbiBcdGlmIChyY3Vfc2VxX2RvbmUoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEsIHMpKSB7XG4gXHRcdHNtcF9tYigpOyAvKiBGb3JjZSBvcmRlcmluZyBmb2xsb3dpbmcgcmV0dXJuLiAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdGlueS5jIGIva2VybmVsL3JjdS90aW55LmNcbmluZGV4IGRjY2NjZDZiZTk0MTEuLjcxMjQ5ZWFjNjEwMjEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RpbnkuY1xuKysrIGIva2VybmVsL3JjdS90aW55LmNcbkBAIC0xMSw2ICsxMSw4IEBAXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuQEAgLTQyLDggKzQ0LDgzIEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2N0cmxibGsgPSB7XG4gXHQuZ3Bfc2VxXHRcdD0gMCAtIDMwMFVMLFxuIH07XG4gXG4rLypcbisgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGV2ZXIgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICh0aGlzXG4rICogZW5xdWV1ZSwgY2FsbGJhY2sgaW52b2NhdGlvbiwgZ3JhY2UtcGVyaW9kIHdvcmspLCBzbyBlbnF1ZXVpbmcgd2hpbGUgYSBsaXN0XG4rICogb3BlcmF0aW9uIGlzIGluIGZsaWdodCB3b3VsZCBjb3JydXB0IGl0LiAgRGVmZXIgd2hlbmV2ZXIgaW50ZXJydXB0cyBhcmVcbisgKiBkaXNhYmxlZDogdGhlIGNhbGxiYWNrIGdvZXMgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXQgYW4gaXJxX3dvcmsgcmUtaXNzdWVzXG4rICogbGF0ZXIuICBPbmUgZ2xvYmFsIGxpc3QgYW5kIGlycV93b3JrIHN1ZmZpY2UsIGFzIFRpbnkgUkNVIGlzIHVuaXByb2Nlc3Nvci5cbisgKiBPbmx5IGtlcm5lbHMgd2hlcmUgdGhhdCBjYW4gaGFwcGVuIChDT05GSUdfUkNVX0RFRkVSKSBuZWVkIHRoaXMuXG4rICovXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xuK3N0YXRpYyBMTElTVF9IRUFEKHJjdV9kZWZlcl9saXN0KTtcbitzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHJjdV9kZWZlcl9pdywgcmN1X2RlZmVyX2RyYWluKTtcbitcbisvKlxuKyAqIEVucXVldWUgQGhlYWQgb24gdGhlIGNhbGxiYWNrIGxpc3QuICBBbHNvIGNhbGxlZCBieSByY3VfZGVmZXJfZHJhaW4oKSB0b1xuKyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXG4rICovXG4rc3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxuK3tcbitcdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHtcbitcdFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmRvdWJsZWZyZWVzKSBcdTAwM2MgNCkge1xuK1x0XHRcdHByX2VycihcIiVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC1cdTAwM2UlcFMoKSEhISAgXCIsIF9fZnVuY19fLCBoZWFkLCBoZWFkLVx1MDAzZWZ1bmMpO1xuK1x0XHRcdG1lbV9kdW1wX29iaihoZWFkKTtcbitcdFx0fVxuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRoZWFkLVx1MDAzZWZ1bmMgPSBmdW5jO1xuK1x0aGVhZC1cdTAwM2VuZXh0ID0gTlVMTDtcbitcbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdCpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDtcbitcdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcdTAwMjZoZWFkLVx1MDAzZW5leHQ7XG4rXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4rXG4rXHRpZiAodW5saWtlbHkoaXNfaWRsZV90YXNrKGN1cnJlbnQpKSkge1xuK1x0XHQvKiBmb3JjZSBzY2hlZHVsaW5nIGZvciByY3VfcXMoKSAqL1xuK1x0XHRyZXNjaGVkX2NwdSgwKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4re1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xuK1xuK1x0LypcbitcdCAqIENhbGxiYWNrcyBoYXZlIG5vIG11dHVhbCBvcmRlcmluZyBndWFyYW50ZWUgYW5kIHJjdV9iYXJyaWVyKCkgaGFzXG4rXHQgKiBhbHJlYWR5IGZsdXNoZWQgdXMsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLlxuK1x0ICovXG4rXHRsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoXHUwMDI2cmN1X2RlZmVyX2xpc3QpKSB7XG4rXHRcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xuK1xuK1x0XHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBoZWFkLVx1MDAzZWZ1bmMpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBjYWxsX3JjdV9kZWZlcihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4re1xuK1x0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbitcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgXHUwMDI2cmN1X2RlZmVyX2xpc3QpKVxuK1x0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZyY3VfZGVmZXJfaXcpO1xuK31cbitcbisvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICovXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2ZsdXNoKHZvaWQpXG4re1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm47XG4rXHRpcnFfd29ya19zeW5jKFx1MDAyNnJjdV9kZWZlcl9pdyk7XG4rfVxuK1xuIHZvaWQgcmN1X2JhcnJpZXIodm9pZClcbiB7XG4rXHQvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGZpcnN0LiAqL1xuK1x0cmN1X2RlZmVyX2ZsdXNoKCk7XG4gXHR3YWl0X3JjdV9ncChjYWxsX3JjdV9odXJyeSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpO1xuQEAgLTE1NywyOSArMjM0LDE1IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdSk7XG4gICovXG4gdm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4ge1xuLVx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cbi1cdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xuLVx0XHRpZiAoYXRvbWljX2luY19yZXR1cm4oXHUwMDI2ZG91YmxlZnJlZXMpIFx1MDAzYyA0KSB7XG4tXHRcdFx0cHJfZXJyKFwiJXMoKTogRG91YmxlLWZyZWVkIENCICVwLVx1MDAzZSVwUygpISEhICBcIiwgX19mdW5jX18sIGhlYWQsIGhlYWQtXHUwMDNlZnVuYyk7XG4tXHRcdFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xuLVx0XHR9XG4rXHRpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7XG4rXHRcdGNhbGxfcmN1X2RlZmVyKGhlYWQsIGZ1bmMpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRoZWFkLVx1MDAzZWZ1bmMgPSBmdW5jO1xuLVx0aGVhZC1cdTAwM2VuZXh0ID0gTlVMTDtcbi1cbi1cdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbi1cdCpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDtcbi1cdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcdTAwMjZoZWFkLVx1MDAzZW5leHQ7XG4tXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4rXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbitcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSk7XG4gXG4tXHRpZiAodW5saWtlbHkoaXNfaWRsZV90YXNrKGN1cnJlbnQpKSkge1xuLVx0XHQvKiBmb3JjZSBzY2hlZHVsaW5nIGZvciByY3VfcXMoKSAqL1xuLVx0XHRyZXNjaGVkX2NwdSgwKTtcbi1cdH1cbitcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuY1xuaW5kZXggNjJiZjJiZjU1MWY0OS4uN2QwYWU5NGJkZjM5ZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvdHJlZS5jXG4rKysgYi9rZXJuZWwvcmN1L3RyZWUuY1xuQEAgLTI0LDYgKzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9kZWJ1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbm1pLmhcdTAwM2VcbkBAIC0zMTQ4LDIxICszMTQ5LDI3IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2NiX292bGQoc3RydWN0IHJjdV9kYXRhICpyZHApXG4gXHRyYXdfc3Bpbl91bmxvY2tfcmN1X25vZGUocm5wKTtcbiB9XG4gXG4tc3RhdGljIHZvaWRcbi1fX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcbisvKlxuKyAqIFRoZSBjYWxsYmFjayBsaXN0IGlzIG9ubHkgZXZlciBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKGVucXVldWUsXG4rICogY2FsbGJhY2sgaW52b2NhdGlvbiwgZ3JhY2UtcGVyaW9kIHdvcmspLiAgQSBjYWxsX3JjdSgpIHdpdGggaW50ZXJydXB0cyBhbHJlYWR5XG4rICogZGlzYWJsZWQgbWF5IGludGVycnVwdCBvbmUgb2YgdGhvc2UsIHNvIF9fY2FsbF9yY3VfY29tbW9uKCkgZGVmZXJzOiB0aGVcbisgKiBjYWxsYmFjayBpcyBzdGFnZWQgb24gYSBwZXItQ1BVIGxsaXN0IHRoYXQgYW4gaXJxX3dvcmsgcmUtaXNzdWVzIG9uY2VcbisgKiBpbnRlcnJ1cHRzIGFyZSBvbi4gIE9ubHkgQ09ORklHX1JDVV9ERUZFUiBrZXJuZWxzIGNhbiBoaXQgdGhpcy5cbisgKi9cbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG4rXG4rLypcbisgKiBFbnF1ZXVlIEBoZWFkIG9uIHRoaXMgQ1BVJ3MgcmN1X3NlZ2NibGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpXG4rICogdG8gcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsXG4rICogY29uZGl0aW9uLiAgRWl0aGVyIGNhbGxlciBtYXkgaGF2ZSBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQuXG4rICovXG4rc3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4ge1xuIFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGJvb2wgbGF6eTtcbiBcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xuIFxuLVx0LyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi9cbi1cdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XG4tXG4tXHQvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFByb2JhYmxlIGRvdWJsZSBjYWxsX3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay5cbkBAIC0zMjA2LDYgKzMyMTMsODMgQEAgX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4gXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gfVxuIFxuKy8qXG4rICogUmUtaXNzdWUgZGVmZXJyZWQgY2FsbGJhY2tzLCBnb2luZyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdFxuKyAqIGRlZmVyIGFnYWluLiAgZGVmZXJfbG9jayBpcyBoZWxkIGFjcm9zcyBsbGlzdF9kZWxfYWxsKCkgYW5kIHRoZSByZS1pc3N1ZSBzb1xuKyAqIHRoZSBkcmFpbmVycyAtLSB0aGlzIENQVSdzIGlycV93b3JrLCByY3VfZGVmZXJfZmx1c2goKSBhbmRcbisgKiByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkgLS0gc2VyaWFsaXplIGFuZCBuZXZlciBsZWF2ZSBhIGNhbGxiYWNrIG9mZlxuKyAqIC1cdTAwM2VkZWZlcl9oZWFkIHlldCBub3Qgb24gYSBjYWxsYmFjayBsaXN0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuK3tcbitcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gY29udGFpbmVyX29mKGl3LCBzdHJ1Y3QgcmN1X2RhdGEsIGRlZmVyX3dvcmspO1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jaywgZmxhZ3MpO1xuK1x0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSkge1xuK1x0XHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbitcbitcdFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cdTAwM2VmdW5jLCBmYWxzZSk7XG4rXHR9XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jaywgZmxhZ3MpO1xuK31cbitcbisvKiBTdGFnZSBAaGVhZCBmb3IgdGhpcyBDUFUncyBpcnFfd29yayB3aGVuIGNhbGxfcmN1KCkgY2Fubm90IGVucXVldWUgbm93LiAqL1xuK3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbit7XG4rXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHRoaXNfY3B1X3B0cihcdTAwMjZyY3VfZGF0YSk7XG4rXG4rXHRoZWFkLVx1MDAzZWZ1bmMgPSBmdW5jO1xuK1x0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCBcdTAwMjZyZHAtXHUwMDNlZGVmZXJfaGVhZCkpXG4rXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl93b3JrKTtcbit9XG4rXG4rLypcbisgKiBSZWdpc3RlciBwZW5kaW5nIGRlZmVycmVkIGNhbGxiYWNrcyBpbnRvIHRoZSBjYWxsYmFjayBsaXN0cyBzbyBhIGZvbGxvd2luZ1xuKyAqIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICBUaGlzIHJ1bnMgYmVmb3JlIHJjdV9iYXJyaWVyKCkgc2NhbnMgdGhlXG4rICogbGlzdHMuICBBbiBvbmxpbmUgQ1BVJ3Mgb3duIGlycV93b3JrIHJlLWlzc3VlcyBpdHMgY2FsbGJhY2tzLCBzbyB3YWl0IGl0IG91dDtcbisgKiBhbiBvZmZsaW5lIENQVSdzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4sIHNvIGRyYWluIGl0cyBsaXN0IGRpcmVjdGx5XG4rICogb250byB0aGlzIENQVSBpbnN0ZWFkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxuK3tcbitcdGludCBjcHU7XG4rXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdHJldHVybjtcbitcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbitcdFx0c3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihcdTAwMjZyY3VfZGF0YSwgY3B1KTtcbitcbitcdFx0aWYgKGNwdV9vbmxpbmUoY3B1KSlcbitcdFx0XHRpcnFfd29ya19zeW5jKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl93b3JrKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHJjdV9kZWZlcl9kcmFpbihcdTAwMjZyZHAtXHUwMDNlZGVmZXJfd29yayk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkXG4rX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4re1xuK1x0LyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi9cbitcdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XG4rXG4rXHQvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuK1x0XHRjYWxsX3JjdV9kZWZlcihoZWFkLCBmdW5jKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXG4rXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuK1xuK1x0cmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYywgbGF6eV9pbik7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfUkNVX0xBWllcbiBzdGF0aWMgYm9vbCBlbmFibGVfcmN1X2xhenkgX19yZWFkX21vc3RseSA9ICFJU19FTkFCTEVEKENPTkZJR19SQ1VfTEFaWV9ERUZBVUxUX09GRik7XG4gbW9kdWxlX3BhcmFtKGVuYWJsZV9yY3VfbGF6eSwgYm9vbCwgMDQ0NCk7XG5AQCAtMzg5Niw4ICszOTgwLDEyIEBAIHZvaWQgcmN1X2JhcnJpZXIodm9pZClcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR1bnNpZ25lZCBsb25nIGdzZXE7XG4gXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcDtcbi1cdHVuc2lnbmVkIGxvbmcgcyA9IHJjdV9zZXFfc25hcChcdTAwMjZyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7XG4rXHR1bnNpZ25lZCBsb25nIHM7XG4rXG4rXHQvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAqL1xuK1x0cmN1X2RlZmVyX2ZsdXNoKCk7XG4gXG4rXHRzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnJjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTtcbiBcdHJjdV9iYXJyaWVyX3RyYWNlKFRQUyhcIkJlZ2luXCIpLCAtMSwgcyk7XG4gXG4gXHQvKiBUYWtlIG11dGV4IHRvIHNlcmlhbGl6ZSBjb25jdXJyZW50IHJjdV9iYXJyaWVyKCkgcmVxdWVzdHMuICovXG5AQCAtNDIzMSw2ICs0MzE5LDEwIEBAIHJjdV9ib290X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSlcbiBcdHJkcC1cdTAwM2VyY3Vfb25sX2dwX3N0YXRlID0gUkNVX0dQX0NMRUFORUQ7XG4gXHRyZHAtXHUwMDNlbGFzdF9zY2hlZF9jbG9jayA9IGppZmZpZXM7XG4gXHRyZHAtXHUwMDNlY3B1ID0gY3B1O1xuK1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKTtcbitcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jayk7XG4rXHQvKiBIYXJkIGlycV93b3JrIHNvIHRoZSByZS1pc3N1ZSBydW5zIHByb21wdGx5LiAqL1xuK1x0cmRwLVx1MDAzZWRlZmVyX3dvcmsgPSBJUlFfV09SS19JTklUX0hBUkQocmN1X2RlZmVyX2RyYWluKTtcbiBcdHJjdV9ib290X2luaXRfbm9jYl9wZXJjcHVfZGF0YShyZHApO1xuIH1cbiBcbkBAIC00NTI4LDYgKzQ2MjAsMTYgQEAgdm9pZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKGludCBjcHUpXG4gXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKFx1MDAyNnJjdV9kYXRhLCBjcHUpO1xuIFx0Ym9vbCBuZWVkd2FrZTtcbiBcbitcdC8qXG4rXHQgKiBDYWxsYmFja3MgdGhlIG91dGdvaW5nIENQVSBkZWZlcnJlZCBsYXRlIGluIHRoZSBvZmZsaW5lIHBhdGggKHBhc3QgdGhlXG4rXHQgKiBwb2ludCBpdHMgaXJxX3dvcmsgY2FuIHJ1bikgc2l0IG9uIC1cdTAwM2VkZWZlcl9oZWFkLCB3aGljaCB0aGUgLVx1MDAzZWNibGlzdFxuK1x0ICogbWlncmF0aW9uIGJlbG93IGRvZXMgbm90IGNvdmVyLiAgRHJhaW4gdGhlbSBoZXJlLCBiZWZvcmUgdGhlIGVhcmx5XG4rXHQgKiByZXR1cm5zOyB0aGUgcmUtaXNzdWUgbGFuZHMgb24gdGhpcyBDUFUuXG4rXHQgKi9cbitcdHJjdV9kZWZlcl9kcmFpbihcdTAwMjZyZHAtXHUwMDNlZGVmZXJfd29yayk7XG4rXHQvKiBMaWtld2lzZSBmb3IgdGhlIG91dGdvaW5nIENQVSdzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcy4gKi9cbitcdHNyY3Vfb2ZmbGluZV9kcmFpbihjcHUpO1xuK1xuIFx0aWYgKHJjdV9yZHBfaXNfb2ZmbG9hZGVkKHJkcCkpXG4gXHRcdHJldHVybjtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuaCBiL2tlcm5lbC9yY3UvdHJlZS5oXG5pbmRleCA5Yjg1ZWVhYTAwNzFhLi40MWMyYjIwZjBjODNlIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmhcbisrKyBiL2tlcm5lbC9yY3UvdHJlZS5oXG5AQCAtMjI5LDYgKzIyOSwxMSBAQCBzdHJ1Y3QgcmN1X2RhdGEge1xuIFx0c3RydWN0IHJjdV9oZWFkIGJhcnJpZXJfaGVhZDtcbiBcdGludCBleHBfd2F0Y2hpbmdfc25hcDtcdFx0LyogRG91YmxlLWNoZWNrIG5lZWQgZm9yIElQSS4gKi9cbiBcbitcdC8qIERlZmVycmFsIG9mIGFuIE5NSS9yZWVudHJhbnQgY2FsbF9yY3UoKTsgc2VlIF9fY2FsbF9yY3VfY29tbW9uKCkuICovXG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9oZWFkO1xuK1x0c3RydWN0IGlycV93b3JrIGRlZmVyX3dvcms7XG4rXHRyYXdfc3BpbmxvY2tfdCBkZWZlcl9sb2NrO1xuK1xuIFx0LyogNSkgQ2FsbGJhY2sgb2ZmbG9hZGluZy4gKi9cbiAjaWZkZWYgQ09ORklHX1JDVV9OT0NCX0NQVVxuIFx0c3RydWN0IHN3YWl0X3F1ZXVlX2hlYWQgbm9jYl9jYl93cTsgLyogRm9yIG5vY2Iga3RocmVhZHMgdG8gc2xlZXAgb24uICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNmVjZDkzYmUzMGY0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jXG5AQCAtMCwwICsxLDU4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBFeGVyY2lzZSByZS1lbnRyeSBpbnRvIGNhbGxfc3JjdSgpIGZyb20gQlBGOyBzZWUgcHJvZ3MvcmN1X3JlZW50cnkuYy4gKi9cbisjZGVmaW5lIF9HTlVfU09VUkNFXG4rI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcInJjdV9yZWVudHJ5LnNrZWwuaFwiXG4rXG4rc3RhdGljIGludCBzeXNfcGlkZmRfb3BlbihwaWRfdCBwaWQsIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRyZXR1cm4gc3lzY2FsbChfX05SX3BpZGZkX29wZW4sIHBpZCwgZmxhZ3MpO1xuK31cbitcbit2b2lkIHRlc3RfcmN1X3JlZW50cnkodm9pZClcbit7XG4rXHRzdHJ1Y3QgcmN1X3JlZW50cnkgKnNrZWw7XG4rXHRpbnQgZXJyLCBwaWRmZCA9IC0xLCBtYXBfZmQ7XG4rXHRfX3U2NCB2YWwgPSAxO1xuK1x0Y3B1X3NldF90IHNldDtcbitcbitcdHNrZWwgPSByY3VfcmVlbnRyeV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSByY3VfcmVlbnRyeV9fYXR0YWNoKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNrZWxfYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEtlZXAgdGhlIHJlLWVudHJ5IG9uIGEgc2luZ2xlIENQVS4gKi9cbitcdENQVV9aRVJPKFx1MDAyNnNldCk7XG4rXHRDUFVfU0VUKDAsIFx1MDAyNnNldCk7XG4rXHRpZiAoc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksIFx1MDAyNnNldCkpXG4rXHRcdHBlcnJvcihcInNjaGVkX3NldGFmZmluaXR5XCIpO1xuK1xuK1x0cGlkZmQgPSBzeXNfcGlkZmRfb3BlbihnZXRwaWQoKSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShwaWRmZCwgMCwgXCJwaWRmZF9vcGVuXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy50YXNrX3N0Zyk7XG4rXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgXHUwMDI2cGlkZmQsIFx1MDAyNnZhbCwgQlBGX05PRVhJU1QpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJvb3RfY3JlYXRlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEFybSB0aGUgaGFuZGxlciBmb3IgdGhpcyB0aHJlYWQsIHRoZW4gdHJpZ2dlciBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IHN5c2NhbGwoX19OUl9nZXR0aWQpO1xuK1x0ZXJyID0gYnBmX21hcF9kZWxldGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkKTtcbitcdEFTU0VSVF9PSyhlcnIsIFwiYm9vdF9kZWxldGVcIik7XG4rXG4rXHQvKiBPbmx5IFRyZWUgU1JDVSBlbnF1ZXVlcyB2aWEgcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKCk7IHNraXAgZWxzZXdoZXJlLiAqL1xuK1x0aWYgKCFza2VsLVx1MDAzZWJzcy1cdTAwM2VoaXRzKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVlbnRlcmVkLCAxLCBcInJlZW50cnlfZGVmZXJyZWRcIik7XG4rb3V0OlxuK1x0aWYgKHBpZGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UocGlkZmQpO1xuK1x0cmN1X3JlZW50cnlfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kOTJhOTI3ZmY1MWMwXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuY1xuQEAgLTAsMCArMSw0NSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBSZS1lbnRlciBjYWxsX3NyY3UoKSBmcm9tIGEgQlBGIHByb2dyYW0uICBmZW50cnkgb24gcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKClcbisgKiBmaXJlcyBpbnNpZGUgY2FsbF9zcmN1KCkncyBlbnF1ZXVlIChyZWFjaGVkIGZyb20gc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKVxuKyAqIHdpdGggdGhlIHNyY3VfZGF0YSAtXHUwMDNlbG9jayBoZWxkKTsgdGhlIGhhbmRsZXIgdGhlbiBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpXG4rICogLS0gaXRzZWxmIGNhbGxfc3JjdSgpIG9uIHJjdV90YXNrc190cmFjZV9zcmN1X3N0cnVjdCAtLSByZS1lbnRlcmluZyB0aGUgc2FtZVxuKyAqIHNyY3VfZGF0YSBvbiB0aGUgc2FtZSBDUFUuXG4rICovXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfVEFTS19TVE9SQUdFKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbit9IHRhc2tfc3RnIFNFQyhcIi5tYXBzXCIpO1xuK1xuK2ludCB0YXJnZXRfcGlkO1xuK2ludCBoaXRzO1xuK2ludCByZWVudGVyZWQ7XG4rXG4rU0VDKFwiZmVudHJ5L3JjdV9zZWdjYmxpc3RfZW5xdWV1ZVwiKVxuK2ludCBCUEZfUFJPRyhyZWVudGVyKVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyO1xuK1xuK1x0aWYgKHJlZW50ZXJlZCB8fCAhdGFyZ2V0X3BpZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRjdXIgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdGlmICghY3VyIHx8IGN1ci1cdTAwM2VwaWQgIT0gdGFyZ2V0X3BpZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBSZS1lbnRlciB2aWEgYSB0YXNrLXN0b3JhZ2UgZGVsZXRlLCB3aGljaCBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqL1xuK1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2aGl0cywgMSk7XG4rXHRicGZfdGFza19zdG9yYWdlX2dldChcdTAwMjZ0YXNrX3N0ZywgY3VyLCAwLCBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpO1xuK1x0YnBmX3Rhc2tfc3RvcmFnZV9kZWxldGUoXHUwMDI2dGFza19zdGcsIGN1cik7XG4rXG4rXHRyZWVudGVyZWQgPSAxO1xuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MzMuMDQ1MjEwMjg2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc2NzI5MjI2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSQ1UgRGVmZXJyYWwgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFJDVSBwYXRjaC4gSXQncyBtYWtpbmcgY2hhbmdlcyB0byBTUkNVIGFuZCB0aGUgZ2VuZXJhbCBSQ1UgZGVmZXJyYWwgbWVjaGFuaXNtcywgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgQ09ORklHX1JDVV9ERUZFUmAuIFRoaXMgbmV3IGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBOTUksIEtQUk9CRVMsIHRoZSBmdW5jdGlvbiB0cmFjZXIsIG9yIHRyYWNlcG9pbnRzLiBTZWVtcyBsaWtlIHRoZXkncmUgYWRkaW5nIGRlZmVycmFsIGZvciBgY2FsbF9yY3UoKWAgYW5kIGBjYWxsX3NyY3UoKWAgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgdG8gYXZvaWQgY29ycnVwdGluZyBjYWxsYmFjayBsaXN0cyBkdXJpbmcgbWFuaXB1bGF0aW9uLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIGdvb2QgY2h1bmsgb2YgUkNVIGNvZGUg4oCTIGBzcmN1dGlueS5jYCwgYHNyY3V0cmVlLmNgLCBgdGlueS5jYCwgYHRyZWUuY2AsIGFuZCBldmVuIHRoZSB0b3J0dXJlIHRlc3QuIFBsdXMsIHRoZXkndmUgYWRkZWQgYSBuZXcgQlBGIHNlbGZ0ZXN0LCBgcmN1X3JlZW50cnkuY2AsIHdoaWNoIGlzIGEgZ29vZCBzaWduIG9mIHRob3JvdWdobmVzcy5cblxuQWxyaWdodCwgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgY2FuIHNlZSBgQ09ORklHX1JDVV9ERUZFUmAgaXMgYSBjb3JlIGtlcm5lbCBtb2RpZmljYXRpb24uIFByZXR0eSByZWFjaGFibGUgdG9vLCBjb25zaWRlcmluZyBob3cgaGVhdmlseSB1c2VkIGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgIGFyZS4gVGhlIGRlZmVycmFsIGxvZ2ljIGl0c2VsZiBraWNrcyBpbiB3aGVuIGBzaG91bGRfcmN1X2RlZmVyKClgIGlzIHRydWU7IGluIG90aGVyIHdvcmRzLCB3aGVuIGBpcnFzX2Rpc2FibGVkKClgIGFuZCBgcmN1X3NjaGVkdWxlcl9hY3RpdmUgIT0gUkNVX1NDSEVEVUxFUl9JTkFDVElWRWAuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEkndmUgZ290IGEgcHJlbGltaW5hcnkgbGlzdDogYHNyY3VfZGVmZXJfZHJhaW5gLCBgcmN1X2RlZmVyX2RyYWluYCwgYGNhbGxfc3JjdWAsIGBjYWxsX3JjdWAsIGBzcmN1X2JhcnJpZXJgLCBgcmN1X2JhcnJpZXJgLCBgc3JjdV9vZmZsaW5lX2RyYWluYCwgYW5kIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYC4gQnV0IHdhaXQsIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIHN1cGVyIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBnZXQgYSBtb3JlIGJhbGFuY2VkIHRlc3QgZGlzdHJpYnV0aW9uLiBUaGF0IHJ1bGVzIG91dCBgY2FsbF9yY3VgIGFuZCBgY2FsbF9zcmN1YCwgZXZlbiB0aG91Z2ggdGhleSBhcmUgdGVtcHRpbmcgdGFyZ2V0cy4gSSdsbCBuZWVkIHRvIHJlLWV2YWx1YXRlIHdoYXQgaXMgYWN0dWFsbHkgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldC5cblxuTGV0J3MgbG9vayBhdCBgc3JjdV9kZWZlcl9kcmFpbmAgYW5kIGByY3VfZGVmZXJfZHJhaW5gLCBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSdyZSBzdGF0aWMgb3IgZXhwb3J0ZWQuIFR1cm5zIG91dCBgc3JjdV9kZWZlcl9kcmFpbmAgaXMgZXhwb3J0ZWQgaW4gYHNyY3V0aW55LmNgIGJ1dCBzdGF0aWMgaW4gYHNyY3V0cmVlLmNgLCB3aGlsZSBgcmN1X2RlZmVyX2RyYWluYCBpcyBzdGF0aWMgaW4gYm90aCBgdGlueS5jYCBhbmQgYHRyZWUuY2AuIEhtbSwgYSBzbGlnaHQgaW5jb25zaXN0ZW5jeS5cblxuTm93LCB3aGF0IGFib3V0IHRoZSBvdGhlciBmdW5jdGlvbnMgb24gbXkgbGlzdD8gTGV0J3MgY2hlY2sgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgYW5kIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYC4gTmVpdGhlciBvZiB0aGVzZSBpcyBzdGF0aWMuIFRoaXMgbG9va3MgcHJvbWlzaW5nLiBJIHdpbGwgY29uZmlybSB0aGF0IGBzcmN1X29mZmxpbmVfZHJhaW5gIGFuZCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgYXJlIHRoZSByaWdodCB0YXJnZXQgZnVuY3Rpb25zIHdpdGggZ3JlcHBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMzMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo0Mi44MTI1MDU3ODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNDI1NDkwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpIHNyY3Vfb2ZmbGluZV9kcmFpblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcmN1L3JjdS5oPTU4Mj1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JjdV9kZWZlcih2b2lkKVxcbi0tXFxua2VybmVsL3JjdS9yY3UuaC01OTAtLyogRHJhaW4gYW4gb3V0Z29pbmcgQ1BVJ3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovXFxua2VybmVsL3JjdS9yY3UuaDo1OTE6dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSk7XFxua2VybmVsL3JjdS9yY3UuaC01OTItXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTUxNT1zdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTU0Mi0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTU0Mzp2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTQ0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDUuMzI2NzY2Mjk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NDAyMDU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgbWlncmF0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBsYXJnZXIgUkNVIHRyZWUgY29udGV4dC4gVGhlIG5hbWUgYWxvbmUgdGVsbHMgbWUgaXQncyBsaWtlbHkgZGVhbGluZyB3aXRoIGNhbGxiYWNrIG1pZ3JhdGlvbiBkdXJpbmcgUkNVIHRyZWUgbW9kaWZpY2F0aW9ucywgd2hpY2ggaXMgYSBjcml0aWNhbCBhcmVhIGZvciBlbnN1cmluZyBkYXRhIGNvbnNpc3RlbmN5IGFuZCBhdm9pZGluZyByYWNlcywgZXNwZWNpYWxseSB1bmRlciBoZWF2eSBsb2FkLiBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlIGltcGxlbWVudGF0aW9uIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIFJDVSBndWFyYW50ZWVzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBob3cgZ3JhY2UgcGVyaW9kcyBhcmUgbWFuYWdlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjYWxsYmFja3MgYmVpbmcgbW92ZWQuIEFyZSB3ZSB0YWtpbmcgaW50byBhY2NvdW50IHBvdGVudGlhbCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgdG8gdGhlIHRyZWUgd2hpbGUgbWlncmF0aW5nPyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBsb2NrcyBvciBhdG9taWMgb3BlcmF0aW9ucyBpbnZvbHZlZCBhbmQgc2VlIGhvdyB0aGV5IGludGVycGxheSB3aXRoIHRoZSBncmFjZSBwZXJpb2QgbG9naWMgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGluZGVlZCBwcmV2ZW50aW5nIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBwcmVzZXJ2aW5nIHRoZSBzZW1hbnRpY3Mgb2YgUkNVJ3MgcXVpZXNjZW50IHN0YXRlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlIGNhbGxiYWNrcyB0aGVtc2VsdmVzIGFyZSBiZWluZyBoYW5kbGVkIGF0b21pY2FsbHksIGFuZCBpZiBub3QsIGhvdyB0aGUgc3lzdGVtIGlzIG1hbmFnaW5nIHRoYXQgY29tcGxleGl0eS4gSSdsbCBmb2N1cyBvbiBwb3RlbnRpYWwgZWRnZSBjYXNlcywgc3VjaCBhcyByZWN1cnNpdmUgY2FsbGJhY2sgaW52b2NhdGlvbiBvciB0aGUgaGFuZGxpbmcgb2YgZXhwZWRpdGVkIGdyYWNlIHBlcmlvZHMgZHVyaW5nIGEgbWlncmF0aW9uLiBJJ20gYWxzbyBnb2luZyB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbmVmZmljaWVuY2llcyBoZXJlLCBzdWNoIGFzIHVubmVjZXNzYXJ5IGxvY2tpbmcgb3IgdW5uZWNlc3NhcnkgYmFycmllcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODk5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDkuMDEwNzg4ODE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTQyOTgzMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcmN1dHJlZS5oPTExMD1pbnQgcmN1dHJlZV9vZmZsaW5lX2NwdSh1bnNpZ25lZCBpbnQgY3B1KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oLTExNi1cXG5pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaDoxMTc6dm9pZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKGludCBjcHUpO1xcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oLTExOC1cXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTQ1NjA9dm9pZCByY3V0cmVlX3JlcG9ydF9jcHVfZGVhZCh2b2lkKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDYxNC0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0NjE1OnZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo1MS41MjUwOTI3ODdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE2NDQ0MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipCYXJyaWVycywgQmFycmllcnMgRXZlcnl3aGVyZSEqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGJhcnJpZXJzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBhbmQgU1JDVSAoU2xlZXBhYmxlIFJDVSkgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIFdoZW4gSSdtIHdvcmtpbmcgd2l0aCB0aGVzZSwgdGhlIHF1ZXN0aW9uIG9mIHN5bmNocm9uaXphdGlvbiBpcyBhbHdheXMgcHJlc2VudCwgYnV0IHRoZSBkZXRhaWxzIGNoYW5nZSwgZGVwZW5kaW5nIG9uIHdoaWNoIFJDVSBmbGF2b3IgSSdtIGRlYWxpbmcgd2l0aC5cblxuU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIHNvbGlkaWZ5IHRoZSBjb25uZWN0aW9uIHdpdGggYHJjdV9iYXJyaWVyYCBhbmQgYHNyY3VfYmFycmllcmAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHRoYXQgdXBkYXRlcyBwZXJmb3JtZWQgd2l0aGluIGFuIFJDVSBjcml0aWNhbCBzZWN0aW9uIGJlY29tZSB2aXNpYmxlIHRvIHJlYWRlcnMgKmFmdGVyKiB0aGUgZ3JhY2UgcGVyaW9kLiBVbmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoZWlyIGltcGxlbWVudGF0aW9ucywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1vZGVsIChsaWtlLCBjb25zaWRlcmluZyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyksIGlzIGtleS5cblxuTXkgZm9jdXMgaXMgdG8gZW5zdXJlIHRoYXQgSSd2ZSBhY2NvdW50ZWQgZm9yIGV2ZXJ5IHBvc3NpYmxlIHNjZW5hcmlvIHdoZXJlIGRhdGEgcmFjZXMgYXJlIGF2b2lkZWQgb3IgaGFuZGxlZCBjb3JyZWN0bHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHdoZW4gdXNpbmcgdGhlc2UgcGFydGljdWxhciBiYXJyaWVyIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0MDgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo1NC45NDE1MzkwODRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MjYwNzkzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpIHJjdV9iYXJyaWVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcmN1cGRhdGUuaD01MT12b2lkIGNhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYyk7XFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjUyOnZvaWQgcmN1X2JhcnJpZXJfdGFza3Modm9pZCk7XFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTUzLXZvaWQgc3luY2hyb25pemVfcmN1KHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmg9MzY9dm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oLTM3LVxcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oOjM4OnZvaWQgcmN1X2JhcnJpZXIodm9pZCk7XFxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmgtMzktdm9pZCByY3VfbW9tZW50YXJ5X2Vxcyh2b2lkKTtcXG4tLVxcbmtlcm5lbC9yY3UvdGFza3MuaD0xMjIyPUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV90YXNrcyk7XFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIyOS0gKi9cXG5rZXJuZWwvcmN1L3Rhc2tzLmg6MTIzMDp2b2lkIHJjdV9iYXJyaWVyX3Rhc2tzKHZvaWQpXFxua2VybmVsL3JjdS90YXNrcy5oLTEyMzEte1xcbi0tXFxua2VybmVsL3JjdS90aW55LmM9MTEzPXN0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxcbi0tXFxua2VybmVsL3JjdS90aW55LmMtMTE5LVxcbmtlcm5lbC9yY3UvdGlueS5jOjEyMDp2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXFxua2VybmVsL3JjdS90aW55LmMtMTIxLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTM5NTE9c3RhdGljIHZvaWQgcmN1X2JhcnJpZXJfaGFuZGxlcih2b2lkICpjcHVfaW4pXFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0zOTc2LSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjM5Nzc6dm9pZCByY3VfYmFycmllcih2b2lkKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM5Nzgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo1Ny4zOTQxNTM0ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg3Mzk3MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlNSQ1UgQmFycmllciBNdXNpbmdzKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgc3JjdV9iYXJyaWVyYC4uLiB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uIHdpdGggdGhhdCBiZWFzdD8gV2UndmUgZ290IG91ciBncmFjZSBwZXJpb2QgbG9naWMsIHRoZSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMsIGFuZCB0aGVuIHRoaXMgYmFycmllciBmdW5jdGlvbi4gSSdtIHRyeWluZyB0byBtZW50YWxseSBtYXAgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIHVzYWdlLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGFuZCB3aGF0IGd1YXJhbnRlZXMgaXQgKnRydWx5KiBwcm92aWRlcy5cblxuSSdtIHBpY3R1cmluZyBob3cgYHNyY3VfYmFycmllcmAgZW5zdXJlcyB0aGF0IGFsbCBleGlzdGluZyByZWFkZXJzIGhhdmUgZXhpdGVkIHRoZWlyIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBiZWZvcmUgdGhlIGZ1bmN0aW9uIHJldHVybnMuIFRoYXQgaW1wbGllcyBhIHN5bmNocm9uaXphdGlvbiBwb2ludCwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSB0aGUgY3J1eC4gSXMgaXQgYSBmdWxsIG1lbW9yeSBiYXJyaWVyPyBJcyB0aGVyZSBhbnkgc3BlY2lmaWMgb3JkZXJpbmcgZW5mb3JjZWQ/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgQ1BVIGNhY2hlIGNvaGVyZW5jeSBhdCBhbGwsIG9yIGlzIHRoYXQgaGFuZGxlZCBpbXBsaWNpdGx5IGJ5IHRoZSBSQ1UgaW5mcmFzdHJ1Y3R1cmUgaXRzZWxmP1xuXG5JJ20gZm9jdXNpbmcgb24gdGhlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMsIHRoaW5raW5nIGFib3V0IGhvdyBpdCBwcmV2ZW50cyBkYXRhIHJhY2VzIGJldHdlZW4gcmVhZGVycyBhbmQgd3JpdGVycy4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSdzIGFueSByb29tIGZvciBvcHRpbWl6YXRpb24gdGhlcmUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIG92ZXJhbGwgUkNVIGludGVncml0eS4gQXJlIHRoZXJlIHBvdGVudGlhbCBwaXRmYWxscyBpbiBob3cgaXQgaGFuZGxlcyBuZXN0ZWQgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG9yIHBvdGVudGlhbCBmb3IgYW55IGVkZ2UgY2FzZSBzY2VuYXJpb3MgdGhhdCBjb3VsZCBzdGlsbCBsZWFkIHRvIGlzc3Vlcz8gSSdtIGFzc3VtaW5nIHRoYXQgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIGhhdmUgdGhvdWdodCBvZiB0aGVzZSB0aGluZ3MsIGJ1dCBJIGxpa2UgdG8gcmV2aWV3IHRoZSBjb2RlIHRvIGJlIHN1cmUsIGluIG15IG93biBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTExMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MDAuOTgxNTUzNjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzEzMjgzMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKSBzcmN1X2JhcnJpZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zcmN1dGlueS5oPTEzNT1zdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmgtMTM5LVxcbmluY2x1ZGUvbGludXgvc3JjdXRpbnkuaDoxNDA6dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xcbmluY2x1ZGUvbGludXgvc3JjdXRpbnkuaC0xNDEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmg9MjQyPXZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xcbmluY2x1ZGUvbGludXgvc3JjdXRyZWUuaDoyNDM6dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xcbmluY2x1ZGUvbGludXgvc3JjdXRyZWUuaC0yNDQtdm9pZCBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jPTI5Nz1FWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yOTktLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcywgdGhlbiB3YWl0IGZvciBhbGwgaW4tZmxpZ2h0IG9uZXMuICovXFxua2VybmVsL3JjdS9zcmN1dGlueS5jOjMwMDp2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMzAxLXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xNzgyPXN0YXRpYyB2b2lkIHNyY3VfYmFycmllcl9vbmVfY3B1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3Qgc3JjdV9kYXRhICpzZHApXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTc5OS0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTgwMDp2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTgwMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjAzLjMxMjg5MDgyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE5NjYxMzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgYSBOZXcgUkNVIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBDT05GSUdfUkNVX0RFRkVSYC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBzb3VyY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBuZXcgZmxhZyAqbWVhbnMqIGZvciB0aGUgUkNVIGltcGxlbWVudGF0aW9uLiBMZXQncyBnbyBzdHJhaWdodCB0byB0aGUgYGtlcm5lbC9yY3UvS2NvbmZpZ2AgZmlsZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgaGVscCB0ZXh0LCBhbmQgd2hlcmUgdGhpcyBvcHRpb24gZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgUkNVIGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gSXMgdGhpcyByZWxhdGVkIHRvIGdyYWNlIHBlcmlvZHMsIGV4cGVkaXRlZCBSQ1UsIG9yIGEgc3BlY2lmaWMgZmxhdm9yIG9mIGRlZmVycmVkIHJlY2xhbWF0aW9uPyBJcyBpdCBhIGNvbXBpbGUtdGltZSBvcHRpbWl6YXRpb24sIG9yIHNvbWV0aGluZyB0aGF0IGFsdGVycyBydW50aW1lIGJlaGF2aW9yIHNpZ25pZmljYW50bHk/IFRoZSBLY29uZmlnIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGJ1aWxkaW5nIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgbmV3IHBpZWNlIG9mIHRoZSBSQ1UgcHV6emxlLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIGl0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBvZiB0aGUgUkNVIHN1YnN5c3RlbS4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg4NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjA2LjkzMjU1NDU0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NDE1Njc3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkNVX0RFRkVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9yY3UvS2NvbmZpZz0xNzU9Y29uZmlnIFJDVV9ORUVEX1NFR0NCTElTVFxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnLTE3OS0jIGNhbGxfc3JjdSgpIGNhbiBiZSBpbnZva2VkIHdoaWxlIGEgY2FsbGJhY2stbGlzdCBvcGVyYXRpb24gaXMgaW4gZmxpZ2h0Llxcbmtlcm5lbC9yY3UvS2NvbmZpZzoxODA6Y29uZmlnIFJDVV9ERUZFUlxcbmtlcm5lbC9yY3UvS2NvbmZpZy0xODEtXFx0ZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MDguMzc2NzE1OTg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzOTQ1OTY0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUkNVX0RFRkVSIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gYENPTkZJR19SQ1VfREVGRVJgIGlzIGF1dG9tYXRpY2FsbHkgc2V0IGJhc2VkIG9uIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgaXQncyBkZWZpbmVkIGFzIGEgYm9vbGVhbiBleHByZXNzaW9uOiBgZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNgLiBSaWdodCwgc28gdGhpcyBpc24ndCBzb21ldGhpbmcgSSBjYW4gZXhwbGljaXRseSBlbmFibGUgaW4gYSB1c2VyLWZhY2luZyBgLmNvbmZpZ2AgZmlsZSBkaXJlY3RseSwgYXMgaXQgaGFzIG5vIHByb21wdC4gSXQncyBkZXRlcm1pbmVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBgSEFWRV9OTUlgLCBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBvciBgVFJBQ0VQT0lOVFNgLiBcblxuU2luY2UgYEhBVkVfTk1JYCBpcyBwcmV0dHkgY29tbW9uIG9uIHg4NiwganVzdCBsaXN0aW5nIGBSQ1VfREVGRVJgIGlzIHJlZHVuZGFudC4gSSBjYW4gZW5hYmxlIGBLUFJPQkVTYCwgYEZVTkNUSU9OX1RSQUNFUmAsIG9yIGBUUkFDRVBPSU5UU2AgdG8gZW5zdXJlIGBSQ1VfREVGRVJgIGdldHMgZW5hYmxlZC5cblxuV2FpdCBhIHNlY29uZOKApiB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBsaXN0IGl0ZW1zICp3aXRob3V0KiB0aGUgYENPTkZJR19gIHByZWZpeCBpbiB0aGUgb3V0cHV0IGFycmF5LiBJZiBpdCdzIGBkZWZfYm9vbCBIQVZFX05NSSB8fCBLUFJPQkVTIHx8IEZVTkNUSU9OX1RSQUNFUiB8fCBUUkFDRVBPSU5UU2AsIEknbSBnb2luZyB0byBsaXN0IGBLUFJPQkVTYCBvciBgRlVOQ1RJT05fVFJBQ0VSYCB0byBiZSBzYWZlIGFuZCBhdm9pZCBpc3N1ZXMgaWYgYEhBVkVfTk1JYCBpcyBhbHJlYWR5IGVuYWJsZWQuIFRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSByZXF1aXJlZCBvdXRwdXQuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgYHJjdV90b3J0dXJlX25taV9pbml0YCB3aGljaCBpcyBpbiBga2VybmVsL3JjdS9yY3V0b3J0dXJlLmNgIHRvIHNlZSBpZiBpdCBicmluZ3MgaW4gYENPTkZJR19QRVJGX0VWRU5UU2AuIE9rYXksIGl0IHVzZXMgYENPTkZJR19QRVJGX0VWRU5UU2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjY5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjEzLjc3MTMxNTgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI4NTE2NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJjdV90b3J0dXJlX25taV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9yY3UvcmN1dG9ydHVyZS5jPTI2OTY9c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4tLVxcbmtlcm5lbC9yY3UvcmN1dG9ydHVyZS5jLTI3MDctXFxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmM6MjcwODpzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKVxcbmtlcm5lbC9yY3UvcmN1dG9ydHVyZS5jLTI3MDkte1xcbi0tXFxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmM9MjcyOT1zdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2xlYW51cCh2b2lkKVxcbi0tXFxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmMtMjc0NC0jZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXFxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmM6Mjc0NTpzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKSB7IH1cXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYy0yNzQ2LXN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpIHsgfVxcbi0tXFxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmM9NDc0ND1yY3VfdG9ydHVyZV9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYy00ODkyLVxcdC8qIEFybSB0aGUgcGVyLUNQVSBwZXJmIGNvdW50ZXJzIHRoYXQgZHJpdmUgLVxcdTAwM2VjYWxsKCkgZnJvbSBOTUkuICovXFxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmM6NDg5MzpcXHRyY3VfdG9ydHVyZV9ubWlfaW5pdCgpO1xcbmtlcm5lbC9yY3UvcmN1dG9ydHVyZS5jLTQ4OTQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yZWFscmVhZGVyczsgaSsrKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjE1LjI5OTgzOTIxNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc0MTUyNDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFJDVSBUb3J0dXJlIFRlc3RpbmcgYW5kIERlZmVycmFsIExvZ2ljKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSB0ZXN0IHRoZSBOb24tTWFza2FibGUgSW50ZXJydXB0IChOTUkpIHBhdGggaW4gYHJjdXRvcnR1cmVgLiBJdCdzIGNsZWFyIHRoYXQgSSBuZWVkIGBQRVJGX0VWRU5UU2AgZW5hYmxlZCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBgUkNVX1RPUlRVUkVfVEVTVGAgY29uZmlndXJhdGlvbiBvcHRpb24uIEhvd2V2ZXIsIGByY3V0b3J0dXJlYCBpdHNlbGYgaXMgYSB0ZXN0IG1vZHVsZTsgSSBkb24ndCBuZWNlc3NhcmlseSBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgKml0KiBkaXJlY3RseS4gVGhlIG1vcmUgdmFsdWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLCBJIHRoaW5rLCBpcyB0aGUgY29yZSBSQ1UgZGVmZXJyYWwgbG9naWMuIFRoYXTigJlzIHdoZXJlIHRoZSByZWFsIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd2lsbCBiZS5cblxuVGhlIGRlZmVycmFsIGxvZ2ljIGlzLCBvZiBjb3Vyc2UsIGNlbnRyYWwgdG8gYGNhbGxfcmN1YCBhbmQgYGNhbGxfc3JjdWAsIGFuZCB0aG9zZSBhcmUgY2FsbGVkICpldmVyeXdoZXJlKi4gVGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5ICpoYW5kbGUqIHRoZSBkZWZlcnJlZCBjYWxsYmFja3MgYXJlIHRoaW5ncyBsaWtlOiBgc3JjdV9kZWZlcl9kcmFpbmAsIGByY3VfZGVmZXJfZHJhaW5gLCBgc3JjdV9vZmZsaW5lX2RyYWluYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBgcmN1X2JhcnJpZXJgLCBhbmQgYHNyY3VfYmFycmllcmAuXG5cbldhaXQgYSBtaW51dGUuLi4gSSdtIG5vdGljaW5nIHNvbWV0aGluZy4gYHJjdV9kZWZlcl9kcmFpbmAgYW5kIGBzcmN1X2RlZmVyX2RyYWluYCBhcmUgKnN0YXRpYyogd2l0aGluIGB0cmVlLmNgIGFuZCBgc3JjdXRyZWUuY2AuIFRoYXTigJlzIHNpZ25pZmljYW50LiBIbW0sICpzcmN1X2RlZmVyX2RyYWluKiBpcyBleHBvcnRlZCBmcm9tIGBzcmN1dGlueS5jYCwgYnV0IGl0J3Mgc3RhdGljIGluIGBzcmN1dHJlZS5jYC4gIFNpbmNlIGBzcmN1dHJlZS5jYCBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgU01QIHN5c3RlbXMsIGl0IG1lYW5zIGBzcmN1X2RlZmVyX2RyYWluYCBpcyBzdGF0aWMgaW4gdGhlIG1vc3QgY29tbW9uIGNhc2UuIFRoYXQgaW1wbGllcyBsaW1pdGVkIGFjY2VzcyBmb3IgZnV6emluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGBzcmN1X29mZmxpbmVfZHJhaW5gIGlzIGV4cG9ydGVkIGFzIHdlbGwuIFRoaXMgbWlnaHQgaW5mbHVlbmNlIG15IGZ1enppbmcgc3RyYXRlZ3kgYW5kIHRlc3QgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMyNCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNToyMC44NzM5OTM1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNDAwOTQxMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qc3JjdV9vZmZsaW5lX2RyYWluXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNToyMi43OTgwMDk1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ3MDgzMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBTeW5jaHJvbml6YXRpb24gUHJpbWl0aXZlcyoqXG5cbkFscmlnaHQsIHNvIHRoZSB0aGluZyBpc24ndCAqc3RhdGljYWxseSogZGVmaW5lZCwgYnV0IGl0J3Mgbm90IHNpbXBseSBhbiBpbnRlcm5hbCwgc3RhdGljIGNvbnN0cnVjdCBlaXRoZXIuIEludHJpZ3VpbmcuIExldCdzIGRpZyBkZWVwZXI6IHNwZWNpZmljYWxseSwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGlzbid0IHN0YXRpYywgbWVhbmluZyBpdCdzIHBvdGVudGlhbGx5IHZpc2libGUgYmV5b25kIGl0cyBpbW1lZGlhdGUgc2NvcGUuIFRoYXQncyBhIGtleSBkZXRhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBOb3csIGF0IGxlYXN0IEkgKmRvKiBrbm93IHRoYXQgYHJjdV9iYXJyaWVyYCBhbmQgYHNyY3VfYmFycmllcmAgYXJlLCBpbiBmYWN0LCBleHBvcnRlZC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdCwgcHJvdmlkaW5nIHNvbWUgY29uY3JldGUgcG9pbnRzIG9mIHJlZmVyZW5jZS5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHZlcmlmeSB0aGUgZXhwb3J0IHN0YXR1cyBvZiBgcmN1X2JhcnJpZXJgIGFuZCBgc3JjdV9iYXJyaWVyYCBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgYmVpbmcgdXNlZC4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZWlyIGV4cG9ydCBzdGF0dXMgYW5kIHdoYXQgdGhhdCBpbXBsaWVzIGluIHRlcm1zIG9mIGtlcm5lbCBkZXNpZ24gYW5kIGRlcGVuZGVuY3kuIEtub3dpbmcgdGhlaXIgaW50ZXJmYWNlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5J3JlIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDM1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MjYuMTQ1MDk1OTE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk5NDE0Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnJjdV9iYXJyaWVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0zMDA9dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMzA1LX1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MzA2OkVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7XFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTMwNy1cXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xODAwPXZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE4NDItfVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxODQzOkVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7XFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE4NDQtXFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTIzMD12b2lkIHJjdV9iYXJyaWVyX3Rhc2tzKHZvaWQpXFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIzMy19XFxua2VybmVsL3JjdS90YXNrcy5oOjEyMzQ6RVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXJfdGFza3MpO1xcbmtlcm5lbC9yY3UvdGFza3MuaC0xMjM1LVxcbi0tXFxua2VybmVsL3JjdS90aW55LmM9MTIwPXZvaWQgcmN1X2JhcnJpZXIodm9pZClcXG4tLVxcbmtlcm5lbC9yY3UvdGlueS5jLTEyNS19XFxua2VybmVsL3JjdS90aW55LmM6MTI2OkVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpO1xcbmtlcm5lbC9yY3UvdGlueS5jLTEyNy1cXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTM5Nzc9dm9pZCByY3VfYmFycmllcih2b2lkKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDA3NC19XFxua2VybmVsL3JjdS90cmVlLmM6NDA3NTpFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcik7XFxua2VybmVsL3JjdS90cmVlLmMtNDA3Ni1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTM0Mz12b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMzQ3LX1cXG5tbS9zbGFiX2NvbW1vbi5jOjEzNDg6RVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTEzNDktXFxubW0vc2xhYl9jb21tb24uYz0xMzUwPXZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMzU0LX1cXG5tbS9zbGFiX2NvbW1vbi5jOjEzNTU6RVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTEzNTYtXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTIxNzc9dm9pZCBrdmZyZWVfcmN1X2JhcnJpZXIodm9pZClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjE4MS19XFxubW0vc2xhYl9jb21tb24uYzoyMTgyOkVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcik7XFxubW0vc2xhYl9jb21tb24uYy0yMTgzLVxcbi0tXFxubW0vc2xhYl9jb21tb24uYz0yMTkxPXZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0yMjA0LX1cXG5tbS9zbGFiX2NvbW1vbi5jOjIyMDU6RVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTIyMDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjI4LjE0NDUzODU2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjczNzgxNDE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIHRhcmdldCBzb21lIFJDVSBkZWZlcnJhbCBsb2dpYywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCBkZWZlcnJlZCBSQ1UgZmx1c2hpbmcuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgcmN1X2JhcnJpZXJgIGFuZCBgc3JjdV9iYXJyaWVyYCBzZWVtZWQgbGlrZSBnb29kIHRhcmdldHMgc2luY2UgdGhleSdyZSBleHBvcnRlZCBhbmQgSSBzYXcgdGhleSB3ZXJlIG1vZGlmaWVkIHRvIGNhbGwgYHJjdV9kZWZlcl9mbHVzaCgpYCBhbmQgYHNyY3VfZGVmZXJfZmx1c2goKWAuIFdhaXQsIHRoYXQncyBub3QgcmlnaHQsIHRob3NlIGBfZGVmZXJfZmx1c2hgIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBzbyB0aGF0IGFwcHJvYWNoIHdvbid0IHdvcmsuXG5cbkJ1dCwgSSBzZWUgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIENQVSBob3RwbHVnIGFuZCB0aGF0J3MgaW50ZXJlc3RpbmcuIEFsc28sIGBzcmN1X29mZmxpbmVfZHJhaW5gIGlzIGFsc28gY2FsbGVkIGR1cmluZyBDUFUgaG90cGx1Zywgc28gdGhvc2UgdHdvIGFyZSBwb3RlbnRpYWwgdGFyZ2V0cy5cblxuSSByZW1lbWJlciB0aGUgYHJjdV9yZWVudHJ5LmNgIHNlbGZ0ZXN0LCBhbmQgaXQgdXNlcyBCUEYgdG8gdHJpZ2dlciBgY2FsbF9yY3VfdGFza3NfdHJhY2VgIGZyb20gYHJjdV9zZWdjYmxpc3RfZW5xdWV1ZWAgdmlhIGBicGZfdGFza19zdG9yYWdlX2RlbGV0ZWAuIFRoYXQgc3VnZ2VzdHMgdGhhdCBCUEYgY2FuIHRyaWdnZXIgdGhpcyBkZWZlcnJhbCBsb2dpYywgd2hpY2ggbWVhbnMgZnV6emluZyBCUEYgc3lzY2FsbHMgYW5kIG1hcHMgaXMgYSBnb29kIGF2ZW51ZSB0byBleHBsb3JlLiBUaGUgZ29vZCB0aGluZyBpcyB0aGF0IEkgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IEJQRiBmdW5jdGlvbnMsIGp1c3QgZm9jdXMgb24gdGhlIFJDVSBmdW5jdGlvbnMuXG5cblNvLCBoZXJlJ3MgdGhlIGNvcmUgc2V0IG9mIHN5bWJvbHMgSSdtIGZvY3VzaW5nIG9uOiBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAuXG5cbkhvd2V2ZXIsIG5vdyBJIHJlbWVtYmVyIHRoYXQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGFuZCBgc3JjdV9vZmZsaW5lX2RyYWluYCBhcmVuJ3Qgc3lzY2FsbHM7IHRoZXkncmUgaW50ZXJuYWwga2VybmVsIGZ1bmN0aW9ucy4gU3l6a2FsbGVyIGNhbid0IGRpcmVjdGx5IGNhbGwgdGhlbS4gSG93ZXZlciwgaXQgKmNhbiogdHJpZ2dlciBDUFUgaG90cGx1Zywgd2hpY2gsIGluIHR1cm4sIGNhbGxzIHRoZXNlIGZ1bmN0aW9ucy5cblxuU3l6a2FsbGVyICpjYW4qIGRpcmVjdGx5IGNhbGwgYHJjdV9iYXJyaWVyYCBhbmQgYHNyY3VfYmFycmllcmAgdmlhIHZhcmlvdXMgc3lzY2FsbHMgb3IgaWYgd2UgYWRkIHRoZW0gZGlyZWN0bHkgdG8gc3l6bGFuZywgYnV0IHRoZXkncmUgcHJvYmFibHkgYWxyZWFkeSByZWFjaGFibGUgdGhyb3VnaCBtYW55IG90aGVyIGV4aXN0aW5nIHBhdGhzLlxuXG5UaGUga2V5IGluc2lnaHQgaXMgdGhpczogZXZlbiBpZiBJIGp1c3QgbGlzdCBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgYXMgdGFyZ2V0cywgU3l6a2FsbGVyJ3MgY292ZXJhZ2UgZ3VpZGFuY2Ugd2lsbCB0aGVuIHRyeSB0byByZWFjaCB0aGVtLiBUaGF0IG1pZ2h0IGJlIHRoZSBzaW1wbGVzdCBhcHByb2FjaC5cblxuSSBuZWVkIHRvIGNoZWNrIGhvdyB0byByZWFjaCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTYzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjUwLjg4MjM1NTU2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNDc1MzM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9NZW1vcnktT3JkZXJpbmcvVHJlZS1SQ1UtTWVtb3J5LU9yZGVyaW5nLnJzdD0yOTQ9ZmluYWwgY29kZSBwYXRoIG9uIHRoZSByaWdodCBpcyB0YWtlbiBvbmx5IGluIGtlcm5lbHMgYnVpbHQgd2l0aFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL01lbW9yeS1PcmRlcmluZy9UcmVlLVJDVS1NZW1vcnktT3JkZXJpbmcucnN0LTI5Ni1gYHJjdV9hZHZhbmNlX2NicygpYGAsIGBgcmN1X21pZ3JhdGVfY2FsbGJhY2tzYGAsXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL01lbW9yeS1PcmRlcmluZy9UcmVlLVJDVS1NZW1vcnktT3JkZXJpbmcucnN0OjI5NzpgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKWBgLCBhbmQgYGB0YWtlZG93bl9jcHUoKWBgLCB3aGljaCBpbiB0dXJuXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL01lbW9yeS1PcmRlcmluZy9UcmVlLVJDVS1NZW1vcnktT3JkZXJpbmcucnN0LTI5OC1pcyBpbnZva2VkIG9uIGEgc3Vydml2aW5nIENQVSBhZnRlciB0aGUgb3V0Z29pbmcgQ1BVIGhhcyBiZWVuIGNvbXBsZXRlbHlcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9NZW1vcnktT3JkZXJpbmcvVHJlZVJDVS1jYWxsYmFjay1yZWdpc3RyeS5zdmctNTY1LSAgICAgICBpZD1cXFwidGV4dDIwMi03LTktNlxcXCJcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vTWVtb3J5LU9yZGVyaW5nL1RyZWVSQ1UtY2FsbGJhY2stcmVnaXN0cnkuc3ZnOjU2NjogICAgICAgc3R5bGU9XFxcImZvbnQtc2l6ZToxOTJweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpib2xkO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4wMjVpbjtmb250LWZhbS4uLlxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9NZW1vcnktT3JkZXJpbmcvVHJlZVJDVS1jYWxsYmFjay1yZWdpc3RyeS5zdmctNTY3LSAgICBcXHUwMDNjdGV4dFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL01lbW9yeS1PcmRlcmluZy9UcmVlUkNVLWdwLnN2Zy0xNDQ3LSAgICAgICBpZD1cXFwidGV4dDIwMi03LTktNlxcXCJcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vTWVtb3J5LU9yZGVyaW5nL1RyZWVSQ1UtZ3Auc3ZnOjE0NDg6ICAgICAgIHN0eWxlPVxcXCJmb250LXNpemU6MTkycHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFuY2hvcjpzdGFydDtmaWxsOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuMDI1aW47Zm9udC1mYW1pbHk6Q291cmllclxcXCJcXHUwMDNlci4uLlxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9NZW1vcnktT3JkZXJpbmcvVHJlZVJDVS1ncC5zdmctMTQ0OS0gICAgXFx1MDAzY3RleHRcXG4tLVxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0Lmg9NTUwPWVudW1cXG4tLVxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgtNTY5LSAqIF8gUkNVOlxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0Lmg6NTcwOiAqIFxcdDEpIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKSBtaWdyYXRlcyB0aGUgcXVldWUuXFxuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaC01NzEtICogXFx0MikgcmN1dHJlZV9yZXBvcnRfY3B1X2RlYWQoKSByZXBvcnRzIHRoZSBmaW5hbCBxdWllc2NlbnQgc3RhdGVzLlxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmg9MTEwPWludCByY3V0cmVlX29mZmxpbmVfY3B1KHVuc2lnbmVkIGludCBjcHUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmgtMTE2LVxcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oOjExNzp2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSk7XFxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmgtMTE4LVxcbi0tXFxua2VybmVsL2NwdS5jPTEzMDI9c3RhdGljIGludCB0YWtlZG93bl9jcHUodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9jcHUuYy0xMzUxLVxcdCAqL1xcbmtlcm5lbC9jcHUuYzoxMzUyOlxcdHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoY3B1KTtcXG5rZXJuZWwvY3B1LmMtMTM1My1cXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oLTU4OS1cXG5rZXJuZWwvcmN1L3JjdS5oOjU5MDovKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUncyBkZWZlcnJlZCBTUkNVIGNhbGxiYWNrczsgc2VlIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4gKi9cXG5rZXJuZWwvcmN1L3JjdS5oLTU5MS12b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xNTE1PXN0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTM4LSAqIERyYWluIEBjcHUncyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3M7IGNhbGxlZCBmcm9tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE1Mzk6ICogcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpIG9uY2UgQGNwdSBpcyBkZWFkLiAgT25lIHBhc3MgY292ZXJzIGV2ZXJ5XFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1NDAtICogc3JjdV9zdHJ1Y3QsIGFzIHRoZSBwZXItQ1BVIHNyY3VfZGVmZXIgbGlzdCBjaGFpbnMgdGhlbSBhbGwsIGFuZCB0aGVcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTMxNjY9c3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0zMjE5LSAqIHRoZSBkcmFpbmVycyAtLSB0aGlzIENQVSdzIGlycV93b3JrLCByY3VfZGVmZXJfZmx1c2goKSBhbmRcXG5rZXJuZWwvcmN1L3RyZWUuYzozMjIwOiAqIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKSAtLSBzZXJpYWxpemUgYW5kIG5ldmVyIGxlYXZlIGEgY2FsbGJhY2sgb2ZmXFxua2VybmVsL3JjdS90cmVlLmMtMzIyMS0gKiAtXFx1MDAzZWRlZmVyX2hlYWQgeWV0IG5vdCBvbiBhIGNhbGxiYWNrIGxpc3QuXFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz00NTYwPXZvaWQgcmN1dHJlZV9yZXBvcnRfY3B1X2RlYWQodm9pZClcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MTQtICovXFxua2VybmVsL3JjdS90cmVlLmM6NDYxNTp2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSlcXG5rZXJuZWwvcmN1L3RyZWUuYy00NjE2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6NTIuMzk3MTE1NjU4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNDMyMDA3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJDVSBDb2RlIGZvciBTeXprYWxsZXIgVGVzdGluZyoqXG5cbk9rYXksIHNvIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBpcyBkZWZpbml0ZWx5IGNhbGxlZCBmcm9tIGB0YWtlZG93bl9jcHVgIHdpdGhpbiBga2VybmVsL2NwdS5jYC4gVGhhdCdzIGluIHRoZSBDUFUgaG90cGx1ZyBwYXRoLCB3aGljaCBtYWtlcyBpdCBhIHNvbGlkIHRhcmdldC4gTm93LCBsZXQncyBleHBsb3JlIG90aGVyIHN1aXRhYmxlIGZ1bmN0aW9ucy4gYGNhbGxfcmN1X2RlZmVyYCBpcyBpbnRlcm5hbCB0byB0aGUgZGVmZXJyYWwgbG9naWMuIEFuZCBiZWNhdXNlIGl0J3Mgc3RhdGljIGl0J3Mgbm90IGlkZWFsLiBTYW1lIHdpdGggYHNyY3VfZGVmZXJfZHJhaW5gIGFuZCBgcmN1X2RlZmVyX2RyYWluYCwgdGhleSdyZSB0aGUgaXJxX3dvcmsgaGFuZGxlcnMuXG5cbkJ1dCwgaG9sZCBvbi4uLiBgcmN1X2RlZmVyX2RyYWluYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBJUlFfV09SS19JTklUX0hBUkRgLCB3aGljaCBtZWFucyBpdCBpc24ndCBpbmxpbmVkISBFeGNlbGxlbnQsIHRoYXQgbWFrZXMgaXQgbW9yZSBhY2Nlc3NpYmxlLlxuXG5Gb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucywgSSBuZWVkIHRvIGZvY3VzIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gU28sIGByY3VfYmFycmllcmAsIGBzcmN1X2JhcnJpZXJgLCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AsIGFuZCBgc3JjdV9vZmZsaW5lX2RyYWluYCBsb29rIGxpa2UgZ29vZCBvcHRpb25zLlxuXG5Ob3csIGFib3V0IGBDT05GSUdfUkNVX0RFRkVSYC4gSXQgZGVwZW5kcyBvbiBgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNgLiBUbyBlbnN1cmUgaXQncyBlbmFibGVkLCBJJ2xsIG5lZWQgdG8gYWRkIGBLUFJPQkVTYCBhbmQgYEZVTkNUSU9OX1RSQUNFUmAgdG8gdGhlIGBFbmFibGVDb25maWdzYC4gQWxzbywgYFBFUkZfRVZFTlRTYCBpcyBuZWNlc3NhcnkgZm9yIGByY3VfdG9ydHVyZV9ubWlfaW5pdGAuIEFuZCBvZiBjb3Vyc2UsIEkgbmVlZCBgUkNVX1RPUlRVUkVfVEVTVGAgdG8gcnVuIHRoZSB0b3J0dXJlIHRlc3RzLlxuXG5CdXQsIGBSQ1VfVE9SVFVSRV9URVNUYCBpcyBhIG1vZHVsZS4gU3l6a2FsbGVyIGRvZXNuJ3QgbG9hZCBpdCBieSBkZWZhdWx0IHVubGVzcyBpdCdzIGJ1aWx0LWluIG9yIGV4cGxpY2l0bHkgbG9hZGVkLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBsaXN0IGNvbmZpZ3VyYXRpb24gZmxhZ3MgbmVlZGVkIHRvIGNvbXBpbGUgYW5kIHRlc3QgdGhlICptb2RpZmllZCogY29kZS4gU28sIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGBLUFJPQkVTYCwgYEZVTkNUSU9OX1RSQUNFUmAsIGBQRVJGX0VWRU5UU2AsIGFuZCBgUkNVX1RPUlRVUkVfVEVTVGAuIEdvdHRhIGRvdWJsZS1jaGVjayB0aGF0IGBSQ1VfVE9SVFVSRV9URVNUYCBpbiBga2VybmVsL3JjdS9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0MDYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6NTkuNTQwMzE5ODU3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU3NDExMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSQ1VfVE9SVFVSRV9URVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zz0yNj1jb25maWcgUkNVX1NDQUxFX1RFU1RcXG4tLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy00MC1cXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWc6NDE6Y29uZmlnIFJDVV9UT1JUVVJFX1RFU1RcXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctNDItXFx0dHJpc3RhdGUgXFxcInRvcnR1cmUgdGVzdHMgZm9yIFJDVVxcXCJcXG4tLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy01NS1cXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWc6NTY6Y29uZmlnIFJDVV9UT1JUVVJFX1RFU1RfQ0hLX1JEUl9TVEFURVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy01Ny1cXHRib29sIFxcXCJDaGVjayByY3V0b3J0dXJlIHJlYWRlciBzdGF0ZVxcXCJcXG4tLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy03MS1cXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWc6NzI6Y29uZmlnIFJDVV9UT1JUVVJFX1RFU1RfTE9HX0NQVVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy03My1cXHRib29sIFxcXCJMb2cgQ1BVIGZvciByY3V0b3J0dXJlIGZhaWx1cmVzXFxcIlxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTg2LVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo4Nzpjb25maWcgUkNVX1RPUlRVUkVfVEVTVF9MT0dfR1BcXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctODgtXFx0Ym9vbCBcXFwiTG9nIGdyYWNlLXBlcmlvZCBudW1iZXJzIGZvciByY3V0b3J0dXJlIGZhaWx1cmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNjowMS4wOTc3MzcwNzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYxMDU0MzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIERlcGVuZGVuY3kgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBgUkNVX1RPUlRVUkVfVEVTVGAgaXMgZmxhZ2dpbmcgYSBkZXBlbmRlbmN5IG9uIGBUT1JUVVJFX1RFU1RgLiBUaGF0J3MgYSBjb21tb24gcGF0dGVybiBpbiB0aGUgZnJhbWV3b3JrOyBvbmUgdGVzdCBvZnRlbiBidWlsZHMgdXBvbiBhbm90aGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYFRPUlRVUkVfVEVTVGAgdG8gZmlndXJlIG91dCB3aHkgYFJDVV9UT1JUVVJFX1RFU1RgIG1pZ2h0IGJlIGZhaWxpbmcsIG9yIGJlaGF2aW5nIGluIGFuIHVuZXhwZWN0ZWQgbWFubmVyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBUT1JUVVJFX1RFU1RgLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY3MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE2OjAzLjcwODI4MzA0MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMTUyNDcxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVE9SVFVSRV9URVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zz0xMT1jb25maWcgUFJPVkVfUkNVX0xJU1RcXG4tLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy0yMS1cXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWc6MjI6Y29uZmlnIFRPUlRVUkVfVEVTVFxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy0yMy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNjowNS4yMTk4MTIzODhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMxNjk2NzY5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFJDVSBEZWZlcnJhbCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSB0YXNrIGlzIHRvIGlkZW50aWZ5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLlxuXG5JIHNlZSB0aGF0IGBUT1JUVVJFX1RFU1RgIGlzIGEgdHJpc3RhdGUsIGFuZCBlbmFibGVkIGJ5IGBSQ1VfVE9SVFVSRV9URVNUYC4gIFNvLCBlbmFibGluZyBgUkNVX1RPUlRVUkVfVEVTVGAgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLlxuXG5UaGUgQlBGIHRlc3QgdXRpbGl6ZXMgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgLiBUaGUgcHJlc2VuY2Ugb2YgYSBuZXcgQlBGIHNlbGYtdGVzdCwgc3BlY2lmaWNhbGx5IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jYCwgc2NyZWFtcyB0aGF0IEJQRiBpcyBhIGdyZWF0IGF2ZW51ZSBmb3IgdGVzdGluZyB0aGlzLiAgU28sIGBCUEZfU1lTQ0FMTGAgaXMgZGVmaW5pdGVseSBhIGtleSBjb25maWcgdG8gZW5hYmxlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHJlbGV2YW50IGZ1bmN0aW9ucy4gVGhlIGdvYWwgaGVyZSBpcyB0byBmaW5kIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgdGhlIG5ldyBkZWZlcnJlZCBjYWxsYmFjayBsb2dpYyBidXQgYXJlbid0IGhvdCBwYXRocywgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgb24gYHJjdV9iYXJyaWVyYCwgYHNyY3VfYmFycmllcmAsIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCwgYW5kIGBzcmN1X29mZmxpbmVfZHJhaW5gLiBBcmUgdGhleSBob3QgcGF0aHM/IE5vLCBubywgbm8sIGFuZCBuby4gVGhpcyBsb29rcyBwcm9taXNpbmcuXG5cbmBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIGJ1dCB0aGV5IGFyZSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gdGhvc2UgYXJlIG91dC4gVGhlIGdvYWwgaXMgdG8gZmx1c2gvbWlncmF0ZSB0aGUgbmV3IGRlZmVycmFsIGNhbGxiYWNrcy5cblxuSSdtIHRoaW5raW5nOiBgc3JjdV9kZWZlcl9kcmFpbmAgaXMgZXhwb3J0ZWQgaW4gYHNyY3V0aW55LmNgLCBidXQgc3RhdGljIGluIGBzcmN1dHJlZS5jYC4gYHNyY3Vfb2ZmbGluZV9kcmFpbmAgaXMgbm90IHN0YXRpYyBpbiBgc3JjdXRyZWUuY2AsIHNvIGl0J3MgYSBiZXR0ZXIgY2hvaWNlLiBgcmN1X2JhcnJpZXJgIGNhbGxzIGByY3VfZGVmZXJfZmx1c2goKWAsIHdoaWNoIGlzIHN0YXRpYywgc28gYHJjdV9iYXJyaWVyYCBpcyBhIGdvb2QgdGFyZ2V0LiBMaWtld2lzZSwgYHNyY3VfYmFycmllcmAgY2FsbHMgc3RhdGljIGBzcmN1X2RlZmVyX2ZsdXNoKClgLCBzbyBgc3JjdV9iYXJyaWVyYCBpcyBnb29kLiBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgY2FsbHMgYHJjdV9kZWZlcl9kcmFpbmAgYW5kIGBzcmN1X29mZmxpbmVfZHJhaW5gLCBhbHNvIGxvb2tzIGdvb2QuIGBzcmN1X29mZmxpbmVfZHJhaW5gIGl0c2VsZiBjYWxscyBgc3JjdV9kZWZlcl9kcmFpbmAuIFRoZSBsaXN0OlxuLSBgcmN1X2JhcnJpZXJgXG4tIGBzcmN1X2JhcnJpZXJgXG4tIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYFxuLSBgc3JjdV9vZmZsaW5lX2RyYWluYFxuXG5TZWVtcyBwcmV0dHkgc29saWQuXG5cbkNvbmZpZy13aXNlLCBJJ3ZlIGdvdDogYEtQUk9CRVNgLCBgRlVOQ1RJT05fVFJBQ0VSYCwgYFBFUkZfRVZFTlRTYCwgYFJDVV9UT1JUVVJFX1RFU1RgLCBhbmQgYEJQRl9TWVNDQUxMYC5cblxuQWgsIGJ1dCB3YWl0ISBgQ09ORklHX1JDVV9ERUZFUmAgaXMgZGVmaW5lZCBpbiB0ZXJtcyBvZiBgSEFWRV9OTUlgLCBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYFRSQUNFUE9JTlRTYC4gU28sIHRvIG1ha2Ugc3VyZSBpdCdzIGVuYWJsZWQsIEkgbmVlZCB0byBsaXN0IHRob3NlLiBgSEFWRV9OTUlgIGlzIHVzdWFsbHkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBidXQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYFRSQUNFUE9JTlRTYCBjb3ZlciB1cy5cblxuYFJDVV9UT1JUVVJFX1RFU1RgIGlzIGEgbW9kdWxlLiBXaGlsZSBpdCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBub2lzZSBpZiBpdCdzIGJ1aWx0LWluLCB0aGUgcGF0Y2ggKm1vZGlmaWVzKiBgcmN1dG9ydHVyZS5jYCwgYWRkaW5nIE5NSSB0ZXN0aW5nLCBzbyBlbmFibGluZyBpdCBzZWVtcyBjb3JyZWN0LlxuXG5BbmQgYEJQRl9TWVNDQUxMYCBpcyBjcml0aWNhbCBiZWNhdXNlIEJQRiBpcyBhIHByaW1hcnkgZHJpdmVyIG9mIHRoaXMgbmV3IGxvZ2ljLCBhbmQgaXQgdHJpZ2dlcnMgYHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyYCBpbiBgcmN1dG9ydHVyZS5jYCBzbyBgUEVSRl9FVkVOVFNgIGlzIG5lZWRlZC5cblxuVGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJhbCBtZWNoYW5pc20gZm9yIGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBub3RhYmx5IGZvciBOTUlzIGFuZCBCUEYgcHJvZ3JhbXMuIEl0IGNoYW5nZXMgY29yZSBSQ1UgYW5kIFNSQ1UgbG9naWMsIGFkZGluZyBuZXcgZGVmZXJyZWQgY2FsbGJhY2sgbGlzdHMgYW5kIGlycV93b3JrIHF1ZXVlcy4gVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgTk1JIHRlc3RpbmcgaW4gYHJjdXRvcnR1cmVgIGFuZCBhIEJQRiBzZWxmdGVzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFuZCB3YXJyYW50cyBmdXp6aW5nLiBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgYXJlIGdvb2QgZm9jdXMgc3ltYm9scyBiZWNhdXNlIHRoZXkncmUgbm9uLWhvdHBhdGggZW50cnkgcG9pbnRzIHRoYXQgZmx1c2ggb3IgbWlncmF0ZSB0aGUgbmV3IGRlZmVycmVkIGxpc3RzLiBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYFRSQUNFUE9JTlRTYCBlbmFibGUgYENPTkZJR19SQ1VfREVGRVJgLCBgUEVSRl9FVkVOVFNgIGFuZCBgUkNVX1RPUlRVUkVfVEVTVGAgY292ZXIgdGhlIE5NSSB0ZXN0cywgYW5kIGBCUEZfU1lTQ0FMTGAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgQlBGIGlzIGEgcHJpbWFyeSB1c2VyLlxuXG5MZXQncyBxdWlja2x5IHJlZmluZSB0aGUgZm9jdXMgc3ltYm9scywgd2hpY2ggaXNcblxuIiwiSW5wdXRUb2tlbnMiOjI2OTQ1LCJPdXRwdXRUb2tlbnMiOjMxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTY6MjguMzg5NDkyMTA3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5MzI2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiLFxuICAgIFwiVFJBQ0VQT0lOVFNcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJSQ1VfVE9SVFVSRV9URVNUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJjdV9iYXJyaWVyXCIsXG4gICAgXCJzcmN1X2JhcnJpZXJcIixcbiAgICBcInJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NcIixcbiAgICBcInNyY3Vfb2ZmbGluZV9kcmFpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJhbCBtZWNoYW5pc20gZm9yIGNhbGxfcmN1KCkgYW5kIGNhbGxfc3JjdSgpIHRvIHNhZmVseSBoYW5kbGUgY2FsbGJhY2sgZW5xdWV1ZXMgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAoZS5nLiwgZnJvbSBOTUlzIG9yIEJQRiBwcm9ncmFtcykuIEl0IGFkZHMgbG9ja2xlc3MgbGlzdHMgYW5kIGlycV93b3JrIHRvIGRlZmVyIHRoZSBhY3R1YWwgZW5xdWV1ZSB1bnRpbCBpdCBpcyBzYWZlLiBJdCBhbHNvIHVwZGF0ZXMgcmN1X2JhcnJpZXIoKSwgc3JjdV9iYXJyaWVyKCksIGFuZCBDUFUgaG90cGx1ZyBwYXRocyB0byBmbHVzaCB0aGVzZSBkZWZlcnJlZCBjYWxsYmFja3MuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBOTUkgdGVzdGluZyB0byByY3V0b3J0dXJlIHVzaW5nIHBlcmYgZXZlbnRzLCBhbmQgYSBCUEYgc2VsZnRlc3QuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIFJDVSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gRm9jdXMgc3ltYm9scyBpbmNsdWRlIHRoZSBiYXJyaWVyIGFuZCBDUFUgb2ZmbGluZSBmdW5jdGlvbnMgdGhhdCBkcmFpbiB0aGUgbmV3IGRlZmVycmVkIGxpc3RzLiBSZXF1aXJlZCBjb25maWdzIGluY2x1ZGUgS1BST0JFUy9GVU5DVElPTl9UUkFDRVIvVFJBQ0VQT0lOVFMgdG8gZW5hYmxlIENPTkZJR19SQ1VfREVGRVIsIFBFUkZfRVZFTlRTIGFuZCBSQ1VfVE9SVFVSRV9URVNUIGZvciB0aGUgcmN1dG9ydHVyZSBjaGFuZ2VzLCBhbmQgQlBGX1NZU0NBTEwgYXMgQlBGIGlzIGEgcHJpbWFyeSB0cmlnZ2VyIGZvciB0aGlzIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1BST0JFU1wiLFxuICAgIFwiRlVOQ1RJT05fVFJBQ0VSXCIsXG4gICAgXCJUUkFDRVBPSU5UU1wiLFxuICAgIFwiUEVSRl9FVkVOVFNcIixcbiAgICBcIlJDVV9UT1JUVVJFX1RFU1RcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmN1X2JhcnJpZXJcIixcbiAgICBcInNyY3VfYmFycmllclwiLFxuICAgIFwicmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc1wiLFxuICAgIFwic3JjdV9vZmZsaW5lX2RyYWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmFsIG1lY2hhbmlzbSBmb3IgY2FsbF9yY3UoKSBhbmQgY2FsbF9zcmN1KCkgdG8gc2FmZWx5IGhhbmRsZSBjYWxsYmFjayBlbnF1ZXVlcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkIChlLmcuLCBmcm9tIE5NSXMgb3IgQlBGIHByb2dyYW1zKS4gSXQgYWRkcyBsb2NrbGVzcyBsaXN0cyBhbmQgaXJxX3dvcmsgdG8gZGVmZXIgdGhlIGFjdHVhbCBlbnF1ZXVlIHVudGlsIGl0IGlzIHNhZmUuIEl0IGFsc28gdXBkYXRlcyByY3VfYmFycmllcigpLCBzcmN1X2JhcnJpZXIoKSwgYW5kIENQVSBob3RwbHVnIHBhdGhzIHRvIGZsdXNoIHRoZXNlIGRlZmVycmVkIGNhbGxiYWNrcy4gQWRkaXRpb25hbGx5LCBpdCBhZGRzIE5NSSB0ZXN0aW5nIHRvIHJjdXRvcnR1cmUgdXNpbmcgcGVyZiBldmVudHMsIGFuZCBhIEJQRiBzZWxmdGVzdC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgUkNVIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiBGb2N1cyBzeW1ib2xzIGluY2x1ZGUgdGhlIGJhcnJpZXIgYW5kIENQVSBvZmZsaW5lIGZ1bmN0aW9ucyB0aGF0IGRyYWluIHRoZSBuZXcgZGVmZXJyZWQgbGlzdHMuIFJlcXVpcmVkIGNvbmZpZ3MgaW5jbHVkZSBLUFJPQkVTL0ZVTkNUSU9OX1RSQUNFUi9UUkFDRVBPSU5UUyB0byBlbmFibGUgQ09ORklHX1JDVV9ERUZFUiwgUEVSRl9FVkVOVFMgYW5kIFJDVV9UT1JUVVJFX1RFU1QgZm9yIHRoZSByY3V0b3J0dXJlIGNoYW5nZXMsIGFuZCBCUEZfU1lTQ0FMTCBhcyBCUEYgaXMgYSBwcmltYXJ5IHRyaWdnZXIgZm9yIHRoaXMgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowwcnpv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 01:12:56 +0000 UTC FinishedAt: 2026-07-31 01:16:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "95d6a9ccef99117115e41e9adb271243bd5e985b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KPROBES", "FUNCTION_TRACER", "TRACEPOINTS", "PERF_EVENTS", "RCU_TORTURE_TEST", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "95d6a9ccef99117115e41e9adb271243bd5e985b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KPROBES", "FUNCTION_TRACER", "TRACEPOINTS", "PERF_EVENTS", "RCU_TORTURE_TEST", "BPF_SYSCALL" ], "series_id": "d8998ec7-6753-48fe-ae7d-019bea631f5e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "rcu_barrier", "srcu_barrier", "rcutree_migrate_callbacks", "srcu_offline_drain" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tQUk9CRVMmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDssCiAgICAmIzM0O1RSQUNFUE9JTlRTJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O1JDVV9UT1JUVVJFX1RFU1QmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyY3VfYmFycmllciYjMzQ7LAogICAgJiMzNDtzcmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7cmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtzcmN1X29mZmxpbmVfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmFsIG1lY2hhbmlzbSBmb3IgY2FsbF9yY3UoKSBhbmQgY2FsbF9zcmN1KCkgdG8gc2FmZWx5IGhhbmRsZSBjYWxsYmFjayBlbnF1ZXVlcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkIChlLmcuLCBmcm9tIE5NSXMgb3IgQlBGIHByb2dyYW1zKS4gSXQgYWRkcyBsb2NrbGVzcyBsaXN0cyBhbmQgaXJxX3dvcmsgdG8gZGVmZXIgdGhlIGFjdHVhbCBlbnF1ZXVlIHVudGlsIGl0IGlzIHNhZmUuIEl0IGFsc28gdXBkYXRlcyByY3VfYmFycmllcigpLCBzcmN1X2JhcnJpZXIoKSwgYW5kIENQVSBob3RwbHVnIHBhdGhzIHRvIGZsdXNoIHRoZXNlIGRlZmVycmVkIGNhbGxiYWNrcy4gQWRkaXRpb25hbGx5LCBpdCBhZGRzIE5NSSB0ZXN0aW5nIHRvIHJjdXRvcnR1cmUgdXNpbmcgcGVyZiBldmVudHMsIGFuZCBhIEJQRiBzZWxmdGVzdC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgUkNVIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiBGb2N1cyBzeW1ib2xzIGluY2x1ZGUgdGhlIGJhcnJpZXIgYW5kIENQVSBvZmZsaW5lIGZ1bmN0aW9ucyB0aGF0IGRyYWluIHRoZSBuZXcgZGVmZXJyZWQgbGlzdHMuIFJlcXVpcmVkIGNvbmZpZ3MgaW5jbHVkZSBLUFJPQkVTL0ZVTkNUSU9OX1RSQUNFUi9UUkFDRVBPSU5UUyB0byBlbmFibGUgQ09ORklHX1JDVV9ERUZFUiwgUEVSRl9FVkVOVFMgYW5kIFJDVV9UT1JUVVJFX1RFU1QgZm9yIHRoZSByY3V0b3J0dXJlIGNoYW5nZXMsIGFuZCBCUEZfU1lTQ0FMTCBhcyBCUEYgaXMgYSBwcmltYXJ5IHRyaWdnZXIgZm9yIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNlZjM2NzQyYjE3YmViMGU3MzQ2YjU4ZjUxOGJhN2U4NmE3NjY3NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMToxNDozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcbmluZGV4IGZiY2YxM2JjMTJkMTUuLjQ3Mjc1ZDE4Mjk2NmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2RlZmluZSBfTElOVVhfU1JDVV9USU5ZX0hcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FpdC5oXHUwMDNlXG4gXG4gc3RydWN0IHNyY3Vfc3RydWN0IHtcbkBAIC0yNiw2ICYjNDM7MjcsOCBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xuIFx0c3RydWN0IHJjdV9oZWFkICoqc3JjdV9jYl90YWlsO1x0LyogUGVuZGluZyBjYWxsYmFja3M6IFRhaWwuICovXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3JjdV93b3JrO1x0LyogRm9yIGRyaXZpbmcgZ3JhY2UgcGVyaW9kcy4gKi9cbiBcdHN0cnVjdCBpcnFfd29yayBzcmN1X2lycV93b3JrO1x0LyogRGVmZXIgc2NoZWR1bGVfd29yaygpIHRvIGlycSB3b3JrLiAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NicztcdC8qIENhbGxiYWNrcyBkZWZlcnJlZCBvbiByZS1lbnRyeS4gKi9cbiYjNDM7XHRzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfaXc7XHRcdC8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovXG4gI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DXG4gXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDtcbiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovXG5AQCAtMzMsNiAmIzQzOzM2LDcgQEAgc3RydWN0IHNyY3Vfc3RydWN0IHtcbiBcbiB2b2lkIHNyY3VfZHJpdmVfZ3Aoc3RydWN0IHdvcmtfc3RydWN0ICp3cCk7XG4gdm9pZCBzcmN1X3RpbnlfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XG4mIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbiBcbiAjZGVmaW5lIF9fU1JDVV9TVFJVQ1RfSU5JVChuYW1lLCBfX2lnbm9yZWQsIF9fX2lnbm9yZWQsIF9fX19pZ25vcmVkKVx0XFxcbiB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbkBAIC00MCw2ICYjNDM7NDQsOCBAQCB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbiBcdC5zcmN1X2NiX3RhaWwgPSBcdTAwMjZuYW1lLnNyY3VfY2JfaGVhZCxcdFx0XHRcdFxcXG4gXHQuc3JjdV93b3JrID0gX19XT1JLX0lOSVRJQUxJWkVSKG5hbWUuc3JjdV93b3JrLCBzcmN1X2RyaXZlX2dwKSxcdFxcXG4gXHQuc3JjdV9pcnFfd29yayA9IHsgLmZ1bmMgPSBzcmN1X3RpbnlfaXJxX3dvcmsgfSxcdFx0XFxcbiYjNDM7XHQuZGVmZXJfY2JzID0gTExJU1RfSEVBRF9JTklUKG5hbWUuZGVmZXJfY2JzKSxcdFx0XHRcXFxuJiM0MztcdC5kZWZlcl9pdyA9IHsgLmZ1bmMgPSBzcmN1X2RlZmVyX2RyYWluIH0sXHRcdFx0XHRcXFxuIFx0X19TUkNVX0RFUF9NQVBfSU5JVChuYW1lKVx0XHRcdFx0XHRcXFxuIH1cbiBcbkBAIC0xMzEsMTAgJiM0MzsxMzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4te1xuLVx0c3luY2hyb25pemVfc3JjdShzc3ApO1xuLX1cbiYjNDM7dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApIHsgfVxuICNkZWZpbmUgc3JjdV9jaGVja19yZWFkX2ZsYXZvcihzc3AsIHJlYWRfZmxhdm9yKSBkbyB7IH0gd2hpbGUgKDApXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXG5pbmRleCA3NWU1NGU0Zjk2M2ZhLi4xY2U3NTlmYjcwOTQ4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbkBAIC0xMyw2ICYjNDM7MTMsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdV9ub2RlX3RyZWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiBcbiBzdHJ1Y3Qgc3JjdV9ub2RlO1xuIHN0cnVjdCBzcmN1X3N0cnVjdDtcbkBAIC00MSw2ICYjNDM7NDMsOCBAQCBzdHJ1Y3Qgc3JjdV9kYXRhIHtcbiBcdGJvb2wgc3JjdV9jYmxpc3RfaW52b2tpbmc7XHRcdC8qIEludm9raW5nIHRoZXNlIENCcz8gKi9cbiBcdHN0cnVjdCB0aW1lcl9saXN0IGRlbGF5X3dvcms7XHRcdC8qIERlbGF5IGZvciBDQiBpbnZva2luZyAqL1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XHRcdC8qIENvbnRleHQgZm9yIENCIGludm9raW5nLiAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NicztcdFx0LyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlIGRlZmVyX2xpbms7XHRcdC8qIExpbmtzIG9udG8gdGhlIHBlci1DUFUgZGVmZXJyYWwgZHJhaW4gbGlzdCAqL1xuIFx0c3RydWN0IHJjdV9oZWFkIHNyY3VfYmFycmllcl9oZWFkO1x0LyogRm9yIHNyY3VfYmFycmllcigpIHVzZS4gKi9cbiBcdHN0cnVjdCByY3VfaGVhZCBzcmN1X2VjX2hlYWQ7XHRcdC8qIEZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKSB1c2UuICovXG4gXHRpbnQgc3JjdV9lY19zdGF0ZTtcdFx0XHQvKiAgU3RhdGUgZm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpLiAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvS2NvbmZpZyBiL2tlcm5lbC9yY3UvS2NvbmZpZ1xuaW5kZXggMzMyZGY3YTdhNjM0Ny4uYmM5NDgzYzBiNWQ4NCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9LY29uZmlnXG5AQCAtMTc1LDYgJiM0MzsxNzUsMTIgQEAgY29uZmlnIFJDVV9TVEFMTF9DT01NT05cbiBjb25maWcgUkNVX05FRURfU0VHQ0JMSVNUXG4gXHRkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFRSRUVfU1JDVSB8fCBUQVNLU19SQ1VfR0VORVJJQyApXG4gXG4mIzQzOyMgVGhlIGRlZmVycmFsIChhbmQgdGhlIElSUV9XT1JLIGl0IHVzZXMpIGlzIG9ubHkgbmVlZGVkIHdoZXJlIGNhbGxfcmN1KCkgL1xuJiM0MzsjIGNhbGxfc3JjdSgpIGNhbiBiZSBpbnZva2VkIHdoaWxlIGEgY2FsbGJhY2stbGlzdCBvcGVyYXRpb24gaXMgaW4gZmxpZ2h0LlxuJiM0Mztjb25maWcgUkNVX0RFRkVSXG4mIzQzO1x0ZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNcbiYjNDM7XHRzZWxlY3QgSVJRX1dPUktcbiYjNDM7XG4gY29uZmlnIFJDVV9GQU5PVVRcbiBcdGludCBcJiMzNDtUcmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgZmFub3V0IHZhbHVlXCYjMzQ7XG4gXHRyYW5nZSAyIDY0IGlmIDY0QklUXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3UuaCBiL2tlcm5lbC9yY3UvcmN1LmhcbmluZGV4IDM5YTlmNmZhOWE3YjIuLjAzNmQyODUxNmU5MmQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3JjdS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3JjdS5oXG5AQCAtNTcyLDYgJiM0Mzs1NzIsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tzX2NibGlzdF9pbml0X2dlbmVyaWModm9pZCkgeyB9XG4gI2RlZmluZSBSQ1VfU0NIRURVTEVSX0lOSVRcdDFcbiAjZGVmaW5lIFJDVV9TQ0hFRFVMRVJfUlVOTklOR1x0MlxuIFxuJiM0MzsvKlxuJiM0MzsgKiBTaG91bGQgYSBjYWxsX3JjdSgpL2NhbGxfc3JjdSgpIGNhbGxiYWNrIGJlIGRlZmVycmVkIHJhdGhlciB0aGFuIGVucXVldWVkXG4mIzQzOyAqIG5vdz8gIERlZmVyIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkOiBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIG1heVxuJiM0MzsgKiBiZSBpbiBmbGlnaHQgb24gdGhpcyBDUFUsIHNvIGVucXVldWluZyBub3cgY291bGQgY29ycnVwdCBpdC4gIEJ1dCBub3Qgd2hpbGVcbiYjNDM7ICogdGhlIHNjaGVkdWxlciBpcyBkb3duIC0tIGVhcmx5IGJvb3QgaXMgc2luZ2xlLXRocmVhZGVkIGFuZCBjYW4gY2FsbCB0aGlzXG4mIzQzOyAqIGJlZm9yZSBpbml0X0lSUSgpIG1ha2VzIGlycV93b3JrIHVzYWJsZSAoZS5nLiByY3VfaW5pdCgpJiMzOTtzIHNlbGYtdGVzdHMpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNob3VsZF9yY3VfZGVmZXIodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlycXNfZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgcmN1X3NjaGVkdWxlcl9hY3RpdmUgIT0gUkNVX1NDSEVEVUxFUl9JTkFDVElWRTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRHJhaW4gYW4gb3V0Z29pbmcgQ1BVJiMzOTtzIGRlZmVycmVkIFNSQ1UgY2FsbGJhY2tzOyBzZWUgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLiAqL1xuJiM0Mzt2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTtcbiYjNDM7XG4gZW51bSByY3V0b3J0dXJlX3R5cGUge1xuIFx0UkNVX0ZMQVZPUixcbiBcdFJDVV9UQVNLU19GTEFWT1IsXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuY1xuaW5kZXggM2QwYjU5YTdiMGIzOC4uYTA2MTAwYjgyMzU5NyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuY1xuQEAgLTQ4LDYgJiM0Mzs0OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGljay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25taS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3JjdS5oXCYjMzQ7XG4gXG5AQCAtMTE1LDYgJiM0MzsxMTYsNyBAQCB0b3J0dXJlX3BhcmFtKGludCwgbGVha3BvaW50ZXIsIDAsIFwmIzM0O0xlYWsgcG9pbnRlciBkZXJlZmVyZW5jZXMgZnJvbSByZWFkZXJzXCYjMzQ7KTtcbiB0b3J0dXJlX3BhcmFtKGludCwgbl9iYXJyaWVyX2NicywgMCwgXCYjMzQ7IyBvZiBjYWxsYmFja3Mva3RocmVhZHMgZm9yIGJhcnJpZXIgdGVzdGluZ1wmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5fdXBfZG93biwgMzIsIFwmIzM0OyMgb2YgY29uY3VycmVudCB1cC9kb3duIGhydGltZXItYmFzZWQgUkNVIHJlYWRlcnNcJiMzNDspO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBuZmFrZXdyaXRlcnMsIDQsIFwmIzM0O051bWJlciBvZiBSQ1UgZmFrZSB3cml0ZXIgdGhyZWFkc1wmIzM0Oyk7XG4mIzQzO3RvcnR1cmVfcGFyYW0oYm9vbCwgbm1pX2NhbGxzLCB0cnVlLCBcJiMzNDtFeGVyY2lzZSAtXHUwMDNlY2FsbCgpIGZyb20gTk1JIG9uIG5taV9jYXBhYmxlIGZsYXZvcnNcJiMzNDspO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBucmVhZGVycywgLTEsIFwmIzM0O051bWJlciBvZiBSQ1UgcmVhZGVyIHRocmVhZHNcJiMzNDspO1xuIHRvcnR1cmVfcGFyYW0oYm9vbCwgbndyaXRlcnMsIDEsIFwmIzM0O051bWJlciBvZiBSQ1Ugd3JpdGVyIHRocmVhZHMgKDAgb3IgMSlcJiMzNDspO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBvYmplY3RfZGVidWcsIDAsIFwmIzM0O0VuYWJsZSBkZWJ1Zy1vYmplY3QgZG91YmxlIGNhbGxfcmN1KCkgdGVzdGluZ1wmIzM0Oyk7XG5AQCAtMjE2LDYgJiM0MzsyMTgsOCBAQCBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0X2ZhaWx1cmU7XG4gc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdHM7XG4gc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV90aW1lcnM7XG4gc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9pcnFzO1xuJiM0MztzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYWxsO1xuJiM0MztzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYjtcbiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfYXR0ZW1wdHM7XG4gc3RhdGljIGxvbmcgbl9iYXJyaWVyX3N1Y2Nlc3NlczsgLyogZGlkIHJjdV9iYXJyaWVyIHRlc3Qgc3VjY2VlZD8gKi9cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBuX3JlYWRfZXhpdHM7XG5AQCAtNDMzLDYgJiM0Mzs0MzcsNyBAQCBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHtcbiBcdGJvb2wgKCppc190YXNrX3JjdV9ib29zdGVkKSh2b2lkKTtcbiBcdGxvbmcgY2JmbG9vZF9tYXg7XG4gXHRpbnQgaXJxX2NhcGFibGU7XG4mIzQzO1x0aW50IG5taV9jYXBhYmxlO1xuIFx0aW50IGNhbl9ib29zdDtcbiBcdGludCBleHRlbmRhYmxlcztcbiBcdGludCBzbG93X2dwcztcbkBAIC02NDYsNiAmIzQzOzY1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHJjdV9vcHMgPSB7XG4gXHQuZXh0ZW5kYWJsZXNcdFx0PSBSQ1VUT1JUVVJFX01BWF9FWFRFTkQsXG4gXHQuZGVidWdfb2JqZWN0c1x0XHQ9IDEsXG4gXHQuc3RhcnRfcG9sbF9pcnFzb2ZmXHQ9IDEsXG4mIzQzO1x0Lm5taV9jYXBhYmxlXHRcdD0gMSxcbiBcdC5uYW1lXHRcdFx0PSBcJiMzNDtyY3VcJiMzNDtcbiB9O1xuIFxuQEAgLTkzNiw2ICYjNDM7OTQyLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdV9vcHMgPSB7XG4gXHQuZGVidWdfb2JqZWN0c1x0PSAxLFxuIFx0LmhhdmVfdXBfZG93blx0PSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpXG4gXHRcdFx0XHQ/IDAgOiBTUkNVX1JFQURfRkxBVk9SX05PUk1BTCB8IFNSQ1VfUkVBRF9GTEFWT1JfRkFTVF9VUERPV04sXG4mIzQzO1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwmIzM0O3NyY3VcJiMzNDtcbiB9O1xuIFxuQEAgLTk5OSw2ICYjNDM7MTAwNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHNyY3VkX29wcyA9IHtcbiBcdC5kZWJ1Z19vYmplY3RzXHQ9IDEsXG4gXHQuaGF2ZV91cF9kb3duXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcbiBcdFx0XHRcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcbiYjNDM7XHQubm1pX2NhcGFibGVcdD0gMSxcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7c3JjdWRcJiMzNDtcbiB9O1xuIFxuQEAgLTEyNjMsNiAmIzQzOzEyNzEsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyB0YXNrc190cmFjaW5nX29wcyA9IHtcbiBcdC5jYmZsb29kX21heFx0PSA1MDAwMCxcbiBcdC5pcnFfY2FwYWJsZVx0PSAxLFxuIFx0LnNsb3dfZ3BzXHQ9IDEsXG4mIzQzO1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwmIzM0O3Rhc2tzLXRyYWNpbmdcJiMzNDtcbiB9O1xuIFxuQEAgLTI2NTMsMTIgJiM0MzsyNjYyLDk3IEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKVxuIFxuIHN0YXRpYyBERUZJTkVfVE9SVFVSRV9SQU5ET01fUEVSQ1BVKHJjdV90b3J0dXJlX3RpbWVyX3JhbmQpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBFeGVyY2lzZSAtXHUwMDNlY2FsbCgpIGZyb20gTk1JIGNvbnRleHQgZm9yIGZsYXZvcnMgdGhhdCBhZHZlcnRpc2UgLVx1MDAzZW5taV9jYXBhYmxlLlxuJiM0MzsgKiBBIHBlci1DUFUgaGFyZHdhcmUgcGVyZiBjb3VudGVyIG92ZXJmbG93cyBpbnRvIGFuIE5NSSAtLSBhIHJlYWwgTk1JIG9uIHg4NixcbiYjNDM7ICogb3IgYSBwc2V1ZG8tTk1JIG9uIGFybTY0IGJvb3RlZCB3aXRoIGlycWNoaXAuZ2ljdjNfcHNldWRvX25taT0xIC0tIGFuZCBpdHNcbiYjNDM7ICogaGFuZGxlciBzdWJtaXRzIG9uZSBwcmVhbGxvY2F0ZWQgY2FsbGJhY2sgdmlhIC1cdTAwM2VjYWxsKCkuICBPbmx5IG9uZSBjYWxsYmFjayBpc1xuJiM0MzsgKiBpbiBmbGlnaHQgYXQgYSB0aW1lIChndWFyZGVkIGJ5IGFuIGF0b21pYyksIHdoaWNoIGF2b2lkcyBhbGxvY2F0aW5nIGluIE5NSVxuJiM0MzsgKiBhbmQgaXMgZW5vdWdoIHRvIGV4ZXJjaXNlIHRoZSBkZWZlcnJhbC4gIFRoaXMgbWlycm9ycyBob3cgQlBGIHByb2dyYW1zIHJlYWNoXG4mIzQzOyAqIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkuICBSZXF1aXJlcyBhIGhhcmR3YXJlIFBNVTsgd2hlbiB0aGUgb3ZlcmZsb3cgaXMgbm90IGFuIE5NSVxuJiM0MzsgKiB0aGUgaGFuZGxlciBkb2VzIG5vdGhpbmcuXG4mIzQzOyAqL1xuJiM0MzsjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0ge1xuJiM0MztcdC50eXBlXHRcdD0gUEVSRl9UWVBFX0hBUkRXQVJFLFxuJiM0MztcdC5jb25maWdcdFx0PSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsXG4mIzQzO1x0LnNpemVcdFx0PSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXG4mIzQzO1x0LnBpbm5lZFx0XHQ9IDEsXG4mIzQzO1x0LmRpc2FibGVkXHQ9IDEsXG4mIzQzO1x0LmZyZXFcdFx0PSAxLFxuJiM0MztcdC5zYW1wbGVfZnJlcVx0PSAxMDAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50ICoqcmN1X3RvcnR1cmVfbm1pX2V2ZW50cztcbiYjNDM7c3RhdGljIHN0cnVjdCByY3VfaGVhZCByY3VfdG9ydHVyZV9ubWlfcmg7XG4mIzQzO3N0YXRpYyBhdG9taWNfdCByY3VfdG9ydHVyZV9ubWlfcmhfaW51c2U7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApXG4mIzQzO3tcbiYjNDM7XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cmN1X3RvcnR1cmVfbm1pX3JoX2ludXNlLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWluX25taSgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmIChjdXJfb3BzLVx1MDAzZWNhbGwgXHUwMDI2XHUwMDI2ICFhdG9taWNfeGNoZyhcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDEpKSB7XG4mIzQzO1x0XHRjdXJfb3BzLVx1MDAzZWNhbGwoXHUwMDI2cmN1X3RvcnR1cmVfbm1pX3JoLCByY3VfdG9ydHVyZV9ubWlfY2IpO1xuJiM0MztcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcbiYjNDM7XHRpbnQgY3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIW5taV9jYWxscyB8fCAhY3VyX29wcy1cdTAwM2VubWlfY2FwYWJsZSB8fCAhY3VyX29wcy1cdTAwM2VjYWxsKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBrY2FsbG9jKG5yX2NwdV9pZHMsIHNpemVvZigqcmN1X3RvcnR1cmVfbm1pX2V2ZW50cyksXG4mIzQzO1x0XHRcdFx0XHQgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7XG4mIzQzO1x0XHRldmVudCA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKFx1MDAyNnJjdV90b3J0dXJlX25taV9hdHRyLCBjcHUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IE5VTEwsIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdywgTlVMTCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGV2ZW50KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRyY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV0gPSBldmVudDtcbiYjNDM7XHRcdHBlcmZfZXZlbnRfZW5hYmxlKGV2ZW50KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuJiM0MztcdFx0aWYgKCFyY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0cGVyZl9ldmVudF9kaXNhYmxlKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7XG4mIzQzO1x0XHRwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7XG4mIzQzO1x0fVxuJiM0MztcdGtmcmVlKHJjdV90b3J0dXJlX25taV9ldmVudHMpO1xuJiM0MztcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzOyNlbHNlIC8qICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkgeyB9XG4mIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpIHsgfVxuJiM0MzsjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUyAqL1xuJiM0MztcbiAvKlxuICAqIFJDVSB0b3J0dXJlIHJlYWRlciBmcm9tIHRpbWVyIGhhbmRsZXIuICBEZXJlZmVyZW5jZXMgcmN1X3RvcnR1cmVfY3VycmVudCxcbiAgKiBpbmNyZW1lbnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgcGlwZWxpbmUgYXJyYXkuICBUaGVcbiAgKiBjb3VudGVyIGluIHRoZSBlbGVtZW50IHNob3VsZCBuZXZlciBiZSBncmVhdGVyIHRoYW4gMSwgb3RoZXJ3aXNlLCB0aGVcbiAgKiBSQ1UgaW1wbGVtZW50YXRpb24gaXMgYnJva2VuLlxuICAqL1xuJiM0MztcbiBzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdW51c2VkKVxuIHtcbiBcdFdBUk5fT05fT05DRSghaW5fc2VydmluZ19zb2Z0aXJxKCkpO1xuQEAgLTMwNDEsNiAmIzQzOzMxMzUsOSBAQCByY3VfdG9ydHVyZV9zdGF0c19wcmludCh2b2lkKVxuIFx0XHRkYXRhX3JhY2Uobl9iYXJyaWVyX2F0dGVtcHRzKSxcbiBcdFx0ZGF0YV9yYWNlKG5fcmN1X3RvcnR1cmVfYmFycmllcl9lcnJvcikpO1xuIFx0cHJfY29udChcJiMzNDtyZWFkLWV4aXRzOiAlbGQgXCYjMzQ7LCBkYXRhX3JhY2Uobl9yZWFkX2V4aXRzKSk7IC8vIFN0YXRpc3RpYy5cbiYjNDM7XHRwcl9jb250KFwmIzM0O25taS1jYWxsczogJWxkIG5taS1jYnM6ICVsZCBcJiMzNDssXG4mIzQzO1x0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxuJiM0MztcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpO1xuIFx0cHJfY29udChcJiMzNDtub2NiLXRvZ2dsZXM6ICVsZDolbGQgXCYjMzQ7LFxuIFx0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fbm9jYl9vZmZsb2FkKSwgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX25vY2JfZGVvZmZsb2FkKSk7XG4gXHRwcl9jb250KFwmIzM0O2dwd3JhcHM6ICVsZFxcblwmIzM0Oywgbl9ncHdyYXBzKTtcbkBAIC00MzE1LDYgJiM0Mzs0NDEyLDggQEAgcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKVxuIFx0XHRrZnJlZShyZWFkZXJfdGFza3MpO1xuIFx0XHRyZWFkZXJfdGFza3MgPSBOVUxMO1xuIFx0fVxuJiM0MztcdC8qIERpc2FibGUgdGhlIHBlcmYgY291bnRlcnMgKGFuZCB0aHVzIHRoZSBOTUkgLVx1MDAzZWNhbGwoKSBmaXJpbmcpIG5vdy4gKi9cbiYjNDM7XHRyY3VfdG9ydHVyZV9ubWlfY2xlYW51cCgpO1xuIFx0a2ZyZWUocmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrKTtcbiBcdHJjdV90b3J0dXJlX3JlYWRlcl9tYmNoayA9IE5VTEw7XG4gXG5AQCAtNDM0NCw2ICYjNDM7NDQ0MywyMCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpXG4gXHRcdHByX2luZm8oXCYjMzQ7JXM6IEludm9raW5nICVwUygpLlxcblwmIzM0OywgX19mdW5jX18sIGN1cl9vcHMtXHUwMDNlY2JfYmFycmllcik7XG4gXHRcdGN1cl9vcHMtXHUwMDNlY2JfYmFycmllcigpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGNiX2JhcnJpZXIoKSBhYm92ZSBkcmFpbmVkIGV2ZXJ5IGRlZmVycmVkIE5NSSAtXHUwMDNlY2FsbCgpIGNhbGxiYWNrLCBzbyB0aGVcbiYjNDM7XHQgKiBjb3VudCBpc3N1ZWQgZnJvbSBOTUkgbXVzdCBlcXVhbCB0aGUgY291bnQgaW52b2tlZDsgYSBtaXNtYXRjaCBtZWFucyBhXG4mIzQzO1x0ICogY2FsbGJhY2sgd2FzIGxvc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCkgIT1cbiYjNDM7XHQgICAgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpIHtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0OyVzOiBOTUkgLVx1MDAzZWNhbGwoKSBsb3N0IGEgY2FsbGJhY2s6IGlzc3VlZCAlbGQgaW52b2tlZCAlbGRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBfX2Z1bmNfXywgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKSxcbiYjNDM7XHRcdFx0IGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpKTtcbiYjNDM7XHRcdGF0b21pY19pbmMoXHUwMDI2bl9yY3VfdG9ydHVyZV9lcnJvcik7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChjdXJfb3BzLVx1MDAzZWNsZWFudXAgIT0gTlVMTClcbiBcdFx0Y3VyX29wcy1cdTAwM2VjbGVhbnVwKCk7XG4gXG5AQCAtNDc3Niw2ICYjNDM7NDg4OSw4IEBAIHJjdV90b3J0dXJlX2luaXQodm9pZClcbiBcdFx0Zmlyc3RlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIHVud2luZDtcbiBcdH1cbiYjNDM7XHQvKiBBcm0gdGhlIHBlci1DUFUgcGVyZiBjb3VudGVycyB0aGF0IGRyaXZlIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkuICovXG4mIzQzO1x0cmN1X3RvcnR1cmVfbm1pX2luaXQoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWFscmVhZGVyczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrW2ldLnJ0Y19jaGtyZHIgPSAtMTtcbiBcdFx0Zmlyc3RlcnIgPSB0b3J0dXJlX2NyZWF0ZV9rdGhyZWFkKHJjdV90b3J0dXJlX3JlYWRlciwgKHZvaWQgKilpLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuaW5kZXggNTU4YmE4ZDMxNmRiNi4uMDNhMDdhMWYzYTMwYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9zcmN1dGlueS5jXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVlbXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbkBAIC00Myw2ICYjNDM7NDQsOCBAQCBzdGF0aWMgaW50IGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIFx0SU5JVF9XT1JLKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3dvcmssIHNyY3VfZHJpdmVfZ3ApO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfd29yay5lbnRyeSk7XG4gXHRpbml0X2lycV93b3JrKFx1MDAyNnNzcC1cdTAwM2VzcmN1X2lycV93b3JrLCBzcmN1X3RpbnlfaXJxX3dvcmspO1xuJiM0MztcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKTtcbiYjNDM7XHRpbml0X2lycV93b3JrKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9pdywgc3JjdV9kZWZlcl9kcmFpbik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjEzLDExICYjNDM7MjE2LDExIEBAIHN0YXRpYyB2b2lkIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIH1cbiBcbiAvKlxuLSAqIEVucXVldWUgYW4gU1JDVSBjYWxsYmFjayBvbiB0aGUgc3BlY2lmaWVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZSxcbi0gKiBpbml0aWF0aW5nIGdyYWNlLXBlcmlvZCBwcm9jZXNzaW5nIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHJ1bm5pbmcuXG4mIzQzOyAqIEVucXVldWUgQHJocCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHNyY3VfZGVmZXJfZHJhaW4oKSB0b1xuJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLlxuICAqL1xuLXZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbi1cdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxuJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuJiM0MztcdFx0XHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuQEAgLTIzMSw2ICYjNDM7MjM0LDM5IEBAIHZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiBcdHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCk7XG4gXHRwcmVlbXB0X2VuYWJsZSgpO1xuIH1cbiYjNDM7XG4mIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X3N0cnVjdCwgZGVmZXJfaXcpO1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlLCAqbmV4dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYWxsYmFja3MgaGF2ZSBubyBtdXR1YWwgb3JkZXJpbmcgZ3VhcmFudGVlIGFuZCBzcmN1X2JhcnJpZXIoKSBoYXNcbiYjNDM7XHQgKiBhbHJlYWR5IGZsdXNoZWQgdXMsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKSkge1xuJiM0MztcdFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbiYjNDM7XG4mIzQzO1x0XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cdTAwM2VmdW5jKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9kZWZlcl9kcmFpbik7XG4mIzQzO1xuJiM0Mzt2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4mIzQzO1x0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7XG4mIzQzO1x0XHRyaHAtXHUwMDNlZnVuYyA9IGZ1bmM7XG4mIzQzO1x0XHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2NicykpXG4mIzQzO1x0XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9pdyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuJiM0MztcbiYjNDM7XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMpO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9zcmN1KTtcbiBcbiAvKlxuQEAgLTI2MCw2ICYjNDM7Mjk2LDE1IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7XG4gXG4mIzQzOy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBmb3IgYWxsIGluLWZsaWdodCBvbmVzLiAqL1xuJiM0Mzt2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiYjNDM7e1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlZGVmZXJfaXcpO1xuJiM0MztcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2JhcnJpZXIpO1xuJiM0MztcbiAvKlxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxuICAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuaW5kZXggMzA0MTEyNjc0ZThhMi4uYjlmZTU3ZmY5MTAwMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXG5AQCAtMjAsNiAmIzQzOzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJjcHUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWVtcHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuQEAgLTc5LDYgJiM0Mzs4MCw0NiBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3NyY3Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBzdGF0aWMgdm9pZCBzcmN1X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqd29yayk7XG4gc3RhdGljIHZvaWQgc3JjdV9kZWxheV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLiAgVGhlIGlycV93b3JrIGlzIGdsb2JhbCAoc2hhcmVkIGJ5IGV2ZXJ5XG4mIzQzOyAqIHNyY3Vfc3RydWN0KSwgc28gaXQgbXVzdCBmaW5kIHdoaWNoIHNyY3Vfc3RydWN0cyBkZWZlcnJlZCBjYWxsYmFja3M6IGFcbiYjNDM7ICogY2FsbGJhY2sgaXMgc3RhZ2VkIG9uIGl0cyBzcmN1X2RhdGEmIzM5O3MgLVx1MDAzZWRlZmVyX2NicywgYW5kIHRoYXQgc3JjdV9kYXRhIGlzXG4mIzQzOyAqIGNoYWluZWQgKC1cdTAwM2VkZWZlcl9saW5rKSBvbnRvIHRoaXMgcGVyLUNQVSAtXHUwMDNlbGlzdCB0aGF0IHRoZSBpcnFfd29yayB3YWxrcy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBzcmN1X2RlZmVyIHtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3RfaGVhZFx0bGlzdDtcbiYjNDM7XHRzdHJ1Y3QgaXJxX3dvcmtcdFx0aXc7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3RcdFx0bG9jaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3JjdV9kZWZlciwgc3JjdV9kZWZlcikgPSB7XG4mIzQzO1x0LmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoc3JjdV9kZWZlci5sb2NrKSxcbiYjNDM7XHQuaXcgPSBJUlFfV09SS19JTklUX0hBUkQoc3JjdV9kZWZlcl9kcmFpbiksXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZWdpc3RlciBwZW5kaW5nIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcyBzbyBhIGZvbGxvd2luZyBzcmN1X2JhcnJpZXIoKVxuJiM0MzsgKiB3YWl0cyBmb3IgdGhlbS4gIEFuIG9ubGluZSBDUFUmIzM5O3Mgb3duIGlycV93b3JrIHJlLWlzc3VlcyBpdHMgY2FsbGJhY2tzLCBzbyB3YWl0XG4mIzQzOyAqIGl0IG91dDsgYW4gb2ZmbGluZSBDUFUmIzM5O3MgaXJxX3dvcmsgbWF5IG5ldmVyIHJ1biBhZ2Fpbiwgc28gZHJhaW4gaXRzIGxpc3RcbiYjNDM7ICogZGlyZWN0bHkgb250byB0aGlzIENQVSBpbnN0ZWFkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9mbHVzaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4mIzQzO1x0XHRpZiAoY3B1X29ubGluZShjcHUpKVxuJiM0MztcdFx0XHRpcnFfd29ya19zeW5jKFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHNyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBJbml0aWFsaXplIFNSQ1UgcGVyLUNQVSBkYXRhLiAgTm90ZSB0aGF0IHN0YXRpY2FsbHkgYWxsb2NhdGVkXG4gICogc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlcyBtaWdodCBhbHJlYWR5IGhhdmUgc3JjdV9yZWFkX2xvY2soKSBhbmRcbkBAIC0xMDcsNiAmIzQzOzE0OCwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3NyY3Vfc3RydWN0X2RhdGEoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRcdHNkcC1cdTAwM2VjcHUgPSBjcHU7XG4gXHRcdElOSVRfV09SSyhcdTAwMjZzZHAtXHUwMDNld29yaywgc3JjdV9pbnZva2VfY2FsbGJhY2tzKTtcbiBcdFx0dGltZXJfc2V0dXAoXHUwMDI2c2RwLVx1MDAzZWRlbGF5X3dvcmssIHNyY3VfZGVsYXlfdGltZXIsIDApO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIC1cdTAwM2VkZWZlcl9jYnMgYW5kIC1cdTAwM2VkZWZlcl9saW5rIGFyZSB2YWxpZCB3aGVuIHplcm9lZCBhbmQgYXJlIG5vdFxuJiM0MztcdFx0ICogcmVpbml0aWFsaXplZCBoZXJlLCBsZXN0IHdlIGNsb2JiZXIgY2FsbGJhY2tzIGEgcmVlbnRyYW50XG4mIzQzO1x0XHQgKiBjYWxsX3NyY3UoKSBhbHJlYWR5IHN0YWdlZC4gIFNlZSBfX2NhbGxfc3JjdSgpLlxuJiM0MztcdFx0ICovXG4gXHRcdHNkcC1cdTAwM2Vzc3AgPSBzc3A7XG4gXHR9XG4gfVxuQEAgLTY5Nyw2ICYjNDM7NzQzLDggQEAgdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIFx0XHRyZXR1cm47IC8qIEp1c3QgbGVhayBpdCEgKi9cbiBcdC8qIFdhaXQgZm9yIGlycV93b3JrIHRvIGZpbmlzaCBmaXJzdCBhcyBpdCBtYXkgcXVldWUgYSBuZXcgd29yay4gKi9cbiBcdGlycV93b3JrX3N5bmMoXHUwMDI2c3VwLVx1MDAzZWlycV93b3JrKTtcbiYjNDM7XHQvKiBEcmFpbiBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIChzaGFyZWQgaXJxX3dvcmspIGJlZm9yZSBmcmVlaW5nIC1cdTAwM2VzZGEuICovXG4mIzQzO1x0c3JjdV9kZWZlcl9mbHVzaCgpO1xuIFx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnN1cC1cdTAwM2V3b3JrKTtcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiBcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwID0gcGVyX2NwdV9wdHIoc3NwLVx1MDAzZXNkYSwgY3B1KTtcbkBAIC0xNDEwLDggJiM0MzsxNDU4LDE4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLFxuICAqIHNyY3VfcmVhZF9sb2NrKCksIGFuZCBzcmN1X3JlYWRfdW5sb2NrKCkgdGhhdCBhcmUgYWxsIHBhc3NlZCB0aGUgc2FtZVxuICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4tXHRcdFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgc3JjdV9jYmxpc3QgYW5kIHRoZSBzcmN1X25vZGUgdHJlZSBhcmUgb25seSBldmVyIGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0c1xuJiM0MzsgKiBkaXNhYmxlZCAoc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKSBlbnF1ZXVlcyB1bmRlciByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSBhbmRcbiYjNDM7ICogbWF5IHdhbGsgdGhlIHRyZWU7IGNhbGxiYWNrIGludm9jYXRpb24gYW5kIGdyYWNlLXBlcmlvZCB3b3JrIGxpa2V3aXNlKS4gIFNvXG4mIzQzOyAqIGxpa2UgY2FsbF9yY3UoKSwgZW5xdWV1aW5nIHdoaWxlIGEgbGlzdCBvcGVyYXRpb24gaXMgaW4gZmxpZ2h0IG9uIHRoaXMgQ1BVXG4mIzQzOyAqIHdvdWxkIGNvcnJ1cHQgaXQgb3IgZGVhZGxvY2sgLS0gZS5nLiBjYWxsX3JjdV90YXNrc190cmFjZSgpLCB3aGljaCBpc1xuJiM0MzsgKiBjYWxsX3NyY3UoKSBvbiBhIGRlZGljYXRlZCBzcmN1X3N0cnVjdCwgZnJvbSBhIEJQRiBwcm9ncmFtLiAgX19jYWxsX3NyY3UoKVxuJiM0MzsgKiBkZWZlcnMgd2hlbmV2ZXIgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIHZpYSBhIHBlci1DUFUgaXJxX3dvcms7IG9ubHkga2VybmVsc1xuJiM0MzsgKiB3aGVyZSB0aGF0IGNhbiBoYXBwZW4gKENPTkZJR19SQ1VfREVGRVIpIG5lZWQgdGhpcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHNyY3VfZG9fZW5xdWV1ZShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4mIzQzO1x0XHRcdCAgICByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXG4ge1xuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHJocCkpIHtcbiBcdFx0LyogUHJvYmFibGUgZG91YmxlIGNhbGxfc3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4gKi9cbkBAIC0xNDIzLDYgJiM0MzsxNDgxLDcyIEBAIHN0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiBcdCh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiYjNDM7XHRcdFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuJiM0MztcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwID0gdGhpc19jcHVfcHRyKHNzcC1cdTAwM2VzZGEpO1xuJiM0MztcbiYjNDM7XHRcdHJocC1cdTAwM2VmdW5jID0gZnVuYztcbiYjNDM7XHRcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopcmhwLCBcdTAwMjZzZHAtXHUwMDNlZGVmZXJfY2JzKSkge1xuJiM0MztcdFx0XHQvKiBGaXJzdCBkZWZlcnJhbCBvbiB0aGlzIHNyY3VfZGF0YTogY2hhaW4gaXQgZm9yIHRoZSBkcmFpbi4gKi9cbiYjNDM7XHRcdFx0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSB0aGlzX2NwdV9wdHIoXHUwMDI2c3JjdV9kZWZlcik7XG4mIzQzO1xuJiM0MztcdFx0XHRzZHAtXHUwMDNlc3NwID0gc3NwO1xuJiM0MztcdFx0XHRpZiAobGxpc3RfYWRkKFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9saW5rLCBcdTAwMjZzbmRwLVx1MDAzZWxpc3QpKVxuJiM0MztcdFx0XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnNuZHAtXHUwMDNlaXcpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXHUwMDI2XHUwMDI2IGluX25taSgpKTtcbiYjNDM7XG4mIzQzO1x0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jLCBkb19ub3JtKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmUtaXNzdWUgdGhpcyBDUFUmIzM5O3MgZGVmZXJyZWQgY2FsbGJhY2tzLCBnb2luZyBzdHJhaWdodCB0byBzcmN1X2RvX2VucXVldWUoKSBzb1xuJiM0MzsgKiB0aGV5IGNhbm5vdCBkZWZlciBhZ2Fpbi4gIFRoZSBpcnFfd29yayB3YWxrcyBpdHMgLVx1MDAzZWxpc3Qgb2Ygc3JjdV9kYXRhLCBlYWNoXG4mIzQzOyAqIGNhcnJ5aW5nIGl0cyBvd24gLVx1MDAzZWRlZmVyX2Nicy4gIC1cdTAwM2Vsb2NrIGlzIGhlbGQgYWNyb3NzIHRoZSBkcmFpbiBzbyBkcmFpbmVyc1xuJiM0MzsgKiAoaXJxX3dvcmssIHNyY3VfZGVmZXJfZmx1c2goKSBhbmQgc3JjdV9vZmZsaW5lX2RyYWluKCkpIHNlcmlhbGl6ZSBhbmQgbmV2ZXJcbiYjNDM7ICogbGVhdmUgYSBjYWxsYmFjayBvZmYgdGhlIGxpc3RzIHlldCBub3Qgb24gYSBjYWxsYmFjayBsaXN0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X2RlZmVyLCBpdyk7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKnNub2RlLCAqc25leHQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNuZHAtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX3NhZmUoc25vZGUsIHNuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnNuZHAtXHUwMDNlbGlzdCkpIHtcbiYjNDM7XHRcdHN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IGNvbnRhaW5lcl9vZihzbm9kZSwgc3RydWN0IHNyY3VfZGF0YSwgZGVmZXJfbGluayk7XG4mIzQzO1x0XHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCA9IHNkcC1cdTAwM2Vzc3A7XG4mIzQzO1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqY25vZGUsICpjbmV4dDtcbiYjNDM7XG4mIzQzO1x0XHRjbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2c2RwLVx1MDAzZWRlZmVyX2Nicyk7XG4mIzQzO1x0XHRsbGlzdF9mb3JfZWFjaF9zYWZlKGNub2RlLCBjbmV4dCwgY25vZGUpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopY25vZGU7XG4mIzQzO1xuJiM0MztcdFx0XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cdTAwM2VmdW5jLCB0cnVlKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c25kcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERyYWluIEBjcHUmIzM5O3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzOyBjYWxsZWQgZnJvbVxuJiM0MzsgKiByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkgb25jZSBAY3B1IGlzIGRlYWQuICBPbmUgcGFzcyBjb3ZlcnMgZXZlcnlcbiYjNDM7ICogc3JjdV9zdHJ1Y3QsIGFzIHRoZSBwZXItQ1BVIHNyY3VfZGVmZXIgbGlzdCBjaGFpbnMgdGhlbSBhbGwsIGFuZCB0aGVcbiYjNDM7ICogcmUtaXNzdWUgbGFuZHMgb24gdGhlIGN1cnJlbnQgQ1BVJiMzOTtzIHNyY3VfZGF0YS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0c3JjdV9kZWZlcl9kcmFpbihcdTAwMjZwZXJfY3B1KHNyY3VfZGVmZXIsIGNwdSkuaXcpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGNhbGxfc3JjdSgpIC0gUXVldWUgYSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhbiBTUkNVIGdyYWNlIHBlcmlvZFxuICAqIEBzc3A6IHNyY3Vfc3RydWN0IGluIHF1ZXVlIHRoZSBjYWxsYmFja1xuQEAgLTE2NzcsOSAmIzQzOzE4MDEsMTcgQEAgdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4ge1xuIFx0aW50IGNwdTtcbiBcdGludCBpZHg7XG4tXHR1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcztcbiBcbiBcdGNoZWNrX2luaXRfc3JjdV9zdHJ1Y3Qoc3NwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAgVGhlXG4mIzQzO1x0ICogc2hhcmVkIGlycV93b3JrIG1heSBhbHNvIGRyYWluIG90aGVyIHNyY3Vfc3RydWN0cyYjMzk7LCB3aGljaCBpcyBoYXJtbGVzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcmN1X2RlZmVyX2ZsdXNoKCk7XG4mIzQzO1xuJiM0MztcdHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZzc3AtXHUwMDNlc3JjdV9zdXAtXHUwMDNlc3JjdV9iYXJyaWVyX211dGV4KTtcbiBcdGlmIChyY3Vfc2VxX2RvbmUoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEsIHMpKSB7XG4gXHRcdHNtcF9tYigpOyAvKiBGb3JjZSBvcmRlcmluZyBmb2xsb3dpbmcgcmV0dXJuLiAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdGlueS5jIGIva2VybmVsL3JjdS90aW55LmNcbmluZGV4IGRjY2NjZDZiZTk0MTEuLjcxMjQ5ZWFjNjEwMjEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RpbnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90aW55LmNcbkBAIC0xMSw2ICYjNDM7MTEsOCBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuQEAgLTQyLDggJiM0Mzs0NCw4MyBAQCBzdGF0aWMgc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9jdHJsYmxrID0ge1xuIFx0LmdwX3NlcVx0XHQ9IDAgLSAzMDBVTCxcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGV2ZXIgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICh0aGlzXG4mIzQzOyAqIGVucXVldWUsIGNhbGxiYWNrIGludm9jYXRpb24sIGdyYWNlLXBlcmlvZCB3b3JrKSwgc28gZW5xdWV1aW5nIHdoaWxlIGEgbGlzdFxuJiM0MzsgKiBvcGVyYXRpb24gaXMgaW4gZmxpZ2h0IHdvdWxkIGNvcnJ1cHQgaXQuICBEZWZlciB3aGVuZXZlciBpbnRlcnJ1cHRzIGFyZVxuJiM0MzsgKiBkaXNhYmxlZDogdGhlIGNhbGxiYWNrIGdvZXMgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXQgYW4gaXJxX3dvcmsgcmUtaXNzdWVzXG4mIzQzOyAqIGxhdGVyLiAgT25lIGdsb2JhbCBsaXN0IGFuZCBpcnFfd29yayBzdWZmaWNlLCBhcyBUaW55IFJDVSBpcyB1bmlwcm9jZXNzb3IuXG4mIzQzOyAqIE9ubHkga2VybmVscyB3aGVyZSB0aGF0IGNhbiBoYXBwZW4gKENPTkZJR19SQ1VfREVGRVIpIG5lZWQgdGhpcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcbiYjNDM7c3RhdGljIExMSVNUX0hFQUQocmN1X2RlZmVyX2xpc3QpO1xuJiM0MztzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHJjdV9kZWZlcl9pdywgcmN1X2RlZmVyX2RyYWluKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEVucXVldWUgQGhlYWQgb24gdGhlIGNhbGxiYWNrIGxpc3QuICBBbHNvIGNhbGxlZCBieSByY3VfZGVmZXJfZHJhaW4oKSB0b1xuJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xuJiM0MztcdFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmRvdWJsZWZyZWVzKSBcdTAwM2MgNCkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7JXMoKTogRG91YmxlLWZyZWVkIENCICVwLVx1MDAzZSVwUygpISEhICBcJiMzNDssIF9fZnVuY19fLCBoZWFkLCBoZWFkLVx1MDAzZWZ1bmMpO1xuJiM0MztcdFx0XHRtZW1fZHVtcF9vYmooaGVhZCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoZWFkLVx1MDAzZWZ1bmMgPSBmdW5jO1xuJiM0MztcdGhlYWQtXHUwMDNlbmV4dCA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHQqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7XG4mIzQzO1x0cmN1X2N0cmxibGsuY3VydGFpbCA9IFx1MDAyNmhlYWQtXHUwMDNlbmV4dDtcbiYjNDM7XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShpc19pZGxlX3Rhc2soY3VycmVudCkpKSB7XG4mIzQzO1x0XHQvKiBmb3JjZSBzY2hlZHVsaW5nIGZvciByY3VfcXMoKSAqL1xuJiM0MztcdFx0cmVzY2hlZF9jcHUoMCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlLCAqbmV4dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYWxsYmFja3MgaGF2ZSBubyBtdXR1YWwgb3JkZXJpbmcgZ3VhcmFudGVlIGFuZCByY3VfYmFycmllcigpIGhhc1xuJiM0MztcdCAqIGFscmVhZHkgZmx1c2hlZCB1cywgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnJjdV9kZWZlcl9saXN0KSkge1xuJiM0MztcdFx0c3RydWN0IHJjdV9oZWFkICpoZWFkID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7XG4mIzQzO1xuJiM0MztcdFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cdTAwM2VmdW5jKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiYjNDM7e1xuJiM0MztcdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4mIzQzO1x0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCBcdTAwMjZyY3VfZGVmZXJfbGlzdCkpXG4mIzQzO1x0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZyY3VfZGVmZXJfaXcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlycV93b3JrX3N5bmMoXHUwMDI2cmN1X2RlZmVyX2l3KTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG4ge1xuJiM0MztcdC8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgZmlyc3QuICovXG4mIzQzO1x0cmN1X2RlZmVyX2ZsdXNoKCk7XG4gXHR3YWl0X3JjdV9ncChjYWxsX3JjdV9odXJyeSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpO1xuQEAgLTE1NywyOSAmIzQzOzIzNCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3UpO1xuICAqL1xuIHZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxuIHtcbi1cdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHtcbi1cdFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmRvdWJsZWZyZWVzKSBcdTAwM2MgNCkge1xuLVx0XHRcdHByX2VycihcJiMzNDslcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtXHUwMDNlJXBTKCkhISEgIFwmIzM0OywgX19mdW5jX18sIGhlYWQsIGhlYWQtXHUwMDNlZnVuYyk7XG4tXHRcdFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xuLVx0XHR9XG4mIzQzO1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuJiM0MztcdFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4tXHRoZWFkLVx1MDAzZW5leHQgPSBOVUxMO1xuLVxuLVx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuLVx0KnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkO1xuLVx0cmN1X2N0cmxibGsuY3VydGFpbCA9IFx1MDAyNmhlYWQtXHUwMDNlbmV4dDtcbi1cdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiYjNDM7XHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuIFxuLVx0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcbi1cdFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cbi1cdFx0cmVzY2hlZF9jcHUoMCk7XG4tXHR9XG4mIzQzO1x0cmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuYyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5pbmRleCA2MmJmMmJmNTUxZjQ5Li43ZDBhZTk0YmRmMzlmIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvZGVidWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25taS5oXHUwMDNlXG5AQCAtMzE0OCwyMSAmIzQzOzMxNDksMjcgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2Jfb3ZsZChzdHJ1Y3QgcmN1X2RhdGEgKnJkcClcbiBcdHJhd19zcGluX3VubG9ja19yY3Vfbm9kZShybnApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZFxuLV9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGV2ZXIgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIChlbnF1ZXVlLFxuJiM0MzsgKiBjYWxsYmFjayBpbnZvY2F0aW9uLCBncmFjZS1wZXJpb2Qgd29yaykuICBBIGNhbGxfcmN1KCkgd2l0aCBpbnRlcnJ1cHRzIGFscmVhZHlcbiYjNDM7ICogZGlzYWJsZWQgbWF5IGludGVycnVwdCBvbmUgb2YgdGhvc2UsIHNvIF9fY2FsbF9yY3VfY29tbW9uKCkgZGVmZXJzOiB0aGVcbiYjNDM7ICogY2FsbGJhY2sgaXMgc3RhZ2VkIG9uIGEgcGVyLUNQVSBsbGlzdCB0aGF0IGFuIGlycV93b3JrIHJlLWlzc3VlcyBvbmNlXG4mIzQzOyAqIGludGVycnVwdHMgYXJlIG9uLiAgT25seSBDT05GSUdfUkNVX0RFRkVSIGtlcm5lbHMgY2FuIGhpdCB0aGlzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRW5xdWV1ZSBAaGVhZCBvbiB0aGlzIENQVSYjMzk7cyByY3Vfc2VnY2JsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKClcbiYjNDM7ICogdG8gcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsXG4mIzQzOyAqIGNvbmRpdGlvbi4gIEVpdGhlciBjYWxsZXIgbWF5IGhhdmUgaW50ZXJydXB0cyBhbHJlYWR5IGRpc2FibGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4ge1xuIFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGJvb2wgbGF6eTtcbiBcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xuIFxuLVx0LyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi9cbi1cdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XG4tXG4tXHQvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFByb2JhYmxlIGRvdWJsZSBjYWxsX3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay5cbkBAIC0zMjA2LDYgJiM0MzszMjEzLDgzIEBAIF9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuIFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUmUtaXNzdWUgZGVmZXJyZWQgY2FsbGJhY2tzLCBnb2luZyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdFxuJiM0MzsgKiBkZWZlciBhZ2Fpbi4gIGRlZmVyX2xvY2sgaXMgaGVsZCBhY3Jvc3MgbGxpc3RfZGVsX2FsbCgpIGFuZCB0aGUgcmUtaXNzdWUgc29cbiYjNDM7ICogdGhlIGRyYWluZXJzIC0tIHRoaXMgQ1BVJiMzOTtzIGlycV93b3JrLCByY3VfZGVmZXJfZmx1c2goKSBhbmRcbiYjNDM7ICogcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpIC0tIHNlcmlhbGl6ZSBhbmQgbmV2ZXIgbGVhdmUgYSBjYWxsYmFjayBvZmZcbiYjNDM7ICogLVx1MDAzZWRlZmVyX2hlYWQgeWV0IG5vdCBvbiBhIGNhbGxiYWNrIGxpc3QuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gY29udGFpbmVyX29mKGl3LCBzdHJ1Y3QgcmN1X2RhdGEsIGRlZmVyX3dvcmspO1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlLCAqbmV4dDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2hlYWQpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbiYjNDM7XG4mIzQzO1x0XHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBoZWFkLVx1MDAzZWZ1bmMsIGZhbHNlKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU3RhZ2UgQGhlYWQgZm9yIHRoaXMgQ1BVJiMzOTtzIGlycV93b3JrIHdoZW4gY2FsbF9yY3UoKSBjYW5ub3QgZW5xdWV1ZSBub3cuICovXG4mIzQzO3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gdGhpc19jcHVfcHRyKFx1MDAyNnJjdV9kYXRhKTtcbiYjNDM7XG4mIzQzO1x0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbiYjNDM7XHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSlcbiYjNDM7XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl93b3JrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3MgaW50byB0aGUgY2FsbGJhY2sgbGlzdHMgc28gYSBmb2xsb3dpbmdcbiYjNDM7ICogcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gIFRoaXMgcnVucyBiZWZvcmUgcmN1X2JhcnJpZXIoKSBzY2FucyB0aGVcbiYjNDM7ICogbGlzdHMuICBBbiBvbmxpbmUgQ1BVJiMzOTtzIG93biBpcnFfd29yayByZS1pc3N1ZXMgaXRzIGNhbGxiYWNrcywgc28gd2FpdCBpdCBvdXQ7XG4mIzQzOyAqIGFuIG9mZmxpbmUgQ1BVJiMzOTtzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4sIHNvIGRyYWluIGl0cyBsaXN0IGRpcmVjdGx5XG4mIzQzOyAqIG9udG8gdGhpcyBDUFUgaW5zdGVhZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKFx1MDAyNnJjdV9kYXRhLCBjcHUpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjcHVfb25saW5lKGNwdSkpXG4mIzQzO1x0XHRcdGlycV93b3JrX3N5bmMoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7X19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4mIzQzO3tcbiYjNDM7XHQvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqL1xuJiM0MztcdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XG4mIzQzO1xuJiM0MztcdC8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi9cbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuJiM0MztcdFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuJiM0MztcbiYjNDM7XHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBmdW5jLCBsYXp5X2luKTtcbiYjNDM7fVxuJiM0MztcbiAjaWZkZWYgQ09ORklHX1JDVV9MQVpZXG4gc3RhdGljIGJvb2wgZW5hYmxlX3JjdV9sYXp5IF9fcmVhZF9tb3N0bHkgPSAhSVNfRU5BQkxFRChDT05GSUdfUkNVX0xBWllfREVGQVVMVF9PRkYpO1xuIG1vZHVsZV9wYXJhbShlbmFibGVfcmN1X2xhenksIGJvb2wsIDA0NDQpO1xuQEAgLTM4OTYsOCAmIzQzOzM5ODAsMTIgQEAgdm9pZCByY3VfYmFycmllcih2b2lkKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHVuc2lnbmVkIGxvbmcgZ3NlcTtcbiBcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xuLVx0dW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnJjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHM7XG4mIzQzO1xuJiM0MztcdC8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgYmVmb3JlIHNuYXBzaG90dGluZyB0aGUgc2VxdWVuY2UuICovXG4mIzQzO1x0cmN1X2RlZmVyX2ZsdXNoKCk7XG4gXG4mIzQzO1x0cyA9IHJjdV9zZXFfc25hcChcdTAwMjZyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7XG4gXHRyY3VfYmFycmllcl90cmFjZShUUFMoXCYjMzQ7QmVnaW5cJiMzNDspLCAtMSwgcyk7XG4gXG4gXHQvKiBUYWtlIG11dGV4IHRvIHNlcmlhbGl6ZSBjb25jdXJyZW50IHJjdV9iYXJyaWVyKCkgcmVxdWVzdHMuICovXG5AQCAtNDIzMSw2ICYjNDM7NDMxOSwxMCBAQCByY3VfYm9vdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpXG4gXHRyZHAtXHUwMDNlcmN1X29ubF9ncF9zdGF0ZSA9IFJDVV9HUF9DTEVBTkVEO1xuIFx0cmRwLVx1MDAzZWxhc3Rfc2NoZWRfY2xvY2sgPSBqaWZmaWVzO1xuIFx0cmRwLVx1MDAzZWNwdSA9IGNwdTtcbiYjNDM7XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2hlYWQpO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jayk7XG4mIzQzO1x0LyogSGFyZCBpcnFfd29yayBzbyB0aGUgcmUtaXNzdWUgcnVucyBwcm9tcHRseS4gKi9cbiYjNDM7XHRyZHAtXHUwMDNlZGVmZXJfd29yayA9IElSUV9XT1JLX0lOSVRfSEFSRChyY3VfZGVmZXJfZHJhaW4pO1xuIFx0cmN1X2Jvb3RfaW5pdF9ub2NiX3BlcmNwdV9kYXRhKHJkcCk7XG4gfVxuIFxuQEAgLTQ1MjgsNiAmIzQzOzQ2MjAsMTYgQEAgdm9pZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKGludCBjcHUpXG4gXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKFx1MDAyNnJjdV9kYXRhLCBjcHUpO1xuIFx0Ym9vbCBuZWVkd2FrZTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENhbGxiYWNrcyB0aGUgb3V0Z29pbmcgQ1BVIGRlZmVycmVkIGxhdGUgaW4gdGhlIG9mZmxpbmUgcGF0aCAocGFzdCB0aGVcbiYjNDM7XHQgKiBwb2ludCBpdHMgaXJxX3dvcmsgY2FuIHJ1bikgc2l0IG9uIC1cdTAwM2VkZWZlcl9oZWFkLCB3aGljaCB0aGUgLVx1MDAzZWNibGlzdFxuJiM0MztcdCAqIG1pZ3JhdGlvbiBiZWxvdyBkb2VzIG5vdCBjb3Zlci4gIERyYWluIHRoZW0gaGVyZSwgYmVmb3JlIHRoZSBlYXJseVxuJiM0MztcdCAqIHJldHVybnM7IHRoZSByZS1pc3N1ZSBsYW5kcyBvbiB0aGlzIENQVS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuJiM0MztcdC8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJiMzOTtzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcy4gKi9cbiYjNDM7XHRzcmN1X29mZmxpbmVfZHJhaW4oY3B1KTtcbiYjNDM7XG4gXHRpZiAocmN1X3JkcF9pc19vZmZsb2FkZWQocmRwKSlcbiBcdFx0cmV0dXJuO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5oIGIva2VybmVsL3JjdS90cmVlLmhcbmluZGV4IDliODVlZWFhMDA3MWEuLjQxYzJiMjBmMGM4M2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90cmVlLmhcbkBAIC0yMjksNiAmIzQzOzIyOSwxMSBAQCBzdHJ1Y3QgcmN1X2RhdGEge1xuIFx0c3RydWN0IHJjdV9oZWFkIGJhcnJpZXJfaGVhZDtcbiBcdGludCBleHBfd2F0Y2hpbmdfc25hcDtcdFx0LyogRG91YmxlLWNoZWNrIG5lZWQgZm9yIElQSS4gKi9cbiBcbiYjNDM7XHQvKiBEZWZlcnJhbCBvZiBhbiBOTUkvcmVlbnRyYW50IGNhbGxfcmN1KCk7IHNlZSBfX2NhbGxfcmN1X2NvbW1vbigpLiAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2hlYWQ7XG4mIzQzO1x0c3RydWN0IGlycV93b3JrIGRlZmVyX3dvcms7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3QgZGVmZXJfbG9jaztcbiYjNDM7XG4gXHQvKiA1KSBDYWxsYmFjayBvZmZsb2FkaW5nLiAqL1xuICNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVXG4gXHRzdHJ1Y3Qgc3dhaXRfcXVldWVfaGVhZCBub2NiX2NiX3dxOyAvKiBGb3Igbm9jYiBrdGhyZWFkcyB0byBzbGVlcCBvbi4gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY2ZWNkOTNiZTMwZjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmNcbkBAIC0wLDAgJiM0MzsxLDU4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIEV4ZXJjaXNlIHJlLWVudHJ5IGludG8gY2FsbF9zcmN1KCkgZnJvbSBCUEY7IHNlZSBwcm9ncy9yY3VfcmVlbnRyeS5jLiAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cmN1X3JlZW50cnkuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHN5c19waWRmZF9vcGVuKHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN5c2NhbGwoX19OUl9waWRmZF9vcGVuLCBwaWQsIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3JjdV9yZWVudHJ5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmN1X3JlZW50cnkgKnNrZWw7XG4mIzQzO1x0aW50IGVyciwgcGlkZmQgPSAtMSwgbWFwX2ZkO1xuJiM0MztcdF9fdTY0IHZhbCA9IDE7XG4mIzQzO1x0Y3B1X3NldF90IHNldDtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHJjdV9yZWVudHJ5X19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IHJjdV9yZWVudHJ5X19hdHRhY2goc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtza2VsX2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCB0aGUgcmUtZW50cnkgb24gYSBzaW5nbGUgQ1BVLiAqL1xuJiM0MztcdENQVV9aRVJPKFx1MDAyNnNldCk7XG4mIzQzO1x0Q1BVX1NFVCgwLCBcdTAwMjZzZXQpO1xuJiM0MztcdGlmIChzY2hlZF9zZXRhZmZpbml0eSgwLCBzaXplb2Yoc2V0KSwgXHUwMDI2c2V0KSlcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDtzY2hlZF9zZXRhZmZpbml0eVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHBpZGZkID0gc3lzX3BpZGZkX29wZW4oZ2V0cGlkKCksIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKHBpZGZkLCAwLCBcJiMzNDtwaWRmZF9vcGVuXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy50YXNrX3N0Zyk7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkLCBcdTAwMjZ2YWwsIEJQRl9OT0VYSVNUKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2Jvb3RfY3JlYXRlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBBcm0gdGhlIGhhbmRsZXIgZm9yIHRoaXMgdGhyZWFkLCB0aGVuIHRyaWdnZXIgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF9kZWxldGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkKTtcbiYjNDM7XHRBU1NFUlRfT0soZXJyLCBcJiMzNDtib290X2RlbGV0ZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgVHJlZSBTUkNVIGVucXVldWVzIHZpYSByY3Vfc2VnY2JsaXN0X2VucXVldWUoKTsgc2tpcCBlbHNld2hlcmUuICovXG4mIzQzO1x0aWYgKCFza2VsLVx1MDAzZWJzcy1cdTAwM2VoaXRzKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlZW50ZXJlZCwgMSwgXCYjMzQ7cmVlbnRyeV9kZWZlcnJlZFwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAocGlkZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UocGlkZmQpO1xuJiM0MztcdHJjdV9yZWVudHJ5X19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ5MmE5MjdmZjUxYzBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jXG5AQCAtMCwwICYjNDM7MSw0NSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBSZS1lbnRlciBjYWxsX3NyY3UoKSBmcm9tIGEgQlBGIHByb2dyYW0uICBmZW50cnkgb24gcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKClcbiYjNDM7ICogZmlyZXMgaW5zaWRlIGNhbGxfc3JjdSgpJiMzOTtzIGVucXVldWUgKHJlYWNoZWQgZnJvbSBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZCgpXG4mIzQzOyAqIHdpdGggdGhlIHNyY3VfZGF0YSAtXHUwMDNlbG9jayBoZWxkKTsgdGhlIGhhbmRsZXIgdGhlbiBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpXG4mIzQzOyAqIC0tIGl0c2VsZiBjYWxsX3NyY3UoKSBvbiByY3VfdGFza3NfdHJhY2Vfc3JjdV9zdHJ1Y3QgLS0gcmUtZW50ZXJpbmcgdGhlIHNhbWVcbiYjNDM7ICogc3JjdV9kYXRhIG9uIHRoZSBzYW1lIENQVS5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9UQVNLX1NUT1JBR0UpO1xuJiM0MztcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuJiM0Mzt9IHRhc2tfc3RnIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztpbnQgdGFyZ2V0X3BpZDtcbiYjNDM7aW50IGhpdHM7XG4mIzQzO2ludCByZWVudGVyZWQ7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L3JjdV9zZWdjYmxpc3RfZW5xdWV1ZVwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHJlZW50ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlZW50ZXJlZCB8fCAhdGFyZ2V0X3BpZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjdXIgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRpZiAoIWN1ciB8fCBjdXItXHUwMDNlcGlkICE9IHRhcmdldF9waWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogUmUtZW50ZXIgdmlhIGEgdGFzay1zdG9yYWdlIGRlbGV0ZSwgd2hpY2ggY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cbiYjNDM7XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZoaXRzLCAxKTtcbiYjNDM7XHRicGZfdGFza19zdG9yYWdlX2dldChcdTAwMjZ0YXNrX3N0ZywgY3VyLCAwLCBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpO1xuJiM0MztcdGJwZl90YXNrX3N0b3JhZ2VfZGVsZXRlKFx1MDAyNnRhc2tfc3RnLCBjdXIpO1xuJiM0MztcbiYjNDM7XHRyZWVudGVyZWQgPSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tQUk9CRVMmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDssCiAgICAmIzM0O1RSQUNFUE9JTlRTJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O1JDVV9UT1JUVVJFX1RFU1QmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyY3VfYmFycmllciYjMzQ7LAogICAgJiMzNDtzcmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7cmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtzcmN1X29mZmxpbmVfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmFsIG1lY2hhbmlzbSBmb3IgY2FsbF9yY3UoKSBhbmQgY2FsbF9zcmN1KCkgdG8gc2FmZWx5IGhhbmRsZSBjYWxsYmFjayBlbnF1ZXVlcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkIChlLmcuLCBmcm9tIE5NSXMgb3IgQlBGIHByb2dyYW1zKS4gSXQgYWRkcyBsb2NrbGVzcyBsaXN0cyBhbmQgaXJxX3dvcmsgdG8gZGVmZXIgdGhlIGFjdHVhbCBlbnF1ZXVlIHVudGlsIGl0IGlzIHNhZmUuIEl0IGFsc28gdXBkYXRlcyByY3VfYmFycmllcigpLCBzcmN1X2JhcnJpZXIoKSwgYW5kIENQVSBob3RwbHVnIHBhdGhzIHRvIGZsdXNoIHRoZXNlIGRlZmVycmVkIGNhbGxiYWNrcy4gQWRkaXRpb25hbGx5LCBpdCBhZGRzIE5NSSB0ZXN0aW5nIHRvIHJjdXRvcnR1cmUgdXNpbmcgcGVyZiBldmVudHMsIGFuZCBhIEJQRiBzZWxmdGVzdC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgUkNVIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiBGb2N1cyBzeW1ib2xzIGluY2x1ZGUgdGhlIGJhcnJpZXIgYW5kIENQVSBvZmZsaW5lIGZ1bmN0aW9ucyB0aGF0IGRyYWluIHRoZSBuZXcgZGVmZXJyZWQgbGlzdHMuIFJlcXVpcmVkIGNvbmZpZ3MgaW5jbHVkZSBLUFJPQkVTL0ZVTkNUSU9OX1RSQUNFUi9UUkFDRVBPSU5UUyB0byBlbmFibGUgQ09ORklHX1JDVV9ERUZFUiwgUEVSRl9FVkVOVFMgYW5kIFJDVV9UT1JUVVJFX1RFU1QgZm9yIHRoZSByY3V0b3J0dXJlIGNoYW5nZXMsIGFuZCBCUEZfU1lTQ0FMTCBhcyBCUEYgaXMgYSBwcmltYXJ5IHRyaWdnZXIgZm9yIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNlZjM2NzQyYjE3YmViMGU3MzQ2YjU4ZjUxOGJhN2U4NmE3NjY3NDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAwMToxNDozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaAppbmRleCBmYmNmMTNiYzEyZDE1Li40NzI3NWQxODI5NjZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogI2RlZmluZSBfTElOVVhfU1JDVV9USU5ZX0gKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrX3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3dhaXQuaCZndDsKIAogc3RydWN0IHNyY3Vfc3RydWN0IHsKQEAgLTI2LDYgJiM0MzsyNyw4IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7CiAJc3RydWN0IHJjdV9oZWFkICoqc3JjdV9jYl90YWlsOwkvKiBQZW5kaW5nIGNhbGxiYWNrczogVGFpbC4gKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3JjdV93b3JrOwkvKiBGb3IgZHJpdmluZyBncmFjZSBwZXJpb2RzLiAqLwogCXN0cnVjdCBpcnFfd29yayBzcmN1X2lycV93b3JrOwkvKiBEZWZlciBzY2hlZHVsZV93b3JrKCkgdG8gaXJxIHdvcmsuICovCiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NiczsJLyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqLwomIzQzOwlzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfaXc7CQkvKiBSZWdpc3RlcnMgZGVmZXJfY2JzIGxhdGVyLiAqLwogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCiAJc3RydWN0IGxvY2tkZXBfbWFwIGRlcF9tYXA7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCkBAIC0zMyw2ICYjNDM7MzYsNyBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgewogCiB2b2lkIHNyY3VfZHJpdmVfZ3Aoc3RydWN0IHdvcmtfc3RydWN0ICp3cCk7CiB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTsKJiM0Mzt2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppcnFfd29yayk7CiAKICNkZWZpbmUgX19TUkNVX1NUUlVDVF9JTklUKG5hbWUsIF9faWdub3JlZCwgX19faWdub3JlZCwgX19fX2lnbm9yZWQpCVwKIHsJCQkJCQkJCQlcCkBAIC00MCw2ICYjNDM7NDQsOCBAQCB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTsKIAkuc3JjdV9jYl90YWlsID0gJmFtcDtuYW1lLnNyY3VfY2JfaGVhZCwJCQkJXAogCS5zcmN1X3dvcmsgPSBfX1dPUktfSU5JVElBTElaRVIobmFtZS5zcmN1X3dvcmssIHNyY3VfZHJpdmVfZ3ApLAlcCiAJLnNyY3VfaXJxX3dvcmsgPSB7IC5mdW5jID0gc3JjdV90aW55X2lycV93b3JrIH0sCQlcCiYjNDM7CS5kZWZlcl9jYnMgPSBMTElTVF9IRUFEX0lOSVQobmFtZS5kZWZlcl9jYnMpLAkJCVwKJiM0MzsJLmRlZmVyX2l3ID0geyAuZnVuYyA9IHNyY3VfZGVmZXJfZHJhaW4gfSwJCQkJXAogCV9fU1JDVV9ERVBfTUFQX0lOSVQobmFtZSkJCQkJCVwKIH0KIApAQCAtMTMxLDEwICYjNDM7MTM3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogCXN5bmNocm9uaXplX3NyY3Uoc3NwKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKLXsKLQlzeW5jaHJvbml6ZV9zcmN1KHNzcCk7Ci19CiYjNDM7dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3JjdV9leHBlZGl0ZV9jdXJyZW50KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKSB7IH0KICNkZWZpbmUgc3JjdV9jaGVja19yZWFkX2ZsYXZvcihzc3AsIHJlYWRfZmxhdm9yKSBkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmgKaW5kZXggNzVlNTRlNGY5NjNmYS4uMWNlNzU5ZmI3MDk0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaApAQCAtMTMsNiAmIzQzOzEzLDggQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdV9ub2RlX3RyZWUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb21wbGV0aW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrX3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAKIHN0cnVjdCBzcmN1X25vZGU7CiBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Q7CkBAIC00MSw2ICYjNDM7NDMsOCBAQCBzdHJ1Y3Qgc3JjdV9kYXRhIHsKIAlib29sIHNyY3VfY2JsaXN0X2ludm9raW5nOwkJLyogSW52b2tpbmcgdGhlc2UgQ0JzPyAqLwogCXN0cnVjdCB0aW1lcl9saXN0IGRlbGF5X3dvcms7CQkvKiBEZWxheSBmb3IgQ0IgaW52b2tpbmcgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsJCS8qIENvbnRleHQgZm9yIENCIGludm9raW5nLiAqLwomIzQzOwlzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9jYnM7CQkvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovCiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlIGRlZmVyX2xpbms7CQkvKiBMaW5rcyBvbnRvIHRoZSBwZXItQ1BVIGRlZmVycmFsIGRyYWluIGxpc3QgKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9iYXJyaWVyX2hlYWQ7CS8qIEZvciBzcmN1X2JhcnJpZXIoKSB1c2UuICovCiAJc3RydWN0IHJjdV9oZWFkIHNyY3VfZWNfaGVhZDsJCS8qIEZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKSB1c2UuICovCiAJaW50IHNyY3VfZWNfc3RhdGU7CQkJLyogIFN0YXRlIGZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKS4gKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvS2NvbmZpZyBiL2tlcm5lbC9yY3UvS2NvbmZpZwppbmRleCAzMzJkZjdhN2E2MzQ3Li5iYzk0ODNjMGI1ZDg0IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9LY29uZmlnCkBAIC0xNzUsNiAmIzQzOzE3NSwxMiBAQCBjb25maWcgUkNVX1NUQUxMX0NPTU1PTgogY29uZmlnIFJDVV9ORUVEX1NFR0NCTElTVAogCWRlZl9ib29sICggVFJFRV9SQ1UgfHwgVFJFRV9TUkNVIHx8IFRBU0tTX1JDVV9HRU5FUklDICkKIAomIzQzOyMgVGhlIGRlZmVycmFsIChhbmQgdGhlIElSUV9XT1JLIGl0IHVzZXMpIGlzIG9ubHkgbmVlZGVkIHdoZXJlIGNhbGxfcmN1KCkgLwomIzQzOyMgY2FsbF9zcmN1KCkgY2FuIGJlIGludm9rZWQgd2hpbGUgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQuCiYjNDM7Y29uZmlnIFJDVV9ERUZFUgomIzQzOwlkZWZfYm9vbCBIQVZFX05NSSB8fCBLUFJPQkVTIHx8IEZVTkNUSU9OX1RSQUNFUiB8fCBUUkFDRVBPSU5UUwomIzQzOwlzZWxlY3QgSVJRX1dPUksKJiM0MzsKIGNvbmZpZyBSQ1VfRkFOT1VUCiAJaW50ICYjMzQ7VHJlZS1iYXNlZCBoaWVyYXJjaGljYWwgUkNVIGZhbm91dCB2YWx1ZSYjMzQ7CiAJcmFuZ2UgMiA2NCBpZiA2NEJJVApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3UuaCBiL2tlcm5lbC9yY3UvcmN1LmgKaW5kZXggMzlhOWY2ZmE5YTdiMi4uMDM2ZDI4NTE2ZTkyZCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9yY3UuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3JjdS5oCkBAIC01NzIsNiAmIzQzOzU3MiwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza3NfY2JsaXN0X2luaXRfZ2VuZXJpYyh2b2lkKSB7IH0KICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9JTklUCTEKICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9SVU5OSU5HCTIKIAomIzQzOy8qCiYjNDM7ICogU2hvdWxkIGEgY2FsbF9yY3UoKS9jYWxsX3NyY3UoKSBjYWxsYmFjayBiZSBkZWZlcnJlZCByYXRoZXIgdGhhbiBlbnF1ZXVlZAomIzQzOyAqIG5vdz8gIERlZmVyIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkOiBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIG1heQomIzQzOyAqIGJlIGluIGZsaWdodCBvbiB0aGlzIENQVSwgc28gZW5xdWV1aW5nIG5vdyBjb3VsZCBjb3JydXB0IGl0LiAgQnV0IG5vdCB3aGlsZQomIzQzOyAqIHRoZSBzY2hlZHVsZXIgaXMgZG93biAtLSBlYXJseSBib290IGlzIHNpbmdsZS10aHJlYWRlZCBhbmQgY2FuIGNhbGwgdGhpcwomIzQzOyAqIGJlZm9yZSBpbml0X0lSUSgpIG1ha2VzIGlycV93b3JrIHVzYWJsZSAoZS5nLiByY3VfaW5pdCgpJiMzOTtzIHNlbGYtdGVzdHMpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBpcnFzX2Rpc2FibGVkKCkgJmFtcDsmYW1wOyByY3Vfc2NoZWR1bGVyX2FjdGl2ZSAhPSBSQ1VfU0NIRURVTEVSX0lOQUNUSVZFOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUmIzM5O3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovCiYjNDM7dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSk7CiYjNDM7CiBlbnVtIHJjdXRvcnR1cmVfdHlwZSB7CiAJUkNVX0ZMQVZPUiwKIAlSQ1VfVEFTS1NfRkxBVk9SLApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwppbmRleCAzZDBiNTlhN2IwYjM4Li5hMDYxMDBiODIzNTk3IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwpAQCAtNDgsNiAmIzQzOzQ4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC90aWNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfdHJhY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ubWkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGVyZl9ldmVudC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3JjdS5oJiMzNDsKIApAQCAtMTE1LDYgJiM0MzsxMTYsNyBAQCB0b3J0dXJlX3BhcmFtKGludCwgbGVha3BvaW50ZXIsIDAsICYjMzQ7TGVhayBwb2ludGVyIGRlcmVmZXJlbmNlcyBmcm9tIHJlYWRlcnMmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGludCwgbl9iYXJyaWVyX2NicywgMCwgJiMzNDsjIG9mIGNhbGxiYWNrcy9rdGhyZWFkcyBmb3IgYmFycmllciB0ZXN0aW5nJiMzNDspOwogdG9ydHVyZV9wYXJhbShpbnQsIG5fdXBfZG93biwgMzIsICYjMzQ7IyBvZiBjb25jdXJyZW50IHVwL2Rvd24gaHJ0aW1lci1iYXNlZCBSQ1UgcmVhZGVycyYjMzQ7KTsKIHRvcnR1cmVfcGFyYW0oaW50LCBuZmFrZXdyaXRlcnMsIDQsICYjMzQ7TnVtYmVyIG9mIFJDVSBmYWtlIHdyaXRlciB0aHJlYWRzJiMzNDspOwomIzQzO3RvcnR1cmVfcGFyYW0oYm9vbCwgbm1pX2NhbGxzLCB0cnVlLCAmIzM0O0V4ZXJjaXNlIC0mZ3Q7Y2FsbCgpIGZyb20gTk1JIG9uIG5taV9jYXBhYmxlIGZsYXZvcnMmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGludCwgbnJlYWRlcnMsIC0xLCAmIzM0O051bWJlciBvZiBSQ1UgcmVhZGVyIHRocmVhZHMmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGJvb2wsIG53cml0ZXJzLCAxLCAmIzM0O051bWJlciBvZiBSQ1Ugd3JpdGVyIHRocmVhZHMgKDAgb3IgMSkmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGludCwgb2JqZWN0X2RlYnVnLCAwLCAmIzM0O0VuYWJsZSBkZWJ1Zy1vYmplY3QgZG91YmxlIGNhbGxfcmN1KCkgdGVzdGluZyYjMzQ7KTsKQEAgLTIxNiw2ICYjNDM7MjE4LDggQEAgc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdF9mYWlsdXJlOwogc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdHM7CiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX3RpbWVyczsKIHN0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfaXJxczsKJiM0MztzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYWxsOwomIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NiOwogc3RhdGljIGxvbmcgbl9iYXJyaWVyX2F0dGVtcHRzOwogc3RhdGljIGxvbmcgbl9iYXJyaWVyX3N1Y2Nlc3NlczsgLyogZGlkIHJjdV9iYXJyaWVyIHRlc3Qgc3VjY2VlZD8gKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5fcmVhZF9leGl0czsKQEAgLTQzMyw2ICYjNDM7NDM3LDcgQEAgc3RydWN0IHJjdV90b3J0dXJlX29wcyB7CiAJYm9vbCAoKmlzX3Rhc2tfcmN1X2Jvb3N0ZWQpKHZvaWQpOwogCWxvbmcgY2JmbG9vZF9tYXg7CiAJaW50IGlycV9jYXBhYmxlOwomIzQzOwlpbnQgbm1pX2NhcGFibGU7CiAJaW50IGNhbl9ib29zdDsKIAlpbnQgZXh0ZW5kYWJsZXM7CiAJaW50IHNsb3dfZ3BzOwpAQCAtNjQ2LDYgJiM0Mzs2NTEsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyByY3Vfb3BzID0gewogCS5leHRlbmRhYmxlcwkJPSBSQ1VUT1JUVVJFX01BWF9FWFRFTkQsCiAJLmRlYnVnX29iamVjdHMJCT0gMSwKIAkuc3RhcnRfcG9sbF9pcnFzb2ZmCT0gMSwKJiM0MzsJLm5taV9jYXBhYmxlCQk9IDEsCiAJLm5hbWUJCQk9ICYjMzQ7cmN1JiMzNDsKIH07CiAKQEAgLTkzNiw2ICYjNDM7OTQyLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdV9vcHMgPSB7CiAJLmRlYnVnX29iamVjdHMJPSAxLAogCS5oYXZlX3VwX2Rvd24JPSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpCiAJCQkJPyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLAomIzQzOwkubm1pX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICYjMzQ7c3JjdSYjMzQ7CiB9OwogCkBAIC05OTksNiAmIzQzOzEwMDYsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1ZF9vcHMgPSB7CiAJLmRlYnVnX29iamVjdHMJPSAxLAogCS5oYXZlX3VwX2Rvd24JPSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpCiAJCQkJPyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLAomIzQzOwkubm1pX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICYjMzQ7c3JjdWQmIzM0OwogfTsKIApAQCAtMTI2Myw2ICYjNDM7MTI3MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHRhc2tzX3RyYWNpbmdfb3BzID0gewogCS5jYmZsb29kX21heAk9IDUwMDAwLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLnNsb3dfZ3BzCT0gMSwKJiM0MzsJLm5taV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAmIzM0O3Rhc2tzLXRyYWNpbmcmIzM0OwogfTsKIApAQCAtMjY1MywxMiAmIzQzOzI2NjIsOTcgQEAgc3RhdGljIGJvb2wgcmN1X3RvcnR1cmVfb25lX3JlYWQoc3RydWN0IHRvcnR1cmVfcmFuZG9tX3N0YXRlICp0cnNwLCBsb25nIG15aWQpCiAKIHN0YXRpYyBERUZJTkVfVE9SVFVSRV9SQU5ET01fUEVSQ1BVKHJjdV90b3J0dXJlX3RpbWVyX3JhbmQpOwogCiYjNDM7LyoKJiM0MzsgKiBFeGVyY2lzZSAtJmd0O2NhbGwoKSBmcm9tIE5NSSBjb250ZXh0IGZvciBmbGF2b3JzIHRoYXQgYWR2ZXJ0aXNlIC0mZ3Q7bm1pX2NhcGFibGUuCiYjNDM7ICogQSBwZXItQ1BVIGhhcmR3YXJlIHBlcmYgY291bnRlciBvdmVyZmxvd3MgaW50byBhbiBOTUkgLS0gYSByZWFsIE5NSSBvbiB4ODYsCiYjNDM7ICogb3IgYSBwc2V1ZG8tTk1JIG9uIGFybTY0IGJvb3RlZCB3aXRoIGlycWNoaXAuZ2ljdjNfcHNldWRvX25taT0xIC0tIGFuZCBpdHMKJiM0MzsgKiBoYW5kbGVyIHN1Ym1pdHMgb25lIHByZWFsbG9jYXRlZCBjYWxsYmFjayB2aWEgLSZndDtjYWxsKCkuICBPbmx5IG9uZSBjYWxsYmFjayBpcwomIzQzOyAqIGluIGZsaWdodCBhdCBhIHRpbWUgKGd1YXJkZWQgYnkgYW4gYXRvbWljKSwgd2hpY2ggYXZvaWRzIGFsbG9jYXRpbmcgaW4gTk1JCiYjNDM7ICogYW5kIGlzIGVub3VnaCB0byBleGVyY2lzZSB0aGUgZGVmZXJyYWwuICBUaGlzIG1pcnJvcnMgaG93IEJQRiBwcm9ncmFtcyByZWFjaAomIzQzOyAqIC0mZ3Q7Y2FsbCgpIGZyb20gTk1JLiAgUmVxdWlyZXMgYSBoYXJkd2FyZSBQTVU7IHdoZW4gdGhlIG92ZXJmbG93IGlzIG5vdCBhbiBOTUkKJiM0MzsgKiB0aGUgaGFuZGxlciBkb2VzIG5vdGhpbmcuCiYjNDM7ICovCiYjNDM7I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0gewomIzQzOwkudHlwZQkJPSBQRVJGX1RZUEVfSEFSRFdBUkUsCiYjNDM7CS5jb25maWcJCT0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLAomIzQzOwkuc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksCiYjNDM7CS5waW5uZWQJCT0gMSwKJiM0MzsJLmRpc2FibGVkCT0gMSwKJiM0MzsJLmZyZXEJCT0gMSwKJiM0MzsJLnNhbXBsZV9mcmVxCT0gMTAwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudCAqKnJjdV90b3J0dXJlX25taV9ldmVudHM7CiYjNDM7c3RhdGljIHN0cnVjdCByY3VfaGVhZCByY3VfdG9ydHVyZV9ubWlfcmg7CiYjNDM7c3RhdGljIGF0b21pY190IHJjdV90b3J0dXJlX25taV9yaF9pbnVzZTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApCiYjNDM7ewomIzQzOwlhdG9taWNfbG9uZ19pbmMoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYik7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAomIzQzOwkJCQkgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAomIzQzOwkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQomIzQzO3sKJiM0MzsJaWYgKCFpbl9ubWkoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJaWYgKGN1cl9vcHMtJmd0O2NhbGwgJmFtcDsmYW1wOyAhYXRvbWljX3hjaGcoJmFtcDtyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDEpKSB7CiYjNDM7CQljdXJfb3BzLSZndDtjYWxsKCZhbXA7cmN1X3RvcnR1cmVfbm1pX3JoLCByY3VfdG9ydHVyZV9ubWlfY2IpOwomIzQzOwkJYXRvbWljX2xvbmdfaW5jKCZhbXA7bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFubWlfY2FsbHMgfHwgIWN1cl9vcHMtJmd0O25taV9jYXBhYmxlIHx8ICFjdXJfb3BzLSZndDtjYWxsKQomIzQzOwkJcmV0dXJuOwomIzQzOwlyY3VfdG9ydHVyZV9ubWlfZXZlbnRzID0ga2NhbGxvYyhucl9jcHVfaWRzLCBzaXplb2YoKnJjdV90b3J0dXJlX25taV9ldmVudHMpLAomIzQzOwkJCQkJIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiYjNDM7CQlldmVudCA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKCZhbXA7cmN1X3RvcnR1cmVfbm1pX2F0dHIsIGNwdSwKJiM0MzsJCQkJCQkJIE5VTEwsIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdywgTlVMTCk7CiYjNDM7CQlpZiAoSVNfRVJSKGV2ZW50KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSA9IGV2ZW50OwomIzQzOwkJcGVyZl9ldmVudF9lbmFibGUoZXZlbnQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKJiM0MzsJCWlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcGVyZl9ldmVudF9kaXNhYmxlKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7CiYjNDM7CQlwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7CiYjNDM7CX0KJiM0MzsJa2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7CiYjNDM7CXJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMOwomIzQzO30KJiM0MzsjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkgeyB9CiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZCkgeyB9CiYjNDM7I2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KJiM0MzsKIC8qCiAgKiBSQ1UgdG9ydHVyZSByZWFkZXIgZnJvbSB0aW1lciBoYW5kbGVyLiAgRGVyZWZlcmVuY2VzIHJjdV90b3J0dXJlX2N1cnJlbnQsCiAgKiBpbmNyZW1lbnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgcGlwZWxpbmUgYXJyYXkuICBUaGUKICAqIGNvdW50ZXIgaW4gdGhlIGVsZW1lbnQgc2hvdWxkIG5ldmVyIGJlIGdyZWF0ZXIgdGhhbiAxLCBvdGhlcndpc2UsIHRoZQogICogUkNVIGltcGxlbWVudGF0aW9uIGlzIGJyb2tlbi4KICAqLwomIzQzOwogc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnVudXNlZCkKIHsKIAlXQVJOX09OX09OQ0UoIWluX3NlcnZpbmdfc29mdGlycSgpKTsKQEAgLTMwNDEsNiAmIzQzOzMxMzUsOSBAQCByY3VfdG9ydHVyZV9zdGF0c19wcmludCh2b2lkKQogCQlkYXRhX3JhY2Uobl9iYXJyaWVyX2F0dGVtcHRzKSwKIAkJZGF0YV9yYWNlKG5fcmN1X3RvcnR1cmVfYmFycmllcl9lcnJvcikpOwogCXByX2NvbnQoJiMzNDtyZWFkLWV4aXRzOiAlbGQgJiMzNDssIGRhdGFfcmFjZShuX3JlYWRfZXhpdHMpKTsgLy8gU3RhdGlzdGljLgomIzQzOwlwcl9jb250KCYjMzQ7bm1pLWNhbGxzOiAlbGQgbm1pLWNiczogJWxkICYjMzQ7LAomIzQzOwkJYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLAomIzQzOwkJYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NiKSk7CiAJcHJfY29udCgmIzM0O25vY2ItdG9nZ2xlczogJWxkOiVsZCAmIzM0OywKIAkJYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fbm9jYl9vZmZsb2FkKSwgYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fbm9jYl9kZW9mZmxvYWQpKTsKIAlwcl9jb250KCYjMzQ7Z3B3cmFwczogJWxkXG4mIzM0Oywgbl9ncHdyYXBzKTsKQEAgLTQzMTUsNiAmIzQzOzQ0MTIsOCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpCiAJCWtmcmVlKHJlYWRlcl90YXNrcyk7CiAJCXJlYWRlcl90YXNrcyA9IE5VTEw7CiAJfQomIzQzOwkvKiBEaXNhYmxlIHRoZSBwZXJmIGNvdW50ZXJzIChhbmQgdGh1cyB0aGUgTk1JIC0mZ3Q7Y2FsbCgpIGZpcmluZykgbm93LiAqLwomIzQzOwlyY3VfdG9ydHVyZV9ubWlfY2xlYW51cCgpOwogCWtmcmVlKHJjdV90b3J0dXJlX3JlYWRlcl9tYmNoayk7CiAJcmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrID0gTlVMTDsKIApAQCAtNDM0NCw2ICYjNDM7NDQ0MywyMCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpCiAJCXByX2luZm8oJiMzNDslczogSW52b2tpbmcgJXBTKCkuXG4mIzM0OywgX19mdW5jX18sIGN1cl9vcHMtJmd0O2NiX2JhcnJpZXIpOwogCQljdXJfb3BzLSZndDtjYl9iYXJyaWVyKCk7CiAJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBjYl9iYXJyaWVyKCkgYWJvdmUgZHJhaW5lZCBldmVyeSBkZWZlcnJlZCBOTUkgLSZndDtjYWxsKCkgY2FsbGJhY2ssIHNvIHRoZQomIzQzOwkgKiBjb3VudCBpc3N1ZWQgZnJvbSBOTUkgbXVzdCBlcXVhbCB0aGUgY291bnQgaW52b2tlZDsgYSBtaXNtYXRjaCBtZWFucyBhCiYjNDM7CSAqIGNhbGxiYWNrIHdhcyBsb3N0LgomIzQzOwkgKi8KJiM0MzsJaWYgKGF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYWxsKSAhPQomIzQzOwkgICAgYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NiKSkgewomIzQzOwkJcHJfYWxlcnQoJiMzNDslczogTk1JIC0mZ3Q7Y2FsbCgpIGxvc3QgYSBjYWxsYmFjazogaXNzdWVkICVsZCBpbnZva2VkICVsZFxuJiMzNDssCiYjNDM7CQkJIF9fZnVuY19fLCBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksCiYjNDM7CQkJIGF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYikpOwomIzQzOwkJYXRvbWljX2luYygmYW1wO25fcmN1X3RvcnR1cmVfZXJyb3IpOwomIzQzOwl9CiYjNDM7CiAJaWYgKGN1cl9vcHMtJmd0O2NsZWFudXAgIT0gTlVMTCkKIAkJY3VyX29wcy0mZ3Q7Y2xlYW51cCgpOwogCkBAIC00Nzc2LDYgJiM0Mzs0ODg5LDggQEAgcmN1X3RvcnR1cmVfaW5pdCh2b2lkKQogCQlmaXJzdGVyciA9IC1FTk9NRU07CiAJCWdvdG8gdW53aW5kOwogCX0KJiM0MzsJLyogQXJtIHRoZSBwZXItQ1BVIHBlcmYgY291bnRlcnMgdGhhdCBkcml2ZSAtJmd0O2NhbGwoKSBmcm9tIE5NSS4gKi8KJiM0MzsJcmN1X3RvcnR1cmVfbm1pX2luaXQoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJlYWxyZWFkZXJzOyBpJiM0MzsmIzQzOykgewogCQlyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGtbaV0ucnRjX2Noa3JkciA9IC0xOwogCQlmaXJzdGVyciA9IHRvcnR1cmVfY3JlYXRlX2t0aHJlYWQocmN1X3RvcnR1cmVfcmVhZGVyLCAodm9pZCAqKWksCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmMKaW5kZXggNTU4YmE4ZDMxNmRiNi4uMDNhMDdhMWYzYTMwYiAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcmVlbXB0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfd2FpdC5oJmd0OwpAQCAtNDMsNiAmIzQzOzQ0LDggQEAgc3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIAlJTklUX1dPUksoJmFtcDtzc3AtJmd0O3NyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtzc3AtJmd0O3NyY3Vfd29yay5lbnRyeSk7CiAJaW5pdF9pcnFfd29yaygmYW1wO3NzcC0mZ3Q7c3JjdV9pcnFfd29yaywgc3JjdV90aW55X2lycV93b3JrKTsKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7c3NwLSZndDtkZWZlcl9jYnMpOwomIzQzOwlpbml0X2lycV93b3JrKCZhbXA7c3NwLSZndDtkZWZlcl9pdywgc3JjdV9kZWZlcl9kcmFpbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxMywxMSAmIzQzOzIxNiwxMSBAQCBzdGF0aWMgdm9pZCBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIH0KIAogLyoKLSAqIEVucXVldWUgYW4gU1JDVSBjYWxsYmFjayBvbiB0aGUgc3BlY2lmaWVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZSwKLSAqIGluaXRpYXRpbmcgZ3JhY2UtcGVyaW9kIHByb2Nlc3NpbmcgaWYgaXQgaXMgbm90IGFscmVhZHkgcnVubmluZy4KJiM0MzsgKiBFbnF1ZXVlIEByaHAgb24gdGhlIGNhbGxiYWNrIGxpc3QuICBBbHNvIGNhbGxlZCBieSBzcmN1X2RlZmVyX2RyYWluKCkgdG8KJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLgogICovCi12b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsCi0JICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpCiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kb19lbnF1ZXVlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKJiM0MzsJCQkgICAgcmN1X2NhbGxiYWNrX3QgZnVuYykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yMzEsNiAmIzQzOzIzNCwzOSBAQCB2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsCiAJc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3NwKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQomIzQzOwomIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KQomIzQzO3sKJiM0MzsJc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X3N0cnVjdCwgZGVmZXJfaXcpOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENhbGxiYWNrcyBoYXZlIG5vIG11dHVhbCBvcmRlcmluZyBndWFyYW50ZWUgYW5kIHNyY3VfYmFycmllcigpIGhhcwomIzQzOwkgKiBhbHJlYWR5IGZsdXNoZWQgdXMsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLgomIzQzOwkgKi8KJiM0MzsJbGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKCZhbXA7c3NwLSZndDtkZWZlcl9jYnMpKSB7CiYjNDM7CQlzdHJ1Y3QgcmN1X2hlYWQgKnJocCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlOwomIzQzOwomIzQzOwkJc3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtJmd0O2Z1bmMpOwomIzQzOwl9CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfZGVmZXJfZHJhaW4pOwomIzQzOwomIzQzO3ZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKJiM0MzsJICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpCiYjNDM7ewomIzQzOwlpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7CiYjNDM7CQlyaHAtJmd0O2Z1bmMgPSBmdW5jOwomIzQzOwkJaWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsICZhbXA7c3NwLSZndDtkZWZlcl9jYnMpKQomIzQzOwkJCWlycV93b3JrX3F1ZXVlKCZhbXA7c3NwLSZndDtkZWZlcl9pdyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovCiYjNDM7CVdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpICZhbXA7JmFtcDsgaW5fbm1pKCkpOwomIzQzOwomIzQzOwlzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMpOwomIzQzO30KIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfc3JjdSk7CiAKIC8qCkBAIC0yNjAsNiAmIzQzOzI5NiwxNSBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTsKIAomIzQzOy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBmb3IgYWxsIGluLWZsaWdodCBvbmVzLiAqLwomIzQzO3ZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQomIzQzO3sKJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpCiYjNDM7CQlpcnFfd29ya19zeW5jKCZhbXA7c3NwLSZndDtkZWZlcl9pdyk7CiYjNDM7CXN5bmNocm9uaXplX3NyY3Uoc3NwKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9iYXJyaWVyKTsKJiM0MzsKIC8qCiAgKiBnZXRfc3RhdGVfc3luY2hyb25pemVfc3JjdSAtIFByb3ZpZGUgYW4gZW5kLW9mLWdyYWNlLXBlcmlvZCBjb29raWUKICAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9zcmN1dHJlZS5jIGIva2VybmVsL3JjdS9zcmN1dHJlZS5jCmluZGV4IDMwNDExMjY3NGU4YTIuLmI5ZmU1N2ZmOTEwMDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcGVyY3B1LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJlZW1wdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfd2FpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc21wLmgmZ3Q7CkBAIC03OSw2ICYjNDM7ODAsNDYgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19zcmN1KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgdm9pZCBzcmN1X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqd29yayk7CiBzdGF0aWMgdm9pZCBzcmN1X2RlbGF5X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTsKIAomIzQzO3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLiAgVGhlIGlycV93b3JrIGlzIGdsb2JhbCAoc2hhcmVkIGJ5IGV2ZXJ5CiYjNDM7ICogc3JjdV9zdHJ1Y3QpLCBzbyBpdCBtdXN0IGZpbmQgd2hpY2ggc3JjdV9zdHJ1Y3RzIGRlZmVycmVkIGNhbGxiYWNrczogYQomIzQzOyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJiMzOTtzIC0mZ3Q7ZGVmZXJfY2JzLCBhbmQgdGhhdCBzcmN1X2RhdGEgaXMKJiM0MzsgKiBjaGFpbmVkICgtJmd0O2RlZmVyX2xpbmspIG9udG8gdGhpcyBwZXItQ1BVIC0mZ3Q7bGlzdCB0aGF0IHRoZSBpcnFfd29yayB3YWxrcy4KJiM0MzsgKi8KJiM0MztzdHJ1Y3Qgc3JjdV9kZWZlciB7CiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkCWxpc3Q7CiYjNDM7CXN0cnVjdCBpcnFfd29yawkJaXc7CiYjNDM7CXJhd19zcGlubG9ja190CQlsb2NrOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzcmN1X2RlZmVyLCBzcmN1X2RlZmVyKSA9IHsKJiM0MzsJLmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoc3JjdV9kZWZlci5sb2NrKSwKJiM0MzsJLml3ID0gSVJRX1dPUktfSU5JVF9IQVJEKHNyY3VfZGVmZXJfZHJhaW4pLAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZWdpc3RlciBwZW5kaW5nIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcyBzbyBhIGZvbGxvd2luZyBzcmN1X2JhcnJpZXIoKQomIzQzOyAqIHdhaXRzIGZvciB0aGVtLiAgQW4gb25saW5lIENQVSYjMzk7cyBvd24gaXJxX3dvcmsgcmUtaXNzdWVzIGl0cyBjYWxsYmFja3MsIHNvIHdhaXQKJiM0MzsgKiBpdCBvdXQ7IGFuIG9mZmxpbmUgQ1BVJiMzOTtzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4sIHNvIGRyYWluIGl0cyBsaXN0CiYjNDM7ICogZGlyZWN0bHkgb250byB0aGlzIENQVSBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZmx1c2godm9pZCkKJiM0Mzt7CiYjNDM7CWludCBjcHU7CiYjNDM7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewomIzQzOwkJaWYgKGNwdV9vbmxpbmUoY3B1KSkKJiM0MzsJCQlpcnFfd29ya19zeW5jKCZhbXA7cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzcmN1X2RlZmVyX2RyYWluKCZhbXA7cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qCiAgKiBJbml0aWFsaXplIFNSQ1UgcGVyLUNQVSBkYXRhLiAgTm90ZSB0aGF0IHN0YXRpY2FsbHkgYWxsb2NhdGVkCiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmVzIG1pZ2h0IGFscmVhZHkgaGF2ZSBzcmN1X3JlYWRfbG9jaygpIGFuZApAQCAtMTA3LDYgJiM0MzsxNDgsMTEgQEAgc3RhdGljIHZvaWQgaW5pdF9zcmN1X3N0cnVjdF9kYXRhKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogCQlzZHAtJmd0O2NwdSA9IGNwdTsKIAkJSU5JVF9XT1JLKCZhbXA7c2RwLSZndDt3b3JrLCBzcmN1X2ludm9rZV9jYWxsYmFja3MpOwogCQl0aW1lcl9zZXR1cCgmYW1wO3NkcC0mZ3Q7ZGVsYXlfd29yaywgc3JjdV9kZWxheV90aW1lciwgMCk7CiYjNDM7CQkvKgomIzQzOwkJICogLSZndDtkZWZlcl9jYnMgYW5kIC0mZ3Q7ZGVmZXJfbGluayBhcmUgdmFsaWQgd2hlbiB6ZXJvZWQgYW5kIGFyZSBub3QKJiM0MzsJCSAqIHJlaW5pdGlhbGl6ZWQgaGVyZSwgbGVzdCB3ZSBjbG9iYmVyIGNhbGxiYWNrcyBhIHJlZW50cmFudAomIzQzOwkJICogY2FsbF9zcmN1KCkgYWxyZWFkeSBzdGFnZWQuICBTZWUgX19jYWxsX3NyY3UoKS4KJiM0MzsJCSAqLwogCQlzZHAtJmd0O3NzcCA9IHNzcDsKIAl9CiB9CkBAIC02OTcsNiAmIzQzOzc0Myw4IEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIAkJcmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovCiAJLyogV2FpdCBmb3IgaXJxX3dvcmsgdG8gZmluaXNoIGZpcnN0IGFzIGl0IG1heSBxdWV1ZSBhIG5ldyB3b3JrLiAqLwogCWlycV93b3JrX3N5bmMoJmFtcDtzdXAtJmd0O2lycV93b3JrKTsKJiM0MzsJLyogRHJhaW4gYW55IGRlZmVycmVkIGNhbGxiYWNrcyAoc2hhcmVkIGlycV93b3JrKSBiZWZvcmUgZnJlZWluZyAtJmd0O3NkYS4gKi8KJiM0MzsJc3JjdV9kZWZlcl9mbHVzaCgpOwogCWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO3N1cC0mZ3Q7d29yayk7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzdHJ1Y3Qgc3JjdV9kYXRhICpzZHAgPSBwZXJfY3B1X3B0cihzc3AtJmd0O3NkYSwgY3B1KTsKQEAgLTE0MTAsOCAmIzQzOzE0NTgsMTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsCiAgKiBzcmN1X3JlYWRfbG9jaygpLCBhbmQgc3JjdV9yZWFkX3VubG9jaygpIHRoYXQgYXJlIGFsbCBwYXNzZWQgdGhlIHNhbWUKICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZS4KICAqLwotc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAotCQkJcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKQomIzQzOy8qCiYjNDM7ICogVGhlIHNyY3VfY2JsaXN0IGFuZCB0aGUgc3JjdV9ub2RlIHRyZWUgYXJlIG9ubHkgZXZlciBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMKJiM0MzsgKiBkaXNhYmxlZCAoc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKSBlbnF1ZXVlcyB1bmRlciByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSBhbmQKJiM0MzsgKiBtYXkgd2FsayB0aGUgdHJlZTsgY2FsbGJhY2sgaW52b2NhdGlvbiBhbmQgZ3JhY2UtcGVyaW9kIHdvcmsgbGlrZXdpc2UpLiAgU28KJiM0MzsgKiBsaWtlIGNhbGxfcmN1KCksIGVucXVldWluZyB3aGlsZSBhIGxpc3Qgb3BlcmF0aW9uIGlzIGluIGZsaWdodCBvbiB0aGlzIENQVQomIzQzOyAqIHdvdWxkIGNvcnJ1cHQgaXQgb3IgZGVhZGxvY2sgLS0gZS5nLiBjYWxsX3JjdV90YXNrc190cmFjZSgpLCB3aGljaCBpcwomIzQzOyAqIGNhbGxfc3JjdSgpIG9uIGEgZGVkaWNhdGVkIHNyY3Vfc3RydWN0LCBmcm9tIGEgQlBGIHByb2dyYW0uICBfX2NhbGxfc3JjdSgpCiYjNDM7ICogZGVmZXJzIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCB2aWEgYSBwZXItQ1BVIGlycV93b3JrOyBvbmx5IGtlcm5lbHMKJiM0MzsgKiB3aGVyZSB0aGF0IGNhbiBoYXBwZW4gKENPTkZJR19SQ1VfREVGRVIpIG5lZWQgdGhpcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAomIzQzOwkJCSAgICByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pCiB7CiAJaWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHJocCkpIHsKIAkJLyogUHJvYmFibGUgZG91YmxlIGNhbGxfc3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4gKi8KQEAgLTE0MjMsNiAmIzQzOzE0ODEsNzIgQEAgc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAogCSh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKJiM0MzsJCQlyY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pCiYjNDM7ewomIzQzOwlpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7CiYjNDM7CQlzdHJ1Y3Qgc3JjdV9kYXRhICpzZHAgPSB0aGlzX2NwdV9wdHIoc3NwLSZndDtzZGEpOwomIzQzOwomIzQzOwkJcmhwLSZndDtmdW5jID0gZnVuYzsKJiM0MzsJCWlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopcmhwLCAmYW1wO3NkcC0mZ3Q7ZGVmZXJfY2JzKSkgewomIzQzOwkJCS8qIEZpcnN0IGRlZmVycmFsIG9uIHRoaXMgc3JjdV9kYXRhOiBjaGFpbiBpdCBmb3IgdGhlIGRyYWluLiAqLwomIzQzOwkJCXN0cnVjdCBzcmN1X2RlZmVyICpzbmRwID0gdGhpc19jcHVfcHRyKCZhbXA7c3JjdV9kZWZlcik7CiYjNDM7CiYjNDM7CQkJc2RwLSZndDtzc3AgPSBzc3A7CiYjNDM7CQkJaWYgKGxsaXN0X2FkZCgmYW1wO3NkcC0mZ3Q7ZGVmZXJfbGluaywgJmFtcDtzbmRwLSZndDtsaXN0KSkKJiM0MzsJCQkJaXJxX3dvcmtfcXVldWUoJmFtcDtzbmRwLSZndDtpdyk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovCiYjNDM7CVdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpICZhbXA7JmFtcDsgaW5fbm1pKCkpOwomIzQzOwomIzQzOwlzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMsIGRvX25vcm0pOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlLWlzc3VlIHRoaXMgQ1BVJiMzOTtzIGRlZmVycmVkIGNhbGxiYWNrcywgZ29pbmcgc3RyYWlnaHQgdG8gc3JjdV9kb19lbnF1ZXVlKCkgc28KJiM0MzsgKiB0aGV5IGNhbm5vdCBkZWZlciBhZ2Fpbi4gIFRoZSBpcnFfd29yayB3YWxrcyBpdHMgLSZndDtsaXN0IG9mIHNyY3VfZGF0YSwgZWFjaAomIzQzOyAqIGNhcnJ5aW5nIGl0cyBvd24gLSZndDtkZWZlcl9jYnMuICAtJmd0O2xvY2sgaXMgaGVsZCBhY3Jvc3MgdGhlIGRyYWluIHNvIGRyYWluZXJzCiYjNDM7ICogKGlycV93b3JrLCBzcmN1X2RlZmVyX2ZsdXNoKCkgYW5kIHNyY3Vfb2ZmbGluZV9kcmFpbigpKSBzZXJpYWxpemUgYW5kIG5ldmVyCiYjNDM7ICogbGVhdmUgYSBjYWxsYmFjayBvZmYgdGhlIGxpc3RzIHlldCBub3Qgb24gYSBjYWxsYmFjayBsaXN0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzcmN1X2RlZmVyICpzbmRwID0gY29udGFpbmVyX29mKGl3LCBzdHJ1Y3Qgc3JjdV9kZWZlciwgaXcpOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqc25vZGUsICpzbmV4dDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7c25kcC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKHNub2RlLCBzbmV4dCwgbGxpc3RfZGVsX2FsbCgmYW1wO3NuZHAtJmd0O2xpc3QpKSB7CiYjNDM7CQlzdHJ1Y3Qgc3JjdV9kYXRhICpzZHAgPSBjb250YWluZXJfb2Yoc25vZGUsIHN0cnVjdCBzcmN1X2RhdGEsIGRlZmVyX2xpbmspOwomIzQzOwkJc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBzZHAtJmd0O3NzcDsKJiM0MzsJCXN0cnVjdCBsbGlzdF9ub2RlICpjbm9kZSwgKmNuZXh0OwomIzQzOwomIzQzOwkJY25vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7c2RwLSZndDtkZWZlcl9jYnMpOwomIzQzOwkJbGxpc3RfZm9yX2VhY2hfc2FmZShjbm9kZSwgY25leHQsIGNub2RlKSB7CiYjNDM7CQkJc3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopY25vZGU7CiYjNDM7CiYjNDM7CQkJc3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtJmd0O2Z1bmMsIHRydWUpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c25kcC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERyYWluIEBjcHUmIzM5O3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzOyBjYWxsZWQgZnJvbQomIzQzOyAqIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKSBvbmNlIEBjcHUgaXMgZGVhZC4gIE9uZSBwYXNzIGNvdmVycyBldmVyeQomIzQzOyAqIHNyY3Vfc3RydWN0LCBhcyB0aGUgcGVyLUNQVSBzcmN1X2RlZmVyIGxpc3QgY2hhaW5zIHRoZW0gYWxsLCBhbmQgdGhlCiYjNDM7ICogcmUtaXNzdWUgbGFuZHMgb24gdGhlIGN1cnJlbnQgQ1BVJiMzOTtzIHNyY3VfZGF0YS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KQomIzQzO3sKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlzcmN1X2RlZmVyX2RyYWluKCZhbXA7cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGNhbGxfc3JjdSgpIC0gUXVldWUgYSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhbiBTUkNVIGdyYWNlIHBlcmlvZAogICogQHNzcDogc3JjdV9zdHJ1Y3QgaW4gcXVldWUgdGhlIGNhbGxiYWNrCkBAIC0xNjc3LDkgJiM0MzsxODAxLDE3IEBAIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogewogCWludCBjcHU7CiAJaW50IGlkeDsKLQl1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoJmFtcDtzc3AtJmd0O3NyY3Vfc3VwLSZndDtzcmN1X2JhcnJpZXJfc2VxKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzOwogCiAJY2hlY2tfaW5pdF9zcmN1X3N0cnVjdChzc3ApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAgVGhlCiYjNDM7CSAqIHNoYXJlZCBpcnFfd29yayBtYXkgYWxzbyBkcmFpbiBvdGhlciBzcmN1X3N0cnVjdHMmIzM5Oywgd2hpY2ggaXMgaGFybWxlc3MuCiYjNDM7CSAqLwomIzQzOwlzcmN1X2RlZmVyX2ZsdXNoKCk7CiYjNDM7CiYjNDM7CXMgPSByY3Vfc2VxX3NuYXAoJmFtcDtzc3AtJmd0O3NyY3Vfc3VwLSZndDtzcmN1X2JhcnJpZXJfc2VxKTsKIAltdXRleF9sb2NrKCZhbXA7c3NwLSZndDtzcmN1X3N1cC0mZ3Q7c3JjdV9iYXJyaWVyX211dGV4KTsKIAlpZiAocmN1X3NlcV9kb25lKCZhbXA7c3NwLSZndDtzcmN1X3N1cC0mZ3Q7c3JjdV9iYXJyaWVyX3NlcSwgcykpIHsKIAkJc21wX21iKCk7IC8qIEZvcmNlIG9yZGVyaW5nIGZvbGxvd2luZyByZXR1cm4uICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RpbnkuYyBiL2tlcm5lbC9yY3UvdGlueS5jCmluZGV4IGRjY2NjZDZiZTk0MTEuLjcxMjQ5ZWFjNjEwMjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdGlueS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvdGlueS5jCkBAIC0xMSw2ICYjNDM7MTEsOCBAQAogICovCiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pcnFfd29yay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25vdGlmaWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfd2FpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwpAQCAtNDIsOCAmIzQzOzQ0LDgzIEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2N0cmxibGsgPSB7CiAJLmdwX3NlcQkJPSAwIC0gMzAwVUwsCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGV2ZXIgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICh0aGlzCiYjNDM7ICogZW5xdWV1ZSwgY2FsbGJhY2sgaW52b2NhdGlvbiwgZ3JhY2UtcGVyaW9kIHdvcmspLCBzbyBlbnF1ZXVpbmcgd2hpbGUgYSBsaXN0CiYjNDM7ICogb3BlcmF0aW9uIGlzIGluIGZsaWdodCB3b3VsZCBjb3JydXB0IGl0LiAgRGVmZXIgd2hlbmV2ZXIgaW50ZXJydXB0cyBhcmUKJiM0MzsgKiBkaXNhYmxlZDogdGhlIGNhbGxiYWNrIGdvZXMgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXQgYW4gaXJxX3dvcmsgcmUtaXNzdWVzCiYjNDM7ICogbGF0ZXIuICBPbmUgZ2xvYmFsIGxpc3QgYW5kIGlycV93b3JrIHN1ZmZpY2UsIGFzIFRpbnkgUkNVIGlzIHVuaXByb2Nlc3Nvci4KJiM0MzsgKiBPbmx5IGtlcm5lbHMgd2hlcmUgdGhhdCBjYW4gaGFwcGVuIChDT05GSUdfUkNVX0RFRkVSKSBuZWVkIHRoaXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpOwomIzQzO3N0YXRpYyBMTElTVF9IRUFEKHJjdV9kZWZlcl9saXN0KTsKJiM0MztzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHJjdV9kZWZlcl9pdywgcmN1X2RlZmVyX2RyYWluKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEVucXVldWUgQGhlYWQgb24gdGhlIGNhbGxiYWNrIGxpc3QuICBBbHNvIGNhbGxlZCBieSByY3VfZGVmZXJfZHJhaW4oKSB0bwomIzQzOyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKQomIzQzO3sKJiM0MzsJc3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHsKJiM0MzsJCWlmIChhdG9taWNfaW5jX3JldHVybigmYW1wO2RvdWJsZWZyZWVzKSAmbHQ7IDQpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDslcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtJmd0OyVwUygpISEhICAmIzM0OywgX19mdW5jX18sIGhlYWQsIGhlYWQtJmd0O2Z1bmMpOwomIzQzOwkJCW1lbV9kdW1wX29iaihoZWFkKTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwloZWFkLSZndDtmdW5jID0gZnVuYzsKJiM0MzsJaGVhZC0mZ3Q7bmV4dCA9IE5VTEw7CiYjNDM7CiYjNDM7CWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJKnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkOwomIzQzOwlyY3VfY3RybGJsay5jdXJ0YWlsID0gJmFtcDtoZWFkLSZndDtuZXh0OwomIzQzOwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShpc19pZGxlX3Rhc2soY3VycmVudCkpKSB7CiYjNDM7CQkvKiBmb3JjZSBzY2hlZHVsaW5nIGZvciByY3VfcXMoKSAqLwomIzQzOwkJcmVzY2hlZF9jcHUoMCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENhbGxiYWNrcyBoYXZlIG5vIG11dHVhbCBvcmRlcmluZyBndWFyYW50ZWUgYW5kIHJjdV9iYXJyaWVyKCkgaGFzCiYjNDM7CSAqIGFscmVhZHkgZmx1c2hlZCB1cywgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuCiYjNDM7CSAqLwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoJmFtcDtyY3VfZGVmZXJfbGlzdCkpIHsKJiM0MzsJCXN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlOwomIzQzOwomIzQzOwkJcmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC0mZ3Q7ZnVuYyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKQomIzQzO3sKJiM0MzsJaGVhZC0mZ3Q7ZnVuYyA9IGZ1bmM7CiYjNDM7CWlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgJmFtcDtyY3VfZGVmZXJfbGlzdCkpCiYjNDM7CQlpcnFfd29ya19xdWV1ZSgmYW1wO3JjdV9kZWZlcl9pdyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3Mgc28gYSBmb2xsb3dpbmcgcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gKi8KJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJaXJxX3dvcmtfc3luYygmYW1wO3JjdV9kZWZlcl9pdyk7CiYjNDM7fQomIzQzOwogdm9pZCByY3VfYmFycmllcih2b2lkKQogewomIzQzOwkvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGZpcnN0LiAqLwomIzQzOwlyY3VfZGVmZXJfZmx1c2goKTsKIAl3YWl0X3JjdV9ncChjYWxsX3JjdV9odXJyeSk7CiB9CiBFWFBPUlRfU1lNQk9MKHJjdV9iYXJyaWVyKTsKQEAgLTE1NywyOSAmIzQzOzIzNCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3UpOwogICovCiB2b2lkIGNhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYykKIHsKLQlzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkgewotCQlpZiAoYXRvbWljX2luY19yZXR1cm4oJmFtcDtkb3VibGVmcmVlcykgJmx0OyA0KSB7Ci0JCQlwcl9lcnIoJiMzNDslcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtJmd0OyVwUygpISEhICAmIzM0OywgX19mdW5jX18sIGhlYWQsIGhlYWQtJmd0O2Z1bmMpOwotCQkJbWVtX2R1bXBfb2JqKGhlYWQpOwotCQl9CiYjNDM7CWlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHsKJiM0MzsJCWNhbGxfcmN1X2RlZmVyKGhlYWQsIGZ1bmMpOwogCQlyZXR1cm47CiAJfQogCi0JaGVhZC0mZ3Q7ZnVuYyA9IGZ1bmM7Ci0JaGVhZC0mZ3Q7bmV4dCA9IE5VTEw7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JKnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkOwotCXJjdV9jdHJsYmxrLmN1cnRhaWwgPSAmYW1wO2hlYWQtJmd0O25leHQ7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwkvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi8KJiM0MzsJV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgJmFtcDsmYW1wOyBpbl9ubWkoKSk7CiAKLQlpZiAodW5saWtlbHkoaXNfaWRsZV90YXNrKGN1cnJlbnQpKSkgewotCQkvKiBmb3JjZSBzY2hlZHVsaW5nIGZvciByY3VfcXMoKSAqLwotCQlyZXNjaGVkX2NwdSgwKTsKLQl9CiYjNDM7CXJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3UpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuYyBiL2tlcm5lbC9yY3UvdHJlZS5jCmluZGV4IDYyYmYyYmY1NTFmNDkuLjdkMGFlOTRiZGYzOWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvdHJlZS5jCkBAIC0yNCw2ICYjNDM7MjQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NtcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlX3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbnRlcnJ1cHQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL2RlYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbm1pLmgmZ3Q7CkBAIC0zMTQ4LDIxICYjNDM7MzE0OSwyNyBAQCBzdGF0aWMgdm9pZCBjaGVja19jYl9vdmxkKHN0cnVjdCByY3VfZGF0YSAqcmRwKQogCXJhd19zcGluX3VubG9ja19yY3Vfbm9kZShybnApOwogfQogCi1zdGF0aWMgdm9pZAotX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pCiYjNDM7LyoKJiM0MzsgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGV2ZXIgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIChlbnF1ZXVlLAomIzQzOyAqIGNhbGxiYWNrIGludm9jYXRpb24sIGdyYWNlLXBlcmlvZCB3b3JrKS4gIEEgY2FsbF9yY3UoKSB3aXRoIGludGVycnVwdHMgYWxyZWFkeQomIzQzOyAqIGRpc2FibGVkIG1heSBpbnRlcnJ1cHQgb25lIG9mIHRob3NlLCBzbyBfX2NhbGxfcmN1X2NvbW1vbigpIGRlZmVyczogdGhlCiYjNDM7ICogY2FsbGJhY2sgaXMgc3RhZ2VkIG9uIGEgcGVyLUNQVSBsbGlzdCB0aGF0IGFuIGlycV93b3JrIHJlLWlzc3VlcyBvbmNlCiYjNDM7ICogaW50ZXJydXB0cyBhcmUgb24uICBPbmx5IENPTkZJR19SQ1VfREVGRVIga2VybmVscyBjYW4gaGl0IHRoaXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRW5xdWV1ZSBAaGVhZCBvbiB0aGlzIENQVSYjMzk7cyByY3Vfc2VnY2JsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKCkKJiM0MzsgKiB0byByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwKJiM0MzsgKiBjb25kaXRpb24uICBFaXRoZXIgY2FsbGVyIG1heSBoYXZlIGludGVycnVwdHMgYWxyZWFkeSBkaXNhYmxlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbikKIHsKIAlzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlib29sIGxhenk7CiAJc3RydWN0IHJjdV9kYXRhICpyZHA7CiAKLQkvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqLwotCVdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkICZhbXA7IChzaXplb2Yodm9pZCAqKSAtIDEpKTsKLQotCS8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi8KLQlpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSkKLQkJcmV0dXJuOwotCiAJaWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7CiAJCS8qCiAJCSAqIFByb2JhYmxlIGRvdWJsZSBjYWxsX3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4KQEAgLTMyMDYsNiAmIzQzOzMyMTMsODMgQEAgX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3MsIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBlbnF1ZXVlIHNvIHRoZXkgY2Fubm90CiYjNDM7ICogZGVmZXIgYWdhaW4uICBkZWZlcl9sb2NrIGlzIGhlbGQgYWNyb3NzIGxsaXN0X2RlbF9hbGwoKSBhbmQgdGhlIHJlLWlzc3VlIHNvCiYjNDM7ICogdGhlIGRyYWluZXJzIC0tIHRoaXMgQ1BVJiMzOTtzIGlycV93b3JrLCByY3VfZGVmZXJfZmx1c2goKSBhbmQKJiM0MzsgKiByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkgLS0gc2VyaWFsaXplIGFuZCBuZXZlciBsZWF2ZSBhIGNhbGxiYWNrIG9mZgomIzQzOyAqIC0mZ3Q7ZGVmZXJfaGVhZCB5ZXQgbm90IG9uIGEgY2FsbGJhY2sgbGlzdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByY3VfZGF0YSAqcmRwID0gY29udGFpbmVyX29mKGl3LCBzdHJ1Y3QgcmN1X2RhdGEsIGRlZmVyX3dvcmspOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3JkcC0mZ3Q7ZGVmZXJfbG9jaywgZmxhZ3MpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoJmFtcDtyZHAtJmd0O2RlZmVyX2hlYWQpKSB7CiYjNDM7CQlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTsKJiM0MzsKJiM0MzsJCXJjdV9kb19lbnF1ZXVlKGhlYWQsIGhlYWQtJmd0O2Z1bmMsIGZhbHNlKTsKJiM0MzsJfQomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3JkcC0mZ3Q7ZGVmZXJfbG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTdGFnZSBAaGVhZCBmb3IgdGhpcyBDUFUmIzM5O3MgaXJxX3dvcmsgd2hlbiBjYWxsX3JjdSgpIGNhbm5vdCBlbnF1ZXVlIG5vdy4gKi8KJiM0MztzdGF0aWMgdm9pZCBjYWxsX3JjdV9kZWZlcihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHRoaXNfY3B1X3B0cigmYW1wO3JjdV9kYXRhKTsKJiM0MzsKJiM0MzsJaGVhZC0mZ3Q7ZnVuYyA9IGZ1bmM7CiYjNDM7CWlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgJmFtcDtyZHAtJmd0O2RlZmVyX2hlYWQpKQomIzQzOwkJaXJxX3dvcmtfcXVldWUoJmFtcDtyZHAtJmd0O2RlZmVyX3dvcmspOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlZ2lzdGVyIHBlbmRpbmcgZGVmZXJyZWQgY2FsbGJhY2tzIGludG8gdGhlIGNhbGxiYWNrIGxpc3RzIHNvIGEgZm9sbG93aW5nCiYjNDM7ICogcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gIFRoaXMgcnVucyBiZWZvcmUgcmN1X2JhcnJpZXIoKSBzY2FucyB0aGUKJiM0MzsgKiBsaXN0cy4gIEFuIG9ubGluZSBDUFUmIzM5O3Mgb3duIGlycV93b3JrIHJlLWlzc3VlcyBpdHMgY2FsbGJhY2tzLCBzbyB3YWl0IGl0IG91dDsKJiM0MzsgKiBhbiBvZmZsaW5lIENQVSYjMzk7cyBpcnFfd29yayBtYXkgbmV2ZXIgcnVuIGFnYWluLCBzbyBkcmFpbiBpdHMgbGlzdCBkaXJlY3RseQomIzQzOyAqIG9udG8gdGhpcyBDUFUgaW5zdGVhZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZCkKJiM0Mzt7CiYjNDM7CWludCBjcHU7CiYjNDM7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewomIzQzOwkJc3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cigmYW1wO3JjdV9kYXRhLCBjcHUpOwomIzQzOwomIzQzOwkJaWYgKGNwdV9vbmxpbmUoY3B1KSkKJiM0MzsJCQlpcnFfd29ya19zeW5jKCZhbXA7cmRwLSZndDtkZWZlcl93b3JrKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlyY3VfZGVmZXJfZHJhaW4oJmFtcDtyZHAtJmd0O2RlZmVyX3dvcmspOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7X19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pCiYjNDM7ewomIzQzOwkvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqLwomIzQzOwlXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCAmYW1wOyAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7CiYjNDM7CiYjNDM7CS8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi8KJiM0MzsJaWYgKFdBUk5fT05fT05DRSghZnVuYykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHsKJiM0MzsJCWNhbGxfcmN1X2RlZmVyKGhlYWQsIGZ1bmMpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqLwomIzQzOwlXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSAmYW1wOyZhbXA7IGluX25taSgpKTsKJiM0MzsKJiM0MzsJcmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYywgbGF6eV9pbik7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19SQ1VfTEFaWQogc3RhdGljIGJvb2wgZW5hYmxlX3JjdV9sYXp5IF9fcmVhZF9tb3N0bHkgPSAhSVNfRU5BQkxFRChDT05GSUdfUkNVX0xBWllfREVGQVVMVF9PRkYpOwogbW9kdWxlX3BhcmFtKGVuYWJsZV9yY3VfbGF6eSwgYm9vbCwgMDQ0NCk7CkBAIC0zODk2LDggJiM0MzszOTgwLDEyIEBAIHZvaWQgcmN1X2JhcnJpZXIodm9pZCkKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgZ3NlcTsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKLQl1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoJmFtcDtyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgczsKJiM0MzsKJiM0MzsJLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gKi8KJiM0MzsJcmN1X2RlZmVyX2ZsdXNoKCk7CiAKJiM0MzsJcyA9IHJjdV9zZXFfc25hcCgmYW1wO3JjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTsKIAlyY3VfYmFycmllcl90cmFjZShUUFMoJiMzNDtCZWdpbiYjMzQ7KSwgLTEsIHMpOwogCiAJLyogVGFrZSBtdXRleCB0byBzZXJpYWxpemUgY29uY3VycmVudCByY3VfYmFycmllcigpIHJlcXVlc3RzLiAqLwpAQCAtNDIzMSw2ICYjNDM7NDMxOSwxMCBAQCByY3VfYm9vdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpCiAJcmRwLSZndDtyY3Vfb25sX2dwX3N0YXRlID0gUkNVX0dQX0NMRUFORUQ7CiAJcmRwLSZndDtsYXN0X3NjaGVkX2Nsb2NrID0gamlmZmllczsKIAlyZHAtJmd0O2NwdSA9IGNwdTsKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7cmRwLSZndDtkZWZlcl9oZWFkKTsKJiM0MzsJcmF3X3NwaW5fbG9ja19pbml0KCZhbXA7cmRwLSZndDtkZWZlcl9sb2NrKTsKJiM0MzsJLyogSGFyZCBpcnFfd29yayBzbyB0aGUgcmUtaXNzdWUgcnVucyBwcm9tcHRseS4gKi8KJiM0MzsJcmRwLSZndDtkZWZlcl93b3JrID0gSVJRX1dPUktfSU5JVF9IQVJEKHJjdV9kZWZlcl9kcmFpbik7CiAJcmN1X2Jvb3RfaW5pdF9ub2NiX3BlcmNwdV9kYXRhKHJkcCk7CiB9CiAKQEAgLTQ1MjgsNiAmIzQzOzQ2MjAsMTYgQEAgdm9pZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKGludCBjcHUpCiAJc3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cigmYW1wO3JjdV9kYXRhLCBjcHUpOwogCWJvb2wgbmVlZHdha2U7CiAKJiM0MzsJLyoKJiM0MzsJICogQ2FsbGJhY2tzIHRoZSBvdXRnb2luZyBDUFUgZGVmZXJyZWQgbGF0ZSBpbiB0aGUgb2ZmbGluZSBwYXRoIChwYXN0IHRoZQomIzQzOwkgKiBwb2ludCBpdHMgaXJxX3dvcmsgY2FuIHJ1bikgc2l0IG9uIC0mZ3Q7ZGVmZXJfaGVhZCwgd2hpY2ggdGhlIC0mZ3Q7Y2JsaXN0CiYjNDM7CSAqIG1pZ3JhdGlvbiBiZWxvdyBkb2VzIG5vdCBjb3Zlci4gIERyYWluIHRoZW0gaGVyZSwgYmVmb3JlIHRoZSBlYXJseQomIzQzOwkgKiByZXR1cm5zOyB0aGUgcmUtaXNzdWUgbGFuZHMgb24gdGhpcyBDUFUuCiYjNDM7CSAqLwomIzQzOwlyY3VfZGVmZXJfZHJhaW4oJmFtcDtyZHAtJmd0O2RlZmVyX3dvcmspOwomIzQzOwkvKiBMaWtld2lzZSBmb3IgdGhlIG91dGdvaW5nIENQVSYjMzk7cyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3MuICovCiYjNDM7CXNyY3Vfb2ZmbGluZV9kcmFpbihjcHUpOwomIzQzOwogCWlmIChyY3VfcmRwX2lzX29mZmxvYWRlZChyZHApKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5oIGIva2VybmVsL3JjdS90cmVlLmgKaW5kZXggOWI4NWVlYWEwMDcxYS4uNDFjMmIyMGYwYzgzZSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90cmVlLmgKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90cmVlLmgKQEAgLTIyOSw2ICYjNDM7MjI5LDExIEBAIHN0cnVjdCByY3VfZGF0YSB7CiAJc3RydWN0IHJjdV9oZWFkIGJhcnJpZXJfaGVhZDsKIAlpbnQgZXhwX3dhdGNoaW5nX3NuYXA7CQkvKiBEb3VibGUtY2hlY2sgbmVlZCBmb3IgSVBJLiAqLwogCiYjNDM7CS8qIERlZmVycmFsIG9mIGFuIE5NSS9yZWVudHJhbnQgY2FsbF9yY3UoKTsgc2VlIF9fY2FsbF9yY3VfY29tbW9uKCkuICovCiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2hlYWQ7CiYjNDM7CXN0cnVjdCBpcnFfd29yayBkZWZlcl93b3JrOwomIzQzOwlyYXdfc3BpbmxvY2tfdCBkZWZlcl9sb2NrOwomIzQzOwogCS8qIDUpIENhbGxiYWNrIG9mZmxvYWRpbmcuICovCiAjaWZkZWYgQ09ORklHX1JDVV9OT0NCX0NQVQogCXN0cnVjdCBzd2FpdF9xdWV1ZV9oZWFkIG5vY2JfY2Jfd3E7IC8qIEZvciBub2NiIGt0aHJlYWRzIHRvIHNsZWVwIG9uLiAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZjZlY2Q5M2JlMzBmNAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmMKQEAgLTAsMCAmIzQzOzEsNTggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIEV4ZXJjaXNlIHJlLWVudHJ5IGludG8gY2FsbF9zcmN1KCkgZnJvbSBCUEY7IHNlZSBwcm9ncy9yY3VfcmVlbnRyeS5jLiAqLwomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7cmN1X3JlZW50cnkuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHN5c19waWRmZF9vcGVuKHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN5c2NhbGwoX19OUl9waWRmZF9vcGVuLCBwaWQsIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3JjdV9yZWVudHJ5KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmN1X3JlZW50cnkgKnNrZWw7CiYjNDM7CWludCBlcnIsIHBpZGZkID0gLTEsIG1hcF9mZDsKJiM0MzsJX191NjQgdmFsID0gMTsKJiM0MzsJY3B1X3NldF90IHNldDsKJiM0MzsKJiM0MzsJc2tlbCA9IHJjdV9yZWVudHJ5X19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gcmN1X3JlZW50cnlfX2F0dGFjaChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NrZWxfYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIEtlZXAgdGhlIHJlLWVudHJ5IG9uIGEgc2luZ2xlIENQVS4gKi8KJiM0MzsJQ1BVX1pFUk8oJmFtcDtzZXQpOwomIzQzOwlDUFVfU0VUKDAsICZhbXA7c2V0KTsKJiM0MzsJaWYgKHNjaGVkX3NldGFmZmluaXR5KDAsIHNpemVvZihzZXQpLCAmYW1wO3NldCkpCiYjNDM7CQlwZXJyb3IoJiMzNDtzY2hlZF9zZXRhZmZpbml0eSYjMzQ7KTsKJiM0MzsKJiM0MzsJcGlkZmQgPSBzeXNfcGlkZmRfb3BlbihnZXRwaWQoKSwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHBpZGZkLCAwLCAmIzM0O3BpZGZkX29wZW4mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJbWFwX2ZkID0gYnBmX21hcF9fZmQoc2tlbC0mZ3Q7bWFwcy50YXNrX3N0Zyk7CiYjNDM7CWVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwX2ZkLCAmYW1wO3BpZGZkLCAmYW1wO3ZhbCwgQlBGX05PRVhJU1QpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7Ym9vdF9jcmVhdGUmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogQXJtIHRoZSBoYW5kbGVyIGZvciB0aGlzIHRocmVhZCwgdGhlbiB0cmlnZ2VyIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkuICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dGFyZ2V0X3BpZCA9IHN5c2NhbGwoX19OUl9nZXR0aWQpOwomIzQzOwllcnIgPSBicGZfbWFwX2RlbGV0ZV9lbGVtKG1hcF9mZCwgJmFtcDtwaWRmZCk7CiYjNDM7CUFTU0VSVF9PSyhlcnIsICYjMzQ7Ym9vdF9kZWxldGUmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIE9ubHkgVHJlZSBTUkNVIGVucXVldWVzIHZpYSByY3Vfc2VnY2JsaXN0X2VucXVldWUoKTsgc2tpcCBlbHNld2hlcmUuICovCiYjNDM7CWlmICghc2tlbC0mZ3Q7YnNzLSZndDtoaXRzKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtyZWVudGVyZWQsIDEsICYjMzQ7cmVlbnRyeV9kZWZlcnJlZCYjMzQ7KTsKJiM0MztvdXQ6CiYjNDM7CWlmIChwaWRmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UocGlkZmQpOwomIzQzOwlyY3VfcmVlbnRyeV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ5MmE5MjdmZjUxYzAKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuYwpAQCAtMCwwICYjNDM7MSw0NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBSZS1lbnRlciBjYWxsX3NyY3UoKSBmcm9tIGEgQlBGIHByb2dyYW0uICBmZW50cnkgb24gcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKCkKJiM0MzsgKiBmaXJlcyBpbnNpZGUgY2FsbF9zcmN1KCkmIzM5O3MgZW5xdWV1ZSAocmVhY2hlZCBmcm9tIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKCkKJiM0MzsgKiB3aXRoIHRoZSBzcmN1X2RhdGEgLSZndDtsb2NrIGhlbGQpOyB0aGUgaGFuZGxlciB0aGVuIGNhbGxzIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkKJiM0MzsgKiAtLSBpdHNlbGYgY2FsbF9zcmN1KCkgb24gcmN1X3Rhc2tzX3RyYWNlX3NyY3Vfc3RydWN0IC0tIHJlLWVudGVyaW5nIHRoZSBzYW1lCiYjNDM7ICogc3JjdV9kYXRhIG9uIHRoZSBzYW1lIENQVS4KJiM0MzsgKi8KJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9UQVNLX1NUT1JBR0UpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzO30gdGFza19zdGcgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7aW50IHRhcmdldF9waWQ7CiYjNDM7aW50IGhpdHM7CiYjNDM7aW50IHJlZW50ZXJlZDsKJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvcmN1X3NlZ2NibGlzdF9lbnF1ZXVlJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHJlZW50ZXIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjsKJiM0MzsKJiM0MzsJaWYgKHJlZW50ZXJlZCB8fCAhdGFyZ2V0X3BpZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwljdXIgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJaWYgKCFjdXIgfHwgY3VyLSZndDtwaWQgIT0gdGFyZ2V0X3BpZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBSZS1lbnRlciB2aWEgYSB0YXNrLXN0b3JhZ2UgZGVsZXRlLCB3aGljaCBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqLwomIzQzOwlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO2hpdHMsIDEpOwomIzQzOwlicGZfdGFza19zdG9yYWdlX2dldCgmYW1wO3Rhc2tfc3RnLCBjdXIsIDAsIEJQRl9MT0NBTF9TVE9SQUdFX0dFVF9GX0NSRUFURSk7CiYjNDM7CWJwZl90YXNrX3N0b3JhZ2VfZGVsZXRlKCZhbXA7dGFza19zdGcsIGN1cik7CiYjNDM7CiYjNDM7CXJlZW50ZXJlZCA9IDE7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMzMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUkNVIERlZmVycmFsIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFJDVSBwYXRjaC4gSXQmIzM5O3MgbWFraW5nIGNoYW5nZXMgdG8gU1JDVSBhbmQgdGhlIGdlbmVyYWwgUkNVIGRlZmVycmFsIG1lY2hhbmlzbXMsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYENPTkZJR19SQ1VfREVGRVJgLiBUaGlzIG5ldyBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIE5NSSwgS1BST0JFUywgdGhlIGZ1bmN0aW9uIHRyYWNlciwgb3IgdHJhY2Vwb2ludHMuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGRlZmVycmFsIGZvciBgY2FsbF9yY3UoKWAgYW5kIGBjYWxsX3NyY3UoKWAgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgdG8gYXZvaWQgY29ycnVwdGluZyBjYWxsYmFjayBsaXN0cyBkdXJpbmcgbWFuaXB1bGF0aW9uLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIGdvb2QgY2h1bmsgb2YgUkNVIGNvZGUg4oCTIGBzcmN1dGlueS5jYCwgYHNyY3V0cmVlLmNgLCBgdGlueS5jYCwgYHRyZWUuY2AsIGFuZCBldmVuIHRoZSB0b3J0dXJlIHRlc3QuIFBsdXMsIHRoZXkmIzM5O3ZlIGFkZGVkIGEgbmV3IEJQRiBzZWxmdGVzdCwgYHJjdV9yZWVudHJ5LmNgLCB3aGljaCBpcyBhIGdvb2Qgc2lnbiBvZiB0aG9yb3VnaG5lc3MuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgY2FuIHNlZSBgQ09ORklHX1JDVV9ERUZFUmAgaXMgYSBjb3JlIGtlcm5lbCBtb2RpZmljYXRpb24uIFByZXR0eSByZWFjaGFibGUgdG9vLCBjb25zaWRlcmluZyBob3cgaGVhdmlseSB1c2VkIGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgIGFyZS4gVGhlIGRlZmVycmFsIGxvZ2ljIGl0c2VsZiBraWNrcyBpbiB3aGVuIGBzaG91bGRfcmN1X2RlZmVyKClgIGlzIHRydWU7IGluIG90aGVyIHdvcmRzLCB3aGVuIGBpcnFzX2Rpc2FibGVkKClgIGFuZCBgcmN1X3NjaGVkdWxlcl9hY3RpdmUgIT0gUkNVX1NDSEVEVUxFUl9JTkFDVElWRWAuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBpZGVudGlmeSBrZXkgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBJJiMzOTt2ZSBnb3QgYSBwcmVsaW1pbmFyeSBsaXN0OiBgc3JjdV9kZWZlcl9kcmFpbmAsIGByY3VfZGVmZXJfZHJhaW5gLCBgY2FsbF9zcmN1YCwgYGNhbGxfcmN1YCwgYHNyY3VfYmFycmllcmAsIGByY3VfYmFycmllcmAsIGBzcmN1X29mZmxpbmVfZHJhaW5gLCBhbmQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLiBCdXQgd2FpdCwgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgc3VwZXIgaG90LXBhdGggZnVuY3Rpb25zIHRvIGdldCBhIG1vcmUgYmFsYW5jZWQgdGVzdCBkaXN0cmlidXRpb24uIFRoYXQgcnVsZXMgb3V0IGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgLCBldmVuIHRob3VnaCB0aGV5IGFyZSB0ZW1wdGluZyB0YXJnZXRzLiBJJiMzOTtsbCBuZWVkIHRvIHJlLWV2YWx1YXRlIHdoYXQgaXMgYWN0dWFsbHkgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldC4KCkxldCYjMzk7cyBsb29rIGF0IGBzcmN1X2RlZmVyX2RyYWluYCBhbmQgYHJjdV9kZWZlcl9kcmFpbmAsIGFuZCBkZXRlcm1pbmUgd2hldGhlciB0aGV5JiMzOTtyZSBzdGF0aWMgb3IgZXhwb3J0ZWQuIFR1cm5zIG91dCBgc3JjdV9kZWZlcl9kcmFpbmAgaXMgZXhwb3J0ZWQgaW4gYHNyY3V0aW55LmNgIGJ1dCBzdGF0aWMgaW4gYHNyY3V0cmVlLmNgLCB3aGlsZSBgcmN1X2RlZmVyX2RyYWluYCBpcyBzdGF0aWMgaW4gYm90aCBgdGlueS5jYCBhbmQgYHRyZWUuY2AuIEhtbSwgYSBzbGlnaHQgaW5jb25zaXN0ZW5jeS4KCk5vdywgd2hhdCBhYm91dCB0aGUgb3RoZXIgZnVuY3Rpb25zIG9uIG15IGxpc3Q/IExldCYjMzk7cyBjaGVjayBgc3JjdV9vZmZsaW5lX2RyYWluYCBhbmQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLiBOZWl0aGVyIG9mIHRoZXNlIGlzIHN0YXRpYy4gVGhpcyBsb29rcyBwcm9taXNpbmcuIEkgd2lsbCBjb25maXJtIHRoYXQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgYW5kIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBhcmUgdGhlIHJpZ2h0IHRhcmdldCBmdW5jdGlvbnMgd2l0aCBncmVwcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkgc3JjdV9vZmZsaW5lX2RyYWluJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvcmN1Lmg9NTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpXG4tLVxua2VybmVsL3JjdS9yY3UuaC01OTAtLyogRHJhaW4gYW4gb3V0Z29pbmcgQ1BVJiMzOTtzIGRlZmVycmVkIFNSQ1UgY2FsbGJhY2tzOyBzZWUgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLiAqL1xua2VybmVsL3JjdS9yY3UuaDo1OTE6dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSk7XG5rZXJuZWwvcmN1L3JjdS5oLTU5Mi1cbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTUxNT1zdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1NDItICovXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTU0Mzp2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1NDQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODk5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgcGFydGljdWxhciBtaWdyYXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGxhcmdlciBSQ1UgdHJlZSBjb250ZXh0LiBUaGUgbmFtZSBhbG9uZSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgZGVhbGluZyB3aXRoIGNhbGxiYWNrIG1pZ3JhdGlvbiBkdXJpbmcgUkNVIHRyZWUgbW9kaWZpY2F0aW9ucywgd2hpY2ggaXMgYSBjcml0aWNhbCBhcmVhIGZvciBlbnN1cmluZyBkYXRhIGNvbnNpc3RlbmN5IGFuZCBhdm9pZGluZyByYWNlcywgZXNwZWNpYWxseSB1bmRlciBoZWF2eSBsb2FkLiBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlIGltcGxlbWVudGF0aW9uIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIFJDVSBndWFyYW50ZWVzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBob3cgZ3JhY2UgcGVyaW9kcyBhcmUgbWFuYWdlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjYWxsYmFja3MgYmVpbmcgbW92ZWQuIEFyZSB3ZSB0YWtpbmcgaW50byBhY2NvdW50IHBvdGVudGlhbCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgdG8gdGhlIHRyZWUgd2hpbGUgbWlncmF0aW5nPyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBsb2NrcyBvciBhdG9taWMgb3BlcmF0aW9ucyBpbnZvbHZlZCBhbmQgc2VlIGhvdyB0aGV5IGludGVycGxheSB3aXRoIHRoZSBncmFjZSBwZXJpb2QgbG9naWMgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGluZGVlZCBwcmV2ZW50aW5nIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBwcmVzZXJ2aW5nIHRoZSBzZW1hbnRpY3Mgb2YgUkNVJiMzOTtzIHF1aWVzY2VudCBzdGF0ZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGUgY2FsbGJhY2tzIHRoZW1zZWx2ZXMgYXJlIGJlaW5nIGhhbmRsZWQgYXRvbWljYWxseSwgYW5kIGlmIG5vdCwgaG93IHRoZSBzeXN0ZW0gaXMgbWFuYWdpbmcgdGhhdCBjb21wbGV4aXR5LiBJJiMzOTtsbCBmb2N1cyBvbiBwb3RlbnRpYWwgZWRnZSBjYXNlcywgc3VjaCBhcyByZWN1cnNpdmUgY2FsbGJhY2sgaW52b2NhdGlvbiBvciB0aGUgaGFuZGxpbmcgb2YgZXhwZWRpdGVkIGdyYWNlIHBlcmlvZHMgZHVyaW5nIGEgbWlncmF0aW9uLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW5lZmZpY2llbmNpZXMgaGVyZSwgc3VjaCBhcyB1bm5lY2Vzc2FyeSBsb2NraW5nIG9yIHVubmVjZXNzYXJ5IGJhcnJpZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JjdXRyZWUuaD0xMTA9aW50IHJjdXRyZWVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSk7XG4tLVxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmgtMTE2LVxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmg6MTE3OnZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KTtcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oLTExOC1cbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz00NTYwPXZvaWQgcmN1dHJlZV9yZXBvcnRfY3B1X2RlYWQodm9pZClcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy00NjE0LSAqL1xua2VybmVsL3JjdS90cmVlLmM6NDYxNTp2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDA4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkJhcnJpZXJzLCBCYXJyaWVycyBFdmVyeXdoZXJlISoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG1lbW9yeSBiYXJyaWVycywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgYW5kIFNSQ1UgKFNsZWVwYWJsZSBSQ1UpIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBXaGVuIEkmIzM5O20gd29ya2luZyB3aXRoIHRoZXNlLCB0aGUgcXVlc3Rpb24gb2Ygc3luY2hyb25pemF0aW9uIGlzIGFsd2F5cyBwcmVzZW50LCBidXQgdGhlIGRldGFpbHMgY2hhbmdlLCBkZXBlbmRpbmcgb24gd2hpY2ggUkNVIGZsYXZvciBJJiMzOTttIGRlYWxpbmcgd2l0aC4KClNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gc29saWRpZnkgdGhlIGNvbm5lY3Rpb24gd2l0aCBgcmN1X2JhcnJpZXJgIGFuZCBgc3JjdV9iYXJyaWVyYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgdGhhdCB1cGRhdGVzIHBlcmZvcm1lZCB3aXRoaW4gYW4gUkNVIGNyaXRpY2FsIHNlY3Rpb24gYmVjb21lIHZpc2libGUgdG8gcmVhZGVycyAqYWZ0ZXIqIHRoZSBncmFjZSBwZXJpb2QuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlaXIgaW1wbGVtZW50YXRpb25zLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbW9kZWwgKGxpa2UsIGNvbnNpZGVyaW5nIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzKSwgaXMga2V5LgoKTXkgZm9jdXMgaXMgdG8gZW5zdXJlIHRoYXQgSSYjMzk7dmUgYWNjb3VudGVkIGZvciBldmVyeSBwb3NzaWJsZSBzY2VuYXJpbyB3aGVyZSBkYXRhIHJhY2VzIGFyZSBhdm9pZGVkIG9yIGhhbmRsZWQgY29ycmVjdGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgd2hlbiB1c2luZyB0aGVzZSBwYXJ0aWN1bGFyIGJhcnJpZXIgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkgcmN1X2JhcnJpZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTUxPXZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKTtcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDo1Mjp2b2lkIHJjdV9iYXJyaWVyX3Rhc2tzKHZvaWQpO1xuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTUzLXZvaWQgc3luY2hyb25pemVfcmN1KHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oPTM2PXZvaWQgc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oLTM3LVxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmg6Mzg6dm9pZCByY3VfYmFycmllcih2b2lkKTtcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oLTM5LXZvaWQgcmN1X21vbWVudGFyeV9lcXModm9pZCk7XG4tLVxua2VybmVsL3JjdS90YXNrcy5oPTEyMjI9RVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X3Rhc2tzKTtcbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIyOS0gKi9cbmtlcm5lbC9yY3UvdGFza3MuaDoxMjMwOnZvaWQgcmN1X2JhcnJpZXJfdGFza3Modm9pZClcbmtlcm5lbC9yY3UvdGFza3MuaC0xMjMxLXtcbi0tXG5rZXJuZWwvcmN1L3RpbnkuYz0xMTM9c3RhdGljIHZvaWQgcmN1X2RlZmVyX2ZsdXNoKHZvaWQpXG4tLVxua2VybmVsL3JjdS90aW55LmMtMTE5LVxua2VybmVsL3JjdS90aW55LmM6MTIwOnZvaWQgcmN1X2JhcnJpZXIodm9pZClcbmtlcm5lbC9yY3UvdGlueS5jLTEyMS17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9Mzk1MT1zdGF0aWMgdm9pZCByY3VfYmFycmllcl9oYW5kbGVyKHZvaWQgKmNwdV9pbilcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0zOTc2LSAqL1xua2VybmVsL3JjdS90cmVlLmM6Mzk3Nzp2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG5rZXJuZWwvcmN1L3RyZWUuYy0zOTc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTExMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipTUkNVIEJhcnJpZXIgTXVzaW5ncyoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgc3JjdV9iYXJyaWVyYC4uLiB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB3aXRoIHRoYXQgYmVhc3Q/IFdlJiMzOTt2ZSBnb3Qgb3VyIGdyYWNlIHBlcmlvZCBsb2dpYywgdGhlIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgYW5kIHRoZW4gdGhpcyBiYXJyaWVyIGZ1bmN0aW9uLiBJJiMzOTttIHRyeWluZyB0byBtZW50YWxseSBtYXAgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIHVzYWdlLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGFuZCB3aGF0IGd1YXJhbnRlZXMgaXQgKnRydWx5KiBwcm92aWRlcy4KCkkmIzM5O20gcGljdHVyaW5nIGhvdyBgc3JjdV9iYXJyaWVyYCBlbnN1cmVzIHRoYXQgYWxsIGV4aXN0aW5nIHJlYWRlcnMgaGF2ZSBleGl0ZWQgdGhlaXIgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucy4gVGhhdCBpbXBsaWVzIGEgc3luY2hyb25pemF0aW9uIHBvaW50LCBidXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJlIHRoZSBjcnV4LiBJcyBpdCBhIGZ1bGwgbWVtb3J5IGJhcnJpZXI/IElzIHRoZXJlIGFueSBzcGVjaWZpYyBvcmRlcmluZyBlbmZvcmNlZD8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBDUFUgY2FjaGUgY29oZXJlbmN5IGF0IGFsbCwgb3IgaXMgdGhhdCBoYW5kbGVkIGltcGxpY2l0bHkgYnkgdGhlIFJDVSBpbmZyYXN0cnVjdHVyZSBpdHNlbGY/CgpJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLCB0aGlua2luZyBhYm91dCBob3cgaXQgcHJldmVudHMgZGF0YSByYWNlcyBiZXR3ZWVuIHJlYWRlcnMgYW5kIHdyaXRlcnMuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlJiMzOTtzIGFueSByb29tIGZvciBvcHRpbWl6YXRpb24gdGhlcmUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIG92ZXJhbGwgUkNVIGludGVncml0eS4gQXJlIHRoZXJlIHBvdGVudGlhbCBwaXRmYWxscyBpbiBob3cgaXQgaGFuZGxlcyBuZXN0ZWQgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG9yIHBvdGVudGlhbCBmb3IgYW55IGVkZ2UgY2FzZSBzY2VuYXJpb3MgdGhhdCBjb3VsZCBzdGlsbCBsZWFkIHRvIGlzc3Vlcz8gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBoYXZlIHRob3VnaHQgb2YgdGhlc2UgdGhpbmdzLCBidXQgSSBsaWtlIHRvIHJldmlldyB0aGUgY29kZSB0byBiZSBzdXJlLCBpbiBteSBvd24gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKSBzcmN1X2JhcnJpZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zcmN1dGlueS5oPTEzNT1zdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4tLVxuaW5jbHVkZS9saW51eC9zcmN1dGlueS5oLTEzOS1cbmluY2x1ZGUvbGludXgvc3JjdXRpbnkuaDoxNDA6dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xuaW5jbHVkZS9saW51eC9zcmN1dGlueS5oLTE0MS1cbi0tXG5pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmg9MjQyPXZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xuaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oOjI0Mzp2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XG5pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmgtMjQ0LXZvaWQgc3JjdV9leHBlZGl0ZV9jdXJyZW50KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9Mjk3PUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpO1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yOTktLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcywgdGhlbiB3YWl0IGZvciBhbGwgaW4tZmxpZ2h0IG9uZXMuICovXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MzAwOnZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTMwMS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE3ODI9c3RhdGljIHZvaWQgc3JjdV9iYXJyaWVyX29uZV9jcHUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCBzcmN1X2RhdGEgKnNkcClcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTc5OS0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxODAwOnZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE4MDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg4NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBhIE5ldyBSQ1UgQ29uZmlndXJhdGlvbiBPcHRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBDT05GSUdfUkNVX0RFRkVSYC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBzb3VyY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBuZXcgZmxhZyAqbWVhbnMqIGZvciB0aGUgUkNVIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIGBrZXJuZWwvcmN1L0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBoZWxwIHRleHQsIGFuZCB3aGVyZSB0aGlzIG9wdGlvbiBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBSQ1UgY29uZmlndXJhdGlvbiBjaG9pY2VzLiBJcyB0aGlzIHJlbGF0ZWQgdG8gZ3JhY2UgcGVyaW9kcywgZXhwZWRpdGVkIFJDVSwgb3IgYSBzcGVjaWZpYyBmbGF2b3Igb2YgZGVmZXJyZWQgcmVjbGFtYXRpb24/IElzIGl0IGEgY29tcGlsZS10aW1lIG9wdGltaXphdGlvbiwgb3Igc29tZXRoaW5nIHRoYXQgYWx0ZXJzIHJ1bnRpbWUgYmVoYXZpb3Igc2lnbmlmaWNhbnRseT8gVGhlIEtjb25maWcgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgdGhpcyBuZXcgcGllY2Ugb2YgdGhlIFJDVSBwdXp6bGUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIGl0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBvZiB0aGUgUkNVIHN1YnN5c3RlbS4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkNVX0RFRkVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvS2NvbmZpZz0xNzU9Y29uZmlnIFJDVV9ORUVEX1NFR0NCTElTVFxuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy0xNzktIyBjYWxsX3NyY3UoKSBjYW4gYmUgaW52b2tlZCB3aGlsZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIGlzIGluIGZsaWdodC5cbmtlcm5lbC9yY3UvS2NvbmZpZzoxODA6Y29uZmlnIFJDVV9ERUZFUlxua2VybmVsL3JjdS9LY29uZmlnLTE4MS1cdGRlZl9ib29sIEhBVkVfTk1JIHx8IEtQUk9CRVMgfHwgRlVOQ1RJT05fVFJBQ0VSIHx8IFRSQUNFUE9JTlRTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjY5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJDVV9ERUZFUiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBgQ09ORklHX1JDVV9ERUZFUmAgaXMgYXV0b21hdGljYWxseSBzZXQgYmFzZWQgb24gc29tZSBvdGhlciBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBkZWZpbmVkIGFzIGEgYm9vbGVhbiBleHByZXNzaW9uOiBgZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNgLiBSaWdodCwgc28gdGhpcyBpc24mIzM5O3Qgc29tZXRoaW5nIEkgY2FuIGV4cGxpY2l0bHkgZW5hYmxlIGluIGEgdXNlci1mYWNpbmcgYC5jb25maWdgIGZpbGUgZGlyZWN0bHksIGFzIGl0IGhhcyBubyBwcm9tcHQuIEl0JiMzOTtzIGRldGVybWluZWQgYnkgdGhlIHByZXNlbmNlIG9mIGBIQVZFX05NSWAsIGBLUFJPQkVTYCwgYEZVTkNUSU9OX1RSQUNFUmAsIG9yIGBUUkFDRVBPSU5UU2AuIAoKU2luY2UgYEhBVkVfTk1JYCBpcyBwcmV0dHkgY29tbW9uIG9uIHg4NiwganVzdCBsaXN0aW5nIGBSQ1VfREVGRVJgIGlzIHJlZHVuZGFudC4gSSBjYW4gZW5hYmxlIGBLUFJPQkVTYCwgYEZVTkNUSU9OX1RSQUNFUmAsIG9yIGBUUkFDRVBPSU5UU2AgdG8gZW5zdXJlIGBSQ1VfREVGRVJgIGdldHMgZW5hYmxlZC4KCldhaXQgYSBzZWNvbmTigKYgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gbGlzdCBpdGVtcyAqd2l0aG91dCogdGhlIGBDT05GSUdfYCBwcmVmaXggaW4gdGhlIG91dHB1dCBhcnJheS4gSWYgaXQmIzM5O3MgYGRlZl9ib29sIEhBVkVfTk1JIHx8IEtQUk9CRVMgfHwgRlVOQ1RJT05fVFJBQ0VSIHx8IFRSQUNFUE9JTlRTYCwgSSYjMzk7bSBnb2luZyB0byBsaXN0IGBLUFJPQkVTYCBvciBgRlVOQ1RJT05fVFJBQ0VSYCB0byBiZSBzYWZlIGFuZCBhdm9pZCBpc3N1ZXMgaWYgYEhBVkVfTk1JYCBpcyBhbHJlYWR5IGVuYWJsZWQuIFRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSByZXF1aXJlZCBvdXRwdXQuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgcmN1X3RvcnR1cmVfbm1pX2luaXRgIHdoaWNoIGlzIGluIGBrZXJuZWwvcmN1L3JjdXRvcnR1cmUuY2AgdG8gc2VlIGlmIGl0IGJyaW5ncyBpbiBgQ09ORklHX1BFUkZfRVZFTlRTYC4gT2theSwgaXQgdXNlcyBgQ09ORklHX1BFUkZfRVZFTlRTYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmN1X3RvcnR1cmVfbm1pX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS9yY3V0b3J0dXJlLmM9MjY5Nj1zdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuLS1cbmtlcm5lbC9yY3UvcmN1dG9ydHVyZS5jLTI3MDctXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYzoyNzA4OnN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9pbml0KHZvaWQpXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYy0yNzA5LXtcbi0tXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYz0yNzI5PXN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpXG4tLVxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmMtMjc0NC0jZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYzoyNzQ1OnN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9pbml0KHZvaWQpIHsgfVxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmMtMjc0Ni1zdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2xlYW51cCh2b2lkKSB7IH1cbi0tXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYz00NzQ0PXJjdV90b3J0dXJlX2luaXQodm9pZClcbi0tXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYy00ODkyLVx0LyogQXJtIHRoZSBwZXItQ1BVIHBlcmYgY291bnRlcnMgdGhhdCBkcml2ZSAtXHUwMDNlY2FsbCgpIGZyb20gTk1JLiAqL1xua2VybmVsL3JjdS9yY3V0b3J0dXJlLmM6NDg5MzpcdHJjdV90b3J0dXJlX25taV9pbml0KCk7XG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYy00ODk0LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlYWxyZWFkZXJzOyBpJiM0MzsmIzQzOykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMyNAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBSQ1UgVG9ydHVyZSBUZXN0aW5nIGFuZCBEZWZlcnJhbCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSB0ZXN0IHRoZSBOb24tTWFza2FibGUgSW50ZXJydXB0IChOTUkpIHBhdGggaW4gYHJjdXRvcnR1cmVgLiBJdCYjMzk7cyBjbGVhciB0aGF0IEkgbmVlZCBgUEVSRl9FVkVOVFNgIGVuYWJsZWQsIGFuZCwgb2YgY291cnNlLCB0aGUgYFJDVV9UT1JUVVJFX1RFU1RgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBIb3dldmVyLCBgcmN1dG9ydHVyZWAgaXRzZWxmIGlzIGEgdGVzdCBtb2R1bGU7IEkgZG9uJiMzOTt0IG5lY2Vzc2FyaWx5IG5lZWQgdG8gZm9jdXMgb24gZnV6emluZyAqaXQqIGRpcmVjdGx5LiBUaGUgbW9yZSB2YWx1YWJsZSB0YXJnZXQgZm9yIGZ1enppbmcsIEkgdGhpbmssIGlzIHRoZSBjb3JlIFJDVSBkZWZlcnJhbCBsb2dpYy4gVGhhdOKAmXMgd2hlcmUgdGhlIHJlYWwgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB3aWxsIGJlLgoKVGhlIGRlZmVycmFsIGxvZ2ljIGlzLCBvZiBjb3Vyc2UsIGNlbnRyYWwgdG8gYGNhbGxfcmN1YCBhbmQgYGNhbGxfc3JjdWAsIGFuZCB0aG9zZSBhcmUgY2FsbGVkICpldmVyeXdoZXJlKi4gVGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5ICpoYW5kbGUqIHRoZSBkZWZlcnJlZCBjYWxsYmFja3MgYXJlIHRoaW5ncyBsaWtlOiBgc3JjdV9kZWZlcl9kcmFpbmAsIGByY3VfZGVmZXJfZHJhaW5gLCBgc3JjdV9vZmZsaW5lX2RyYWluYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBgcmN1X2JhcnJpZXJgLCBhbmQgYHNyY3VfYmFycmllcmAuCgpXYWl0IGEgbWludXRlLi4uIEkmIzM5O20gbm90aWNpbmcgc29tZXRoaW5nLiBgcmN1X2RlZmVyX2RyYWluYCBhbmQgYHNyY3VfZGVmZXJfZHJhaW5gIGFyZSAqc3RhdGljKiB3aXRoaW4gYHRyZWUuY2AgYW5kIGBzcmN1dHJlZS5jYC4gVGhhdOKAmXMgc2lnbmlmaWNhbnQuIEhtbSwgKnNyY3VfZGVmZXJfZHJhaW4qIGlzIGV4cG9ydGVkIGZyb20gYHNyY3V0aW55LmNgLCBidXQgaXQmIzM5O3Mgc3RhdGljIGluIGBzcmN1dHJlZS5jYC4gIFNpbmNlIGBzcmN1dHJlZS5jYCBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgU01QIHN5c3RlbXMsIGl0IG1lYW5zIGBzcmN1X2RlZmVyX2RyYWluYCBpcyBzdGF0aWMgaW4gdGhlIG1vc3QgY29tbW9uIGNhc2UuIFRoYXQgaW1wbGllcyBsaW1pdGVkIGFjY2VzcyBmb3IgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBgc3JjdV9vZmZsaW5lX2RyYWluYCBpcyBleHBvcnRlZCBhcyB3ZWxsLiBUaGlzIG1pZ2h0IGluZmx1ZW5jZSBteSBmdXp6aW5nIHN0cmF0ZWd5IGFuZCB0ZXN0IGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipzcmN1X29mZmxpbmVfZHJhaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAzNQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipBbmFseXppbmcgS2VybmVsIFN5bmNocm9uaXphdGlvbiBQcmltaXRpdmVzKioKCkFscmlnaHQsIHNvIHRoZSB0aGluZyBpc24mIzM5O3QgKnN0YXRpY2FsbHkqIGRlZmluZWQsIGJ1dCBpdCYjMzk7cyBub3Qgc2ltcGx5IGFuIGludGVybmFsLCBzdGF0aWMgY29uc3RydWN0IGVpdGhlci4gSW50cmlndWluZy4gTGV0JiMzOTtzIGRpZyBkZWVwZXI6IHNwZWNpZmljYWxseSwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGlzbiYjMzk7dCBzdGF0aWMsIG1lYW5pbmcgaXQmIzM5O3MgcG90ZW50aWFsbHkgdmlzaWJsZSBiZXlvbmQgaXRzIGltbWVkaWF0ZSBzY29wZS4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBOb3csIGF0IGxlYXN0IEkgKmRvKiBrbm93IHRoYXQgYHJjdV9iYXJyaWVyYCBhbmQgYHNyY3VfYmFycmllcmAgYXJlLCBpbiBmYWN0LCBleHBvcnRlZC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdCwgcHJvdmlkaW5nIHNvbWUgY29uY3JldGUgcG9pbnRzIG9mIHJlZmVyZW5jZS4KClRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB2ZXJpZnkgdGhlIGV4cG9ydCBzdGF0dXMgb2YgYHJjdV9iYXJyaWVyYCBhbmQgYHNyY3VfYmFycmllcmAgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGJlaW5nIHVzZWQuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlaXIgZXhwb3J0IHN0YXR1cyBhbmQgd2hhdCB0aGF0IGltcGxpZXMgaW4gdGVybXMgb2Yga2VybmVsIGRlc2lnbiBhbmQgZGVwZW5kZW5jeS4gS25vd2luZyB0aGVpciBpbnRlcmZhY2UgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXkmIzM5O3JlIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnJjdV9iYXJyaWVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3Uvc3JjdXRpbnkuYz0zMDA9dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTMwNS19XG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MzA2OkVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7XG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMzA3LVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xODAwPXZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xODQyLX1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxODQzOkVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7XG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTg0NC1cbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTIzMD12b2lkIHJjdV9iYXJyaWVyX3Rhc2tzKHZvaWQpXG4tLVxua2VybmVsL3JjdS90YXNrcy5oLTEyMzMtfVxua2VybmVsL3JjdS90YXNrcy5oOjEyMzQ6RVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXJfdGFza3MpO1xua2VybmVsL3JjdS90YXNrcy5oLTEyMzUtXG4tLVxua2VybmVsL3JjdS90aW55LmM9MTIwPXZvaWQgcmN1X2JhcnJpZXIodm9pZClcbi0tXG5rZXJuZWwvcmN1L3RpbnkuYy0xMjUtfVxua2VybmVsL3JjdS90aW55LmM6MTI2OkVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpO1xua2VybmVsL3JjdS90aW55LmMtMTI3LVxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTM5Nzc9dm9pZCByY3VfYmFycmllcih2b2lkKVxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQwNzQtfVxua2VybmVsL3JjdS90cmVlLmM6NDA3NTpFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcik7XG5rZXJuZWwvcmN1L3RyZWUuYy00MDc2LVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9MTM0Mz12b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTM0Ny19XG5tbS9zbGFiX2NvbW1vbi5jOjEzNDg6RVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyKTtcbm1tL3NsYWJfY29tbW9uLmMtMTM0OS1cbm1tL3NsYWJfY29tbW9uLmM9MTM1MD12b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEzNTQtfVxubW0vc2xhYl9jb21tb24uYzoxMzU1OkVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZSk7XG5tbS9zbGFiX2NvbW1vbi5jLTEzNTYtXG4tLVxubW0vc2xhYl9jb21tb24uYz0yMTc3PXZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0yMTgxLX1cbm1tL3NsYWJfY29tbW9uLmM6MjE4MjpFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXIpO1xubW0vc2xhYl9jb21tb24uYy0yMTgzLVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9MjE5MT12b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTIyMDQtfVxubW0vc2xhYl9jb21tb24uYzoyMjA1OkVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZSk7XG5tbS9zbGFiX2NvbW1vbi5jLTIyMDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTYzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgTGluZSBvZiBSZWFzb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byB0YXJnZXQgc29tZSBSQ1UgZGVmZXJyYWwgbG9naWMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggZGVmZXJyZWQgUkNVIGZsdXNoaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYHJjdV9iYXJyaWVyYCBhbmQgYHNyY3VfYmFycmllcmAgc2VlbWVkIGxpa2UgZ29vZCB0YXJnZXRzIHNpbmNlIHRoZXkmIzM5O3JlIGV4cG9ydGVkIGFuZCBJIHNhdyB0aGV5IHdlcmUgbW9kaWZpZWQgdG8gY2FsbCBgcmN1X2RlZmVyX2ZsdXNoKClgIGFuZCBgc3JjdV9kZWZlcl9mbHVzaCgpYC4gV2FpdCwgdGhhdCYjMzk7cyBub3QgcmlnaHQsIHRob3NlIGBfZGVmZXJfZmx1c2hgIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBzbyB0aGF0IGFwcHJvYWNoIHdvbiYjMzk7dCB3b3JrLgoKQnV0LCBJIHNlZSBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgQ1BVIGhvdHBsdWcgYW5kIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEFsc28sIGBzcmN1X29mZmxpbmVfZHJhaW5gIGlzIGFsc28gY2FsbGVkIGR1cmluZyBDUFUgaG90cGx1Zywgc28gdGhvc2UgdHdvIGFyZSBwb3RlbnRpYWwgdGFyZ2V0cy4KCkkgcmVtZW1iZXIgdGhlIGByY3VfcmVlbnRyeS5jYCBzZWxmdGVzdCwgYW5kIGl0IHVzZXMgQlBGIHRvIHRyaWdnZXIgYGNhbGxfcmN1X3Rhc2tzX3RyYWNlYCBmcm9tIGByY3Vfc2VnY2JsaXN0X2VucXVldWVgIHZpYSBgYnBmX3Rhc2tfc3RvcmFnZV9kZWxldGVgLiBUaGF0IHN1Z2dlc3RzIHRoYXQgQlBGIGNhbiB0cmlnZ2VyIHRoaXMgZGVmZXJyYWwgbG9naWMsIHdoaWNoIG1lYW5zIGZ1enppbmcgQlBGIHN5c2NhbGxzIGFuZCBtYXBzIGlzIGEgZ29vZCBhdmVudWUgdG8gZXhwbG9yZS4gVGhlIGdvb2QgdGhpbmcgaXMgdGhhdCBJIGRvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgQlBGIGZ1bmN0aW9ucywganVzdCBmb2N1cyBvbiB0aGUgUkNVIGZ1bmN0aW9ucy4KClNvLCBoZXJlJiMzOTtzIHRoZSBjb3JlIHNldCBvZiBzeW1ib2xzIEkmIzM5O20gZm9jdXNpbmcgb246IGByY3VfYmFycmllcmAsIGBzcmN1X2JhcnJpZXJgLCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AsIGFuZCBgc3JjdV9vZmZsaW5lX2RyYWluYC4KCkhvd2V2ZXIsIG5vdyBJIHJlbWVtYmVyIHRoYXQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGFuZCBgc3JjdV9vZmZsaW5lX2RyYWluYCBhcmVuJiMzOTt0IHN5c2NhbGxzOyB0aGV5JiMzOTtyZSBpbnRlcm5hbCBrZXJuZWwgZnVuY3Rpb25zLiBTeXprYWxsZXIgY2FuJiMzOTt0IGRpcmVjdGx5IGNhbGwgdGhlbS4gSG93ZXZlciwgaXQgKmNhbiogdHJpZ2dlciBDUFUgaG90cGx1Zywgd2hpY2gsIGluIHR1cm4sIGNhbGxzIHRoZXNlIGZ1bmN0aW9ucy4KClN5emthbGxlciAqY2FuKiBkaXJlY3RseSBjYWxsIGByY3VfYmFycmllcmAgYW5kIGBzcmN1X2JhcnJpZXJgIHZpYSB2YXJpb3VzIHN5c2NhbGxzIG9yIGlmIHdlIGFkZCB0aGVtIGRpcmVjdGx5IHRvIHN5emxhbmcsIGJ1dCB0aGV5JiMzOTtyZSBwcm9iYWJseSBhbHJlYWR5IHJlYWNoYWJsZSB0aHJvdWdoIG1hbnkgb3RoZXIgZXhpc3RpbmcgcGF0aHMuCgpUaGUga2V5IGluc2lnaHQgaXMgdGhpczogZXZlbiBpZiBJIGp1c3QgbGlzdCBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgYXMgdGFyZ2V0cywgU3l6a2FsbGVyJiMzOTtzIGNvdmVyYWdlIGd1aWRhbmNlIHdpbGwgdGhlbiB0cnkgdG8gcmVhY2ggdGhlbS4gVGhhdCBtaWdodCBiZSB0aGUgc2ltcGxlc3QgYXBwcm9hY2guCgpJIG5lZWQgdG8gY2hlY2sgaG93IHRvIHJlYWNoIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vTWVtb3J5LU9yZGVyaW5nL1RyZWUtUkNVLU1lbW9yeS1PcmRlcmluZy5yc3Q9Mjk0PWZpbmFsIGNvZGUgcGF0aCBvbiB0aGUgcmlnaHQgaXMgdGFrZW4gb25seSBpbiBrZXJuZWxzIGJ1aWx0IHdpdGhcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vTWVtb3J5LU9yZGVyaW5nL1RyZWUtUkNVLU1lbW9yeS1PcmRlcmluZy5yc3QtMjk2LWBgcmN1X2FkdmFuY2VfY2JzKClgYCwgYGByY3VfbWlncmF0ZV9jYWxsYmFja3NgYCxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9NZW1vcnktT3JkZXJpbmcvVHJlZS1SQ1UtTWVtb3J5LU9yZGVyaW5nLnJzdDoyOTc6YGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKClgYCwgYW5kIGBgdGFrZWRvd25fY3B1KClgYCwgd2hpY2ggaW4gdHVyblxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL01lbW9yeS1PcmRlcmluZy9UcmVlLVJDVS1NZW1vcnktT3JkZXJpbmcucnN0LTI5OC1pcyBpbnZva2VkIG9uIGEgc3Vydml2aW5nIENQVSBhZnRlciB0aGUgb3V0Z29pbmcgQ1BVIGhhcyBiZWVuIGNvbXBsZXRlbHlcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vTWVtb3J5LU9yZGVyaW5nL1RyZWVSQ1UtY2FsbGJhY2stcmVnaXN0cnkuc3ZnLTU2NS0gICAgICAgaWQ9XCYjMzQ7dGV4dDIwMi03LTktNlwmIzM0O1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL01lbW9yeS1PcmRlcmluZy9UcmVlUkNVLWNhbGxiYWNrLXJlZ2lzdHJ5LnN2Zzo1NjY6ICAgICAgIHN0eWxlPVwmIzM0O2ZvbnQtc2l6ZToxOTJweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpib2xkO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4wMjVpbjtmb250LWZhbS4uLlxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL01lbW9yeS1PcmRlcmluZy9UcmVlUkNVLWNhbGxiYWNrLXJlZ2lzdHJ5LnN2Zy01NjctICAgIFx1MDAzY3RleHRcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vTWVtb3J5LU9yZGVyaW5nL1RyZWVSQ1UtZ3Auc3ZnLTE0NDctICAgICAgIGlkPVwmIzM0O3RleHQyMDItNy05LTZcJiMzNDtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9NZW1vcnktT3JkZXJpbmcvVHJlZVJDVS1ncC5zdmc6MTQ0ODogICAgICAgc3R5bGU9XCYjMzQ7Zm9udC1zaXplOjE5MnB4O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbmNob3I6c3RhcnQ7ZmlsbDojMDAwMDAwO3N0cm9rZS13aWR0aDowLjAyNWluO2ZvbnQtZmFtaWx5OkNvdXJpZXJcJiMzNDtcdTAwM2VyLi4uXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vTWVtb3J5LU9yZGVyaW5nL1RyZWVSQ1UtZ3Auc3ZnLTE0NDktICAgIFx1MDAzY3RleHRcbi0tXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oPTU1MD1lbnVtXG4tLVxuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaC01NjktICogXyBSQ1U6XG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oOjU3MDogKiBcdDEpIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKSBtaWdyYXRlcyB0aGUgcXVldWUuXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oLTU3MS0gKiBcdDIpIHJjdXRyZWVfcmVwb3J0X2NwdV9kZWFkKCkgcmVwb3J0cyB0aGUgZmluYWwgcXVpZXNjZW50IHN0YXRlcy5cbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaD0xMTA9aW50IHJjdXRyZWVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSk7XG4tLVxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmgtMTE2LVxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmg6MTE3OnZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KTtcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oLTExOC1cbi0tXG5rZXJuZWwvY3B1LmM9MTMwMj1zdGF0aWMgaW50IHRha2Vkb3duX2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbmtlcm5lbC9jcHUuYy0xMzUxLVx0ICovXG5rZXJuZWwvY3B1LmM6MTM1MjpcdHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoY3B1KTtcbmtlcm5lbC9jcHUuYy0xMzUzLVxuLS1cbmtlcm5lbC9yY3UvcmN1Lmg9NTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpXG4tLVxua2VybmVsL3JjdS9yY3UuaC01ODktXG5rZXJuZWwvcmN1L3JjdS5oOjU5MDovKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUmIzM5O3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovXG5rZXJuZWwvcmN1L3JjdS5oLTU5MS12b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTUxNT1zdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1MzgtICogRHJhaW4gQGNwdSYjMzk7cyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3M7IGNhbGxlZCBmcm9tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTUzOTogKiByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkgb25jZSBAY3B1IGlzIGRlYWQuICBPbmUgcGFzcyBjb3ZlcnMgZXZlcnlcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTQwLSAqIHNyY3Vfc3RydWN0LCBhcyB0aGUgcGVyLUNQVSBzcmN1X2RlZmVyIGxpc3QgY2hhaW5zIHRoZW0gYWxsLCBhbmQgdGhlXG4tLVxua2VybmVsL3JjdS90cmVlLmM9MzE2Nj1zdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0zMjE5LSAqIHRoZSBkcmFpbmVycyAtLSB0aGlzIENQVSYjMzk7cyBpcnFfd29yaywgcmN1X2RlZmVyX2ZsdXNoKCkgYW5kXG5rZXJuZWwvcmN1L3RyZWUuYzozMjIwOiAqIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKSAtLSBzZXJpYWxpemUgYW5kIG5ldmVyIGxlYXZlIGEgY2FsbGJhY2sgb2ZmXG5rZXJuZWwvcmN1L3RyZWUuYy0zMjIxLSAqIC1cdTAwM2VkZWZlcl9oZWFkIHlldCBub3Qgb24gYSBjYWxsYmFjayBsaXN0LlxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTQ1NjA9dm9pZCByY3V0cmVlX3JlcG9ydF9jcHVfZGVhZCh2b2lkKVxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MTQtICovXG5rZXJuZWwvcmN1L3RyZWUuYzo0NjE1OnZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KVxua2VybmVsL3JjdS90cmVlLmMtNDYxNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDA2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSQ1UgQ29kZSBmb3IgU3l6a2FsbGVyIFRlc3RpbmcqKgoKT2theSwgc28gYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGlzIGRlZmluaXRlbHkgY2FsbGVkIGZyb20gYHRha2Vkb3duX2NwdWAgd2l0aGluIGBrZXJuZWwvY3B1LmNgLiBUaGF0JiMzOTtzIGluIHRoZSBDUFUgaG90cGx1ZyBwYXRoLCB3aGljaCBtYWtlcyBpdCBhIHNvbGlkIHRhcmdldC4gTm93LCBsZXQmIzM5O3MgZXhwbG9yZSBvdGhlciBzdWl0YWJsZSBmdW5jdGlvbnMuIGBjYWxsX3JjdV9kZWZlcmAgaXMgaW50ZXJuYWwgdG8gdGhlIGRlZmVycmFsIGxvZ2ljLiBBbmQgYmVjYXVzZSBpdCYjMzk7cyBzdGF0aWMgaXQmIzM5O3Mgbm90IGlkZWFsLiBTYW1lIHdpdGggYHNyY3VfZGVmZXJfZHJhaW5gIGFuZCBgcmN1X2RlZmVyX2RyYWluYCwgdGhleSYjMzk7cmUgdGhlIGlycV93b3JrIGhhbmRsZXJzLgoKQnV0LCBob2xkIG9uLi4uIGByY3VfZGVmZXJfZHJhaW5gIGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYElSUV9XT1JLX0lOSVRfSEFSRGAsIHdoaWNoIG1lYW5zIGl0IGlzbiYjMzk7dCBpbmxpbmVkISBFeGNlbGxlbnQsIHRoYXQgbWFrZXMgaXQgbW9yZSBhY2Nlc3NpYmxlLgoKRm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMsIEkgbmVlZCB0byBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFNvLCBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgbG9vayBsaWtlIGdvb2Qgb3B0aW9ucy4KCk5vdywgYWJvdXQgYENPTkZJR19SQ1VfREVGRVJgLiBJdCBkZXBlbmRzIG9uIGBIQVZFX05NSSB8fCBLUFJPQkVTIHx8IEZVTkNUSU9OX1RSQUNFUiB8fCBUUkFDRVBPSU5UU2AuIFRvIGVuc3VyZSBpdCYjMzk7cyBlbmFibGVkLCBJJiMzOTtsbCBuZWVkIHRvIGFkZCBgS1BST0JFU2AgYW5kIGBGVU5DVElPTl9UUkFDRVJgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEFsc28sIGBQRVJGX0VWRU5UU2AgaXMgbmVjZXNzYXJ5IGZvciBgcmN1X3RvcnR1cmVfbm1pX2luaXRgLiBBbmQgb2YgY291cnNlLCBJIG5lZWQgYFJDVV9UT1JUVVJFX1RFU1RgIHRvIHJ1biB0aGUgdG9ydHVyZSB0ZXN0cy4KCkJ1dCwgYFJDVV9UT1JUVVJFX1RFU1RgIGlzIGEgbW9kdWxlLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgbG9hZCBpdCBieSBkZWZhdWx0IHVubGVzcyBpdCYjMzk7cyBidWlsdC1pbiBvciBleHBsaWNpdGx5IGxvYWRlZC4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gbGlzdCBjb25maWd1cmF0aW9uIGZsYWdzIG5lZWRlZCB0byBjb21waWxlIGFuZCB0ZXN0IHRoZSAqbW9kaWZpZWQqIGNvZGUuIFNvLCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBgUEVSRl9FVkVOVFNgLCBhbmQgYFJDVV9UT1JUVVJFX1RFU1RgLiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCBgUkNVX1RPUlRVUkVfVEVTVGAgaW4gYGtlcm5lbC9yY3UvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSQ1VfVE9SVFVSRV9URVNUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zz0yNj1jb25maWcgUkNVX1NDQUxFX1RFU1Rcbi0tXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctNDAtXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWc6NDE6Y29uZmlnIFJDVV9UT1JUVVJFX1RFU1Rcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy00Mi1cdHRyaXN0YXRlIFwmIzM0O3RvcnR1cmUgdGVzdHMgZm9yIFJDVVwmIzM0O1xuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy01NS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo1Njpjb25maWcgUkNVX1RPUlRVUkVfVEVTVF9DSEtfUkRSX1NUQVRFXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctNTctXHRib29sIFwmIzM0O0NoZWNrIHJjdXRvcnR1cmUgcmVhZGVyIHN0YXRlXCYjMzQ7XG4tLVxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTcxLVxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnOjcyOmNvbmZpZyBSQ1VfVE9SVFVSRV9URVNUX0xPR19DUFVcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy03My1cdGJvb2wgXCYjMzQ7TG9nIENQVSBmb3IgcmN1dG9ydHVyZSBmYWlsdXJlc1wmIzM0O1xuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy04Ni1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo4Nzpjb25maWcgUkNVX1RPUlRVUkVfVEVTVF9MT0dfR1Bcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy04OC1cdGJvb2wgXCYjMzQ7TG9nIGdyYWNlLXBlcmlvZCBudW1iZXJzIGZvciByY3V0b3J0dXJlIGZhaWx1cmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjczCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIERlcGVuZGVuY3kgQ2hhaW4qKgoKT2theSwgc28gYFJDVV9UT1JUVVJFX1RFU1RgIGlzIGZsYWdnaW5nIGEgZGVwZW5kZW5jeSBvbiBgVE9SVFVSRV9URVNUYC4gVGhhdCYjMzk7cyBhIGNvbW1vbiBwYXR0ZXJuIGluIHRoZSBmcmFtZXdvcms7IG9uZSB0ZXN0IG9mdGVuIGJ1aWxkcyB1cG9uIGFub3RoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYFRPUlRVUkVfVEVTVGAgdG8gZmlndXJlIG91dCB3aHkgYFJDVV9UT1JUVVJFX1RFU1RgIG1pZ2h0IGJlIGZhaWxpbmcsIG9yIGJlaGF2aW5nIGluIGFuIHVuZXhwZWN0ZWQgbWFubmVyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBUT1JUVVJFX1RFU1RgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUT1JUVVJFX1RFU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS9LY29uZmlnLmRlYnVnPTExPWNvbmZpZyBQUk9WRV9SQ1VfTElTVFxuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy0yMS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1ZzoyMjpjb25maWcgVE9SVFVSRV9URVNUXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctMjMtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk0NQoJCQkJCQkJb3V0cHV0OiAzMTYKCQkJCQkJCXRob3VnaHRzOiAyMTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBSQ1UgRGVmZXJyYWwgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSB0YXNrIGlzIHRvIGlkZW50aWZ5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLgoKSSBzZWUgdGhhdCBgVE9SVFVSRV9URVNUYCBpcyBhIHRyaXN0YXRlLCBhbmQgZW5hYmxlZCBieSBgUkNVX1RPUlRVUkVfVEVTVGAuICBTbywgZW5hYmxpbmcgYFJDVV9UT1JUVVJFX1RFU1RgIGlzIHRoZSByaWdodCB0aGluZyB0byBkby4KClRoZSBCUEYgdGVzdCB1dGlsaXplcyBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuIFRoZSBwcmVzZW5jZSBvZiBhIG5ldyBCUEYgc2VsZi10ZXN0LCBzcGVjaWZpY2FsbHkgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmNgLCBzY3JlYW1zIHRoYXQgQlBGIGlzIGEgZ3JlYXQgYXZlbnVlIGZvciB0ZXN0aW5nIHRoaXMuICBTbywgYEJQRl9TWVNDQUxMYCBpcyBkZWZpbml0ZWx5IGEga2V5IGNvbmZpZyB0byBlbmFibGUuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSByZWxldmFudCBmdW5jdGlvbnMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZmluZCBlbnRyeSBwb2ludHMgdGhhdCB0cmlnZ2VyIHRoZSBuZXcgZGVmZXJyZWQgY2FsbGJhY2sgbG9naWMgYnV0IGFyZW4mIzM5O3QgaG90IHBhdGhzLCB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZSBvbiBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAuIEFyZSB0aGV5IGhvdCBwYXRocz8gTm8sIG5vLCBubywgYW5kIG5vLiBUaGlzIGxvb2tzIHByb21pc2luZy4KCmBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIGJ1dCB0aGV5IGFyZSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gdGhvc2UgYXJlIG91dC4gVGhlIGdvYWwgaXMgdG8gZmx1c2gvbWlncmF0ZSB0aGUgbmV3IGRlZmVycmFsIGNhbGxiYWNrcy4KCkkmIzM5O20gdGhpbmtpbmc6IGBzcmN1X2RlZmVyX2RyYWluYCBpcyBleHBvcnRlZCBpbiBgc3JjdXRpbnkuY2AsIGJ1dCBzdGF0aWMgaW4gYHNyY3V0cmVlLmNgLiBgc3JjdV9vZmZsaW5lX2RyYWluYCBpcyBub3Qgc3RhdGljIGluIGBzcmN1dHJlZS5jYCwgc28gaXQmIzM5O3MgYSBiZXR0ZXIgY2hvaWNlLiBgcmN1X2JhcnJpZXJgIGNhbGxzIGByY3VfZGVmZXJfZmx1c2goKWAsIHdoaWNoIGlzIHN0YXRpYywgc28gYHJjdV9iYXJyaWVyYCBpcyBhIGdvb2QgdGFyZ2V0LiBMaWtld2lzZSwgYHNyY3VfYmFycmllcmAgY2FsbHMgc3RhdGljIGBzcmN1X2RlZmVyX2ZsdXNoKClgLCBzbyBgc3JjdV9iYXJyaWVyYCBpcyBnb29kLiBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgY2FsbHMgYHJjdV9kZWZlcl9kcmFpbmAgYW5kIGBzcmN1X29mZmxpbmVfZHJhaW5gLCBhbHNvIGxvb2tzIGdvb2QuIGBzcmN1X29mZmxpbmVfZHJhaW5gIGl0c2VsZiBjYWxscyBgc3JjdV9kZWZlcl9kcmFpbmAuIFRoZSBsaXN0OgotIGByY3VfYmFycmllcmAKLSBgc3JjdV9iYXJyaWVyYAotIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYAotIGBzcmN1X29mZmxpbmVfZHJhaW5gCgpTZWVtcyBwcmV0dHkgc29saWQuCgpDb25maWctd2lzZSwgSSYjMzk7dmUgZ290OiBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBgUEVSRl9FVkVOVFNgLCBgUkNVX1RPUlRVUkVfVEVTVGAsIGFuZCBgQlBGX1NZU0NBTExgLgoKQWgsIGJ1dCB3YWl0ISBgQ09ORklHX1JDVV9ERUZFUmAgaXMgZGVmaW5lZCBpbiB0ZXJtcyBvZiBgSEFWRV9OTUlgLCBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYFRSQUNFUE9JTlRTYC4gU28sIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBlbmFibGVkLCBJIG5lZWQgdG8gbGlzdCB0aG9zZS4gYEhBVkVfTk1JYCBpcyB1c3VhbGx5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgYnV0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgYEtQUk9CRVNgLCBgRlVOQ1RJT05fVFJBQ0VSYCwgYW5kIGBUUkFDRVBPSU5UU2AgY292ZXIgdXMuCgpgUkNVX1RPUlRVUkVfVEVTVGAgaXMgYSBtb2R1bGUuIFdoaWxlIGl0IGNvdWxkIGludHJvZHVjZSBzb21lIG5vaXNlIGlmIGl0JiMzOTtzIGJ1aWx0LWluLCB0aGUgcGF0Y2ggKm1vZGlmaWVzKiBgcmN1dG9ydHVyZS5jYCwgYWRkaW5nIE5NSSB0ZXN0aW5nLCBzbyBlbmFibGluZyBpdCBzZWVtcyBjb3JyZWN0LgoKQW5kIGBCUEZfU1lTQ0FMTGAgaXMgY3JpdGljYWwgYmVjYXVzZSBCUEYgaXMgYSBwcmltYXJ5IGRyaXZlciBvZiB0aGlzIG5ldyBsb2dpYywgYW5kIGl0IHRyaWdnZXJzIGBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcmAgaW4gYHJjdXRvcnR1cmUuY2Agc28gYFBFUkZfRVZFTlRTYCBpcyBuZWVkZWQuCgpUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmFsIG1lY2hhbmlzbSBmb3IgYGNhbGxfcmN1KClgIGFuZCBgY2FsbF9zcmN1KClgIHdoZW4gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIG5vdGFibHkgZm9yIE5NSXMgYW5kIEJQRiBwcm9ncmFtcy4gSXQgY2hhbmdlcyBjb3JlIFJDVSBhbmQgU1JDVSBsb2dpYywgYWRkaW5nIG5ldyBkZWZlcnJlZCBjYWxsYmFjayBsaXN0cyBhbmQgaXJxX3dvcmsgcXVldWVzLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBOTUkgdGVzdGluZyBpbiBgcmN1dG9ydHVyZWAgYW5kIGEgQlBGIHNlbGZ0ZXN0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYW5kIHdhcnJhbnRzIGZ1enppbmcuIGByY3VfYmFycmllcmAsIGBzcmN1X2JhcnJpZXJgLCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AsIGFuZCBgc3JjdV9vZmZsaW5lX2RyYWluYCBhcmUgZ29vZCBmb2N1cyBzeW1ib2xzIGJlY2F1c2UgdGhleSYjMzk7cmUgbm9uLWhvdHBhdGggZW50cnkgcG9pbnRzIHRoYXQgZmx1c2ggb3IgbWlncmF0ZSB0aGUgbmV3IGRlZmVycmVkIGxpc3RzLiBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYFRSQUNFUE9JTlRTYCBlbmFibGUgYENPTkZJR19SQ1VfREVGRVJgLCBgUEVSRl9FVkVOVFNgIGFuZCBgUkNVX1RPUlRVUkVfVEVTVGAgY292ZXIgdGhlIE5NSSB0ZXN0cywgYW5kIGBCUEZfU1lTQ0FMTGAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgQlBGIGlzIGEgcHJpbWFyeSB1c2VyLgoKTGV0JiMzOTtzIHF1aWNrbHkgcmVmaW5lIHRoZSBmb2N1cyBzeW1ib2xzLCB3aGljaCBpcwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLUFJPQkVTJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7LAogICAgJiMzNDtUUkFDRVBPSU5UUyYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtSQ1VfVE9SVFVSRV9URVNUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7c3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O3JjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MmIzM0OywKICAgICYjMzQ7c3JjdV9vZmZsaW5lX2RyYWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJhbCBtZWNoYW5pc20gZm9yIGNhbGxfcmN1KCkgYW5kIGNhbGxfc3JjdSgpIHRvIHNhZmVseSBoYW5kbGUgY2FsbGJhY2sgZW5xdWV1ZXMgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAoZS5nLiwgZnJvbSBOTUlzIG9yIEJQRiBwcm9ncmFtcykuIEl0IGFkZHMgbG9ja2xlc3MgbGlzdHMgYW5kIGlycV93b3JrIHRvIGRlZmVyIHRoZSBhY3R1YWwgZW5xdWV1ZSB1bnRpbCBpdCBpcyBzYWZlLiBJdCBhbHNvIHVwZGF0ZXMgcmN1X2JhcnJpZXIoKSwgc3JjdV9iYXJyaWVyKCksIGFuZCBDUFUgaG90cGx1ZyBwYXRocyB0byBmbHVzaCB0aGVzZSBkZWZlcnJlZCBjYWxsYmFja3MuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBOTUkgdGVzdGluZyB0byByY3V0b3J0dXJlIHVzaW5nIHBlcmYgZXZlbnRzLCBhbmQgYSBCUEYgc2VsZnRlc3QuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIFJDVSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gRm9jdXMgc3ltYm9scyBpbmNsdWRlIHRoZSBiYXJyaWVyIGFuZCBDUFUgb2ZmbGluZSBmdW5jdGlvbnMgdGhhdCBkcmFpbiB0aGUgbmV3IGRlZmVycmVkIGxpc3RzLiBSZXF1aXJlZCBjb25maWdzIGluY2x1ZGUgS1BST0JFUy9GVU5DVElPTl9UUkFDRVIvVFJBQ0VQT0lOVFMgdG8gZW5hYmxlIENPTkZJR19SQ1VfREVGRVIsIFBFUkZfRVZFTlRTIGFuZCBSQ1VfVE9SVFVSRV9URVNUIGZvciB0aGUgcmN1dG9ydHVyZSBjaGFuZ2VzLCBhbmQgQlBGX1NZU0NBTEwgYXMgQlBGIGlzIGEgcHJpbWFyeSB0cmlnZ2VyIGZvciB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tQUk9CRVMmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDssCiAgICAmIzM0O1RSQUNFUE9JTlRTJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O1JDVV9UT1JUVVJFX1RFU1QmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyY3VfYmFycmllciYjMzQ7LAogICAgJiMzNDtzcmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7cmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtzcmN1X29mZmxpbmVfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmFsIG1lY2hhbmlzbSBmb3IgY2FsbF9yY3UoKSBhbmQgY2FsbF9zcmN1KCkgdG8gc2FmZWx5IGhhbmRsZSBjYWxsYmFjayBlbnF1ZXVlcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkIChlLmcuLCBmcm9tIE5NSXMgb3IgQlBGIHByb2dyYW1zKS4gSXQgYWRkcyBsb2NrbGVzcyBsaXN0cyBhbmQgaXJxX3dvcmsgdG8gZGVmZXIgdGhlIGFjdHVhbCBlbnF1ZXVlIHVudGlsIGl0IGlzIHNhZmUuIEl0IGFsc28gdXBkYXRlcyByY3VfYmFycmllcigpLCBzcmN1X2JhcnJpZXIoKSwgYW5kIENQVSBob3RwbHVnIHBhdGhzIHRvIGZsdXNoIHRoZXNlIGRlZmVycmVkIGNhbGxiYWNrcy4gQWRkaXRpb25hbGx5LCBpdCBhZGRzIE5NSSB0ZXN0aW5nIHRvIHJjdXRvcnR1cmUgdXNpbmcgcGVyZiBldmVudHMsIGFuZCBhIEJQRiBzZWxmdGVzdC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgUkNVIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiBGb2N1cyBzeW1ib2xzIGluY2x1ZGUgdGhlIGJhcnJpZXIgYW5kIENQVSBvZmZsaW5lIGZ1bmN0aW9ucyB0aGF0IGRyYWluIHRoZSBuZXcgZGVmZXJyZWQgbGlzdHMuIFJlcXVpcmVkIGNvbmZpZ3MgaW5jbHVkZSBLUFJPQkVTL0ZVTkNUSU9OX1RSQUNFUi9UUkFDRVBPSU5UUyB0byBlbmFibGUgQ09ORklHX1JDVV9ERUZFUiwgUEVSRl9FVkVOVFMgYW5kIFJDVV9UT1JUVVJFX1RFU1QgZm9yIHRoZSByY3V0b3J0dXJlIGNoYW5nZXMsIGFuZCBCUEZfU1lTQ0FMTCBhcyBCUEYgaXMgYSBwcmltYXJ5IHRyaWdnZXIgZm9yIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjMyLjcxNTI2OTQwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTc1NDE2NzU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLUFJPQkVTXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIixcbiAgICBcIlRSQUNFUE9JTlRTXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiUkNVX1RPUlRVUkVfVEVTVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9iYXJyaWVyXCIsXG4gICAgXCJyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzXCIsXG4gICAgXCJzcmN1X29mZmxpbmVfZHJhaW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVmZXJyYWwgbWVjaGFuaXNtIGZvciBjYWxsX3JjdSgpIGFuZCBjYWxsX3NyY3UoKSB0byBzYWZlbHkgaGFuZGxlIGNhbGxiYWNrIGVucXVldWVzIHdoZW4gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgKGUuZy4sIGZyb20gTk1JcyBvciBCUEYgcHJvZ3JhbXMpLiBJdCBhZGRzIGxvY2tsZXNzIGxpc3RzIGFuZCBpcnFfd29yayB0byBkZWZlciB0aGUgYWN0dWFsIGVucXVldWUgdW50aWwgaXQgaXMgc2FmZS4gSXQgYWxzbyB1cGRhdGVzIHJjdV9iYXJyaWVyKCksIHNyY3VfYmFycmllcigpLCBhbmQgQ1BVIGhvdHBsdWcgcGF0aHMgdG8gZmx1c2ggdGhlc2UgZGVmZXJyZWQgY2FsbGJhY2tzLiBBZGRpdGlvbmFsbHksIGl0IGFkZHMgTk1JIHRlc3RpbmcgdG8gcmN1dG9ydHVyZSB1c2luZyBwZXJmIGV2ZW50cywgYW5kIGEgQlBGIHNlbGZ0ZXN0LiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBSQ1UgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuIEZvY3VzIHN5bWJvbHMgaW5jbHVkZSB0aGUgYmFycmllciBhbmQgQ1BVIG9mZmxpbmUgZnVuY3Rpb25zIHRoYXQgZHJhaW4gdGhlIG5ldyBkZWZlcnJlZCBsaXN0cy4gUmVxdWlyZWQgY29uZmlncyBpbmNsdWRlIEtQUk9CRVMvRlVOQ1RJT05fVFJBQ0VSL1RSQUNFUE9JTlRTIHRvIGVuYWJsZSBDT05GSUdfUkNVX0RFRkVSLCBQRVJGX0VWRU5UUyBhbmQgUkNVX1RPUlRVUkVfVEVTVCBmb3IgdGhlIHJjdXRvcnR1cmUgY2hhbmdlcywgYW5kIEJQRl9TWVNDQUxMIGFzIEJQRiBpcyBhIHByaW1hcnkgdHJpZ2dlciBmb3IgdGhpcyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDozMi43MTUyNzU0NjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyOTM3NDQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNlZjM2NzQyYjE3YmViMGU3MzQ2YjU4ZjUxOGJhN2U4NmE3NjY3NDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDE6MTQ6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oIGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oXFxuaW5kZXggZmJjZjEzYmMxMmQxNS4uNDcyNzVkMTgyOTY2YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcXG5AQCAtMTIsNiArMTIsNyBAQFxcbiAjZGVmaW5lIF9MSU5VWF9TUkNVX1RJTllfSFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhaXQuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBzcmN1X3N0cnVjdCB7XFxuQEAgLTI2LDYgKzI3LDggQEAgc3RydWN0IHNyY3Vfc3RydWN0IHtcXG4gXFx0c3RydWN0IHJjdV9oZWFkICoqc3JjdV9jYl90YWlsO1xcdC8qIFBlbmRpbmcgY2FsbGJhY2tzOiBUYWlsLiAqL1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3JjdV93b3JrO1xcdC8qIEZvciBkcml2aW5nIGdyYWNlIHBlcmlvZHMuICovXFxuIFxcdHN0cnVjdCBpcnFfd29yayBzcmN1X2lycV93b3JrO1xcdC8qIERlZmVyIHNjaGVkdWxlX3dvcmsoKSB0byBpcnEgd29yay4gKi9cXG4rXFx0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzO1xcdC8qIENhbGxiYWNrcyBkZWZlcnJlZCBvbiByZS1lbnRyeS4gKi9cXG4rXFx0c3RydWN0IGlycV93b3JrIGRlZmVyX2l3O1xcdFxcdC8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovXFxuICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQ1xcbiBcXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDtcXG4gI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqL1xcbkBAIC0zMyw2ICszNiw3IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7XFxuIFxcbiB2b2lkIHNyY3VfZHJpdmVfZ3Aoc3RydWN0IHdvcmtfc3RydWN0ICp3cCk7XFxuIHZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspO1xcbit2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XFxuIFxcbiAjZGVmaW5lIF9fU1JDVV9TVFJVQ1RfSU5JVChuYW1lLCBfX2lnbm9yZWQsIF9fX2lnbm9yZWQsIF9fX19pZ25vcmVkKVxcdFxcXFxcXG4ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtNDAsNiArNDQsOCBAQCB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcXG4gXFx0LnNyY3VfY2JfdGFpbCA9IFxcdTAwMjZuYW1lLnNyY3VfY2JfaGVhZCxcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdC5zcmN1X3dvcmsgPSBfX1dPUktfSU5JVElBTElaRVIobmFtZS5zcmN1X3dvcmssIHNyY3VfZHJpdmVfZ3ApLFxcdFxcXFxcXG4gXFx0LnNyY3VfaXJxX3dvcmsgPSB7IC5mdW5jID0gc3JjdV90aW55X2lycV93b3JrIH0sXFx0XFx0XFxcXFxcbitcXHQuZGVmZXJfY2JzID0gTExJU1RfSEVBRF9JTklUKG5hbWUuZGVmZXJfY2JzKSxcXHRcXHRcXHRcXFxcXFxuK1xcdC5kZWZlcl9pdyA9IHsgLmZ1bmMgPSBzcmN1X2RlZmVyX2RyYWluIH0sXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRfX1NSQ1VfREVQX01BUF9JTklUKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiB9XFxuIFxcbkBAIC0xMzEsMTAgKzEzNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gXFx0c3luY2hyb25pemVfc3JjdShzc3ApO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbi17XFxuLVxcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcXG4tfVxcbit2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3JjdV9leHBlZGl0ZV9jdXJyZW50KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKSB7IH1cXG4gI2RlZmluZSBzcmN1X2NoZWNrX3JlYWRfZmxhdm9yKHNzcCwgcmVhZF9mbGF2b3IpIGRvIHsgfSB3aGlsZSAoMClcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXFxuaW5kZXggNzVlNTRlNGY5NjNmYS4uMWNlNzU5ZmI3MDk0OCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcXG5AQCAtMTMsNiArMTMsOCBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdV9ub2RlX3RyZWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IHNyY3Vfbm9kZTtcXG4gc3RydWN0IHNyY3Vfc3RydWN0O1xcbkBAIC00MSw2ICs0Myw4IEBAIHN0cnVjdCBzcmN1X2RhdGEge1xcbiBcXHRib29sIHNyY3VfY2JsaXN0X2ludm9raW5nO1xcdFxcdC8qIEludm9raW5nIHRoZXNlIENCcz8gKi9cXG4gXFx0c3RydWN0IHRpbWVyX2xpc3QgZGVsYXlfd29yaztcXHRcXHQvKiBEZWxheSBmb3IgQ0IgaW52b2tpbmcgKi9cXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XFx0XFx0LyogQ29udGV4dCBmb3IgQ0IgaW52b2tpbmcuICovXFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NicztcXHRcXHQvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovXFxuK1xcdHN0cnVjdCBsbGlzdF9ub2RlIGRlZmVyX2xpbms7XFx0XFx0LyogTGlua3Mgb250byB0aGUgcGVyLUNQVSBkZWZlcnJhbCBkcmFpbiBsaXN0ICovXFxuIFxcdHN0cnVjdCByY3VfaGVhZCBzcmN1X2JhcnJpZXJfaGVhZDtcXHQvKiBGb3Igc3JjdV9iYXJyaWVyKCkgdXNlLiAqL1xcbiBcXHRzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9lY19oZWFkO1xcdFxcdC8qIEZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKSB1c2UuICovXFxuIFxcdGludCBzcmN1X2VjX3N0YXRlO1xcdFxcdFxcdC8qICBTdGF0ZSBmb3Igc3JjdV9leHBlZGl0ZV9jdXJyZW50KCkuICovXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvS2NvbmZpZyBiL2tlcm5lbC9yY3UvS2NvbmZpZ1xcbmluZGV4IDMzMmRmN2E3YTYzNDcuLmJjOTQ4M2MwYjVkODQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS9LY29uZmlnXFxuKysrIGIva2VybmVsL3JjdS9LY29uZmlnXFxuQEAgLTE3NSw2ICsxNzUsMTIgQEAgY29uZmlnIFJDVV9TVEFMTF9DT01NT05cXG4gY29uZmlnIFJDVV9ORUVEX1NFR0NCTElTVFxcbiBcXHRkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFRSRUVfU1JDVSB8fCBUQVNLU19SQ1VfR0VORVJJQyApXFxuIFxcbisjIFRoZSBkZWZlcnJhbCAoYW5kIHRoZSBJUlFfV09SSyBpdCB1c2VzKSBpcyBvbmx5IG5lZWRlZCB3aGVyZSBjYWxsX3JjdSgpIC9cXG4rIyBjYWxsX3NyY3UoKSBjYW4gYmUgaW52b2tlZCB3aGlsZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIGlzIGluIGZsaWdodC5cXG4rY29uZmlnIFJDVV9ERUZFUlxcbitcXHRkZWZfYm9vbCBIQVZFX05NSSB8fCBLUFJPQkVTIHx8IEZVTkNUSU9OX1RSQUNFUiB8fCBUUkFDRVBPSU5UU1xcbitcXHRzZWxlY3QgSVJRX1dPUktcXG4rXFxuIGNvbmZpZyBSQ1VfRkFOT1VUXFxuIFxcdGludCBcXFwiVHJlZS1iYXNlZCBoaWVyYXJjaGljYWwgUkNVIGZhbm91dCB2YWx1ZVxcXCJcXG4gXFx0cmFuZ2UgMiA2NCBpZiA2NEJJVFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdS5oIGIva2VybmVsL3JjdS9yY3UuaFxcbmluZGV4IDM5YTlmNmZhOWE3YjIuLjAzNmQyODUxNmU5MmQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS9yY3UuaFxcbisrKyBiL2tlcm5lbC9yY3UvcmN1LmhcXG5AQCAtNTcyLDYgKzU3MiwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza3NfY2JsaXN0X2luaXRfZ2VuZXJpYyh2b2lkKSB7IH1cXG4gI2RlZmluZSBSQ1VfU0NIRURVTEVSX0lOSVRcXHQxXFxuICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9SVU5OSU5HXFx0MlxcbiBcXG4rLypcXG4rICogU2hvdWxkIGEgY2FsbF9yY3UoKS9jYWxsX3NyY3UoKSBjYWxsYmFjayBiZSBkZWZlcnJlZCByYXRoZXIgdGhhbiBlbnF1ZXVlZFxcbisgKiBub3c/ICBEZWZlciB3aGVuZXZlciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZDogYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBtYXlcXG4rICogYmUgaW4gZmxpZ2h0IG9uIHRoaXMgQ1BVLCBzbyBlbnF1ZXVpbmcgbm93IGNvdWxkIGNvcnJ1cHQgaXQuICBCdXQgbm90IHdoaWxlXFxuKyAqIHRoZSBzY2hlZHVsZXIgaXMgZG93biAtLSBlYXJseSBib290IGlzIHNpbmdsZS10aHJlYWRlZCBhbmQgY2FuIGNhbGwgdGhpc1xcbisgKiBiZWZvcmUgaW5pdF9JUlEoKSBtYWtlcyBpcnFfd29yayB1c2FibGUgKGUuZy4gcmN1X2luaXQoKSdzIHNlbGYtdGVzdHMpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yY3VfZGVmZXIodm9pZClcXG4re1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBpcnFzX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgcmN1X3NjaGVkdWxlcl9hY3RpdmUgIT0gUkNVX1NDSEVEVUxFUl9JTkFDVElWRTtcXG4rfVxcbitcXG4rLyogRHJhaW4gYW4gb3V0Z29pbmcgQ1BVJ3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovXFxuK3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xcbitcXG4gZW51bSByY3V0b3J0dXJlX3R5cGUge1xcbiBcXHRSQ1VfRkxBVk9SLFxcbiBcXHRSQ1VfVEFTS1NfRkxBVk9SLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXFxuaW5kZXggM2QwYjU5YTdiMGIzOC4uYTA2MTAwYjgyMzU5NyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuY1xcbisrKyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXFxuQEAgLTQ4LDYgKzQ4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlX3RyYWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ubWkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJyY3UuaFxcXCJcXG4gXFxuQEAgLTExNSw2ICsxMTYsNyBAQCB0b3J0dXJlX3BhcmFtKGludCwgbGVha3BvaW50ZXIsIDAsIFxcXCJMZWFrIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGZyb20gcmVhZGVyc1xcXCIpO1xcbiB0b3J0dXJlX3BhcmFtKGludCwgbl9iYXJyaWVyX2NicywgMCwgXFxcIiMgb2YgY2FsbGJhY2tzL2t0aHJlYWRzIGZvciBiYXJyaWVyIHRlc3RpbmdcXFwiKTtcXG4gdG9ydHVyZV9wYXJhbShpbnQsIG5fdXBfZG93biwgMzIsIFxcXCIjIG9mIGNvbmN1cnJlbnQgdXAvZG93biBocnRpbWVyLWJhc2VkIFJDVSByZWFkZXJzXFxcIik7XFxuIHRvcnR1cmVfcGFyYW0oaW50LCBuZmFrZXdyaXRlcnMsIDQsIFxcXCJOdW1iZXIgb2YgUkNVIGZha2Ugd3JpdGVyIHRocmVhZHNcXFwiKTtcXG4rdG9ydHVyZV9wYXJhbShib29sLCBubWlfY2FsbHMsIHRydWUsIFxcXCJFeGVyY2lzZSAtXFx1MDAzZWNhbGwoKSBmcm9tIE5NSSBvbiBubWlfY2FwYWJsZSBmbGF2b3JzXFxcIik7XFxuIHRvcnR1cmVfcGFyYW0oaW50LCBucmVhZGVycywgLTEsIFxcXCJOdW1iZXIgb2YgUkNVIHJlYWRlciB0aHJlYWRzXFxcIik7XFxuIHRvcnR1cmVfcGFyYW0oYm9vbCwgbndyaXRlcnMsIDEsIFxcXCJOdW1iZXIgb2YgUkNVIHdyaXRlciB0aHJlYWRzICgwIG9yIDEpXFxcIik7XFxuIHRvcnR1cmVfcGFyYW0oaW50LCBvYmplY3RfZGVidWcsIDAsIFxcXCJFbmFibGUgZGVidWctb2JqZWN0IGRvdWJsZSBjYWxsX3JjdSgpIHRlc3RpbmdcXFwiKTtcXG5AQCAtMjE2LDYgKzIxOCw4IEBAIHN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RfZmFpbHVyZTtcXG4gc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdHM7XFxuIHN0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfdGltZXJzO1xcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX2lycXM7XFxuK3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NhbGw7XFxuK3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NiO1xcbiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfYXR0ZW1wdHM7XFxuIHN0YXRpYyBsb25nIG5fYmFycmllcl9zdWNjZXNzZXM7IC8qIGRpZCByY3VfYmFycmllciB0ZXN0IHN1Y2NlZWQ/ICovXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5fcmVhZF9leGl0cztcXG5AQCAtNDMzLDYgKzQzNyw3IEBAIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMge1xcbiBcXHRib29sICgqaXNfdGFza19yY3VfYm9vc3RlZCkodm9pZCk7XFxuIFxcdGxvbmcgY2JmbG9vZF9tYXg7XFxuIFxcdGludCBpcnFfY2FwYWJsZTtcXG4rXFx0aW50IG5taV9jYXBhYmxlO1xcbiBcXHRpbnQgY2FuX2Jvb3N0O1xcbiBcXHRpbnQgZXh0ZW5kYWJsZXM7XFxuIFxcdGludCBzbG93X2dwcztcXG5AQCAtNjQ2LDYgKzY1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHJjdV9vcHMgPSB7XFxuIFxcdC5leHRlbmRhYmxlc1xcdFxcdD0gUkNVVE9SVFVSRV9NQVhfRVhURU5ELFxcbiBcXHQuZGVidWdfb2JqZWN0c1xcdFxcdD0gMSxcXG4gXFx0LnN0YXJ0X3BvbGxfaXJxc29mZlxcdD0gMSxcXG4rXFx0Lm5taV9jYXBhYmxlXFx0XFx0PSAxLFxcbiBcXHQubmFtZVxcdFxcdFxcdD0gXFxcInJjdVxcXCJcXG4gfTtcXG4gXFxuQEAgLTkzNiw2ICs5NDIsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1X29wcyA9IHtcXG4gXFx0LmRlYnVnX29iamVjdHNcXHQ9IDEsXFxuIFxcdC5oYXZlX3VwX2Rvd25cXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcXG4gXFx0XFx0XFx0XFx0PyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLFxcbitcXHQubm1pX2NhcGFibGVcXHQ9IDEsXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwic3JjdVxcXCJcXG4gfTtcXG4gXFxuQEAgLTk5OSw2ICsxMDA2LDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdWRfb3BzID0ge1xcbiBcXHQuZGVidWdfb2JqZWN0c1xcdD0gMSxcXG4gXFx0LmhhdmVfdXBfZG93blxcdD0gSVNfRU5BQkxFRChDT05GSUdfVElOWV9TUkNVKVxcbiBcXHRcXHRcXHRcXHQ/IDAgOiBTUkNVX1JFQURfRkxBVk9SX05PUk1BTCB8IFNSQ1VfUkVBRF9GTEFWT1JfRkFTVF9VUERPV04sXFxuK1xcdC5ubWlfY2FwYWJsZVxcdD0gMSxcXG4gXFx0Lm5hbWVcXHRcXHQ9IFxcXCJzcmN1ZFxcXCJcXG4gfTtcXG4gXFxuQEAgLTEyNjMsNiArMTI3MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHRhc2tzX3RyYWNpbmdfb3BzID0ge1xcbiBcXHQuY2JmbG9vZF9tYXhcXHQ9IDUwMDAwLFxcbiBcXHQuaXJxX2NhcGFibGVcXHQ9IDEsXFxuIFxcdC5zbG93X2dwc1xcdD0gMSxcXG4rXFx0Lm5taV9jYXBhYmxlXFx0PSAxLFxcbiBcXHQubmFtZVxcdFxcdD0gXFxcInRhc2tzLXRyYWNpbmdcXFwiXFxuIH07XFxuIFxcbkBAIC0yNjUzLDEyICsyNjYyLDk3IEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKVxcbiBcXG4gc3RhdGljIERFRklORV9UT1JUVVJFX1JBTkRPTV9QRVJDUFUocmN1X3RvcnR1cmVfdGltZXJfcmFuZCk7XFxuIFxcbisvKlxcbisgKiBFeGVyY2lzZSAtXFx1MDAzZWNhbGwoKSBmcm9tIE5NSSBjb250ZXh0IGZvciBmbGF2b3JzIHRoYXQgYWR2ZXJ0aXNlIC1cXHUwMDNlbm1pX2NhcGFibGUuXFxuKyAqIEEgcGVyLUNQVSBoYXJkd2FyZSBwZXJmIGNvdW50ZXIgb3ZlcmZsb3dzIGludG8gYW4gTk1JIC0tIGEgcmVhbCBOTUkgb24geDg2LFxcbisgKiBvciBhIHBzZXVkby1OTUkgb24gYXJtNjQgYm9vdGVkIHdpdGggaXJxY2hpcC5naWN2M19wc2V1ZG9fbm1pPTEgLS0gYW5kIGl0c1xcbisgKiBoYW5kbGVyIHN1Ym1pdHMgb25lIHByZWFsbG9jYXRlZCBjYWxsYmFjayB2aWEgLVxcdTAwM2VjYWxsKCkuICBPbmx5IG9uZSBjYWxsYmFjayBpc1xcbisgKiBpbiBmbGlnaHQgYXQgYSB0aW1lIChndWFyZGVkIGJ5IGFuIGF0b21pYyksIHdoaWNoIGF2b2lkcyBhbGxvY2F0aW5nIGluIE5NSVxcbisgKiBhbmQgaXMgZW5vdWdoIHRvIGV4ZXJjaXNlIHRoZSBkZWZlcnJhbC4gIFRoaXMgbWlycm9ycyBob3cgQlBGIHByb2dyYW1zIHJlYWNoXFxuKyAqIC1cXHUwMDNlY2FsbCgpIGZyb20gTk1JLiAgUmVxdWlyZXMgYSBoYXJkd2FyZSBQTVU7IHdoZW4gdGhlIG92ZXJmbG93IGlzIG5vdCBhbiBOTUlcXG4rICogdGhlIGhhbmRsZXIgZG9lcyBub3RoaW5nLlxcbisgKi9cXG4rI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xcbitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciByY3VfdG9ydHVyZV9ubWlfYXR0ciA9IHtcXG4rXFx0LnR5cGVcXHRcXHQ9IFBFUkZfVFlQRV9IQVJEV0FSRSxcXG4rXFx0LmNvbmZpZ1xcdFxcdD0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxcbitcXHQuc2l6ZVxcdFxcdD0gc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIpLFxcbitcXHQucGlubmVkXFx0XFx0PSAxLFxcbitcXHQuZGlzYWJsZWRcXHQ9IDEsXFxuK1xcdC5mcmVxXFx0XFx0PSAxLFxcbitcXHQuc2FtcGxlX2ZyZXFcXHQ9IDEwMDAsXFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKipyY3VfdG9ydHVyZV9ubWlfZXZlbnRzO1xcbitzdGF0aWMgc3RydWN0IHJjdV9oZWFkIHJjdV90b3J0dXJlX25taV9yaDtcXG4rc3RhdGljIGF0b21pY190IHJjdV90b3J0dXJlX25taV9yaF9pbnVzZTtcXG4rXFxuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jYihzdHJ1Y3QgcmN1X2hlYWQgKnJocClcXG4re1xcbitcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cmN1X3RvcnR1cmVfbm1pX3JoX2ludXNlLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4re1xcbitcXHRpZiAoIWluX25taSgpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChjdXJfb3BzLVxcdTAwM2VjYWxsIFxcdTAwMjZcXHUwMDI2ICFhdG9taWNfeGNoZyhcXHUwMDI2cmN1X3RvcnR1cmVfbm1pX3JoX2ludXNlLCAxKSkge1xcbitcXHRcXHRjdXJfb3BzLVxcdTAwM2VjYWxsKFxcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmgsIHJjdV90b3J0dXJlX25taV9jYik7XFxuK1xcdFxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRpZiAoIW5taV9jYWxscyB8fCAhY3VyX29wcy1cXHUwMDNlbm1pX2NhcGFibGUgfHwgIWN1cl9vcHMtXFx1MDAzZWNhbGwpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0cmN1X3RvcnR1cmVfbm1pX2V2ZW50cyA9IGtjYWxsb2MobnJfY3B1X2lkcywgc2l6ZW9mKCpyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKSxcXG4rXFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcXG4rXFx0XFx0ZXZlbnQgPSBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcihcXHUwMDI2cmN1X3RvcnR1cmVfbm1pX2F0dHIsIGNwdSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IE5VTEwsIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdywgTlVMTCk7XFxuK1xcdFxcdGlmIChJU19FUlIoZXZlbnQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdID0gZXZlbnQ7XFxuK1xcdFxcdHBlcmZfZXZlbnRfZW5hYmxlKGV2ZW50KTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2xlYW51cCh2b2lkKVxcbit7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbitcXHRcXHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHBlcmZfZXZlbnRfZGlzYWJsZShyY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV0pO1xcbitcXHRcXHRwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7XFxuK1xcdH1cXG4rXFx0a2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7XFxuK1xcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMO1xcbit9XFxuKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi9cXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkgeyB9XFxuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpIHsgfVxcbisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUyAqL1xcbitcXG4gLypcXG4gICogUkNVIHRvcnR1cmUgcmVhZGVyIGZyb20gdGltZXIgaGFuZGxlci4gIERlcmVmZXJlbmNlcyByY3VfdG9ydHVyZV9jdXJyZW50LFxcbiAgKiBpbmNyZW1lbnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgcGlwZWxpbmUgYXJyYXkuICBUaGVcXG4gICogY291bnRlciBpbiB0aGUgZWxlbWVudCBzaG91bGQgbmV2ZXIgYmUgZ3JlYXRlciB0aGFuIDEsIG90aGVyd2lzZSwgdGhlXFxuICAqIFJDVSBpbXBsZW1lbnRhdGlvbiBpcyBicm9rZW4uXFxuICAqL1xcbitcXG4gc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnVudXNlZClcXG4ge1xcbiBcXHRXQVJOX09OX09OQ0UoIWluX3NlcnZpbmdfc29mdGlycSgpKTtcXG5AQCAtMzA0MSw2ICszMTM1LDkgQEAgcmN1X3RvcnR1cmVfc3RhdHNfcHJpbnQodm9pZClcXG4gXFx0XFx0ZGF0YV9yYWNlKG5fYmFycmllcl9hdHRlbXB0cyksXFxuIFxcdFxcdGRhdGFfcmFjZShuX3JjdV90b3J0dXJlX2JhcnJpZXJfZXJyb3IpKTtcXG4gXFx0cHJfY29udChcXFwicmVhZC1leGl0czogJWxkIFxcXCIsIGRhdGFfcmFjZShuX3JlYWRfZXhpdHMpKTsgLy8gU3RhdGlzdGljLlxcbitcXHRwcl9jb250KFxcXCJubWktY2FsbHM6ICVsZCBubWktY2JzOiAlbGQgXFxcIixcXG4rXFx0XFx0YXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksXFxuK1xcdFxcdGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSk7XFxuIFxcdHByX2NvbnQoXFxcIm5vY2ItdG9nZ2xlczogJWxkOiVsZCBcXFwiLFxcbiBcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZuX25vY2Jfb2ZmbG9hZCksIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fbm9jYl9kZW9mZmxvYWQpKTtcXG4gXFx0cHJfY29udChcXFwiZ3B3cmFwczogJWxkXFxcXG5cXFwiLCBuX2dwd3JhcHMpO1xcbkBAIC00MzE1LDYgKzQ0MTIsOCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpXFxuIFxcdFxcdGtmcmVlKHJlYWRlcl90YXNrcyk7XFxuIFxcdFxcdHJlYWRlcl90YXNrcyA9IE5VTEw7XFxuIFxcdH1cXG4rXFx0LyogRGlzYWJsZSB0aGUgcGVyZiBjb3VudGVycyAoYW5kIHRodXMgdGhlIE5NSSAtXFx1MDAzZWNhbGwoKSBmaXJpbmcpIG5vdy4gKi9cXG4rXFx0cmN1X3RvcnR1cmVfbm1pX2NsZWFudXAoKTtcXG4gXFx0a2ZyZWUocmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrKTtcXG4gXFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrID0gTlVMTDtcXG4gXFxuQEAgLTQzNDQsNiArNDQ0MywyMCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpXFxuIFxcdFxcdHByX2luZm8oXFxcIiVzOiBJbnZva2luZyAlcFMoKS5cXFxcblxcXCIsIF9fZnVuY19fLCBjdXJfb3BzLVxcdTAwM2VjYl9iYXJyaWVyKTtcXG4gXFx0XFx0Y3VyX29wcy1cXHUwMDNlY2JfYmFycmllcigpO1xcbiBcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBjYl9iYXJyaWVyKCkgYWJvdmUgZHJhaW5lZCBldmVyeSBkZWZlcnJlZCBOTUkgLVxcdTAwM2VjYWxsKCkgY2FsbGJhY2ssIHNvIHRoZVxcbitcXHQgKiBjb3VudCBpc3N1ZWQgZnJvbSBOTUkgbXVzdCBlcXVhbCB0aGUgY291bnQgaW52b2tlZDsgYSBtaXNtYXRjaCBtZWFucyBhXFxuK1xcdCAqIGNhbGxiYWNrIHdhcyBsb3N0LlxcbitcXHQgKi9cXG4rXFx0aWYgKGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpICE9XFxuK1xcdCAgICBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpIHtcXG4rXFx0XFx0cHJfYWxlcnQoXFxcIiVzOiBOTUkgLVxcdTAwM2VjYWxsKCkgbG9zdCBhIGNhbGxiYWNrOiBpc3N1ZWQgJWxkIGludm9rZWQgJWxkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgX19mdW5jX18sIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxcbitcXHRcXHRcXHQgYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpKTtcXG4rXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2bl9yY3VfdG9ydHVyZV9lcnJvcik7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChjdXJfb3BzLVxcdTAwM2VjbGVhbnVwICE9IE5VTEwpXFxuIFxcdFxcdGN1cl9vcHMtXFx1MDAzZWNsZWFudXAoKTtcXG4gXFxuQEAgLTQ3NzYsNiArNDg4OSw4IEBAIHJjdV90b3J0dXJlX2luaXQodm9pZClcXG4gXFx0XFx0Zmlyc3RlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIHVud2luZDtcXG4gXFx0fVxcbitcXHQvKiBBcm0gdGhlIHBlci1DUFUgcGVyZiBjb3VudGVycyB0aGF0IGRyaXZlIC1cXHUwMDNlY2FsbCgpIGZyb20gTk1JLiAqL1xcbitcXHRyY3VfdG9ydHVyZV9ubWlfaW5pdCgpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJlYWxyZWFkZXJzOyBpKyspIHtcXG4gXFx0XFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrW2ldLnJ0Y19jaGtyZHIgPSAtMTtcXG4gXFx0XFx0Zmlyc3RlcnIgPSB0b3J0dXJlX2NyZWF0ZV9rdGhyZWFkKHJjdV90b3J0dXJlX3JlYWRlciwgKHZvaWQgKilpLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcXG5pbmRleCA1NThiYThkMzE2ZGI2Li4wM2EwN2ExZjNhMzBiIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xcbkBAIC0xMCw2ICsxMCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFfd29yay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmVlbXB0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcXHUwMDNlXFxuQEAgLTQzLDYgKzQ0LDggQEAgc3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfd29yay5lbnRyeSk7XFxuIFxcdGluaXRfaXJxX3dvcmsoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9pcnFfd29yaywgc3JjdV90aW55X2lycV93b3JrKTtcXG4rXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZzc3AtXFx1MDAzZWRlZmVyX2Nicyk7XFxuK1xcdGluaXRfaXJxX3dvcmsoXFx1MDAyNnNzcC1cXHUwMDNlZGVmZXJfaXcsIHNyY3VfZGVmZXJfZHJhaW4pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjEzLDExICsyMTYsMTEgQEAgc3RhdGljIHZvaWQgc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIH1cXG4gXFxuIC8qXFxuLSAqIEVucXVldWUgYW4gU1JDVSBjYWxsYmFjayBvbiB0aGUgc3BlY2lmaWVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZSxcXG4tICogaW5pdGlhdGluZyBncmFjZS1wZXJpb2QgcHJvY2Vzc2luZyBpZiBpdCBpcyBub3QgYWxyZWFkeSBydW5uaW5nLlxcbisgKiBFbnF1ZXVlIEByaHAgb24gdGhlIGNhbGxiYWNrIGxpc3QuICBBbHNvIGNhbGxlZCBieSBzcmN1X2RlZmVyX2RyYWluKCkgdG9cXG4rICogcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsIGNvbmRpdGlvbi5cXG4gICovXFxuLXZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4tXFx0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXFxuK3N0YXRpYyB2b2lkIHNyY3VfZG9fZW5xdWV1ZShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuK1xcdFxcdFxcdCAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbkBAIC0yMzEsNiArMjM0LDM5IEBAIHZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4gXFx0c3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3NwKTtcXG4gXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gfVxcbitcXG4rdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuK3tcXG4rXFx0c3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X3N0cnVjdCwgZGVmZXJfaXcpO1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBDYWxsYmFja3MgaGF2ZSBubyBtdXR1YWwgb3JkZXJpbmcgZ3VhcmFudGVlIGFuZCBzcmN1X2JhcnJpZXIoKSBoYXNcXG4rXFx0ICogYWxyZWFkeSBmbHVzaGVkIHVzLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy5cXG4rXFx0ICovXFxuK1xcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2c3NwLVxcdTAwM2VkZWZlcl9jYnMpKSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCAqcmhwID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7XFxuK1xcbitcXHRcXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cXHUwMDNlZnVuYyk7XFxuK1xcdH1cXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2RlZmVyX2RyYWluKTtcXG4rXFxuK3ZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4rXFx0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXFxuK3tcXG4rXFx0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xcbitcXHRcXHRyaHAtXFx1MDAzZWZ1bmMgPSBmdW5jO1xcbitcXHRcXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgXFx1MDAyNnNzcC1cXHUwMDNlZGVmZXJfY2JzKSlcXG4rXFx0XFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNnNzcC1cXHUwMDNlZGVmZXJfaXcpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xcbitcXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcXHUwMDI2XFx1MDAyNiBpbl9ubWkoKSk7XFxuK1xcbitcXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfc3JjdSk7XFxuIFxcbiAvKlxcbkBAIC0yNjAsNiArMjk2LDE1IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcXG4gXFxuKy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBmb3IgYWxsIGluLWZsaWdodCBvbmVzLiAqL1xcbit2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4re1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2c3NwLVxcdTAwM2VkZWZlcl9pdyk7XFxuK1xcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2JhcnJpZXIpO1xcbitcXG4gLypcXG4gICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llXFxuICAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcXG5pbmRleCAzMDQxMTI2NzRlOGEyLi5iOWZlNTdmZjkxMDAwIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xcbkBAIC0yMCw2ICsyMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJjcHUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWVtcHQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NtcC5oXFx1MDAzZVxcbkBAIC03OSw2ICs4MCw0NiBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3NyY3Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gc3RhdGljIHZvaWQgc3JjdV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKndvcmspO1xcbiBzdGF0aWMgdm9pZCBzcmN1X2RlbGF5X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4gXFxuK3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XFxuK1xcbisvKlxcbisgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLiAgVGhlIGlycV93b3JrIGlzIGdsb2JhbCAoc2hhcmVkIGJ5IGV2ZXJ5XFxuKyAqIHNyY3Vfc3RydWN0KSwgc28gaXQgbXVzdCBmaW5kIHdoaWNoIHNyY3Vfc3RydWN0cyBkZWZlcnJlZCBjYWxsYmFja3M6IGFcXG4rICogY2FsbGJhY2sgaXMgc3RhZ2VkIG9uIGl0cyBzcmN1X2RhdGEncyAtXFx1MDAzZWRlZmVyX2NicywgYW5kIHRoYXQgc3JjdV9kYXRhIGlzXFxuKyAqIGNoYWluZWQgKC1cXHUwMDNlZGVmZXJfbGluaykgb250byB0aGlzIHBlci1DUFUgLVxcdTAwM2VsaXN0IHRoYXQgdGhlIGlycV93b3JrIHdhbGtzLlxcbisgKi9cXG4rc3RydWN0IHNyY3VfZGVmZXIge1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZFxcdGxpc3Q7XFxuK1xcdHN0cnVjdCBpcnFfd29ya1xcdFxcdGl3O1xcbitcXHRyYXdfc3BpbmxvY2tfdFxcdFxcdGxvY2s7XFxuK307XFxuK1xcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNyY3VfZGVmZXIsIHNyY3VfZGVmZXIpID0ge1xcbitcXHQubG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRChzcmN1X2RlZmVyLmxvY2spLFxcbitcXHQuaXcgPSBJUlFfV09SS19JTklUX0hBUkQoc3JjdV9kZWZlcl9kcmFpbiksXFxuK307XFxuK1xcbisvKlxcbisgKiBSZWdpc3RlciBwZW5kaW5nIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcyBzbyBhIGZvbGxvd2luZyBzcmN1X2JhcnJpZXIoKVxcbisgKiB3YWl0cyBmb3IgdGhlbS4gIEFuIG9ubGluZSBDUFUncyBvd24gaXJxX3dvcmsgcmUtaXNzdWVzIGl0cyBjYWxsYmFja3MsIHNvIHdhaXRcXG4rICogaXQgb3V0OyBhbiBvZmZsaW5lIENQVSdzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4sIHNvIGRyYWluIGl0cyBsaXN0XFxuKyAqIGRpcmVjdGx5IG9udG8gdGhpcyBDUFUgaW5zdGVhZC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZmx1c2godm9pZClcXG4re1xcbitcXHRpbnQgY3B1O1xcbitcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuK1xcdFxcdGlmIChjcHVfb25saW5lKGNwdSkpXFxuK1xcdFxcdFxcdGlycV93b3JrX3N5bmMoXFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0c3JjdV9kZWZlcl9kcmFpbihcXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKlxcbiAgKiBJbml0aWFsaXplIFNSQ1UgcGVyLUNQVSBkYXRhLiAgTm90ZSB0aGF0IHN0YXRpY2FsbHkgYWxsb2NhdGVkXFxuICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgbWlnaHQgYWxyZWFkeSBoYXZlIHNyY3VfcmVhZF9sb2NrKCkgYW5kXFxuQEAgLTEwNyw2ICsxNDgsMTEgQEAgc3RhdGljIHZvaWQgaW5pdF9zcmN1X3N0cnVjdF9kYXRhKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbiBcXHRcXHRzZHAtXFx1MDAzZWNwdSA9IGNwdTtcXG4gXFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZzZHAtXFx1MDAzZXdvcmssIHNyY3VfaW52b2tlX2NhbGxiYWNrcyk7XFxuIFxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZzZHAtXFx1MDAzZWRlbGF5X3dvcmssIHNyY3VfZGVsYXlfdGltZXIsIDApO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiAtXFx1MDAzZWRlZmVyX2NicyBhbmQgLVxcdTAwM2VkZWZlcl9saW5rIGFyZSB2YWxpZCB3aGVuIHplcm9lZCBhbmQgYXJlIG5vdFxcbitcXHRcXHQgKiByZWluaXRpYWxpemVkIGhlcmUsIGxlc3Qgd2UgY2xvYmJlciBjYWxsYmFja3MgYSByZWVudHJhbnRcXG4rXFx0XFx0ICogY2FsbF9zcmN1KCkgYWxyZWFkeSBzdGFnZWQuICBTZWUgX19jYWxsX3NyY3UoKS5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHNkcC1cXHUwMDNlc3NwID0gc3NwO1xcbiBcXHR9XFxuIH1cXG5AQCAtNjk3LDYgKzc0Myw4IEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gXFx0XFx0cmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovXFxuIFxcdC8qIFdhaXQgZm9yIGlycV93b3JrIHRvIGZpbmlzaCBmaXJzdCBhcyBpdCBtYXkgcXVldWUgYSBuZXcgd29yay4gKi9cXG4gXFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2c3VwLVxcdTAwM2VpcnFfd29yayk7XFxuK1xcdC8qIERyYWluIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgKHNoYXJlZCBpcnFfd29yaykgYmVmb3JlIGZyZWVpbmcgLVxcdTAwM2VzZGEuICovXFxuK1xcdHNyY3VfZGVmZXJfZmx1c2goKTtcXG4gXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzdXAtXFx1MDAzZXdvcmspO1xcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuIFxcdFxcdHN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IHBlcl9jcHVfcHRyKHNzcC1cXHUwMDNlc2RhLCBjcHUpO1xcbkBAIC0xNDEwLDggKzE0NTgsMTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsXFxuICAqIHNyY3VfcmVhZF9sb2NrKCksIGFuZCBzcmN1X3JlYWRfdW5sb2NrKCkgdGhhdCBhcmUgYWxsIHBhc3NlZCB0aGUgc2FtZVxcbiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuLVxcdFxcdFxcdHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSlcXG4rLypcXG4rICogVGhlIHNyY3VfY2JsaXN0IGFuZCB0aGUgc3JjdV9ub2RlIHRyZWUgYXJlIG9ubHkgZXZlciBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHNcXG4rICogZGlzYWJsZWQgKHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKCkgZW5xdWV1ZXMgdW5kZXIgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgYW5kXFxuKyAqIG1heSB3YWxrIHRoZSB0cmVlOyBjYWxsYmFjayBpbnZvY2F0aW9uIGFuZCBncmFjZS1wZXJpb2Qgd29yayBsaWtld2lzZSkuICBTb1xcbisgKiBsaWtlIGNhbGxfcmN1KCksIGVucXVldWluZyB3aGlsZSBhIGxpc3Qgb3BlcmF0aW9uIGlzIGluIGZsaWdodCBvbiB0aGlzIENQVVxcbisgKiB3b3VsZCBjb3JydXB0IGl0IG9yIGRlYWRsb2NrIC0tIGUuZy4gY2FsbF9yY3VfdGFza3NfdHJhY2UoKSwgd2hpY2ggaXNcXG4rICogY2FsbF9zcmN1KCkgb24gYSBkZWRpY2F0ZWQgc3JjdV9zdHJ1Y3QsIGZyb20gYSBCUEYgcHJvZ3JhbS4gIF9fY2FsbF9zcmN1KClcXG4rICogZGVmZXJzIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCB2aWEgYSBwZXItQ1BVIGlycV93b3JrOyBvbmx5IGtlcm5lbHNcXG4rICogd2hlcmUgdGhhdCBjYW4gaGFwcGVuIChDT05GSUdfUkNVX0RFRkVSKSBuZWVkIHRoaXMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbitcXHRcXHRcXHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxcbiB7XFxuIFxcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShyaHApKSB7XFxuIFxcdFxcdC8qIFByb2JhYmxlIGRvdWJsZSBjYWxsX3NyY3UoKSwgc28gbGVhayB0aGUgY2FsbGJhY2suICovXFxuQEAgLTE0MjMsNiArMTQ4MSw3MiBAQCBzdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuIFxcdCh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbitcXHRcXHRcXHRyY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXFxuK3tcXG4rXFx0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xcbitcXHRcXHRzdHJ1Y3Qgc3JjdV9kYXRhICpzZHAgPSB0aGlzX2NwdV9wdHIoc3NwLVxcdTAwM2VzZGEpO1xcbitcXG4rXFx0XFx0cmhwLVxcdTAwM2VmdW5jID0gZnVuYztcXG4rXFx0XFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsIFxcdTAwMjZzZHAtXFx1MDAzZWRlZmVyX2NicykpIHtcXG4rXFx0XFx0XFx0LyogRmlyc3QgZGVmZXJyYWwgb24gdGhpcyBzcmN1X2RhdGE6IGNoYWluIGl0IGZvciB0aGUgZHJhaW4uICovXFxuK1xcdFxcdFxcdHN0cnVjdCBzcmN1X2RlZmVyICpzbmRwID0gdGhpc19jcHVfcHRyKFxcdTAwMjZzcmN1X2RlZmVyKTtcXG4rXFxuK1xcdFxcdFxcdHNkcC1cXHUwMDNlc3NwID0gc3NwO1xcbitcXHRcXHRcXHRpZiAobGxpc3RfYWRkKFxcdTAwMjZzZHAtXFx1MDAzZWRlZmVyX2xpbmssIFxcdTAwMjZzbmRwLVxcdTAwM2VsaXN0KSlcXG4rXFx0XFx0XFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNnNuZHAtXFx1MDAzZWl3KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xcbitcXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcXHUwMDI2XFx1MDAyNiBpbl9ubWkoKSk7XFxuK1xcbitcXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMsIGRvX25vcm0pO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZS1pc3N1ZSB0aGlzIENQVSdzIGRlZmVycmVkIGNhbGxiYWNrcywgZ29pbmcgc3RyYWlnaHQgdG8gc3JjdV9kb19lbnF1ZXVlKCkgc29cXG4rICogdGhleSBjYW5ub3QgZGVmZXIgYWdhaW4uICBUaGUgaXJxX3dvcmsgd2Fsa3MgaXRzIC1cXHUwMDNlbGlzdCBvZiBzcmN1X2RhdGEsIGVhY2hcXG4rICogY2FycnlpbmcgaXRzIG93biAtXFx1MDAzZWRlZmVyX2Nicy4gIC1cXHUwMDNlbG9jayBpcyBoZWxkIGFjcm9zcyB0aGUgZHJhaW4gc28gZHJhaW5lcnNcXG4rICogKGlycV93b3JrLCBzcmN1X2RlZmVyX2ZsdXNoKCkgYW5kIHNyY3Vfb2ZmbGluZV9kcmFpbigpKSBzZXJpYWxpemUgYW5kIG5ldmVyXFxuKyAqIGxlYXZlIGEgY2FsbGJhY2sgb2ZmIHRoZSBsaXN0cyB5ZXQgbm90IG9uIGEgY2FsbGJhY2sgbGlzdC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG4re1xcbitcXHRzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCA9IGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3VfZGVmZXIsIGl3KTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKnNub2RlLCAqc25leHQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnNuZHAtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0bGxpc3RfZm9yX2VhY2hfc2FmZShzbm9kZSwgc25leHQsIGxsaXN0X2RlbF9hbGwoXFx1MDAyNnNuZHAtXFx1MDAzZWxpc3QpKSB7XFxuK1xcdFxcdHN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IGNvbnRhaW5lcl9vZihzbm9kZSwgc3RydWN0IHNyY3VfZGF0YSwgZGVmZXJfbGluayk7XFxuK1xcdFxcdHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwID0gc2RwLVxcdTAwM2Vzc3A7XFxuK1xcdFxcdHN0cnVjdCBsbGlzdF9ub2RlICpjbm9kZSwgKmNuZXh0O1xcbitcXG4rXFx0XFx0Y25vZGUgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZzZHAtXFx1MDAzZWRlZmVyX2Nicyk7XFxuK1xcdFxcdGxsaXN0X2Zvcl9lYWNoX3NhZmUoY25vZGUsIGNuZXh0LCBjbm9kZSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgcmN1X2hlYWQgKnJocCA9IChzdHJ1Y3QgcmN1X2hlYWQgKiljbm9kZTtcXG4rXFxuK1xcdFxcdFxcdHNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgcmhwLVxcdTAwM2VmdW5jLCB0cnVlKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzbmRwLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERyYWluIEBjcHUncyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3M7IGNhbGxlZCBmcm9tXFxuKyAqIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKSBvbmNlIEBjcHUgaXMgZGVhZC4gIE9uZSBwYXNzIGNvdmVycyBldmVyeVxcbisgKiBzcmN1X3N0cnVjdCwgYXMgdGhlIHBlci1DUFUgc3JjdV9kZWZlciBsaXN0IGNoYWlucyB0aGVtIGFsbCwgYW5kIHRoZVxcbisgKiByZS1pc3N1ZSBsYW5kcyBvbiB0aGUgY3VycmVudCBDUFUncyBzcmN1X2RhdGEuXFxuKyAqL1xcbit2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KVxcbit7XFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRzcmN1X2RlZmVyX2RyYWluKFxcdTAwMjZwZXJfY3B1KHNyY3VfZGVmZXIsIGNwdSkuaXcpO1xcbit9XFxuK1xcbiAvKipcXG4gICogY2FsbF9zcmN1KCkgLSBRdWV1ZSBhIGNhbGxiYWNrIGZvciBpbnZvY2F0aW9uIGFmdGVyIGFuIFNSQ1UgZ3JhY2UgcGVyaW9kXFxuICAqIEBzc3A6IHNyY3Vfc3RydWN0IGluIHF1ZXVlIHRoZSBjYWxsYmFja1xcbkBAIC0xNjc3LDkgKzE4MDEsMTcgQEAgdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIHtcXG4gXFx0aW50IGNwdTtcXG4gXFx0aW50IGlkeDtcXG4tXFx0dW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfc3VwLVxcdTAwM2VzcmN1X2JhcnJpZXJfc2VxKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzO1xcbiBcXG4gXFx0Y2hlY2tfaW5pdF9zcmN1X3N0cnVjdChzc3ApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gIFRoZVxcbitcXHQgKiBzaGFyZWQgaXJxX3dvcmsgbWF5IGFsc28gZHJhaW4gb3RoZXIgc3JjdV9zdHJ1Y3RzJywgd2hpY2ggaXMgaGFybWxlc3MuXFxuK1xcdCAqL1xcbitcXHRzcmN1X2RlZmVyX2ZsdXNoKCk7XFxuK1xcbitcXHRzID0gcmN1X3NlcV9zbmFwKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfc3VwLVxcdTAwM2VzcmN1X2JhcnJpZXJfc2VxKTtcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2c3NwLVxcdTAwM2VzcmN1X3N1cC1cXHUwMDNlc3JjdV9iYXJyaWVyX211dGV4KTtcXG4gXFx0aWYgKHJjdV9zZXFfZG9uZShcXHUwMDI2c3NwLVxcdTAwM2VzcmN1X3N1cC1cXHUwMDNlc3JjdV9iYXJyaWVyX3NlcSwgcykpIHtcXG4gXFx0XFx0c21wX21iKCk7IC8qIEZvcmNlIG9yZGVyaW5nIGZvbGxvd2luZyByZXR1cm4uICovXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdGlueS5jIGIva2VybmVsL3JjdS90aW55LmNcXG5pbmRleCBkY2NjY2Q2YmU5NDExLi43MTI0OWVhYzYxMDIxIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvdGlueS5jXFxuKysrIGIva2VybmVsL3JjdS90aW55LmNcXG5AQCAtMTEsNiArMTEsOCBAQFxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxX3dvcmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xsaXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ub3RpZmllci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuQEAgLTQyLDggKzQ0LDgzIEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2N0cmxibGsgPSB7XFxuIFxcdC5ncF9zZXFcXHRcXHQ9IDAgLSAzMDBVTCxcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIFRoZSBjYWxsYmFjayBsaXN0IGlzIG9ubHkgZXZlciBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKHRoaXNcXG4rICogZW5xdWV1ZSwgY2FsbGJhY2sgaW52b2NhdGlvbiwgZ3JhY2UtcGVyaW9kIHdvcmspLCBzbyBlbnF1ZXVpbmcgd2hpbGUgYSBsaXN0XFxuKyAqIG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQgd291bGQgY29ycnVwdCBpdC4gIERlZmVyIHdoZW5ldmVyIGludGVycnVwdHMgYXJlXFxuKyAqIGRpc2FibGVkOiB0aGUgY2FsbGJhY2sgZ29lcyBvbiBhIGxvY2tsZXNzIGxpc3QgdGhhdCBhbiBpcnFfd29yayByZS1pc3N1ZXNcXG4rICogbGF0ZXIuICBPbmUgZ2xvYmFsIGxpc3QgYW5kIGlycV93b3JrIHN1ZmZpY2UsIGFzIFRpbnkgUkNVIGlzIHVuaXByb2Nlc3Nvci5cXG4rICogT25seSBrZXJuZWxzIHdoZXJlIHRoYXQgY2FuIGhhcHBlbiAoQ09ORklHX1JDVV9ERUZFUikgbmVlZCB0aGlzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xcbitzdGF0aWMgTExJU1RfSEVBRChyY3VfZGVmZXJfbGlzdCk7XFxuK3N0YXRpYyBERUZJTkVfSVJRX1dPUksocmN1X2RlZmVyX2l3LCByY3VfZGVmZXJfZHJhaW4pO1xcbitcXG4rLypcXG4rICogRW5xdWV1ZSBAaGVhZCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpIHRvXFxuKyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXFxuK3tcXG4rXFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XFxuK1xcdFxcdGlmIChhdG9taWNfaW5jX3JldHVybihcXHUwMDI2ZG91YmxlZnJlZXMpIFxcdTAwM2MgNCkge1xcbitcXHRcXHRcXHRwcl9lcnIoXFxcIiVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC1cXHUwMDNlJXBTKCkhISEgIFxcXCIsIF9fZnVuY19fLCBoZWFkLCBoZWFkLVxcdTAwM2VmdW5jKTtcXG4rXFx0XFx0XFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aGVhZC1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuK1xcdGhlYWQtXFx1MDAzZW5leHQgPSBOVUxMO1xcbitcXG4rXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbitcXHQqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7XFxuK1xcdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcXHUwMDI2aGVhZC1cXHUwMDNlbmV4dDtcXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcXG4rXFx0XFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cXG4rXFx0XFx0cmVzY2hlZF9jcHUoMCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuK3tcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogQ2FsbGJhY2tzIGhhdmUgbm8gbXV0dWFsIG9yZGVyaW5nIGd1YXJhbnRlZSBhbmQgcmN1X2JhcnJpZXIoKSBoYXNcXG4rXFx0ICogYWxyZWFkeSBmbHVzaGVkIHVzLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy5cXG4rXFx0ICovXFxuK1xcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2cmN1X2RlZmVyX2xpc3QpKSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xcbitcXG4rXFx0XFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cXHUwMDNlZnVuYyk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxcbit7XFxuK1xcdGhlYWQtXFx1MDAzZWZ1bmMgPSBmdW5jO1xcbitcXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFxcdTAwMjZyY3VfZGVmZXJfbGlzdCkpXFxuK1xcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZyY3VfZGVmZXJfaXcpO1xcbit9XFxuK1xcbisvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICovXFxuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxcbit7XFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpcnFfd29ya19zeW5jKFxcdTAwMjZyY3VfZGVmZXJfaXcpO1xcbit9XFxuK1xcbiB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXFxuIHtcXG4rXFx0LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBmaXJzdC4gKi9cXG4rXFx0cmN1X2RlZmVyX2ZsdXNoKCk7XFxuIFxcdHdhaXRfcmN1X2dwKGNhbGxfcmN1X2h1cnJ5KTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHJjdV9iYXJyaWVyKTtcXG5AQCAtMTU3LDI5ICsyMzQsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1KTtcXG4gICovXFxuIHZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxcbiB7XFxuLVxcdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFxuLVxcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xcbi1cXHRcXHRpZiAoYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmRvdWJsZWZyZWVzKSBcXHUwMDNjIDQpIHtcXG4tXFx0XFx0XFx0cHJfZXJyKFxcXCIlcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtXFx1MDAzZSVwUygpISEhICBcXFwiLCBfX2Z1bmNfXywgaGVhZCwgaGVhZC1cXHUwMDNlZnVuYyk7XFxuLVxcdFxcdFxcdG1lbV9kdW1wX29iaihoZWFkKTtcXG4tXFx0XFx0fVxcbitcXHRpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7XFxuK1xcdFxcdGNhbGxfcmN1X2RlZmVyKGhlYWQsIGZ1bmMpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdGhlYWQtXFx1MDAzZWZ1bmMgPSBmdW5jO1xcbi1cXHRoZWFkLVxcdTAwM2VuZXh0ID0gTlVMTDtcXG4tXFxuLVxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4tXFx0KnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkO1xcbi1cXHRyY3VfY3RybGJsay5jdXJ0YWlsID0gXFx1MDAyNmhlYWQtXFx1MDAzZW5leHQ7XFxuLVxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4rXFx0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXFxuK1xcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFxcdTAwMjZcXHUwMDI2IGluX25taSgpKTtcXG4gXFxuLVxcdGlmICh1bmxpa2VseShpc19pZGxlX3Rhc2soY3VycmVudCkpKSB7XFxuLVxcdFxcdC8qIGZvcmNlIHNjaGVkdWxpbmcgZm9yIHJjdV9xcygpICovXFxuLVxcdFxcdHJlc2NoZWRfY3B1KDApO1xcbi1cXHR9XFxuK1xcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5jIGIva2VybmVsL3JjdS90cmVlLmNcXG5pbmRleCA2MmJmMmJmNTUxZjQ5Li43ZDBhZTk0YmRmMzlmIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvdHJlZS5jXFxuKysrIGIva2VybmVsL3JjdS90cmVlLmNcXG5AQCAtMjQsNiArMjQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc21wLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xsaXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvZGVidWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25taS5oXFx1MDAzZVxcbkBAIC0zMTQ4LDIxICszMTQ5LDI3IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2NiX292bGQoc3RydWN0IHJjdV9kYXRhICpyZHApXFxuIFxcdHJhd19zcGluX3VubG9ja19yY3Vfbm9kZShybnApO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZFxcbi1fX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcXG4rLypcXG4rICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBldmVyIGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAoZW5xdWV1ZSxcXG4rICogY2FsbGJhY2sgaW52b2NhdGlvbiwgZ3JhY2UtcGVyaW9kIHdvcmspLiAgQSBjYWxsX3JjdSgpIHdpdGggaW50ZXJydXB0cyBhbHJlYWR5XFxuKyAqIGRpc2FibGVkIG1heSBpbnRlcnJ1cHQgb25lIG9mIHRob3NlLCBzbyBfX2NhbGxfcmN1X2NvbW1vbigpIGRlZmVyczogdGhlXFxuKyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBhIHBlci1DUFUgbGxpc3QgdGhhdCBhbiBpcnFfd29yayByZS1pc3N1ZXMgb25jZVxcbisgKiBpbnRlcnJ1cHRzIGFyZSBvbi4gIE9ubHkgQ09ORklHX1JDVV9ERUZFUiBrZXJuZWxzIGNhbiBoaXQgdGhpcy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcXG4rXFxuKy8qXFxuKyAqIEVucXVldWUgQGhlYWQgb24gdGhpcyBDUFUncyByY3Vfc2VnY2JsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKClcXG4rICogdG8gcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsXFxuKyAqIGNvbmRpdGlvbi4gIEVpdGhlciBjYWxsZXIgbWF5IGhhdmUgaW50ZXJydXB0cyBhbHJlYWR5IGRpc2FibGVkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXFxuIHtcXG4gXFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRib29sIGxhenk7XFxuIFxcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xcbiBcXG4tXFx0LyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKCh1bnNpZ25lZCBsb25nKWhlYWQgXFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XFxuLVxcbi1cXHQvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovXFxuLVxcdGlmIChXQVJOX09OX09OQ0UoIWZ1bmMpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogUHJvYmFibGUgZG91YmxlIGNhbGxfcmN1KCksIHNvIGxlYWsgdGhlIGNhbGxiYWNrLlxcbkBAIC0zMjA2LDYgKzMyMTMsODMgQEAgX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXFxuIFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gfVxcbiBcXG4rLypcXG4rICogUmUtaXNzdWUgZGVmZXJyZWQgY2FsbGJhY2tzLCBnb2luZyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdFxcbisgKiBkZWZlciBhZ2Fpbi4gIGRlZmVyX2xvY2sgaXMgaGVsZCBhY3Jvc3MgbGxpc3RfZGVsX2FsbCgpIGFuZCB0aGUgcmUtaXNzdWUgc29cXG4rICogdGhlIGRyYWluZXJzIC0tIHRoaXMgQ1BVJ3MgaXJxX3dvcmssIHJjdV9kZWZlcl9mbHVzaCgpIGFuZFxcbisgKiByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkgLS0gc2VyaWFsaXplIGFuZCBuZXZlciBsZWF2ZSBhIGNhbGxiYWNrIG9mZlxcbisgKiAtXFx1MDAzZWRlZmVyX2hlYWQgeWV0IG5vdCBvbiBhIGNhbGxiYWNrIGxpc3QuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG4re1xcbitcXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHJjdV9kYXRhLCBkZWZlcl93b3JrKTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcXG4rXFx0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2hlYWQpKSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xcbitcXG4rXFx0XFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cXHUwMDNlZnVuYywgZmFsc2UpO1xcbitcXHR9XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcXG4rfVxcbitcXG4rLyogU3RhZ2UgQGhlYWQgZm9yIHRoaXMgQ1BVJ3MgaXJxX3dvcmsgd2hlbiBjYWxsX3JjdSgpIGNhbm5vdCBlbnF1ZXVlIG5vdy4gKi9cXG4rc3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxcbit7XFxuK1xcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gdGhpc19jcHVfcHRyKFxcdTAwMjZyY3VfZGF0YSk7XFxuK1xcbitcXHRoZWFkLVxcdTAwM2VmdW5jID0gZnVuYztcXG4rXFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCBcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl9oZWFkKSlcXG4rXFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfd29yayk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlZ2lzdGVyIHBlbmRpbmcgZGVmZXJyZWQgY2FsbGJhY2tzIGludG8gdGhlIGNhbGxiYWNrIGxpc3RzIHNvIGEgZm9sbG93aW5nXFxuKyAqIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICBUaGlzIHJ1bnMgYmVmb3JlIHJjdV9iYXJyaWVyKCkgc2NhbnMgdGhlXFxuKyAqIGxpc3RzLiAgQW4gb25saW5lIENQVSdzIG93biBpcnFfd29yayByZS1pc3N1ZXMgaXRzIGNhbGxiYWNrcywgc28gd2FpdCBpdCBvdXQ7XFxuKyAqIGFuIG9mZmxpbmUgQ1BVJ3MgaXJxX3dvcmsgbWF5IG5ldmVyIHJ1biBhZ2Fpbiwgc28gZHJhaW4gaXRzIGxpc3QgZGlyZWN0bHlcXG4rICogb250byB0aGlzIENQVSBpbnN0ZWFkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2ZsdXNoKHZvaWQpXFxuK3tcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbitcXHRcXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKFxcdTAwMjZyY3VfZGF0YSwgY3B1KTtcXG4rXFxuK1xcdFxcdGlmIChjcHVfb25saW5lKGNwdSkpXFxuK1xcdFxcdFxcdGlycV93b3JrX3N5bmMoXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfd29yayk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cmN1X2RlZmVyX2RyYWluKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX3dvcmspO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkXFxuK19fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxcbit7XFxuK1xcdC8qIE1pc2FsaWduZWQgcmN1X2hlYWQhICovXFxuK1xcdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFxcdTAwMjYgKHNpemVvZih2b2lkICopIC0gMSkpO1xcbitcXG4rXFx0LyogQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSBpZiBjYWxsYmFjayBpcyBOVUxMLiAqL1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xcbitcXHRcXHRjYWxsX3JjdV9kZWZlcihoZWFkLCBmdW5jKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cXG4rXFx0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXFx1MDAyNlxcdTAwMjYgaW5fbm1pKCkpO1xcbitcXG4rXFx0cmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYywgbGF6eV9pbik7XFxuK31cXG4rXFxuICNpZmRlZiBDT05GSUdfUkNVX0xBWllcXG4gc3RhdGljIGJvb2wgZW5hYmxlX3JjdV9sYXp5IF9fcmVhZF9tb3N0bHkgPSAhSVNfRU5BQkxFRChDT05GSUdfUkNVX0xBWllfREVGQVVMVF9PRkYpO1xcbiBtb2R1bGVfcGFyYW0oZW5hYmxlX3JjdV9sYXp5LCBib29sLCAwNDQ0KTtcXG5AQCAtMzg5Niw4ICszOTgwLDEyIEBAIHZvaWQgcmN1X2JhcnJpZXIodm9pZClcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0dW5zaWduZWQgbG9uZyBnc2VxO1xcbiBcXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcDtcXG4tXFx0dW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKFxcdTAwMjZyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcztcXG4rXFxuK1xcdC8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgYmVmb3JlIHNuYXBzaG90dGluZyB0aGUgc2VxdWVuY2UuICovXFxuK1xcdHJjdV9kZWZlcl9mbHVzaCgpO1xcbiBcXG4rXFx0cyA9IHJjdV9zZXFfc25hcChcXHUwMDI2cmN1X3N0YXRlLmJhcnJpZXJfc2VxdWVuY2UpO1xcbiBcXHRyY3VfYmFycmllcl90cmFjZShUUFMoXFxcIkJlZ2luXFxcIiksIC0xLCBzKTtcXG4gXFxuIFxcdC8qIFRha2UgbXV0ZXggdG8gc2VyaWFsaXplIGNvbmN1cnJlbnQgcmN1X2JhcnJpZXIoKSByZXF1ZXN0cy4gKi9cXG5AQCAtNDIzMSw2ICs0MzE5LDEwIEBAIHJjdV9ib290X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSlcXG4gXFx0cmRwLVxcdTAwM2VyY3Vfb25sX2dwX3N0YXRlID0gUkNVX0dQX0NMRUFORUQ7XFxuIFxcdHJkcC1cXHUwMDNlbGFzdF9zY2hlZF9jbG9jayA9IGppZmZpZXM7XFxuIFxcdHJkcC1cXHUwMDNlY3B1ID0gY3B1O1xcbitcXHRpbml0X2xsaXN0X2hlYWQoXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfaGVhZCk7XFxuK1xcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl9sb2NrKTtcXG4rXFx0LyogSGFyZCBpcnFfd29yayBzbyB0aGUgcmUtaXNzdWUgcnVucyBwcm9tcHRseS4gKi9cXG4rXFx0cmRwLVxcdTAwM2VkZWZlcl93b3JrID0gSVJRX1dPUktfSU5JVF9IQVJEKHJjdV9kZWZlcl9kcmFpbik7XFxuIFxcdHJjdV9ib290X2luaXRfbm9jYl9wZXJjcHVfZGF0YShyZHApO1xcbiB9XFxuIFxcbkBAIC00NTI4LDYgKzQ2MjAsMTYgQEAgdm9pZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKGludCBjcHUpXFxuIFxcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJjdV9kYXRhLCBjcHUpO1xcbiBcXHRib29sIG5lZWR3YWtlO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogQ2FsbGJhY2tzIHRoZSBvdXRnb2luZyBDUFUgZGVmZXJyZWQgbGF0ZSBpbiB0aGUgb2ZmbGluZSBwYXRoIChwYXN0IHRoZVxcbitcXHQgKiBwb2ludCBpdHMgaXJxX3dvcmsgY2FuIHJ1bikgc2l0IG9uIC1cXHUwMDNlZGVmZXJfaGVhZCwgd2hpY2ggdGhlIC1cXHUwMDNlY2JsaXN0XFxuK1xcdCAqIG1pZ3JhdGlvbiBiZWxvdyBkb2VzIG5vdCBjb3Zlci4gIERyYWluIHRoZW0gaGVyZSwgYmVmb3JlIHRoZSBlYXJseVxcbitcXHQgKiByZXR1cm5zOyB0aGUgcmUtaXNzdWUgbGFuZHMgb24gdGhpcyBDUFUuXFxuK1xcdCAqL1xcbitcXHRyY3VfZGVmZXJfZHJhaW4oXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfd29yayk7XFxuK1xcdC8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJ3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzLiAqL1xcbitcXHRzcmN1X29mZmxpbmVfZHJhaW4oY3B1KTtcXG4rXFxuIFxcdGlmIChyY3VfcmRwX2lzX29mZmxvYWRlZChyZHApKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuaCBiL2tlcm5lbC9yY3UvdHJlZS5oXFxuaW5kZXggOWI4NWVlYWEwMDcxYS4uNDFjMmIyMGYwYzgzZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuaFxcbisrKyBiL2tlcm5lbC9yY3UvdHJlZS5oXFxuQEAgLTIyOSw2ICsyMjksMTEgQEAgc3RydWN0IHJjdV9kYXRhIHtcXG4gXFx0c3RydWN0IHJjdV9oZWFkIGJhcnJpZXJfaGVhZDtcXG4gXFx0aW50IGV4cF93YXRjaGluZ19zbmFwO1xcdFxcdC8qIERvdWJsZS1jaGVjayBuZWVkIGZvciBJUEkuICovXFxuIFxcbitcXHQvKiBEZWZlcnJhbCBvZiBhbiBOTUkvcmVlbnRyYW50IGNhbGxfcmN1KCk7IHNlZSBfX2NhbGxfcmN1X2NvbW1vbigpLiAqL1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9oZWFkO1xcbitcXHRzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfd29yaztcXG4rXFx0cmF3X3NwaW5sb2NrX3QgZGVmZXJfbG9jaztcXG4rXFxuIFxcdC8qIDUpIENhbGxiYWNrIG9mZmxvYWRpbmcuICovXFxuICNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVXFxuIFxcdHN0cnVjdCBzd2FpdF9xdWV1ZV9oZWFkIG5vY2JfY2Jfd3E7IC8qIEZvciBub2NiIGt0aHJlYWRzIHRvIHNsZWVwIG9uLiAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjZlY2Q5M2JlMzBmNFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jXFxuQEAgLTAsMCArMSw1OCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBFeGVyY2lzZSByZS1lbnRyeSBpbnRvIGNhbGxfc3JjdSgpIGZyb20gQlBGOyBzZWUgcHJvZ3MvcmN1X3JlZW50cnkuYy4gKi9cXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbisjaW5jbHVkZSBcXHUwMDNjc2NoZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zeXNjYWxsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJyY3VfcmVlbnRyeS5za2VsLmhcXFwiXFxuK1xcbitzdGF0aWMgaW50IHN5c19waWRmZF9vcGVuKHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBzeXNjYWxsKF9fTlJfcGlkZmRfb3BlbiwgcGlkLCBmbGFncyk7XFxuK31cXG4rXFxuK3ZvaWQgdGVzdF9yY3VfcmVlbnRyeSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCByY3VfcmVlbnRyeSAqc2tlbDtcXG4rXFx0aW50IGVyciwgcGlkZmQgPSAtMSwgbWFwX2ZkO1xcbitcXHRfX3U2NCB2YWwgPSAxO1xcbitcXHRjcHVfc2V0X3Qgc2V0O1xcbitcXG4rXFx0c2tlbCA9IHJjdV9yZWVudHJ5X19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbF9vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGVyciA9IHJjdV9yZWVudHJ5X19hdHRhY2goc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNrZWxfYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogS2VlcCB0aGUgcmUtZW50cnkgb24gYSBzaW5nbGUgQ1BVLiAqL1xcbitcXHRDUFVfWkVSTyhcXHUwMDI2c2V0KTtcXG4rXFx0Q1BVX1NFVCgwLCBcXHUwMDI2c2V0KTtcXG4rXFx0aWYgKHNjaGVkX3NldGFmZmluaXR5KDAsIHNpemVvZihzZXQpLCBcXHUwMDI2c2V0KSlcXG4rXFx0XFx0cGVycm9yKFxcXCJzY2hlZF9zZXRhZmZpbml0eVxcXCIpO1xcbitcXG4rXFx0cGlkZmQgPSBzeXNfcGlkZmRfb3BlbihnZXRwaWQoKSwgMCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHBpZGZkLCAwLCBcXFwicGlkZmRfb3BlblxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0bWFwX2ZkID0gYnBmX21hcF9fZmQoc2tlbC1cXHUwMDNlbWFwcy50YXNrX3N0Zyk7XFxuK1xcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwX2ZkLCBcXHUwMDI2cGlkZmQsIFxcdTAwMjZ2YWwsIEJQRl9OT0VYSVNUKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYm9vdF9jcmVhdGVcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBBcm0gdGhlIGhhbmRsZXIgZm9yIHRoaXMgdGhyZWFkLCB0aGVuIHRyaWdnZXIgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0YXJnZXRfcGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7XFxuK1xcdGVyciA9IGJwZl9tYXBfZGVsZXRlX2VsZW0obWFwX2ZkLCBcXHUwMDI2cGlkZmQpO1xcbitcXHRBU1NFUlRfT0soZXJyLCBcXFwiYm9vdF9kZWxldGVcXFwiKTtcXG4rXFxuK1xcdC8qIE9ubHkgVHJlZSBTUkNVIGVucXVldWVzIHZpYSByY3Vfc2VnY2JsaXN0X2VucXVldWUoKTsgc2tpcCBlbHNld2hlcmUuICovXFxuK1xcdGlmICghc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VoaXRzKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVlbnRlcmVkLCAxLCBcXFwicmVlbnRyeV9kZWZlcnJlZFxcXCIpO1xcbitvdXQ6XFxuK1xcdGlmIChwaWRmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShwaWRmZCk7XFxuK1xcdHJjdV9yZWVudHJ5X19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ5MmE5MjdmZjUxYzBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmNcXG5AQCAtMCwwICsxLDQ1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIFJlLWVudGVyIGNhbGxfc3JjdSgpIGZyb20gYSBCUEYgcHJvZ3JhbS4gIGZlbnRyeSBvbiByY3Vfc2VnY2JsaXN0X2VucXVldWUoKVxcbisgKiBmaXJlcyBpbnNpZGUgY2FsbF9zcmN1KCkncyBlbnF1ZXVlIChyZWFjaGVkIGZyb20gc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKVxcbisgKiB3aXRoIHRoZSBzcmN1X2RhdGEgLVxcdTAwM2Vsb2NrIGhlbGQpOyB0aGUgaGFuZGxlciB0aGVuIGNhbGxzIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKClcXG4rICogLS0gaXRzZWxmIGNhbGxfc3JjdSgpIG9uIHJjdV90YXNrc190cmFjZV9zcmN1X3N0cnVjdCAtLSByZS1lbnRlcmluZyB0aGUgc2FtZVxcbisgKiBzcmN1X2RhdGEgb24gdGhlIHNhbWUgQ1BVLlxcbisgKi9cXG4rI2luY2x1ZGUgXFxcInZtbGludXguaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcXHUwMDNlXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfVEFTS19TVE9SQUdFKTtcXG4rXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcXG4rfSB0YXNrX3N0ZyBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitpbnQgdGFyZ2V0X3BpZDtcXG4raW50IGhpdHM7XFxuK2ludCByZWVudGVyZWQ7XFxuK1xcbitTRUMoXFxcImZlbnRyeS9yY3Vfc2VnY2JsaXN0X2VucXVldWVcXFwiKVxcbitpbnQgQlBGX1BST0cocmVlbnRlcilcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjtcXG4rXFxuK1xcdGlmIChyZWVudGVyZWQgfHwgIXRhcmdldF9waWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Y3VyID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdGlmICghY3VyIHx8IGN1ci1cXHUwMDNlcGlkICE9IHRhcmdldF9waWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogUmUtZW50ZXIgdmlhIGEgdGFzay1zdG9yYWdlIGRlbGV0ZSwgd2hpY2ggY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cXG4rXFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNmhpdHMsIDEpO1xcbitcXHRicGZfdGFza19zdG9yYWdlX2dldChcXHUwMDI2dGFza19zdGcsIGN1ciwgMCwgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKTtcXG4rXFx0YnBmX3Rhc2tfc3RvcmFnZV9kZWxldGUoXFx1MDAyNnRhc2tfc3RnLCBjdXIpO1xcbitcXG4rXFx0cmVlbnRlcmVkID0gMTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MzMuMDQ1MjA4OTI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE1NDI0MjE5MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiLFxuICAgIFwiVFJBQ0VQT0lOVFNcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJSQ1VfVE9SVFVSRV9URVNUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJjdV9iYXJyaWVyXCIsXG4gICAgXCJzcmN1X2JhcnJpZXJcIixcbiAgICBcInJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NcIixcbiAgICBcInNyY3Vfb2ZmbGluZV9kcmFpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJhbCBtZWNoYW5pc20gZm9yIGNhbGxfcmN1KCkgYW5kIGNhbGxfc3JjdSgpIHRvIHNhZmVseSBoYW5kbGUgY2FsbGJhY2sgZW5xdWV1ZXMgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAoZS5nLiwgZnJvbSBOTUlzIG9yIEJQRiBwcm9ncmFtcykuIEl0IGFkZHMgbG9ja2xlc3MgbGlzdHMgYW5kIGlycV93b3JrIHRvIGRlZmVyIHRoZSBhY3R1YWwgZW5xdWV1ZSB1bnRpbCBpdCBpcyBzYWZlLiBJdCBhbHNvIHVwZGF0ZXMgcmN1X2JhcnJpZXIoKSwgc3JjdV9iYXJyaWVyKCksIGFuZCBDUFUgaG90cGx1ZyBwYXRocyB0byBmbHVzaCB0aGVzZSBkZWZlcnJlZCBjYWxsYmFja3MuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBOTUkgdGVzdGluZyB0byByY3V0b3J0dXJlIHVzaW5nIHBlcmYgZXZlbnRzLCBhbmQgYSBCUEYgc2VsZnRlc3QuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIFJDVSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gRm9jdXMgc3ltYm9scyBpbmNsdWRlIHRoZSBiYXJyaWVyIGFuZCBDUFUgb2ZmbGluZSBmdW5jdGlvbnMgdGhhdCBkcmFpbiB0aGUgbmV3IGRlZmVycmVkIGxpc3RzLiBSZXF1aXJlZCBjb25maWdzIGluY2x1ZGUgS1BST0JFUy9GVU5DVElPTl9UUkFDRVIvVFJBQ0VQT0lOVFMgdG8gZW5hYmxlIENPTkZJR19SQ1VfREVGRVIsIFBFUkZfRVZFTlRTIGFuZCBSQ1VfVE9SVFVSRV9URVNUIGZvciB0aGUgcmN1dG9ydHVyZSBjaGFuZ2VzLCBhbmQgQlBGX1NZU0NBTEwgYXMgQlBGIGlzIGEgcHJpbWFyeSB0cmlnZ2VyIGZvciB0aGlzIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNlZjM2NzQyYjE3YmViMGU3MzQ2YjU4ZjUxOGJhN2U4NmE3NjY3NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMToxNDozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuaW5kZXggZmJjZjEzYmMxMmQxNS4uNDcyNzVkMTgyOTY2YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oXG5AQCAtMTIsNiArMTIsNyBAQFxuICNkZWZpbmUgX0xJTlVYX1NSQ1VfVElOWV9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmtfdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FpdC5oXHUwMDNlXG4gXG4gc3RydWN0IHNyY3Vfc3RydWN0IHtcbkBAIC0yNiw2ICsyNyw4IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgKipzcmN1X2NiX3RhaWw7XHQvKiBQZW5kaW5nIGNhbGxiYWNrczogVGFpbC4gKi9cbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzcmN1X3dvcms7XHQvKiBGb3IgZHJpdmluZyBncmFjZSBwZXJpb2RzLiAqL1xuIFx0c3RydWN0IGlycV93b3JrIHNyY3VfaXJxX3dvcms7XHQvKiBEZWZlciBzY2hlZHVsZV93b3JrKCkgdG8gaXJxIHdvcmsuICovXG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9jYnM7XHQvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovXG4rXHRzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfaXc7XHRcdC8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovXG4gI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DXG4gXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDtcbiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovXG5AQCAtMzMsNiArMzYsNyBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xuIFxuIHZvaWQgc3JjdV9kcml2ZV9ncChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndwKTtcbiB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbit2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XG4gXG4gI2RlZmluZSBfX1NSQ1VfU1RSVUNUX0lOSVQobmFtZSwgX19pZ25vcmVkLCBfX19pZ25vcmVkLCBfX19faWdub3JlZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG5AQCAtNDAsNiArNDQsOCBAQCB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbiBcdC5zcmN1X2NiX3RhaWwgPSBcdTAwMjZuYW1lLnNyY3VfY2JfaGVhZCxcdFx0XHRcdFxcXG4gXHQuc3JjdV93b3JrID0gX19XT1JLX0lOSVRJQUxJWkVSKG5hbWUuc3JjdV93b3JrLCBzcmN1X2RyaXZlX2dwKSxcdFxcXG4gXHQuc3JjdV9pcnFfd29yayA9IHsgLmZ1bmMgPSBzcmN1X3RpbnlfaXJxX3dvcmsgfSxcdFx0XFxcbitcdC5kZWZlcl9jYnMgPSBMTElTVF9IRUFEX0lOSVQobmFtZS5kZWZlcl9jYnMpLFx0XHRcdFxcXG4rXHQuZGVmZXJfaXcgPSB7IC5mdW5jID0gc3JjdV9kZWZlcl9kcmFpbiB9LFx0XHRcdFx0XFxcbiBcdF9fU1JDVV9ERVBfTUFQX0lOSVQobmFtZSlcdFx0XHRcdFx0XFxcbiB9XG4gXG5AQCAtMTMxLDEwICsxMzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4te1xuLVx0c3luY2hyb25pemVfc3JjdShzc3ApO1xuLX1cbit2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHNyY3VfZXhwZWRpdGVfY3VycmVudChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkgeyB9XG4gI2RlZmluZSBzcmN1X2NoZWNrX3JlYWRfZmxhdm9yKHNzcCwgcmVhZF9mbGF2b3IpIGRvIHsgfSB3aGlsZSAoMClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbmluZGV4IDc1ZTU0ZTRmOTYzZmEuLjFjZTc1OWZiNzA5NDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxuQEAgLTEzLDYgKzEzLDggQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3Vfbm9kZV90cmVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuIFxuIHN0cnVjdCBzcmN1X25vZGU7XG4gc3RydWN0IHNyY3Vfc3RydWN0O1xuQEAgLTQxLDYgKzQzLDggQEAgc3RydWN0IHNyY3VfZGF0YSB7XG4gXHRib29sIHNyY3VfY2JsaXN0X2ludm9raW5nO1x0XHQvKiBJbnZva2luZyB0aGVzZSBDQnM/ICovXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdCBkZWxheV93b3JrO1x0XHQvKiBEZWxheSBmb3IgQ0IgaW52b2tpbmcgKi9cbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1x0XHQvKiBDb250ZXh0IGZvciBDQiBpbnZva2luZy4gKi9cbitcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NicztcdFx0LyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqL1xuK1x0c3RydWN0IGxsaXN0X25vZGUgZGVmZXJfbGluaztcdFx0LyogTGlua3Mgb250byB0aGUgcGVyLUNQVSBkZWZlcnJhbCBkcmFpbiBsaXN0ICovXG4gXHRzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9iYXJyaWVyX2hlYWQ7XHQvKiBGb3Igc3JjdV9iYXJyaWVyKCkgdXNlLiAqL1xuIFx0c3RydWN0IHJjdV9oZWFkIHNyY3VfZWNfaGVhZDtcdFx0LyogRm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpIHVzZS4gKi9cbiBcdGludCBzcmN1X2VjX3N0YXRlO1x0XHRcdC8qICBTdGF0ZSBmb3Igc3JjdV9leHBlZGl0ZV9jdXJyZW50KCkuICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9LY29uZmlnIGIva2VybmVsL3JjdS9LY29uZmlnXG5pbmRleCAzMzJkZjdhN2E2MzQ3Li5iYzk0ODNjMGI1ZDg0IDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9LY29uZmlnXG4rKysgYi9rZXJuZWwvcmN1L0tjb25maWdcbkBAIC0xNzUsNiArMTc1LDEyIEBAIGNvbmZpZyBSQ1VfU1RBTExfQ09NTU9OXG4gY29uZmlnIFJDVV9ORUVEX1NFR0NCTElTVFxuIFx0ZGVmX2Jvb2wgKCBUUkVFX1JDVSB8fCBUUkVFX1NSQ1UgfHwgVEFTS1NfUkNVX0dFTkVSSUMgKVxuIFxuKyMgVGhlIGRlZmVycmFsIChhbmQgdGhlIElSUV9XT1JLIGl0IHVzZXMpIGlzIG9ubHkgbmVlZGVkIHdoZXJlIGNhbGxfcmN1KCkgL1xuKyMgY2FsbF9zcmN1KCkgY2FuIGJlIGludm9rZWQgd2hpbGUgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQuXG4rY29uZmlnIFJDVV9ERUZFUlxuK1x0ZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNcbitcdHNlbGVjdCBJUlFfV09SS1xuK1xuIGNvbmZpZyBSQ1VfRkFOT1VUXG4gXHRpbnQgXCJUcmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgZmFub3V0IHZhbHVlXCJcbiBcdHJhbmdlIDIgNjQgaWYgNjRCSVRcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdS5oIGIva2VybmVsL3JjdS9yY3UuaFxuaW5kZXggMzlhOWY2ZmE5YTdiMi4uMDM2ZDI4NTE2ZTkyZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvcmN1LmhcbisrKyBiL2tlcm5lbC9yY3UvcmN1LmhcbkBAIC01NzIsNiArNTcyLDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrc19jYmxpc3RfaW5pdF9nZW5lcmljKHZvaWQpIHsgfVxuICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9JTklUXHQxXG4gI2RlZmluZSBSQ1VfU0NIRURVTEVSX1JVTk5JTkdcdDJcbiBcbisvKlxuKyAqIFNob3VsZCBhIGNhbGxfcmN1KCkvY2FsbF9zcmN1KCkgY2FsbGJhY2sgYmUgZGVmZXJyZWQgcmF0aGVyIHRoYW4gZW5xdWV1ZWRcbisgKiBub3c/ICBEZWZlciB3aGVuZXZlciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZDogYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBtYXlcbisgKiBiZSBpbiBmbGlnaHQgb24gdGhpcyBDUFUsIHNvIGVucXVldWluZyBub3cgY291bGQgY29ycnVwdCBpdC4gIEJ1dCBub3Qgd2hpbGVcbisgKiB0aGUgc2NoZWR1bGVyIGlzIGRvd24gLS0gZWFybHkgYm9vdCBpcyBzaW5nbGUtdGhyZWFkZWQgYW5kIGNhbiBjYWxsIHRoaXNcbisgKiBiZWZvcmUgaW5pdF9JUlEoKSBtYWtlcyBpcnFfd29yayB1c2FibGUgKGUuZy4gcmN1X2luaXQoKSdzIHNlbGYtdGVzdHMpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpXG4re1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gaXJxc19kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiByY3Vfc2NoZWR1bGVyX2FjdGl2ZSAhPSBSQ1VfU0NIRURVTEVSX0lOQUNUSVZFO1xuK31cbitcbisvKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUncyBkZWZlcnJlZCBTUkNVIGNhbGxiYWNrczsgc2VlIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4gKi9cbit2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTtcbitcbiBlbnVtIHJjdXRvcnR1cmVfdHlwZSB7XG4gXHRSQ1VfRkxBVk9SLFxuIFx0UkNVX1RBU0tTX0ZMQVZPUixcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXG5pbmRleCAzZDBiNTlhN2IwYjM4Li5hMDYxMDBiODIzNTk3IDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcbisrKyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXG5AQCAtNDgsNiArNDgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3RyYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ubWkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicmN1LmhcIlxuIFxuQEAgLTExNSw2ICsxMTYsNyBAQCB0b3J0dXJlX3BhcmFtKGludCwgbGVha3BvaW50ZXIsIDAsIFwiTGVhayBwb2ludGVyIGRlcmVmZXJlbmNlcyBmcm9tIHJlYWRlcnNcIik7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5fYmFycmllcl9jYnMsIDAsIFwiIyBvZiBjYWxsYmFja3Mva3RocmVhZHMgZm9yIGJhcnJpZXIgdGVzdGluZ1wiKTtcbiB0b3J0dXJlX3BhcmFtKGludCwgbl91cF9kb3duLCAzMiwgXCIjIG9mIGNvbmN1cnJlbnQgdXAvZG93biBocnRpbWVyLWJhc2VkIFJDVSByZWFkZXJzXCIpO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBuZmFrZXdyaXRlcnMsIDQsIFwiTnVtYmVyIG9mIFJDVSBmYWtlIHdyaXRlciB0aHJlYWRzXCIpO1xuK3RvcnR1cmVfcGFyYW0oYm9vbCwgbm1pX2NhbGxzLCB0cnVlLCBcIkV4ZXJjaXNlIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkgb24gbm1pX2NhcGFibGUgZmxhdm9yc1wiKTtcbiB0b3J0dXJlX3BhcmFtKGludCwgbnJlYWRlcnMsIC0xLCBcIk51bWJlciBvZiBSQ1UgcmVhZGVyIHRocmVhZHNcIik7XG4gdG9ydHVyZV9wYXJhbShib29sLCBud3JpdGVycywgMSwgXCJOdW1iZXIgb2YgUkNVIHdyaXRlciB0aHJlYWRzICgwIG9yIDEpXCIpO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBvYmplY3RfZGVidWcsIDAsIFwiRW5hYmxlIGRlYnVnLW9iamVjdCBkb3VibGUgY2FsbF9yY3UoKSB0ZXN0aW5nXCIpO1xuQEAgLTIxNiw2ICsyMTgsOCBAQCBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0X2ZhaWx1cmU7XG4gc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdHM7XG4gc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV90aW1lcnM7XG4gc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9pcnFzO1xuK3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NhbGw7XG4rc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9ubWlfY2I7XG4gc3RhdGljIGxvbmcgbl9iYXJyaWVyX2F0dGVtcHRzO1xuIHN0YXRpYyBsb25nIG5fYmFycmllcl9zdWNjZXNzZXM7IC8qIGRpZCByY3VfYmFycmllciB0ZXN0IHN1Y2NlZWQ/ICovXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbl9yZWFkX2V4aXRzO1xuQEAgLTQzMyw2ICs0MzcsNyBAQCBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHtcbiBcdGJvb2wgKCppc190YXNrX3JjdV9ib29zdGVkKSh2b2lkKTtcbiBcdGxvbmcgY2JmbG9vZF9tYXg7XG4gXHRpbnQgaXJxX2NhcGFibGU7XG4rXHRpbnQgbm1pX2NhcGFibGU7XG4gXHRpbnQgY2FuX2Jvb3N0O1xuIFx0aW50IGV4dGVuZGFibGVzO1xuIFx0aW50IHNsb3dfZ3BzO1xuQEAgLTY0Niw2ICs2NTEsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyByY3Vfb3BzID0ge1xuIFx0LmV4dGVuZGFibGVzXHRcdD0gUkNVVE9SVFVSRV9NQVhfRVhURU5ELFxuIFx0LmRlYnVnX29iamVjdHNcdFx0PSAxLFxuIFx0LnN0YXJ0X3BvbGxfaXJxc29mZlx0PSAxLFxuK1x0Lm5taV9jYXBhYmxlXHRcdD0gMSxcbiBcdC5uYW1lXHRcdFx0PSBcInJjdVwiXG4gfTtcbiBcbkBAIC05MzYsNiArOTQyLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdV9vcHMgPSB7XG4gXHQuZGVidWdfb2JqZWN0c1x0PSAxLFxuIFx0LmhhdmVfdXBfZG93blx0PSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpXG4gXHRcdFx0XHQ/IDAgOiBTUkNVX1JFQURfRkxBVk9SX05PUk1BTCB8IFNSQ1VfUkVBRF9GTEFWT1JfRkFTVF9VUERPV04sXG4rXHQubm1pX2NhcGFibGVcdD0gMSxcbiBcdC5uYW1lXHRcdD0gXCJzcmN1XCJcbiB9O1xuIFxuQEAgLTk5OSw2ICsxMDA2LDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdWRfb3BzID0ge1xuIFx0LmRlYnVnX29iamVjdHNcdD0gMSxcbiBcdC5oYXZlX3VwX2Rvd25cdD0gSVNfRU5BQkxFRChDT05GSUdfVElOWV9TUkNVKVxuIFx0XHRcdFx0PyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLFxuK1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwic3JjdWRcIlxuIH07XG4gXG5AQCAtMTI2Myw2ICsxMjcxLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgdGFza3NfdHJhY2luZ19vcHMgPSB7XG4gXHQuY2JmbG9vZF9tYXhcdD0gNTAwMDAsXG4gXHQuaXJxX2NhcGFibGVcdD0gMSxcbiBcdC5zbG93X2dwc1x0PSAxLFxuK1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwidGFza3MtdHJhY2luZ1wiXG4gfTtcbiBcbkBAIC0yNjUzLDEyICsyNjYyLDk3IEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKVxuIFxuIHN0YXRpYyBERUZJTkVfVE9SVFVSRV9SQU5ET01fUEVSQ1BVKHJjdV90b3J0dXJlX3RpbWVyX3JhbmQpO1xuIFxuKy8qXG4rICogRXhlcmNpc2UgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSSBjb250ZXh0IGZvciBmbGF2b3JzIHRoYXQgYWR2ZXJ0aXNlIC1cdTAwM2VubWlfY2FwYWJsZS5cbisgKiBBIHBlci1DUFUgaGFyZHdhcmUgcGVyZiBjb3VudGVyIG92ZXJmbG93cyBpbnRvIGFuIE5NSSAtLSBhIHJlYWwgTk1JIG9uIHg4NixcbisgKiBvciBhIHBzZXVkby1OTUkgb24gYXJtNjQgYm9vdGVkIHdpdGggaXJxY2hpcC5naWN2M19wc2V1ZG9fbm1pPTEgLS0gYW5kIGl0c1xuKyAqIGhhbmRsZXIgc3VibWl0cyBvbmUgcHJlYWxsb2NhdGVkIGNhbGxiYWNrIHZpYSAtXHUwMDNlY2FsbCgpLiAgT25seSBvbmUgY2FsbGJhY2sgaXNcbisgKiBpbiBmbGlnaHQgYXQgYSB0aW1lIChndWFyZGVkIGJ5IGFuIGF0b21pYyksIHdoaWNoIGF2b2lkcyBhbGxvY2F0aW5nIGluIE5NSVxuKyAqIGFuZCBpcyBlbm91Z2ggdG8gZXhlcmNpc2UgdGhlIGRlZmVycmFsLiAgVGhpcyBtaXJyb3JzIGhvdyBCUEYgcHJvZ3JhbXMgcmVhY2hcbisgKiAtXHUwMDNlY2FsbCgpIGZyb20gTk1JLiAgUmVxdWlyZXMgYSBoYXJkd2FyZSBQTVU7IHdoZW4gdGhlIG92ZXJmbG93IGlzIG5vdCBhbiBOTUlcbisgKiB0aGUgaGFuZGxlciBkb2VzIG5vdGhpbmcuXG4rICovXG4rI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0ge1xuK1x0LnR5cGVcdFx0PSBQRVJGX1RZUEVfSEFSRFdBUkUsXG4rXHQuY29uZmlnXHRcdD0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxuK1x0LnNpemVcdFx0PSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXG4rXHQucGlubmVkXHRcdD0gMSxcbitcdC5kaXNhYmxlZFx0PSAxLFxuK1x0LmZyZXFcdFx0PSAxLFxuK1x0LnNhbXBsZV9mcmVxXHQ9IDEwMDAsXG4rfTtcbitcbitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKipyY3VfdG9ydHVyZV9ubWlfZXZlbnRzO1xuK3N0YXRpYyBzdHJ1Y3QgcmN1X2hlYWQgcmN1X3RvcnR1cmVfbm1pX3JoO1xuK3N0YXRpYyBhdG9taWNfdCByY3VfdG9ydHVyZV9ubWlfcmhfaW51c2U7XG4rXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NiKHN0cnVjdCByY3VfaGVhZCAqcmhwKVxuK3tcbitcdGF0b21pY19sb25nX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYik7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnJjdV90b3J0dXJlX25taV9yaF9pbnVzZSwgMCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbit7XG4rXHRpZiAoIWluX25taSgpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoY3VyX29wcy1cdTAwM2VjYWxsIFx1MDAyNlx1MDAyNiAhYXRvbWljX3hjaGcoXHUwMDI2cmN1X3RvcnR1cmVfbm1pX3JoX2ludXNlLCAxKSkge1xuK1x0XHRjdXJfb3BzLVx1MDAzZWNhbGwoXHUwMDI2cmN1X3RvcnR1cmVfbm1pX3JoLCByY3VfdG9ydHVyZV9ubWlfY2IpO1xuK1x0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50O1xuK1x0aW50IGNwdTtcbitcbitcdGlmICghbm1pX2NhbGxzIHx8ICFjdXJfb3BzLVx1MDAzZW5taV9jYXBhYmxlIHx8ICFjdXJfb3BzLVx1MDAzZWNhbGwpXG4rXHRcdHJldHVybjtcbitcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBrY2FsbG9jKG5yX2NwdV9pZHMsIHNpemVvZigqcmN1X3RvcnR1cmVfbm1pX2V2ZW50cyksXG4rXHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbitcdGlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50cylcbitcdFx0cmV0dXJuO1xuK1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbitcdFx0ZXZlbnQgPSBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcihcdTAwMjZyY3VfdG9ydHVyZV9ubWlfYXR0ciwgY3B1LFxuK1x0XHRcdFx0XHRcdFx0IE5VTEwsIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdywgTlVMTCk7XG4rXHRcdGlmIChJU19FUlIoZXZlbnQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV0gPSBldmVudDtcbitcdFx0cGVyZl9ldmVudF9lbmFibGUoZXZlbnQpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2xlYW51cCh2b2lkKVxuK3tcbitcdGludCBjcHU7XG4rXG4rXHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXG4rXHRcdHJldHVybjtcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbitcdFx0aWYgKCFyY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV0pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHBlcmZfZXZlbnRfZGlzYWJsZShyY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV0pO1xuK1x0XHRwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7XG4rXHR9XG4rXHRrZnJlZShyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKTtcbitcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMO1xuK31cbisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkgeyB9XG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZCkgeyB9XG4rI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi9cbitcbiAvKlxuICAqIFJDVSB0b3J0dXJlIHJlYWRlciBmcm9tIHRpbWVyIGhhbmRsZXIuICBEZXJlZmVyZW5jZXMgcmN1X3RvcnR1cmVfY3VycmVudCxcbiAgKiBpbmNyZW1lbnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgcGlwZWxpbmUgYXJyYXkuICBUaGVcbiAgKiBjb3VudGVyIGluIHRoZSBlbGVtZW50IHNob3VsZCBuZXZlciBiZSBncmVhdGVyIHRoYW4gMSwgb3RoZXJ3aXNlLCB0aGVcbiAgKiBSQ1UgaW1wbGVtZW50YXRpb24gaXMgYnJva2VuLlxuICAqL1xuK1xuIHN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp1bnVzZWQpXG4ge1xuIFx0V0FSTl9PTl9PTkNFKCFpbl9zZXJ2aW5nX3NvZnRpcnEoKSk7XG5AQCAtMzA0MSw2ICszMTM1LDkgQEAgcmN1X3RvcnR1cmVfc3RhdHNfcHJpbnQodm9pZClcbiBcdFx0ZGF0YV9yYWNlKG5fYmFycmllcl9hdHRlbXB0cyksXG4gXHRcdGRhdGFfcmFjZShuX3JjdV90b3J0dXJlX2JhcnJpZXJfZXJyb3IpKTtcbiBcdHByX2NvbnQoXCJyZWFkLWV4aXRzOiAlbGQgXCIsIGRhdGFfcmFjZShuX3JlYWRfZXhpdHMpKTsgLy8gU3RhdGlzdGljLlxuK1x0cHJfY29udChcIm5taS1jYWxsczogJWxkIG5taS1jYnM6ICVsZCBcIixcbitcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKSxcbitcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpO1xuIFx0cHJfY29udChcIm5vY2ItdG9nZ2xlczogJWxkOiVsZCBcIixcbiBcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX25vY2Jfb2ZmbG9hZCksIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9ub2NiX2Rlb2ZmbG9hZCkpO1xuIFx0cHJfY29udChcImdwd3JhcHM6ICVsZFxcblwiLCBuX2dwd3JhcHMpO1xuQEAgLTQzMTUsNiArNDQxMiw4IEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZClcbiBcdFx0a2ZyZWUocmVhZGVyX3Rhc2tzKTtcbiBcdFx0cmVhZGVyX3Rhc2tzID0gTlVMTDtcbiBcdH1cbitcdC8qIERpc2FibGUgdGhlIHBlcmYgY291bnRlcnMgKGFuZCB0aHVzIHRoZSBOTUkgLVx1MDAzZWNhbGwoKSBmaXJpbmcpIG5vdy4gKi9cbitcdHJjdV90b3J0dXJlX25taV9jbGVhbnVwKCk7XG4gXHRrZnJlZShyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGspO1xuIFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrID0gTlVMTDtcbiBcbkBAIC00MzQ0LDYgKzQ0NDMsMjAgQEAgcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKVxuIFx0XHRwcl9pbmZvKFwiJXM6IEludm9raW5nICVwUygpLlxcblwiLCBfX2Z1bmNfXywgY3VyX29wcy1cdTAwM2VjYl9iYXJyaWVyKTtcbiBcdFx0Y3VyX29wcy1cdTAwM2VjYl9iYXJyaWVyKCk7XG4gXHR9XG4rXG4rXHQvKlxuK1x0ICogY2JfYmFycmllcigpIGFib3ZlIGRyYWluZWQgZXZlcnkgZGVmZXJyZWQgTk1JIC1cdTAwM2VjYWxsKCkgY2FsbGJhY2ssIHNvIHRoZVxuK1x0ICogY291bnQgaXNzdWVkIGZyb20gTk1JIG11c3QgZXF1YWwgdGhlIGNvdW50IGludm9rZWQ7IGEgbWlzbWF0Y2ggbWVhbnMgYVxuK1x0ICogY2FsbGJhY2sgd2FzIGxvc3QuXG4rXHQgKi9cbitcdGlmIChhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpICE9XG4rXHQgICAgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpIHtcbitcdFx0cHJfYWxlcnQoXCIlczogTk1JIC1cdTAwM2VjYWxsKCkgbG9zdCBhIGNhbGxiYWNrOiBpc3N1ZWQgJWxkIGludm9rZWQgJWxkXFxuXCIsXG4rXHRcdFx0IF9fZnVuY19fLCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxuK1x0XHRcdCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSk7XG4rXHRcdGF0b21pY19pbmMoXHUwMDI2bl9yY3VfdG9ydHVyZV9lcnJvcik7XG4rXHR9XG4rXG4gXHRpZiAoY3VyX29wcy1cdTAwM2VjbGVhbnVwICE9IE5VTEwpXG4gXHRcdGN1cl9vcHMtXHUwMDNlY2xlYW51cCgpO1xuIFxuQEAgLTQ3NzYsNiArNDg4OSw4IEBAIHJjdV90b3J0dXJlX2luaXQodm9pZClcbiBcdFx0Zmlyc3RlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIHVud2luZDtcbiBcdH1cbitcdC8qIEFybSB0aGUgcGVyLUNQVSBwZXJmIGNvdW50ZXJzIHRoYXQgZHJpdmUgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSS4gKi9cbitcdHJjdV90b3J0dXJlX25taV9pbml0KCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucmVhbHJlYWRlcnM7IGkrKykge1xuIFx0XHRyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGtbaV0ucnRjX2Noa3JkciA9IC0xO1xuIFx0XHRmaXJzdGVyciA9IHRvcnR1cmVfY3JlYXRlX2t0aHJlYWQocmN1X3RvcnR1cmVfcmVhZGVyLCAodm9pZCAqKWksXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9zcmN1dGlueS5jIGIva2VybmVsL3JjdS9zcmN1dGlueS5jXG5pbmRleCA1NThiYThkMzE2ZGI2Li4wM2EwN2ExZjNhMzBiIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jXG4rKysgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbkBAIC0xMCw2ICsxMCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVlbXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbkBAIC00Myw2ICs0NCw4IEBAIHN0YXRpYyBpbnQgaW5pdF9zcmN1X3N0cnVjdF9maWVsZHMoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRJTklUX1dPUksoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzc3AtXHUwMDNlc3JjdV93b3JrLmVudHJ5KTtcbiBcdGluaXRfaXJxX3dvcmsoXHUwMDI2c3NwLVx1MDAzZXNyY3VfaXJxX3dvcmssIHNyY3VfdGlueV9pcnFfd29yayk7XG4rXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2Nicyk7XG4rXHRpbml0X2lycV93b3JrKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9pdywgc3JjdV9kZWZlcl9kcmFpbik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjEzLDExICsyMTYsMTEgQEAgc3RhdGljIHZvaWQgc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gfVxuIFxuIC8qXG4tICogRW5xdWV1ZSBhbiBTUkNVIGNhbGxiYWNrIG9uIHRoZSBzcGVjaWZpZWQgc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlLFxuLSAqIGluaXRpYXRpbmcgZ3JhY2UtcGVyaW9kIHByb2Nlc3NpbmcgaWYgaXQgaXMgbm90IGFscmVhZHkgcnVubmluZy5cbisgKiBFbnF1ZXVlIEByaHAgb24gdGhlIGNhbGxiYWNrIGxpc3QuICBBbHNvIGNhbGxlZCBieSBzcmN1X2RlZmVyX2RyYWluKCkgdG9cbisgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLlxuICAqL1xuLXZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbi1cdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxuK3N0YXRpYyB2b2lkIHNyY3VfZG9fZW5xdWV1ZShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4rXHRcdFx0ICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbkBAIC0yMzEsNiArMjM0LDM5IEBAIHZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiBcdHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCk7XG4gXHRwcmVlbXB0X2VuYWJsZSgpO1xuIH1cbitcbit2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbit7XG4rXHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCA9IGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3Vfc3RydWN0LCBkZWZlcl9pdyk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4rXG4rXHQvKlxuK1x0ICogQ2FsbGJhY2tzIGhhdmUgbm8gbXV0dWFsIG9yZGVyaW5nIGd1YXJhbnRlZSBhbmQgc3JjdV9iYXJyaWVyKCkgaGFzXG4rXHQgKiBhbHJlYWR5IGZsdXNoZWQgdXMsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLlxuK1x0ICovXG4rXHRsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2NicykpIHtcbitcdFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbitcbitcdFx0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtXHUwMDNlZnVuYyk7XG4rXHR9XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfZGVmZXJfZHJhaW4pO1xuK1xuK3ZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbitcdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxuK3tcbitcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbitcdFx0cmhwLVx1MDAzZWZ1bmMgPSBmdW5jO1xuK1x0XHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2NicykpXG4rXHRcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2l3KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXG4rXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuK1xuK1x0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jKTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9zcmN1KTtcbiBcbiAvKlxuQEAgLTI2MCw2ICsyOTYsMTUgQEAgdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcbiBcbisvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzLCB0aGVuIHdhaXQgZm9yIGFsbCBpbi1mbGlnaHQgb25lcy4gKi9cbit2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbit7XG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbitcdFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlZGVmZXJfaXcpO1xuK1x0c3luY2hyb25pemVfc3JjdShzc3ApO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2JhcnJpZXIpO1xuK1xuIC8qXG4gICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llXG4gICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9zcmN1dHJlZS5jIGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXG5pbmRleCAzMDQxMTI2NzRlOGEyLi5iOWZlNTdmZjkxMDAwIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9zcmN1dHJlZS5jXG4rKysgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcbkBAIC0yMCw2ICsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVlbXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuQEAgLTc5LDYgKzgwLDQ2IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3Nfc3JjdShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIHN0YXRpYyB2b2lkIHNyY3VfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICp3b3JrKTtcbiBzdGF0aWMgdm9pZCBzcmN1X2RlbGF5X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbiBcbitzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xuK1xuKy8qXG4rICogUGVyLUNQVSBjYWxsX3NyY3UoKSBkZWZlcnJhbCBzdGF0ZS4gIFRoZSBpcnFfd29yayBpcyBnbG9iYWwgKHNoYXJlZCBieSBldmVyeVxuKyAqIHNyY3Vfc3RydWN0KSwgc28gaXQgbXVzdCBmaW5kIHdoaWNoIHNyY3Vfc3RydWN0cyBkZWZlcnJlZCBjYWxsYmFja3M6IGFcbisgKiBjYWxsYmFjayBpcyBzdGFnZWQgb24gaXRzIHNyY3VfZGF0YSdzIC1cdTAwM2VkZWZlcl9jYnMsIGFuZCB0aGF0IHNyY3VfZGF0YSBpc1xuKyAqIGNoYWluZWQgKC1cdTAwM2VkZWZlcl9saW5rKSBvbnRvIHRoaXMgcGVyLUNQVSAtXHUwMDNlbGlzdCB0aGF0IHRoZSBpcnFfd29yayB3YWxrcy5cbisgKi9cbitzdHJ1Y3Qgc3JjdV9kZWZlciB7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZFx0bGlzdDtcbitcdHN0cnVjdCBpcnFfd29ya1x0XHRpdztcbitcdHJhd19zcGlubG9ja190XHRcdGxvY2s7XG4rfTtcbitcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNyY3VfZGVmZXIsIHNyY3VfZGVmZXIpID0ge1xuK1x0LmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoc3JjdV9kZWZlci5sb2NrKSxcbitcdC5pdyA9IElSUV9XT1JLX0lOSVRfSEFSRChzcmN1X2RlZmVyX2RyYWluKSxcbit9O1xuK1xuKy8qXG4rICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3Mgc28gYSBmb2xsb3dpbmcgc3JjdV9iYXJyaWVyKClcbisgKiB3YWl0cyBmb3IgdGhlbS4gIEFuIG9ubGluZSBDUFUncyBvd24gaXJxX3dvcmsgcmUtaXNzdWVzIGl0cyBjYWxsYmFja3MsIHNvIHdhaXRcbisgKiBpdCBvdXQ7IGFuIG9mZmxpbmUgQ1BVJ3MgaXJxX3dvcmsgbWF5IG5ldmVyIHJ1biBhZ2Fpbiwgc28gZHJhaW4gaXRzIGxpc3RcbisgKiBkaXJlY3RseSBvbnRvIHRoaXMgQ1BVIGluc3RlYWQuXG4rICovXG4rc3RhdGljIHZvaWQgc3JjdV9kZWZlcl9mbHVzaCh2b2lkKVxuK3tcbitcdGludCBjcHU7XG4rXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdHJldHVybjtcbitcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbitcdFx0aWYgKGNwdV9vbmxpbmUoY3B1KSlcbitcdFx0XHRpcnFfd29ya19zeW5jKFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XG4rXHRcdGVsc2VcbitcdFx0XHRzcmN1X2RlZmVyX2RyYWluKFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogSW5pdGlhbGl6ZSBTUkNVIHBlci1DUFUgZGF0YS4gIE5vdGUgdGhhdCBzdGF0aWNhbGx5IGFsbG9jYXRlZFxuICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgbWlnaHQgYWxyZWFkeSBoYXZlIHNyY3VfcmVhZF9sb2NrKCkgYW5kXG5AQCAtMTA3LDYgKzE0OCwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3NyY3Vfc3RydWN0X2RhdGEoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRcdHNkcC1cdTAwM2VjcHUgPSBjcHU7XG4gXHRcdElOSVRfV09SSyhcdTAwMjZzZHAtXHUwMDNld29yaywgc3JjdV9pbnZva2VfY2FsbGJhY2tzKTtcbiBcdFx0dGltZXJfc2V0dXAoXHUwMDI2c2RwLVx1MDAzZWRlbGF5X3dvcmssIHNyY3VfZGVsYXlfdGltZXIsIDApO1xuK1x0XHQvKlxuK1x0XHQgKiAtXHUwMDNlZGVmZXJfY2JzIGFuZCAtXHUwMDNlZGVmZXJfbGluayBhcmUgdmFsaWQgd2hlbiB6ZXJvZWQgYW5kIGFyZSBub3RcbitcdFx0ICogcmVpbml0aWFsaXplZCBoZXJlLCBsZXN0IHdlIGNsb2JiZXIgY2FsbGJhY2tzIGEgcmVlbnRyYW50XG4rXHRcdCAqIGNhbGxfc3JjdSgpIGFscmVhZHkgc3RhZ2VkLiAgU2VlIF9fY2FsbF9zcmN1KCkuXG4rXHRcdCAqL1xuIFx0XHRzZHAtXHUwMDNlc3NwID0gc3NwO1xuIFx0fVxuIH1cbkBAIC02OTcsNiArNzQzLDggQEAgdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIFx0XHRyZXR1cm47IC8qIEp1c3QgbGVhayBpdCEgKi9cbiBcdC8qIFdhaXQgZm9yIGlycV93b3JrIHRvIGZpbmlzaCBmaXJzdCBhcyBpdCBtYXkgcXVldWUgYSBuZXcgd29yay4gKi9cbiBcdGlycV93b3JrX3N5bmMoXHUwMDI2c3VwLVx1MDAzZWlycV93b3JrKTtcbitcdC8qIERyYWluIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgKHNoYXJlZCBpcnFfd29yaykgYmVmb3JlIGZyZWVpbmcgLVx1MDAzZXNkYS4gKi9cbitcdHNyY3VfZGVmZXJfZmx1c2goKTtcbiBcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzdXAtXHUwMDNld29yayk7XG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdHN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IHBlcl9jcHVfcHRyKHNzcC1cdTAwM2VzZGEsIGNwdSk7XG5AQCAtMTQxMCw4ICsxNDU4LDE4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLFxuICAqIHNyY3VfcmVhZF9sb2NrKCksIGFuZCBzcmN1X3JlYWRfdW5sb2NrKCkgdGhhdCBhcmUgYWxsIHBhc3NlZCB0aGUgc2FtZVxuICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4tXHRcdFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxuKy8qXG4rICogVGhlIHNyY3VfY2JsaXN0IGFuZCB0aGUgc3JjdV9ub2RlIHRyZWUgYXJlIG9ubHkgZXZlciBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHNcbisgKiBkaXNhYmxlZCAoc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKSBlbnF1ZXVlcyB1bmRlciByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSBhbmRcbisgKiBtYXkgd2FsayB0aGUgdHJlZTsgY2FsbGJhY2sgaW52b2NhdGlvbiBhbmQgZ3JhY2UtcGVyaW9kIHdvcmsgbGlrZXdpc2UpLiAgU29cbisgKiBsaWtlIGNhbGxfcmN1KCksIGVucXVldWluZyB3aGlsZSBhIGxpc3Qgb3BlcmF0aW9uIGlzIGluIGZsaWdodCBvbiB0aGlzIENQVVxuKyAqIHdvdWxkIGNvcnJ1cHQgaXQgb3IgZGVhZGxvY2sgLS0gZS5nLiBjYWxsX3JjdV90YXNrc190cmFjZSgpLCB3aGljaCBpc1xuKyAqIGNhbGxfc3JjdSgpIG9uIGEgZGVkaWNhdGVkIHNyY3Vfc3RydWN0LCBmcm9tIGEgQlBGIHByb2dyYW0uICBfX2NhbGxfc3JjdSgpXG4rICogZGVmZXJzIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCB2aWEgYSBwZXItQ1BVIGlycV93b3JrOyBvbmx5IGtlcm5lbHNcbisgKiB3aGVyZSB0aGF0IGNhbiBoYXBwZW4gKENPTkZJR19SQ1VfREVGRVIpIG5lZWQgdGhpcy5cbisgKi9cbitzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuK1x0XHRcdCAgICByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXG4ge1xuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHJocCkpIHtcbiBcdFx0LyogUHJvYmFibGUgZG91YmxlIGNhbGxfc3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4gKi9cbkBAIC0xNDIzLDYgKzE0ODEsNzIgQEAgc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuIFx0KHZvaWQpc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3NwLCByaHAsIGRvX25vcm0pO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4rXHRcdFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxuK3tcbitcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbitcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwID0gdGhpc19jcHVfcHRyKHNzcC1cdTAwM2VzZGEpO1xuK1xuK1x0XHRyaHAtXHUwMDNlZnVuYyA9IGZ1bmM7XG4rXHRcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopcmhwLCBcdTAwMjZzZHAtXHUwMDNlZGVmZXJfY2JzKSkge1xuK1x0XHRcdC8qIEZpcnN0IGRlZmVycmFsIG9uIHRoaXMgc3JjdV9kYXRhOiBjaGFpbiBpdCBmb3IgdGhlIGRyYWluLiAqL1xuK1x0XHRcdHN0cnVjdCBzcmN1X2RlZmVyICpzbmRwID0gdGhpc19jcHVfcHRyKFx1MDAyNnNyY3VfZGVmZXIpO1xuK1xuK1x0XHRcdHNkcC1cdTAwM2Vzc3AgPSBzc3A7XG4rXHRcdFx0aWYgKGxsaXN0X2FkZChcdTAwMjZzZHAtXHUwMDNlZGVmZXJfbGluaywgXHUwMDI2c25kcC1cdTAwM2VsaXN0KSlcbitcdFx0XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnNuZHAtXHUwMDNlaXcpO1xuK1x0XHR9XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuK1x0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXHUwMDI2XHUwMDI2IGluX25taSgpKTtcbitcbitcdHNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgZnVuYywgZG9fbm9ybSk7XG4rfVxuK1xuKy8qXG4rICogUmUtaXNzdWUgdGhpcyBDUFUncyBkZWZlcnJlZCBjYWxsYmFja3MsIGdvaW5nIHN0cmFpZ2h0IHRvIHNyY3VfZG9fZW5xdWV1ZSgpIHNvXG4rICogdGhleSBjYW5ub3QgZGVmZXIgYWdhaW4uICBUaGUgaXJxX3dvcmsgd2Fsa3MgaXRzIC1cdTAwM2VsaXN0IG9mIHNyY3VfZGF0YSwgZWFjaFxuKyAqIGNhcnJ5aW5nIGl0cyBvd24gLVx1MDAzZWRlZmVyX2Nicy4gIC1cdTAwM2Vsb2NrIGlzIGhlbGQgYWNyb3NzIHRoZSBkcmFpbiBzbyBkcmFpbmVyc1xuKyAqIChpcnFfd29yaywgc3JjdV9kZWZlcl9mbHVzaCgpIGFuZCBzcmN1X29mZmxpbmVfZHJhaW4oKSkgc2VyaWFsaXplIGFuZCBuZXZlclxuKyAqIGxlYXZlIGEgY2FsbGJhY2sgb2ZmIHRoZSBsaXN0cyB5ZXQgbm90IG9uIGEgY2FsbGJhY2sgbGlzdC5cbisgKi9cbitzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4re1xuK1x0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X2RlZmVyLCBpdyk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqc25vZGUsICpzbmV4dDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c25kcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHNub2RlLCBzbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZzbmRwLVx1MDAzZWxpc3QpKSB7XG4rXHRcdHN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IGNvbnRhaW5lcl9vZihzbm9kZSwgc3RydWN0IHNyY3VfZGF0YSwgZGVmZXJfbGluayk7XG4rXHRcdHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwID0gc2RwLVx1MDAzZXNzcDtcbitcdFx0c3RydWN0IGxsaXN0X25vZGUgKmNub2RlLCAqY25leHQ7XG4rXG4rXHRcdGNub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZzZHAtXHUwMDNlZGVmZXJfY2JzKTtcbitcdFx0bGxpc3RfZm9yX2VhY2hfc2FmZShjbm9kZSwgY25leHQsIGNub2RlKSB7XG4rXHRcdFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopY25vZGU7XG4rXG4rXHRcdFx0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtXHUwMDNlZnVuYywgdHJ1ZSk7XG4rXHRcdH1cbitcdH1cbitcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnNuZHAtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK31cbitcbisvKlxuKyAqIERyYWluIEBjcHUncyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3M7IGNhbGxlZCBmcm9tXG4rICogcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpIG9uY2UgQGNwdSBpcyBkZWFkLiAgT25lIHBhc3MgY292ZXJzIGV2ZXJ5XG4rICogc3JjdV9zdHJ1Y3QsIGFzIHRoZSBwZXItQ1BVIHNyY3VfZGVmZXIgbGlzdCBjaGFpbnMgdGhlbSBhbGwsIGFuZCB0aGVcbisgKiByZS1pc3N1ZSBsYW5kcyBvbiB0aGUgY3VycmVudCBDUFUncyBzcmN1X2RhdGEuXG4rICovXG4rdm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSlcbit7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdHJldHVybjtcbitcdHNyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTtcbit9XG4rXG4gLyoqXG4gICogY2FsbF9zcmN1KCkgLSBRdWV1ZSBhIGNhbGxiYWNrIGZvciBpbnZvY2F0aW9uIGFmdGVyIGFuIFNSQ1UgZ3JhY2UgcGVyaW9kXG4gICogQHNzcDogc3JjdV9zdHJ1Y3QgaW4gcXVldWUgdGhlIGNhbGxiYWNrXG5AQCAtMTY3Nyw5ICsxODAxLDE3IEBAIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIHtcbiBcdGludCBjcHU7XG4gXHRpbnQgaWR4O1xuLVx0dW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxKTtcbitcdHVuc2lnbmVkIGxvbmcgcztcbiBcbiBcdGNoZWNrX2luaXRfc3JjdV9zdHJ1Y3Qoc3NwKTtcbitcbitcdC8qXG4rXHQgKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAgVGhlXG4rXHQgKiBzaGFyZWQgaXJxX3dvcmsgbWF5IGFsc28gZHJhaW4gb3RoZXIgc3JjdV9zdHJ1Y3RzJywgd2hpY2ggaXMgaGFybWxlc3MuXG4rXHQgKi9cbitcdHNyY3VfZGVmZXJfZmx1c2goKTtcbitcbitcdHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZzc3AtXHUwMDNlc3JjdV9zdXAtXHUwMDNlc3JjdV9iYXJyaWVyX211dGV4KTtcbiBcdGlmIChyY3Vfc2VxX2RvbmUoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEsIHMpKSB7XG4gXHRcdHNtcF9tYigpOyAvKiBGb3JjZSBvcmRlcmluZyBmb2xsb3dpbmcgcmV0dXJuLiAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdGlueS5jIGIva2VybmVsL3JjdS90aW55LmNcbmluZGV4IGRjY2NjZDZiZTk0MTEuLjcxMjQ5ZWFjNjEwMjEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RpbnkuY1xuKysrIGIva2VybmVsL3JjdS90aW55LmNcbkBAIC0xMSw2ICsxMSw4IEBAXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuQEAgLTQyLDggKzQ0LDgzIEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2N0cmxibGsgPSB7XG4gXHQuZ3Bfc2VxXHRcdD0gMCAtIDMwMFVMLFxuIH07XG4gXG4rLypcbisgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGV2ZXIgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICh0aGlzXG4rICogZW5xdWV1ZSwgY2FsbGJhY2sgaW52b2NhdGlvbiwgZ3JhY2UtcGVyaW9kIHdvcmspLCBzbyBlbnF1ZXVpbmcgd2hpbGUgYSBsaXN0XG4rICogb3BlcmF0aW9uIGlzIGluIGZsaWdodCB3b3VsZCBjb3JydXB0IGl0LiAgRGVmZXIgd2hlbmV2ZXIgaW50ZXJydXB0cyBhcmVcbisgKiBkaXNhYmxlZDogdGhlIGNhbGxiYWNrIGdvZXMgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXQgYW4gaXJxX3dvcmsgcmUtaXNzdWVzXG4rICogbGF0ZXIuICBPbmUgZ2xvYmFsIGxpc3QgYW5kIGlycV93b3JrIHN1ZmZpY2UsIGFzIFRpbnkgUkNVIGlzIHVuaXByb2Nlc3Nvci5cbisgKiBPbmx5IGtlcm5lbHMgd2hlcmUgdGhhdCBjYW4gaGFwcGVuIChDT05GSUdfUkNVX0RFRkVSKSBuZWVkIHRoaXMuXG4rICovXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xuK3N0YXRpYyBMTElTVF9IRUFEKHJjdV9kZWZlcl9saXN0KTtcbitzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHJjdV9kZWZlcl9pdywgcmN1X2RlZmVyX2RyYWluKTtcbitcbisvKlxuKyAqIEVucXVldWUgQGhlYWQgb24gdGhlIGNhbGxiYWNrIGxpc3QuICBBbHNvIGNhbGxlZCBieSByY3VfZGVmZXJfZHJhaW4oKSB0b1xuKyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXG4rICovXG4rc3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxuK3tcbitcdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHtcbitcdFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmRvdWJsZWZyZWVzKSBcdTAwM2MgNCkge1xuK1x0XHRcdHByX2VycihcIiVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC1cdTAwM2UlcFMoKSEhISAgXCIsIF9fZnVuY19fLCBoZWFkLCBoZWFkLVx1MDAzZWZ1bmMpO1xuK1x0XHRcdG1lbV9kdW1wX29iaihoZWFkKTtcbitcdFx0fVxuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRoZWFkLVx1MDAzZWZ1bmMgPSBmdW5jO1xuK1x0aGVhZC1cdTAwM2VuZXh0ID0gTlVMTDtcbitcbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdCpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDtcbitcdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcdTAwMjZoZWFkLVx1MDAzZW5leHQ7XG4rXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4rXG4rXHRpZiAodW5saWtlbHkoaXNfaWRsZV90YXNrKGN1cnJlbnQpKSkge1xuK1x0XHQvKiBmb3JjZSBzY2hlZHVsaW5nIGZvciByY3VfcXMoKSAqL1xuK1x0XHRyZXNjaGVkX2NwdSgwKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4re1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xuK1xuK1x0LypcbitcdCAqIENhbGxiYWNrcyBoYXZlIG5vIG11dHVhbCBvcmRlcmluZyBndWFyYW50ZWUgYW5kIHJjdV9iYXJyaWVyKCkgaGFzXG4rXHQgKiBhbHJlYWR5IGZsdXNoZWQgdXMsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLlxuK1x0ICovXG4rXHRsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoXHUwMDI2cmN1X2RlZmVyX2xpc3QpKSB7XG4rXHRcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xuK1xuK1x0XHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBoZWFkLVx1MDAzZWZ1bmMpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBjYWxsX3JjdV9kZWZlcihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4re1xuK1x0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbitcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgXHUwMDI2cmN1X2RlZmVyX2xpc3QpKVxuK1x0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZyY3VfZGVmZXJfaXcpO1xuK31cbitcbisvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICovXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2ZsdXNoKHZvaWQpXG4re1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm47XG4rXHRpcnFfd29ya19zeW5jKFx1MDAyNnJjdV9kZWZlcl9pdyk7XG4rfVxuK1xuIHZvaWQgcmN1X2JhcnJpZXIodm9pZClcbiB7XG4rXHQvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGZpcnN0LiAqL1xuK1x0cmN1X2RlZmVyX2ZsdXNoKCk7XG4gXHR3YWl0X3JjdV9ncChjYWxsX3JjdV9odXJyeSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpO1xuQEAgLTE1NywyOSArMjM0LDE1IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdSk7XG4gICovXG4gdm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4ge1xuLVx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cbi1cdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xuLVx0XHRpZiAoYXRvbWljX2luY19yZXR1cm4oXHUwMDI2ZG91YmxlZnJlZXMpIFx1MDAzYyA0KSB7XG4tXHRcdFx0cHJfZXJyKFwiJXMoKTogRG91YmxlLWZyZWVkIENCICVwLVx1MDAzZSVwUygpISEhICBcIiwgX19mdW5jX18sIGhlYWQsIGhlYWQtXHUwMDNlZnVuYyk7XG4tXHRcdFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xuLVx0XHR9XG4rXHRpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7XG4rXHRcdGNhbGxfcmN1X2RlZmVyKGhlYWQsIGZ1bmMpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRoZWFkLVx1MDAzZWZ1bmMgPSBmdW5jO1xuLVx0aGVhZC1cdTAwM2VuZXh0ID0gTlVMTDtcbi1cbi1cdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbi1cdCpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDtcbi1cdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcdTAwMjZoZWFkLVx1MDAzZW5leHQ7XG4tXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4rXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbitcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSk7XG4gXG4tXHRpZiAodW5saWtlbHkoaXNfaWRsZV90YXNrKGN1cnJlbnQpKSkge1xuLVx0XHQvKiBmb3JjZSBzY2hlZHVsaW5nIGZvciByY3VfcXMoKSAqL1xuLVx0XHRyZXNjaGVkX2NwdSgwKTtcbi1cdH1cbitcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuY1xuaW5kZXggNjJiZjJiZjU1MWY0OS4uN2QwYWU5NGJkZjM5ZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvdHJlZS5jXG4rKysgYi9rZXJuZWwvcmN1L3RyZWUuY1xuQEAgLTI0LDYgKzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9kZWJ1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbm1pLmhcdTAwM2VcbkBAIC0zMTQ4LDIxICszMTQ5LDI3IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2NiX292bGQoc3RydWN0IHJjdV9kYXRhICpyZHApXG4gXHRyYXdfc3Bpbl91bmxvY2tfcmN1X25vZGUocm5wKTtcbiB9XG4gXG4tc3RhdGljIHZvaWRcbi1fX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcbisvKlxuKyAqIFRoZSBjYWxsYmFjayBsaXN0IGlzIG9ubHkgZXZlciBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKGVucXVldWUsXG4rICogY2FsbGJhY2sgaW52b2NhdGlvbiwgZ3JhY2UtcGVyaW9kIHdvcmspLiAgQSBjYWxsX3JjdSgpIHdpdGggaW50ZXJydXB0cyBhbHJlYWR5XG4rICogZGlzYWJsZWQgbWF5IGludGVycnVwdCBvbmUgb2YgdGhvc2UsIHNvIF9fY2FsbF9yY3VfY29tbW9uKCkgZGVmZXJzOiB0aGVcbisgKiBjYWxsYmFjayBpcyBzdGFnZWQgb24gYSBwZXItQ1BVIGxsaXN0IHRoYXQgYW4gaXJxX3dvcmsgcmUtaXNzdWVzIG9uY2VcbisgKiBpbnRlcnJ1cHRzIGFyZSBvbi4gIE9ubHkgQ09ORklHX1JDVV9ERUZFUiBrZXJuZWxzIGNhbiBoaXQgdGhpcy5cbisgKi9cbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG4rXG4rLypcbisgKiBFbnF1ZXVlIEBoZWFkIG9uIHRoaXMgQ1BVJ3MgcmN1X3NlZ2NibGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpXG4rICogdG8gcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsXG4rICogY29uZGl0aW9uLiAgRWl0aGVyIGNhbGxlciBtYXkgaGF2ZSBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQuXG4rICovXG4rc3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4ge1xuIFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGJvb2wgbGF6eTtcbiBcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xuIFxuLVx0LyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi9cbi1cdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XG4tXG4tXHQvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFByb2JhYmxlIGRvdWJsZSBjYWxsX3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay5cbkBAIC0zMjA2LDYgKzMyMTMsODMgQEAgX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4gXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gfVxuIFxuKy8qXG4rICogUmUtaXNzdWUgZGVmZXJyZWQgY2FsbGJhY2tzLCBnb2luZyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdFxuKyAqIGRlZmVyIGFnYWluLiAgZGVmZXJfbG9jayBpcyBoZWxkIGFjcm9zcyBsbGlzdF9kZWxfYWxsKCkgYW5kIHRoZSByZS1pc3N1ZSBzb1xuKyAqIHRoZSBkcmFpbmVycyAtLSB0aGlzIENQVSdzIGlycV93b3JrLCByY3VfZGVmZXJfZmx1c2goKSBhbmRcbisgKiByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkgLS0gc2VyaWFsaXplIGFuZCBuZXZlciBsZWF2ZSBhIGNhbGxiYWNrIG9mZlxuKyAqIC1cdTAwM2VkZWZlcl9oZWFkIHlldCBub3Qgb24gYSBjYWxsYmFjayBsaXN0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuK3tcbitcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gY29udGFpbmVyX29mKGl3LCBzdHJ1Y3QgcmN1X2RhdGEsIGRlZmVyX3dvcmspO1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jaywgZmxhZ3MpO1xuK1x0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSkge1xuK1x0XHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbitcbitcdFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cdTAwM2VmdW5jLCBmYWxzZSk7XG4rXHR9XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jaywgZmxhZ3MpO1xuK31cbitcbisvKiBTdGFnZSBAaGVhZCBmb3IgdGhpcyBDUFUncyBpcnFfd29yayB3aGVuIGNhbGxfcmN1KCkgY2Fubm90IGVucXVldWUgbm93LiAqL1xuK3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbit7XG4rXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHRoaXNfY3B1X3B0cihcdTAwMjZyY3VfZGF0YSk7XG4rXG4rXHRoZWFkLVx1MDAzZWZ1bmMgPSBmdW5jO1xuK1x0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCBcdTAwMjZyZHAtXHUwMDNlZGVmZXJfaGVhZCkpXG4rXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl93b3JrKTtcbit9XG4rXG4rLypcbisgKiBSZWdpc3RlciBwZW5kaW5nIGRlZmVycmVkIGNhbGxiYWNrcyBpbnRvIHRoZSBjYWxsYmFjayBsaXN0cyBzbyBhIGZvbGxvd2luZ1xuKyAqIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICBUaGlzIHJ1bnMgYmVmb3JlIHJjdV9iYXJyaWVyKCkgc2NhbnMgdGhlXG4rICogbGlzdHMuICBBbiBvbmxpbmUgQ1BVJ3Mgb3duIGlycV93b3JrIHJlLWlzc3VlcyBpdHMgY2FsbGJhY2tzLCBzbyB3YWl0IGl0IG91dDtcbisgKiBhbiBvZmZsaW5lIENQVSdzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4sIHNvIGRyYWluIGl0cyBsaXN0IGRpcmVjdGx5XG4rICogb250byB0aGlzIENQVSBpbnN0ZWFkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxuK3tcbitcdGludCBjcHU7XG4rXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdHJldHVybjtcbitcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbitcdFx0c3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihcdTAwMjZyY3VfZGF0YSwgY3B1KTtcbitcbitcdFx0aWYgKGNwdV9vbmxpbmUoY3B1KSlcbitcdFx0XHRpcnFfd29ya19zeW5jKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl93b3JrKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHJjdV9kZWZlcl9kcmFpbihcdTAwMjZyZHAtXHUwMDNlZGVmZXJfd29yayk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkXG4rX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4re1xuK1x0LyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi9cbitcdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XG4rXG4rXHQvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuK1x0XHRjYWxsX3JjdV9kZWZlcihoZWFkLCBmdW5jKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXG4rXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuK1xuK1x0cmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYywgbGF6eV9pbik7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfUkNVX0xBWllcbiBzdGF0aWMgYm9vbCBlbmFibGVfcmN1X2xhenkgX19yZWFkX21vc3RseSA9ICFJU19FTkFCTEVEKENPTkZJR19SQ1VfTEFaWV9ERUZBVUxUX09GRik7XG4gbW9kdWxlX3BhcmFtKGVuYWJsZV9yY3VfbGF6eSwgYm9vbCwgMDQ0NCk7XG5AQCAtMzg5Niw4ICszOTgwLDEyIEBAIHZvaWQgcmN1X2JhcnJpZXIodm9pZClcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR1bnNpZ25lZCBsb25nIGdzZXE7XG4gXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcDtcbi1cdHVuc2lnbmVkIGxvbmcgcyA9IHJjdV9zZXFfc25hcChcdTAwMjZyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7XG4rXHR1bnNpZ25lZCBsb25nIHM7XG4rXG4rXHQvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAqL1xuK1x0cmN1X2RlZmVyX2ZsdXNoKCk7XG4gXG4rXHRzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnJjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTtcbiBcdHJjdV9iYXJyaWVyX3RyYWNlKFRQUyhcIkJlZ2luXCIpLCAtMSwgcyk7XG4gXG4gXHQvKiBUYWtlIG11dGV4IHRvIHNlcmlhbGl6ZSBjb25jdXJyZW50IHJjdV9iYXJyaWVyKCkgcmVxdWVzdHMuICovXG5AQCAtNDIzMSw2ICs0MzE5LDEwIEBAIHJjdV9ib290X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSlcbiBcdHJkcC1cdTAwM2VyY3Vfb25sX2dwX3N0YXRlID0gUkNVX0dQX0NMRUFORUQ7XG4gXHRyZHAtXHUwMDNlbGFzdF9zY2hlZF9jbG9jayA9IGppZmZpZXM7XG4gXHRyZHAtXHUwMDNlY3B1ID0gY3B1O1xuK1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKTtcbitcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jayk7XG4rXHQvKiBIYXJkIGlycV93b3JrIHNvIHRoZSByZS1pc3N1ZSBydW5zIHByb21wdGx5LiAqL1xuK1x0cmRwLVx1MDAzZWRlZmVyX3dvcmsgPSBJUlFfV09SS19JTklUX0hBUkQocmN1X2RlZmVyX2RyYWluKTtcbiBcdHJjdV9ib290X2luaXRfbm9jYl9wZXJjcHVfZGF0YShyZHApO1xuIH1cbiBcbkBAIC00NTI4LDYgKzQ2MjAsMTYgQEAgdm9pZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKGludCBjcHUpXG4gXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKFx1MDAyNnJjdV9kYXRhLCBjcHUpO1xuIFx0Ym9vbCBuZWVkd2FrZTtcbiBcbitcdC8qXG4rXHQgKiBDYWxsYmFja3MgdGhlIG91dGdvaW5nIENQVSBkZWZlcnJlZCBsYXRlIGluIHRoZSBvZmZsaW5lIHBhdGggKHBhc3QgdGhlXG4rXHQgKiBwb2ludCBpdHMgaXJxX3dvcmsgY2FuIHJ1bikgc2l0IG9uIC1cdTAwM2VkZWZlcl9oZWFkLCB3aGljaCB0aGUgLVx1MDAzZWNibGlzdFxuK1x0ICogbWlncmF0aW9uIGJlbG93IGRvZXMgbm90IGNvdmVyLiAgRHJhaW4gdGhlbSBoZXJlLCBiZWZvcmUgdGhlIGVhcmx5XG4rXHQgKiByZXR1cm5zOyB0aGUgcmUtaXNzdWUgbGFuZHMgb24gdGhpcyBDUFUuXG4rXHQgKi9cbitcdHJjdV9kZWZlcl9kcmFpbihcdTAwMjZyZHAtXHUwMDNlZGVmZXJfd29yayk7XG4rXHQvKiBMaWtld2lzZSBmb3IgdGhlIG91dGdvaW5nIENQVSdzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcy4gKi9cbitcdHNyY3Vfb2ZmbGluZV9kcmFpbihjcHUpO1xuK1xuIFx0aWYgKHJjdV9yZHBfaXNfb2ZmbG9hZGVkKHJkcCkpXG4gXHRcdHJldHVybjtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuaCBiL2tlcm5lbC9yY3UvdHJlZS5oXG5pbmRleCA5Yjg1ZWVhYTAwNzFhLi40MWMyYjIwZjBjODNlIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmhcbisrKyBiL2tlcm5lbC9yY3UvdHJlZS5oXG5AQCAtMjI5LDYgKzIyOSwxMSBAQCBzdHJ1Y3QgcmN1X2RhdGEge1xuIFx0c3RydWN0IHJjdV9oZWFkIGJhcnJpZXJfaGVhZDtcbiBcdGludCBleHBfd2F0Y2hpbmdfc25hcDtcdFx0LyogRG91YmxlLWNoZWNrIG5lZWQgZm9yIElQSS4gKi9cbiBcbitcdC8qIERlZmVycmFsIG9mIGFuIE5NSS9yZWVudHJhbnQgY2FsbF9yY3UoKTsgc2VlIF9fY2FsbF9yY3VfY29tbW9uKCkuICovXG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9oZWFkO1xuK1x0c3RydWN0IGlycV93b3JrIGRlZmVyX3dvcms7XG4rXHRyYXdfc3BpbmxvY2tfdCBkZWZlcl9sb2NrO1xuK1xuIFx0LyogNSkgQ2FsbGJhY2sgb2ZmbG9hZGluZy4gKi9cbiAjaWZkZWYgQ09ORklHX1JDVV9OT0NCX0NQVVxuIFx0c3RydWN0IHN3YWl0X3F1ZXVlX2hlYWQgbm9jYl9jYl93cTsgLyogRm9yIG5vY2Iga3RocmVhZHMgdG8gc2xlZXAgb24uICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNmVjZDkzYmUzMGY0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jXG5AQCAtMCwwICsxLDU4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBFeGVyY2lzZSByZS1lbnRyeSBpbnRvIGNhbGxfc3JjdSgpIGZyb20gQlBGOyBzZWUgcHJvZ3MvcmN1X3JlZW50cnkuYy4gKi9cbisjZGVmaW5lIF9HTlVfU09VUkNFXG4rI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcInJjdV9yZWVudHJ5LnNrZWwuaFwiXG4rXG4rc3RhdGljIGludCBzeXNfcGlkZmRfb3BlbihwaWRfdCBwaWQsIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRyZXR1cm4gc3lzY2FsbChfX05SX3BpZGZkX29wZW4sIHBpZCwgZmxhZ3MpO1xuK31cbitcbit2b2lkIHRlc3RfcmN1X3JlZW50cnkodm9pZClcbit7XG4rXHRzdHJ1Y3QgcmN1X3JlZW50cnkgKnNrZWw7XG4rXHRpbnQgZXJyLCBwaWRmZCA9IC0xLCBtYXBfZmQ7XG4rXHRfX3U2NCB2YWwgPSAxO1xuK1x0Y3B1X3NldF90IHNldDtcbitcbitcdHNrZWwgPSByY3VfcmVlbnRyeV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSByY3VfcmVlbnRyeV9fYXR0YWNoKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNrZWxfYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEtlZXAgdGhlIHJlLWVudHJ5IG9uIGEgc2luZ2xlIENQVS4gKi9cbitcdENQVV9aRVJPKFx1MDAyNnNldCk7XG4rXHRDUFVfU0VUKDAsIFx1MDAyNnNldCk7XG4rXHRpZiAoc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksIFx1MDAyNnNldCkpXG4rXHRcdHBlcnJvcihcInNjaGVkX3NldGFmZmluaXR5XCIpO1xuK1xuK1x0cGlkZmQgPSBzeXNfcGlkZmRfb3BlbihnZXRwaWQoKSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShwaWRmZCwgMCwgXCJwaWRmZF9vcGVuXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy50YXNrX3N0Zyk7XG4rXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgXHUwMDI2cGlkZmQsIFx1MDAyNnZhbCwgQlBGX05PRVhJU1QpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJvb3RfY3JlYXRlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEFybSB0aGUgaGFuZGxlciBmb3IgdGhpcyB0aHJlYWQsIHRoZW4gdHJpZ2dlciBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IHN5c2NhbGwoX19OUl9nZXR0aWQpO1xuK1x0ZXJyID0gYnBmX21hcF9kZWxldGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkKTtcbitcdEFTU0VSVF9PSyhlcnIsIFwiYm9vdF9kZWxldGVcIik7XG4rXG4rXHQvKiBPbmx5IFRyZWUgU1JDVSBlbnF1ZXVlcyB2aWEgcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKCk7IHNraXAgZWxzZXdoZXJlLiAqL1xuK1x0aWYgKCFza2VsLVx1MDAzZWJzcy1cdTAwM2VoaXRzKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVlbnRlcmVkLCAxLCBcInJlZW50cnlfZGVmZXJyZWRcIik7XG4rb3V0OlxuK1x0aWYgKHBpZGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UocGlkZmQpO1xuK1x0cmN1X3JlZW50cnlfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kOTJhOTI3ZmY1MWMwXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuY1xuQEAgLTAsMCArMSw0NSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBSZS1lbnRlciBjYWxsX3NyY3UoKSBmcm9tIGEgQlBGIHByb2dyYW0uICBmZW50cnkgb24gcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKClcbisgKiBmaXJlcyBpbnNpZGUgY2FsbF9zcmN1KCkncyBlbnF1ZXVlIChyZWFjaGVkIGZyb20gc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKVxuKyAqIHdpdGggdGhlIHNyY3VfZGF0YSAtXHUwMDNlbG9jayBoZWxkKTsgdGhlIGhhbmRsZXIgdGhlbiBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpXG4rICogLS0gaXRzZWxmIGNhbGxfc3JjdSgpIG9uIHJjdV90YXNrc190cmFjZV9zcmN1X3N0cnVjdCAtLSByZS1lbnRlcmluZyB0aGUgc2FtZVxuKyAqIHNyY3VfZGF0YSBvbiB0aGUgc2FtZSBDUFUuXG4rICovXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfVEFTS19TVE9SQUdFKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbit9IHRhc2tfc3RnIFNFQyhcIi5tYXBzXCIpO1xuK1xuK2ludCB0YXJnZXRfcGlkO1xuK2ludCBoaXRzO1xuK2ludCByZWVudGVyZWQ7XG4rXG4rU0VDKFwiZmVudHJ5L3JjdV9zZWdjYmxpc3RfZW5xdWV1ZVwiKVxuK2ludCBCUEZfUFJPRyhyZWVudGVyKVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyO1xuK1xuK1x0aWYgKHJlZW50ZXJlZCB8fCAhdGFyZ2V0X3BpZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRjdXIgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdGlmICghY3VyIHx8IGN1ci1cdTAwM2VwaWQgIT0gdGFyZ2V0X3BpZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBSZS1lbnRlciB2aWEgYSB0YXNrLXN0b3JhZ2UgZGVsZXRlLCB3aGljaCBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqL1xuK1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2aGl0cywgMSk7XG4rXHRicGZfdGFza19zdG9yYWdlX2dldChcdTAwMjZ0YXNrX3N0ZywgY3VyLCAwLCBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpO1xuK1x0YnBmX3Rhc2tfc3RvcmFnZV9kZWxldGUoXHUwMDI2dGFza19zdGcsIGN1cik7XG4rXG4rXHRyZWVudGVyZWQgPSAxO1xuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MzMuMDQ1MjEwMjg2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc2NzI5MjI2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSQ1UgRGVmZXJyYWwgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFJDVSBwYXRjaC4gSXQncyBtYWtpbmcgY2hhbmdlcyB0byBTUkNVIGFuZCB0aGUgZ2VuZXJhbCBSQ1UgZGVmZXJyYWwgbWVjaGFuaXNtcywgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgQ09ORklHX1JDVV9ERUZFUmAuIFRoaXMgbmV3IGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBOTUksIEtQUk9CRVMsIHRoZSBmdW5jdGlvbiB0cmFjZXIsIG9yIHRyYWNlcG9pbnRzLiBTZWVtcyBsaWtlIHRoZXkncmUgYWRkaW5nIGRlZmVycmFsIGZvciBgY2FsbF9yY3UoKWAgYW5kIGBjYWxsX3NyY3UoKWAgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgdG8gYXZvaWQgY29ycnVwdGluZyBjYWxsYmFjayBsaXN0cyBkdXJpbmcgbWFuaXB1bGF0aW9uLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIGdvb2QgY2h1bmsgb2YgUkNVIGNvZGUg4oCTIGBzcmN1dGlueS5jYCwgYHNyY3V0cmVlLmNgLCBgdGlueS5jYCwgYHRyZWUuY2AsIGFuZCBldmVuIHRoZSB0b3J0dXJlIHRlc3QuIFBsdXMsIHRoZXkndmUgYWRkZWQgYSBuZXcgQlBGIHNlbGZ0ZXN0LCBgcmN1X3JlZW50cnkuY2AsIHdoaWNoIGlzIGEgZ29vZCBzaWduIG9mIHRob3JvdWdobmVzcy5cblxuQWxyaWdodCwgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgY2FuIHNlZSBgQ09ORklHX1JDVV9ERUZFUmAgaXMgYSBjb3JlIGtlcm5lbCBtb2RpZmljYXRpb24uIFByZXR0eSByZWFjaGFibGUgdG9vLCBjb25zaWRlcmluZyBob3cgaGVhdmlseSB1c2VkIGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgIGFyZS4gVGhlIGRlZmVycmFsIGxvZ2ljIGl0c2VsZiBraWNrcyBpbiB3aGVuIGBzaG91bGRfcmN1X2RlZmVyKClgIGlzIHRydWU7IGluIG90aGVyIHdvcmRzLCB3aGVuIGBpcnFzX2Rpc2FibGVkKClgIGFuZCBgcmN1X3NjaGVkdWxlcl9hY3RpdmUgIT0gUkNVX1NDSEVEVUxFUl9JTkFDVElWRWAuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEkndmUgZ290IGEgcHJlbGltaW5hcnkgbGlzdDogYHNyY3VfZGVmZXJfZHJhaW5gLCBgcmN1X2RlZmVyX2RyYWluYCwgYGNhbGxfc3JjdWAsIGBjYWxsX3JjdWAsIGBzcmN1X2JhcnJpZXJgLCBgcmN1X2JhcnJpZXJgLCBgc3JjdV9vZmZsaW5lX2RyYWluYCwgYW5kIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYC4gQnV0IHdhaXQsIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIHN1cGVyIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBnZXQgYSBtb3JlIGJhbGFuY2VkIHRlc3QgZGlzdHJpYnV0aW9uLiBUaGF0IHJ1bGVzIG91dCBgY2FsbF9yY3VgIGFuZCBgY2FsbF9zcmN1YCwgZXZlbiB0aG91Z2ggdGhleSBhcmUgdGVtcHRpbmcgdGFyZ2V0cy4gSSdsbCBuZWVkIHRvIHJlLWV2YWx1YXRlIHdoYXQgaXMgYWN0dWFsbHkgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldC5cblxuTGV0J3MgbG9vayBhdCBgc3JjdV9kZWZlcl9kcmFpbmAgYW5kIGByY3VfZGVmZXJfZHJhaW5gLCBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSdyZSBzdGF0aWMgb3IgZXhwb3J0ZWQuIFR1cm5zIG91dCBgc3JjdV9kZWZlcl9kcmFpbmAgaXMgZXhwb3J0ZWQgaW4gYHNyY3V0aW55LmNgIGJ1dCBzdGF0aWMgaW4gYHNyY3V0cmVlLmNgLCB3aGlsZSBgcmN1X2RlZmVyX2RyYWluYCBpcyBzdGF0aWMgaW4gYm90aCBgdGlueS5jYCBhbmQgYHRyZWUuY2AuIEhtbSwgYSBzbGlnaHQgaW5jb25zaXN0ZW5jeS5cblxuTm93LCB3aGF0IGFib3V0IHRoZSBvdGhlciBmdW5jdGlvbnMgb24gbXkgbGlzdD8gTGV0J3MgY2hlY2sgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgYW5kIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYC4gTmVpdGhlciBvZiB0aGVzZSBpcyBzdGF0aWMuIFRoaXMgbG9va3MgcHJvbWlzaW5nLiBJIHdpbGwgY29uZmlybSB0aGF0IGBzcmN1X29mZmxpbmVfZHJhaW5gIGFuZCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgYXJlIHRoZSByaWdodCB0YXJnZXQgZnVuY3Rpb25zIHdpdGggZ3JlcHBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMzMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo0Mi44MTI1MDU3ODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNDI1NDkwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpIHNyY3Vfb2ZmbGluZV9kcmFpblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcmN1L3JjdS5oPTU4Mj1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JjdV9kZWZlcih2b2lkKVxcbi0tXFxua2VybmVsL3JjdS9yY3UuaC01OTAtLyogRHJhaW4gYW4gb3V0Z29pbmcgQ1BVJ3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovXFxua2VybmVsL3JjdS9yY3UuaDo1OTE6dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSk7XFxua2VybmVsL3JjdS9yY3UuaC01OTItXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTUxNT1zdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTU0Mi0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTU0Mzp2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTQ0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDUuMzI2NzY2Mjk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NDAyMDU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgbWlncmF0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBsYXJnZXIgUkNVIHRyZWUgY29udGV4dC4gVGhlIG5hbWUgYWxvbmUgdGVsbHMgbWUgaXQncyBsaWtlbHkgZGVhbGluZyB3aXRoIGNhbGxiYWNrIG1pZ3JhdGlvbiBkdXJpbmcgUkNVIHRyZWUgbW9kaWZpY2F0aW9ucywgd2hpY2ggaXMgYSBjcml0aWNhbCBhcmVhIGZvciBlbnN1cmluZyBkYXRhIGNvbnNpc3RlbmN5IGFuZCBhdm9pZGluZyByYWNlcywgZXNwZWNpYWxseSB1bmRlciBoZWF2eSBsb2FkLiBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlIGltcGxlbWVudGF0aW9uIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIFJDVSBndWFyYW50ZWVzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBob3cgZ3JhY2UgcGVyaW9kcyBhcmUgbWFuYWdlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjYWxsYmFja3MgYmVpbmcgbW92ZWQuIEFyZSB3ZSB0YWtpbmcgaW50byBhY2NvdW50IHBvdGVudGlhbCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgdG8gdGhlIHRyZWUgd2hpbGUgbWlncmF0aW5nPyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBsb2NrcyBvciBhdG9taWMgb3BlcmF0aW9ucyBpbnZvbHZlZCBhbmQgc2VlIGhvdyB0aGV5IGludGVycGxheSB3aXRoIHRoZSBncmFjZSBwZXJpb2QgbG9naWMgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGluZGVlZCBwcmV2ZW50aW5nIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBwcmVzZXJ2aW5nIHRoZSBzZW1hbnRpY3Mgb2YgUkNVJ3MgcXVpZXNjZW50IHN0YXRlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlIGNhbGxiYWNrcyB0aGVtc2VsdmVzIGFyZSBiZWluZyBoYW5kbGVkIGF0b21pY2FsbHksIGFuZCBpZiBub3QsIGhvdyB0aGUgc3lzdGVtIGlzIG1hbmFnaW5nIHRoYXQgY29tcGxleGl0eS4gSSdsbCBmb2N1cyBvbiBwb3RlbnRpYWwgZWRnZSBjYXNlcywgc3VjaCBhcyByZWN1cnNpdmUgY2FsbGJhY2sgaW52b2NhdGlvbiBvciB0aGUgaGFuZGxpbmcgb2YgZXhwZWRpdGVkIGdyYWNlIHBlcmlvZHMgZHVyaW5nIGEgbWlncmF0aW9uLiBJJ20gYWxzbyBnb2luZyB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbmVmZmljaWVuY2llcyBoZXJlLCBzdWNoIGFzIHVubmVjZXNzYXJ5IGxvY2tpbmcgb3IgdW5uZWNlc3NhcnkgYmFycmllcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODk5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDkuMDEwNzg4ODE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTQyOTgzMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcmN1dHJlZS5oPTExMD1pbnQgcmN1dHJlZV9vZmZsaW5lX2NwdSh1bnNpZ25lZCBpbnQgY3B1KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oLTExNi1cXG5pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaDoxMTc6dm9pZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKGludCBjcHUpO1xcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oLTExOC1cXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTQ1NjA9dm9pZCByY3V0cmVlX3JlcG9ydF9jcHVfZGVhZCh2b2lkKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDYxNC0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0NjE1OnZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo1MS41MjUwOTI3ODdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE2NDQ0MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipCYXJyaWVycywgQmFycmllcnMgRXZlcnl3aGVyZSEqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGJhcnJpZXJzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBhbmQgU1JDVSAoU2xlZXBhYmxlIFJDVSkgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIFdoZW4gSSdtIHdvcmtpbmcgd2l0aCB0aGVzZSwgdGhlIHF1ZXN0aW9uIG9mIHN5bmNocm9uaXphdGlvbiBpcyBhbHdheXMgcHJlc2VudCwgYnV0IHRoZSBkZXRhaWxzIGNoYW5nZSwgZGVwZW5kaW5nIG9uIHdoaWNoIFJDVSBmbGF2b3IgSSdtIGRlYWxpbmcgd2l0aC5cblxuU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIHNvbGlkaWZ5IHRoZSBjb25uZWN0aW9uIHdpdGggYHJjdV9iYXJyaWVyYCBhbmQgYHNyY3VfYmFycmllcmAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHRoYXQgdXBkYXRlcyBwZXJmb3JtZWQgd2l0aGluIGFuIFJDVSBjcml0aWNhbCBzZWN0aW9uIGJlY29tZSB2aXNpYmxlIHRvIHJlYWRlcnMgKmFmdGVyKiB0aGUgZ3JhY2UgcGVyaW9kLiBVbmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoZWlyIGltcGxlbWVudGF0aW9ucywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1vZGVsIChsaWtlLCBjb25zaWRlcmluZyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyksIGlzIGtleS5cblxuTXkgZm9jdXMgaXMgdG8gZW5zdXJlIHRoYXQgSSd2ZSBhY2NvdW50ZWQgZm9yIGV2ZXJ5IHBvc3NpYmxlIHNjZW5hcmlvIHdoZXJlIGRhdGEgcmFjZXMgYXJlIGF2b2lkZWQgb3IgaGFuZGxlZCBjb3JyZWN0bHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHdoZW4gdXNpbmcgdGhlc2UgcGFydGljdWxhciBiYXJyaWVyIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0MDgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo1NC45NDE1MzkwODRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MjYwNzkzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpIHJjdV9iYXJyaWVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcmN1cGRhdGUuaD01MT12b2lkIGNhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYyk7XFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjUyOnZvaWQgcmN1X2JhcnJpZXJfdGFza3Modm9pZCk7XFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTUzLXZvaWQgc3luY2hyb25pemVfcmN1KHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmg9MzY9dm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oLTM3LVxcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oOjM4OnZvaWQgcmN1X2JhcnJpZXIodm9pZCk7XFxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmgtMzktdm9pZCByY3VfbW9tZW50YXJ5X2Vxcyh2b2lkKTtcXG4tLVxcbmtlcm5lbC9yY3UvdGFza3MuaD0xMjIyPUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV90YXNrcyk7XFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIyOS0gKi9cXG5rZXJuZWwvcmN1L3Rhc2tzLmg6MTIzMDp2b2lkIHJjdV9iYXJyaWVyX3Rhc2tzKHZvaWQpXFxua2VybmVsL3JjdS90YXNrcy5oLTEyMzEte1xcbi0tXFxua2VybmVsL3JjdS90aW55LmM9MTEzPXN0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxcbi0tXFxua2VybmVsL3JjdS90aW55LmMtMTE5LVxcbmtlcm5lbC9yY3UvdGlueS5jOjEyMDp2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXFxua2VybmVsL3JjdS90aW55LmMtMTIxLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTM5NTE9c3RhdGljIHZvaWQgcmN1X2JhcnJpZXJfaGFuZGxlcih2b2lkICpjcHVfaW4pXFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0zOTc2LSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjM5Nzc6dm9pZCByY3VfYmFycmllcih2b2lkKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM5Nzgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo1Ny4zOTQxNTM0ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg3Mzk3MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlNSQ1UgQmFycmllciBNdXNpbmdzKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgc3JjdV9iYXJyaWVyYC4uLiB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uIHdpdGggdGhhdCBiZWFzdD8gV2UndmUgZ290IG91ciBncmFjZSBwZXJpb2QgbG9naWMsIHRoZSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMsIGFuZCB0aGVuIHRoaXMgYmFycmllciBmdW5jdGlvbi4gSSdtIHRyeWluZyB0byBtZW50YWxseSBtYXAgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIHVzYWdlLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGFuZCB3aGF0IGd1YXJhbnRlZXMgaXQgKnRydWx5KiBwcm92aWRlcy5cblxuSSdtIHBpY3R1cmluZyBob3cgYHNyY3VfYmFycmllcmAgZW5zdXJlcyB0aGF0IGFsbCBleGlzdGluZyByZWFkZXJzIGhhdmUgZXhpdGVkIHRoZWlyIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBiZWZvcmUgdGhlIGZ1bmN0aW9uIHJldHVybnMuIFRoYXQgaW1wbGllcyBhIHN5bmNocm9uaXphdGlvbiBwb2ludCwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSB0aGUgY3J1eC4gSXMgaXQgYSBmdWxsIG1lbW9yeSBiYXJyaWVyPyBJcyB0aGVyZSBhbnkgc3BlY2lmaWMgb3JkZXJpbmcgZW5mb3JjZWQ/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgQ1BVIGNhY2hlIGNvaGVyZW5jeSBhdCBhbGwsIG9yIGlzIHRoYXQgaGFuZGxlZCBpbXBsaWNpdGx5IGJ5IHRoZSBSQ1UgaW5mcmFzdHJ1Y3R1cmUgaXRzZWxmP1xuXG5JJ20gZm9jdXNpbmcgb24gdGhlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMsIHRoaW5raW5nIGFib3V0IGhvdyBpdCBwcmV2ZW50cyBkYXRhIHJhY2VzIGJldHdlZW4gcmVhZGVycyBhbmQgd3JpdGVycy4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSdzIGFueSByb29tIGZvciBvcHRpbWl6YXRpb24gdGhlcmUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIG92ZXJhbGwgUkNVIGludGVncml0eS4gQXJlIHRoZXJlIHBvdGVudGlhbCBwaXRmYWxscyBpbiBob3cgaXQgaGFuZGxlcyBuZXN0ZWQgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG9yIHBvdGVudGlhbCBmb3IgYW55IGVkZ2UgY2FzZSBzY2VuYXJpb3MgdGhhdCBjb3VsZCBzdGlsbCBsZWFkIHRvIGlzc3Vlcz8gSSdtIGFzc3VtaW5nIHRoYXQgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIGhhdmUgdGhvdWdodCBvZiB0aGVzZSB0aGluZ3MsIGJ1dCBJIGxpa2UgdG8gcmV2aWV3IHRoZSBjb2RlIHRvIGJlIHN1cmUsIGluIG15IG93biBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTExMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MDAuOTgxNTUzNjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzEzMjgzMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKSBzcmN1X2JhcnJpZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zcmN1dGlueS5oPTEzNT1zdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmgtMTM5LVxcbmluY2x1ZGUvbGludXgvc3JjdXRpbnkuaDoxNDA6dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xcbmluY2x1ZGUvbGludXgvc3JjdXRpbnkuaC0xNDEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmg9MjQyPXZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xcbmluY2x1ZGUvbGludXgvc3JjdXRyZWUuaDoyNDM6dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xcbmluY2x1ZGUvbGludXgvc3JjdXRyZWUuaC0yNDQtdm9pZCBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jPTI5Nz1FWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yOTktLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcywgdGhlbiB3YWl0IGZvciBhbGwgaW4tZmxpZ2h0IG9uZXMuICovXFxua2VybmVsL3JjdS9zcmN1dGlueS5jOjMwMDp2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMzAxLXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xNzgyPXN0YXRpYyB2b2lkIHNyY3VfYmFycmllcl9vbmVfY3B1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3Qgc3JjdV9kYXRhICpzZHApXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTc5OS0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTgwMDp2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTgwMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjAzLjMxMjg5MDgyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE5NjYxMzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgYSBOZXcgUkNVIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBDT05GSUdfUkNVX0RFRkVSYC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBzb3VyY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBuZXcgZmxhZyAqbWVhbnMqIGZvciB0aGUgUkNVIGltcGxlbWVudGF0aW9uLiBMZXQncyBnbyBzdHJhaWdodCB0byB0aGUgYGtlcm5lbC9yY3UvS2NvbmZpZ2AgZmlsZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgaGVscCB0ZXh0LCBhbmQgd2hlcmUgdGhpcyBvcHRpb24gZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgUkNVIGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gSXMgdGhpcyByZWxhdGVkIHRvIGdyYWNlIHBlcmlvZHMsIGV4cGVkaXRlZCBSQ1UsIG9yIGEgc3BlY2lmaWMgZmxhdm9yIG9mIGRlZmVycmVkIHJlY2xhbWF0aW9uPyBJcyBpdCBhIGNvbXBpbGUtdGltZSBvcHRpbWl6YXRpb24sIG9yIHNvbWV0aGluZyB0aGF0IGFsdGVycyBydW50aW1lIGJlaGF2aW9yIHNpZ25pZmljYW50bHk/IFRoZSBLY29uZmlnIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGJ1aWxkaW5nIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgbmV3IHBpZWNlIG9mIHRoZSBSQ1UgcHV6emxlLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIGl0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBvZiB0aGUgUkNVIHN1YnN5c3RlbS4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg4NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjA2LjkzMjU1NDU0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NDE1Njc3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkNVX0RFRkVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9yY3UvS2NvbmZpZz0xNzU9Y29uZmlnIFJDVV9ORUVEX1NFR0NCTElTVFxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnLTE3OS0jIGNhbGxfc3JjdSgpIGNhbiBiZSBpbnZva2VkIHdoaWxlIGEgY2FsbGJhY2stbGlzdCBvcGVyYXRpb24gaXMgaW4gZmxpZ2h0Llxcbmtlcm5lbC9yY3UvS2NvbmZpZzoxODA6Y29uZmlnIFJDVV9ERUZFUlxcbmtlcm5lbC9yY3UvS2NvbmZpZy0xODEtXFx0ZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MDguMzc2NzE1OTg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzOTQ1OTY0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUkNVX0RFRkVSIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gYENPTkZJR19SQ1VfREVGRVJgIGlzIGF1dG9tYXRpY2FsbHkgc2V0IGJhc2VkIG9uIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgaXQncyBkZWZpbmVkIGFzIGEgYm9vbGVhbiBleHByZXNzaW9uOiBgZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNgLiBSaWdodCwgc28gdGhpcyBpc24ndCBzb21ldGhpbmcgSSBjYW4gZXhwbGljaXRseSBlbmFibGUgaW4gYSB1c2VyLWZhY2luZyBgLmNvbmZpZ2AgZmlsZSBkaXJlY3RseSwgYXMgaXQgaGFzIG5vIHByb21wdC4gSXQncyBkZXRlcm1pbmVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBgSEFWRV9OTUlgLCBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBvciBgVFJBQ0VQT0lOVFNgLiBcblxuU2luY2UgYEhBVkVfTk1JYCBpcyBwcmV0dHkgY29tbW9uIG9uIHg4NiwganVzdCBsaXN0aW5nIGBSQ1VfREVGRVJgIGlzIHJlZHVuZGFudC4gSSBjYW4gZW5hYmxlIGBLUFJPQkVTYCwgYEZVTkNUSU9OX1RSQUNFUmAsIG9yIGBUUkFDRVBPSU5UU2AgdG8gZW5zdXJlIGBSQ1VfREVGRVJgIGdldHMgZW5hYmxlZC5cblxuV2FpdCBhIHNlY29uZOKApiB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBsaXN0IGl0ZW1zICp3aXRob3V0KiB0aGUgYENPTkZJR19gIHByZWZpeCBpbiB0aGUgb3V0cHV0IGFycmF5LiBJZiBpdCdzIGBkZWZfYm9vbCBIQVZFX05NSSB8fCBLUFJPQkVTIHx8IEZVTkNUSU9OX1RSQUNFUiB8fCBUUkFDRVBPSU5UU2AsIEknbSBnb2luZyB0byBsaXN0IGBLUFJPQkVTYCBvciBgRlVOQ1RJT05fVFJBQ0VSYCB0byBiZSBzYWZlIGFuZCBhdm9pZCBpc3N1ZXMgaWYgYEhBVkVfTk1JYCBpcyBhbHJlYWR5IGVuYWJsZWQuIFRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSByZXF1aXJlZCBvdXRwdXQuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgYHJjdV90b3J0dXJlX25taV9pbml0YCB3aGljaCBpcyBpbiBga2VybmVsL3JjdS9yY3V0b3J0dXJlLmNgIHRvIHNlZSBpZiBpdCBicmluZ3MgaW4gYENPTkZJR19QRVJGX0VWRU5UU2AuIE9rYXksIGl0IHVzZXMgYENPTkZJR19QRVJGX0VWRU5UU2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjY5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjEzLjc3MTMxNTgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI4NTE2NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJjdV90b3J0dXJlX25taV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9yY3UvcmN1dG9ydHVyZS5jPTI2OTY9c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4tLVxcbmtlcm5lbC9yY3UvcmN1dG9ydHVyZS5jLTI3MDctXFxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmM6MjcwODpzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKVxcbmtlcm5lbC9yY3UvcmN1dG9ydHVyZS5jLTI3MDkte1xcbi0tXFxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmM9MjcyOT1zdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2xlYW51cCh2b2lkKVxcbi0tXFxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmMtMjc0NC0jZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXFxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmM6Mjc0NTpzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKSB7IH1cXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYy0yNzQ2LXN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpIHsgfVxcbi0tXFxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmM9NDc0ND1yY3VfdG9ydHVyZV9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYy00ODkyLVxcdC8qIEFybSB0aGUgcGVyLUNQVSBwZXJmIGNvdW50ZXJzIHRoYXQgZHJpdmUgLVxcdTAwM2VjYWxsKCkgZnJvbSBOTUkuICovXFxua2VybmVsL3JjdS9yY3V0b3J0dXJlLmM6NDg5MzpcXHRyY3VfdG9ydHVyZV9ubWlfaW5pdCgpO1xcbmtlcm5lbC9yY3UvcmN1dG9ydHVyZS5jLTQ4OTQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yZWFscmVhZGVyczsgaSsrKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjE1LjI5OTgzOTIxNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc0MTUyNDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFJDVSBUb3J0dXJlIFRlc3RpbmcgYW5kIERlZmVycmFsIExvZ2ljKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSB0ZXN0IHRoZSBOb24tTWFza2FibGUgSW50ZXJydXB0IChOTUkpIHBhdGggaW4gYHJjdXRvcnR1cmVgLiBJdCdzIGNsZWFyIHRoYXQgSSBuZWVkIGBQRVJGX0VWRU5UU2AgZW5hYmxlZCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBgUkNVX1RPUlRVUkVfVEVTVGAgY29uZmlndXJhdGlvbiBvcHRpb24uIEhvd2V2ZXIsIGByY3V0b3J0dXJlYCBpdHNlbGYgaXMgYSB0ZXN0IG1vZHVsZTsgSSBkb24ndCBuZWNlc3NhcmlseSBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgKml0KiBkaXJlY3RseS4gVGhlIG1vcmUgdmFsdWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLCBJIHRoaW5rLCBpcyB0aGUgY29yZSBSQ1UgZGVmZXJyYWwgbG9naWMuIFRoYXTigJlzIHdoZXJlIHRoZSByZWFsIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd2lsbCBiZS5cblxuVGhlIGRlZmVycmFsIGxvZ2ljIGlzLCBvZiBjb3Vyc2UsIGNlbnRyYWwgdG8gYGNhbGxfcmN1YCBhbmQgYGNhbGxfc3JjdWAsIGFuZCB0aG9zZSBhcmUgY2FsbGVkICpldmVyeXdoZXJlKi4gVGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5ICpoYW5kbGUqIHRoZSBkZWZlcnJlZCBjYWxsYmFja3MgYXJlIHRoaW5ncyBsaWtlOiBgc3JjdV9kZWZlcl9kcmFpbmAsIGByY3VfZGVmZXJfZHJhaW5gLCBgc3JjdV9vZmZsaW5lX2RyYWluYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBgcmN1X2JhcnJpZXJgLCBhbmQgYHNyY3VfYmFycmllcmAuXG5cbldhaXQgYSBtaW51dGUuLi4gSSdtIG5vdGljaW5nIHNvbWV0aGluZy4gYHJjdV9kZWZlcl9kcmFpbmAgYW5kIGBzcmN1X2RlZmVyX2RyYWluYCBhcmUgKnN0YXRpYyogd2l0aGluIGB0cmVlLmNgIGFuZCBgc3JjdXRyZWUuY2AuIFRoYXTigJlzIHNpZ25pZmljYW50LiBIbW0sICpzcmN1X2RlZmVyX2RyYWluKiBpcyBleHBvcnRlZCBmcm9tIGBzcmN1dGlueS5jYCwgYnV0IGl0J3Mgc3RhdGljIGluIGBzcmN1dHJlZS5jYC4gIFNpbmNlIGBzcmN1dHJlZS5jYCBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgU01QIHN5c3RlbXMsIGl0IG1lYW5zIGBzcmN1X2RlZmVyX2RyYWluYCBpcyBzdGF0aWMgaW4gdGhlIG1vc3QgY29tbW9uIGNhc2UuIFRoYXQgaW1wbGllcyBsaW1pdGVkIGFjY2VzcyBmb3IgZnV6emluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGBzcmN1X29mZmxpbmVfZHJhaW5gIGlzIGV4cG9ydGVkIGFzIHdlbGwuIFRoaXMgbWlnaHQgaW5mbHVlbmNlIG15IGZ1enppbmcgc3RyYXRlZ3kgYW5kIHRlc3QgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMyNCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNToyMC44NzM5OTM1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNDAwOTQxMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qc3JjdV9vZmZsaW5lX2RyYWluXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNToyMi43OTgwMDk1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ3MDgzMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBTeW5jaHJvbml6YXRpb24gUHJpbWl0aXZlcyoqXG5cbkFscmlnaHQsIHNvIHRoZSB0aGluZyBpc24ndCAqc3RhdGljYWxseSogZGVmaW5lZCwgYnV0IGl0J3Mgbm90IHNpbXBseSBhbiBpbnRlcm5hbCwgc3RhdGljIGNvbnN0cnVjdCBlaXRoZXIuIEludHJpZ3VpbmcuIExldCdzIGRpZyBkZWVwZXI6IHNwZWNpZmljYWxseSwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGlzbid0IHN0YXRpYywgbWVhbmluZyBpdCdzIHBvdGVudGlhbGx5IHZpc2libGUgYmV5b25kIGl0cyBpbW1lZGlhdGUgc2NvcGUuIFRoYXQncyBhIGtleSBkZXRhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBOb3csIGF0IGxlYXN0IEkgKmRvKiBrbm93IHRoYXQgYHJjdV9iYXJyaWVyYCBhbmQgYHNyY3VfYmFycmllcmAgYXJlLCBpbiBmYWN0LCBleHBvcnRlZC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdCwgcHJvdmlkaW5nIHNvbWUgY29uY3JldGUgcG9pbnRzIG9mIHJlZmVyZW5jZS5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHZlcmlmeSB0aGUgZXhwb3J0IHN0YXR1cyBvZiBgcmN1X2JhcnJpZXJgIGFuZCBgc3JjdV9iYXJyaWVyYCBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgYmVpbmcgdXNlZC4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZWlyIGV4cG9ydCBzdGF0dXMgYW5kIHdoYXQgdGhhdCBpbXBsaWVzIGluIHRlcm1zIG9mIGtlcm5lbCBkZXNpZ24gYW5kIGRlcGVuZGVuY3kuIEtub3dpbmcgdGhlaXIgaW50ZXJmYWNlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5J3JlIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDM1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MjYuMTQ1MDk1OTE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk5NDE0Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnJjdV9iYXJyaWVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0zMDA9dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMzA1LX1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MzA2OkVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7XFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTMwNy1cXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xODAwPXZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE4NDItfVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxODQzOkVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7XFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE4NDQtXFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTIzMD12b2lkIHJjdV9iYXJyaWVyX3Rhc2tzKHZvaWQpXFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIzMy19XFxua2VybmVsL3JjdS90YXNrcy5oOjEyMzQ6RVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXJfdGFza3MpO1xcbmtlcm5lbC9yY3UvdGFza3MuaC0xMjM1LVxcbi0tXFxua2VybmVsL3JjdS90aW55LmM9MTIwPXZvaWQgcmN1X2JhcnJpZXIodm9pZClcXG4tLVxcbmtlcm5lbC9yY3UvdGlueS5jLTEyNS19XFxua2VybmVsL3JjdS90aW55LmM6MTI2OkVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpO1xcbmtlcm5lbC9yY3UvdGlueS5jLTEyNy1cXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTM5Nzc9dm9pZCByY3VfYmFycmllcih2b2lkKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDA3NC19XFxua2VybmVsL3JjdS90cmVlLmM6NDA3NTpFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcik7XFxua2VybmVsL3JjdS90cmVlLmMtNDA3Ni1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTM0Mz12b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMzQ3LX1cXG5tbS9zbGFiX2NvbW1vbi5jOjEzNDg6RVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTEzNDktXFxubW0vc2xhYl9jb21tb24uYz0xMzUwPXZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMzU0LX1cXG5tbS9zbGFiX2NvbW1vbi5jOjEzNTU6RVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTEzNTYtXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTIxNzc9dm9pZCBrdmZyZWVfcmN1X2JhcnJpZXIodm9pZClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjE4MS19XFxubW0vc2xhYl9jb21tb24uYzoyMTgyOkVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcik7XFxubW0vc2xhYl9jb21tb24uYy0yMTgzLVxcbi0tXFxubW0vc2xhYl9jb21tb24uYz0yMTkxPXZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0yMjA0LX1cXG5tbS9zbGFiX2NvbW1vbi5jOjIyMDU6RVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTIyMDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjI4LjE0NDUzODU2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjczNzgxNDE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIHRhcmdldCBzb21lIFJDVSBkZWZlcnJhbCBsb2dpYywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCBkZWZlcnJlZCBSQ1UgZmx1c2hpbmcuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgcmN1X2JhcnJpZXJgIGFuZCBgc3JjdV9iYXJyaWVyYCBzZWVtZWQgbGlrZSBnb29kIHRhcmdldHMgc2luY2UgdGhleSdyZSBleHBvcnRlZCBhbmQgSSBzYXcgdGhleSB3ZXJlIG1vZGlmaWVkIHRvIGNhbGwgYHJjdV9kZWZlcl9mbHVzaCgpYCBhbmQgYHNyY3VfZGVmZXJfZmx1c2goKWAuIFdhaXQsIHRoYXQncyBub3QgcmlnaHQsIHRob3NlIGBfZGVmZXJfZmx1c2hgIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBzbyB0aGF0IGFwcHJvYWNoIHdvbid0IHdvcmsuXG5cbkJ1dCwgSSBzZWUgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIENQVSBob3RwbHVnIGFuZCB0aGF0J3MgaW50ZXJlc3RpbmcuIEFsc28sIGBzcmN1X29mZmxpbmVfZHJhaW5gIGlzIGFsc28gY2FsbGVkIGR1cmluZyBDUFUgaG90cGx1Zywgc28gdGhvc2UgdHdvIGFyZSBwb3RlbnRpYWwgdGFyZ2V0cy5cblxuSSByZW1lbWJlciB0aGUgYHJjdV9yZWVudHJ5LmNgIHNlbGZ0ZXN0LCBhbmQgaXQgdXNlcyBCUEYgdG8gdHJpZ2dlciBgY2FsbF9yY3VfdGFza3NfdHJhY2VgIGZyb20gYHJjdV9zZWdjYmxpc3RfZW5xdWV1ZWAgdmlhIGBicGZfdGFza19zdG9yYWdlX2RlbGV0ZWAuIFRoYXQgc3VnZ2VzdHMgdGhhdCBCUEYgY2FuIHRyaWdnZXIgdGhpcyBkZWZlcnJhbCBsb2dpYywgd2hpY2ggbWVhbnMgZnV6emluZyBCUEYgc3lzY2FsbHMgYW5kIG1hcHMgaXMgYSBnb29kIGF2ZW51ZSB0byBleHBsb3JlLiBUaGUgZ29vZCB0aGluZyBpcyB0aGF0IEkgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IEJQRiBmdW5jdGlvbnMsIGp1c3QgZm9jdXMgb24gdGhlIFJDVSBmdW5jdGlvbnMuXG5cblNvLCBoZXJlJ3MgdGhlIGNvcmUgc2V0IG9mIHN5bWJvbHMgSSdtIGZvY3VzaW5nIG9uOiBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAuXG5cbkhvd2V2ZXIsIG5vdyBJIHJlbWVtYmVyIHRoYXQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGFuZCBgc3JjdV9vZmZsaW5lX2RyYWluYCBhcmVuJ3Qgc3lzY2FsbHM7IHRoZXkncmUgaW50ZXJuYWwga2VybmVsIGZ1bmN0aW9ucy4gU3l6a2FsbGVyIGNhbid0IGRpcmVjdGx5IGNhbGwgdGhlbS4gSG93ZXZlciwgaXQgKmNhbiogdHJpZ2dlciBDUFUgaG90cGx1Zywgd2hpY2gsIGluIHR1cm4sIGNhbGxzIHRoZXNlIGZ1bmN0aW9ucy5cblxuU3l6a2FsbGVyICpjYW4qIGRpcmVjdGx5IGNhbGwgYHJjdV9iYXJyaWVyYCBhbmQgYHNyY3VfYmFycmllcmAgdmlhIHZhcmlvdXMgc3lzY2FsbHMgb3IgaWYgd2UgYWRkIHRoZW0gZGlyZWN0bHkgdG8gc3l6bGFuZywgYnV0IHRoZXkncmUgcHJvYmFibHkgYWxyZWFkeSByZWFjaGFibGUgdGhyb3VnaCBtYW55IG90aGVyIGV4aXN0aW5nIHBhdGhzLlxuXG5UaGUga2V5IGluc2lnaHQgaXMgdGhpczogZXZlbiBpZiBJIGp1c3QgbGlzdCBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgYXMgdGFyZ2V0cywgU3l6a2FsbGVyJ3MgY292ZXJhZ2UgZ3VpZGFuY2Ugd2lsbCB0aGVuIHRyeSB0byByZWFjaCB0aGVtLiBUaGF0IG1pZ2h0IGJlIHRoZSBzaW1wbGVzdCBhcHByb2FjaC5cblxuSSBuZWVkIHRvIGNoZWNrIGhvdyB0byByZWFjaCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTYzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjUwLjg4MjM1NTU2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNDc1MzM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9NZW1vcnktT3JkZXJpbmcvVHJlZS1SQ1UtTWVtb3J5LU9yZGVyaW5nLnJzdD0yOTQ9ZmluYWwgY29kZSBwYXRoIG9uIHRoZSByaWdodCBpcyB0YWtlbiBvbmx5IGluIGtlcm5lbHMgYnVpbHQgd2l0aFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL01lbW9yeS1PcmRlcmluZy9UcmVlLVJDVS1NZW1vcnktT3JkZXJpbmcucnN0LTI5Ni1gYHJjdV9hZHZhbmNlX2NicygpYGAsIGBgcmN1X21pZ3JhdGVfY2FsbGJhY2tzYGAsXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL01lbW9yeS1PcmRlcmluZy9UcmVlLVJDVS1NZW1vcnktT3JkZXJpbmcucnN0OjI5NzpgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKWBgLCBhbmQgYGB0YWtlZG93bl9jcHUoKWBgLCB3aGljaCBpbiB0dXJuXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL01lbW9yeS1PcmRlcmluZy9UcmVlLVJDVS1NZW1vcnktT3JkZXJpbmcucnN0LTI5OC1pcyBpbnZva2VkIG9uIGEgc3Vydml2aW5nIENQVSBhZnRlciB0aGUgb3V0Z29pbmcgQ1BVIGhhcyBiZWVuIGNvbXBsZXRlbHlcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9NZW1vcnktT3JkZXJpbmcvVHJlZVJDVS1jYWxsYmFjay1yZWdpc3RyeS5zdmctNTY1LSAgICAgICBpZD1cXFwidGV4dDIwMi03LTktNlxcXCJcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vTWVtb3J5LU9yZGVyaW5nL1RyZWVSQ1UtY2FsbGJhY2stcmVnaXN0cnkuc3ZnOjU2NjogICAgICAgc3R5bGU9XFxcImZvbnQtc2l6ZToxOTJweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpib2xkO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4wMjVpbjtmb250LWZhbS4uLlxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9NZW1vcnktT3JkZXJpbmcvVHJlZVJDVS1jYWxsYmFjay1yZWdpc3RyeS5zdmctNTY3LSAgICBcXHUwMDNjdGV4dFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL01lbW9yeS1PcmRlcmluZy9UcmVlUkNVLWdwLnN2Zy0xNDQ3LSAgICAgICBpZD1cXFwidGV4dDIwMi03LTktNlxcXCJcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vTWVtb3J5LU9yZGVyaW5nL1RyZWVSQ1UtZ3Auc3ZnOjE0NDg6ICAgICAgIHN0eWxlPVxcXCJmb250LXNpemU6MTkycHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFuY2hvcjpzdGFydDtmaWxsOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuMDI1aW47Zm9udC1mYW1pbHk6Q291cmllclxcXCJcXHUwMDNlci4uLlxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9NZW1vcnktT3JkZXJpbmcvVHJlZVJDVS1ncC5zdmctMTQ0OS0gICAgXFx1MDAzY3RleHRcXG4tLVxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0Lmg9NTUwPWVudW1cXG4tLVxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgtNTY5LSAqIF8gUkNVOlxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0Lmg6NTcwOiAqIFxcdDEpIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKSBtaWdyYXRlcyB0aGUgcXVldWUuXFxuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaC01NzEtICogXFx0MikgcmN1dHJlZV9yZXBvcnRfY3B1X2RlYWQoKSByZXBvcnRzIHRoZSBmaW5hbCBxdWllc2NlbnQgc3RhdGVzLlxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmg9MTEwPWludCByY3V0cmVlX29mZmxpbmVfY3B1KHVuc2lnbmVkIGludCBjcHUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmgtMTE2LVxcbmluY2x1ZGUvbGludXgvcmN1dHJlZS5oOjExNzp2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSk7XFxuaW5jbHVkZS9saW51eC9yY3V0cmVlLmgtMTE4LVxcbi0tXFxua2VybmVsL2NwdS5jPTEzMDI9c3RhdGljIGludCB0YWtlZG93bl9jcHUodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9jcHUuYy0xMzUxLVxcdCAqL1xcbmtlcm5lbC9jcHUuYzoxMzUyOlxcdHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoY3B1KTtcXG5rZXJuZWwvY3B1LmMtMTM1My1cXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oLTU4OS1cXG5rZXJuZWwvcmN1L3JjdS5oOjU5MDovKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUncyBkZWZlcnJlZCBTUkNVIGNhbGxiYWNrczsgc2VlIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4gKi9cXG5rZXJuZWwvcmN1L3JjdS5oLTU5MS12b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xNTE1PXN0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTM4LSAqIERyYWluIEBjcHUncyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3M7IGNhbGxlZCBmcm9tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE1Mzk6ICogcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpIG9uY2UgQGNwdSBpcyBkZWFkLiAgT25lIHBhc3MgY292ZXJzIGV2ZXJ5XFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1NDAtICogc3JjdV9zdHJ1Y3QsIGFzIHRoZSBwZXItQ1BVIHNyY3VfZGVmZXIgbGlzdCBjaGFpbnMgdGhlbSBhbGwsIGFuZCB0aGVcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTMxNjY9c3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0zMjE5LSAqIHRoZSBkcmFpbmVycyAtLSB0aGlzIENQVSdzIGlycV93b3JrLCByY3VfZGVmZXJfZmx1c2goKSBhbmRcXG5rZXJuZWwvcmN1L3RyZWUuYzozMjIwOiAqIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKSAtLSBzZXJpYWxpemUgYW5kIG5ldmVyIGxlYXZlIGEgY2FsbGJhY2sgb2ZmXFxua2VybmVsL3JjdS90cmVlLmMtMzIyMS0gKiAtXFx1MDAzZWRlZmVyX2hlYWQgeWV0IG5vdCBvbiBhIGNhbGxiYWNrIGxpc3QuXFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz00NTYwPXZvaWQgcmN1dHJlZV9yZXBvcnRfY3B1X2RlYWQodm9pZClcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MTQtICovXFxua2VybmVsL3JjdS90cmVlLmM6NDYxNTp2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSlcXG5rZXJuZWwvcmN1L3RyZWUuYy00NjE2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6NTIuMzk3MTE1NjU4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNDMyMDA3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJDVSBDb2RlIGZvciBTeXprYWxsZXIgVGVzdGluZyoqXG5cbk9rYXksIHNvIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBpcyBkZWZpbml0ZWx5IGNhbGxlZCBmcm9tIGB0YWtlZG93bl9jcHVgIHdpdGhpbiBga2VybmVsL2NwdS5jYC4gVGhhdCdzIGluIHRoZSBDUFUgaG90cGx1ZyBwYXRoLCB3aGljaCBtYWtlcyBpdCBhIHNvbGlkIHRhcmdldC4gTm93LCBsZXQncyBleHBsb3JlIG90aGVyIHN1aXRhYmxlIGZ1bmN0aW9ucy4gYGNhbGxfcmN1X2RlZmVyYCBpcyBpbnRlcm5hbCB0byB0aGUgZGVmZXJyYWwgbG9naWMuIEFuZCBiZWNhdXNlIGl0J3Mgc3RhdGljIGl0J3Mgbm90IGlkZWFsLiBTYW1lIHdpdGggYHNyY3VfZGVmZXJfZHJhaW5gIGFuZCBgcmN1X2RlZmVyX2RyYWluYCwgdGhleSdyZSB0aGUgaXJxX3dvcmsgaGFuZGxlcnMuXG5cbkJ1dCwgaG9sZCBvbi4uLiBgcmN1X2RlZmVyX2RyYWluYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBJUlFfV09SS19JTklUX0hBUkRgLCB3aGljaCBtZWFucyBpdCBpc24ndCBpbmxpbmVkISBFeGNlbGxlbnQsIHRoYXQgbWFrZXMgaXQgbW9yZSBhY2Nlc3NpYmxlLlxuXG5Gb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucywgSSBuZWVkIHRvIGZvY3VzIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gU28sIGByY3VfYmFycmllcmAsIGBzcmN1X2JhcnJpZXJgLCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AsIGFuZCBgc3JjdV9vZmZsaW5lX2RyYWluYCBsb29rIGxpa2UgZ29vZCBvcHRpb25zLlxuXG5Ob3csIGFib3V0IGBDT05GSUdfUkNVX0RFRkVSYC4gSXQgZGVwZW5kcyBvbiBgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNgLiBUbyBlbnN1cmUgaXQncyBlbmFibGVkLCBJJ2xsIG5lZWQgdG8gYWRkIGBLUFJPQkVTYCBhbmQgYEZVTkNUSU9OX1RSQUNFUmAgdG8gdGhlIGBFbmFibGVDb25maWdzYC4gQWxzbywgYFBFUkZfRVZFTlRTYCBpcyBuZWNlc3NhcnkgZm9yIGByY3VfdG9ydHVyZV9ubWlfaW5pdGAuIEFuZCBvZiBjb3Vyc2UsIEkgbmVlZCBgUkNVX1RPUlRVUkVfVEVTVGAgdG8gcnVuIHRoZSB0b3J0dXJlIHRlc3RzLlxuXG5CdXQsIGBSQ1VfVE9SVFVSRV9URVNUYCBpcyBhIG1vZHVsZS4gU3l6a2FsbGVyIGRvZXNuJ3QgbG9hZCBpdCBieSBkZWZhdWx0IHVubGVzcyBpdCdzIGJ1aWx0LWluIG9yIGV4cGxpY2l0bHkgbG9hZGVkLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBsaXN0IGNvbmZpZ3VyYXRpb24gZmxhZ3MgbmVlZGVkIHRvIGNvbXBpbGUgYW5kIHRlc3QgdGhlICptb2RpZmllZCogY29kZS4gU28sIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGBLUFJPQkVTYCwgYEZVTkNUSU9OX1RSQUNFUmAsIGBQRVJGX0VWRU5UU2AsIGFuZCBgUkNVX1RPUlRVUkVfVEVTVGAuIEdvdHRhIGRvdWJsZS1jaGVjayB0aGF0IGBSQ1VfVE9SVFVSRV9URVNUYCBpbiBga2VybmVsL3JjdS9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0MDYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6NTkuNTQwMzE5ODU3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU3NDExMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSQ1VfVE9SVFVSRV9URVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zz0yNj1jb25maWcgUkNVX1NDQUxFX1RFU1RcXG4tLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy00MC1cXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWc6NDE6Y29uZmlnIFJDVV9UT1JUVVJFX1RFU1RcXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctNDItXFx0dHJpc3RhdGUgXFxcInRvcnR1cmUgdGVzdHMgZm9yIFJDVVxcXCJcXG4tLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy01NS1cXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWc6NTY6Y29uZmlnIFJDVV9UT1JUVVJFX1RFU1RfQ0hLX1JEUl9TVEFURVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy01Ny1cXHRib29sIFxcXCJDaGVjayByY3V0b3J0dXJlIHJlYWRlciBzdGF0ZVxcXCJcXG4tLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy03MS1cXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWc6NzI6Y29uZmlnIFJDVV9UT1JUVVJFX1RFU1RfTE9HX0NQVVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy03My1cXHRib29sIFxcXCJMb2cgQ1BVIGZvciByY3V0b3J0dXJlIGZhaWx1cmVzXFxcIlxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTg2LVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo4Nzpjb25maWcgUkNVX1RPUlRVUkVfVEVTVF9MT0dfR1BcXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctODgtXFx0Ym9vbCBcXFwiTG9nIGdyYWNlLXBlcmlvZCBudW1iZXJzIGZvciByY3V0b3J0dXJlIGZhaWx1cmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNjowMS4wOTc3MzcwNzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYxMDU0MzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIERlcGVuZGVuY3kgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBgUkNVX1RPUlRVUkVfVEVTVGAgaXMgZmxhZ2dpbmcgYSBkZXBlbmRlbmN5IG9uIGBUT1JUVVJFX1RFU1RgLiBUaGF0J3MgYSBjb21tb24gcGF0dGVybiBpbiB0aGUgZnJhbWV3b3JrOyBvbmUgdGVzdCBvZnRlbiBidWlsZHMgdXBvbiBhbm90aGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYFRPUlRVUkVfVEVTVGAgdG8gZmlndXJlIG91dCB3aHkgYFJDVV9UT1JUVVJFX1RFU1RgIG1pZ2h0IGJlIGZhaWxpbmcsIG9yIGJlaGF2aW5nIGluIGFuIHVuZXhwZWN0ZWQgbWFubmVyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBUT1JUVVJFX1RFU1RgLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY3MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE2OjAzLjcwODI4MzA0MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMTUyNDcxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVE9SVFVSRV9URVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zz0xMT1jb25maWcgUFJPVkVfUkNVX0xJU1RcXG4tLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy0yMS1cXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWc6MjI6Y29uZmlnIFRPUlRVUkVfVEVTVFxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy0yMy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNjowNS4yMTk4MTIzODhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMxNjk2NzY5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFJDVSBEZWZlcnJhbCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSB0YXNrIGlzIHRvIGlkZW50aWZ5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLlxuXG5JIHNlZSB0aGF0IGBUT1JUVVJFX1RFU1RgIGlzIGEgdHJpc3RhdGUsIGFuZCBlbmFibGVkIGJ5IGBSQ1VfVE9SVFVSRV9URVNUYC4gIFNvLCBlbmFibGluZyBgUkNVX1RPUlRVUkVfVEVTVGAgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLlxuXG5UaGUgQlBGIHRlc3QgdXRpbGl6ZXMgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgLiBUaGUgcHJlc2VuY2Ugb2YgYSBuZXcgQlBGIHNlbGYtdGVzdCwgc3BlY2lmaWNhbGx5IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jYCwgc2NyZWFtcyB0aGF0IEJQRiBpcyBhIGdyZWF0IGF2ZW51ZSBmb3IgdGVzdGluZyB0aGlzLiAgU28sIGBCUEZfU1lTQ0FMTGAgaXMgZGVmaW5pdGVseSBhIGtleSBjb25maWcgdG8gZW5hYmxlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHJlbGV2YW50IGZ1bmN0aW9ucy4gVGhlIGdvYWwgaGVyZSBpcyB0byBmaW5kIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgdGhlIG5ldyBkZWZlcnJlZCBjYWxsYmFjayBsb2dpYyBidXQgYXJlbid0IGhvdCBwYXRocywgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgb24gYHJjdV9iYXJyaWVyYCwgYHNyY3VfYmFycmllcmAsIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCwgYW5kIGBzcmN1X29mZmxpbmVfZHJhaW5gLiBBcmUgdGhleSBob3QgcGF0aHM/IE5vLCBubywgbm8sIGFuZCBuby4gVGhpcyBsb29rcyBwcm9taXNpbmcuXG5cbmBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIGJ1dCB0aGV5IGFyZSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gdGhvc2UgYXJlIG91dC4gVGhlIGdvYWwgaXMgdG8gZmx1c2gvbWlncmF0ZSB0aGUgbmV3IGRlZmVycmFsIGNhbGxiYWNrcy5cblxuSSdtIHRoaW5raW5nOiBgc3JjdV9kZWZlcl9kcmFpbmAgaXMgZXhwb3J0ZWQgaW4gYHNyY3V0aW55LmNgLCBidXQgc3RhdGljIGluIGBzcmN1dHJlZS5jYC4gYHNyY3Vfb2ZmbGluZV9kcmFpbmAgaXMgbm90IHN0YXRpYyBpbiBgc3JjdXRyZWUuY2AsIHNvIGl0J3MgYSBiZXR0ZXIgY2hvaWNlLiBgcmN1X2JhcnJpZXJgIGNhbGxzIGByY3VfZGVmZXJfZmx1c2goKWAsIHdoaWNoIGlzIHN0YXRpYywgc28gYHJjdV9iYXJyaWVyYCBpcyBhIGdvb2QgdGFyZ2V0LiBMaWtld2lzZSwgYHNyY3VfYmFycmllcmAgY2FsbHMgc3RhdGljIGBzcmN1X2RlZmVyX2ZsdXNoKClgLCBzbyBgc3JjdV9iYXJyaWVyYCBpcyBnb29kLiBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgY2FsbHMgYHJjdV9kZWZlcl9kcmFpbmAgYW5kIGBzcmN1X29mZmxpbmVfZHJhaW5gLCBhbHNvIGxvb2tzIGdvb2QuIGBzcmN1X29mZmxpbmVfZHJhaW5gIGl0c2VsZiBjYWxscyBgc3JjdV9kZWZlcl9kcmFpbmAuIFRoZSBsaXN0OlxuLSBgcmN1X2JhcnJpZXJgXG4tIGBzcmN1X2JhcnJpZXJgXG4tIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYFxuLSBgc3JjdV9vZmZsaW5lX2RyYWluYFxuXG5TZWVtcyBwcmV0dHkgc29saWQuXG5cbkNvbmZpZy13aXNlLCBJJ3ZlIGdvdDogYEtQUk9CRVNgLCBgRlVOQ1RJT05fVFJBQ0VSYCwgYFBFUkZfRVZFTlRTYCwgYFJDVV9UT1JUVVJFX1RFU1RgLCBhbmQgYEJQRl9TWVNDQUxMYC5cblxuQWgsIGJ1dCB3YWl0ISBgQ09ORklHX1JDVV9ERUZFUmAgaXMgZGVmaW5lZCBpbiB0ZXJtcyBvZiBgSEFWRV9OTUlgLCBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYFRSQUNFUE9JTlRTYC4gU28sIHRvIG1ha2Ugc3VyZSBpdCdzIGVuYWJsZWQsIEkgbmVlZCB0byBsaXN0IHRob3NlLiBgSEFWRV9OTUlgIGlzIHVzdWFsbHkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBidXQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYFRSQUNFUE9JTlRTYCBjb3ZlciB1cy5cblxuYFJDVV9UT1JUVVJFX1RFU1RgIGlzIGEgbW9kdWxlLiBXaGlsZSBpdCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBub2lzZSBpZiBpdCdzIGJ1aWx0LWluLCB0aGUgcGF0Y2ggKm1vZGlmaWVzKiBgcmN1dG9ydHVyZS5jYCwgYWRkaW5nIE5NSSB0ZXN0aW5nLCBzbyBlbmFibGluZyBpdCBzZWVtcyBjb3JyZWN0LlxuXG5BbmQgYEJQRl9TWVNDQUxMYCBpcyBjcml0aWNhbCBiZWNhdXNlIEJQRiBpcyBhIHByaW1hcnkgZHJpdmVyIG9mIHRoaXMgbmV3IGxvZ2ljLCBhbmQgaXQgdHJpZ2dlcnMgYHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyYCBpbiBgcmN1dG9ydHVyZS5jYCBzbyBgUEVSRl9FVkVOVFNgIGlzIG5lZWRlZC5cblxuVGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJhbCBtZWNoYW5pc20gZm9yIGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBub3RhYmx5IGZvciBOTUlzIGFuZCBCUEYgcHJvZ3JhbXMuIEl0IGNoYW5nZXMgY29yZSBSQ1UgYW5kIFNSQ1UgbG9naWMsIGFkZGluZyBuZXcgZGVmZXJyZWQgY2FsbGJhY2sgbGlzdHMgYW5kIGlycV93b3JrIHF1ZXVlcy4gVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgTk1JIHRlc3RpbmcgaW4gYHJjdXRvcnR1cmVgIGFuZCBhIEJQRiBzZWxmdGVzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFuZCB3YXJyYW50cyBmdXp6aW5nLiBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgYXJlIGdvb2QgZm9jdXMgc3ltYm9scyBiZWNhdXNlIHRoZXkncmUgbm9uLWhvdHBhdGggZW50cnkgcG9pbnRzIHRoYXQgZmx1c2ggb3IgbWlncmF0ZSB0aGUgbmV3IGRlZmVycmVkIGxpc3RzLiBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYFRSQUNFUE9JTlRTYCBlbmFibGUgYENPTkZJR19SQ1VfREVGRVJgLCBgUEVSRl9FVkVOVFNgIGFuZCBgUkNVX1RPUlRVUkVfVEVTVGAgY292ZXIgdGhlIE5NSSB0ZXN0cywgYW5kIGBCUEZfU1lTQ0FMTGAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgQlBGIGlzIGEgcHJpbWFyeSB1c2VyLlxuXG5MZXQncyBxdWlja2x5IHJlZmluZSB0aGUgZm9jdXMgc3ltYm9scywgd2hpY2ggaXNcblxuIiwiSW5wdXRUb2tlbnMiOjI2OTQ1LCJPdXRwdXRUb2tlbnMiOjMxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTY6MjguMzg5NDkyMTA3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5MzI2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiLFxuICAgIFwiVFJBQ0VQT0lOVFNcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJSQ1VfVE9SVFVSRV9URVNUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJjdV9iYXJyaWVyXCIsXG4gICAgXCJzcmN1X2JhcnJpZXJcIixcbiAgICBcInJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NcIixcbiAgICBcInNyY3Vfb2ZmbGluZV9kcmFpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJhbCBtZWNoYW5pc20gZm9yIGNhbGxfcmN1KCkgYW5kIGNhbGxfc3JjdSgpIHRvIHNhZmVseSBoYW5kbGUgY2FsbGJhY2sgZW5xdWV1ZXMgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAoZS5nLiwgZnJvbSBOTUlzIG9yIEJQRiBwcm9ncmFtcykuIEl0IGFkZHMgbG9ja2xlc3MgbGlzdHMgYW5kIGlycV93b3JrIHRvIGRlZmVyIHRoZSBhY3R1YWwgZW5xdWV1ZSB1bnRpbCBpdCBpcyBzYWZlLiBJdCBhbHNvIHVwZGF0ZXMgcmN1X2JhcnJpZXIoKSwgc3JjdV9iYXJyaWVyKCksIGFuZCBDUFUgaG90cGx1ZyBwYXRocyB0byBmbHVzaCB0aGVzZSBkZWZlcnJlZCBjYWxsYmFja3MuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBOTUkgdGVzdGluZyB0byByY3V0b3J0dXJlIHVzaW5nIHBlcmYgZXZlbnRzLCBhbmQgYSBCUEYgc2VsZnRlc3QuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIFJDVSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gRm9jdXMgc3ltYm9scyBpbmNsdWRlIHRoZSBiYXJyaWVyIGFuZCBDUFUgb2ZmbGluZSBmdW5jdGlvbnMgdGhhdCBkcmFpbiB0aGUgbmV3IGRlZmVycmVkIGxpc3RzLiBSZXF1aXJlZCBjb25maWdzIGluY2x1ZGUgS1BST0JFUy9GVU5DVElPTl9UUkFDRVIvVFJBQ0VQT0lOVFMgdG8gZW5hYmxlIENPTkZJR19SQ1VfREVGRVIsIFBFUkZfRVZFTlRTIGFuZCBSQ1VfVE9SVFVSRV9URVNUIGZvciB0aGUgcmN1dG9ydHVyZSBjaGFuZ2VzLCBhbmQgQlBGX1NZU0NBTEwgYXMgQlBGIGlzIGEgcHJpbWFyeSB0cmlnZ2VyIGZvciB0aGlzIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1BST0JFU1wiLFxuICAgIFwiRlVOQ1RJT05fVFJBQ0VSXCIsXG4gICAgXCJUUkFDRVBPSU5UU1wiLFxuICAgIFwiUEVSRl9FVkVOVFNcIixcbiAgICBcIlJDVV9UT1JUVVJFX1RFU1RcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmN1X2JhcnJpZXJcIixcbiAgICBcInNyY3VfYmFycmllclwiLFxuICAgIFwicmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc1wiLFxuICAgIFwic3JjdV9vZmZsaW5lX2RyYWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmFsIG1lY2hhbmlzbSBmb3IgY2FsbF9yY3UoKSBhbmQgY2FsbF9zcmN1KCkgdG8gc2FmZWx5IGhhbmRsZSBjYWxsYmFjayBlbnF1ZXVlcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkIChlLmcuLCBmcm9tIE5NSXMgb3IgQlBGIHByb2dyYW1zKS4gSXQgYWRkcyBsb2NrbGVzcyBsaXN0cyBhbmQgaXJxX3dvcmsgdG8gZGVmZXIgdGhlIGFjdHVhbCBlbnF1ZXVlIHVudGlsIGl0IGlzIHNhZmUuIEl0IGFsc28gdXBkYXRlcyByY3VfYmFycmllcigpLCBzcmN1X2JhcnJpZXIoKSwgYW5kIENQVSBob3RwbHVnIHBhdGhzIHRvIGZsdXNoIHRoZXNlIGRlZmVycmVkIGNhbGxiYWNrcy4gQWRkaXRpb25hbGx5LCBpdCBhZGRzIE5NSSB0ZXN0aW5nIHRvIHJjdXRvcnR1cmUgdXNpbmcgcGVyZiBldmVudHMsIGFuZCBhIEJQRiBzZWxmdGVzdC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgUkNVIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiBGb2N1cyBzeW1ib2xzIGluY2x1ZGUgdGhlIGJhcnJpZXIgYW5kIENQVSBvZmZsaW5lIGZ1bmN0aW9ucyB0aGF0IGRyYWluIHRoZSBuZXcgZGVmZXJyZWQgbGlzdHMuIFJlcXVpcmVkIGNvbmZpZ3MgaW5jbHVkZSBLUFJPQkVTL0ZVTkNUSU9OX1RSQUNFUi9UUkFDRVBPSU5UUyB0byBlbmFibGUgQ09ORklHX1JDVV9ERUZFUiwgUEVSRl9FVkVOVFMgYW5kIFJDVV9UT1JUVVJFX1RFU1QgZm9yIHRoZSByY3V0b3J0dXJlIGNoYW5nZXMsIGFuZCBCUEZfU1lTQ0FMTCBhcyBCUEYgaXMgYSBwcmltYXJ5IHRyaWdnZXIgZm9yIHRoaXMgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowwcnpv[1] Phase: Succeeded StartedAt: 2026-07-31 01:16:40 +0000 UTC FinishedAt: 2026-07-31 01:16:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcnpv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 01:16:40 +0000 UTC FinishedAt: 2026-07-31 01:16:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcnpv[2] Phase: Succeeded StartedAt: 2026-07-31 01:16:40 +0000 UTC FinishedAt: 2026-07-31 02:09:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcnpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","rcutree_migrate_callbacks","srcu_offline_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-31 01:16:40 +0000 UTC FinishedAt: 2026-07-31 02:09:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","rcutree_migrate_callbacks","srcu_offline_drain"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwcnpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","rcutree_migrate_callbacks","srcu_offline_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 01:16:40 +0000 UTC FinishedAt: 2026-07-31 01:16:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcnpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","rcutree_migrate_callbacks","srcu_offline_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 01:16:40 +0000 UTC FinishedAt: 2026-07-31 01:16:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwcnpv/series-workflowwcnpv-convert-artifact-1357913999/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcnpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","rcutree_migrate_callbacks","srcu_offline_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 01:16:50 +0000 UTC FinishedAt: 2026-07-31 01:37:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcnpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","rcutree_migrate_callbacks","srcu_offline_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 01:16:50 +0000 UTC FinishedAt: 2026-07-31 01:37:35 +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:*e2a9473f-40e6-4103-8e9f-67ed35ca3a7d,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-workflowwcnpv/series-workflowwcnpv-convert-artifact-1357913999/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": "ba1d67aa-46a1-4df5-a43a-adfec50e08b4", "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-workflowwcnpv/series-workflowwcnpv-build-action-1969365/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcnpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","rcutree_migrate_callbacks","srcu_offline_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 01:16:50 +0000 UTC FinishedAt: 2026-07-31 01:37:25 +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:*e2a9473f-40e6-4103-8e9f-67ed35ca3a7d,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-workflowwcnpv/series-workflowwcnpv-convert-artifact-1357913999/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": "ba1d67aa-46a1-4df5-a43a-adfec50e08b4", "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-workflowwcnpv/series-workflowwcnpv-build-action-1969365/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcnpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","rcutree_migrate_callbacks","srcu_offline_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 01:37:35 +0000 UTC FinishedAt: 2026-07-31 01:37:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcnpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","rcutree_migrate_callbacks","srcu_offline_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 01:37:35 +0000 UTC FinishedAt: 2026-07-31 01:37:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcnpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","rcutree_migrate_callbacks","srcu_offline_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 01:37:35 +0000 UTC FinishedAt: 2026-07-31 01:37:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcnpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","rcutree_migrate_callbacks","srcu_offline_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 01:37:35 +0000 UTC FinishedAt: 2026-07-31 01:37:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwcnpv/series-workflowwcnpv-convert-artifact-3149227742/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcnpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","rcutree_migrate_callbacks","srcu_offline_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 01:37:45 +0000 UTC FinishedAt: 2026-07-31 02:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcnpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","rcutree_migrate_callbacks","srcu_offline_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 01:37:45 +0000 UTC FinishedAt: 2026-07-31 02:09:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ba1d67aa-46a1-4df5-a43a-adfec50e08b4,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-workflowwcnpv/series-workflowwcnpv-build-action-1969365/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": false },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-workflowwcnpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","rcutree_migrate_callbacks","srcu_offline_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Failed StartedAt: 2026-07-31 02:09:19 +0000 UTC FinishedAt: 2026-07-31 02:09:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcnpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","rcutree_migrate_callbacks","srcu_offline_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"95d6a9ccef99117115e41e9adb271243bd5e985b","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","FUNCTION_TRACER","TRACEPOINTS","PERF_EVENTS","RCU_TORTURE_TEST","BPF_SYSCALL"],"series_id":"d8998ec7-6753-48fe-ae7d-019bea631f5e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Failed StartedAt: 2026-07-31 02:09:19 +0000 UTC FinishedAt: 2026-07-31 02:09:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}