Name: series-workflow2hn88 Phase: Succeeded StartedAt: 2026-09-06 10:02:59 +0000 UTC FinishedAt: 2026-09-06 13:48:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[0] Phase: Succeeded StartedAt: 2026-09-06 10:02:59 +0000 UTC FinishedAt: 2026-09-06 10:06:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 10:02:59 +0000 UTC FinishedAt: 2026-09-06 10:06:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "3ccdb07813829ba9487273e75d1cb238cfa774c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "3ccdb07813829ba9487273e75d1cb238cfa774c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "efa71e25-cbe2-4f6f-b01b-17ea81825a82" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "do_check_subprogs", "do_check_common", "check_func_call", "do_check_main" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2RvX2NoZWNrX3N1YnByb2dzJiMzNDssCiAgICAmIzM0O2RvX2NoZWNrX2NvbW1vbiYjMzQ7LAogICAgJiMzNDtjaGVja19mdW5jX2NhbGwmIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfbWFpbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdHJhY2sgYW5kIHZlcmlmeSBnbG9iYWwgc3VicHJvZ3JhbSBjYWxscyBzZXBhcmF0ZWx5IGZvciBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUvUkNVIGNvbnRleHRzLiBJdCByZXBsYWNlcyB0aGUgc2luZ2xlLWJpdCBgY2FsbGVkYCBhbmQgYHZlcmlmaWVkYCBmbGFncyBpbiBgc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4YCB3aXRoIHR3by1lbGVtZW50IGJvb2xlYW4gYXJyYXlzIGluZGV4ZWQgYnkgYGluX3NsZWVwYWJsZWAuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4gVGhlIGBicGZfZnVuY19pbmZvX2F1eGAgc3RydWN0dXJlcyBhcmUgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKHZpYSBga3phbGxvY19vYmpzYCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gYGRvX2NoZWNrX3N1YnByb2dzKClgLCBgZG9fY2hlY2tfY29tbW9uKClgLCBhbmQgYGNoZWNrX2Z1bmNfY2FsbCgpYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZSBhcnJheXMgYXJlIGluZGV4ZWQgdXNpbmcgYm9vbGVhbiB2YWx1ZXMgKDAgb3IgMSksIG1hdGNoaW5nIHRoZSBhcnJheSBkaW1lbnNpb24uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4tIEtBU0FOIC8gU3RhbmRhcmQgRGV0ZWN0b3JzOiBBbnkgbWVtb3J5IGFjY2VzcyBpc3N1ZXMgKHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHN0YXRlIGFsbG9jYXRpb24gaXNzdWVzLCBvciBsb2dpYy92ZXJpZmllciB0cmF2ZXJzYWwgYnVncykgd291bGQgYmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHRyYWNrIGFuZCB2ZXJpZnkgZ2xvYmFsIHN1YnByb2dyYW1zIHNlcGFyYXRlbHkgYWNyb3NzIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBleGVjdXRpb24gY29udGV4dHMsIG1vZGlmeWluZyBzdWJwcm9ncmFtIHZlcmlmaWNhdGlvbiBsb29wcywgdG9wb2xvZ2ljYWwgdHJhdmVyc2FsIG9yZGVyLCBhbmQgY29udGV4dCBzdGF0ZSBoYW5kbGluZyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NmVmYTYwM2EwZDUyMmU2ZWVjNjMyMzBkMTlhNmUyNjBkZmVlM2Q4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxMDowNToxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggM2E3ZWIyMTg1YzM1NC4uNjZkMDQyNDRjNzM3OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0xNjUwLDggJiM0MzsxNjUwLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3NcbiBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXgge1xuIFx0dTE2IGxpbmthZ2U7XG4gXHRib29sIHVucmVsaWFibGU7XG4tXHRib29sIGNhbGxlZCA6IDE7XG4tXHRib29sIHZlcmlmaWVkIDogMTtcbiYjNDM7XHQvKiBJbmRleGVkIGJ5IGluX3NsZWVwYWJsZS4gKi9cbiYjNDM7XHRib29sIGNhbGxlZFsyXTtcbiYjNDM7XHRib29sIHZlcmlmaWVkWzJdO1xuIH07XG4gXG4gZW51bSBicGZfaml0X3Bva2VfcmVhc29uIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDViNTFlN2VlMWEzZjkuLmY3NTlhMDIwYzhhNWEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTk5NTcsNiAmIzQzOzk5NTcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRpZiAoZXJyID09IC1FRkFVTFQpXG4gXHRcdHJldHVybiBlcnI7XG4gXHRpZiAoYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGVudiwgc3VicHJvZykpIHtcbiYjNDM7XHRcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgc3VicHJvZyk7XG4gXHRcdGNvbnN0IGNoYXIgKnN1Yl9uYW1lID0gYnBmX3N1YnByb2dfbmFtZShlbnYsIHN1YnByb2cpO1xuIFx0XHRjb25zdCBjaGFyICpvcGVyYXRpb247XG4gXHRcdGJvb2wgcmV0dXJuc192b2lkO1xuQEAgLTk5ODgsMTEgJiM0Mzs5OTg5LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0aWYgKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwpXG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0Z1bmMjJWQgKCYjMzk7JXMmIzM5OykgaXMgZ2xvYmFsIGFuZCBhc3N1bWVkIHZhbGlkLlxcblwmIzM0OyxcbiBcdFx0XHRcdHN1YnByb2csIHN1Yl9uYW1lKTtcbiYjNDM7XHRcdHN1Yl9hdXgtXHUwMDNlY2FsbGVkW2luX3NsZWVwYWJsZV9jb250ZXh0KGVudildID0gdHJ1ZTtcbiBcdFx0cmV0dXJuc192b2lkID0gc3VicHJvZ19yZXR1cm5zX3ZvaWQoZW52LCBzdWJwcm9nKTtcbiBcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10uY2hhbmdlc19wa3RfZGF0YSlcbiBcdFx0XHRjbGVhcl9hbGxfcGt0X3BvaW50ZXJzKGVudik7XG4tXHRcdC8qIG1hcmsgZ2xvYmFsIHN1YnByb2cgZm9yIHZlcmlmeWluZyBhZnRlciBtYWluIHByb2cgKi9cbi1cdFx0c3VicHJvZ19hdXgoZW52LCBzdWJwcm9nKS1cdTAwM2VjYWxsZWQgPSB0cnVlO1xuIFx0XHRpZiAocmV0dXJuc192b2lkKVxuIFx0XHRcdGJwZl9kaWFnX3JlY29yZF9zY3J1YihlbnYsIFx1MDAyNmNhbGxlci1cdTAwM2VyZWdzW0JQRl9SRUdfMF0sIEJQRl9ESUFHX01PRF9DQUxMRVJfU0FWRUQpO1xuIFx0XHRlbHNlXG5AQCAtMTA4MDQsNyAmIzQzOzEwODA0LDEyIEBAIGludCBicGZfZ2V0X2hlbHBlcl9wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgZnVuY19pZCxcbiBcdHJldHVybiAqcHRyIFx1MDAyNlx1MDAyNiAoKnB0ciktXHUwMDNlZnVuYyA/IDAgOiAtRUlOVkFMO1xuIH1cbiBcbi0vKiBDaGVjayBpZiB3ZSYjMzk7cmUgaW4gYSBzbGVlcGFibGUgY29udGV4dC4gKi9cbiYjNDM7LypcbiYjNDM7ICogVGhpcyBwcmVkaWNhdGUgaXMgdGhlIGludmVyc2Ugb2YgaW5fcmN1X2NzKCk6IG5vbi1zbGVlcGFibGUgcHJvZ3JhbXMgYW5kXG4mIzQzOyAqIGV2ZXJ5IGNvbmRpdGlvbiB0aGF0IHByZXZlbnRzIHNsZWVwaW5nIGFsc28gcHJvdmlkZSBSQ1UgcHJvdGVjdGlvbi4gR2xvYmFsXG4mIzQzOyAqIHN1YnByb2cgdmVyaWZpY2F0aW9uIHJlbGllcyBvbiB0aGlzIGVxdWl2YWxlbmNlIHRvIHJlcHJlc2VudCB0aGUgY2FsbGVyJiMzOTtzXG4mIzQzOyAqIGV4ZWN1dGlvbiBjb250ZXh0IHVzaW5nIG9ubHkgdGhlIGluX3NsZWVwYWJsZSBiaXQuXG4mIzQzOyAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpbl9zbGVlcGFibGVfY29udGV4dChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHJldHVybiAhZW52LVx1MDAzZWN1cl9zdGF0ZS1cdTAwM2VhY3RpdmVfcmN1X2xvY2tzIFx1MDAyNlx1MDAyNlxuQEAgLTE5NTYwLDEzICYjNDM7MTk1NjUsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9zdGF0ZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4mIzQzO3N0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBib29sIGluX3NsZWVwYWJsZSlcbiB7XG4gXHRib29sIHBvcF9sb2cgPSAhKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwyKTtcbiBcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWIgPSBzdWJwcm9nX2luZm8oZW52LCBzdWJwcm9nKTtcbiBcdHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eDtcbiBcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXRlO1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3M7XG4mIzQzO1x0dTMyIG9sZF9pbnNuc190b3RhbCA9IHN1Yi1cdTAwM2VpbnNuc190b3RhbDtcbiBcdHUzMiBpbnNuX3Byb2Nlc3NlZCA9IGVudi1cdTAwM2VpbnNuX3Byb2Nlc3NlZDtcbiBcdGludCByZXQsIGk7XG4gXG5AQCAtMTk1NzksNyAmIzQzOzE5NTg1LDcgQEAgc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4gXHRzdGF0ZS1cdTAwM2VjdXJmcmFtZSA9IDA7XG4gXHRzdGF0ZS1cdTAwM2VzcGVjdWxhdGl2ZSA9IGZhbHNlO1xuIFx0c3RhdGUtXHUwMDNlYnJhbmNoZXMgPSAxO1xuLVx0c3RhdGUtXHUwMDNlaW5fc2xlZXBhYmxlID0gZW52LVx1MDAzZXByb2ctXHUwMDNlc2xlZXBhYmxlO1xuJiM0MztcdHN0YXRlLVx1MDAzZWluX3NsZWVwYWJsZSA9IGluX3NsZWVwYWJsZTtcbiBcdHN0YXRlLVx1MDAzZWZyYW1lWzBdID0ga3phbGxvY19vYmooc3RydWN0IGJwZl9mdW5jX3N0YXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFzdGF0ZS1cdTAwM2VmcmFtZVswXSkge1xuIFx0XHRrZnJlZShzdGF0ZSk7XG5AQCAtMTk3MjEsNyAmIzQzOzE5NzI3LDggQEAgc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4gXHQgKiBBY2N1bXVsYXRlIHRoZWlyIHRvdGFsIGNvdW50cyBhcyB0b3RhbCBjb3VudHMgb2YgdGhlIG1haW4gb3JcbiBcdCAqIGdsb2JhbCBzdWJwcm9nIGhvc3RpbmcgdGhlIGFzeW5jIGNhbGwuXG4gXHQgKi9cbi1cdGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10uaW5zbnNfdG90YWwgPSBlbnYtXHUwMDNlaW5zbl9wcm9jZXNzZWQgLSBpbnNuX3Byb2Nlc3NlZDtcbiYjNDM7XHRlbnYtXHUwMDNlc3VicHJvZ19pbmZvW3N1YnByb2ddLmluc25zX3RvdGFsID0gb2xkX2luc25zX3RvdGFsICYjNDM7XG4mIzQzO1x0XHRcdFx0XHRcdChlbnYtXHUwMDNlaW5zbl9wcm9jZXNzZWQgLSBpbnNuX3Byb2Nlc3NlZCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xOTc0OSw0NSAmIzQzOzE5NzU2LDU1IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXg7XG4gXHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXggKnN1Yl9hdXg7XG4tXHRpbnQgaSwgcmV0LCBuZXdfY250O1xuJiM0MztcdGludCBjb250ZXh0LCBpLCBqLCByZXQsIG5ld19jbnQ7XG4gXG4gXHRpZiAoIWF1eC1cdTAwM2VmdW5jX2luZm8pXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogZXhjZXB0aW9uIGNhbGxiYWNrIGlzIHByZXN1bWVkIHRvIGJlIGFsd2F5cyBjYWxsZWQgKi9cbi1cdGlmIChlbnYtXHUwMDNlZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpXG4tXHRcdHN1YnByb2dfYXV4KGVudiwgZW52LVx1MDAzZWV4Y2VwdGlvbl9jYWxsYmFja19zdWJwcm9nKS1cdTAwM2VjYWxsZWQgPSB0cnVlO1xuJiM0MztcdGlmIChlbnYtXHUwMDNlZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpIHtcbiYjNDM7XHRcdHN1Yl9hdXggPSBzdWJwcm9nX2F1eChlbnYsIGVudi1cdTAwM2VleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZyk7XG4mIzQzO1x0XHRzdWJfYXV4LVx1MDAzZWNhbGxlZFtlbnYtXHUwMDNlcHJvZy1cdTAwM2VzbGVlcGFibGVdID0gdHJ1ZTtcbiYjNDM7XHR9XG4gXG4gYWdhaW46XG4gXHRuZXdfY250ID0gMDtcbi1cdGZvciAoaSA9IDE7IGkgXHUwMDNjIGVudi1cdTAwM2VzdWJwcm9nX2NudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdhbGsgY2FsbGVycyBiZWZvcmUgY2FsbGVlcyBzbyBlYWNoIGdsb2JhbCBzdWJwcm9nIG5vcm1hbGx5IHNlZXMgYWxsXG4mIzQzO1x0ICogb2YgaXRzIGNvbnRleHRzIGJlZm9yZSBpdCBpcyB2ZXJpZmllZC4gQXN5bmMgY2FsbGJhY2sgY3ljbGVzIGNhbiBhZGQgYVxuJiM0MztcdCAqIGNvbnRleHQgdG8gYW4gZWFybGllciBzdWJwcm9nLCBzbyByZXBlYXQgdW50aWwgZXZlcnkgY2FsbGVkIGNvbnRleHQgaXNcbiYjNDM7XHQgKiB2ZXJpZmllZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGogPSBlbnYtXHUwMDNlc3VicHJvZ19jbnQgLSAxOyBqIFx1MDAzZT0gMDsgai0tKSB7XG4mIzQzO1x0XHRpID0gZW52LVx1MDAzZXN1YnByb2dfdG9wb19vcmRlcltqXTtcbiYjNDM7XHRcdGlmICghaSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGVudiwgaSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHN1Yl9hdXggPSBzdWJwcm9nX2F1eChlbnYsIGkpO1xuLVx0XHRpZiAoIXN1Yl9hdXgtXHUwMDNlY2FsbGVkIHx8IHN1Yl9hdXgtXHUwMDNldmVyaWZpZWQpXG4tXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRmb3IgKGNvbnRleHQgPSAwOyBjb250ZXh0IFx1MDAzYyBBUlJBWV9TSVpFKHN1Yl9hdXgtXHUwMDNlY2FsbGVkKTsgY29udGV4dCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKCFzdWJfYXV4LVx1MDAzZWNhbGxlZFtjb250ZXh0XSB8fCBzdWJfYXV4LVx1MDAzZXZlcmlmaWVkW2NvbnRleHRdKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRlbnYtXHUwMDNlaW5zbl9pZHggPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0O1xuLVx0XHRXQVJOX09OX09OQ0UoZW52LVx1MDAzZWluc25faWR4ID09IDApO1xuLVx0XHRyZXQgPSBkb19jaGVja19jb21tb24oZW52LCBpKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdHJldHVybiByZXQ7XG4tXHRcdH0gZWxzZSBpZiAoZW52LVx1MDAzZWxvZy5sZXZlbCBcdTAwMjYgQlBGX0xPR19MRVZFTCkge1xuLVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtGdW5jIyVkICgmIzM5OyVzJiMzOTspIGlzIHNhZmUgZm9yIGFueSBhcmdzIHRoYXQgbWF0Y2ggaXRzIHByb3RvdHlwZVxcblwmIzM0Oyxcbi1cdFx0XHRcdGksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBpKSk7XG4tXHRcdH1cbiYjNDM7XHRcdFx0ZW52LVx1MDAzZWluc25faWR4ID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5zdGFydDtcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFKGVudi1cdTAwM2VpbnNuX2lkeCA9PSAwKTtcbiYjNDM7XHRcdFx0cmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgaSwgY29udGV4dCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0aWYgKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwpXG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0Z1bmMjJWQgKCYjMzk7JXMmIzM5OykgaXMgc2FmZSBmb3IgYW55IGFyZ3MgXCYjMzQ7XG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt0aGF0IG1hdGNoIGl0cyBwcm90b3R5cGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgaSkpO1xuIFxuLVx0XHQvKiBXZSB2ZXJpZmllZCBuZXcgZ2xvYmFsIHN1YnByb2csIGl0IG1pZ2h0IGhhdmUgY2FsbGVkIHNvbWVcbi1cdFx0ICogbW9yZSBnbG9iYWwgc3VicHJvZ3MgdGhhdCB3ZSBoYXZlbiYjMzk7dCB2ZXJpZmllZCB5ZXQsIHNvIHdlXG4tXHRcdCAqIG5lZWQgdG8gZG8gYW5vdGhlciBwYXNzIG92ZXIgc3VicHJvZ3MgdG8gdmVyaWZ5IHRob3NlLlxuLVx0XHQgKi9cbi1cdFx0c3ViX2F1eC1cdTAwM2V2ZXJpZmllZCA9IHRydWU7XG4tXHRcdG5ld19jbnQmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRzdWJfYXV4LVx1MDAzZXZlcmlmaWVkW2NvbnRleHRdID0gdHJ1ZTtcbiYjNDM7XHRcdFx0bmV3X2NudCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4tXHQvKiBXZSBjYW4mIzM5O3QgbG9vcCBmb3JldmVyIGFzIHdlIHZlcmlmeSBhdCBsZWFzdCBvbmUgZ2xvYmFsIHN1YnByb2cgb25cbi1cdCAqIGVhY2ggcGFzcy5cbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGNhbiYjMzk7dCBsb29wIGZvcmV2ZXIgYXMgZWFjaCBwYXNzIHZlcmlmaWVzIGF0IGxlYXN0IG9uZSBuZXcgY29udGV4dCxcbiYjNDM7XHQgKiBhbmQgdGhlcmUgYXJlIG9ubHkgdHdvIGNvbnRleHRzIHBlciBnbG9iYWwgc3VicHJvZy5cbiBcdCAqL1xuIFx0aWYgKG5ld19jbnQpXG4gXHRcdGdvdG8gYWdhaW47XG5AQCAtMTk4MDAsNyAmIzQzOzE5ODE3LDcgQEAgc3RhdGljIGludCBkb19jaGVja19tYWluKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRpbnQgcmV0O1xuIFxuIFx0ZW52LVx1MDAzZWluc25faWR4ID0gMDtcbi1cdHJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIDApO1xuJiM0MztcdHJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIDAsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZXNsZWVwYWJsZSk7XG4gXHRpZiAoIXJldClcbiBcdFx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZXN0YWNrX2RlcHRoID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1swXS5zdGFja19kZXB0aDtcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcbmluZGV4IDZiZjk1NTUwYTAyNDguLjk4N2NhOWRlYzZiN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jXG5AQCAtOSw2ICYjNDM7OSwxMSBAQFxuIFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4gXG4mIzQzO3N0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbiYjNDM7dm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xuJiM0Mzt2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbiYjNDM7dm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbiYjNDM7XG4gLyogVGltZXIgdGVzdHMgKi9cbiBcbiBzdHJ1Y3QgdGltZXJfZWxlbSB7XG5AQCAtNjYsNiAmIzQzOzcxLDcgQEAgaW50IHRpbWVyX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcbiBcbiBzdHJ1Y3Qgd3FfZWxlbSB7XG4gXHRzdHJ1Y3QgYnBmX3dxIHc7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0IF9fa3B0ciAqdGFzaztcbiB9O1xuIFxuIHN0cnVjdCB7XG5AQCAtMTE5LDYgJiM0MzsxMjUsMTA2IEBAIGludCB3cV9zbGVlcGFibGVfcHJvZyh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO19fbm9pbmxpbmUgaW50IHdxX2dsb2JhbF9hY3F1aXJlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssICphY3F1aXJlZDtcbiYjNDM7XHRzdHJ1Y3Qgd3FfZWxlbSAqdmFsO1xuJiM0MztcdGludCBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndxX21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHR0YXNrID0gdmFsLVx1MDAzZXRhc2s7XG4mIzQzO1x0aWYgKCF0YXNrKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZSh0YXNrKTtcbiYjNDM7XHRpZiAoYWNxdWlyZWQpXG4mIzQzO1x0XHRicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB3cV9nbG9iYWxfcmN1X2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0d3FfZ2xvYmFsX2FjcXVpcmUoKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2ZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyXCYjMzQ7KVxuJiM0MztpbnQgd3FfZ2xvYmFsX3JjdV9wcm9nKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3cV9lbGVtICp2YWw7XG4mIzQzO1x0aW50IGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2d3FfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl93cV9pbml0KFx1MDAyNnZhbC1cdTAwM2V3LCBcdTAwMjZ3cV9tYXAsIDApO1xuJiM0MztcdGJwZl93cV9zZXRfY2FsbGJhY2soXHUwMDI2dmFsLVx1MDAzZXcsIHdxX2dsb2JhbF9yY3VfY2IsIDApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdxX2dsb2JhbF9yY3VfbG9ja19jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0d3FfZ2xvYmFsX2FjcXVpcmUoKTtcbiYjNDM7XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCB3cV9nbG9iYWxfcmN1X2xvY2tfcHJvZyh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3FfZWxlbSAqdmFsO1xuJiM0MztcdGludCBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiBWZXJpZnkgdGhlIHNhbWUgZ2xvYmFsIHN1YnByb2cgaW4gbm9uLXNsZWVwYWJsZSBhbmQgcHJvdGVjdGVkIGNvbnRleHRzLiAqL1xuJiM0MztcdHdxX2dsb2JhbF9hY3F1aXJlKCk7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2d3FfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl93cV9pbml0KFx1MDAyNnZhbC1cdTAwM2V3LCBcdTAwMjZ3cV9tYXAsIDApO1xuJiM0MztcdGJwZl93cV9zZXRfY2FsbGJhY2soXHUwMDI2dmFsLVx1MDAzZXcsIHdxX2dsb2JhbF9yY3VfbG9ja19jYiwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fbm9pbmxpbmUgaW50IHdxX2dsb2JhbF9ub19yY3Uodm9pZClcbiYjNDM7e1xuJiM0MztcdGJhcnJpZXIoKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB3cV9nbG9iYWxfbm9fcmN1X2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0d3FfZ2xvYmFsX25vX3JjdSgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgd3FfZ2xvYmFsX25vX3JjdV9wcm9nKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3cV9lbGVtICp2YWw7XG4mIzQzO1x0aW50IGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIFZlcmlmeSB0aGUgc2FtZSBnbG9iYWwgaW4gbm9uLXNsZWVwYWJsZSBhbmQgdW5wcm90ZWN0ZWQgY29udGV4dHMuICovXG4mIzQzO1x0d3FfZ2xvYmFsX25vX3JjdSgpO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndxX21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfd3FfaW5pdChcdTAwMjZ2YWwtXHUwMDNldywgXHUwMDI2d3FfbWFwLCAwKTtcbiYjNDM7XHRicGZfd3Ffc2V0X2NhbGxiYWNrKFx1MDAyNnZhbC1cdTAwM2V3LCB3cV9nbG9iYWxfbm9fcmN1X2NiLCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBUYXNrIHdvcmsgdGVzdHMgKi9cbiBcbiBzdHJ1Y3QgdGFza193b3JrX2VsZW0ge1xuQEAgLTE3OSwzICYjNDM7Mjg1LDI5IEBAIGludCB0YXNrX3dvcmtfc2xlZXBhYmxlX3Byb2codm9pZCAqY3R4KVxuIFx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2dmFsLVx1MDAzZXR3LCBcdTAwMjZ0YXNrX3dvcmtfbWFwLCB0YXNrX3dvcmtfY2IpO1xuIFx0cmV0dXJuIDA7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0YXNrX3dvcmtfZ2xvYmFsX3JjdV9jYihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHdxX2dsb2JhbF9hY3F1aXJlKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O1IxIG11c3QgYmUgYSByY3UgcG9pbnRlclwmIzM0OylcbiYjNDM7aW50IHRhc2tfd29ya19nbG9iYWxfcmN1X3Byb2codm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfd29ya19lbGVtICp2YWw7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuJiM0MztcdGludCBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRhc2tfd29ya19tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuJiM0MztcdGlmICghdGFzaylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSh0YXNrLCBcdTAwMjZ2YWwtXHUwMDNldHcsIFx1MDAyNnRhc2tfd29ya19tYXAsXG4mIzQzO1x0XHRcdFx0ICAgICAgdGFza193b3JrX2dsb2JhbF9yY3VfY2IpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfc3VicHJvZ3MmIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfY29tbW9uJiMzNDssCiAgICAmIzM0O2NoZWNrX2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDtkb19jaGVja19tYWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdHJhY2sgYW5kIHZlcmlmeSBnbG9iYWwgc3VicHJvZ3JhbXMgc2VwYXJhdGVseSBhY3Jvc3Mgc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIGV4ZWN1dGlvbiBjb250ZXh0cywgbW9kaWZ5aW5nIHN1YnByb2dyYW0gdmVyaWZpY2F0aW9uIGxvb3BzLCB0b3BvbG9naWNhbCB0cmF2ZXJzYWwgb3JkZXIsIGFuZCBjb250ZXh0IHN0YXRlIGhhbmRsaW5nIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU2ZWZhNjAzYTBkNTIyZTZlZWM2MzIzMGQxOWE2ZTI2MGRmZWUzZDgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDEwOjA1OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmgKaW5kZXggM2E3ZWIyMTg1YzM1NC4uNjZkMDQyNDRjNzM3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi5oCkBAIC0xNjUwLDggJiM0MzsxNjUwLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MKIHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCB7CiAJdTE2IGxpbmthZ2U7CiAJYm9vbCB1bnJlbGlhYmxlOwotCWJvb2wgY2FsbGVkIDogMTsKLQlib29sIHZlcmlmaWVkIDogMTsKJiM0MzsJLyogSW5kZXhlZCBieSBpbl9zbGVlcGFibGUuICovCiYjNDM7CWJvb2wgY2FsbGVkWzJdOwomIzQzOwlib29sIHZlcmlmaWVkWzJdOwogfTsKIAogZW51bSBicGZfaml0X3Bva2VfcmVhc29uIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA1YjUxZTdlZTFhM2Y5Li5mNzU5YTAyMGM4YTVhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC05OTU3LDYgJiM0Mzs5OTU3LDcgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCWlmIChlcnIgPT0gLUVGQVVMVCkKIAkJcmV0dXJuIGVycjsKIAlpZiAoYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGVudiwgc3VicHJvZykpIHsKJiM0MzsJCXN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgc3VicHJvZyk7CiAJCWNvbnN0IGNoYXIgKnN1Yl9uYW1lID0gYnBmX3N1YnByb2dfbmFtZShlbnYsIHN1YnByb2cpOwogCQljb25zdCBjaGFyICpvcGVyYXRpb247CiAJCWJvb2wgcmV0dXJuc192b2lkOwpAQCAtOTk4OCwxMSAmIzQzOzk5ODksMTAgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQlpZiAoZW52LSZndDtsb2cubGV2ZWwgJmFtcDsgQlBGX0xPR19MRVZFTCkKIAkJCXZlcmJvc2UoZW52LCAmIzM0O0Z1bmMjJWQgKCYjMzk7JXMmIzM5OykgaXMgZ2xvYmFsIGFuZCBhc3N1bWVkIHZhbGlkLlxuJiMzNDssCiAJCQkJc3VicHJvZywgc3ViX25hbWUpOwomIzQzOwkJc3ViX2F1eC0mZ3Q7Y2FsbGVkW2luX3NsZWVwYWJsZV9jb250ZXh0KGVudildID0gdHJ1ZTsKIAkJcmV0dXJuc192b2lkID0gc3VicHJvZ19yZXR1cm5zX3ZvaWQoZW52LCBzdWJwcm9nKTsKIAkJaWYgKGVudi0mZ3Q7c3VicHJvZ19pbmZvW3N1YnByb2ddLmNoYW5nZXNfcGt0X2RhdGEpCiAJCQljbGVhcl9hbGxfcGt0X3BvaW50ZXJzKGVudik7Ci0JCS8qIG1hcmsgZ2xvYmFsIHN1YnByb2cgZm9yIHZlcmlmeWluZyBhZnRlciBtYWluIHByb2cgKi8KLQkJc3VicHJvZ19hdXgoZW52LCBzdWJwcm9nKS0mZ3Q7Y2FsbGVkID0gdHJ1ZTsKIAkJaWYgKHJldHVybnNfdm9pZCkKIAkJCWJwZl9kaWFnX3JlY29yZF9zY3J1YihlbnYsICZhbXA7Y2FsbGVyLSZndDtyZWdzW0JQRl9SRUdfMF0sIEJQRl9ESUFHX01PRF9DQUxMRVJfU0FWRUQpOwogCQllbHNlCkBAIC0xMDgwNCw3ICYjNDM7MTA4MDQsMTIgQEAgaW50IGJwZl9nZXRfaGVscGVyX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBmdW5jX2lkLAogCXJldHVybiAqcHRyICZhbXA7JmFtcDsgKCpwdHIpLSZndDtmdW5jID8gMCA6IC1FSU5WQUw7CiB9CiAKLS8qIENoZWNrIGlmIHdlJiMzOTtyZSBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LiAqLwomIzQzOy8qCiYjNDM7ICogVGhpcyBwcmVkaWNhdGUgaXMgdGhlIGludmVyc2Ugb2YgaW5fcmN1X2NzKCk6IG5vbi1zbGVlcGFibGUgcHJvZ3JhbXMgYW5kCiYjNDM7ICogZXZlcnkgY29uZGl0aW9uIHRoYXQgcHJldmVudHMgc2xlZXBpbmcgYWxzbyBwcm92aWRlIFJDVSBwcm90ZWN0aW9uLiBHbG9iYWwKJiM0MzsgKiBzdWJwcm9nIHZlcmlmaWNhdGlvbiByZWxpZXMgb24gdGhpcyBlcXVpdmFsZW5jZSB0byByZXByZXNlbnQgdGhlIGNhbGxlciYjMzk7cwomIzQzOyAqIGV4ZWN1dGlvbiBjb250ZXh0IHVzaW5nIG9ubHkgdGhlIGluX3NsZWVwYWJsZSBiaXQuCiYjNDM7ICovCiBzdGF0aWMgaW5saW5lIGJvb2wgaW5fc2xlZXBhYmxlX2NvbnRleHQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKIAlyZXR1cm4gIWVudi0mZ3Q7Y3VyX3N0YXRlLSZndDthY3RpdmVfcmN1X2xvY2tzICZhbXA7JmFtcDsKQEAgLTE5NTYwLDEzICYjNDM7MTk1NjUsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9zdGF0ZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKQomIzQzO3N0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBib29sIGluX3NsZWVwYWJsZSkKIHsKIAlib29sIHBvcF9sb2cgPSAhKGVudi0mZ3Q7bG9nLmxldmVsICZhbXA7IEJQRl9MT0dfTEVWRUwyKTsKIAlzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3ViID0gc3VicHJvZ19pbmZvKGVudiwgc3VicHJvZyk7CiAJc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZW52LSZndDtwcm9nLSZndDthdXg7CiAJc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3RhdGU7CiAJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3M7CiYjNDM7CXUzMiBvbGRfaW5zbnNfdG90YWwgPSBzdWItJmd0O2luc25zX3RvdGFsOwogCXUzMiBpbnNuX3Byb2Nlc3NlZCA9IGVudi0mZ3Q7aW5zbl9wcm9jZXNzZWQ7CiAJaW50IHJldCwgaTsKIApAQCAtMTk1NzksNyAmIzQzOzE5NTg1LDcgQEAgc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpCiAJc3RhdGUtJmd0O2N1cmZyYW1lID0gMDsKIAlzdGF0ZS0mZ3Q7c3BlY3VsYXRpdmUgPSBmYWxzZTsKIAlzdGF0ZS0mZ3Q7YnJhbmNoZXMgPSAxOwotCXN0YXRlLSZndDtpbl9zbGVlcGFibGUgPSBlbnYtJmd0O3Byb2ctJmd0O3NsZWVwYWJsZTsKJiM0MzsJc3RhdGUtJmd0O2luX3NsZWVwYWJsZSA9IGluX3NsZWVwYWJsZTsKIAlzdGF0ZS0mZ3Q7ZnJhbWVbMF0gPSBremFsbG9jX29iaihzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFzdGF0ZS0mZ3Q7ZnJhbWVbMF0pIHsKIAkJa2ZyZWUoc3RhdGUpOwpAQCAtMTk3MjEsNyAmIzQzOzE5NzI3LDggQEAgc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpCiAJICogQWNjdW11bGF0ZSB0aGVpciB0b3RhbCBjb3VudHMgYXMgdG90YWwgY291bnRzIG9mIHRoZSBtYWluIG9yCiAJICogZ2xvYmFsIHN1YnByb2cgaG9zdGluZyB0aGUgYXN5bmMgY2FsbC4KIAkgKi8KLQllbnYtJmd0O3N1YnByb2dfaW5mb1tzdWJwcm9nXS5pbnNuc190b3RhbCA9IGVudi0mZ3Q7aW5zbl9wcm9jZXNzZWQgLSBpbnNuX3Byb2Nlc3NlZDsKJiM0MzsJZW52LSZndDtzdWJwcm9nX2luZm9bc3VicHJvZ10uaW5zbnNfdG90YWwgPSBvbGRfaW5zbnNfdG90YWwgJiM0MzsKJiM0MzsJCQkJCQkoZW52LSZndDtpbnNuX3Byb2Nlc3NlZCAtIGluc25fcHJvY2Vzc2VkKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xOTc0OSw0NSAmIzQzOzE5NzU2LDU1IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtJmd0O3Byb2ctJmd0O2F1eDsKIAlzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXggKnN1Yl9hdXg7Ci0JaW50IGksIHJldCwgbmV3X2NudDsKJiM0MzsJaW50IGNvbnRleHQsIGksIGosIHJldCwgbmV3X2NudDsKIAogCWlmICghYXV4LSZndDtmdW5jX2luZm8pCiAJCXJldHVybiAwOwogCiAJLyogZXhjZXB0aW9uIGNhbGxiYWNrIGlzIHByZXN1bWVkIHRvIGJlIGFsd2F5cyBjYWxsZWQgKi8KLQlpZiAoZW52LSZndDtleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZykKLQkJc3VicHJvZ19hdXgoZW52LCBlbnYtJmd0O2V4Y2VwdGlvbl9jYWxsYmFja19zdWJwcm9nKS0mZ3Q7Y2FsbGVkID0gdHJ1ZTsKJiM0MzsJaWYgKGVudi0mZ3Q7ZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpIHsKJiM0MzsJCXN1Yl9hdXggPSBzdWJwcm9nX2F1eChlbnYsIGVudi0mZ3Q7ZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpOwomIzQzOwkJc3ViX2F1eC0mZ3Q7Y2FsbGVkW2Vudi0mZ3Q7cHJvZy0mZ3Q7c2xlZXBhYmxlXSA9IHRydWU7CiYjNDM7CX0KIAogYWdhaW46CiAJbmV3X2NudCA9IDA7Ci0JZm9yIChpID0gMTsgaSAmbHQ7IGVudi0mZ3Q7c3VicHJvZ19jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CS8qCiYjNDM7CSAqIFdhbGsgY2FsbGVycyBiZWZvcmUgY2FsbGVlcyBzbyBlYWNoIGdsb2JhbCBzdWJwcm9nIG5vcm1hbGx5IHNlZXMgYWxsCiYjNDM7CSAqIG9mIGl0cyBjb250ZXh0cyBiZWZvcmUgaXQgaXMgdmVyaWZpZWQuIEFzeW5jIGNhbGxiYWNrIGN5Y2xlcyBjYW4gYWRkIGEKJiM0MzsJICogY29udGV4dCB0byBhbiBlYXJsaWVyIHN1YnByb2csIHNvIHJlcGVhdCB1bnRpbCBldmVyeSBjYWxsZWQgY29udGV4dCBpcwomIzQzOwkgKiB2ZXJpZmllZC4KJiM0MzsJICovCiYjNDM7CWZvciAoaiA9IGVudi0mZ3Q7c3VicHJvZ19jbnQgLSAxOyBqICZndDs9IDA7IGotLSkgewomIzQzOwkJaSA9IGVudi0mZ3Q7c3VicHJvZ190b3BvX29yZGVyW2pdOwomIzQzOwkJaWYgKCFpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlpZiAoIWJwZl9zdWJwcm9nX2lzX2dsb2JhbChlbnYsIGkpKQogCQkJY29udGludWU7CiAKIAkJc3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgaSk7Ci0JCWlmICghc3ViX2F1eC0mZ3Q7Y2FsbGVkIHx8IHN1Yl9hdXgtJmd0O3ZlcmlmaWVkKQotCQkJY29udGludWU7CiYjNDM7CQlmb3IgKGNvbnRleHQgPSAwOyBjb250ZXh0ICZsdDsgQVJSQVlfU0laRShzdWJfYXV4LSZndDtjYWxsZWQpOyBjb250ZXh0JiM0MzsmIzQzOykgewomIzQzOwkJCWlmICghc3ViX2F1eC0mZ3Q7Y2FsbGVkW2NvbnRleHRdIHx8IHN1Yl9hdXgtJmd0O3ZlcmlmaWVkW2NvbnRleHRdKQomIzQzOwkJCQljb250aW51ZTsKIAotCQllbnYtJmd0O2luc25faWR4ID0gZW52LSZndDtzdWJwcm9nX2luZm9baV0uc3RhcnQ7Ci0JCVdBUk5fT05fT05DRShlbnYtJmd0O2luc25faWR4ID09IDApOwotCQlyZXQgPSBkb19jaGVja19jb21tb24oZW52LCBpKTsKLQkJaWYgKHJldCkgewotCQkJcmV0dXJuIHJldDsKLQkJfSBlbHNlIGlmIChlbnYtJmd0O2xvZy5sZXZlbCAmYW1wOyBCUEZfTE9HX0xFVkVMKSB7Ci0JCQl2ZXJib3NlKGVudiwgJiMzNDtGdW5jIyVkICgmIzM5OyVzJiMzOTspIGlzIHNhZmUgZm9yIGFueSBhcmdzIHRoYXQgbWF0Y2ggaXRzIHByb3RvdHlwZVxuJiMzNDssCi0JCQkJaSwgYnBmX3N1YnByb2dfbmFtZShlbnYsIGkpKTsKLQkJfQomIzQzOwkJCWVudi0mZ3Q7aW5zbl9pZHggPSBlbnYtJmd0O3N1YnByb2dfaW5mb1tpXS5zdGFydDsKJiM0MzsJCQlXQVJOX09OX09OQ0UoZW52LSZndDtpbnNuX2lkeCA9PSAwKTsKJiM0MzsJCQlyZXQgPSBkb19jaGVja19jb21tb24oZW52LCBpLCBjb250ZXh0KTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJCWlmIChlbnYtJmd0O2xvZy5sZXZlbCAmYW1wOyBCUEZfTE9HX0xFVkVMKQomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDtGdW5jIyVkICgmIzM5OyVzJiMzOTspIGlzIHNhZmUgZm9yIGFueSBhcmdzICYjMzQ7CiYjNDM7CQkJCQkmIzM0O3RoYXQgbWF0Y2ggaXRzIHByb3RvdHlwZVxuJiMzNDssCiYjNDM7CQkJCQlpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgaSkpOwogCi0JCS8qIFdlIHZlcmlmaWVkIG5ldyBnbG9iYWwgc3VicHJvZywgaXQgbWlnaHQgaGF2ZSBjYWxsZWQgc29tZQotCQkgKiBtb3JlIGdsb2JhbCBzdWJwcm9ncyB0aGF0IHdlIGhhdmVuJiMzOTt0IHZlcmlmaWVkIHlldCwgc28gd2UKLQkJICogbmVlZCB0byBkbyBhbm90aGVyIHBhc3Mgb3ZlciBzdWJwcm9ncyB0byB2ZXJpZnkgdGhvc2UuCi0JCSAqLwotCQlzdWJfYXV4LSZndDt2ZXJpZmllZCA9IHRydWU7Ci0JCW5ld19jbnQmIzQzOyYjNDM7OwomIzQzOwkJCXN1Yl9hdXgtJmd0O3ZlcmlmaWVkW2NvbnRleHRdID0gdHJ1ZTsKJiM0MzsJCQluZXdfY250JiM0MzsmIzQzOzsKJiM0MzsJCX0KIAl9CiAKLQkvKiBXZSBjYW4mIzM5O3QgbG9vcCBmb3JldmVyIGFzIHdlIHZlcmlmeSBhdCBsZWFzdCBvbmUgZ2xvYmFsIHN1YnByb2cgb24KLQkgKiBlYWNoIHBhc3MuCiYjNDM7CS8qCiYjNDM7CSAqIFdlIGNhbiYjMzk7dCBsb29wIGZvcmV2ZXIgYXMgZWFjaCBwYXNzIHZlcmlmaWVzIGF0IGxlYXN0IG9uZSBuZXcgY29udGV4dCwKJiM0MzsJICogYW5kIHRoZXJlIGFyZSBvbmx5IHR3byBjb250ZXh0cyBwZXIgZ2xvYmFsIHN1YnByb2cuCiAJICovCiAJaWYgKG5ld19jbnQpCiAJCWdvdG8gYWdhaW47CkBAIC0xOTgwMCw3ICYjNDM7MTk4MTcsNyBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX21haW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAlpbnQgcmV0OwogCiAJZW52LSZndDtpbnNuX2lkeCA9IDA7Ci0JcmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgMCk7CiYjNDM7CXJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIDAsIGVudi0mZ3Q7cHJvZy0mZ3Q7c2xlZXBhYmxlKTsKIAlpZiAoIXJldCkKIAkJZW52LSZndDtwcm9nLSZndDthdXgtJmd0O3N0YWNrX2RlcHRoID0gZW52LSZndDtzdWJwcm9nX2luZm9bMF0uc3RhY2tfZGVwdGg7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jCmluZGV4IDZiZjk1NTUwYTAyNDguLjk4N2NhOWRlYzZiN2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYwpAQCAtOSw2ICYjNDM7OSwxMSBAQAogCiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiAKJiM0MztzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJwZl90YXNrX2FjcXVpcmUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07CiYjNDM7dm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiYjNDM7CiAvKiBUaW1lciB0ZXN0cyAqLwogCiBzdHJ1Y3QgdGltZXJfZWxlbSB7CkBAIC02Niw2ICYjNDM7NzEsNyBAQCBpbnQgdGltZXJfc2xlZXBhYmxlX3Byb2codm9pZCAqY3R4KQogCiBzdHJ1Y3Qgd3FfZWxlbSB7CiAJc3RydWN0IGJwZl93cSB3OwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgX19rcHRyICp0YXNrOwogfTsKIAogc3RydWN0IHsKQEAgLTExOSw2ICYjNDM7MTI1LDEwNiBAQCBpbnQgd3Ffc2xlZXBhYmxlX3Byb2codm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7X19ub2lubGluZSBpbnQgd3FfZ2xvYmFsX2FjcXVpcmUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgKmFjcXVpcmVkOwomIzQzOwlzdHJ1Y3Qgd3FfZWxlbSAqdmFsOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3dxX21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0YXNrID0gdmFsLSZndDt0YXNrOwomIzQzOwlpZiAoIXRhc2spCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHRhc2spOwomIzQzOwlpZiAoYWNxdWlyZWQpCiYjNDM7CQlicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3FfZ2xvYmFsX3JjdV9jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXdxX2dsb2JhbF9hY3F1aXJlKCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1IxIG11c3QgYmUgYSByY3UgcG9pbnRlciYjMzQ7KQomIzQzO2ludCB3cV9nbG9iYWxfcmN1X3Byb2codm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHdxX2VsZW0gKnZhbDsKJiM0MzsJaW50IGtleSA9IDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDt3cV9tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX3dxX2luaXQoJmFtcDt2YWwtJmd0O3csICZhbXA7d3FfbWFwLCAwKTsKJiM0MzsJYnBmX3dxX3NldF9jYWxsYmFjaygmYW1wO3ZhbC0mZ3Q7dywgd3FfZ2xvYmFsX3JjdV9jYiwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdxX2dsb2JhbF9yY3VfbG9ja19jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXdxX2dsb2JhbF9hY3F1aXJlKCk7CiYjNDM7CWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IHdxX2dsb2JhbF9yY3VfbG9ja19wcm9nKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3cV9lbGVtICp2YWw7CiYjNDM7CWludCBrZXkgPSAwOwomIzQzOwomIzQzOwkvKiBWZXJpZnkgdGhlIHNhbWUgZ2xvYmFsIHN1YnByb2cgaW4gbm9uLXNsZWVwYWJsZSBhbmQgcHJvdGVjdGVkIGNvbnRleHRzLiAqLwomIzQzOwl3cV9nbG9iYWxfYWNxdWlyZSgpOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7d3FfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl93cV9pbml0KCZhbXA7dmFsLSZndDt3LCAmYW1wO3dxX21hcCwgMCk7CiYjNDM7CWJwZl93cV9zZXRfY2FsbGJhY2soJmFtcDt2YWwtJmd0O3csIHdxX2dsb2JhbF9yY3VfbG9ja19jYiwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztfX25vaW5saW5lIGludCB3cV9nbG9iYWxfbm9fcmN1KHZvaWQpCiYjNDM7ewomIzQzOwliYXJyaWVyKCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdxX2dsb2JhbF9ub19yY3VfY2Iodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpCiYjNDM7ewomIzQzOwl3cV9nbG9iYWxfbm9fcmN1KCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MSYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCB3cV9nbG9iYWxfbm9fcmN1X3Byb2codm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHdxX2VsZW0gKnZhbDsKJiM0MzsJaW50IGtleSA9IDA7CiYjNDM7CiYjNDM7CS8qIFZlcmlmeSB0aGUgc2FtZSBnbG9iYWwgaW4gbm9uLXNsZWVwYWJsZSBhbmQgdW5wcm90ZWN0ZWQgY29udGV4dHMuICovCiYjNDM7CXdxX2dsb2JhbF9ub19yY3UoKTsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3dxX21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfd3FfaW5pdCgmYW1wO3ZhbC0mZ3Q7dywgJmFtcDt3cV9tYXAsIDApOwomIzQzOwlicGZfd3Ffc2V0X2NhbGxiYWNrKCZhbXA7dmFsLSZndDt3LCB3cV9nbG9iYWxfbm9fcmN1X2NiLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogVGFzayB3b3JrIHRlc3RzICovCiAKIHN0cnVjdCB0YXNrX3dvcmtfZWxlbSB7CkBAIC0xNzksMyAmIzQzOzI4NSwyOSBAQCBpbnQgdGFza193b3JrX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eCkKIAlicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSh0YXNrLCAmYW1wO3ZhbC0mZ3Q7dHcsICZhbXA7dGFza193b3JrX21hcCwgdGFza193b3JrX2NiKTsKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRhc2tfd29ya19nbG9iYWxfcmN1X2NiKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gd3FfZ2xvYmFsX2FjcXVpcmUoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7ZmVudHJ5L2JwZl9mZW50cnlfdGVzdDEmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXImIzM0OykKJiM0MztpbnQgdGFza193b3JrX2dsb2JhbF9yY3VfcHJvZyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza193b3JrX2VsZW0gKnZhbDsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3Rhc2tfd29ya19tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlpZiAoIXRhc2spCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgJmFtcDt2YWwtJmd0O3R3LCAmYW1wO3Rhc2tfd29ya19tYXAsCiYjNDM7CQkJCSAgICAgIHRhc2tfd29ya19nbG9iYWxfcmN1X2NiKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODg4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhcyBJIGxvb2sgb3ZlciB0aGlzIHBhdGNoIHNlcmllcyBmb3IgdGhlIGtlcm5lbC4gVGhlIHVzZXIgd2FudHMgbWUgdG8gYW5hbHl6ZSB0aGlzLCBhbmQgbXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIHRvdWNoZXMgc29tZXRoaW5nIGltcG9ydGFudCwgdGhlIEJQRiB2ZXJpZmllci4KCkZpcnN0LCBJIHNlZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSBpbiBgaW5jbHVkZS9saW51eC9icGYuaGAgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiAgU3BlY2lmaWNhbGx5LCB0aGUgc3RydWN0IGBicGZfZnVuY19pbmZvX2F1eGAgaGFzIGJlZW4gbW9kaWZpZWQuIFRoZSBgY2FsbGVkYCBhbmQgYHZlcmlmaWVkYCBib29sZWFucyBhcmUgbm93IGFycmF5cyBvZiB0d28gZWxlbWVudHMsIGBjYWxsZWRbMl1gIGFuZCBgdmVyaWZpZWRbMl1gLiAgVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFdoeSB0d28/ICBJIHN1c3BlY3QgdGhpcyByZWxhdGVzIHRvIHRyYWNraW5nIHZlcmlmaWNhdGlvbiBzdGF0ZSBpbiBkaWZmZXJlbnQgY29udGV4dHMgLSBsaWtlbHkgc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIG9uZXMsIHdoaWNoIGlzIGNvbmZpcm1lZCBsYXRlci4KCkxvb2tpbmcgZGVlcGVyIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIEkgc2VlIGZ1bmN0aW9ucyBsaWtlIGBjaGVja19mdW5jX2NhbGxgLCBgZG9fY2hlY2tfY29tbW9uYCwgYGRvX2NoZWNrX3N1YnByb2dzYCwgYW5kIGBkb19jaGVja19tYWluYCBhcmUgdGhlIGZvY3VzLiBJIG5vdGljZSBgaW5fc2xlZXBhYmxlX2NvbnRleHQoKWAgaXMgdXNlZCwgYW5kIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBzdHJhdGVnaWNhbGx5IG1hcmtpbmcgZnVuY3Rpb24gY2FsbHMgYXMgYGNhbGxlZGAgYW5kIGB2ZXJpZmllZGAgaW4gZGlmZmVyZW50IGNvbnRleHRzLCBiYXNlZCBvbiB3aGV0aGVyIHRoZSBwcm9ncmFtIGlzIG9wZXJhdGluZyBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCB3aGljaCBpcyBsaWtlbHkgY3JpdGljYWwuICBUaGUgYGRvX2NoZWNrX3N1YnByb2dzYCBmdW5jdGlvbiBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuICBJdCBub3cgaGFuZGxlcyBhbiBleGNlcHRpb24gY2FsbGJhY2sgYW5kIGl0ZXJhdGVzIHRocm91Z2ggc3VicHJvZ3JhbXMgaW4gYSB0b3BvbG9naWNhbCBvcmRlci4gSXQgZG9lcyBhIGxvb3AgYGZvciAoY29udGV4dCA9IDA7IGNvbnRleHQgJmx0OyBBUlJBWV9TSVpFKHN1Yl9hdXgtJmd0O2NhbGxlZCk7IGNvbnRleHQmIzQzOyYjNDM7KWAgLSB0aGlzIGlzIHRoZSBrZXkuICBJdCBkb2VzICptdWx0aXBsZSogdmVyaWZpY2F0aW9uIHBhc3NlcyBwZXIgY29udGV4dCEgVGhhdCYjMzk7cyBhIHN0cm9uZyBzaWduYWwgb2Ygc2lnbmlmaWNhbnQgbG9naWMgY2hhbmdlLgoKVGhlbiBgZG9fY2hlY2tfbWFpbmAgY2FsbHMgYGRvX2NoZWNrX2NvbW1vbmAsIGFnYWluIGxpbmtpbmcgdmVyaWZpY2F0aW9uIHRvIHRoZSBzbGVlcGFibGUgY29udGV4dC4gVGhlIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgYWNjdW11bGF0aW5nIHRvdGFsIGluc3RydWN0aW9uIGNvdW50IGluIGBkb19jaGVja19jb21tb25gIGFsc28gbmVlZCB0byBiZSBzY3J1dGluaXplZCBmb3IgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGluc3RydWN0aW9uIGNvdW50aW5nIGFjcm9zcyB0aGVzZSBkaWZmZXJlbnQgdmVyaWZpY2F0aW9uIHN0YXRlcy4KCk5vdywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBUaGUgQlBGIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgcGF0aCBhbmQgZWFzaWx5IHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgc3lzY2FsbC4gU3l6a2FsbGVyJiMzOTtzIGRlZXAgQlBGIHN1cHBvcnQgbWFrZXMgaXQgZXZlbiBlYXNpZXIgdG8gdHJpZ2dlci4gVGhlIGNvcmUgc3Vic3lzdGVtLCBsb2dpYyBjaGFuZ2VzIGFyb3VuZCBzbGVlcGFibGUgdnMuIG5vbi1zbGVlcGFibGUgY29udGV4dHMsIHRoZSB0b3BvbG9naWNhbCBvcmRlciBsb29wIGFuZCBlc3BlY2lhbGx5IHRoZSBtdWx0aXBsZSB2ZXJpZmljYXRpb24gcGFzc2VzIHBlciBjb250ZXh0LCBhbGwgc2NyZWFtICYjMzQ7V29ydGhGdXp6aW5nPXRydWUuJiMzNDsgIFRoaXMgaXMgZGVmaW5pdGVseSBhbiBhcmVhIHdoZXJlIHN1YnRsZSBidWdzIGNvdWxkIGJlIGx1cmtpbmcuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MuIFRoZSBCUEYgdmVyaWZpZXIgd2lsbCBsaWtlbHkgcmVxdWlyZSBgQ09ORklHX0JQRl9TWVNDQUxMYCAoYW5kIHBvc3NpYmx5IGBDT05GSUdfQlBGYCkgdG8gYmUgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIG9yIGNoZWNrIHRoZSBrZXJuZWwmIzM5O3MgYEtjb25maWdgIG9yIHJlbGV2YW50IGBNYWtlZmlsZWAgZmlsZXMgdG8gdmVyaWZ5IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBiZWZvcmUgbW92aW5nIGZvcndhcmQgd2l0aCBhbnkgZnV6emluZyBwbGFucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXJpZmllclxcLmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2l0ZXIuYz03Mjc9QlBGX0NBTExfNChicGZfbG9vcCwgdTMyLCBucl9sb29wcywgdm9pZCAqLCBjYWxsYmFja19mbiwgdm9pZCAqLCBjYWxsYmFja19jdHgsXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTczNS1cdCAqIGlzIGlubGluZWQsIGJlIGNhcmVmdWwgdG8gbW9kaWZ5IHRoaXMgY29kZSBpbiBzeW5jLiBTZWVcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo3MzY6XHQgKiBmdW5jdGlvbiB2ZXJpZmllci5jOmlubGluZV9icGZfbG9vcC5cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03MzctXHQgKi9cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDY0PV9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgc3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqbWV0YSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDc1LVx0LyogVmVyaWZpZXIgc3RyaXBzIEtGX1JFVF9OVUxMIGlmIGlucHV0IGlzIG93bmVkIHJlZiwgc2VlIGlzX2tmdW5jX3JldF9udWxsXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDc2Olx0ICogaW4gdmVyaWZpZXIuY1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ3Ny1cdCAqL1xuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmM9OTkyPV9fYnBmX2tmdW5jIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYnBmX2l0ZXJfdGFza192bWFfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgKml0KVxuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTAxMS1cdCAqIFRoZSB2ZXJpZmllciBvbmx5IHRydXN0cyB2bV9tbSBhbmQgdm1fZmlsZSAoc2VlXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjEwMTI6XHQgKiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTCBpbiB2ZXJpZmllci5jKS4gVGFrZSBhIHJlZmVyZW5jZVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEzLVx0ICogb24gdm1fZmlsZTsgdm1fbW0gaXMgYWxyZWFkeSBjb3JyZWN0IGJlY2F1c2UgbG9ja192bWFfdW5kZXJfcmN1KClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ3MjA9c3RhdGljIGludCBhZGp1c3RfcHRyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODk3LVx0XHQvKiBXZSBkb24mIzM5O3QgYWxsb3cgc3VidHJhY3Rpb24gZnJvbSBGUCwgYmVjYXVzZSAoYWNjb3JkaW5nIHRvXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ4OTg6XHRcdCAqIHRlc3RfdmVyaWZpZXIuYyB0ZXN0IFwmIzM0O2ludmFsaWQgZnAgYXJpdGhtZXRpY1wmIzM0OywgSklUcyBtaWdodCBub3Rcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDg5OS1cdFx0ICogYmUgYWJsZSB0byBkZWFsIHdpdGggaXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc1NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgVmVyaWZpZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IEtjb25maWcgb3B0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgQlBGIHZlcmlmaWVyIGNvZGUsIHNwZWNpZmljYWxseSBgdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgbW92ZSB3b3VsZCBiZSB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBzdWJzeXN0ZW0gd291bGQgcmVzaWRlLCBhbmQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGFyZSB0eXBpY2FsbHkgZGVmaW5lZCBhbG9uZ3NpZGUgdGhlIHNvdXJjZSBmaWxlcy4gSG9wZWZ1bGx5LCB0aGUgaW5jbHVzaW9uIG9mIGB2ZXJpZmllci5jYCB3aWxsIGJlIGNvbmRpdGlvbmFsIGJhc2VkIG9uIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFnLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydCB0aGUgaHVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZlcmlmaWVyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTExNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIEJ1aWxkIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgYW5kIHNwZWNpZmljYWxseSBsaW5lIDkuIEl0JiMzOTtzIGJ1aWxkaW5nIHRoZSBCUEYgc3Vic3lzdGVtLCBhbmQgdGhpcyBsaW5lIGlzIGtleTogYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIC4uLmAgSSBzZWUgdGhhdCB0aGUgb2JqZWN0IGZpbGVzIGBzeXNjYWxsLm9gLCBgdmVyaWZpZXIub2AsIGBpbm9kZS5vYCwgYGhlbHBlcnMub2AgYW5kIHBvdGVudGlhbGx5IG1vcmUsIGFyZSBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBLY29uZmlnIHZhcmlhYmxlLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCB3aHkgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZGVmaW5lZC4gV2hlcmUgZG9lcyB0aGlzIGdldCBzZXQ/IEEgcXVpY2sgbG9vayBpbiBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AgaXMgZGVmaW5pdGVseSBpbiBvcmRlci4gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyBpbiBvbmUgb2YgdGhvc2UsIHNpbmNlIHRoZXkgaGFuZGxlIGEgbG90IG9mIHRoZSBpbml0aWFsIGtlcm5lbCBjb25maWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgdGhpcyBjb25maWcgb3B0aW9uIHRvIGJlIHNlbGVjdGVkLiBJcyBpdCBhIGRpcmVjdCBkZXBlbmRlbmN5PyBBbm90aGVyIG9wdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGhlIEJQRiBzeXN0ZW0gYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSBidWlsZCBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgQlBGIHN1YnN5c3RlbSYjMzk7cyBhcmNoaXRlY3R1cmUgYW5kIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUxMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBmb3IgQlBGX1NZU0NBTEwgaW4gdGhlIENvbmZpZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGBCUEZfU1lTQ0FMTGAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgYXNzdW1pbmcgaXQmIzM5O3MgbGlrZWx5IGEga2VybmVsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLCBwcm9iYWJseSB1bmRlciBvbmUgb2YgdGhlIGJyb2FkZXIgQlBGIG9yIHNlY3VyaXR5LXJlbGF0ZWQgc2VjdGlvbnMuIFNpbmNlIGl0JiMzOTtzIGEgc3lzY2FsbC1yZWxhdGVkIGZlYXR1cmUsIEkgY2FuIGFsbW9zdCBndWFyYW50ZWUgaXRzIGV4aXN0ZW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSB0aGUgc3RhbmRhcmQgdG9vbHM7IGEgYGdyZXBgIHRocm91Z2ggdGhlIGtlcm5lbCYjMzk7cyBgS2NvbmZpZ2AgZmlsZXMgc2hvdWxkIGRvIHRoZSB0cmljaywgbWF5YmUgc3RhcnRpbmcgd2l0aCBhIHdpbGRjYXJkIHNlYXJjaCBsaWtlIGBLY29uZmlnKiBCUEZfU1lTQ0FMTGAuIE9yIHBlcmhhcHMgSSB3aWxsIHVzZSAmIzM5O2ZpbmQmIzM5OyBhbmQgJiMzOTtncmVwJiMzOTsgY29tbWFuZHMgdG8gc2VhcmNoLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGNvZGViYXNlLCBJIG1pZ2h0IG5lZWQgdG8gcmVmaW5lIHRoYXQgc2VhcmNoIGlmIGl0JiMzOTtzIHRvbyBicm9hZCBpbml0aWFsbHkuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBhcm91bmQgdGhhdCBvcHRpb24g4oCTIHdoYXQgb3RoZXIgZmVhdHVyZXMgZG9lcyBpdCBlbmFibGUgb3IgZGlzYWJsZT8gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQW5kIG1vcmUgaW1wb3J0YW50bHksIHdoYXQmIzM5O3MgdGhlIGRlZmF1bHQgdmFsdWUgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0PyBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIGNoZWNrIHJlbGV2YW50IGBNYWtlZmlsZWBzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29uZmlnIG9wdGlvbiB0cmFuc2xhdGVzIGludG8gYnVpbGQgZmxhZ3MgYW5kIHVsdGltYXRlbHksIGhvdyBpdCBhZmZlY3RzIHRoZSBnZW5lcmF0ZWQga2VybmVsIGNvZGUuIElkZWFsbHksIEkmIzM5O2xsIGZpbmQgYSBjb25jaXNlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIG9wdGlvbiBhY3R1YWxseSAqZG9lcyogYWxvbmcgdGhlIHdheS4gVGhhdCYjMzk7cyB0aGUgcHJpb3JpdHkgcmlnaHQgbm93LCBmaW5kaW5nIGl0cyBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI5PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTMwLVxua2VybmVsL2JwZi9LY29uZmlnOjMxOmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk1NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEJQRiBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIEJQRi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMS4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgdGhlIGNvcmUgZGVmaW5pdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHdoYXQgb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIHRvIGdldCB0aGUgYmFzaWMgQlBGIGluZnJhc3RydWN0dXJlIHVwIGFuZCBydW5uaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB3aGV0aGVyIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBmZWF0dXJlcyBhcmUgcmVxdWlyZWQsIGFueSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgQlBGIHJlbGllcyBvbiAobGlrZSB0cmFjaW5nIG9yIGluc3RydW1lbnRhdGlvbiBjYXBhYmlsaXRpZXMsIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQpLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gc2VlIGlmIGFueSBvdGhlciBCUEYgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgYWxzbyBkZWZpbmVkIGluIHRoaXMgZmlsZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgaWYgdGhlIGRlcGVuZGVuY2llcyBtYWtlIHNlbnNlIG9yIHNlZW0gdW51c3VhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cbiAgMjY6XHRjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxuICAyNzpcdFx0Ym9vbFxuICAyODpcdFxuICAyOTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAzMDpcdFxuICAzMTpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAzMjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMzM6XHRcdHNlbGVjdCBCUEZcbiAgMzQ6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzNTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDM2Olx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDM3Olx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzODpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzk6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICA0MDpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgNDE6XHRcdGRlZmF1bHQgblxuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQ0Olx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBCUEZfSklUXG4gIDQ3Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0OTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNTA6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDUxOlx0XHRoZWxwXG4gIDUyOlx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNTM6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDU0Olx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTU6XHRcdCAgcHJvZ3JhbXMuXG4gIDU2Olx0XG4gIDU3Olx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1ODpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTk6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA2MDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDYxOlx0XG4gIDYyOlx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDYzOlx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4gIDY0Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzcyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCBleGFjdGx5ICp3aGF0KiBoYXMgY2hhbmdlZCB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci4gSXQgbG9va3MgbGlrZSB0aGUgZm9jdXMgaXMgb24gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgc2NhbiBoaWdobGlnaHRzIGEgc2V0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBjZW50cmFsIHRvIHRoZSB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSSBzZWUgYGNoZWNrX2Z1bmNfY2FsbGAsIHdoaWNoIGlzIGtleSB0byBob3cgZnVuY3Rpb24gY2FsbHMgYXJlIGhhbmRsZWQsIGFuZCBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gY2FsbGVkIGBpbl9zbGVlcGFibGVfY29udGV4dGAsIGxpa2VseSByZWxhdGVkIHRvIGNvbnRleHQgY2hlY2tzLiBUaGVuIHRoZXJlJiMzOTtzIHRoZSBjb3JlIGxvZ2ljOiBgZG9fY2hlY2tfY29tbW9uYCwgYGRvX2NoZWNrX3N1YnByb2dzYCwgYW5kIGBkb19jaGVja19tYWluYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgd29ya2hvcnNlcyBvZiB0aGUgdmVyaWZpZXIsIGVhY2ggaGFuZGxpbmcgYSBzcGVjaWZpYyBhc3BlY3QuIEFuZCBvZiBjb3Vyc2UsIHRoZSBlbnRyeSBwb2ludCwgYGJwZl9jaGVja2AsIHdoaWNoIG9yY2hlc3RyYXRlcyBldmVyeXRoaW5nIGJ5IGNhbGxpbmcgYm90aCBgZG9fY2hlY2tfbWFpbmAgYW5kIGBkb19jaGVja19zdWJwcm9nc2AuCgpNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB0aG9yb3VnaGx5IHJldmlldyBgYnBmX2NoZWNrYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250cm9sIGZsb3cgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBjYWxsIGhpZXJhcmNoeS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgcGF0aHMgb2YgZXhlY3V0aW9uIHRocm91Z2ggdGhlIGRpZmZlcmVudCBgZG9fY2hlY2tfKmAgZnVuY3Rpb25zLCBjYXJlZnVsbHkgZXhhbWluaW5nIHRoZWlyIHJvbGVzIGFuZCBkYXRhIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2RpZmllZCB2ZXJpZmllciYjMzk7cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fY2hlY2tfc3VicHJvZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTY4PXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBib29sIGluX3NsZWVwYWJsZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTQtICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3NTU6c3RhdGljIGludCBkb19jaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzU2LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjEzMDY9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDk3LVx0cmV0ID0gZG9fY2hlY2tfbWFpbihlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxNDk4Olx0cmV0ID0gcmV0ID86IGRvX2NoZWNrX3N1YnByb2dzKGVudik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE0OTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDcyCgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDYzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgd2FudGVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBtb2RpZmllZCwgc28gSSB0cmFjZWQgdGhlIGNhbGxzIHRvIGBicGZfY2hlY2tgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHByaW1hcmlseSBjYWxsZWQgYnkgYGJwZl9wcm9nX2xvYWRgIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBJIHRoZW4gZXhwYW5kZWQgbXkgZm9jdXMgdG8gaW5jbHVkZSB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCB3ZXJlIGFsc28gbW9kaWZpZWQ6IGBjaGVja19mdW5jX2NhbGxgLCBgZG9fY2hlY2tfY29tbW9uYCwgYGRvX2NoZWNrX3N1YnByb2dzYCwgYW5kIGBkb19jaGVja19tYWluYC4KCkFyZSB0aGVzZSBnb29kIHRhcmdldHMgZm9yIGZvY3VzZWQgdGVzdGluZz8gRGVmaW5pdGVseS4gYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBCUEYgdmVyaWZpZXIuIGBkb19jaGVja19zdWJwcm9nc2AgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBnaXZlbiB0aGUgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIGl0ZXJhdGluZyBvdmVyIHNsZWVwYWJsZSB2ZXJzdXMgbm9uLXNsZWVwYWJsZSBjb250ZXh0cyBhbmQgdGhlIHRvcG9sb2dpY2FsIG9yZGVyIG9mIHN1YnByb2dyYW1zLiBgZG9fY2hlY2tfY29tbW9uYCB2ZXJpZmllcyB0aGUgc3VicHJvZ3JhbXMgYW5kIHRoZSBtYWluIHByb2dyYW0gdW5kZXIgYSBnaXZlbiBzbGVlcGFibGUgY29udGV4dCwgd2hpbGUgYGNoZWNrX2Z1bmNfY2FsbGAgaGFuZGxlcyB0aGUgcHNldWRvLWNhbGxzIGFuZCBtYXJrcyB0aGUgY2FsbCBjb250ZXh0LiBBbmQgYGRvX2NoZWNrX21haW5gIGlzLCBuYXR1cmFsbHksIHRoZSBtYWluIHByb2dyYW0gdmVyaWZpZXIuCgpJdCYjMzk7cyBjbGVhciB0aGF0IHRoZXNlIGFyZSAqbm90KiB1YmlxdWl0b3VzIGhvdHBhdGhzLCB3aGljaCBpcyBnb29kLiBCUEYgdmVyaWZpY2F0aW9uIGlzIG9ubHkgdHJpZ2dlcmVkIGJ5IHRoZSBgYnBmKEJQRl9QUk9HX0xPQUQpYCBzeXNjYWxsLiBUaGlzIG5hcnJvd3MgdGhlIHNjb3BlIGFuZCBtYWtlcyB0aGVzZSBmdW5jdGlvbnMgZXZlbiBiZXR0ZXIgdGFyZ2V0cyBmb3IgZm9jdXNzZWQgYW5hbHlzaXMuCgpOb3csIGxvb2tpbmcgYXQgdGhlIG1vZGlmaWVkIGZpbGVzLCB3ZSBoYXZlIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCwgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGFuZCBhIHNlbGYtdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY2AuIFRoZSBjb25maWcgd2UgbmVlZCB0byBlbmFibGUgaXMgYEJQRl9TWVNDQUxMYC4KCkNvbnNpZGVyaW5nIHRoaXMsIHRoZSBhbmFseXNpcyBzYXlzIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gVGhlIGp1c3RpZmljYXRpb24gaXMgc29saWQ6IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgQlBGIHZlcmlmaWVyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIGhhbmRsZSBnbG9iYWwgc3VicHJvZ3JhbSB2ZXJpZmljYXRpb24gZGlmZmVyZW50bHkgYmFzZWQgb24gc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIGNvbnRleHRzLiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gbG9vcCBvcmRlcnMsIHRvcG9sb2dpY2FsIG9yZGVyaW5nLCBhbmQgY29udGV4dCB0cmFja2luZy4gQmVjYXVzZSB0aGlzIHRvdWNoZXMgY29yZSB2ZXJpZmljYXRpb24gbG9naWMgYW5kIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYGJwZihCUEZfUFJPR19MT0FEKWAgc3lzdGVtIGNhbGwsIHRoZXJlJiMzOTtzIGEgc3Ryb25nIHBvdGVudGlhbCBmb3Igc3RhdGUgdmFsaWRhdGlvbiBwcm9ibGVtcywgaW5maW5pdGUgbG9vcHMsIG9yIGV2ZW4gdmVyaWZpZXIgY3Jhc2hlcy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNoYW5nZSB3ZSB3YW50IHRvIHRhcmdldC4KClNvLCBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGVzZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfc3VicHJvZ3MmIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfY29tbW9uJiMzNDssCiAgICAmIzM0O2NoZWNrX2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDtkb19jaGVja19tYWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdHJhY2sgYW5kIHZlcmlmeSBnbG9iYWwgc3VicHJvZ3JhbXMgc2VwYXJhdGVseSBhY3Jvc3Mgc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIGV4ZWN1dGlvbiBjb250ZXh0cywgbW9kaWZ5aW5nIHN1YnByb2dyYW0gdmVyaWZpY2F0aW9uIGxvb3BzLCB0b3BvbG9naWNhbCB0cmF2ZXJzYWwgb3JkZXIsIGFuZCBjb250ZXh0IHN0YXRlIGhhbmRsaW5nIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfc3VicHJvZ3MmIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfY29tbW9uJiMzNDssCiAgICAmIzM0O2NoZWNrX2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDtkb19jaGVja19tYWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdHJhY2sgYW5kIHZlcmlmeSBnbG9iYWwgc3VicHJvZ3JhbXMgc2VwYXJhdGVseSBhY3Jvc3Mgc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIGV4ZWN1dGlvbiBjb250ZXh0cywgbW9kaWZ5aW5nIHN1YnByb2dyYW0gdmVyaWZpY2F0aW9uIGxvb3BzLCB0b3BvbG9naWNhbCB0cmF2ZXJzYWwgb3JkZXIsIGFuZCBjb250ZXh0IHN0YXRlIGhhbmRsaW5nIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdHJhY2sgYW5kIHZlcmlmeSBnbG9iYWwgc3VicHJvZ3JhbSBjYWxscyBzZXBhcmF0ZWx5IGZvciBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUvUkNVIGNvbnRleHRzLiBJdCByZXBsYWNlcyB0aGUgc2luZ2xlLWJpdCBgY2FsbGVkYCBhbmQgYHZlcmlmaWVkYCBmbGFncyBpbiBgc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4YCB3aXRoIHR3by1lbGVtZW50IGJvb2xlYW4gYXJyYXlzIGluZGV4ZWQgYnkgYGluX3NsZWVwYWJsZWAuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4gVGhlIGBicGZfZnVuY19pbmZvX2F1eGAgc3RydWN0dXJlcyBhcmUgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKHZpYSBga3phbGxvY19vYmpzYCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gYGRvX2NoZWNrX3N1YnByb2dzKClgLCBgZG9fY2hlY2tfY29tbW9uKClgLCBhbmQgYGNoZWNrX2Z1bmNfY2FsbCgpYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZSBhcnJheXMgYXJlIGluZGV4ZWQgdXNpbmcgYm9vbGVhbiB2YWx1ZXMgKDAgb3IgMSksIG1hdGNoaW5nIHRoZSBhcnJheSBkaW1lbnNpb24uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4tIEtBU0FOIC8gU3RhbmRhcmQgRGV0ZWN0b3JzOiBBbnkgbWVtb3J5IGFjY2VzcyBpc3N1ZXMgKHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHN0YXRlIGFsbG9jYXRpb24gaXNzdWVzLCBvciBsb2dpYy92ZXJpZmllciB0cmF2ZXJzYWwgYnVncykgd291bGQgYmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTZlZmE2MDNhMGQ1MjJlNmVlYzYzMjMwZDE5YTZlMjYwZGZlZTNkOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTA6MDU6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCAzYTdlYjIxODVjMzU0Li42NmQwNDI0NGM3Mzc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTE2NTAsOCAmIzQzOzE2NTAsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFncwogc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4IHsKIAl1MTYgbGlua2FnZTsKIAlib29sIHVucmVsaWFibGU7Ci0JYm9vbCBjYWxsZWQgOiAxOwotCWJvb2wgdmVyaWZpZWQgOiAxOwomIzQzOwkvKiBJbmRleGVkIGJ5IGluX3NsZWVwYWJsZS4gKi8KJiM0MzsJYm9vbCBjYWxsZWRbMl07CiYjNDM7CWJvb2wgdmVyaWZpZWRbMl07CiB9OwogCiBlbnVtIGJwZl9qaXRfcG9rZV9yZWFzb24gewpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDViNTFlN2VlMWEzZjkuLmY3NTlhMDIwYzhhNWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTk5NTcsNiAmIzQzOzk5NTcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJaWYgKGVyciA9PSAtRUZBVUxUKQogCQlyZXR1cm4gZXJyOwogCWlmIChicGZfc3VicHJvZ19pc19nbG9iYWwoZW52LCBzdWJwcm9nKSkgewomIzQzOwkJc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICpzdWJfYXV4ID0gc3VicHJvZ19hdXgoZW52LCBzdWJwcm9nKTsKIAkJY29uc3QgY2hhciAqc3ViX25hbWUgPSBicGZfc3VicHJvZ19uYW1lKGVudiwgc3VicHJvZyk7CiAJCWNvbnN0IGNoYXIgKm9wZXJhdGlvbjsKIAkJYm9vbCByZXR1cm5zX3ZvaWQ7CkBAIC05OTg4LDExICYjNDM7OTk4OSwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCWlmIChlbnYtJmd0O2xvZy5sZXZlbCAmYW1wOyBCUEZfTE9HX0xFVkVMKQogCQkJdmVyYm9zZShlbnYsICYjMzQ7RnVuYyMlZCAoJiMzOTslcyYjMzk7KSBpcyBnbG9iYWwgYW5kIGFzc3VtZWQgdmFsaWQuXG4mIzM0OywKIAkJCQlzdWJwcm9nLCBzdWJfbmFtZSk7CiYjNDM7CQlzdWJfYXV4LSZndDtjYWxsZWRbaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KV0gPSB0cnVlOwogCQlyZXR1cm5zX3ZvaWQgPSBzdWJwcm9nX3JldHVybnNfdm9pZChlbnYsIHN1YnByb2cpOwogCQlpZiAoZW52LSZndDtzdWJwcm9nX2luZm9bc3VicHJvZ10uY2hhbmdlc19wa3RfZGF0YSkKIAkJCWNsZWFyX2FsbF9wa3RfcG9pbnRlcnMoZW52KTsKLQkJLyogbWFyayBnbG9iYWwgc3VicHJvZyBmb3IgdmVyaWZ5aW5nIGFmdGVyIG1haW4gcHJvZyAqLwotCQlzdWJwcm9nX2F1eChlbnYsIHN1YnByb2cpLSZndDtjYWxsZWQgPSB0cnVlOwogCQlpZiAocmV0dXJuc192b2lkKQogCQkJYnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgJmFtcDtjYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18wXSwgQlBGX0RJQUdfTU9EX0NBTExFUl9TQVZFRCk7CiAJCWVsc2UKQEAgLTEwODA0LDcgJiM0MzsxMDgwNCwxMiBAQCBpbnQgYnBmX2dldF9oZWxwZXJfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGZ1bmNfaWQsCiAJcmV0dXJuICpwdHIgJmFtcDsmYW1wOyAoKnB0ciktJmd0O2Z1bmMgPyAwIDogLUVJTlZBTDsKIH0KIAotLyogQ2hlY2sgaWYgd2UmIzM5O3JlIGluIGEgc2xlZXBhYmxlIGNvbnRleHQuICovCiYjNDM7LyoKJiM0MzsgKiBUaGlzIHByZWRpY2F0ZSBpcyB0aGUgaW52ZXJzZSBvZiBpbl9yY3VfY3MoKTogbm9uLXNsZWVwYWJsZSBwcm9ncmFtcyBhbmQKJiM0MzsgKiBldmVyeSBjb25kaXRpb24gdGhhdCBwcmV2ZW50cyBzbGVlcGluZyBhbHNvIHByb3ZpZGUgUkNVIHByb3RlY3Rpb24uIEdsb2JhbAomIzQzOyAqIHN1YnByb2cgdmVyaWZpY2F0aW9uIHJlbGllcyBvbiB0aGlzIGVxdWl2YWxlbmNlIHRvIHJlcHJlc2VudCB0aGUgY2FsbGVyJiMzOTtzCiYjNDM7ICogZXhlY3V0aW9uIGNvbnRleHQgdXNpbmcgb25seSB0aGUgaW5fc2xlZXBhYmxlIGJpdC4KJiM0MzsgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBpbl9zbGVlcGFibGVfY29udGV4dChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogewogCXJldHVybiAhZW52LSZndDtjdXJfc3RhdGUtJmd0O2FjdGl2ZV9yY3VfbG9ja3MgJmFtcDsmYW1wOwpAQCAtMTk1NjAsMTMgJiM0MzsxOTU2NSwxNCBAQCBzdGF0aWMgdm9pZCBmcmVlX3N0YXRlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCX0KIH0KIAotc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpCiYjNDM7c3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2csIGJvb2wgaW5fc2xlZXBhYmxlKQogewogCWJvb2wgcG9wX2xvZyA9ICEoZW52LSZndDtsb2cubGV2ZWwgJmFtcDsgQlBGX0xPR19MRVZFTDIpOwogCXN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWIgPSBzdWJwcm9nX2luZm8oZW52LCBzdWJwcm9nKTsKIAlzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtJmd0O3Byb2ctJmd0O2F1eDsKIAlzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGF0ZTsKIAlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnczsKJiM0MzsJdTMyIG9sZF9pbnNuc190b3RhbCA9IHN1Yi0mZ3Q7aW5zbnNfdG90YWw7CiAJdTMyIGluc25fcHJvY2Vzc2VkID0gZW52LSZndDtpbnNuX3Byb2Nlc3NlZDsKIAlpbnQgcmV0LCBpOwogCkBAIC0xOTU3OSw3ICYjNDM7MTk1ODUsNyBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZykKIAlzdGF0ZS0mZ3Q7Y3VyZnJhbWUgPSAwOwogCXN0YXRlLSZndDtzcGVjdWxhdGl2ZSA9IGZhbHNlOwogCXN0YXRlLSZndDticmFuY2hlcyA9IDE7Ci0Jc3RhdGUtJmd0O2luX3NsZWVwYWJsZSA9IGVudi0mZ3Q7cHJvZy0mZ3Q7c2xlZXBhYmxlOwomIzQzOwlzdGF0ZS0mZ3Q7aW5fc2xlZXBhYmxlID0gaW5fc2xlZXBhYmxlOwogCXN0YXRlLSZndDtmcmFtZVswXSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBicGZfZnVuY19zdGF0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIXN0YXRlLSZndDtmcmFtZVswXSkgewogCQlrZnJlZShzdGF0ZSk7CkBAIC0xOTcyMSw3ICYjNDM7MTk3MjcsOCBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZykKIAkgKiBBY2N1bXVsYXRlIHRoZWlyIHRvdGFsIGNvdW50cyBhcyB0b3RhbCBjb3VudHMgb2YgdGhlIG1haW4gb3IKIAkgKiBnbG9iYWwgc3VicHJvZyBob3N0aW5nIHRoZSBhc3luYyBjYWxsLgogCSAqLwotCWVudi0mZ3Q7c3VicHJvZ19pbmZvW3N1YnByb2ddLmluc25zX3RvdGFsID0gZW52LSZndDtpbnNuX3Byb2Nlc3NlZCAtIGluc25fcHJvY2Vzc2VkOwomIzQzOwllbnYtJmd0O3N1YnByb2dfaW5mb1tzdWJwcm9nXS5pbnNuc190b3RhbCA9IG9sZF9pbnNuc190b3RhbCAmIzQzOwomIzQzOwkJCQkJCShlbnYtJmd0O2luc25fcHJvY2Vzc2VkIC0gaW5zbl9wcm9jZXNzZWQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE5NzQ5LDQ1ICYjNDM7MTk3NTYsNTUgQEAgc3RhdGljIGludCBkb19jaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogewogCXN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCA9IGVudi0mZ3Q7cHJvZy0mZ3Q7YXV4OwogCXN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eDsKLQlpbnQgaSwgcmV0LCBuZXdfY250OwomIzQzOwlpbnQgY29udGV4dCwgaSwgaiwgcmV0LCBuZXdfY250OwogCiAJaWYgKCFhdXgtJmd0O2Z1bmNfaW5mbykKIAkJcmV0dXJuIDA7CiAKIAkvKiBleGNlcHRpb24gY2FsbGJhY2sgaXMgcHJlc3VtZWQgdG8gYmUgYWx3YXlzIGNhbGxlZCAqLwotCWlmIChlbnYtJmd0O2V4Y2VwdGlvbl9jYWxsYmFja19zdWJwcm9nKQotCQlzdWJwcm9nX2F1eChlbnYsIGVudi0mZ3Q7ZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpLSZndDtjYWxsZWQgPSB0cnVlOwomIzQzOwlpZiAoZW52LSZndDtleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZykgewomIzQzOwkJc3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgZW52LSZndDtleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZyk7CiYjNDM7CQlzdWJfYXV4LSZndDtjYWxsZWRbZW52LSZndDtwcm9nLSZndDtzbGVlcGFibGVdID0gdHJ1ZTsKJiM0MzsJfQogCiBhZ2FpbjoKIAluZXdfY250ID0gMDsKLQlmb3IgKGkgPSAxOyBpICZsdDsgZW52LSZndDtzdWJwcm9nX2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJLyoKJiM0MzsJICogV2FsayBjYWxsZXJzIGJlZm9yZSBjYWxsZWVzIHNvIGVhY2ggZ2xvYmFsIHN1YnByb2cgbm9ybWFsbHkgc2VlcyBhbGwKJiM0MzsJICogb2YgaXRzIGNvbnRleHRzIGJlZm9yZSBpdCBpcyB2ZXJpZmllZC4gQXN5bmMgY2FsbGJhY2sgY3ljbGVzIGNhbiBhZGQgYQomIzQzOwkgKiBjb250ZXh0IHRvIGFuIGVhcmxpZXIgc3VicHJvZywgc28gcmVwZWF0IHVudGlsIGV2ZXJ5IGNhbGxlZCBjb250ZXh0IGlzCiYjNDM7CSAqIHZlcmlmaWVkLgomIzQzOwkgKi8KJiM0MzsJZm9yIChqID0gZW52LSZndDtzdWJwcm9nX2NudCAtIDE7IGogJmd0Oz0gMDsgai0tKSB7CiYjNDM7CQlpID0gZW52LSZndDtzdWJwcm9nX3RvcG9fb3JkZXJbal07CiYjNDM7CQlpZiAoIWkpCiYjNDM7CQkJY29udGludWU7CiAJCWlmICghYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGVudiwgaSkpCiAJCQljb250aW51ZTsKIAogCQlzdWJfYXV4ID0gc3VicHJvZ19hdXgoZW52LCBpKTsKLQkJaWYgKCFzdWJfYXV4LSZndDtjYWxsZWQgfHwgc3ViX2F1eC0mZ3Q7dmVyaWZpZWQpCi0JCQljb250aW51ZTsKJiM0MzsJCWZvciAoY29udGV4dCA9IDA7IGNvbnRleHQgJmx0OyBBUlJBWV9TSVpFKHN1Yl9hdXgtJmd0O2NhbGxlZCk7IGNvbnRleHQmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKCFzdWJfYXV4LSZndDtjYWxsZWRbY29udGV4dF0gfHwgc3ViX2F1eC0mZ3Q7dmVyaWZpZWRbY29udGV4dF0pCiYjNDM7CQkJCWNvbnRpbnVlOwogCi0JCWVudi0mZ3Q7aW5zbl9pZHggPSBlbnYtJmd0O3N1YnByb2dfaW5mb1tpXS5zdGFydDsKLQkJV0FSTl9PTl9PTkNFKGVudi0mZ3Q7aW5zbl9pZHggPT0gMCk7Ci0JCXJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIGkpOwotCQlpZiAocmV0KSB7Ci0JCQlyZXR1cm4gcmV0OwotCQl9IGVsc2UgaWYgKGVudi0mZ3Q7bG9nLmxldmVsICZhbXA7IEJQRl9MT0dfTEVWRUwpIHsKLQkJCXZlcmJvc2UoZW52LCAmIzM0O0Z1bmMjJWQgKCYjMzk7JXMmIzM5OykgaXMgc2FmZSBmb3IgYW55IGFyZ3MgdGhhdCBtYXRjaCBpdHMgcHJvdG90eXBlXG4mIzM0OywKLQkJCQlpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgaSkpOwotCQl9CiYjNDM7CQkJZW52LSZndDtpbnNuX2lkeCA9IGVudi0mZ3Q7c3VicHJvZ19pbmZvW2ldLnN0YXJ0OwomIzQzOwkJCVdBUk5fT05fT05DRShlbnYtJmd0O2luc25faWR4ID09IDApOwomIzQzOwkJCXJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIGksIGNvbnRleHQpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQkJaWYgKGVudi0mZ3Q7bG9nLmxldmVsICZhbXA7IEJQRl9MT0dfTEVWRUwpCiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0O0Z1bmMjJWQgKCYjMzk7JXMmIzM5OykgaXMgc2FmZSBmb3IgYW55IGFyZ3MgJiMzNDsKJiM0MzsJCQkJCSYjMzQ7dGhhdCBtYXRjaCBpdHMgcHJvdG90eXBlXG4mIzM0OywKJiM0MzsJCQkJCWksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBpKSk7CiAKLQkJLyogV2UgdmVyaWZpZWQgbmV3IGdsb2JhbCBzdWJwcm9nLCBpdCBtaWdodCBoYXZlIGNhbGxlZCBzb21lCi0JCSAqIG1vcmUgZ2xvYmFsIHN1YnByb2dzIHRoYXQgd2UgaGF2ZW4mIzM5O3QgdmVyaWZpZWQgeWV0LCBzbyB3ZQotCQkgKiBuZWVkIHRvIGRvIGFub3RoZXIgcGFzcyBvdmVyIHN1YnByb2dzIHRvIHZlcmlmeSB0aG9zZS4KLQkJICovCi0JCXN1Yl9hdXgtJmd0O3ZlcmlmaWVkID0gdHJ1ZTsKLQkJbmV3X2NudCYjNDM7JiM0Mzs7CiYjNDM7CQkJc3ViX2F1eC0mZ3Q7dmVyaWZpZWRbY29udGV4dF0gPSB0cnVlOwomIzQzOwkJCW5ld19jbnQmIzQzOyYjNDM7OwomIzQzOwkJfQogCX0KIAotCS8qIFdlIGNhbiYjMzk7dCBsb29wIGZvcmV2ZXIgYXMgd2UgdmVyaWZ5IGF0IGxlYXN0IG9uZSBnbG9iYWwgc3VicHJvZyBvbgotCSAqIGVhY2ggcGFzcy4KJiM0MzsJLyoKJiM0MzsJICogV2UgY2FuJiMzOTt0IGxvb3AgZm9yZXZlciBhcyBlYWNoIHBhc3MgdmVyaWZpZXMgYXQgbGVhc3Qgb25lIG5ldyBjb250ZXh0LAomIzQzOwkgKiBhbmQgdGhlcmUgYXJlIG9ubHkgdHdvIGNvbnRleHRzIHBlciBnbG9iYWwgc3VicHJvZy4KIAkgKi8KIAlpZiAobmV3X2NudCkKIAkJZ290byBhZ2FpbjsKQEAgLTE5ODAwLDcgJiM0MzsxOTgxNyw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfbWFpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCWludCByZXQ7CiAKIAllbnYtJmd0O2luc25faWR4ID0gMDsKLQlyZXQgPSBkb19jaGVja19jb21tb24oZW52LCAwKTsKJiM0MzsJcmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgMCwgZW52LSZndDtwcm9nLSZndDtzbGVlcGFibGUpOwogCWlmICghcmV0KQogCQllbnYtJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7c3RhY2tfZGVwdGggPSBlbnYtJmd0O3N1YnByb2dfaW5mb1swXS5zdGFja19kZXB0aDsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMKaW5kZXggNmJmOTU1NTBhMDI0OC4uOTg3Y2E5ZGVjNmI3ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jCkBAIC05LDYgJiM0Mzs5LDExIEBACiAKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKIAomIzQzO3N0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTsKJiM0Mzt2b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07CiYjNDM7dm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07CiYjNDM7dm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTsKJiM0MzsKIC8qIFRpbWVyIHRlc3RzICovCiAKIHN0cnVjdCB0aW1lcl9lbGVtIHsKQEAgLTY2LDYgJiM0Mzs3MSw3IEBAIGludCB0aW1lcl9zbGVlcGFibGVfcHJvZyh2b2lkICpjdHgpCiAKIHN0cnVjdCB3cV9lbGVtIHsKIAlzdHJ1Y3QgYnBmX3dxIHc7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCBfX2twdHIgKnRhc2s7CiB9OwogCiBzdHJ1Y3QgewpAQCAtMTE5LDYgJiM0MzsxMjUsMTA2IEBAIGludCB3cV9zbGVlcGFibGVfcHJvZyh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztfX25vaW5saW5lIGludCB3cV9nbG9iYWxfYWNxdWlyZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAqYWNxdWlyZWQ7CiYjNDM7CXN0cnVjdCB3cV9lbGVtICp2YWw7CiYjNDM7CWludCBrZXkgPSAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7d3FfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXRhc2sgPSB2YWwtJmd0O3Rhc2s7CiYjNDM7CWlmICghdGFzaykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlhY3F1aXJlZCA9IGJwZl90YXNrX2FjcXVpcmUodGFzayk7CiYjNDM7CWlmIChhY3F1aXJlZCkKJiM0MzsJCWJwZl90YXNrX3JlbGVhc2UoYWNxdWlyZWQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cV9nbG9iYWxfcmN1X2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKQomIzQzO3sKJiM0MzsJd3FfZ2xvYmFsX2FjcXVpcmUoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyJiMzNDspCiYjNDM7aW50IHdxX2dsb2JhbF9yY3VfcHJvZyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3FfZWxlbSAqdmFsOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3dxX21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfd3FfaW5pdCgmYW1wO3ZhbC0mZ3Q7dywgJmFtcDt3cV9tYXAsIDApOwomIzQzOwlicGZfd3Ffc2V0X2NhbGxiYWNrKCZhbXA7dmFsLSZndDt3LCB3cV9nbG9iYWxfcmN1X2NiLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3FfZ2xvYmFsX3JjdV9sb2NrX2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKQomIzQzO3sKJiM0MzsJYnBmX3JjdV9yZWFkX2xvY2soKTsKJiM0MzsJd3FfZ2xvYmFsX2FjcXVpcmUoKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7ZmVudHJ5L2JwZl9mZW50cnlfdGVzdDEmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgd3FfZ2xvYmFsX3JjdV9sb2NrX3Byb2codm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHdxX2VsZW0gKnZhbDsKJiM0MzsJaW50IGtleSA9IDA7CiYjNDM7CiYjNDM7CS8qIFZlcmlmeSB0aGUgc2FtZSBnbG9iYWwgc3VicHJvZyBpbiBub24tc2xlZXBhYmxlIGFuZCBwcm90ZWN0ZWQgY29udGV4dHMuICovCiYjNDM7CXdxX2dsb2JhbF9hY3F1aXJlKCk7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDt3cV9tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX3dxX2luaXQoJmFtcDt2YWwtJmd0O3csICZhbXA7d3FfbWFwLCAwKTsKJiM0MzsJYnBmX3dxX3NldF9jYWxsYmFjaygmYW1wO3ZhbC0mZ3Q7dywgd3FfZ2xvYmFsX3JjdV9sb2NrX2NiLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO19fbm9pbmxpbmUgaW50IHdxX2dsb2JhbF9ub19yY3Uodm9pZCkKJiM0Mzt7CiYjNDM7CWJhcnJpZXIoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3FfZ2xvYmFsX25vX3JjdV9jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXdxX2dsb2JhbF9ub19yY3UoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IHdxX2dsb2JhbF9ub19yY3VfcHJvZyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3FfZWxlbSAqdmFsOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJLyogVmVyaWZ5IHRoZSBzYW1lIGdsb2JhbCBpbiBub24tc2xlZXBhYmxlIGFuZCB1bnByb3RlY3RlZCBjb250ZXh0cy4gKi8KJiM0MzsJd3FfZ2xvYmFsX25vX3JjdSgpOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7d3FfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl93cV9pbml0KCZhbXA7dmFsLSZndDt3LCAmYW1wO3dxX21hcCwgMCk7CiYjNDM7CWJwZl93cV9zZXRfY2FsbGJhY2soJmFtcDt2YWwtJmd0O3csIHdxX2dsb2JhbF9ub19yY3VfY2IsIDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBUYXNrIHdvcmsgdGVzdHMgKi8KIAogc3RydWN0IHRhc2tfd29ya19lbGVtIHsKQEAgLTE3OSwzICYjNDM7Mjg1LDI5IEBAIGludCB0YXNrX3dvcmtfc2xlZXBhYmxlX3Byb2codm9pZCAqY3R4KQogCWJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHRhc2ssICZhbXA7dmFsLSZndDt0dywgJmFtcDt0YXNrX3dvcmtfbWFwLCB0YXNrX3dvcmtfY2IpOwogCXJldHVybiAwOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGFza193b3JrX2dsb2JhbF9yY3VfY2Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiB3cV9nbG9iYWxfYWNxdWlyZSgpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1IxIG11c3QgYmUgYSByY3UgcG9pbnRlciYjMzQ7KQomIzQzO2ludCB0YXNrX3dvcmtfZ2xvYmFsX3JjdV9wcm9nKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3dvcmtfZWxlbSAqdmFsOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiYjNDM7CWludCBrZXkgPSAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGFza193b3JrX21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7CiYjNDM7CWlmICghdGFzaykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSh0YXNrLCAmYW1wO3ZhbC0mZ3Q7dHcsICZhbXA7dGFza193b3JrX21hcCwKJiM0MzsJCQkJICAgICAgdGFza193b3JrX2dsb2JhbF9yY3VfY2IpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTAwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIE5lZWQgZm9yIGEgRGVkaWNhdGVkIEtNU0FOIEZ1enppbmcgU2Vzc2lvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBzcGlubmluZyB1cCBhIHNlcGFyYXRlIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYmV5b25kIHdoYXQgd2UmIzM5O3JlIGFscmVhZHkgZG9pbmcgd2l0aCBLQVNBTi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHRocm91Z2ggdGhlIGNoYW5nZXMgbWV0aG9kaWNhbGx5IGFuZCB0aGVuIG1ha2UgdGhlIGNhbGwuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gSSYjMzk7bGwgZXhhbWluZSB0aGUgY29kZSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHRoZXkgcmVsYXRlIHRvIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IEtNU0FOIG1pZ2h0IGNhdGNoIGJldHRlciB0aGFuIEtBU0FOLgoKQWxyaWdodCwgdGhlIHBhdGNoIHRvdWNoZXMgYGluY2x1ZGUvbGludXgvYnBmLmhgIGFuZCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYW5kIGluY2x1ZGVzIGEgc2VsZi10ZXN0LiBMZXTigJlzIHN0YXJ0IHdpdGggYGluY2x1ZGUvbGludXgvYnBmLmhgLiBUaGV5JiMzOTt2ZSBtb2RpZmllZCBgc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4YC4gVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoZSBjaGFuZ2UgZnJvbSBzaW5nbGUgYGNhbGxlZGAgYW5kIGB2ZXJpZmllZGAgYm9vbHMgdG8gYXJyYXlzOiBgY2FsbGVkWzJdYCBhbmQgYHZlcmlmaWVkWzJdYC4gSW5kZXhlZCBieSBgaW5fc2xlZXBhYmxlX2NvbnRleHRgLiBUaGlzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgY29udGV4dC1zZW5zaXRpdmUgY2hhbmdlLCBsaWtlbHkgZGVhbGluZyB3aXRoIGhvdyBCUEYgZnVuY3Rpb25zIGJlaGF2ZSBpbiBzbGVlcGFibGUgdmVyc3VzIG5vbi1zbGVlcGFibGUgY29udGV4dHMuCgpNb3Zpbmcgb24gdG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuICBJIHNlZSB0aGUgYGNoZWNrX2Z1bmNfY2FsbCgpYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIHNldCBgc3ViX2F1eC0mZ3Q7Y2FsbGVkW2luX3NsZWVwYWJsZV9jb250ZXh0KGVudildID0gdHJ1ZTtgLiAgVGhlIHZlcmlmaWVyIGlzIG5vdyB0cmFja2luZyBjYWxscyBiYXNlZCBvbiB3aGV0aGVyIHRoZXkgb2NjdXIgaW4gYSBzbGVlcGFibGUgY29udGV4dC4gIEFsc28sIGBkb19jaGVja19jb21tb25gIG5vdyBleHBsaWNpdGx5IHBhc3NlcyBgaW5fc2xlZXBhYmxlYCB0byBgc3RhdGUtJmd0O2luX3NsZWVwYWJsZWAuICBGaW5hbGx5LCBgZG9fY2hlY2tfc3VicHJvZ3MoKWAgaXRlcmF0ZXMgYW5kIHNldHMgYHN1Yl9hdXgtJmd0O3ZlcmlmaWVkW2NvbnRleHRdID0gdHJ1ZTtgLiBgZG9fY2hlY2tfbWFpbigpYCBsb29rcyBsaWtlIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBzbyBJJiMzOTtsbCBjaGVjayBpZiB0aGUgY2hhbmdlIGlzIGxpbWl0ZWQgdG8gYSBzaW5nbGUgY29udGV4dCAoZS5nLiBgbWFpbmAgb25seSkuCgpUaGlzIGFsbCBwb2ludHMgdG8gY2hhbmdlcyBpbiBob3cgdGhlIEJQRiB2ZXJpZmllciBoYW5kbGVzIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cy4gVGhpcyBpcyBteSBpbnR1aXRpb24uIEl0JiMzOTtzIGxpa2VseSB0aGF0IHRoZXkmIzM5O3JlIHRyeWluZyB0byBpbXByb3ZlIHZlcmlmaWNhdGlvbiBvZiBCUEYgcHJvZ3JhbXMgdGhhdCBtaWdodCBpbnRlcmFjdCB3aXRoIHRoZXNlIHNsZWVwYWJsZSBjb250ZXh0cy4KCk5vdywgSSBuZWVkIHRvIGtub3cgbW9yZSBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eGAuICBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIChvciBzaW1pbGFyIHRvb2xzKSB0byBmaW5kIHdoZXJlIHRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSBhbmQgaWYgdGhlcmUgYXJlIG5ldyBwb3RlbnRpYWwgcGF0aHMgb2YgbWVtb3J5IGNvcnJ1cHRpb24uIEJhc2VkIG9uIHdoZXJlIGl0JiMzOTtzIGFsbG9jYXRlZCBhbmQgaG93IGl0JiMzOTtzIHVzZWQsIEkgY2FuIGdldCBhIGJldHRlciBzZW5zZSBpZiB0aGlzIGlzIGEgS01TQU4gdHJpZ2dlciBvciBub3QuCgpGcm9tIHRoaXMsIEkmIzM5O2xsIGFzc2VzcyB3aGV0aGVyIGEgc2VwYXJhdGUgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIGxpa2VseSB0byBleHBvc2UgbmV3IHZ1bG5lcmFiaWxpdGllcyB0aGF0IGFyZSBtaXNzZWQgYnkgdGhlIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuIElmIHRoZSBhbGxvY2F0aW9uL3VzZSBvZiB0aGlzIHN0cnVjdCBpcyBpbiBhIGNyaXRpY2FsIHNlY3Rpb24sIG9yIHVzZXMgbG9ja2luZyB0aGF0IGlzIG5vdCBLQVNBTi12ZXJpZmllZCwgdGhlbiBJIHdpbGwgc3Ryb25nbHkgY29uc2lkZXIgS01TQU4gZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnVuY19pbmZvX2F1eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdD0xMjA9SXQgcHJvZHVjZXMgdGhlIG91dHB1dDo6XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvZHJnbi5yc3QtMTgyLSAgICAgICAgICAgIC5mdW5jX2luZm8gPSAoc3RydWN0IGJwZl9mdW5jX2luZm8gKikweGZmZmY4ODlmZjc5NWQyNDAsXG5Eb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdDoxODM6ICAgICAgICAgICAgLmZ1bmNfaW5mb19hdXggPSAoc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICopMHhmZmZmODg5ZmY3OTVkZTIwLFxuRG9jdW1lbnRhdGlvbi9icGYvZHJnbi5yc3QtMTg0LSAgICAgICAgICAgIC5saW5mbyA9IChzdHJ1Y3QgYnBmX2xpbmVfaW5mbyAqKTB4ZmZmZjg4OGE3MDdhZmMwMCxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE2NDc9c3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MpIHt9XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0xNjQ5LVxuaW5jbHVkZS9saW51eC9icGYuaDoxNjUwOnN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCB7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE2NTEtXHR1MTYgbGlua2FnZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE3NDI9c3RydWN0IGJwZl9wcm9nX2F1eCB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0xODI4LVx0c3RydWN0IGJwZl9mdW5jX2luZm8gKmZ1bmNfaW5mbztcbmluY2x1ZGUvbGludXgvYnBmLmg6MTgyOTpcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqZnVuY19pbmZvX2F1eDtcbmluY2x1ZGUvbGludXgvYnBmLmgtMTgzMC1cdC8qIGJwZl9saW5lX2luZm8gbG9hZGVkIGZyb20gdXNlcnNwYWNlLiAgbGluZm8tXHUwMDNlaW5zbl9vZmZcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTkxOT1zdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiB7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMDUwLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMDUxOnN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICpzdWJwcm9nX2F1eChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTA1Mi17XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjEwNTM6XHRyZXR1cm4gXHUwMDI2ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWZ1bmNfaW5mb19hdXhbc3VicHJvZ107XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTEwNTQtfVxuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODAwNz1pbnQgYnRmX3ByZXBhcmVfZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtODA0Ny1cbmtlcm5lbC9icGYvYnRmLmM6ODA0ODpcdGlmIChwcm9nLVx1MDAzZWF1eC1cdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2ddLnVucmVsaWFibGUpIHtcbmtlcm5lbC9icGYvYnRmLmMtODA0OS1cdFx0dmVyaWZpZXJfYnVnKGVudiwgXCYjMzQ7dW5yZWxpYWJsZSBCVEYgZm9yIGZ1bmN0aW9uICVzKClcJiMzNDssIHRuYW1lKTtcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTEzMz1zdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy0xMzktXHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyAqa3JlY29yZDtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6MTQwOlx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICppbmZvX2F1eCA9IE5VTEw7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTE0MS1cdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTIwMS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6MjAyOlx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlZnVuY19pbmZvX2F1eCA9IGluZm9fYXV4O1xua2VybmVsL2JwZi9jaGVja19idGYuYy0yMDMtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTQwMT1zdGF0aWMgaW50IGFkanVzdF9zdWJwcm9nX3N0YXJ0c19hZnRlcl9yZW1vdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTQzOC1cdFx0XHRcdHNpemVvZigqYXV4LVx1MDAzZWZ1bmNfaW5mbykgKiBtb3ZlKTtcbmtlcm5lbC9icGYvZml4dXBzLmM6NDM5Olx0XHRcdGlmIChhdXgtXHUwMDNlZnVuY19pbmZvX2F1eClcbmtlcm5lbC9icGYvZml4dXBzLmM6NDQwOlx0XHRcdFx0bWVtbW92ZShhdXgtXHUwMDNlZnVuY19pbmZvX2F1eCAmIzQzOyBpLFxua2VybmVsL2JwZi9maXh1cHMuYzo0NDE6XHRcdFx0XHRcdGF1eC1cdTAwM2VmdW5jX2luZm9fYXV4ICYjNDM7IGosXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjQ0MjpcdFx0XHRcdFx0c2l6ZW9mKCphdXgtXHUwMDNlZnVuY19pbmZvX2F1eCkgKiBtb3ZlKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtNDQzLVx0XHRcdGF1eC1cdTAwM2VmdW5jX2luZm9fY250IC09IGogLSBpO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI0NDA9c3RhdGljIHZvaWQgX19icGZfcHJvZ19wdXRfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI0NDQtXHRrdmZyZWUoYXV4LVx1MDAzZWZ1bmNfaW5mbyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNDQ1Olx0a2ZyZWUoYXV4LVx1MDAzZWZ1bmNfaW5mb19hdXgpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMjQ0Ni1cdGZyZWVfdWlkKGF1eC1cdTAwM2V1c2VyKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzgyPWJvb2wgYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM4My17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzg0Olx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICphdXggPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlZnVuY19pbmZvX2F1eDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zODUtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk4Mzk9c3RhdGljIGludCBidGZfY2hlY2tfc3VicHJvZ19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05ODUzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjk4NTQ6XHRpZiAocHJvZy1cdTAwM2VhdXgtXHUwMDNlZnVuY19pbmZvX2F1eFtzdWJwcm9nXS51bnJlbGlhYmxlKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk4NTUtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05ODYyLVx0aWYgKGVycilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5ODYzOlx0XHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2ddLnVucmVsaWFibGUgPSB0cnVlO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTk4NjQtXHRyZXR1cm4gZXJyO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05OTM5PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk1OS1cdGlmIChicGZfc3VicHJvZ19pc19nbG9iYWwoZW52LCBzdWJwcm9nKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjk5NjA6XHRcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgc3VicHJvZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk2MS1cdFx0Y29uc3QgY2hhciAqc3ViX25hbWUgPSBicGZfc3VicHJvZ19uYW1lKGVudiwgc3VicHJvZyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MzAzPXN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczNjMtXHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzM2NDpcdFx0aWYgKGF1eC1cdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2dub10ubGlua2FnZSAhPSBCVEZfRlVOQ19TVEFUSUMpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM2NS1cdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGJhY2sgZnVuY3Rpb24gbm90IHN0YXRpY1xcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTY4PXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBib29sIGluX3NsZWVwYWJsZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2ODctXHRcdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Njg4Olx0XHRpZiAoZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWZ1bmNfaW5mb19hdXgpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY4OS1cdFx0XHRyZXQgPSBidGZfcHJlcGFyZV9mdW5jX2FyZ3MoZW52LCAwKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5MC1cdFx0XHRpZiAocmV0IHx8IHN1Yi1cdTAwM2VhcmdfY250ICE9IDEgfHwgc3ViLVx1MDAzZWFyZ3NbMF0uYXJnX3R5cGUgIT0gQVJHX1BUUl9UT19DVFgpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY5MTpcdFx0XHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VmdW5jX2luZm9fYXV4WzBdLnVucmVsaWFibGUgPSB0cnVlO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjkyLVx0XHRcdFx0c3ViLVx1MDAzZWFyZ19jbnQgPSAxO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTc1NT1zdGF0aWMgaW50IGRvX2NoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzU3LVx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NzU4Olx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICpzdWJfYXV4O1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzU5LVx0aW50IGNvbnRleHQsIGksIGosIHJldCwgbmV3X2NudDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAxOTM9aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjY3LVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAyNjg6XHRcdGNvbnNlcnZhdGl2ZSA9IGF1eC1cdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2ddLnVucmVsaWFibGU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAyNjktXHRcdGlmIChwcm9nX2V4dGVuc2lvbikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTA1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBCVEYgVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpbmZvX2F1eGAgc3RydWN0dXJlIGlzIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgQlRGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyIFR5cGUgRm9ybWF0KSBjaGVja2luZyBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIGFsbG9jYXRpb24gbG9naWMgaXMgbW9zdCBsaWtlbHkgd2l0aGluIHRoZSB2ZXJpZmljYXRpb24gZnVuY3Rpb24sIHNvIEkmIzM5O2xsIGNoZWNrIGBrZXJuZWwvYnBmL2NoZWNrX2J0Zi5jYC4gTGluZSAxMzMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyB0aGF0IHNvdW5kcyBsaWtlIGEgbGlrZWx5IHNwb3QgdG8gZmluZCB0aGUgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgZGV0YWlscy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhlcmUuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBpbiB0aGUgQlRGIHZhbGlkYXRpb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NoZWNrX2J0Zi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDY1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqaW5mb19hdXggPSBOVUxMO1xuIDE0MTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIDE0MjpcdFx0Y29uc3Qgc3RydWN0IGJ0ZiAqYnRmO1xuIDE0MzpcdFx0YnBmcHRyX3QgdXJlY29yZDtcbiAxNDQ6XHRcdGJvb2wgc2NhbGFyX3JldHVybjtcbiAxNDU6XHRcdGludCByZXQgPSAtRU5PTUVNO1xuIDE0NjpcdFxuIDE0NzpcdFx0bmZ1bmNzID0gYXR0ci1cdTAwM2VmdW5jX2luZm9fY250O1xuIDE0ODpcdFx0aWYgKCFuZnVuY3MpIHtcbiAxNDk6XHRcdFx0aWYgKGNoZWNrX2Fibm9ybWFsX3JldHVybihlbnYpKVxuIDE1MDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE1MTpcdFx0XHRyZXR1cm4gMDtcbiAxNTI6XHRcdH1cbiAxNTM6XHRcdGlmIChuZnVuY3MgIT0gZW52LVx1MDAzZXN1YnByb2dfY250KSB7XG4gMTU0Olx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtudW1iZXIgb2YgZnVuY3MgaW4gZnVuY19pbmZvIGRvZXNuJiMzOTt0IG1hdGNoIG51bWJlciBvZiBzdWJwcm9nc1xcblwmIzM0Oyk7XG4gMTU1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE1NjpcdFx0fVxuIDE1NzpcdFxuIDE1ODpcdFx0dXJlY19zaXplID0gYXR0ci1cdTAwM2VmdW5jX2luZm9fcmVjX3NpemU7XG4gMTU5Olx0XG4gMTYwOlx0XHRwcm9nID0gZW52LVx1MDAzZXByb2c7XG4gMTYxOlx0XHRidGYgPSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VidGY7XG4gMTYyOlx0XG4gMTYzOlx0XHR1cmVjb3JkID0gbWFrZV9icGZwdHIoYXR0ci1cdTAwM2VmdW5jX2luZm8sIHVhdHRyLmlzX2tlcm5lbCk7XG4gMTY0Olx0XG4gMTY1Olx0XHRrcmVjb3JkID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlZnVuY19pbmZvO1xuIDE2NjpcdFx0aW5mb19hdXggPSBremFsbG9jX29ianMoKmluZm9fYXV4LCBuZnVuY3MsXG4gMTY3Olx0XHRcdFx0XHRHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk4pO1xuIDE2ODpcdFx0aWYgKCFpbmZvX2F1eClcbiAxNjk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTcwOlx0XG4gMTcxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZnVuY3M7IGkmIzQzOyYjNDM7KSB7XG4gMTcyOlx0XHRcdC8qIGNoZWNrIGluc25fb2ZmICovXG4gMTczOlx0XHRcdHJldCA9IC1FSU5WQUw7XG4gMTc0Olx0XG4gMTc1Olx0XHRcdGlmIChlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0ICE9IGtyZWNvcmRbaV0uaW5zbl9vZmYpIHtcbiAxNzY6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7ZnVuY19pbmZvIEJURiBzZWN0aW9uIGRvZXNuJiMzOTt0IG1hdGNoIHN1YnByb2cgbGF5b3V0IGluIEJQRiBwcm9ncmFtXFxuXCYjMzQ7KTtcbiAxNzc6XHRcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDE3ODpcdFx0XHR9XG4gMTc5Olx0XG4gMTgwOlx0XHRcdC8qIEFscmVhZHkgY2hlY2tlZCB0eXBlX2lkICovXG4gMTgxOlx0XHRcdHR5cGUgPSBidGZfdHlwZV9ieV9pZChidGYsIGtyZWNvcmRbaV0udHlwZV9pZCk7XG4gMTgyOlx0XHRcdGluZm9fYXV4W2ldLmxpbmthZ2UgPSBCVEZfSU5GT19WTEVOKHR5cGUtXHUwMDNlaW5mbyk7XG4gMTgzOlx0XHRcdC8qIEFscmVhZHkgY2hlY2tlZCBmdW5jX3Byb3RvICovXG4gMTg0Olx0XHRcdGZ1bmNfcHJvdG8gPSBidGZfdHlwZV9ieV9pZChidGYsIHR5cGUtXHUwMDNldHlwZSk7XG4gMTg1Olx0XG4gMTg2Olx0XHRcdHJldF90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBmdW5jX3Byb3RvLVx1MDAzZXR5cGUsIE5VTEwpO1xuIDE4NzpcdFx0XHRzY2FsYXJfcmV0dXJuID1cbiAxODg6XHRcdFx0XHRidGZfdHlwZV9pc19zbWFsbF9pbnQocmV0X3R5cGUpIHx8IGJ0Zl9pc19hbnlfZW51bShyZXRfdHlwZSk7XG4gMTg5Olx0XHRcdGlmIChpIFx1MDAyNlx1MDAyNiAhc2NhbGFyX3JldHVybiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5oYXNfbGRfYWJzKSB7XG4gMTkwOlx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0xEX0FCUyBpcyBvbmx5IGFsbG93ZWQgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuICYjMzk7aW50JiMzOTsuXFxuXCYjMzQ7KTtcbiAxOTE6XHRcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDE5MjpcdFx0XHR9XG4gMTkzOlx0XHRcdGlmIChpIFx1MDAyNlx1MDAyNiAhc2NhbGFyX3JldHVybiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5oYXNfdGFpbF9jYWxsKSB7XG4gMTk0Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3RhaWxfY2FsbCBpcyBvbmx5IGFsbG93ZWQgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuICYjMzk7aW50JiMzOTsuXFxuXCYjMzQ7KTtcbiAxOTU6XHRcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDE5NjpcdFx0XHR9XG4gMTk3Olx0XG4gMTk4Olx0XHRcdGVudi1cdTAwM2VzdWJwcm9nX2luZm9baV0ubmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHR5cGUtXHUwMDNlbmFtZV9vZmYpO1xuIDE5OTpcdFx0XHRicGZwdHJfYWRkKFx1MDAyNnVyZWNvcmQsIHVyZWNfc2l6ZSk7XG4gMjAwOlx0XHR9XG4gMjAxOlx0XG4gMjAyOlx0XHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VmdW5jX2luZm9fYXV4ID0gaW5mb19hdXg7XG4gMjAzOlx0XHRyZXR1cm4gMDtcbiAyMDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJQRiB2ZXJpZmllciBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgY2hhbmdlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBGaXJzdCwgdGhlIGBpbmZvX2F1eGAgc3RydWN0dXJlLCB3aGljaCBzZWVtcyB0byBiZSBjZW50cmFsIHRvIHRoaXMsIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpzYC4gVGhpcyBpcyBnb29kOyBpdCBndWFyYW50ZWVzIHRoZSBtZW1vcnkgaXMgemVyb2VkIG91dCBmcm9tIHRoZSBzdGFydCwgd2hpY2ggaXMgYSBnb29kIGJhc2VsaW5lIHRvIGF2b2lkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgdmVyaWZpZXIgdHJhY2tzIHN1YnByb2dyYW0gY2FsbHMgYW5kIHZlcmlmaWNhdGlvbiBzdGF0dXMgaW4gYm90aCBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUgY29udGV4dHMuIFByZXZpb3VzbHksIHdlIGhhZCB0aGVzZSBhcyBzaW5nbGUgYm9vbGVhbiBmbGFnczogYGNhbGxlZGAgYW5kIGB2ZXJpZmllZGAuIE5vdywgaXQmIzM5O3MgYmVlbiBjaGFuZ2VkIHRvIGBib29sIGNhbGxlZFsyXTtgIGFuZCBgYm9vbCB2ZXJpZmllZFsyXTtgLiBUaGlzIGlzIGluZGV4ZWQgYnkgYGluX3NsZWVwYWJsZWAsIHdoaWNoIGlzIGVpdGhlciAwIG9yIDEsIHJlcHJlc2VudGluZyB0aGVzZSB0d28gY29udGV4dHMuIE1ha2VzIHNlbnNlOyB0aGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgd2F5IHRvIGRpZmZlcmVudGlhdGUgdGhlIGNhbGwvdmVyaWZpY2F0aW9uIHN0YXRlIGJldHdlZW4gc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIGNvbnRleHRzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYGNoZWNrX2Z1bmNfY2FsbCgpYCwgdGhlIGBjYWxsZWRgIGZsYWcgaXMgYmVpbmcgc2V0OiBgc3ViX2F1eC0mZ3Q7Y2FsbGVkW2luX3NsZWVwYWJsZV9jb250ZXh0KGVudildID0gdHJ1ZTtgLiBgaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KWAgcmV0dXJucyBhIGJvb2wgLSB3aGljaCBJIHF1aWNrbHkgdmVyaWZpZWQgY2FuIG9ubHkgcmV0dXJuIDAgb3IgMS4gU28gdXNpbmcgdGhpcyBib29sZWFuIGFzIGFuIGFycmF5IGluZGV4IGlzIHNhZmUuCgpUaGVuLCBpbiBgZG9fY2hlY2tfc3VicHJvZ3MoKWAsIHdlIGl0ZXJhdGUgdGhyb3VnaCBzdWJwcm9ncmFtcyBpbiB0b3BvbG9naWNhbCBvcmRlciwgZm9yIGJvdGggY29udGV4dHMgKDAgYW5kIDEpLiBJZiBhIHN1YnByb2dyYW0gaGFzIGJlZW4gY2FsbGVkIGluIGEgcGFydGljdWxhciBjb250ZXh0ICpidXQqIG5vdCB5ZXQgdmVyaWZpZWQgZm9yIHRoYXQgY29udGV4dCwgd2UgY2FsbCBgZG9fY2hlY2tfY29tbW9uKClgLCBhbmQgdGhlbiBzZXQgYHZlcmlmaWVkW2NvbnRleHRdID0gdHJ1ZWAuCgpJbiBgZG9fY2hlY2tfbWFpbigpYCwgYGRvX2NoZWNrX2NvbW1vbigpYCBpcyBjYWxsZWQgd2l0aCBgZW52LSZndDtwcm9nLSZndDtzbGVlcGFibGVgIGFzIHRoZSBjb250ZXh0LgoKSSBzZWUgYGRvX2NoZWNrX2NvbW1vbigpYCB1cGRhdGluZyBgc3RhdGUtJmd0O2luX3NsZWVwYWJsZWAsIGFuZCBhbHNvIHRoZSBgaW5zbnNfdG90YWxgLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGFyZSB3ZSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHdpdGggdGhpcyBjaGFuZ2U/IEkmIzM5O3ZlIGdvdCB0byBiZSBzdXJlLiBJJiMzOTt2ZSBicm9rZW4gZG93biBteSBjaGVjazoKCjEuICBgaW5mb19hdXhgIGlzIGBremFsbG9jX29ianNgLCB3aGljaCBtZWFucyB0aGF0IGFsbCBvZiBgY2FsbGVkWzBdYCwgYGNhbGxlZFsxXWAsIGB2ZXJpZmllZFswXWAsIGFuZCBgdmVyaWZpZWRbMV1gIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGF0JiMzOTtzIGEgaHVnZSByZWxpZWYuCjIuICBJIGRpZCBhIHF1aWNrIHNjYW4gLSBObyBkaXJlY3QgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIGV0Yy4pIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uCjMuICBObyBjb25kaXRpb25hbCBicmFuY2hlcyBkZXBlbmRpbmcgb24gKnVuaW5pdGlhbGl6ZWQqIGRhdGEuCjQuICBObyBjaGFuZ2VzIGluIGJ1ZmZlciBzaXppbmcgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBsZWFrcy4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHJlYWRzLgo1LiAgQWxsIHZhcmlhYmxlcyB1c2VkIHdpdGhpbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIChgY29udGV4dGAsIGBpYCwgYGpgLCBgcmV0YCwgYG5ld19jbnRgLCBgb2xkX2luc25zX3RvdGFsYCkgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZCBiZWZvcmUgdXNhZ2UuCgpTbywgKmFzIGZhciBhcyBJIGNhbiBzZWUqLCB0aGVyZSBhcmUgbm8gb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaGVyZS4gVGhlIHBhdGNoIHNlZW1zIHNvbGlkIG9uIHRoYXQgZnJvbnQuCgpJJiMzOTtsbCBkbyBhIHF1aWNrIGBncmVwYCBmb3IgYGNhbGxlZGAgYW5kIGB2ZXJpZmllZGAgd2l0aGluIGBrZXJuZWwvYnBmL2AgdG8gbWFrZSBkb3VibHkgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEl0JiMzOTtzIHRvbyBpbXBvcnRhbnQgdG8gYmUgY29tcGxhY2VudC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc2VhcmNoIHJlc3VsdHMgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoZXJlIGFyZSBubyBvdGhlciBwbGFjZXMgdGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkLCBhbmQgdGhhdCB0aGV5JiMzOTtyZSBiZWluZyB1c2VkIHNhZmVseSBhbmQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoY2FsbGVkfHZlcmlmaWVkKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDYzOSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxua2VybmVsL2JwZi9hcnJheW1hcC5jPTkzMj1zdGF0aWMgdm9pZCAqZmRfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTM2LVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjkzNzovKiBvbmx5IGNhbGxlZCBmcm9tIHN5c2NhbGwgKi9cbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MzgtaW50IGJwZl9mZF9hcnJheV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgKnZhbHVlKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy05NTYtXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTU3Oi8qIG9ubHkgY2FsbGVkIGZyb20gc3lzY2FsbCAqL1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTk1OC1pbnQgYnBmX2ZkX2FycmF5X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4tLVxua2VybmVsL2JwZi9iYWNrdHJhY2suYz0yMzc9dm9pZCBicGZfZm10X3N0YWNrX21hc2soY2hhciAqYnVmLCBzc2l6ZV90IGJ1Zl9zeiwgdTY0IHN0YWNrX21hc2spXG4tLVxua2VybmVsL2JwZi9iYWNrdHJhY2suYy0yNTUtXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjI1NjovKiBGb3IgZ2l2ZW4gdmVyaWZpZXIgc3RhdGUgYmFja3RyYWNrX2luc24oKSBpcyBjYWxsZWQgZnJvbSB0aGUgbGFzdCBpbnNuIHRvXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTI1Ny0gKiB0aGUgZmlyc3QgaW5zbi4gSXRzIHB1cnBvc2UgaXMgdG8gY29tcHV0ZSBhIGJpdG1hc2sgb2YgcmVnaXN0ZXJzIGFuZFxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmM9NjY5PXZvaWQgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNzI4LSAqIE9uZSBpbXBvcnRhbnQgYW5kIHN1YnRsZSBhc3BlY3QgaXMgdGhhdCBwcmVjaXNlIG1hcmtzICpkbyBub3QgbWF0dGVyKiBpblxua2VybmVsL2JwZi9iYWNrdHJhY2suYzo3Mjk6ICogdGhlIGN1cnJlbnRseSB2ZXJpZmllZCBzdGF0ZSAoY3VycmVudCBzdGF0ZSkuIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTczMC0gKiB3aHkgdGhpcyBpcyB0aGUgY2FzZS5cbi0tXG5rZXJuZWwvYnBmL2JwZl9pbm9kZV9zdG9yYWdlLmM9MTI1PUJQRl9DQUxMXzQoYnBmX2lub2RlX3N0b3JhZ2VfZ2V0LCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHN0cnVjdCBpbm9kZSAqLCBpbm9kZSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9pbm9kZV9zdG9yYWdlLmMtMTQ1LVxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jOjE0NjpcdC8qIFRoaXMgaGVscGVyIG11c3Qgb25seSBjYWxsZWQgZnJvbSB3aGVyZSB0aGUgaW5vZGUgaXMgZ3VhcmFudGVlZFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jLTE0Ny1cdCAqIHRvIGhhdmUgYSByZWZjb3VudCBhbmQgY2Fubm90IGJlIGZyZWVkLlxuLS1cbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYz0xNjA9QlBGX0NBTExfMihicGZfaW5vZGVfc3RvcmFnZV9kZWxldGUsXG4tLVxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jLTE2Ni1cbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYzoxNjc6XHQvKiBUaGlzIGhlbHBlciBtdXN0IG9ubHkgY2FsbGVkIGZyb20gd2hlcmUgdGhlIGlub2RlIGlzIGd1YXJhbnRlZWRcbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYy0xNjgtXHQgKiB0byBoYXZlIGEgcmVmY291bnQgYW5kIGNhbm5vdCBiZSBmcmVlZC5cbi0tXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM9MjUxPXZvaWQgYnBmX2luc25fYXJyYXlfYWRqdXN0X2FmdGVyX3JlbW92ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgb2ZmLCB1MzIgbGVuKVxuLS1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0yNjgtLypcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYzoyNjk6ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgSklUcy4gVGhlIGltYWdlIGlzIHRoZSByZWFsIHByb2dyYW1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0yNzAtICogaW1hZ2UsIHRoZSBvZmZzZXRzIGFycmF5IHNldCB1cCB0aGUgeGxhdGVkIC1cdTAwM2Ugaml0dGVkIG1hcHBpbmcuXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jPTkzPXN0YXRpYyBzc2l6ZV90IGJwZl9zZXFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTIwOC1cdH1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzoyMDk6XHQvKiBicGYgcHJvZ3JhbSBjYWxsZWQgaWYgIXAgKi9cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0yMTAtXHRzZXEtXHUwMDNlb3AtXHUwMDNlc3RvcChzZXEsIHApO1xuLS1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYz03Mjc9QlBGX0NBTExfNChicGZfbG9vcCwgdTMyLCBucl9sb29wcywgdm9pZCAqLCBjYWxsYmFja19mbiwgdm9pZCAqLCBjYWxsYmFja19jdHgsXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTczMy1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo3MzQ6XHQvKiBOb3RlOiB0aGVzZSBzYWZldHkgY2hlY2tzIGFyZSBhbHNvIHZlcmlmaWVkIHdoZW4gYnBmX2xvb3Bcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03MzUtXHQgKiBpcyBpbmxpbmVkLCBiZSBjYXJlZnVsIHRvIG1vZGlmeSB0aGlzIGNvZGUgaW4gc3luYy4gU2VlXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTMwMD1pbnQgYnBmX3NlbGVtX3VubGluayhzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTM0Ni0gKiBVbmxpbmsgYW4gc2VsZW0gZnJvbSBtYXAgYW5kIGxvY2FsIHN0b3JhZ2Ugd2l0aCBsb2NrbGVzcyBmYWxsYmFjayBpZiBjYWxsZXJzXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6MzQ3OiAqIGFyZSByYWNpbmcgb3IgcnFzcGlubG9jayByZXR1cm5zIGVycm9yLiBJdCBzaG91bGQgb25seSBiZSBjYWxsZWQgYnlcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zNDgtICogYnBmX2xvY2FsX3N0b3JhZ2VfZGVzdHJveSgpIG9yIGJwZl9sb2NhbF9zdG9yYWdlX21hcF9mcmVlKCkuXG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmM9MjI4PWJwZl9sc21fZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0yODctXG5rZXJuZWwvYnBmL2JwZl9sc20uYzoyODg6LyogVGhlIHNldCBvZiBob29rcyB3aGljaCBhcmUgY2FsbGVkIHdpdGhvdXQgcGFnZWZhdWx0cyBkaXNhYmxlZCBhbmQgYXJlIGFsbG93ZWRcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTI4OS0gKiB0byBcJiMzNDtzbGVlcFwmIzM0OyBhbmQgdGh1cyBjYW4gYmUgdXNlZCBmb3Igc2xlZXBhYmxlIEJQRiBwcm9ncmFtcy5cbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NzI2PXN0YXRpYyBsb25nIGJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk0MS1cdC8qIEVycm9yIGR1cmluZyBzdF9vcHMtXHUwMDNlcmVnKCkuIENhbiBoYXBwZW4gaWYgdGhpcyBzdHJ1Y3Rfb3BzIG5lZWRzIHRvIGJlXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTQyOlx0ICogdmVyaWZpZWQgYXMgYSB3aG9sZSwgYWZ0ZXIgYWxsIGluaXRfbWVtYmVyKCkgY2FsbHMuIENhbiBhbHNvIGhhcHBlbiBpZlxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk0My1cdCAqIHRoZXJlIHdhcyBhIHJhY2UgaW4gcmVnaXN0ZXJpbmcgdGhlIHN0cnVjdF9vcHMgKHVuZGVyIHRoZSBzYW1lIG5hbWUpIHRvXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEwMjc9c3RhdGljIHZvaWQgYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA0Ni1cdCAqIHNldHNvY2tvcHQoVENQX0NPTkdFU1RJT04sIFwmIzM0O3RjcF9jY195XCYjMzQ7KS5cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDQ3Olx0ICogRHVyaW5nIHRoZSBzd2l0Y2gsICBicGZfc3RydWN0X29wc19wdXQodGNwX2NjX3gpIGlzIGNhbGxlZFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNDgtXHQgKiBhbmQgaXRzIHJlZmNvdW50IG1heSByZWFjaCAwIHdoaWNoIHRoZW4gZnJlZSBpdHNcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTUyMj12b2lkIGJwZl9wcm9nX2Rpc2Fzc29jX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTQwLSAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgc3RydWN0X29wcyBzdHJ1Y3QgKGkuZS4sIGtkYXRhKSBhc3NvY2lhdGVkIHdpdGggYVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE1NDE6ICogcHJvZ3JhbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIEJQRiBwcm9ncmFtIGNvbnRleHQgKGUuZy4sIGluIGEga2Z1bmMpLlxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1NDItICpcbi0tXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYz0xOTM9QlBGX0NBTExfMihicGZfdGFza19zdG9yYWdlX2RlbGV0ZSwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKixcbi0tXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYy0xOTktXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYzoyMDA6XHQvKiBUaGlzIGhlbHBlciBtdXN0IG9ubHkgYmUgY2FsbGVkIGZyb20gcGxhY2VzIHdoZXJlIHRoZSBsaWZldGltZSBvZiB0aGUgdGFza1xua2VybmVsL2JwZi9icGZfdGFza19zdG9yYWdlLmMtMjAxLVx0ICogaXMgZ3VhcmFudGVlZC4gRWl0aGVyIGJ5IGJlaW5nIHJlZmNvdW50ZWQgb3IgYnkgYmVpbmcgcHJvdGVjdGVkXG4tLVxua2VybmVsL2JwZi9idGYuYz0xNzgyPXN0YXRpYyB2b2lkIGJ0Zl9mcmVlX2lkKHN0cnVjdCBidGYgKmJ0Zilcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTE3OTktXHRcdCAqIENsZWFyIHRoZSBpZCBoZXJlIHRvIG1ha2UgdGhpcyBmdW5jdGlvbiBpZGVtcG90ZW50LCBzaW5jZSBpdCB3aWxsIGdldFxua2VybmVsL2JwZi9idGYuYzoxODAwOlx0XHQgKiBjYWxsZWQgYSBjb3VwbGUgb2YgdGltZXMgZm9yIG1vZHVsZSBCVEZzOiBvbiBtb2R1bGUgdW5sb2FkLCBhbmQgdGhlblxua2VybmVsL2JwZi9idGYuYy0xODAxLVx0XHQgKiB0aGUgZmluYWwgYnRmX3B1dCgpLiBidGZfYWxsb2NfaWQoKSBzdGFydHMgSURzIHdpdGggMSwgc28gd2UgY2FuIHVzZVxuLS1cbmtlcm5lbC9icGYvYnRmLmM9Mzk3NT1zdGF0aWMgaW50IGJ0Zl9wYXJzZV9rcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJ0Zl9maWVsZCAqZmllbGQsXG4tLVxua2VybmVsL2JwZi9idGYuYy0zOTkzLVx0aWYgKGlkID09IC1FTk9FTlQpIHtcbmtlcm5lbC9icGYvYnRmLmM6Mzk5NDpcdFx0LyogYnRmX3BhcnNlX2twdHIgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHcvIGJ0ZiA9IHByb2dyYW0gQlRGICovXG5rZXJuZWwvYnBmL2J0Zi5jLTM5OTUtXHRcdFdBUk5fT05fT05DRShidGZfaXNfa2VybmVsKGJ0ZikpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNDA0MC1cbmtlcm5lbC9icGYvYnRmLmM6NDA0MTpcdFx0LyogV2UgYWxyZWFkeSB2ZXJpZmllZCBkdG9yX2Z1bmMgdG8gYmUgYnRmX3R5cGVfaXNfZnVuY1xua2VybmVsL2JwZi9idGYuYy00MDQyLVx0XHQgKiBpbiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MuXG4tLVxua2VybmVsL2JwZi9idGYuYz03OTU2PXN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTc5ODItXHRcdCAqIHJldHVybnMgdG8gdGhlIGtlcm5lbCwgd2hpY2ggaGFzIG5vIGFyZW5hIHRvIGNhc3QgdGhlIGFkZHJlc3Ncbmtlcm5lbC9icGYvYnRmLmM6Nzk4MzpcdFx0ICogYmFjayBpbnRvLiBBIGxvY2FsIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIGlubGluZSwgc28gaXRzIGNhbGxlclxua2VybmVsL2JwZi9idGYuYy03OTg0LVx0XHQgKiByZWNlaXZlcyB0aGUgcmVhbCByZWdpc3RlciBzdGF0ZSBhbmQgYW55IG1lbWJlciBpcyBmaW5lLlxuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODUyMD1zdGF0aWMgaW50IGJ0Zl9tb2R1bGVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgb3AsXG4tLVxua2VybmVsL2JwZi9idGYuYy04NjE0LVx0XHRcdCAqIGJ0Zl90cnlfZ2V0X21vZHVsZSgpIG9uIHN1Y2ggQlRGcyB3aWxsIGZhaWwuIFRoaXMgbWF5XG5rZXJuZWwvYnBmL2J0Zi5jOjg2MTU6XHRcdFx0ICogYmUgY2FsbGVkIGFnYWluIG9uIGJ0Zl9wdXQoKSwgYnV0IGl0JiMzOTtzIG9rIHRvIGRvIHNvLlxua2VybmVsL2JwZi9idGYuYy04NjE2LVx0XHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODkxOT1zdGF0aWMgaW50IGJ0Zl9wb3B1bGF0ZV9rZnVuY19zZXQoc3RydWN0IGJ0ZiAqYnRmLCBlbnVtIGJ0Zl9rZnVuY19ob29rIGhvb2ssXG4tLVxua2VybmVsL2JwZi9idGYuYy04OTY1LVx0c2V0ID0gdGFiLVx1MDAzZXNldHNbaG9va107XG5rZXJuZWwvYnBmL2J0Zi5jOjg5NjY6XHQvKiBXYXJuIHdoZW4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldCBpcyBjYWxsZWQgdHdpY2UgZm9yIHRoZSBzYW1lIGhvb2tcbmtlcm5lbC9icGYvYnRmLmMtODk2Ny1cdCAqIGZvciBtb2R1bGUgc2V0cy5cbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTY4PXN0YXRpYyB2b2lkIG1hcmtfc3VicHJvZ19taWdodF90aHJvdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmKVxuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNzctICogJiMzOTt3JiMzOTsgaXMgYSBjYWxsZWUgZW50cnkgcG9pbnQuXG5rZXJuZWwvYnBmL2NmZy5jOjc4OiAqIEV2ZW50dWFsbHkgdGhpcyBmdW5jdGlvbiB3b3VsZCBiZSBjYWxsZWQgd2hlbiBlbnYtXHUwMDNlY2ZnLmluc25fc3RhdGVbd10gPT0gRVhQTE9SRUQuXG5rZXJuZWwvYnBmL2NmZy5jLTc5LSAqIFJlbHkgb24gREZTIHRyYXZlcnNhbCBvcmRlciBhbmQgYWJzZW5jZSBvZiByZWN1cnNpdmUgY2FsbHMgdG8gZ3VhcmFudGVlIHRoYXRcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTQ1MT1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy00ODUtXHRcdC8qIEZvciBmdW5jdGlvbnMgdGhhdCBpbnZva2UgY2FsbGJhY2tzIGl0IGlzIG5vdCBrbm93biBob3cgbWFueSB0aW1lc1xua2VybmVsL2JwZi9jZmcuYzo0ODY6XHRcdCAqIGNhbGxiYWNrIHdvdWxkIGJlIGNhbGxlZC4gVmVyaWZpZXIgbW9kZWxzIGNhbGxiYWNrIGNhbGxpbmcgZnVuY3Rpb25zXG5rZXJuZWwvYnBmL2NmZy5jLTQ4Ny1cdFx0ICogYnkgcmVwZWF0ZWRseSB2aXNpdGluZyBjYWxsYmFjayBib2RpZXMgYW5kIHJldHVybmluZyB0byBvcmlnaW4gY2FsbFxuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNTAzLVx0XHRcdHJldCA9IGJwZl9nZXRfaGVscGVyX3Byb3RvKGVudiwgaW5zbi1cdTAwM2VpbW0sIFx1MDAyNmZwKTtcbmtlcm5lbC9icGYvY2ZnLmM6NTA0Olx0XHRcdC8qIElmIGNhbGxlZCBpbiBhIG5vbi1zbGVlcGFibGUgY29udGV4dCBwcm9ncmFtIHdpbGwgYmVcbmtlcm5lbC9icGYvY2ZnLmMtNTA1LVx0XHRcdCAqIHJlamVjdGVkIGFueXdheSwgc28gd2Ugc2hvdWxkIGVuZCB1cCB3aXRoIHByZWNpc2Vcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTUzNi1cdFx0XHR9XG5rZXJuZWwvYnBmL2NmZy5jOjUzNzpcdFx0XHQvKiBTYW1lIGFzIGhlbHBlcnMsIGlmIGNhbGxlZCBpbiBhIG5vbi1zbGVlcGFibGUgY29udGV4dFxua2VybmVsL2JwZi9jZmcuYy01MzgtXHRcdFx0ICogcHJvZ3JhbSB3aWxsIGJlIHJlamVjdGVkIGFueXdheSwgc28gd2Ugc2hvdWxkIGVuZCB1cFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtODAzLSAqIEV4YWN0bHkgb25lIG9mIEBwcm9nIG9yIEBsaW5rIGNhbiBiZSBub24tbnVsbC5cbmtlcm5lbC9icGYvY2dyb3VwLmM6ODA0OiAqIE11c3QgYmUgY2FsbGVkIHdpdGggY2dyb3VwX211dGV4IGhlbGQuXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNS0gKi9cbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwMjk9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDUwLSAqXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNTE6ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC5cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA1Mi0gKi9cbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExNTY9c3RhdGljIHZvaWQgcHVyZ2VfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExOTQtICogQXQgbW9zdCBvbmUgb2YgQHByb2cgb3IgQGxpbmsgY2FuIGJlIG5vbi1OVUxMLlxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTk1OiAqIE11c3QgYmUgY2FsbGVkIHdpdGggY2dyb3VwX211dGV4IGhlbGQuXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExOTYtICovXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMjYwPXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9kZXRhY2goc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI3MC1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTI3MTovKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNncm91cF9tdXRleCBoZWxkIHRvIGF2b2lkIHJhY2VzLiAqL1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjcyLXN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3F1ZXJ5KHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MjIzND1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdF9rZXJuKHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjI1NC1cdCAqIEhlcmUgd2UgYWx3YXlzIHBhc3MgdGhlIGRhdGEgYW5kIG1lbXNldCgpIHNob3VsZFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMjU1Olx0ICogYmUgY2FsbGVkIGlmIHRoYXQgZGF0YSBzaG91bGRuJiMzOTt0IGJlIFwmIzM0O2V4cG9ydGVkXCYjMzQ7Llxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMjU2LVx0ICovXG4tLVxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTMwLSAqXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6MzE6ICogTm90ZTogdGhlIGl0ZXJfcHJvZyBpcyBjYWxsZWQgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC5cbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0zMi0gKlxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBwcmVwYXJlX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy0xMTYtXHRcdGlmICh1bmxpa2VseSghZnVuY19wcm90byB8fCAhYnRmX3R5cGVfaXNfZnVuY19wcm90byhmdW5jX3Byb3RvKSkpXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjExNzpcdFx0XHQvKiBidGZfZnVuY19jaGVjaygpIGFscmVhZHkgdmVyaWZpZWQgaXQgZHVyaW5nIEJURiBsb2FkICovXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTExOC1cdFx0XHRnb3RvIGVycl9mcmVlO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTEyNDM9aW50IGJwZl9qaXRfYmluYXJ5X3BhY2tfZmluYWxpemUoc3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpyb19oZWFkZXIsXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTI1OC1cbmtlcm5lbC9icGYvY29yZS5jOjEyNTk6LyogYnBmX2ppdF9iaW5hcnlfcGFja19mcmVlIGlzIGNhbGxlZCBpbiB0d28gZGlmZmVyZW50IHNjZW5hcmlvczpcbmtlcm5lbC9icGYvY29yZS5jLTEyNjAtICogICAxKSB3aGVuIHRoZSBwcm9ncmFtIGlzIGZyZWVkIGFmdGVyO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI5OTc9aW50IGJwZl9wcm9nX2FycmF5X2NvcHlfaW5mbyhzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmFycmF5LFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMwMTEtXG5rZXJuZWwvYnBmL2NvcmUuYzozMDEyOlx0LyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdW5kZXIgdHJhY2UvYnBmX3RyYWNlLmM6IGJwZl9ldmVudF9tdXRleCAqL1xua2VybmVsL2JwZi9jb3JlLmMtMzAxMy1cdHJldHVybiBicGZfcHJvZ19hcnJheV9jb3B5X2NvcmUoYXJyYXksIHByb2dfaWRzLCByZXF1ZXN0X2NudCkgPyAtRU5PU1BDXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzEyMz1CUEZfQ0FMTF8wKGJwZl91c2VyX3JuZF91MzIpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzEyNi1cdCAqIG9mIHRoZSByZWdpc3RlcnMgcGFzc2VkIGludG8gdGhpcyBmdW5jdGlvbiwgdGhlbiBub3RlIHRoYXRcbmtlcm5lbC9icGYvY29yZS5jOjMxMjc6XHQgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG5hdGl2ZSBlQlBGIGFuZCBjbGFzc2ljLXRvLWVCUEZcbmtlcm5lbC9icGYvY29yZS5jLTMxMjgtXHQgKiB0cmFuc2Zvcm1hdGlvbnMuIFJlZ2lzdGVyIGFzc2lnbm1lbnRzIGZyb20gYm90aCBzaWRlcyBhcmVcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTM3OD1zdGF0aWMgdm9pZCBicV94bWl0X2FsbChzdHJ1Y3QgeGRwX2Rldl9idWxrX3F1ZXVlICpicSwgdTMyIGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmMtNDIyLVxua2VybmVsL2JwZi9kZXZtYXAuYzo0MjM6LyogX19kZXZfZmx1c2ggaXMgY2FsbGVkIGZyb20geGRwX2RvX2ZsdXNoKCkgd2hpY2ggX211c3RfIGJlIHNpZ25hbGxlZCBmcm9tIHRoZVxua2VybmVsL2JwZi9kZXZtYXAuYy00MjQtICogZHJpdmVyIGJlZm9yZSByZXR1cm5pbmcgZnJvbSBpdHMgbmFwaS1cdTAwM2Vwb2xsKCkgcm91dGluZS4gU2VlIHRoZSBjb21tZW50IGFib3ZlXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYz05NDk9c3RhdGljIGxvbmcgX19kZXZfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTk2My1cbmtlcm5lbC9icGYvZGV2bWFwLmM6OTY0Olx0LyogYWxyZWFkeSB2ZXJpZmllZCB2YWx1ZV9zaXplIFx1MDAzYz0gc2l6ZW9mIHZhbCAqL1xua2VybmVsL2JwZi9kZXZtYXAuYy05NjUtXHRtZW1jcHkoXHUwMDI2dmFsLCB2YWx1ZSwgbWFwLVx1MDAzZXZhbHVlX3NpemUpO1xuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9OTk4PXN0YXRpYyBsb25nIF9fZGV2X21hcF9oYXNoX3VwZGF0ZV9lbGVtKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTEwMDctXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjEwMDg6XHQvKiBhbHJlYWR5IHZlcmlmaWVkIHZhbHVlX3NpemUgXHUwMDNjPSBzaXplb2YgdmFsICovXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTEwMDktXHRtZW1jcHkoXHUwMDI2dmFsLCB2YWx1ZSwgbWFwLVx1MDAzZXZhbHVlX3NpemUpO1xuLS1cbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jLTEzLSAqIHRoZXJlIGlzIGF2YWlsYWJsZSByb29tIGluIHRoZSBkaXNwYXRjaGVyIGEgZGlyZWN0IGNhbGwgdG8gdGhlIEJQRlxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM6MTQ6ICogcHJvZ3JhbSB3aWxsIGJlIGdlbmVyYXRlZC4gQWxsIGNhbGxzIHRvIHRoZSBCUEYgcHJvZ3JhbXMgY2FsbGVkIHZpYVxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmMtMTUtICogdGhlIGRpc3BhdGNoZXIgd2lsbCB0aGVuIGJlIGEgZGlyZWN0IGNhbGwsIGluc3RlYWQgb2YgYW5cbi0tXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmM9OT1zdHJ1Y3QgZG1hYnVmX2l0ZXJfcHJpdiB7XG4tLVxua2VybmVsL2JwZi9kbWFidWZfaXRlci5jLTEyLVx0ICogcHJldmVudCBkZXN0cnVjdGlvbiBiZXR3ZWVuIHN0b3Avc3RhcnQuIElmIHJlYWRpbmcgaXMgbm90IHJlc3VtZWQgYW5kXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmM6MTM6XHQgKiBzdGFydCBpcyBuZXZlciBjYWxsZWQgYWdhaW4sIHRoZW4gZG1hYnVmX2l0ZXJfc2VxX2ZpbmkgZHJvcHMgdGhlXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmMtMTQtXHQgKiByZWZlcmVuY2Ugd2hlbiB0aGUgaXRlcmF0b3IgaXMgcmVsZWFzZWQuXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjczPXN0YXRpYyB2b2lkIGh0YWJfZnJlZV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1LSAqIGJwZl9scnVfbGlzdC5jIGxvZ2ljLiBGb3IgZXhhbXBsZSwgY2VydGFpbiBjb2RlIHBhdGggb2Zcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NjogKiBicGZfbHJ1X3BvcF9mcmVlKCksIHdoaWNoIGlzIGNhbGxlZCBieSBmdW5jdGlvbiBwcmVhbGxvY19scnVfcG9wKCksXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTctICogd2lsbCBhY3F1aXJlIGxydV9sb2NrIGZpcnN0IGZvbGxvd2VkIGJ5IGFjcXVpcmluZyBidWNrZXRfbG9jay5cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz02ODk9c3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqc2VsZWN0X2J1Y2tldChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHUzMiBoYXNoKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTY5My1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjY5NDovKiB0aGlzIGxvb2t1cCBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQgd2l0aCBidWNrZXQgbG9jayB0YWtlbiAqL1xua2VybmVsL2JwZi9oYXNodGFiLmMtNjk1LXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsIHUzMiBoYXNoLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTcwNy1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjcwODovKiBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYnVja2V0IGxvY2suIGl0IHdpbGwgcmVwZWF0IHRoZSBsb29wIGluXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03MDktICogdGhlIHVubGlrZWx5IGV2ZW50IHdoZW4gZWxlbWVudHMgbW92ZWQgZnJvbSBvbmUgYnVja2V0IGludG8gYW5vdGhlclxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTg0MD1zdGF0aWMgdm9pZCBjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtODU4LVxua2VybmVsL2JwZi9oYXNodGFiLmM6ODU5Oi8qIEl0IGlzIGNhbGxlZCBmcm9tIHRoZSBicGZfbHJ1X2xpc3Qgd2hlbiB0aGUgTFJVIG5lZWRzIHRvIGRlbGV0ZVxua2VybmVsL2JwZi9oYXNodGFiLmMtODYwLSAqIG9sZGVyIGVsZW1lbnRzIGZyb20gdGhlIGh0YWIuXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MTU3MT1zdGF0aWMgdm9pZCBkZWxldGVfYWxsX2VsZW1lbnRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNTc0LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTU3NTpcdC8qIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGEgd29ya2VyIHRocmVhZCBhbmQgbWlncmF0aW9uIGhhcyBiZWVuIGRpc2FibGVkLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTU3Ni1cdCAqIHRoZXJlZm9yZSwgaXQgaXMgT0sgdG8gaW52b2tlIGJwZl9tZW1fY2FjaGVfZnJlZSgpIGRpcmVjdGx5LlxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTE2MjY9c3RhdGljIHZvaWQgaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE2MzAtXHQvKiBicGZfZnJlZV91c2VkX21hcHMoKSBvciBjbG9zZShtYXBfZmQpIHdpbGwgdHJpZ2dlciB0aGlzIG1hcF9mcmVlIGNhbGxiYWNrLlxua2VybmVsL2JwZi9oYXNodGFiLmM6MTYzMTpcdCAqIGJwZl9mcmVlX3VzZWRfbWFwcygpIGlzIGNhbGxlZCBhZnRlciBicGYgcHJvZyBpcyBubyBsb25nZXIgZXhlY3V0aW5nLlxua2VybmVsL2JwZi9oYXNodGFiLmMtMTYzMi1cdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gc3luY2hyb25pemVfcmN1KCkgaGVyZSB0byBwcm90ZWN0IG1hcCBlbGVtZW50cy5cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNjEwPXN0YXRpYyB2b2lkIGZkX2h0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjMwLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjYzMTovKiBvbmx5IGNhbGxlZCBmcm9tIHN5c2NhbGwgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI2MzItaW50IGJwZl9mZF9odGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiAqdmFsdWUpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY1MC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI2NTE6LyogT25seSBjYWxsZWQgZnJvbSBzeXNjYWxsICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjUyLWludCBicGZfZmRfaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTc5Nz12b2lkIGJwZl9icHJpbnRmX2NsZWFudXAoc3RydWN0IGJwZl9icHJpbnRmX2RhdGEgKmRhdGEpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtODE1LSAqIEluIGFyZ3VtZW50IHByZXBhcmF0aW9uIG1vZGUsIGlmIDAgaXMgcmV0dXJuZWQsIHNhZmUgdGVtcG9yYXJ5IGJ1ZmZlcnMgYXJlXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo4MTY6ICogYWxsb2NhdGVkIGFuZCBicGZfYnByaW50Zl9jbGVhbnVwIHNob3VsZCBiZSBjYWxsZWQgdG8gZnJlZSB0aGVtIGFmdGVyIHVzZS5cbmtlcm5lbC9icGYvaGVscGVycy5jLTgxNy0gKi9cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xMzE3PXN0YXRpYyBpbnQgX19icGZfYXN5bmNfaW5pdChzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4gKmFzeW5jLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgZmxhZ3MsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTM3Ny1cdCAqIHdoZW4gdGhlcmUgYXJlIGNvbmN1cnJlbnQgdXJlZiByZWxlYXNlIGFuZCBicGYgdGltZXIgaW5pdCwgZWl0aGVyXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoxMzc4Olx0ICogYnBmX3RpbWVyX2NhbmNlbF9hbmRfZnJlZSgpIGNhbGxlZCBieSB1cmVmIHJlbGVhc2UgcmVhZHMgYSBuby1OVUxMXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xMzc5LVx0ICogdGltZXIgb3IgYXRvbWljNjRfcmVhZCgpIGJlbG93IHJldHVybnMgYSB6ZXJvIHVzZXJjbnQuXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9MTY4Mz1zdGF0aWMgdm9pZCBicGZfYXN5bmNfY2FuY2VsX2FuZF9mcmVlKHN0cnVjdCBicGZfYXN5bmNfa2VybiAqYXN5bmMpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTcxMy0vKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MTcxNDogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBtYXBfZGVsZXRlL3VwZGF0ZV9lbGVtIGZvciBpbmRpdmlkdWFsIGVsZW1lbnQgYW5kXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzE1LSAqIGJ5IG9wcy1cdTAwM2VtYXBfcmVsZWFzZV91cmVmIHdoZW4gdGhlIHVzZXIgc3BhY2UgcmVmZXJlbmNlIHRvIGEgbWFwIHJlYWNoZXMgemVyby5cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xNzE3PXZvaWQgYnBmX3RpbWVyX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp2YWwpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTcyMi0vKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MTcyMzogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBtYXBfZGVsZXRlL3VwZGF0ZV9lbGVtIGZvciBpbmRpdmlkdWFsIGVsZW1lbnQgYW5kXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzI0LSAqIGJ5IG9wcy1cdTAwM2VtYXBfcmVsZWFzZV91cmVmIHdoZW4gdGhlIHVzZXIgc3BhY2UgcmVmZXJlbmNlIHRvIGEgbWFwIHJlYWNoZXMgemVyby5cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yMjQ3PXZvaWQgYnBmX2xpc3RfaGVhZF9mcmVlKGNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmZpZWxkLCB2b2lkICpsaXN0X2hlYWQsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjI1Ny1cdCAqIHRvbyBsb25nLCBhbmQgYWxzbyBwcmV2ZW50IGRlYWRsb2NrcyBpZiB0cmFjaW5nIHByb2dyYW1zIGVuZCB1cFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjI1ODpcdCAqIGV4ZWN1dGluZyBvbiBlbnRyeS9leGl0IG9mIGZ1bmN0aW9ucyBjYWxsZWQgaW5zaWRlIHRoZSBjcml0aWNhbFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjI1OS1cdCAqIHNlY3Rpb24sIGFuZCBlbmQgdXAgZG9pbmcgbWFwIG9wcyB0aGF0IGNhbGwgYnBmX2xpc3RfaGVhZF9mcmVlIGZvclxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTIzODg9X19icGZfa2Z1bmMgdm9pZCAqYnBmX3BlcmNwdV9vYmpfbmV3X2ltcGwodTY0IGxvY2FsX3R5cGVfaWRfX2ssIHZvaWQgKm1ldGFfX2lnbilcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMzkyLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjM5MzovKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBtaWdyYXRlX2Rpc2FibGUoKSwgYXMgcmVxdWlyZWQgYnkgYnBmX21lbV9mcmVlICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMzk0LXZvaWQgX19icGZfb2JqX2Ryb3BfaW1wbCh2b2lkICpwLCBjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCBib29sIHBlcmNwdSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDg2PXN0YXRpYyBpbnQgX19icGZfbGlzdF9hZGQoc3RydWN0IGJwZl9saXN0X25vZGVfa2VybiAqbm9kZSxcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDk0LVx0LyogSWYgbGlzdF9oZWFkIHdhcyAwLWluaXRpYWxpemVkIGJ5IG1hcCwgYnBmX29ial9pbml0X2ZpZWxkIHdhc24mIzM5O3Rcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0OTU6XHQgKiBjYWxsZWQgb24gaXRzIGZpZWxkcywgc28gaW5pdCBoZXJlXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDk2LVx0ICovXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjUyMS1mYWlsOlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjUyMjpcdC8qIE9ubHkgY2FsbGVkIGZyb20gQlBGIHByb2csIG5vIG5lZWQgdG8gbWlncmF0ZV9kaXNhYmxlICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNTIzLVx0X19icGZfb2JqX2Ryb3BfaW1wbCgodm9pZCAqKW4gLSBvZmYsIHJlYywgZmFsc2UpO1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTI1OTc9c3RhdGljIHN0cnVjdCBicGZfbGlzdF9ub2RlICpfX2JwZl9saXN0X2RlbChzdHJ1Y3QgYnBmX2xpc3RfaGVhZCAqaGVhZCxcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNjAzLVx0LyogSWYgbGlzdF9oZWFkIHdhcyAwLWluaXRpYWxpemVkIGJ5IG1hcCwgYnBmX29ial9pbml0X2ZpZWxkIHdhc24mIzM5O3Rcbmtlcm5lbC9icGYvaGVscGVycy5jOjI2MDQ6XHQgKiBjYWxsZWQgb24gaXRzIGZpZWxkcywgc28gaW5pdCBoZXJlXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNjA1LVx0ICovXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjY5MD1fX2JwZl9rZnVuYyBib29sIGJwZl9saXN0X2VtcHR5KHN0cnVjdCBicGZfbGlzdF9oZWFkICpoZWFkKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTI2OTQtXHQvKiBJZiBsaXN0X2hlYWQgd2FzIDAtaW5pdGlhbGl6ZWQgYnkgbWFwLCBicGZfb2JqX2luaXRfZmllbGQgd2FzbiYjMzk7dFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjY5NTpcdCAqIGNhbGxlZCBvbiBpdHMgZmllbGRzLCBzbyBpbml0IGhlcmVcbmtlcm5lbC9icGYvaGVscGVycy5jLTI2OTYtXHQgKi9cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yNzI1PXN0YXRpYyBpbnQgX19icGZfcmJ0cmVlX2FkZChzdHJ1Y3QgYnBmX3JiX3Jvb3QgKnJvb3QsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjczNy1cdGlmIChjbXB4Y2hnKFx1MDAyNm5vZGUtXHUwMDNlb3duZXIsIE5VTEwsIEJQRl9QVFJfUE9JU09OKSkge1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjczODpcdFx0LyogT25seSBjYWxsZWQgZnJvbSBCUEYgcHJvZywgbm8gbmVlZCB0byBtaWdyYXRlX2Rpc2FibGUgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jLTI3MzktXHRcdF9fYnBmX29ial9kcm9wX2ltcGwoKHZvaWQgKiluIC0gb2ZmLCByZWMsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00MzE4PV9fYnBmX2tmdW5jIGludCBicGZfdmVyaWZ5X3BrY3M3X3NpZ25hdHVyZShjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZGF0YV9wLFxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQzMzQtXHRcdCAqIEEgY2FsbCB0byBrZXlfdGFza19wZXJtaXNzaW9uKCkgaGVyZSB3b3VsZCBiZSByZWR1bmRhbnQsIGFzXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzM1Olx0XHQgKiBpdCBpcyBhbHJlYWR5IGRvbmUgYnkga2V5cmluZ19zZWFyY2goKSBjYWxsZWQgYnlcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzMzYtXHRcdCAqIGZpbmRfYXN5bW1ldHJpY19rZXkoKS5cbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NjIwPXN0YXRpYyB2b2lkIGRyYWluX21lbV9jYWNoZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNjIzLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjYyNDpcdC8qIE5vIHByb2dzIGFyZSB1c2luZyB0aGlzIGJwZl9tZW1fY2FjaGUsIGJ1dCBodGFiX21hcF9mcmVlKCkgY2FsbGVkXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNjI1LVx0ICogYnBmX21lbV9jYWNoZV9mcmVlKCkgZm9yIGFsbCByZW1haW5pbmcgZWxlbWVudHMgYW5kIHRoZXkgY2FuIGJlIGluXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTc3Nj1zdGF0aWMgdm9pZCBub3RyYWNlICp1bml0X2FsbG9jKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy04MTYtICogYWRkIGl0IHRvIHRoZSBmcmVlX2xsaXN0IG9mIHRoZSBjdXJyZW50IGNwdS5cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo4MTc6ICogTGV0IGtmcmVlKCkgbG9naWMgZGVhbCB3aXRoIGl0IHdoZW4gaXQmIzM5O3MgbGF0ZXIgY2FsbGVkIGZyb20gaXJxX3dvcmsuXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtODE4LSAqL1xuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTQxPXN0YXRpYyB2b2lkIG5ldG5zX2JwZl9hdHRhY2hfdHlwZV9uZWVkKGVudW0gbmV0bnNfYnBmX2F0dGFjaF90eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNTMtXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzo1NDovKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG5ldG5zX2JwZl9tdXRleCBoZWxkLiAqL1xua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNTUtc3RhdGljIHZvaWQgbmV0bnNfYnBmX3J1bl9hcnJheV9kZXRhY2goc3RydWN0IG5ldCAqbmV0LFxuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTIzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfbmV0bnNfbGlua19vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjM4LVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6MjM5Oi8qIE11c3QgYmUgY2FsbGVkIHdpdGggbmV0bnNfYnBmX211dGV4IGhlbGQuICovXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0yNDAtc3RhdGljIGludCBfX25ldG5zX2JwZl9wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTI5MT1pbnQgbmV0bnNfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMzU2LVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6MzU3Oi8qIE11c3QgYmUgY2FsbGVkIHdpdGggbmV0bnNfYnBmX211dGV4IGhlbGQuICovXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0zNTgtc3RhdGljIGludCBfX25ldG5zX2JwZl9wcm9nX2RldGFjaChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNDQtICogVGhlIGJhc2ljIHByaW5jaXBsZSBvZiBhIHF1ZXVlLWJhc2VkIHNwaW5sb2NrIGNhbiBiZXN0IGJlIHVuZGVyc3Rvb2Rcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjQ1OiAqIGJ5IHN0dWR5aW5nIGEgY2xhc3NpYyBxdWV1ZS1iYXNlZCBzcGlubG9jayBpbXBsZW1lbnRhdGlvbiBjYWxsZWQgdGhlXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy00Ni0gKiBNQ1MgbG9jay4gQSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBNQ1MgbG9jayBwYXBlciAoXCYjMzQ7QWxnb3JpdGhtcyBmb3IgU2NhbGFibGVcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz0yNjE9aW50IF9fbG9ja2Z1bmMgcmVzaWxpZW50X3Rhc19zcGluX2xvY2socnFzcGlubG9ja190ICpsb2NrKVxuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI2Ny1cdC8qXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzoyNjg6XHQgKiBXZSBhcmUgZWl0aGVyIGNhbGxlZCBkaXJlY3RseSBmcm9tIHJlc19zcGluX2xvY2sgYWZ0ZXIgZ3JhYmJpbmcgdGhlXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yNjktXHQgKiBkZWFkbG9jayBkZXRlY3Rpb24gZW50cnkgd2hlbiBxdWV1ZWQgc3BpbmxvY2tzIGFyZSBkaXNhYmxlZCwgb3IgZnJvbVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTg1PXN0YXRpYyBpbnQgbWF5YmVfZXhpdF9zY2Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xOTctXHRcdCAqIHRyYXZlcnNhbCBzdG9wcyB3aGVuOlxua2VybmVsL2JwZi9zdGF0ZXMuYzoxOTg6XHRcdCAqIGEuIFZlcmlmaWNhdGlvbiBlcnJvciBpcyBmb3VuZCwgbWF5YmVfZXhpdF9zY2MoKSBpcyBub3QgY2FsbGVkLlxua2VybmVsL2JwZi9zdGF0ZXMuYy0xOTktXHRcdCAqIGIuIFRvcCBsZXZlbCBCUEZfRVhJVCBpcyByZWFjaGVkLiBUb3AgbGV2ZWwgQlBGX0VYSVQgaXMgbm90IGEgbWVtYmVyXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz04Njk9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTkyMy0gKlxua2VybmVsL2JwZi9zdGF0ZXMuYzo5MjQ6ICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB2ZXJpZmllciBleHBsb3JpbmcgZGlmZmVyZW50IGJyYW5jaGVzIG9mXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTkyNS0gKiBleGVjdXRpb24gcG9wcGVkIGZyb20gdGhlIHN0YXRlIHN0YWNrLiBJZiBpdCBzZWVzIGFuIG9sZCBzdGF0ZSB0aGF0IGhhc1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzOT1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQ1MC1cdFx0XHQgKlxua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDUxOlx0XHRcdCAqIC0gV2hlbiBhIHZlcmlmaWNhdGlvbiBwYXRoIHRlcm1pbmF0ZXMsIGBtYXliZV9leGl0X3NjYygpYCBpcyBjYWxsZWRcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQ1Mi1cdFx0XHQgKiAgIGZyb20gYGJwZl91cGRhdGVfYnJhbmNoX2NvdW50cygpYC4gRm9yIHN0YXRlcyB3aXRoIGBicmFuY2hlcyA9PSAwYCwgaXRcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NTUtXHRcdFx0ICogICB0aGlzIFNDQyB2aXNpdCBoYXZlIGJlZW4gZXhwbG9yZWQuIGBwcm9wYWdhdGVfYmFja2VkZ2VzKClgIGlzIHRoZW5cbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQ1NjpcdFx0XHQgKiAgIGNhbGxlZCwgd2hpY2ggcHJvcGFnYXRlcyByZWFkIGFuZCBwcmVjaXNpb24gbWFya3MgdGhyb3VnaCB0aGVcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQ1Ny1cdFx0XHQgKiAgIGJhY2tlZGdlcyB1bnRpbCBhIGZpeGVkIHBvaW50IGlzIHJlYWNoZWQuXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9ODg1PXN0YXRpYyB2b2lkIGJwZl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTkxNC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjkxNTovKiBjYWxsZWQgZnJvbSB3b3JrcXVldWUgKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTkxNi1zdGF0aWMgdm9pZCBicGZfbWFwX2ZyZWVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTk1MT12b2lkIGJwZl9tYXBfcHV0KHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTUzLVx0aWYgKGF0b21pYzY0X2RlY19hbmRfdGVzdChcdTAwMjZtYXAtXHUwMDNlcmVmY250KSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6OTU0Olx0XHQvKiBicGZfbWFwX2ZyZWVfaWQoKSBtdXN0IGJlIGNhbGxlZCBmaXJzdCAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmMtOTU1LVx0XHRicGZfbWFwX2ZyZWVfaWQobWFwKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMDUyPXN0YXRpYyBzc2l6ZV90IGJwZl9kdW1teV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDYwLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA2MTovKiBjYWxsZWQgZm9yIGFueSBleHRyYSBtZW1vcnktbWFwcGVkIHJlZ2lvbnMgKGV4Y2VwdCBpbml0aWFsKSAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMTA2Mi1zdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDY5LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA3MDovKiBjYWxsZWQgZm9yIGFsbCB1bm1hcHBlZCBtZW1vcnkgcmVnaW9uIChpbmNsdWRpbmcgaW5pdGlhbCkgKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwNzEtc3RhdGljIHZvaWQgYnBmX21hcF9tbWFwX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyNTU9c3RhdGljIGludCBtYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzODAtI2RlZmluZSBCUEZfTUFQX0NSRUFURV9MQVNUX0ZJRUxEIGV4Y2xfcHJvZ19oYXNoX3NpemVcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzODE6LyogY2FsbGVkIHZpYSBzeXNjYWxsICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzgyLXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjU2Mj1zdGF0aWMgdm9pZCBicGZfcHJvZ19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI1NzgtXHRcdCAgIFwmIzM0O3JlY3Vyc2lvbl9taXNzZXM6XFx0JWxsdVxcblwmIzM0O1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MjU3OTpcdFx0ICAgXCYjMzQ7dmVyaWZpZWRfaW5zbnM6XFx0JXVcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNTgwLVx0XHQgICBwcm9nLVx1MDAzZXR5cGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjU4Ny1cdFx0ICAgc3RhdHMubWlzc2VzLFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjU4ODpcdFx0ICAgcHJvZy1cdTAwM2VhdXgtXHUwMDNldmVyaWZpZWRfaW5zbnMpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMjU4OS19XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzMxMT1zdGF0aWMgYm9vbCBicGZfbGlua19pc190cmFjZXBvaW50KHN0cnVjdCBicGZfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzIyLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzMyMzovKiBicGZfbGlua19mcmVlIGlzIGd1YXJhbnRlZWQgdG8gYmUgY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0ICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzI0LXN0YXRpYyB2b2lkIGJwZl9saW5rX2ZyZWUoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTMzNjA9c3RhdGljIHZvaWQgYnBmX2xpbmtfcHV0X2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzY2LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzM2NzovKiBicGZfbGlua19wdXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gYXRvbWljIGNvbnRleHQuIEl0IG5lZWRzIHRvIGJlIGNhbGxlZFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzM2OC0gKiBmcm9tIHNsZWVwYWJsZSBjb250ZXh0IGluIG9yZGVyIHRvIGFjcXVpcmUgc2xlZXBpbmcgbG9ja3MgZHVyaW5nIHRoZSBwcm9jZXNzLlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM2MzQ9c3RhdGljIGludCBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzcyNy1cdCAqXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzI4Olx0ICogLSBpZiB0Z3RfcHJvZyA9PSBOVUxMIHdoZW4gdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkIHVzaW5nIHRoZSBvbGRcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3MjktXHQgKiAgIHJhd190cmFjZXBvaW50X29wZW4gQVBJLCBhbmQgd2UgbmVlZCBhIHRhcmdldCBmcm9tIHByb2ctXHUwMDNlYXV4XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTA5OT1zdGF0aWMgaW50IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxNTgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1MTU5Olx0aW5mby52ZXJpZmllZF9pbnNucyA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZXZlcmlmaWVkX2luc25zO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTE2MC1cdGlmIChwcm9nLVx1MDAzZWF1eC1cdTAwM2VidGYpXG4tLVxua2VybmVsL2JwZi90bnVtLmM9MjY4PXN0cnVjdCB0bnVtIHRudW1fYnN3YXA2NChzdHJ1Y3QgdG51bSBhKVxuLS1cbmtlcm5lbC9icGYvdG51bS5jLTI4Mi0gKlxua2VybmVsL2JwZi90bnVtLmM6MjgzOiAqIE5vdGU6IGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggeiBcdTAwM2U9IHRtYXgsIGl0IGp1c3QgcmV0dXJuc1xua2VybmVsL2JwZi90bnVtLmM6Mjg0OiAqIGVhcmx5IHdpdGggdG1heDsgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB6IFx1MDAzYyB0bWluLCB0aGVcbmtlcm5lbC9icGYvdG51bS5jLTI4NS0gKiBhbGdvcml0aG0gYWxyZWFkeSByZXR1cm5zIHRtaW4uXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTg9c3RhdGljIGludCBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXAsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTA4LVx0aWYgKGNtZCA9PSBGVFJBQ0VfT1BTX0NNRF9FTkFCTEVfU0hBUkVfSVBNT0RJRllfU0VMRikge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTA5Olx0XHQvKiBUaGlzIGlzIGNhbGxlZCBpbnNpZGUgcmVnaXN0ZXJfZnRyYWNlX2RpcmVjdF9tdWx0aSgpLCBzb1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEwLVx0XHQgKiB0cmFtcG9saW5lJiMzOTtzIG11dGV4IGlzIGFscmVhZHkgbG9ja2VkLlxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEzMy1cdCAqXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMzQ6XHQgKiBUaGUgZm9sbG93aW5nIHR3byBjb21tYW5kcyBhcmUgY2FsbGVkIGZyb21cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEzNS1cdCAqXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYzMz1zdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzctXHQgKiBXaGVuIGJwZl90cmFtcG9saW5lX3VwZGF0ZSgpIGZhaWxzIGJlZm9yZSBtb2RpZnlfZmVudHJ5X211bHRpKCkvXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjM4Olx0ICogdW5yZWdpc3Rlcl9mZW50cnlfbXVsdGkoKSBpcyBjYWxsZWQsIGN1cl9pbWFnZSBpcyB1bmNoYW5nZWRcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzktXHQgKiAoY3VyX2ltYWdlID09IG9sZF9pbWFnZSkgYW5kIGZ0cmFjZSBzdGlsbCBwb2ludHMgdG8gaXQuIEZyZWVpbmdcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA3OD1zdGF0aWMgdm9pZCBfX3VwZGF0ZV9yZWc2NF9ib3VuZHMoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5Ni1cdFx0LyogVGhlIHU2NCByYW5nZSBhbmQgdGhlIHRudW0gb25seSBvdmVybGFwIGluIHRoZSBtYXhpbXVtIHZhbHVlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5NzpcdFx0ICogcmVwcmVzZW50ZWQgYnkgdGhlIHRudW0sIGNhbGxlZCB0bWF4Llxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTgtXHRcdCAqIHU2NDogIC0tLVt4eHh4eHhdLS0tLS1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDEzMD1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDE2MS1cdCAqIEFMVS4gU2VlIGFsc28gcmV0cmlldmVfcHRyX2xpbWl0KCkuIFRoZSBjaGVjayBpblxua2VybmVsL2JwZi92ZXJpZmllci5jOjQxNjI6XHQgKiBjaGVja19zdGFja19hY2Nlc3NfZm9yX3B0cl9hcml0aG1ldGljKCkgY2FsbGVkIGJ5XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDE2My1cdCAqIGFkanVzdF9wdHJfbWluX21heF92YWxzKCkgcHJldmVudHMgdXNlcnMgZnJvbSBjcmVhdGluZyBzdGFjayBwb2ludGVyc1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDAyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgc2l0dWF0aW9uOgoKKipDaGVja2luZyBmb3IgSW5pdGlhbGl6YXRpb24gb2YgYGVudi0mZ3Q7c3VicHJvZ190b3BvX29yZGVyYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdmVyaWZ5IGEgY3J1Y2lhbCBkZXRhaWwgcmVnYXJkaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgZW52LSZndDtzdWJwcm9nX3RvcG9fb3JkZXJgLiBJdCYjMzk7cyBlc3NlbnRpYWwgdGhhdCB0aGlzIGRhdGEgc3RydWN0dXJlIGlzIGFsd2F5cyBwcm9wZXJseSBzZXQgdXAgYmVmb3JlIGBkb19jaGVja19zdWJwcm9nc2AgaXMgaW52b2tlZC4gVGhpcyBpcyBhIGNvbW1vbiBwb2ludCBvZiBlcnJvciBpbiBjb21waWxlciBiYWNrZW5kcywgc28gSSBuZWVkIHRvIGJlIHN1cmUuIE15IG5leHQgc3RlcCBpcyB0byBpbml0aWF0ZSBhIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBzdWJwcm9nX3RvcG9fb3JkZXJgIHRocm91Z2hvdXQgdGhlIHJlbGV2YW50IGNvZGUgYmFzZS4gSSBuZWVkIHRvIGJlIHRob3JvdWdoIGFuZCBwcmVjaXNlIHRvIGNvbmZpcm0gaXRzIHByb3BlciBpbml0aWFsaXphdGlvbiBhbmQgdXNlLiBUaGlzIHNob3VsZG4mIzM5O3QgdGFrZSB0b28gbG9uZywgYnV0IGl0IG5lZWRzIHRvIGJlIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N1YnByb2dfdG9wb19vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9saXZlbmVzcy5jPTE5ODU9aW50IGJwZl9jb21wdXRlX3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMDE0LVx0Zm9yIChrID0gZW52LVx1MDAzZXN1YnByb2dfY250IC0gMTsgayBcdTAwM2U9IDA7IGstLSkge1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjIwMTU6XHRcdGludCBzdWIgPSBlbnYtXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2tdO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTIwMTYtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTMxMzU9c3RhdGljIGludCBzb3J0X3N1YnByb2dzX3RvcG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIwNC1cdFx0XHRcdGNvbG9yW2N1cl0gPSAyO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjMyMDU6XHRcdFx0XHRlbnYtXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW29yZGVyJiM0MzsmIzQzO10gPSBjdXI7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIwNi1cdFx0XHRcdHRvcC0tO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjEzLVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDt0b3BvX29yZGVyWyVkXSA9ICVzXFxuXCYjMzQ7LFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyMTQ6XHRcdFx0XHRpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgZW52LVx1MDAzZXN1YnByb2dfdG9wb19vcmRlcltpXSkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMTUtb3V0OlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTc1NT1zdGF0aWMgaW50IGRvX2NoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzc4LVx0Zm9yIChqID0gZW52LVx1MDAzZXN1YnByb2dfY250IC0gMTsgaiBcdTAwM2U9IDA7IGotLSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Nzc5Olx0XHRpID0gZW52LVx1MDAzZXN1YnByb2dfdG9wb19vcmRlcltqXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc4MC1cdFx0aWYgKCFpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzcwMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgc29ydF9zdWJwcm9nc190b3BvYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYHNvcnRfc3VicHJvZ3NfdG9wb2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBicGZfdmVyaWZpZXJfZW52YCBjb250ZXh0LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgaXRzIHB1cnBvc2UuIEl0JiMzOTtzIG9idmlvdXNseSBkZXNpZ25lZCBmb3IgdG9wb2xvZ2ljYWwgc29ydGluZyBvZiBzdWJwcm9ncmFtcyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpczogd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqdXNlZCo/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIGNoYWluIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBhbmQgdW5kZXJzdGFuZCB3aHkgYW5kIHdoZW4gdGhlIHZlcmlmaWVyIGRlY2lkZXMgdG8gaW52b2tlIHRoaXMgc29ydGluZyBmdW5jdGlvbi4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGtleSBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaW1wYWN0IGFuZCBpZGVudGlmeWluZyBwb3RlbnRpYWwgaXNzdWVzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byB0cmFjZSB0aG9zZSBjYWxsczsgZmluZGluZyB0aGlzIGZ1bmN0aW9uJiMzOTtzIGNhbGxlcnMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvcnRfc3VicHJvZ3NfdG9wbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTMwNjE9c3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTM0LSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjMxMzU6c3RhdGljIGludCBzb3J0X3N1YnByb2dzX3RvcG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTM2LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjEzMDY9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDc1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxNDc2Olx0cmV0ID0gc29ydF9zdWJwcm9nc190b3BvKGVudik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE0NzctXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE3MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGlzc3VlICpzaG91bGQqIGJlIHNvbWV3aGVyZSBhcm91bmQgbGluZSAyMTQ3NSBvZiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGxvZ2ljIHRoYXQmIzM5O3MgbGVhZGluZyB0byB0aGUgdW5leHBlY3RlZCBiZWhhdmlvciBJJiMzOTttIHNlZWluZy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGZsYXdzIGluIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcy4uLiB3ZWxsLCBpdCBjb3VsZCBiZSBhbnkgbnVtYmVyIG9mIHRoaW5ncy4gTWVtb3J5IGFjY2VzcyB0cmFja2luZz8gUmVnaXN0ZXIgc3RhdGUgbWFuYWdlbWVudD8gTG9vcCB1bnJvbGxpbmcgaW50ZXJhY3Rpb25zPyBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGlzc3VlIHdpdGggaG93IGl0IGludGVycHJldHMgaW5zdHJ1Y3Rpb24gc2VtYW50aWNzLCBvciBhIHN1YnRsZSBidWcgaW4gdGhlIGNvbnN0cmFpbnRzIGl0IGVuZm9yY2VzLiBHaXZlbiB0aGUgbmF0dXJlIG9mIEJQRiB2ZXJpZmljYXRpb24sIGl0JiMzOTtzIG9mdGVuIGEgY29tcGxleCBpbnRlcnBsYXkgb2YgZGlmZmVyZW50IGZhY3RvcnMsIHNvIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyBpbiB0aGF0IGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE0NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE0NzA6XHRcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4yMTQ3MTpcdFxuMjE0NzI6XHRcdHJldCA9IGJwZl9wcnVuZV9kZWFkX2JyYW5jaGVzKGVudik7XG4yMTQ3MzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIxNDc0Olx0XHRcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xuMjE0NzU6XHRcbjIxNDc2Olx0XHRyZXQgPSBzb3J0X3N1YnByb2dzX3RvcG8oZW52KTtcbjIxNDc3Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMjE0Nzg6XHRcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4yMTQ3OTpcdFxuMjE0ODA6XHRcdHJldCA9IGJwZl9jb21wdXRlX3NjYyhlbnYpO1xuMjE0ODE6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMTQ4MjpcdFx0XHRnb3RvIHNraXBfZnVsbF9jaGVjaztcbjIxNDgzOlx0XG4yMTQ4NDpcdFx0LyogbXVzdCBwcmVjZWRlIHRoZSBmaXJzdCBicGZfcmV0X3JlZ19wYWlyKCkgdXNlciBiZWxvdyAqL1xuMjE0ODU6XHRcdHJldCA9IGJwZl9jb21wdXRlX3N1YnByb2dfcmV0X3JlZ3MoZW52KTtcbjIxNDg2Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMjE0ODc6XHRcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4yMTQ4ODpcdFxuMjE0ODk6XHRcdHJldCA9IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKGVudik7XG4yMTQ5MDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIxNDkxOlx0XHRcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xuMjE0OTI6XHRcbjIxNDkzOlx0XHRyZXQgPSBtYXJrX2Zhc3RjYWxsX3BhdHRlcm5zKGVudik7XG4yMTQ5NDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIxNDk1Olx0XHRcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xuMjE0OTY6XHRcbjIxNDk3Olx0XHRyZXQgPSBkb19jaGVja19tYWluKGVudik7XG4yMTQ5ODpcdFx0cmV0ID0gcmV0ID86IGRvX2NoZWNrX3N1YnByb2dzKGVudik7XG4yMTQ5OTpcdFxuMjE1MDA6XHRcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eCkpXG4yMTUwMTpcdFx0XHRyZXQgPSBicGZfcHJvZ19vZmZsb2FkX2ZpbmFsaXplKGVudik7XG4yMTUwMjpcdFxuMjE1MDM6XHRza2lwX2Z1bGxfY2hlY2s6XG4yMTUwNDpcdFx0a3ZmcmVlKGVudi1cdTAwM2VleHBsb3JlZF9zdGF0ZXMpO1xuMjE1MDU6XHRcbjIxNTA2Olx0XHQvKiBtaWdodCBkZWNyZWFzZSBzdGFjayBkZXB0aCwga2VlcCBpdCBiZWZvcmUgcGFzc2VzIHRoYXRcbjIxNTA3Olx0XHQgKiBhbGxvY2F0ZSBhZGRpdGlvbmFsIHNsb3RzLlxuMjE1MDg6XHRcdCAqL1xuMjE1MDk6XHRcdGlmIChyZXQgPT0gMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwNDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBTdWJwcm9ncmFtIE9yZGVyaW5nKioKCk9rYXksIHNvIGBzb3J0X3N1YnByb2dzX3RvcG9gIG5lZWRzIHRvIGV4ZWN1dGUgYmVmb3JlIGJvdGggYGRvX2NoZWNrX21haW5gIGFuZCBgZG9fY2hlY2tfc3VicHJvZ3NgLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSBuZWVkIHRoZSB0b3BvbG9naWNhbCBzb3J0IHBlcmZvcm1lZCBiZWZvcmUgd2Ugc3RhcnQgdmFsaWRhdGluZyBhbnl0aGluZyBhZ2FpbnN0IHRoZSByZXN1bHRpbmcgb3JkZXIuIFRoZSBjcml0aWNhbCBwYXJ0IEkmIzM5O20gZm9jdXNpbmcgb24gbm93IGlzIGhvdyBgc3VicHJvZ190b3BvX29yZGVyYCBpcyBiZWluZyBhbGxvY2F0ZWQuIEkgcmVjYWxsIHRoYXQgdmFyaWFibGUsIGBzdWJwcm9nX3RvcG9fb3JkZXJgIGlzIGFsbG9jYXRlZCB3aXRoaW4gZWl0aGVyIGBicGZfY2hlY2tgIG9yIGBhbGxvY19lbnZgLiBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgY29uZmlybSB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBiZWNhdXNlIGRlcGVuZGluZyBvbiB3aGVuIGl0IGlzIHNldCwgaXQgd2lsbCBpbXBhY3QgdGhlIGVudGlyZSBjb250cm9sIGZsb3cgYW5kIG1ha2Ugc3VyZSBhbGwgY2hlY2tzIGhhdmUgYSB3ZWxsIGRlZmluZWQgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgdGhvc2UgZnVuY3Rpb25zIHRvIGJlIGNlcnRhaW4gSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N1YnByb2dfdG9wb19vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzEzNT1zdGF0aWMgaW50IHNvcnRfc3VicHJvZ3NfdG9wbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjA0LVx0XHRcdFx0Y29sb3JbY3VyXSA9IDI7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIwNTpcdFx0XHRcdGVudi1cdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJbb3JkZXImIzQzOyYjNDM7XSA9IGN1cjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjA2LVx0XHRcdFx0dG9wLS07XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMTMtXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3RvcG9fb3JkZXJbJWRdID0gJXNcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIxNDpcdFx0XHRcdGksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBlbnYtXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2ldKSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIxNS1vdXQ6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NzU1PXN0YXRpYyBpbnQgZG9fY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NzgtXHRmb3IgKGogPSBlbnYtXHUwMDNlc3VicHJvZ19jbnQgLSAxOyBqIFx1MDAzZT0gMDsgai0tKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3Nzk6XHRcdGkgPSBlbnYtXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2pdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzgwLVx0XHRpZiAoIWkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjkxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBzb3J0X3N1YnByb2dzX3RvcG9gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGVudi0mZ3Q7c3VicHJvZ190b3BvX29yZGVyYCBzdHJ1Y3R1cmUgaXMgcG9wdWxhdGVkLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIHRoZSBgc29ydF9zdWJwcm9nc190b3BvYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYWxsb2NhdGlvbiBhbmQgb3JkZXJpbmcgbG9naWMgbGlrZWx5IHJlc2lkZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhlIHN1YnByb2dyYW1zIGZyb20gYSB0b3BvbG9naWNhbCBwb2ludCBvZiB2aWV3LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGFyZSBzb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMTM1Olx0c3RhdGljIGludCBzb3J0X3N1YnByb2dzX3RvcG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbjMxMzY6XHR7XG4zMTM3Olx0XHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc2kgPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvO1xuMzEzODpcdFx0aW50ICppbnNuX3Bvc3RvcmRlciA9IGVudi1cdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXI7XG4zMTM5Olx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4zMTQwOlx0XHRpbnQgY250ID0gZW52LVx1MDAzZXN1YnByb2dfY250O1xuMzE0MTpcdFx0aW50ICpkZnNfc3RhY2sgPSBOVUxMO1xuMzE0MjpcdFx0aW50IHRvcCA9IDAsIG9yZGVyID0gMDtcbjMxNDM6XHRcdGludCBpLCByZXQgPSAwO1xuMzE0NDpcdFx0dTggKmNvbG9yID0gTlVMTDtcbjMxNDU6XHRcbjMxNDY6XHRcdGNvbG9yID0ga3Z6YWxsb2Nfb2JqcygqY29sb3IsIGNudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjMxNDc6XHRcdGRmc19zdGFjayA9IGt2bWFsbG9jX29ianMoKmRmc19zdGFjaywgY250LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuMzE0ODpcdFx0aWYgKCFjb2xvciB8fCAhZGZzX3N0YWNrKSB7XG4zMTQ5Olx0XHRcdHJldCA9IC1FTk9NRU07XG4zMTUwOlx0XHRcdGdvdG8gb3V0O1xuMzE1MTpcdFx0fVxuMzE1MjpcdFxuMzE1MzpcdFx0LypcbjMxNTQ6XHRcdCAqIERGUyBwb3N0LW9yZGVyIHRyYXZlcnNhbC5cbjMxNTU6XHRcdCAqIENvbG9yIHZhbHVlczogMCA9IHVudmlzaXRlZCwgMSA9IG9uIHN0YWNrLCAyID0gZG9uZS5cbjMxNTY6XHRcdCAqL1xuMzE1NzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuMzE1ODpcdFx0XHRpZiAoY29sb3JbaV0pXG4zMTU5Olx0XHRcdFx0Y29udGludWU7XG4zMTYwOlx0XHRcdGNvbG9yW2ldID0gMTtcbjMxNjE6XHRcdFx0ZGZzX3N0YWNrW3RvcCYjNDM7JiM0MztdID0gaTtcbjMxNjI6XHRcbjMxNjM6XHRcdFx0d2hpbGUgKHRvcCBcdTAwM2UgMCkge1xuMzE2NDpcdFx0XHRcdGludCBjdXIgPSBkZnNfc3RhY2tbdG9wIC0gMV07XG4zMTY1Olx0XHRcdFx0aW50IHBvX3N0YXJ0ID0gc2lbY3VyXS5wb3N0b3JkZXJfc3RhcnQ7XG4zMTY2Olx0XHRcdFx0aW50IHBvX2VuZCA9IHNpW2N1ciAmIzQzOyAxXS5wb3N0b3JkZXJfc3RhcnQ7XG4zMTY3Olx0XHRcdFx0Ym9vbCBwdXNoZWQgPSBmYWxzZTtcbjMxNjg6XHRcdFx0XHRpbnQgajtcbjMxNjk6XHRcbjMxNzA6XHRcdFx0XHRmb3IgKGogPSBwb19zdGFydDsgaiBcdTAwM2MgcG9fZW5kOyBqJiM0MzsmIzQzOykge1xuMzE3MTpcdFx0XHRcdFx0aW50IGlkeCA9IGluc25fcG9zdG9yZGVyW2pdO1xuMzE3MjpcdFx0XHRcdFx0aW50IGNhbGxlZTtcbjMxNzM6XHRcbjMxNzQ6XHRcdFx0XHRcdGlmICghYnBmX3BzZXVkb19jYWxsKFx1MDAyNmluc25baWR4XSkgXHUwMDI2XHUwMDI2ICFicGZfcHNldWRvX2Z1bmMoXHUwMDI2aW5zbltpZHhdKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MzAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkZpbmRpbmcgdGhlIEFsbG9jYXRpb24gb2YgYGVudi0mZ3Q7c3VicHJvZ190b3BvX29yZGVyYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgZW52LSZndDtzdWJwcm9nX3RvcG9fb3JkZXJgIGlzIGJlaW5nIGFsbG9jYXRlZC4gVGhpcyBmZWVscyBsaWtlIGEgY2xhc3NpYyBkZWJ1Z2dpbmcgZXhlcmNpc2UuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBzdGFydCBieSBkb2luZyBhIGNvbXByZWhlbnNpdmUgc2VhcmNoIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcsIHNvIEkmIzM5O2xsIGdvIHdpZGUsIHNlYXJjaGluZyB0aGUgZW50aXJlIHByb2plY3QgdHJlZS4gTGV0JiMzOTtzIHNlZSB3aGF0IEkgdHVybiB1cC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB3aWxsIGludm9sdmUgbG9va2luZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N1YnByb2dfdG9wb19vcmRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTkxOT1zdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiB7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC05NjQtXHQvKiBzdWJwcm9nIGluZGljZXMgc29ydGVkIGluIHRvcG9sb2dpY2FsIG9yZGVyOiBsZWF2ZXMgZmlyc3QsIGNhbGxlcnMgbGFzdCAqL1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDo5NjU6XHRpbnQgc3VicHJvZ190b3BvX29yZGVyW0JQRl9NQVhfU1VCUFJPR1MgJiM0MzsgMl07XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTk2Ni1cdHVuaW9uIHtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTk4NT1pbnQgYnBmX2NvbXB1dGVfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIwMTQtXHRmb3IgKGsgPSBlbnYtXHUwMDNlc3VicHJvZ19jbnQgLSAxOyBrIFx1MDAzZT0gMDsgay0tKSB7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjAxNTpcdFx0aW50IHN1YiA9IGVudi1cdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJba107XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjAxNi1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzEzNT1zdGF0aWMgaW50IHNvcnRfc3VicHJvZ3NfdG9wbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjA0LVx0XHRcdFx0Y29sb3JbY3VyXSA9IDI7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIwNTpcdFx0XHRcdGVudi1cdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJbb3JkZXImIzQzOyYjNDM7XSA9IGN1cjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjA2LVx0XHRcdFx0dG9wLS07XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMTMtXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3RvcG9fb3JkZXJbJWRdID0gJXNcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIxNDpcdFx0XHRcdGksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBlbnYtXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2ldKSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIxNS1vdXQ6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NzU1PXN0YXRpYyBpbnQgZG9fY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NzgtXHRmb3IgKGogPSBlbnYtXHUwMDNlc3VicHJvZ19jbnQgLSAxOyBqIFx1MDAzZT0gMDsgai0tKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3Nzk6XHRcdGkgPSBlbnYtXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2pdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzgwLVx0XHRpZiAoIWkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjkwCgkJCQkJCQlvdXRwdXQ6IDI3NQoJCQkJCQkJdGhvdWdodHM6IDgzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBzdWJwcm9nX3RvcG9fb3JkZXJgIGlzIGFuIGVtYmVkZGVkIGFycmF5IHdpdGhpbiBgc3RydWN0IGJwZl92ZXJpZmllcl9lbnZgLCBhbmQgYGVudmAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLiBUaGlzIGlzIGtleS4gTm93LCByZWdhcmRpbmcgdGhlIHBhdGNoIGl0c2VsZiwgaGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50OgoKMS4gICoqYGluY2x1ZGUvbGludXgvYnBmLmhgOioqIFRoZSBjaGFuZ2UgaW4gYHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eGAsIHJlcGxhY2luZyBzaW5nbGUtYml0IGJpdGZpZWxkcyBgY2FsbGVkYCBhbmQgYHZlcmlmaWVkYCB3aXRoIGBib29sIGNhbGxlZFsyXWAgYW5kIGBib29sIHZlcmlmaWVkWzJdYCwgaXMgZGVmaW5pdGVseSBpbnRlcmVzdGluZy4gVGhlc2UgYXV4aWxpYXJ5IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBkdXJpbmcgQlRGIHByb2Nlc3NpbmcuIFRoZSBjcml0aWNhbCB0aGluZyBpcyB0aGF0IHRoZXkgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIG9yIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2Jqc2AuIFRoaXMgc2V0cyB0aGUgc3RhZ2UuCgoyLiAgKipga2VybmVsL2JwZi92ZXJpZmllci5jYDoqKiBUaGUgY29yZSBsb2dpYyBoYXMgYmVlbiBtb2RpZmllZC4gSW4gYGNoZWNrX2Z1bmNfY2FsbCgpYCwgd2UmIzM5O3JlIG5vdyB0cmFja2luZyB0aGUgaW52b2NhdGlvbiBjb250ZXh0IGV4cGxpY2l0bHkgd2l0aCBgc3ViX2F1eC0mZ3Q7Y2FsbGVkW2luX3NsZWVwYWJsZV9jb250ZXh0KGVudildID0gdHJ1ZWAgaW5zdGVhZCBvZiBhIHNpbXBsZSBib29sZWFuIGFzc2lnbm1lbnQuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGluX3NsZWVwYWJsZWAgYXMgYSBwYXJhbWV0ZXIgdG8gYGRvX2NoZWNrX2NvbW1vbigpYCBhbmQgdGhlIGV4cGxpY2l0IHNldHRpbmcgb2YgYHN0YXRlLSZndDtpbl9zbGVlcGFibGVgIGlzIGltcG9ydGFudCBmb3IgaGFuZGxpbmcgc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIGNvbnRleHRzLCBhbmQgaXQgdXBkYXRlcyBpbnNuIGFjY3VtdWxhdGlvbi4gIGBkb19jaGVja19zdWJwcm9ncygpYCBpdGVyYXRlcyBpbiByZXZlcnNlIHRvcG9sb2dpY2FsIG9yZGVyLCBjaGVja2luZyBib3RoIGNvbnRleHRzIGlmIG1hcmtlZCBhcyBjYWxsZWQuICBGaW5hbGx5LCBgZG9fY2hlY2tfbWFpbigpYCBjYWxscyBgZG9fY2hlY2tfY29tbW9uKClgLiBUaGUgcmV2ZXJzZSB0b3BvbG9naWNhbCBvcmRlciBhbmQgZHVhbC1jb250ZXh0IGNoZWNraW5nIGlzIGEga2V5IGNoYW5nZS4KCjMuICAqKlNlbGZ0ZXN0czoqKiBUaGUgYWRkaXRpb24gb2YgdGVzdHMgZm9yIGdsb2JhbCBzdWJwcm9ncmFtcyBpbiBib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cyBpcyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIHdoYXQgdGhlIGRldmVsb3BlcnMgYXJlIHRyeWluZyB0byB2YWxpZGF0ZSwgZW5zdXJpbmcgdGhleSBoYXZlbiYjMzk7dCBpbnRyb2R1Y2VkIGFueSByZWdyZXNzaW9uIG9yIG5ldyBpc3N1ZXMgd2hlbiBoYW5kbGluZyBkaWZmZXJlbnQgY29udGV4dHMuCgpOb3csIGxldCYjMzk7cyBldmFsdWF0ZSB0aGlzIGluIHRoZSBjb250ZXh0IG9mIEtNU0FOIHZzLiBLQVNBTjoKCiogICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vcGUuIFRoZSBwYXRjaCBpcyB3b3JraW5nIG9uIGBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXhgLCB3aGljaCBpcyBlbnRpcmVseSBpbnRlcm5hbCB2ZXJpZmllciBtZXRhZGF0YS4gTm8gZGF0YSBmcm9tIHRoYXQgc3RydWN0IGlzIGV2ZXIgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCiogICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogTm8uICBGaWVsZHMgd2l0aGluIGBicGZfZnVuY19pbmZvX2F1eGAgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEFueSBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZXJlJiMzOTtzIG5vIHJpc2sgaGVyZS4KKiAgICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uOioqIE5vLiAgWmVyby1hbGxvY2F0aW9uIHZpYSBga3phbGxvY19vYmpzYCBpcyB2ZXJ5IHN0cmFpZ2h0Zm9yd2FyZC4KKiAgICoqQm91bmRzIGNoZWNrcyAmYW1wOyBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vLgoKUG90ZW50aWFsIGJ1Z3MsIGFzIEkgc2VlIGl0LCB3b3VsZCBiZSByZWxhdGVkIHRvOgoKKiAgIFZlcmlmaWVyIGxvZ2ljIGJ1Z3MgKHJlamVjdGluZyB2YWxpZCBwcm9ncmFtcywgYWNjZXB0aW5nIGludmFsaWQgcHJvZ3JhbXMgd2l0aCBpbmNvcnJlY3QgY29udGV4dCB2ZXJpZmljYXRpb24pLgoqICAgSW5maW5pdGUgbG9vcHMgb3Igb3JkZXJpbmcgaXNzdWVzIGR1cmluZyBzdWJwcm9ncmFtIGl0ZXJhdGlvbi4KKiAgIE91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIHRoZSBgY2FsbGVkYCBvciBgdmVyaWZpZWRgIGFycmF5cyBpZiBgaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KWAgcmV0dXJuZWQgYW55dGhpbmcgb3RoZXIgdGhhbiAwIG9yIDEuIEhvd2V2ZXIsIHNpbmNlIGl0IHJldHVybnMgYSBgYm9vbGAgYW5kIHdlIGtub3cgdGhlIHNpemUgb2YgdGhlIGFycmF5IGlzIDIsIGFueSBvdXQtb2YtYm91bmRzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiAvIGNvbXBpbGVyIGJvdW5kcyBjaGVja3MuIE5vbmUgb2YgdGhlc2UgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZXJlZm9yZSwgKipOZWVkc0tNU0FOID0gZmFsc2UuKioKCk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6CgoqICAgKipLQVNBTiAvIHN0YW5kYXJkIHNhbml0aXplcnM6KiogV2UmIzM5O3JlIHByb3RlY3RlZCBhZ2FpbnN0IHZlcmlmaWVyIGxvZ2ljIGJ1Z3MsIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIHRob3NlIGBjYWxsZWRgIC8gYHZlcmlmaWVkYCBhcnJheXMsIGFueSBwb3RlbnRpYWwgc3RhdGUgYWxsb2NhdGlvbiBlcnJvcnMsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgb3IgaW5maW5pdGUgbG9vcHMgYnkgS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLgoqICAgKipLTVNBTjoqKiBXZSYjMzk7cmUgKm5vdCogZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayB2YXJpYWJsZXMsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgb3IgZmllbGRzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1c2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGluIGNvbmRpdGlvbmFsIGxvZ2ljLiAgYHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eGAgaXMgY29uc2lzdGVudGx5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBremFsbG9jX29ianNgLiBObyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIGhlcmUuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBhbmQgdmVyaWZ5IGdsb2JhbCBzdWJwcm9ncmFtIGNhbGxzIHNlcGFyYXRlbHkgZm9yIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZS9SQ1UgY29udGV4dHMuIEl0IHJlcGxhY2VzIHRoZSBzaW5nbGUtYml0IGBjYWxsZWRgIGFuZCBgdmVyaWZpZWRgIGZsYWdzIGluIGBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXhgIHdpdGggdHdvLWVsZW1lbnQgYm9vbGVhbiBhcnJheXMgaW5kZXhlZCBieSBgaW5fc2xlZXBhYmxlYC5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLiBUaGUgYGJwZl9mdW5jX2luZm9fYXV4YCBzdHJ1Y3R1cmVzIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAodmlhIGBremFsbG9jX29ianNgKSwgYW5kIGFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiBgZG9fY2hlY2tfc3VicHJvZ3MoKWAsIGBkb19jaGVja19jb21tb24oKWAsIGFuZCBgY2hlY2tfZnVuY19jYWxsKClgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlIGFycmF5cyBhcmUgaW5kZXhlZCB1c2luZyBib29sZWFuIHZhbHVlcyAoMCBvciAxKSwgbWF0Y2hpbmcgdGhlIGFycmF5IGRpbWVuc2lvbi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IEFueSBtZW1vcnkgYWNjZXNzIGlzc3VlcyAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIGFjY2VzcywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgc3RhdGUgYWxsb2NhdGlvbiBpc3N1ZXMsIG9yIGxvZ2ljL3ZlcmlmaWVyIHRyYXZlcnNhbCBidWdzKSB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHRyYWNrIGFuZCB2ZXJpZnkgZ2xvYmFsIHN1YnByb2dyYW0gY2FsbHMgc2VwYXJhdGVseSBmb3Igc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlL1JDVSBjb250ZXh0cy4gSXQgcmVwbGFjZXMgdGhlIHNpbmdsZS1iaXQgYGNhbGxlZGAgYW5kIGB2ZXJpZmllZGAgZmxhZ3MgaW4gYHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eGAgd2l0aCB0d28tZWxlbWVudCBib29sZWFuIGFycmF5cyBpbmRleGVkIGJ5IGBpbl9zbGVlcGFibGVgLlxuXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suIFRoZSBgYnBmX2Z1bmNfaW5mb19hdXhgIHN0cnVjdHVyZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uICh2aWEgYGt6YWxsb2Nfb2Jqc2ApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGBkb19jaGVja19zdWJwcm9ncygpYCwgYGRvX2NoZWNrX2NvbW1vbigpYCwgYW5kIGBjaGVja19mdW5jX2NhbGwoKWAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGUgYXJyYXlzIGFyZSBpbmRleGVkIHVzaW5nIGJvb2xlYW4gdmFsdWVzICgwIG9yIDEpLCBtYXRjaGluZyB0aGUgYXJyYXkgZGltZW5zaW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuLSBLQVNBTiAvIFN0YW5kYXJkIERldGVjdG9yczogQW55IG1lbW9yeSBhY2Nlc3MgaXNzdWVzIChzdWNoIGFzIGFycmF5IG91dC1vZi1ib3VuZHMgYWNjZXNzLCBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBzdGF0ZSBhbGxvY2F0aW9uIGlzc3Vlcywgb3IgbG9naWMvdmVyaWZpZXIgdHJhdmVyc2FsIGJ1Z3MpIHdvdWxkIGJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6MTMuMjM2MzM3MTMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzOTM1OTM3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImRvX2NoZWNrX3N1YnByb2dzXCIsXG4gICAgXCJkb19jaGVja19jb21tb25cIixcbiAgICBcImNoZWNrX2Z1bmNfY2FsbFwiLFxuICAgIFwiZG9fY2hlY2tfbWFpblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBhbmQgdmVyaWZ5IGdsb2JhbCBzdWJwcm9ncmFtIGNhbGxzIHNlcGFyYXRlbHkgZm9yIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZS9SQ1UgY29udGV4dHMuIEl0IHJlcGxhY2VzIHRoZSBzaW5nbGUtYml0IGBjYWxsZWRgIGFuZCBgdmVyaWZpZWRgIGZsYWdzIGluIGBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXhgIHdpdGggdHdvLWVsZW1lbnQgYm9vbGVhbiBhcnJheXMgaW5kZXhlZCBieSBgaW5fc2xlZXBhYmxlYC5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suIFRoZSBgYnBmX2Z1bmNfaW5mb19hdXhgIHN0cnVjdHVyZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uICh2aWEgYGt6YWxsb2Nfb2Jqc2ApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGBkb19jaGVja19zdWJwcm9ncygpYCwgYGRvX2NoZWNrX2NvbW1vbigpYCwgYW5kIGBjaGVja19mdW5jX2NhbGwoKWAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGUgYXJyYXlzIGFyZSBpbmRleGVkIHVzaW5nIGJvb2xlYW4gdmFsdWVzICgwIG9yIDEpLCBtYXRjaGluZyB0aGUgYXJyYXkgZGltZW5zaW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IEFueSBtZW1vcnkgYWNjZXNzIGlzc3VlcyAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIGFjY2VzcywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgc3RhdGUgYWxsb2NhdGlvbiBpc3N1ZXMsIG9yIGxvZ2ljL3ZlcmlmaWVyIHRyYXZlcnNhbCBidWdzKSB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHRyYWNrIGFuZCB2ZXJpZnkgZ2xvYmFsIHN1YnByb2dyYW1zIHNlcGFyYXRlbHkgYWNyb3NzIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBleGVjdXRpb24gY29udGV4dHMsIG1vZGlmeWluZyBzdWJwcm9ncmFtIHZlcmlmaWNhdGlvbiBsb29wcywgdG9wb2xvZ2ljYWwgdHJhdmVyc2FsIG9yZGVyLCBhbmQgY29udGV4dCBzdGF0ZSBoYW5kbGluZyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjEzLjIzNjM0Mzc0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5NDc5NzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTZlZmE2MDNhMGQ1MjJlNmVlYzYzMjMwZDE5YTZlMjYwZGZlZTNkOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDEwOjA1OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuaW5kZXggM2E3ZWIyMTg1YzM1NC4uNjZkMDQyNDRjNzM3OCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbkBAIC0xNjUwLDggKzE2NTAsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFnc1xcbiBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXgge1xcbiBcXHR1MTYgbGlua2FnZTtcXG4gXFx0Ym9vbCB1bnJlbGlhYmxlO1xcbi1cXHRib29sIGNhbGxlZCA6IDE7XFxuLVxcdGJvb2wgdmVyaWZpZWQgOiAxO1xcbitcXHQvKiBJbmRleGVkIGJ5IGluX3NsZWVwYWJsZS4gKi9cXG4rXFx0Ym9vbCBjYWxsZWRbMl07XFxuK1xcdGJvb2wgdmVyaWZpZWRbMl07XFxuIH07XFxuIFxcbiBlbnVtIGJwZl9qaXRfcG9rZV9yZWFzb24ge1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCA1YjUxZTdlZTFhM2Y5Li5mNzU5YTAyMGM4YTVhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC05OTU3LDYgKzk5NTcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdGlmIChlcnIgPT0gLUVGQVVMVClcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0aWYgKGJwZl9zdWJwcm9nX2lzX2dsb2JhbChlbnYsIHN1YnByb2cpKSB7XFxuK1xcdFxcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgc3VicHJvZyk7XFxuIFxcdFxcdGNvbnN0IGNoYXIgKnN1Yl9uYW1lID0gYnBmX3N1YnByb2dfbmFtZShlbnYsIHN1YnByb2cpO1xcbiBcXHRcXHRjb25zdCBjaGFyICpvcGVyYXRpb247XFxuIFxcdFxcdGJvb2wgcmV0dXJuc192b2lkO1xcbkBAIC05OTg4LDExICs5OTg5LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0aWYgKGVudi1cXHUwMDNlbG9nLmxldmVsIFxcdTAwMjYgQlBGX0xPR19MRVZFTClcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJGdW5jIyVkICgnJXMnKSBpcyBnbG9iYWwgYW5kIGFzc3VtZWQgdmFsaWQuXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRzdWJwcm9nLCBzdWJfbmFtZSk7XFxuK1xcdFxcdHN1Yl9hdXgtXFx1MDAzZWNhbGxlZFtpbl9zbGVlcGFibGVfY29udGV4dChlbnYpXSA9IHRydWU7XFxuIFxcdFxcdHJldHVybnNfdm9pZCA9IHN1YnByb2dfcmV0dXJuc192b2lkKGVudiwgc3VicHJvZyk7XFxuIFxcdFxcdGlmIChlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5jaGFuZ2VzX3BrdF9kYXRhKVxcbiBcXHRcXHRcXHRjbGVhcl9hbGxfcGt0X3BvaW50ZXJzKGVudik7XFxuLVxcdFxcdC8qIG1hcmsgZ2xvYmFsIHN1YnByb2cgZm9yIHZlcmlmeWluZyBhZnRlciBtYWluIHByb2cgKi9cXG4tXFx0XFx0c3VicHJvZ19hdXgoZW52LCBzdWJwcm9nKS1cXHUwMDNlY2FsbGVkID0gdHJ1ZTtcXG4gXFx0XFx0aWYgKHJldHVybnNfdm9pZClcXG4gXFx0XFx0XFx0YnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgXFx1MDAyNmNhbGxlci1cXHUwMDNlcmVnc1tCUEZfUkVHXzBdLCBCUEZfRElBR19NT0RfQ0FMTEVSX1NBVkVEKTtcXG4gXFx0XFx0ZWxzZVxcbkBAIC0xMDgwNCw3ICsxMDgwNCwxMiBAQCBpbnQgYnBmX2dldF9oZWxwZXJfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGZ1bmNfaWQsXFxuIFxcdHJldHVybiAqcHRyIFxcdTAwMjZcXHUwMDI2ICgqcHRyKS1cXHUwMDNlZnVuYyA/IDAgOiAtRUlOVkFMO1xcbiB9XFxuIFxcbi0vKiBDaGVjayBpZiB3ZSdyZSBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LiAqL1xcbisvKlxcbisgKiBUaGlzIHByZWRpY2F0ZSBpcyB0aGUgaW52ZXJzZSBvZiBpbl9yY3VfY3MoKTogbm9uLXNsZWVwYWJsZSBwcm9ncmFtcyBhbmRcXG4rICogZXZlcnkgY29uZGl0aW9uIHRoYXQgcHJldmVudHMgc2xlZXBpbmcgYWxzbyBwcm92aWRlIFJDVSBwcm90ZWN0aW9uLiBHbG9iYWxcXG4rICogc3VicHJvZyB2ZXJpZmljYXRpb24gcmVsaWVzIG9uIHRoaXMgZXF1aXZhbGVuY2UgdG8gcmVwcmVzZW50IHRoZSBjYWxsZXInc1xcbisgKiBleGVjdXRpb24gY29udGV4dCB1c2luZyBvbmx5IHRoZSBpbl9zbGVlcGFibGUgYml0LlxcbisgKi9cXG4gc3RhdGljIGlubGluZSBib29sIGluX3NsZWVwYWJsZV9jb250ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIHtcXG4gXFx0cmV0dXJuICFlbnYtXFx1MDAzZWN1cl9zdGF0ZS1cXHUwMDNlYWN0aXZlX3JjdV9sb2NrcyBcXHUwMDI2XFx1MDAyNlxcbkBAIC0xOTU2MCwxMyArMTk1NjUsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9zdGF0ZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcXG4rc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2csIGJvb2wgaW5fc2xlZXBhYmxlKVxcbiB7XFxuIFxcdGJvb2wgcG9wX2xvZyA9ICEoZW52LVxcdTAwM2Vsb2cubGV2ZWwgXFx1MDAyNiBCUEZfTE9HX0xFVkVMMik7XFxuIFxcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWIgPSBzdWJwcm9nX2luZm8oZW52LCBzdWJwcm9nKTtcXG4gXFx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXg7XFxuIFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXRlO1xcbiBcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncztcXG4rXFx0dTMyIG9sZF9pbnNuc190b3RhbCA9IHN1Yi1cXHUwMDNlaW5zbnNfdG90YWw7XFxuIFxcdHUzMiBpbnNuX3Byb2Nlc3NlZCA9IGVudi1cXHUwMDNlaW5zbl9wcm9jZXNzZWQ7XFxuIFxcdGludCByZXQsIGk7XFxuIFxcbkBAIC0xOTU3OSw3ICsxOTU4NSw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxcbiBcXHRzdGF0ZS1cXHUwMDNlY3VyZnJhbWUgPSAwO1xcbiBcXHRzdGF0ZS1cXHUwMDNlc3BlY3VsYXRpdmUgPSBmYWxzZTtcXG4gXFx0c3RhdGUtXFx1MDAzZWJyYW5jaGVzID0gMTtcXG4tXFx0c3RhdGUtXFx1MDAzZWluX3NsZWVwYWJsZSA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlc2xlZXBhYmxlO1xcbitcXHRzdGF0ZS1cXHUwMDNlaW5fc2xlZXBhYmxlID0gaW5fc2xlZXBhYmxlO1xcbiBcXHRzdGF0ZS1cXHUwMDNlZnJhbWVbMF0gPSBremFsbG9jX29iaihzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghc3RhdGUtXFx1MDAzZWZyYW1lWzBdKSB7XFxuIFxcdFxcdGtmcmVlKHN0YXRlKTtcXG5AQCAtMTk3MjEsNyArMTk3MjcsOCBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcXG4gXFx0ICogQWNjdW11bGF0ZSB0aGVpciB0b3RhbCBjb3VudHMgYXMgdG90YWwgY291bnRzIG9mIHRoZSBtYWluIG9yXFxuIFxcdCAqIGdsb2JhbCBzdWJwcm9nIGhvc3RpbmcgdGhlIGFzeW5jIGNhbGwuXFxuIFxcdCAqL1xcbi1cXHRlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5pbnNuc190b3RhbCA9IGVudi1cXHUwMDNlaW5zbl9wcm9jZXNzZWQgLSBpbnNuX3Byb2Nlc3NlZDtcXG4rXFx0ZW52LVxcdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10uaW5zbnNfdG90YWwgPSBvbGRfaW5zbnNfdG90YWwgK1xcbitcXHRcXHRcXHRcXHRcXHRcXHQoZW52LVxcdTAwM2VpbnNuX3Byb2Nlc3NlZCAtIGluc25fcHJvY2Vzc2VkKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTk3NDksNDUgKzE5NzU2LDU1IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eDtcXG4gXFx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICpzdWJfYXV4O1xcbi1cXHRpbnQgaSwgcmV0LCBuZXdfY250O1xcbitcXHRpbnQgY29udGV4dCwgaSwgaiwgcmV0LCBuZXdfY250O1xcbiBcXG4gXFx0aWYgKCFhdXgtXFx1MDAzZWZ1bmNfaW5mbylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHQvKiBleGNlcHRpb24gY2FsbGJhY2sgaXMgcHJlc3VtZWQgdG8gYmUgYWx3YXlzIGNhbGxlZCAqL1xcbi1cXHRpZiAoZW52LVxcdTAwM2VleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZylcXG4tXFx0XFx0c3VicHJvZ19hdXgoZW52LCBlbnYtXFx1MDAzZWV4Y2VwdGlvbl9jYWxsYmFja19zdWJwcm9nKS1cXHUwMDNlY2FsbGVkID0gdHJ1ZTtcXG4rXFx0aWYgKGVudi1cXHUwMDNlZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpIHtcXG4rXFx0XFx0c3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgZW52LVxcdTAwM2VleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZyk7XFxuK1xcdFxcdHN1Yl9hdXgtXFx1MDAzZWNhbGxlZFtlbnYtXFx1MDAzZXByb2ctXFx1MDAzZXNsZWVwYWJsZV0gPSB0cnVlO1xcbitcXHR9XFxuIFxcbiBhZ2FpbjpcXG4gXFx0bmV3X2NudCA9IDA7XFxuLVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBlbnYtXFx1MDAzZXN1YnByb2dfY250OyBpKyspIHtcXG4rXFx0LypcXG4rXFx0ICogV2FsayBjYWxsZXJzIGJlZm9yZSBjYWxsZWVzIHNvIGVhY2ggZ2xvYmFsIHN1YnByb2cgbm9ybWFsbHkgc2VlcyBhbGxcXG4rXFx0ICogb2YgaXRzIGNvbnRleHRzIGJlZm9yZSBpdCBpcyB2ZXJpZmllZC4gQXN5bmMgY2FsbGJhY2sgY3ljbGVzIGNhbiBhZGQgYVxcbitcXHQgKiBjb250ZXh0IHRvIGFuIGVhcmxpZXIgc3VicHJvZywgc28gcmVwZWF0IHVudGlsIGV2ZXJ5IGNhbGxlZCBjb250ZXh0IGlzXFxuK1xcdCAqIHZlcmlmaWVkLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChqID0gZW52LVxcdTAwM2VzdWJwcm9nX2NudCAtIDE7IGogXFx1MDAzZT0gMDsgai0tKSB7XFxuK1xcdFxcdGkgPSBlbnYtXFx1MDAzZXN1YnByb2dfdG9wb19vcmRlcltqXTtcXG4rXFx0XFx0aWYgKCFpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKCFicGZfc3VicHJvZ19pc19nbG9iYWwoZW52LCBpKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRzdWJfYXV4ID0gc3VicHJvZ19hdXgoZW52LCBpKTtcXG4tXFx0XFx0aWYgKCFzdWJfYXV4LVxcdTAwM2VjYWxsZWQgfHwgc3ViX2F1eC1cXHUwMDNldmVyaWZpZWQpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRmb3IgKGNvbnRleHQgPSAwOyBjb250ZXh0IFxcdTAwM2MgQVJSQVlfU0laRShzdWJfYXV4LVxcdTAwM2VjYWxsZWQpOyBjb250ZXh0KyspIHtcXG4rXFx0XFx0XFx0aWYgKCFzdWJfYXV4LVxcdTAwM2VjYWxsZWRbY29udGV4dF0gfHwgc3ViX2F1eC1cXHUwMDNldmVyaWZpZWRbY29udGV4dF0pXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0ZW52LVxcdTAwM2VpbnNuX2lkeCA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0O1xcbi1cXHRcXHRXQVJOX09OX09OQ0UoZW52LVxcdTAwM2VpbnNuX2lkeCA9PSAwKTtcXG4tXFx0XFx0cmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgaSk7XFxuLVxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0XFx0fSBlbHNlIGlmIChlbnYtXFx1MDAzZWxvZy5sZXZlbCBcXHUwMDI2IEJQRl9MT0dfTEVWRUwpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJGdW5jIyVkICgnJXMnKSBpcyBzYWZlIGZvciBhbnkgYXJncyB0aGF0IG1hdGNoIGl0cyBwcm90b3R5cGVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdGksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBpKSk7XFxuLVxcdFxcdH1cXG4rXFx0XFx0XFx0ZW52LVxcdTAwM2VpbnNuX2lkeCA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0O1xcbitcXHRcXHRcXHRXQVJOX09OX09OQ0UoZW52LVxcdTAwM2VpbnNuX2lkeCA9PSAwKTtcXG4rXFx0XFx0XFx0cmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgaSwgY29udGV4dCk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdGlmIChlbnYtXFx1MDAzZWxvZy5sZXZlbCBcXHUwMDI2IEJQRl9MT0dfTEVWRUwpXFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiRnVuYyMlZCAoJyVzJykgaXMgc2FmZSBmb3IgYW55IGFyZ3MgXFxcIlxcbitcXHRcXHRcXHRcXHRcXHRcXFwidGhhdCBtYXRjaCBpdHMgcHJvdG90eXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgaSkpO1xcbiBcXG4tXFx0XFx0LyogV2UgdmVyaWZpZWQgbmV3IGdsb2JhbCBzdWJwcm9nLCBpdCBtaWdodCBoYXZlIGNhbGxlZCBzb21lXFxuLVxcdFxcdCAqIG1vcmUgZ2xvYmFsIHN1YnByb2dzIHRoYXQgd2UgaGF2ZW4ndCB2ZXJpZmllZCB5ZXQsIHNvIHdlXFxuLVxcdFxcdCAqIG5lZWQgdG8gZG8gYW5vdGhlciBwYXNzIG92ZXIgc3VicHJvZ3MgdG8gdmVyaWZ5IHRob3NlLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0c3ViX2F1eC1cXHUwMDNldmVyaWZpZWQgPSB0cnVlO1xcbi1cXHRcXHRuZXdfY250Kys7XFxuK1xcdFxcdFxcdHN1Yl9hdXgtXFx1MDAzZXZlcmlmaWVkW2NvbnRleHRdID0gdHJ1ZTtcXG4rXFx0XFx0XFx0bmV3X2NudCsrO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFdlIGNhbid0IGxvb3AgZm9yZXZlciBhcyB3ZSB2ZXJpZnkgYXQgbGVhc3Qgb25lIGdsb2JhbCBzdWJwcm9nIG9uXFxuLVxcdCAqIGVhY2ggcGFzcy5cXG4rXFx0LypcXG4rXFx0ICogV2UgY2FuJ3QgbG9vcCBmb3JldmVyIGFzIGVhY2ggcGFzcyB2ZXJpZmllcyBhdCBsZWFzdCBvbmUgbmV3IGNvbnRleHQsXFxuK1xcdCAqIGFuZCB0aGVyZSBhcmUgb25seSB0d28gY29udGV4dHMgcGVyIGdsb2JhbCBzdWJwcm9nLlxcbiBcXHQgKi9cXG4gXFx0aWYgKG5ld19jbnQpXFxuIFxcdFxcdGdvdG8gYWdhaW47XFxuQEAgLTE5ODAwLDcgKzE5ODE3LDcgQEAgc3RhdGljIGludCBkb19jaGVja19tYWluKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRlbnYtXFx1MDAzZWluc25faWR4ID0gMDtcXG4tXFx0cmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgMCk7XFxuK1xcdHJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIDAsIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlc2xlZXBhYmxlKTtcXG4gXFx0aWYgKCFyZXQpXFxuIFxcdFxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VzdGFja19kZXB0aCA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvWzBdLnN0YWNrX2RlcHRoO1xcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xcbmluZGV4IDZiZjk1NTUwYTAyNDguLjk4N2NhOWRlYzZiN2YgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcXG5AQCAtOSw2ICs5LDExIEBAXFxuIFxcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4gXFxuK3N0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcXG4rdm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xcbit2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcXG4rdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcXG4rXFxuIC8qIFRpbWVyIHRlc3RzICovXFxuIFxcbiBzdHJ1Y3QgdGltZXJfZWxlbSB7XFxuQEAgLTY2LDYgKzcxLDcgQEAgaW50IHRpbWVyX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcXG4gXFxuIHN0cnVjdCB3cV9lbGVtIHtcXG4gXFx0c3RydWN0IGJwZl93cSB3O1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19rcHRyICp0YXNrO1xcbiB9O1xcbiBcXG4gc3RydWN0IHtcXG5AQCAtMTE5LDYgKzEyNSwxMDYgQEAgaW50IHdxX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK19fbm9pbmxpbmUgaW50IHdxX2dsb2JhbF9hY3F1aXJlKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAqYWNxdWlyZWQ7XFxuK1xcdHN0cnVjdCB3cV9lbGVtICp2YWw7XFxuK1xcdGludCBrZXkgPSAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2d3FfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0dGFzayA9IHZhbC1cXHUwMDNldGFzaztcXG4rXFx0aWYgKCF0YXNrKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZSh0YXNrKTtcXG4rXFx0aWYgKGFjcXVpcmVkKVxcbitcXHRcXHRicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3FfZ2xvYmFsX3JjdV9jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcXG4re1xcbitcXHR3cV9nbG9iYWxfYWNxdWlyZSgpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiUjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyXFxcIilcXG4raW50IHdxX2dsb2JhbF9yY3VfcHJvZyh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IHdxX2VsZW0gKnZhbDtcXG4rXFx0aW50IGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ3cV9tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfd3FfaW5pdChcXHUwMDI2dmFsLVxcdTAwM2V3LCBcXHUwMDI2d3FfbWFwLCAwKTtcXG4rXFx0YnBmX3dxX3NldF9jYWxsYmFjayhcXHUwMDI2dmFsLVxcdTAwM2V3LCB3cV9nbG9iYWxfcmN1X2NiLCAwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3FfZ2xvYmFsX3JjdV9sb2NrX2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxcbit7XFxuK1xcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHdxX2dsb2JhbF9hY3F1aXJlKCk7XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcXFwiKVxcbitfX3N1Y2Nlc3NcXG4raW50IHdxX2dsb2JhbF9yY3VfbG9ja19wcm9nKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3Qgd3FfZWxlbSAqdmFsO1xcbitcXHRpbnQga2V5ID0gMDtcXG4rXFxuK1xcdC8qIFZlcmlmeSB0aGUgc2FtZSBnbG9iYWwgc3VicHJvZyBpbiBub24tc2xlZXBhYmxlIGFuZCBwcm90ZWN0ZWQgY29udGV4dHMuICovXFxuK1xcdHdxX2dsb2JhbF9hY3F1aXJlKCk7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ3cV9tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfd3FfaW5pdChcXHUwMDI2dmFsLVxcdTAwM2V3LCBcXHUwMDI2d3FfbWFwLCAwKTtcXG4rXFx0YnBmX3dxX3NldF9jYWxsYmFjayhcXHUwMDI2dmFsLVxcdTAwM2V3LCB3cV9nbG9iYWxfcmN1X2xvY2tfY2IsIDApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rX19ub2lubGluZSBpbnQgd3FfZ2xvYmFsX25vX3JjdSh2b2lkKVxcbit7XFxuK1xcdGJhcnJpZXIoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3FfZ2xvYmFsX25vX3JjdV9jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcXG4re1xcbitcXHR3cV9nbG9iYWxfbm9fcmN1KCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcImZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCB3cV9nbG9iYWxfbm9fcmN1X3Byb2codm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB3cV9lbGVtICp2YWw7XFxuK1xcdGludCBrZXkgPSAwO1xcbitcXG4rXFx0LyogVmVyaWZ5IHRoZSBzYW1lIGdsb2JhbCBpbiBub24tc2xlZXBhYmxlIGFuZCB1bnByb3RlY3RlZCBjb250ZXh0cy4gKi9cXG4rXFx0d3FfZ2xvYmFsX25vX3JjdSgpO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2d3FfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX3dxX2luaXQoXFx1MDAyNnZhbC1cXHUwMDNldywgXFx1MDAyNndxX21hcCwgMCk7XFxuK1xcdGJwZl93cV9zZXRfY2FsbGJhY2soXFx1MDAyNnZhbC1cXHUwMDNldywgd3FfZ2xvYmFsX25vX3JjdV9jYiwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKiBUYXNrIHdvcmsgdGVzdHMgKi9cXG4gXFxuIHN0cnVjdCB0YXNrX3dvcmtfZWxlbSB7XFxuQEAgLTE3OSwzICsyODUsMjkgQEAgaW50IHRhc2tfd29ya19zbGVlcGFibGVfcHJvZyh2b2lkICpjdHgpXFxuIFxcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHRhc2ssIFxcdTAwMjZ2YWwtXFx1MDAzZXR3LCBcXHUwMDI2dGFza193b3JrX21hcCwgdGFza193b3JrX2NiKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbnQgdGFza193b3JrX2dsb2JhbF9yY3VfY2Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSlcXG4re1xcbitcXHRyZXR1cm4gd3FfZ2xvYmFsX2FjcXVpcmUoKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiUjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyXFxcIilcXG4raW50IHRhc2tfd29ya19nbG9iYWxfcmN1X3Byb2codm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3dvcmtfZWxlbSAqdmFsO1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuK1xcdGludCBrZXkgPSAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2dGFza193b3JrX21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0aWYgKCF0YXNrKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHRhc2ssIFxcdTAwMjZ2YWwtXFx1MDAzZXR3LCBcXHUwMDI2dGFza193b3JrX21hcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdGFza193b3JrX2dsb2JhbF9yY3VfY2IpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNToxMy44NTY2Njk5MzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwNjgxMTg4NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJkb19jaGVja19zdWJwcm9nc1wiLFxuICAgIFwiZG9fY2hlY2tfY29tbW9uXCIsXG4gICAgXCJjaGVja19mdW5jX2NhbGxcIixcbiAgICBcImRvX2NoZWNrX21haW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHRyYWNrIGFuZCB2ZXJpZnkgZ2xvYmFsIHN1YnByb2dyYW1zIHNlcGFyYXRlbHkgYWNyb3NzIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBleGVjdXRpb24gY29udGV4dHMsIG1vZGlmeWluZyBzdWJwcm9ncmFtIHZlcmlmaWNhdGlvbiBsb29wcywgdG9wb2xvZ2ljYWwgdHJhdmVyc2FsIG9yZGVyLCBhbmQgY29udGV4dCBzdGF0ZSBoYW5kbGluZyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTZlZmE2MDNhMGQ1MjJlNmVlYzYzMjMwZDE5YTZlMjYwZGZlZTNkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTA6MDU6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggM2E3ZWIyMTg1YzM1NC4uNjZkMDQyNDRjNzM3OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0xNjUwLDggKzE2NTAsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFnc1xuIHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCB7XG4gXHR1MTYgbGlua2FnZTtcbiBcdGJvb2wgdW5yZWxpYWJsZTtcbi1cdGJvb2wgY2FsbGVkIDogMTtcbi1cdGJvb2wgdmVyaWZpZWQgOiAxO1xuK1x0LyogSW5kZXhlZCBieSBpbl9zbGVlcGFibGUuICovXG4rXHRib29sIGNhbGxlZFsyXTtcbitcdGJvb2wgdmVyaWZpZWRbMl07XG4gfTtcbiBcbiBlbnVtIGJwZl9qaXRfcG9rZV9yZWFzb24ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNWI1MWU3ZWUxYTNmOS4uZjc1OWEwMjBjOGE1YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtOTk1Nyw2ICs5OTU3LDcgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0aWYgKGVyciA9PSAtRUZBVUxUKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0aWYgKGJwZl9zdWJwcm9nX2lzX2dsb2JhbChlbnYsIHN1YnByb2cpKSB7XG4rXHRcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgc3VicHJvZyk7XG4gXHRcdGNvbnN0IGNoYXIgKnN1Yl9uYW1lID0gYnBmX3N1YnByb2dfbmFtZShlbnYsIHN1YnByb2cpO1xuIFx0XHRjb25zdCBjaGFyICpvcGVyYXRpb247XG4gXHRcdGJvb2wgcmV0dXJuc192b2lkO1xuQEAgLTk5ODgsMTEgKzk5ODksMTAgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRpZiAoZW52LVx1MDAzZWxvZy5sZXZlbCBcdTAwMjYgQlBGX0xPR19MRVZFTClcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCJGdW5jIyVkICgnJXMnKSBpcyBnbG9iYWwgYW5kIGFzc3VtZWQgdmFsaWQuXFxuXCIsXG4gXHRcdFx0XHRzdWJwcm9nLCBzdWJfbmFtZSk7XG4rXHRcdHN1Yl9hdXgtXHUwMDNlY2FsbGVkW2luX3NsZWVwYWJsZV9jb250ZXh0KGVudildID0gdHJ1ZTtcbiBcdFx0cmV0dXJuc192b2lkID0gc3VicHJvZ19yZXR1cm5zX3ZvaWQoZW52LCBzdWJwcm9nKTtcbiBcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10uY2hhbmdlc19wa3RfZGF0YSlcbiBcdFx0XHRjbGVhcl9hbGxfcGt0X3BvaW50ZXJzKGVudik7XG4tXHRcdC8qIG1hcmsgZ2xvYmFsIHN1YnByb2cgZm9yIHZlcmlmeWluZyBhZnRlciBtYWluIHByb2cgKi9cbi1cdFx0c3VicHJvZ19hdXgoZW52LCBzdWJwcm9nKS1cdTAwM2VjYWxsZWQgPSB0cnVlO1xuIFx0XHRpZiAocmV0dXJuc192b2lkKVxuIFx0XHRcdGJwZl9kaWFnX3JlY29yZF9zY3J1YihlbnYsIFx1MDAyNmNhbGxlci1cdTAwM2VyZWdzW0JQRl9SRUdfMF0sIEJQRl9ESUFHX01PRF9DQUxMRVJfU0FWRUQpO1xuIFx0XHRlbHNlXG5AQCAtMTA4MDQsNyArMTA4MDQsMTIgQEAgaW50IGJwZl9nZXRfaGVscGVyX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBmdW5jX2lkLFxuIFx0cmV0dXJuICpwdHIgXHUwMDI2XHUwMDI2ICgqcHRyKS1cdTAwM2VmdW5jID8gMCA6IC1FSU5WQUw7XG4gfVxuIFxuLS8qIENoZWNrIGlmIHdlJ3JlIGluIGEgc2xlZXBhYmxlIGNvbnRleHQuICovXG4rLypcbisgKiBUaGlzIHByZWRpY2F0ZSBpcyB0aGUgaW52ZXJzZSBvZiBpbl9yY3VfY3MoKTogbm9uLXNsZWVwYWJsZSBwcm9ncmFtcyBhbmRcbisgKiBldmVyeSBjb25kaXRpb24gdGhhdCBwcmV2ZW50cyBzbGVlcGluZyBhbHNvIHByb3ZpZGUgUkNVIHByb3RlY3Rpb24uIEdsb2JhbFxuKyAqIHN1YnByb2cgdmVyaWZpY2F0aW9uIHJlbGllcyBvbiB0aGlzIGVxdWl2YWxlbmNlIHRvIHJlcHJlc2VudCB0aGUgY2FsbGVyJ3NcbisgKiBleGVjdXRpb24gY29udGV4dCB1c2luZyBvbmx5IHRoZSBpbl9zbGVlcGFibGUgYml0LlxuKyAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpbl9zbGVlcGFibGVfY29udGV4dChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHJldHVybiAhZW52LVx1MDAzZWN1cl9zdGF0ZS1cdTAwM2VhY3RpdmVfcmN1X2xvY2tzIFx1MDAyNlx1MDAyNlxuQEAgLTE5NTYwLDEzICsxOTU2NSwxNCBAQCBzdGF0aWMgdm9pZCBmcmVlX3N0YXRlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbitzdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZywgYm9vbCBpbl9zbGVlcGFibGUpXG4ge1xuIFx0Ym9vbCBwb3BfbG9nID0gIShlbnYtXHUwMDNlbG9nLmxldmVsIFx1MDAyNiBCUEZfTE9HX0xFVkVMMik7XG4gXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3ViID0gc3VicHJvZ19pbmZvKGVudiwgc3VicHJvZyk7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXg7XG4gXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGF0ZTtcbiBcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzO1xuK1x0dTMyIG9sZF9pbnNuc190b3RhbCA9IHN1Yi1cdTAwM2VpbnNuc190b3RhbDtcbiBcdHUzMiBpbnNuX3Byb2Nlc3NlZCA9IGVudi1cdTAwM2VpbnNuX3Byb2Nlc3NlZDtcbiBcdGludCByZXQsIGk7XG4gXG5AQCAtMTk1NzksNyArMTk1ODUsNyBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbiBcdHN0YXRlLVx1MDAzZWN1cmZyYW1lID0gMDtcbiBcdHN0YXRlLVx1MDAzZXNwZWN1bGF0aXZlID0gZmFsc2U7XG4gXHRzdGF0ZS1cdTAwM2VicmFuY2hlcyA9IDE7XG4tXHRzdGF0ZS1cdTAwM2Vpbl9zbGVlcGFibGUgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VzbGVlcGFibGU7XG4rXHRzdGF0ZS1cdTAwM2Vpbl9zbGVlcGFibGUgPSBpbl9zbGVlcGFibGU7XG4gXHRzdGF0ZS1cdTAwM2VmcmFtZVswXSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBicGZfZnVuY19zdGF0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghc3RhdGUtXHUwMDNlZnJhbWVbMF0pIHtcbiBcdFx0a2ZyZWUoc3RhdGUpO1xuQEAgLTE5NzIxLDcgKzE5NzI3LDggQEAgc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4gXHQgKiBBY2N1bXVsYXRlIHRoZWlyIHRvdGFsIGNvdW50cyBhcyB0b3RhbCBjb3VudHMgb2YgdGhlIG1haW4gb3JcbiBcdCAqIGdsb2JhbCBzdWJwcm9nIGhvc3RpbmcgdGhlIGFzeW5jIGNhbGwuXG4gXHQgKi9cbi1cdGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10uaW5zbnNfdG90YWwgPSBlbnYtXHUwMDNlaW5zbl9wcm9jZXNzZWQgLSBpbnNuX3Byb2Nlc3NlZDtcbitcdGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10uaW5zbnNfdG90YWwgPSBvbGRfaW5zbnNfdG90YWwgK1xuK1x0XHRcdFx0XHRcdChlbnYtXHUwMDNlaW5zbl9wcm9jZXNzZWQgLSBpbnNuX3Byb2Nlc3NlZCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xOTc0OSw0NSArMTk3NTYsNTUgQEAgc3RhdGljIGludCBkb19jaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eDtcbiBcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eDtcbi1cdGludCBpLCByZXQsIG5ld19jbnQ7XG4rXHRpbnQgY29udGV4dCwgaSwgaiwgcmV0LCBuZXdfY250O1xuIFxuIFx0aWYgKCFhdXgtXHUwMDNlZnVuY19pbmZvKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIGV4Y2VwdGlvbiBjYWxsYmFjayBpcyBwcmVzdW1lZCB0byBiZSBhbHdheXMgY2FsbGVkICovXG4tXHRpZiAoZW52LVx1MDAzZWV4Y2VwdGlvbl9jYWxsYmFja19zdWJwcm9nKVxuLVx0XHRzdWJwcm9nX2F1eChlbnYsIGVudi1cdTAwM2VleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZyktXHUwMDNlY2FsbGVkID0gdHJ1ZTtcbitcdGlmIChlbnYtXHUwMDNlZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpIHtcbitcdFx0c3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgZW52LVx1MDAzZWV4Y2VwdGlvbl9jYWxsYmFja19zdWJwcm9nKTtcbitcdFx0c3ViX2F1eC1cdTAwM2VjYWxsZWRbZW52LVx1MDAzZXByb2ctXHUwMDNlc2xlZXBhYmxlXSA9IHRydWU7XG4rXHR9XG4gXG4gYWdhaW46XG4gXHRuZXdfY250ID0gMDtcbi1cdGZvciAoaSA9IDE7IGkgXHUwMDNjIGVudi1cdTAwM2VzdWJwcm9nX2NudDsgaSsrKSB7XG4rXHQvKlxuK1x0ICogV2FsayBjYWxsZXJzIGJlZm9yZSBjYWxsZWVzIHNvIGVhY2ggZ2xvYmFsIHN1YnByb2cgbm9ybWFsbHkgc2VlcyBhbGxcbitcdCAqIG9mIGl0cyBjb250ZXh0cyBiZWZvcmUgaXQgaXMgdmVyaWZpZWQuIEFzeW5jIGNhbGxiYWNrIGN5Y2xlcyBjYW4gYWRkIGFcbitcdCAqIGNvbnRleHQgdG8gYW4gZWFybGllciBzdWJwcm9nLCBzbyByZXBlYXQgdW50aWwgZXZlcnkgY2FsbGVkIGNvbnRleHQgaXNcbitcdCAqIHZlcmlmaWVkLlxuK1x0ICovXG4rXHRmb3IgKGogPSBlbnYtXHUwMDNlc3VicHJvZ19jbnQgLSAxOyBqIFx1MDAzZT0gMDsgai0tKSB7XG4rXHRcdGkgPSBlbnYtXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2pdO1xuK1x0XHRpZiAoIWkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGVudiwgaSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHN1Yl9hdXggPSBzdWJwcm9nX2F1eChlbnYsIGkpO1xuLVx0XHRpZiAoIXN1Yl9hdXgtXHUwMDNlY2FsbGVkIHx8IHN1Yl9hdXgtXHUwMDNldmVyaWZpZWQpXG4tXHRcdFx0Y29udGludWU7XG4rXHRcdGZvciAoY29udGV4dCA9IDA7IGNvbnRleHQgXHUwMDNjIEFSUkFZX1NJWkUoc3ViX2F1eC1cdTAwM2VjYWxsZWQpOyBjb250ZXh0KyspIHtcbitcdFx0XHRpZiAoIXN1Yl9hdXgtXHUwMDNlY2FsbGVkW2NvbnRleHRdIHx8IHN1Yl9hdXgtXHUwMDNldmVyaWZpZWRbY29udGV4dF0pXG4rXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0ZW52LVx1MDAzZWluc25faWR4ID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5zdGFydDtcbi1cdFx0V0FSTl9PTl9PTkNFKGVudi1cdTAwM2VpbnNuX2lkeCA9PSAwKTtcbi1cdFx0cmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgaSk7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHR9IGVsc2UgaWYgKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwpIHtcbi1cdFx0XHR2ZXJib3NlKGVudiwgXCJGdW5jIyVkICgnJXMnKSBpcyBzYWZlIGZvciBhbnkgYXJncyB0aGF0IG1hdGNoIGl0cyBwcm90b3R5cGVcXG5cIixcbi1cdFx0XHRcdGksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBpKSk7XG4tXHRcdH1cbitcdFx0XHRlbnYtXHUwMDNlaW5zbl9pZHggPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0O1xuK1x0XHRcdFdBUk5fT05fT05DRShlbnYtXHUwMDNlaW5zbl9pZHggPT0gMCk7XG4rXHRcdFx0cmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgaSwgY29udGV4dCk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0aWYgKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwpXG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJGdW5jIyVkICgnJXMnKSBpcyBzYWZlIGZvciBhbnkgYXJncyBcIlxuK1x0XHRcdFx0XHRcInRoYXQgbWF0Y2ggaXRzIHByb3RvdHlwZVxcblwiLFxuK1x0XHRcdFx0XHRpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgaSkpO1xuIFxuLVx0XHQvKiBXZSB2ZXJpZmllZCBuZXcgZ2xvYmFsIHN1YnByb2csIGl0IG1pZ2h0IGhhdmUgY2FsbGVkIHNvbWVcbi1cdFx0ICogbW9yZSBnbG9iYWwgc3VicHJvZ3MgdGhhdCB3ZSBoYXZlbid0IHZlcmlmaWVkIHlldCwgc28gd2Vcbi1cdFx0ICogbmVlZCB0byBkbyBhbm90aGVyIHBhc3Mgb3ZlciBzdWJwcm9ncyB0byB2ZXJpZnkgdGhvc2UuXG4tXHRcdCAqL1xuLVx0XHRzdWJfYXV4LVx1MDAzZXZlcmlmaWVkID0gdHJ1ZTtcbi1cdFx0bmV3X2NudCsrO1xuK1x0XHRcdHN1Yl9hdXgtXHUwMDNldmVyaWZpZWRbY29udGV4dF0gPSB0cnVlO1xuK1x0XHRcdG5ld19jbnQrKztcbitcdFx0fVxuIFx0fVxuIFxuLVx0LyogV2UgY2FuJ3QgbG9vcCBmb3JldmVyIGFzIHdlIHZlcmlmeSBhdCBsZWFzdCBvbmUgZ2xvYmFsIHN1YnByb2cgb25cbi1cdCAqIGVhY2ggcGFzcy5cbitcdC8qXG4rXHQgKiBXZSBjYW4ndCBsb29wIGZvcmV2ZXIgYXMgZWFjaCBwYXNzIHZlcmlmaWVzIGF0IGxlYXN0IG9uZSBuZXcgY29udGV4dCxcbitcdCAqIGFuZCB0aGVyZSBhcmUgb25seSB0d28gY29udGV4dHMgcGVyIGdsb2JhbCBzdWJwcm9nLlxuIFx0ICovXG4gXHRpZiAobmV3X2NudClcbiBcdFx0Z290byBhZ2FpbjtcbkBAIC0xOTgwMCw3ICsxOTgxNyw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfbWFpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0aW50IHJldDtcbiBcbiBcdGVudi1cdTAwM2VpbnNuX2lkeCA9IDA7XG4tXHRyZXQgPSBkb19jaGVja19jb21tb24oZW52LCAwKTtcbitcdHJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIDAsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZXNsZWVwYWJsZSk7XG4gXHRpZiAoIXJldClcbiBcdFx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZXN0YWNrX2RlcHRoID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1swXS5zdGFja19kZXB0aDtcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcbmluZGV4IDZiZjk1NTUwYTAyNDguLjk4N2NhOWRlYzZiN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jXG5AQCAtOSw2ICs5LDExIEBAXG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIFxuK3N0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbit2b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XG4rdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4rdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbitcbiAvKiBUaW1lciB0ZXN0cyAqL1xuIFxuIHN0cnVjdCB0aW1lcl9lbGVtIHtcbkBAIC02Niw2ICs3MSw3IEBAIGludCB0aW1lcl9zbGVlcGFibGVfcHJvZyh2b2lkICpjdHgpXG4gXG4gc3RydWN0IHdxX2VsZW0ge1xuIFx0c3RydWN0IGJwZl93cSB3O1xuK1x0c3RydWN0IHRhc2tfc3RydWN0IF9fa3B0ciAqdGFzaztcbiB9O1xuIFxuIHN0cnVjdCB7XG5AQCAtMTE5LDYgKzEyNSwxMDYgQEAgaW50IHdxX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitfX25vaW5saW5lIGludCB3cV9nbG9iYWxfYWNxdWlyZSh2b2lkKVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgKmFjcXVpcmVkO1xuK1x0c3RydWN0IHdxX2VsZW0gKnZhbDtcbitcdGludCBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ3cV9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR0YXNrID0gdmFsLVx1MDAzZXRhc2s7XG4rXHRpZiAoIXRhc2spXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHRhc2spO1xuK1x0aWYgKGFjcXVpcmVkKVxuK1x0XHRicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHdxX2dsb2JhbF9yY3VfY2Iodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXG4re1xuK1x0d3FfZ2xvYmFsX2FjcXVpcmUoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwiKVxuK19fZmFpbHVyZSBfX21zZyhcIlIxIG11c3QgYmUgYSByY3UgcG9pbnRlclwiKVxuK2ludCB3cV9nbG9iYWxfcmN1X3Byb2codm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB3cV9lbGVtICp2YWw7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2d3FfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX3dxX2luaXQoXHUwMDI2dmFsLVx1MDAzZXcsIFx1MDAyNndxX21hcCwgMCk7XG4rXHRicGZfd3Ffc2V0X2NhbGxiYWNrKFx1MDAyNnZhbC1cdTAwM2V3LCB3cV9nbG9iYWxfcmN1X2NiLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHdxX2dsb2JhbF9yY3VfbG9ja19jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcbit7XG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0d3FfZ2xvYmFsX2FjcXVpcmUoKTtcbitcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwiKVxuK19fc3VjY2Vzc1xuK2ludCB3cV9nbG9iYWxfcmN1X2xvY2tfcHJvZyh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHdxX2VsZW0gKnZhbDtcbitcdGludCBrZXkgPSAwO1xuK1xuK1x0LyogVmVyaWZ5IHRoZSBzYW1lIGdsb2JhbCBzdWJwcm9nIGluIG5vbi1zbGVlcGFibGUgYW5kIHByb3RlY3RlZCBjb250ZXh0cy4gKi9cbitcdHdxX2dsb2JhbF9hY3F1aXJlKCk7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndxX21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl93cV9pbml0KFx1MDAyNnZhbC1cdTAwM2V3LCBcdTAwMjZ3cV9tYXAsIDApO1xuK1x0YnBmX3dxX3NldF9jYWxsYmFjayhcdTAwMjZ2YWwtXHUwMDNldywgd3FfZ2xvYmFsX3JjdV9sb2NrX2NiLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitfX25vaW5saW5lIGludCB3cV9nbG9iYWxfbm9fcmN1KHZvaWQpXG4re1xuK1x0YmFycmllcigpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3FfZ2xvYmFsX25vX3JjdV9jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcbit7XG4rXHR3cV9nbG9iYWxfbm9fcmN1KCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcIilcbitfX3N1Y2Nlc3NcbitpbnQgd3FfZ2xvYmFsX25vX3JjdV9wcm9nKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qgd3FfZWxlbSAqdmFsO1xuK1x0aW50IGtleSA9IDA7XG4rXG4rXHQvKiBWZXJpZnkgdGhlIHNhbWUgZ2xvYmFsIGluIG5vbi1zbGVlcGFibGUgYW5kIHVucHJvdGVjdGVkIGNvbnRleHRzLiAqL1xuK1x0d3FfZ2xvYmFsX25vX3JjdSgpO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ3cV9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfd3FfaW5pdChcdTAwMjZ2YWwtXHUwMDNldywgXHUwMDI2d3FfbWFwLCAwKTtcbitcdGJwZl93cV9zZXRfY2FsbGJhY2soXHUwMDI2dmFsLVx1MDAzZXcsIHdxX2dsb2JhbF9ub19yY3VfY2IsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIFRhc2sgd29yayB0ZXN0cyAqL1xuIFxuIHN0cnVjdCB0YXNrX3dvcmtfZWxlbSB7XG5AQCAtMTc5LDMgKzI4NSwyOSBAQCBpbnQgdGFza193b3JrX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcbiBcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHRhc2ssIFx1MDAyNnZhbC1cdTAwM2V0dywgXHUwMDI2dGFza193b3JrX21hcCwgdGFza193b3JrX2NiKTtcbiBcdHJldHVybiAwO1xuIH1cbitcbitzdGF0aWMgaW50IHRhc2tfd29ya19nbG9iYWxfcmN1X2NiKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpXG4re1xuK1x0cmV0dXJuIHdxX2dsb2JhbF9hY3F1aXJlKCk7XG4rfVxuK1xuK1NFQyhcImZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiUjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyXCIpXG4raW50IHRhc2tfd29ya19nbG9iYWxfcmN1X3Byb2codm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3dvcmtfZWxlbSAqdmFsO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuK1x0aW50IGtleSA9IDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRhc2tfd29ya19tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR0YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRpZiAoIXRhc2spXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2dmFsLVx1MDAzZXR3LCBcdTAwMjZ0YXNrX3dvcmtfbWFwLFxuK1x0XHRcdFx0ICAgICAgdGFza193b3JrX2dsb2JhbF9yY3VfY2IpO1xuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6MTMuODU2NjcyMDQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM3NjQ5MTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcgYXMgSSBsb29rIG92ZXIgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIHRoZSBrZXJuZWwuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGFuYWx5emUgdGhpcywgYW5kIG15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyB0b3VjaGVzIHNvbWV0aGluZyBpbXBvcnRhbnQsIHRoZSBCUEYgdmVyaWZpZXIuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSBpbiBgaW5jbHVkZS9saW51eC9icGYuaGAgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiAgU3BlY2lmaWNhbGx5LCB0aGUgc3RydWN0IGBicGZfZnVuY19pbmZvX2F1eGAgaGFzIGJlZW4gbW9kaWZpZWQuIFRoZSBgY2FsbGVkYCBhbmQgYHZlcmlmaWVkYCBib29sZWFucyBhcmUgbm93IGFycmF5cyBvZiB0d28gZWxlbWVudHMsIGBjYWxsZWRbMl1gIGFuZCBgdmVyaWZpZWRbMl1gLiAgVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFdoeSB0d28/ICBJIHN1c3BlY3QgdGhpcyByZWxhdGVzIHRvIHRyYWNraW5nIHZlcmlmaWNhdGlvbiBzdGF0ZSBpbiBkaWZmZXJlbnQgY29udGV4dHMgLSBsaWtlbHkgc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIG9uZXMsIHdoaWNoIGlzIGNvbmZpcm1lZCBsYXRlci5cblxuTG9va2luZyBkZWVwZXIgaW50byBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgSSBzZWUgZnVuY3Rpb25zIGxpa2UgYGNoZWNrX2Z1bmNfY2FsbGAsIGBkb19jaGVja19jb21tb25gLCBgZG9fY2hlY2tfc3VicHJvZ3NgLCBhbmQgYGRvX2NoZWNrX21haW5gIGFyZSB0aGUgZm9jdXMuIEkgbm90aWNlIGBpbl9zbGVlcGFibGVfY29udGV4dCgpYCBpcyB1c2VkLCBhbmQgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHN0cmF0ZWdpY2FsbHkgbWFya2luZyBmdW5jdGlvbiBjYWxscyBhcyBgY2FsbGVkYCBhbmQgYHZlcmlmaWVkYCBpbiBkaWZmZXJlbnQgY29udGV4dHMsIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHByb2dyYW0gaXMgb3BlcmF0aW5nIGluIGEgc2xlZXBhYmxlIGNvbnRleHQsIHdoaWNoIGlzIGxpa2VseSBjcml0aWNhbC4gIFRoZSBgZG9fY2hlY2tfc3VicHJvZ3NgIGZ1bmN0aW9uIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gIEl0IG5vdyBoYW5kbGVzIGFuIGV4Y2VwdGlvbiBjYWxsYmFjayBhbmQgaXRlcmF0ZXMgdGhyb3VnaCBzdWJwcm9ncmFtcyBpbiBhIHRvcG9sb2dpY2FsIG9yZGVyLiBJdCBkb2VzIGEgbG9vcCBgZm9yIChjb250ZXh0ID0gMDsgY29udGV4dCBcdTAwM2MgQVJSQVlfU0laRShzdWJfYXV4LVx1MDAzZWNhbGxlZCk7IGNvbnRleHQrKylgIC0gdGhpcyBpcyB0aGUga2V5LiAgSXQgZG9lcyAqbXVsdGlwbGUqIHZlcmlmaWNhdGlvbiBwYXNzZXMgcGVyIGNvbnRleHQhIFRoYXQncyBhIHN0cm9uZyBzaWduYWwgb2Ygc2lnbmlmaWNhbnQgbG9naWMgY2hhbmdlLlxuXG5UaGVuIGBkb19jaGVja19tYWluYCBjYWxscyBgZG9fY2hlY2tfY29tbW9uYCwgYWdhaW4gbGlua2luZyB2ZXJpZmljYXRpb24gdG8gdGhlIHNsZWVwYWJsZSBjb250ZXh0LiBUaGUgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBhY2N1bXVsYXRpbmcgdG90YWwgaW5zdHJ1Y3Rpb24gY291bnQgaW4gYGRvX2NoZWNrX2NvbW1vbmAgYWxzbyBuZWVkIHRvIGJlIHNjcnV0aW5pemVkIGZvciBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gaW5zdHJ1Y3Rpb24gY291bnRpbmcgYWNyb3NzIHRoZXNlIGRpZmZlcmVudCB2ZXJpZmljYXRpb24gc3RhdGVzLlxuXG5Ob3csIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGxvb2tzIHByb21pc2luZy4gVGhlIEJQRiB2ZXJpZmllciBpcyBhIGNyaXRpY2FsIHBhdGggYW5kIGVhc2lseSByZWFjaGFibGUgdmlhIHRoZSBgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLilgIHN5c2NhbGwuIFN5emthbGxlcidzIGRlZXAgQlBGIHN1cHBvcnQgbWFrZXMgaXQgZXZlbiBlYXNpZXIgdG8gdHJpZ2dlci4gVGhlIGNvcmUgc3Vic3lzdGVtLCBsb2dpYyBjaGFuZ2VzIGFyb3VuZCBzbGVlcGFibGUgdnMuIG5vbi1zbGVlcGFibGUgY29udGV4dHMsIHRoZSB0b3BvbG9naWNhbCBvcmRlciBsb29wIGFuZCBlc3BlY2lhbGx5IHRoZSBtdWx0aXBsZSB2ZXJpZmljYXRpb24gcGFzc2VzIHBlciBjb250ZXh0LCBhbGwgc2NyZWFtIFwiV29ydGhGdXp6aW5nPXRydWUuXCIgIFRoaXMgaXMgZGVmaW5pdGVseSBhbiBhcmVhIHdoZXJlIHN1YnRsZSBidWdzIGNvdWxkIGJlIGx1cmtpbmcuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy4gVGhlIEJQRiB2ZXJpZmllciB3aWxsIGxpa2VseSByZXF1aXJlIGBDT05GSUdfQlBGX1NZU0NBTExgIChhbmQgcG9zc2libHkgYENPTkZJR19CUEZgKSB0byBiZSBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBjaGVjayB0aGUga2VybmVsJ3MgYEtjb25maWdgIG9yIHJlbGV2YW50IGBNYWtlZmlsZWAgZmlsZXMgdG8gdmVyaWZ5IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBiZWZvcmUgbW92aW5nIGZvcndhcmQgd2l0aCBhbnkgZnV6emluZyBwbGFucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg4OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjE5LjIzMzE2NjAxMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTA3Mzk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXJpZmllclxcXFwuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYnBmX2l0ZXIuYz03Mjc9QlBGX0NBTExfNChicGZfbG9vcCwgdTMyLCBucl9sb29wcywgdm9pZCAqLCBjYWxsYmFja19mbiwgdm9pZCAqLCBjYWxsYmFja19jdHgsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzM1LVxcdCAqIGlzIGlubGluZWQsIGJlIGNhcmVmdWwgdG8gbW9kaWZ5IHRoaXMgY29kZSBpbiBzeW5jLiBTZWVcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NzM2OlxcdCAqIGZ1bmN0aW9uIHZlcmlmaWVyLmM6aW5saW5lX2JwZl9sb29wLlxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03MzctXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDY0PV9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgc3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqbWV0YSlcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NzUtXFx0LyogVmVyaWZpZXIgc3RyaXBzIEtGX1JFVF9OVUxMIGlmIGlucHV0IGlzIG93bmVkIHJlZiwgc2VlIGlzX2tmdW5jX3JldF9udWxsXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ3NjpcXHQgKiBpbiB2ZXJpZmllci5jXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ3Ny1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM9OTkyPV9fYnBmX2tmdW5jIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYnBmX2l0ZXJfdGFza192bWFfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgKml0KVxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDExLVxcdCAqIFRoZSB2ZXJpZmllciBvbmx5IHRydXN0cyB2bV9tbSBhbmQgdm1fZmlsZSAoc2VlXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMDEyOlxcdCAqIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMIGluIHZlcmlmaWVyLmMpLiBUYWtlIGEgcmVmZXJlbmNlXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEzLVxcdCAqIG9uIHZtX2ZpbGU7IHZtX21tIGlzIGFscmVhZHkgY29ycmVjdCBiZWNhdXNlIGxvY2tfdm1hX3VuZGVyX3JjdSgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ3MjA9c3RhdGljIGludCBhZGp1c3RfcHRyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ4OTctXFx0XFx0LyogV2UgZG9uJ3QgYWxsb3cgc3VidHJhY3Rpb24gZnJvbSBGUCwgYmVjYXVzZSAoYWNjb3JkaW5nIHRvXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0ODk4OlxcdFxcdCAqIHRlc3RfdmVyaWZpZXIuYyB0ZXN0IFxcXCJpbnZhbGlkIGZwIGFyaXRobWV0aWNcXFwiLCBKSVRzIG1pZ2h0IG5vdFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDg5OS1cXHRcXHQgKiBiZSBhYmxlIHRvIGRlYWwgd2l0aCBpdC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6MTkuMzE0MjQ1MDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzE1MzY2NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIFZlcmlmaWVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IEtjb25maWcgb3B0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgQlBGIHZlcmlmaWVyIGNvZGUsIHNwZWNpZmljYWxseSBgdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgbW92ZSB3b3VsZCBiZSB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHN1YnN5c3RlbSB3b3VsZCByZXNpZGUsIGFuZCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIHR5cGljYWxseSBkZWZpbmVkIGFsb25nc2lkZSB0aGUgc291cmNlIGZpbGVzLiBIb3BlZnVsbHksIHRoZSBpbmNsdXNpb24gb2YgYHZlcmlmaWVyLmNgIHdpbGwgYmUgY29uZGl0aW9uYWwgYmFzZWQgb24gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWcuIFRoYXQncyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgdGhlIGh1bnQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzU2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6MjEuMDI5NjEzOTk4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NTkwNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZlcmlmaWVyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gKz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjIxLjEwOTIxMDkxNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMTc2NzI5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgQnVpbGQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgYW5kIHNwZWNpZmljYWxseSBsaW5lIDkuIEl0J3MgYnVpbGRpbmcgdGhlIEJQRiBzdWJzeXN0ZW0sIGFuZCB0aGlzIGxpbmUgaXMga2V5OiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyAuLi5gIEkgc2VlIHRoYXQgdGhlIG9iamVjdCBmaWxlcyBgc3lzY2FsbC5vYCwgYHZlcmlmaWVyLm9gLCBgaW5vZGUub2AsIGBoZWxwZXJzLm9gIGFuZCBwb3RlbnRpYWxseSBtb3JlLCBhcmUgY29uZGl0aW9uYWxseSBpbmNsdWRlZCBiYXNlZCBvbiB0aGUgYENPTkZJR19CUEZfU1lTQ0FMTGAgS2NvbmZpZyB2YXJpYWJsZS5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCB3aHkgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZGVmaW5lZC4gV2hlcmUgZG9lcyB0aGlzIGdldCBzZXQ/IEEgcXVpY2sgbG9vayBpbiBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AgaXMgZGVmaW5pdGVseSBpbiBvcmRlci4gSSdtIGd1ZXNzaW5nIGl0J3MgaW4gb25lIG9mIHRob3NlLCBzaW5jZSB0aGV5IGhhbmRsZSBhIGxvdCBvZiB0aGUgaW5pdGlhbCBrZXJuZWwgY29uZmlnLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRyaWdnZXJzIHRoaXMgY29uZmlnIG9wdGlvbiB0byBiZSBzZWxlY3RlZC4gSXMgaXQgYSBkaXJlY3QgZGVwZW5kZW5jeT8gQW5vdGhlciBvcHRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBCUEYgc3lzdGVtIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgYnVpbGQgcHJvY2Vzcy4gRnJvbSB0aGVyZSwgSSBjYW4gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIEJQRiBzdWJzeXN0ZW0ncyBhcmNoaXRlY3R1cmUgYW5kIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNToyNC40MjY4ODY2MDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5NjgxNDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6MjQuNTA3ODYzOTYxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg4MzQxMzU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIGZvciBCUEZfU1lTQ0FMTCBpbiB0aGUgQ29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBgQlBGX1NZU0NBTExgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgYXNzdW1pbmcgaXQncyBsaWtlbHkgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIsIHByb2JhYmx5IHVuZGVyIG9uZSBvZiB0aGUgYnJvYWRlciBCUEYgb3Igc2VjdXJpdHktcmVsYXRlZCBzZWN0aW9ucy4gU2luY2UgaXQncyBhIHN5c2NhbGwtcmVsYXRlZCBmZWF0dXJlLCBJIGNhbiBhbG1vc3QgZ3VhcmFudGVlIGl0cyBleGlzdGVuY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGRlZmluZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSB0aGUgc3RhbmRhcmQgdG9vbHM7IGEgYGdyZXBgIHRocm91Z2ggdGhlIGtlcm5lbCdzIGBLY29uZmlnYCBmaWxlcyBzaG91bGQgZG8gdGhlIHRyaWNrLCBtYXliZSBzdGFydGluZyB3aXRoIGEgd2lsZGNhcmQgc2VhcmNoIGxpa2UgYEtjb25maWcqIEJQRl9TWVNDQUxMYC4gT3IgcGVyaGFwcyBJIHdpbGwgdXNlICdmaW5kJyBhbmQgJ2dyZXAnIGNvbW1hbmRzIHRvIHNlYXJjaC4gRGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBjb2RlYmFzZSwgSSBtaWdodCBuZWVkIHRvIHJlZmluZSB0aGF0IHNlYXJjaCBpZiBpdCdzIHRvbyBicm9hZCBpbml0aWFsbHkuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0IGFyb3VuZCB0aGF0IG9wdGlvbiDigJMgd2hhdCBvdGhlciBmZWF0dXJlcyBkb2VzIGl0IGVuYWJsZSBvciBkaXNhYmxlPyBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCdzIHRoZSBkZWZhdWx0IHZhbHVlIGFuZCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSdsbCBwcm9iYWJseSBhbHNvIGNoZWNrIHJlbGV2YW50IGBNYWtlZmlsZWBzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29uZmlnIG9wdGlvbiB0cmFuc2xhdGVzIGludG8gYnVpbGQgZmxhZ3MgYW5kIHVsdGltYXRlbHksIGhvdyBpdCBhZmZlY3RzIHRoZSBnZW5lcmF0ZWQga2VybmVsIGNvZGUuIElkZWFsbHksIEknbGwgZmluZCBhIGNvbmNpc2UgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGUgb3B0aW9uIGFjdHVhbGx5ICpkb2VzKiBhbG9uZyB0aGUgd2F5LiBUaGF0J3MgdGhlIHByaW9yaXR5IHJpZ2h0IG5vdywgZmluZGluZyBpdHMgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUxMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjI3LjM5MTI4MDU5M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyOTY0NTU5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI5PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTMwLVxcbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMzItXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNToyOS4zMjA5MzkxMzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc3MzM4MTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgQlBGIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBCUEYuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMS4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgdGhlIGNvcmUgZGVmaW5pdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gSSdtIGV4cGVjdGluZyB0byBzZWUgd2hhdCBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUgdG8gZ2V0IHRoZSBiYXNpYyBCUEYgaW5mcmFzdHJ1Y3R1cmUgdXAgYW5kIHJ1bm5pbmcuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugd2hldGhlciBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgZmVhdHVyZXMgYXJlIHJlcXVpcmVkLCBhbnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEJQRiByZWxpZXMgb24gKGxpa2UgdHJhY2luZyBvciBpbnN0cnVtZW50YXRpb24gY2FwYWJpbGl0aWVzLCBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0KS4gSSdtIGFsc28gZ29pbmcgdG8gc2VlIGlmIGFueSBvdGhlciBCUEYgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgYWxzbyBkZWZpbmVkIGluIHRoaXMgZmlsZS4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSBpZiB0aGUgZGVwZW5kZW5jaWVzIG1ha2Ugc2Vuc2Ugb3Igc2VlbSB1bnVzdWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTU0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6MzMuMDk0MzI1MjM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cXG4gIDI2OlxcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXFxuICAyNzpcXHRcXHRib29sXFxuICAyODpcXHRcXG4gIDI5OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMzM6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDM2OlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDM3OlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzODpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzk6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICA0MDpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgNDE6XFx0XFx0ZGVmYXVsdCBuXFxuICA0MjpcXHRcXHRoZWxwXFxuICA0MzpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQ0OlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBCUEZfSklUXFxuICA0NzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNTA6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDUxOlxcdFxcdGhlbHBcXG4gIDUyOlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNTM6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDU0OlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTU6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU4OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1OTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG4gIDYwOlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4gIDYzOlxcdFxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbiAgNjQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6MzMuMDk0NDM2ODE3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NjExNDM0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCBleGFjdGx5ICp3aGF0KiBoYXMgY2hhbmdlZCB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci4gSXQgbG9va3MgbGlrZSB0aGUgZm9jdXMgaXMgb24gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgc2NhbiBoaWdobGlnaHRzIGEgc2V0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBjZW50cmFsIHRvIHRoZSB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSSBzZWUgYGNoZWNrX2Z1bmNfY2FsbGAsIHdoaWNoIGlzIGtleSB0byBob3cgZnVuY3Rpb24gY2FsbHMgYXJlIGhhbmRsZWQsIGFuZCBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gY2FsbGVkIGBpbl9zbGVlcGFibGVfY29udGV4dGAsIGxpa2VseSByZWxhdGVkIHRvIGNvbnRleHQgY2hlY2tzLiBUaGVuIHRoZXJlJ3MgdGhlIGNvcmUgbG9naWM6IGBkb19jaGVja19jb21tb25gLCBgZG9fY2hlY2tfc3VicHJvZ3NgLCBhbmQgYGRvX2NoZWNrX21haW5gLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSB3b3JraG9yc2VzIG9mIHRoZSB2ZXJpZmllciwgZWFjaCBoYW5kbGluZyBhIHNwZWNpZmljIGFzcGVjdC4gQW5kIG9mIGNvdXJzZSwgdGhlIGVudHJ5IHBvaW50LCBgYnBmX2NoZWNrYCwgd2hpY2ggb3JjaGVzdHJhdGVzIGV2ZXJ5dGhpbmcgYnkgY2FsbGluZyBib3RoIGBkb19jaGVja19tYWluYCBhbmQgYGRvX2NoZWNrX3N1YnByb2dzYC5cblxuTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdGhvcm91Z2hseSByZXZpZXcgYGJwZl9jaGVja2AgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udHJvbCBmbG93IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgY2FsbCBoaWVyYXJjaHkuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgcGF0aHMgb2YgZXhlY3V0aW9uIHRocm91Z2ggdGhlIGRpZmZlcmVudCBgZG9fY2hlY2tfKmAgZnVuY3Rpb25zLCBjYXJlZnVsbHkgZXhhbWluaW5nIHRoZWlyIHJvbGVzIGFuZCBkYXRhIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2RpZmllZCB2ZXJpZmllcidzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc3MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjM1LjU1NTU4MzY5NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MzM0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fY2hlY2tfc3VicHJvZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTU2OD1zdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZywgYm9vbCBpbl9zbGVlcGFibGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTQtICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NzU1OnN0YXRpYyBpbnQgZG9fY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTYte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIxMzA2PWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDk3LVxcdHJldCA9IGRvX2NoZWNrX21haW4oZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE0OTg6XFx0cmV0ID0gcmV0ID86IGRvX2NoZWNrX3N1YnByb2dzKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNTozNS42MDMzMjY1ODNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODg1MTk1MjczMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHdhbnRlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQsIHNvIEkgdHJhY2VkIHRoZSBjYWxscyB0byBgYnBmX2NoZWNrYC4gSXQgbG9va3MgbGlrZSBpdCdzIHByaW1hcmlseSBjYWxsZWQgYnkgYGJwZl9wcm9nX2xvYWRgIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBJIHRoZW4gZXhwYW5kZWQgbXkgZm9jdXMgdG8gaW5jbHVkZSB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCB3ZXJlIGFsc28gbW9kaWZpZWQ6IGBjaGVja19mdW5jX2NhbGxgLCBgZG9fY2hlY2tfY29tbW9uYCwgYGRvX2NoZWNrX3N1YnByb2dzYCwgYW5kIGBkb19jaGVja19tYWluYC5cblxuQXJlIHRoZXNlIGdvb2QgdGFyZ2V0cyBmb3IgZm9jdXNlZCB0ZXN0aW5nPyBEZWZpbml0ZWx5LiBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIEJQRiB2ZXJpZmllci4gYGRvX2NoZWNrX3N1YnByb2dzYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcsIGdpdmVuIHRoZSBzaWduaWZpY2FudCBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gaXRlcmF0aW5nIG92ZXIgc2xlZXBhYmxlIHZlcnN1cyBub24tc2xlZXBhYmxlIGNvbnRleHRzIGFuZCB0aGUgdG9wb2xvZ2ljYWwgb3JkZXIgb2Ygc3VicHJvZ3JhbXMuIGBkb19jaGVja19jb21tb25gIHZlcmlmaWVzIHRoZSBzdWJwcm9ncmFtcyBhbmQgdGhlIG1haW4gcHJvZ3JhbSB1bmRlciBhIGdpdmVuIHNsZWVwYWJsZSBjb250ZXh0LCB3aGlsZSBgY2hlY2tfZnVuY19jYWxsYCBoYW5kbGVzIHRoZSBwc2V1ZG8tY2FsbHMgYW5kIG1hcmtzIHRoZSBjYWxsIGNvbnRleHQuIEFuZCBgZG9fY2hlY2tfbWFpbmAgaXMsIG5hdHVyYWxseSwgdGhlIG1haW4gcHJvZ3JhbSB2ZXJpZmllci5cblxuSXQncyBjbGVhciB0aGF0IHRoZXNlIGFyZSAqbm90KiB1YmlxdWl0b3VzIGhvdHBhdGhzLCB3aGljaCBpcyBnb29kLiBCUEYgdmVyaWZpY2F0aW9uIGlzIG9ubHkgdHJpZ2dlcmVkIGJ5IHRoZSBgYnBmKEJQRl9QUk9HX0xPQUQpYCBzeXNjYWxsLiBUaGlzIG5hcnJvd3MgdGhlIHNjb3BlIGFuZCBtYWtlcyB0aGVzZSBmdW5jdGlvbnMgZXZlbiBiZXR0ZXIgdGFyZ2V0cyBmb3IgZm9jdXNzZWQgYW5hbHlzaXMuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgbW9kaWZpZWQgZmlsZXMsIHdlIGhhdmUgYGluY2x1ZGUvbGludXgvYnBmLmhgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYW5kIGEgc2VsZi10ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jYC4gVGhlIGNvbmZpZyB3ZSBuZWVkIHRvIGVuYWJsZSBpcyBgQlBGX1NZU0NBTExgLlxuXG5Db25zaWRlcmluZyB0aGlzLCB0aGUgYW5hbHlzaXMgc2F5cyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIFRoZSBqdXN0aWZpY2F0aW9uIGlzIHNvbGlkOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIEJQRiB2ZXJpZmllciBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBoYW5kbGUgZ2xvYmFsIHN1YnByb2dyYW0gdmVyaWZpY2F0aW9uIGRpZmZlcmVudGx5IGJhc2VkIG9uIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cy4gVGhpcyBpbnZvbHZlcyBjaGFuZ2VzIHRvIGxvb3Agb3JkZXJzLCB0b3BvbG9naWNhbCBvcmRlcmluZywgYW5kIGNvbnRleHQgdHJhY2tpbmcuIEJlY2F1c2UgdGhpcyB0b3VjaGVzIGNvcmUgdmVyaWZpY2F0aW9uIGxvZ2ljIGFuZCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGBicGYoQlBGX1BST0dfTE9BRClgIHN5c3RlbSBjYWxsLCB0aGVyZSdzIGEgc3Ryb25nIHBvdGVudGlhbCBmb3Igc3RhdGUgdmFsaWRhdGlvbiBwcm9ibGVtcywgaW5maW5pdGUgbG9vcHMsIG9yIGV2ZW4gdmVyaWZpZXIgY3Jhc2hlcy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNoYW5nZSB3ZSB3YW50IHRvIHRhcmdldC5cblxuU28sIEknbSBnb2luZyB0byBzZXQgdGhlc2UgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzIsIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjQ0LjQ1NTI4MTkxNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNTc0MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiLFxuICAgIFwiZG9fY2hlY2tfc3VicHJvZ3NcIixcbiAgICBcImRvX2NoZWNrX2NvbW1vblwiLFxuICAgIFwiY2hlY2tfZnVuY19jYWxsXCIsXG4gICAgXCJkb19jaGVja19tYWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBhbmQgdmVyaWZ5IGdsb2JhbCBzdWJwcm9ncmFtcyBzZXBhcmF0ZWx5IGFjcm9zcyBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUgZXhlY3V0aW9uIGNvbnRleHRzLCBtb2RpZnlpbmcgc3VicHJvZ3JhbSB2ZXJpZmljYXRpb24gbG9vcHMsIHRvcG9sb2dpY2FsIHRyYXZlcnNhbCBvcmRlciwgYW5kIGNvbnRleHQgc3RhdGUgaGFuZGxpbmcgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FEKSBzeXNjYWxsIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJkb19jaGVja19zdWJwcm9nc1wiLFxuICAgIFwiZG9fY2hlY2tfY29tbW9uXCIsXG4gICAgXCJjaGVja19mdW5jX2NhbGxcIixcbiAgICBcImRvX2NoZWNrX21haW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHRyYWNrIGFuZCB2ZXJpZnkgZ2xvYmFsIHN1YnByb2dyYW1zIHNlcGFyYXRlbHkgYWNyb3NzIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBleGVjdXRpb24gY29udGV4dHMsIG1vZGlmeWluZyBzdWJwcm9ncmFtIHZlcmlmaWNhdGlvbiBsb29wcywgdG9wb2xvZ2ljYWwgdHJhdmVyc2FsIG9yZGVyLCBhbmQgY29udGV4dCBzdGF0ZSBoYW5kbGluZyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjQ0LjUzNzg2Mjc4NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkwOTIwNTY2OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNTo0NC41Mzg0MTY0ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozOTA5MTQ5ODQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBhbmQgdmVyaWZ5IGdsb2JhbCBzdWJwcm9ncmFtIGNhbGxzIHNlcGFyYXRlbHkgZm9yIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZS9SQ1UgY29udGV4dHMuIEl0IHJlcGxhY2VzIHRoZSBzaW5nbGUtYml0IGBjYWxsZWRgIGFuZCBgdmVyaWZpZWRgIGZsYWdzIGluIGBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXhgIHdpdGggdHdvLWVsZW1lbnQgYm9vbGVhbiBhcnJheXMgaW5kZXhlZCBieSBgaW5fc2xlZXBhYmxlYC5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suIFRoZSBgYnBmX2Z1bmNfaW5mb19hdXhgIHN0cnVjdHVyZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uICh2aWEgYGt6YWxsb2Nfb2Jqc2ApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGBkb19jaGVja19zdWJwcm9ncygpYCwgYGRvX2NoZWNrX2NvbW1vbigpYCwgYW5kIGBjaGVja19mdW5jX2NhbGwoKWAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGUgYXJyYXlzIGFyZSBpbmRleGVkIHVzaW5nIGJvb2xlYW4gdmFsdWVzICgwIG9yIDEpLCBtYXRjaGluZyB0aGUgYXJyYXkgZGltZW5zaW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IEFueSBtZW1vcnkgYWNjZXNzIGlzc3VlcyAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIGFjY2VzcywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgc3RhdGUgYWxsb2NhdGlvbiBpc3N1ZXMsIG9yIGxvZ2ljL3ZlcmlmaWVyIHRyYXZlcnNhbCBidWdzKSB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NmVmYTYwM2EwZDUyMmU2ZWVjNjMyMzBkMTlhNmUyNjBkZmVlM2Q4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxMDowNToxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCAzYTdlYjIxODVjMzU0Li42NmQwNDI0NGM3Mzc4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTE2NTAsOCArMTY1MCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV9zZXRfZmxhZ3Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIGZsYWdzXG4gc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4IHtcbiBcdHUxNiBsaW5rYWdlO1xuIFx0Ym9vbCB1bnJlbGlhYmxlO1xuLVx0Ym9vbCBjYWxsZWQgOiAxO1xuLVx0Ym9vbCB2ZXJpZmllZCA6IDE7XG4rXHQvKiBJbmRleGVkIGJ5IGluX3NsZWVwYWJsZS4gKi9cbitcdGJvb2wgY2FsbGVkWzJdO1xuK1x0Ym9vbCB2ZXJpZmllZFsyXTtcbiB9O1xuIFxuIGVudW0gYnBmX2ppdF9wb2tlX3JlYXNvbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA1YjUxZTdlZTFhM2Y5Li5mNzU5YTAyMGM4YTVhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC05OTU3LDYgKzk5NTcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRpZiAoZXJyID09IC1FRkFVTFQpXG4gXHRcdHJldHVybiBlcnI7XG4gXHRpZiAoYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGVudiwgc3VicHJvZykpIHtcbitcdFx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICpzdWJfYXV4ID0gc3VicHJvZ19hdXgoZW52LCBzdWJwcm9nKTtcbiBcdFx0Y29uc3QgY2hhciAqc3ViX25hbWUgPSBicGZfc3VicHJvZ19uYW1lKGVudiwgc3VicHJvZyk7XG4gXHRcdGNvbnN0IGNoYXIgKm9wZXJhdGlvbjtcbiBcdFx0Ym9vbCByZXR1cm5zX3ZvaWQ7XG5AQCAtOTk4OCwxMSArOTk4OSwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdGlmIChlbnYtXHUwMDNlbG9nLmxldmVsIFx1MDAyNiBCUEZfTE9HX0xFVkVMKVxuIFx0XHRcdHZlcmJvc2UoZW52LCBcIkZ1bmMjJWQgKCclcycpIGlzIGdsb2JhbCBhbmQgYXNzdW1lZCB2YWxpZC5cXG5cIixcbiBcdFx0XHRcdHN1YnByb2csIHN1Yl9uYW1lKTtcbitcdFx0c3ViX2F1eC1cdTAwM2VjYWxsZWRbaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KV0gPSB0cnVlO1xuIFx0XHRyZXR1cm5zX3ZvaWQgPSBzdWJwcm9nX3JldHVybnNfdm9pZChlbnYsIHN1YnByb2cpO1xuIFx0XHRpZiAoZW52LVx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5jaGFuZ2VzX3BrdF9kYXRhKVxuIFx0XHRcdGNsZWFyX2FsbF9wa3RfcG9pbnRlcnMoZW52KTtcbi1cdFx0LyogbWFyayBnbG9iYWwgc3VicHJvZyBmb3IgdmVyaWZ5aW5nIGFmdGVyIG1haW4gcHJvZyAqL1xuLVx0XHRzdWJwcm9nX2F1eChlbnYsIHN1YnByb2cpLVx1MDAzZWNhbGxlZCA9IHRydWU7XG4gXHRcdGlmIChyZXR1cm5zX3ZvaWQpXG4gXHRcdFx0YnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgXHUwMDI2Y2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18wXSwgQlBGX0RJQUdfTU9EX0NBTExFUl9TQVZFRCk7XG4gXHRcdGVsc2VcbkBAIC0xMDgwNCw3ICsxMDgwNCwxMiBAQCBpbnQgYnBmX2dldF9oZWxwZXJfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGZ1bmNfaWQsXG4gXHRyZXR1cm4gKnB0ciBcdTAwMjZcdTAwMjYgKCpwdHIpLVx1MDAzZWZ1bmMgPyAwIDogLUVJTlZBTDtcbiB9XG4gXG4tLyogQ2hlY2sgaWYgd2UncmUgaW4gYSBzbGVlcGFibGUgY29udGV4dC4gKi9cbisvKlxuKyAqIFRoaXMgcHJlZGljYXRlIGlzIHRoZSBpbnZlcnNlIG9mIGluX3JjdV9jcygpOiBub24tc2xlZXBhYmxlIHByb2dyYW1zIGFuZFxuKyAqIGV2ZXJ5IGNvbmRpdGlvbiB0aGF0IHByZXZlbnRzIHNsZWVwaW5nIGFsc28gcHJvdmlkZSBSQ1UgcHJvdGVjdGlvbi4gR2xvYmFsXG4rICogc3VicHJvZyB2ZXJpZmljYXRpb24gcmVsaWVzIG9uIHRoaXMgZXF1aXZhbGVuY2UgdG8gcmVwcmVzZW50IHRoZSBjYWxsZXInc1xuKyAqIGV4ZWN1dGlvbiBjb250ZXh0IHVzaW5nIG9ubHkgdGhlIGluX3NsZWVwYWJsZSBiaXQuXG4rICovXG4gc3RhdGljIGlubGluZSBib29sIGluX3NsZWVwYWJsZV9jb250ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0cmV0dXJuICFlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWFjdGl2ZV9yY3VfbG9ja3MgXHUwMDI2XHUwMDI2XG5AQCAtMTk1NjAsMTMgKzE5NTY1LDE0IEBAIHN0YXRpYyB2b2lkIGZyZWVfc3RhdGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxuK3N0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBib29sIGluX3NsZWVwYWJsZSlcbiB7XG4gXHRib29sIHBvcF9sb2cgPSAhKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwyKTtcbiBcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWIgPSBzdWJwcm9nX2luZm8oZW52LCBzdWJwcm9nKTtcbiBcdHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eDtcbiBcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXRlO1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3M7XG4rXHR1MzIgb2xkX2luc25zX3RvdGFsID0gc3ViLVx1MDAzZWluc25zX3RvdGFsO1xuIFx0dTMyIGluc25fcHJvY2Vzc2VkID0gZW52LVx1MDAzZWluc25fcHJvY2Vzc2VkO1xuIFx0aW50IHJldCwgaTtcbiBcbkBAIC0xOTU3OSw3ICsxOTU4NSw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxuIFx0c3RhdGUtXHUwMDNlY3VyZnJhbWUgPSAwO1xuIFx0c3RhdGUtXHUwMDNlc3BlY3VsYXRpdmUgPSBmYWxzZTtcbiBcdHN0YXRlLVx1MDAzZWJyYW5jaGVzID0gMTtcbi1cdHN0YXRlLVx1MDAzZWluX3NsZWVwYWJsZSA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZXNsZWVwYWJsZTtcbitcdHN0YXRlLVx1MDAzZWluX3NsZWVwYWJsZSA9IGluX3NsZWVwYWJsZTtcbiBcdHN0YXRlLVx1MDAzZWZyYW1lWzBdID0ga3phbGxvY19vYmooc3RydWN0IGJwZl9mdW5jX3N0YXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFzdGF0ZS1cdTAwM2VmcmFtZVswXSkge1xuIFx0XHRrZnJlZShzdGF0ZSk7XG5AQCAtMTk3MjEsNyArMTk3MjcsOCBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbiBcdCAqIEFjY3VtdWxhdGUgdGhlaXIgdG90YWwgY291bnRzIGFzIHRvdGFsIGNvdW50cyBvZiB0aGUgbWFpbiBvclxuIFx0ICogZ2xvYmFsIHN1YnByb2cgaG9zdGluZyB0aGUgYXN5bmMgY2FsbC5cbiBcdCAqL1xuLVx0ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5pbnNuc190b3RhbCA9IGVudi1cdTAwM2VpbnNuX3Byb2Nlc3NlZCAtIGluc25fcHJvY2Vzc2VkO1xuK1x0ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5pbnNuc190b3RhbCA9IG9sZF9pbnNuc190b3RhbCArXG4rXHRcdFx0XHRcdFx0KGVudi1cdTAwM2VpbnNuX3Byb2Nlc3NlZCAtIGluc25fcHJvY2Vzc2VkKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTE5NzQ5LDQ1ICsxOTc1Niw1NSBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4O1xuIFx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICpzdWJfYXV4O1xuLVx0aW50IGksIHJldCwgbmV3X2NudDtcbitcdGludCBjb250ZXh0LCBpLCBqLCByZXQsIG5ld19jbnQ7XG4gXG4gXHRpZiAoIWF1eC1cdTAwM2VmdW5jX2luZm8pXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogZXhjZXB0aW9uIGNhbGxiYWNrIGlzIHByZXN1bWVkIHRvIGJlIGFsd2F5cyBjYWxsZWQgKi9cbi1cdGlmIChlbnYtXHUwMDNlZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpXG4tXHRcdHN1YnByb2dfYXV4KGVudiwgZW52LVx1MDAzZWV4Y2VwdGlvbl9jYWxsYmFja19zdWJwcm9nKS1cdTAwM2VjYWxsZWQgPSB0cnVlO1xuK1x0aWYgKGVudi1cdTAwM2VleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZykge1xuK1x0XHRzdWJfYXV4ID0gc3VicHJvZ19hdXgoZW52LCBlbnYtXHUwMDNlZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpO1xuK1x0XHRzdWJfYXV4LVx1MDAzZWNhbGxlZFtlbnYtXHUwMDNlcHJvZy1cdTAwM2VzbGVlcGFibGVdID0gdHJ1ZTtcbitcdH1cbiBcbiBhZ2FpbjpcbiBcdG5ld19jbnQgPSAwO1xuLVx0Zm9yIChpID0gMTsgaSBcdTAwM2MgZW52LVx1MDAzZXN1YnByb2dfY250OyBpKyspIHtcbitcdC8qXG4rXHQgKiBXYWxrIGNhbGxlcnMgYmVmb3JlIGNhbGxlZXMgc28gZWFjaCBnbG9iYWwgc3VicHJvZyBub3JtYWxseSBzZWVzIGFsbFxuK1x0ICogb2YgaXRzIGNvbnRleHRzIGJlZm9yZSBpdCBpcyB2ZXJpZmllZC4gQXN5bmMgY2FsbGJhY2sgY3ljbGVzIGNhbiBhZGQgYVxuK1x0ICogY29udGV4dCB0byBhbiBlYXJsaWVyIHN1YnByb2csIHNvIHJlcGVhdCB1bnRpbCBldmVyeSBjYWxsZWQgY29udGV4dCBpc1xuK1x0ICogdmVyaWZpZWQuXG4rXHQgKi9cbitcdGZvciAoaiA9IGVudi1cdTAwM2VzdWJwcm9nX2NudCAtIDE7IGogXHUwMDNlPSAwOyBqLS0pIHtcbitcdFx0aSA9IGVudi1cdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJbal07XG4rXHRcdGlmICghaSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKCFicGZfc3VicHJvZ19pc19nbG9iYWwoZW52LCBpKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0c3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgaSk7XG4tXHRcdGlmICghc3ViX2F1eC1cdTAwM2VjYWxsZWQgfHwgc3ViX2F1eC1cdTAwM2V2ZXJpZmllZClcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0Zm9yIChjb250ZXh0ID0gMDsgY29udGV4dCBcdTAwM2MgQVJSQVlfU0laRShzdWJfYXV4LVx1MDAzZWNhbGxlZCk7IGNvbnRleHQrKykge1xuK1x0XHRcdGlmICghc3ViX2F1eC1cdTAwM2VjYWxsZWRbY29udGV4dF0gfHwgc3ViX2F1eC1cdTAwM2V2ZXJpZmllZFtjb250ZXh0XSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRlbnYtXHUwMDNlaW5zbl9pZHggPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0O1xuLVx0XHRXQVJOX09OX09OQ0UoZW52LVx1MDAzZWluc25faWR4ID09IDApO1xuLVx0XHRyZXQgPSBkb19jaGVja19jb21tb24oZW52LCBpKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdHJldHVybiByZXQ7XG4tXHRcdH0gZWxzZSBpZiAoZW52LVx1MDAzZWxvZy5sZXZlbCBcdTAwMjYgQlBGX0xPR19MRVZFTCkge1xuLVx0XHRcdHZlcmJvc2UoZW52LCBcIkZ1bmMjJWQgKCclcycpIGlzIHNhZmUgZm9yIGFueSBhcmdzIHRoYXQgbWF0Y2ggaXRzIHByb3RvdHlwZVxcblwiLFxuLVx0XHRcdFx0aSwgYnBmX3N1YnByb2dfbmFtZShlbnYsIGkpKTtcbi1cdFx0fVxuK1x0XHRcdGVudi1cdTAwM2VpbnNuX2lkeCA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm9baV0uc3RhcnQ7XG4rXHRcdFx0V0FSTl9PTl9PTkNFKGVudi1cdTAwM2VpbnNuX2lkeCA9PSAwKTtcbitcdFx0XHRyZXQgPSBkb19jaGVja19jb21tb24oZW52LCBpLCBjb250ZXh0KTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHRpZiAoZW52LVx1MDAzZWxvZy5sZXZlbCBcdTAwMjYgQlBGX0xPR19MRVZFTClcbitcdFx0XHRcdHZlcmJvc2UoZW52LCBcIkZ1bmMjJWQgKCclcycpIGlzIHNhZmUgZm9yIGFueSBhcmdzIFwiXG4rXHRcdFx0XHRcdFwidGhhdCBtYXRjaCBpdHMgcHJvdG90eXBlXFxuXCIsXG4rXHRcdFx0XHRcdGksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBpKSk7XG4gXG4tXHRcdC8qIFdlIHZlcmlmaWVkIG5ldyBnbG9iYWwgc3VicHJvZywgaXQgbWlnaHQgaGF2ZSBjYWxsZWQgc29tZVxuLVx0XHQgKiBtb3JlIGdsb2JhbCBzdWJwcm9ncyB0aGF0IHdlIGhhdmVuJ3QgdmVyaWZpZWQgeWV0LCBzbyB3ZVxuLVx0XHQgKiBuZWVkIHRvIGRvIGFub3RoZXIgcGFzcyBvdmVyIHN1YnByb2dzIHRvIHZlcmlmeSB0aG9zZS5cbi1cdFx0ICovXG4tXHRcdHN1Yl9hdXgtXHUwMDNldmVyaWZpZWQgPSB0cnVlO1xuLVx0XHRuZXdfY250Kys7XG4rXHRcdFx0c3ViX2F1eC1cdTAwM2V2ZXJpZmllZFtjb250ZXh0XSA9IHRydWU7XG4rXHRcdFx0bmV3X2NudCsrO1xuK1x0XHR9XG4gXHR9XG4gXG4tXHQvKiBXZSBjYW4ndCBsb29wIGZvcmV2ZXIgYXMgd2UgdmVyaWZ5IGF0IGxlYXN0IG9uZSBnbG9iYWwgc3VicHJvZyBvblxuLVx0ICogZWFjaCBwYXNzLlxuK1x0LypcbitcdCAqIFdlIGNhbid0IGxvb3AgZm9yZXZlciBhcyBlYWNoIHBhc3MgdmVyaWZpZXMgYXQgbGVhc3Qgb25lIG5ldyBjb250ZXh0LFxuK1x0ICogYW5kIHRoZXJlIGFyZSBvbmx5IHR3byBjb250ZXh0cyBwZXIgZ2xvYmFsIHN1YnByb2cuXG4gXHQgKi9cbiBcdGlmIChuZXdfY250KVxuIFx0XHRnb3RvIGFnYWluO1xuQEAgLTE5ODAwLDcgKzE5ODE3LDcgQEAgc3RhdGljIGludCBkb19jaGVja19tYWluKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRpbnQgcmV0O1xuIFxuIFx0ZW52LVx1MDAzZWluc25faWR4ID0gMDtcbi1cdHJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIDApO1xuK1x0cmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgMCwgZW52LVx1MDAzZXByb2ctXHUwMDNlc2xlZXBhYmxlKTtcbiBcdGlmICghcmV0KVxuIFx0XHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlc3RhY2tfZGVwdGggPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvWzBdLnN0YWNrX2RlcHRoO1xuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xuaW5kZXggNmJmOTU1NTBhMDI0OC4uOTg3Y2E5ZGVjNmI3ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcbkBAIC05LDYgKzksMTEgQEBcbiBcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4gXG4rc3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19hY3F1aXJlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xuK3ZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbit2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbit2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuK1xuIC8qIFRpbWVyIHRlc3RzICovXG4gXG4gc3RydWN0IHRpbWVyX2VsZW0ge1xuQEAgLTY2LDYgKzcxLDcgQEAgaW50IHRpbWVyX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcbiBcbiBzdHJ1Y3Qgd3FfZWxlbSB7XG4gXHRzdHJ1Y3QgYnBmX3dxIHc7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19rcHRyICp0YXNrO1xuIH07XG4gXG4gc3RydWN0IHtcbkBAIC0xMTksNiArMTI1LDEwNiBAQCBpbnQgd3Ffc2xlZXBhYmxlX3Byb2codm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK19fbm9pbmxpbmUgaW50IHdxX2dsb2JhbF9hY3F1aXJlKHZvaWQpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAqYWNxdWlyZWQ7XG4rXHRzdHJ1Y3Qgd3FfZWxlbSAqdmFsO1xuK1x0aW50IGtleSA9IDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndxX21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHRhc2sgPSB2YWwtXHUwMDNldGFzaztcbitcdGlmICghdGFzaylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRhY3F1aXJlZCA9IGJwZl90YXNrX2FjcXVpcmUodGFzayk7XG4rXHRpZiAoYWNxdWlyZWQpXG4rXHRcdGJwZl90YXNrX3JlbGVhc2UoYWNxdWlyZWQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3FfZ2xvYmFsX3JjdV9jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcbit7XG4rXHR3cV9nbG9iYWxfYWNxdWlyZSgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcImZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiUjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyXCIpXG4raW50IHdxX2dsb2JhbF9yY3VfcHJvZyh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHdxX2VsZW0gKnZhbDtcbitcdGludCBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ3cV9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfd3FfaW5pdChcdTAwMjZ2YWwtXHUwMDNldywgXHUwMDI2d3FfbWFwLCAwKTtcbitcdGJwZl93cV9zZXRfY2FsbGJhY2soXHUwMDI2dmFsLVx1MDAzZXcsIHdxX2dsb2JhbF9yY3VfY2IsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3FfZ2xvYmFsX3JjdV9sb2NrX2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxuK3tcbitcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4rXHR3cV9nbG9iYWxfYWNxdWlyZSgpO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcImZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXCIpXG4rX19zdWNjZXNzXG4raW50IHdxX2dsb2JhbF9yY3VfbG9ja19wcm9nKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qgd3FfZWxlbSAqdmFsO1xuK1x0aW50IGtleSA9IDA7XG4rXG4rXHQvKiBWZXJpZnkgdGhlIHNhbWUgZ2xvYmFsIHN1YnByb2cgaW4gbm9uLXNsZWVwYWJsZSBhbmQgcHJvdGVjdGVkIGNvbnRleHRzLiAqL1xuK1x0d3FfZ2xvYmFsX2FjcXVpcmUoKTtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2d3FfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX3dxX2luaXQoXHUwMDI2dmFsLVx1MDAzZXcsIFx1MDAyNndxX21hcCwgMCk7XG4rXHRicGZfd3Ffc2V0X2NhbGxiYWNrKFx1MDAyNnZhbC1cdTAwM2V3LCB3cV9nbG9iYWxfcmN1X2xvY2tfY2IsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK19fbm9pbmxpbmUgaW50IHdxX2dsb2JhbF9ub19yY3Uodm9pZClcbit7XG4rXHRiYXJyaWVyKCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB3cV9nbG9iYWxfbm9fcmN1X2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxuK3tcbitcdHdxX2dsb2JhbF9ub19yY3UoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwiKVxuK19fc3VjY2Vzc1xuK2ludCB3cV9nbG9iYWxfbm9fcmN1X3Byb2codm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB3cV9lbGVtICp2YWw7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdC8qIFZlcmlmeSB0aGUgc2FtZSBnbG9iYWwgaW4gbm9uLXNsZWVwYWJsZSBhbmQgdW5wcm90ZWN0ZWQgY29udGV4dHMuICovXG4rXHR3cV9nbG9iYWxfbm9fcmN1KCk7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndxX21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl93cV9pbml0KFx1MDAyNnZhbC1cdTAwM2V3LCBcdTAwMjZ3cV9tYXAsIDApO1xuK1x0YnBmX3dxX3NldF9jYWxsYmFjayhcdTAwMjZ2YWwtXHUwMDNldywgd3FfZ2xvYmFsX25vX3JjdV9jYiwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogVGFzayB3b3JrIHRlc3RzICovXG4gXG4gc3RydWN0IHRhc2tfd29ya19lbGVtIHtcbkBAIC0xNzksMyArMjg1LDI5IEBAIGludCB0YXNrX3dvcmtfc2xlZXBhYmxlX3Byb2codm9pZCAqY3R4KVxuIFx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2dmFsLVx1MDAzZXR3LCBcdTAwMjZ0YXNrX3dvcmtfbWFwLCB0YXNrX3dvcmtfY2IpO1xuIFx0cmV0dXJuIDA7XG4gfVxuK1xuK3N0YXRpYyBpbnQgdGFza193b3JrX2dsb2JhbF9yY3VfY2Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSlcbit7XG4rXHRyZXR1cm4gd3FfZ2xvYmFsX2FjcXVpcmUoKTtcbit9XG4rXG4rU0VDKFwiZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcIilcbitfX2ZhaWx1cmUgX19tc2coXCJSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcIilcbitpbnQgdGFza193b3JrX2dsb2JhbF9yY3VfcHJvZyh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfd29ya19lbGVtICp2YWw7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGFza193b3JrX21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdGlmICghdGFzaylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSh0YXNrLCBcdTAwMjZ2YWwtXHUwMDNldHcsIFx1MDAyNnRhc2tfd29ya19tYXAsXG4rXHRcdFx0XHQgICAgICB0YXNrX3dvcmtfZ2xvYmFsX3JjdV9jYik7XG4rXHRyZXR1cm4gMDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNTo0NC41Mzg0MTc1NTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjIxNDYyMjAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoZSBOZWVkIGZvciBhIERlZGljYXRlZCBLTVNBTiBGdXp6aW5nIFNlc3Npb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIHNwaW5uaW5nIHVwIGEgc2VwYXJhdGUgS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgd2hhdCB3ZSdyZSBhbHJlYWR5IGRvaW5nIHdpdGggS0FTQU4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyB0aHJvdWdoIHRoZSBjaGFuZ2VzIG1ldGhvZGljYWxseSBhbmQgdGhlbiBtYWtlIHRoZSBjYWxsLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gSSdsbCBleGFtaW5lIHRoZSBjb2RlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhleSByZWxhdGUgdG8gcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2ggYmV0dGVyIHRoYW4gS0FTQU4uXG5cbkFscmlnaHQsIHRoZSBwYXRjaCB0b3VjaGVzIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGFuZCBpbmNsdWRlcyBhIHNlbGYtdGVzdC4gTGV04oCZcyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4gVGhleSd2ZSBtb2RpZmllZCBgc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4YC4gVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoZSBjaGFuZ2UgZnJvbSBzaW5nbGUgYGNhbGxlZGAgYW5kIGB2ZXJpZmllZGAgYm9vbHMgdG8gYXJyYXlzOiBgY2FsbGVkWzJdYCBhbmQgYHZlcmlmaWVkWzJdYC4gSW5kZXhlZCBieSBgaW5fc2xlZXBhYmxlX2NvbnRleHRgLiBUaGlzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgY29udGV4dC1zZW5zaXRpdmUgY2hhbmdlLCBsaWtlbHkgZGVhbGluZyB3aXRoIGhvdyBCUEYgZnVuY3Rpb25zIGJlaGF2ZSBpbiBzbGVlcGFibGUgdmVyc3VzIG5vbi1zbGVlcGFibGUgY29udGV4dHMuXG5cbk1vdmluZyBvbiB0byBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gIEkgc2VlIHRoZSBgY2hlY2tfZnVuY19jYWxsKClgIGZ1bmN0aW9uIGlzIHVwZGF0ZWQgdG8gc2V0IGBzdWJfYXV4LVx1MDAzZWNhbGxlZFtpbl9zbGVlcGFibGVfY29udGV4dChlbnYpXSA9IHRydWU7YC4gIFRoZSB2ZXJpZmllciBpcyBub3cgdHJhY2tpbmcgY2FsbHMgYmFzZWQgb24gd2hldGhlciB0aGV5IG9jY3VyIGluIGEgc2xlZXBhYmxlIGNvbnRleHQuICBBbHNvLCBgZG9fY2hlY2tfY29tbW9uYCBub3cgZXhwbGljaXRseSBwYXNzZXMgYGluX3NsZWVwYWJsZWAgdG8gYHN0YXRlLVx1MDAzZWluX3NsZWVwYWJsZWAuICBGaW5hbGx5LCBgZG9fY2hlY2tfc3VicHJvZ3MoKWAgaXRlcmF0ZXMgYW5kIHNldHMgYHN1Yl9hdXgtXHUwMDNldmVyaWZpZWRbY29udGV4dF0gPSB0cnVlO2AuIGBkb19jaGVja19tYWluKClgIGxvb2tzIGxpa2UgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIHNvIEknbGwgY2hlY2sgaWYgdGhlIGNoYW5nZSBpcyBsaW1pdGVkIHRvIGEgc2luZ2xlIGNvbnRleHQgKGUuZy4gYG1haW5gIG9ubHkpLlxuXG5UaGlzIGFsbCBwb2ludHMgdG8gY2hhbmdlcyBpbiBob3cgdGhlIEJQRiB2ZXJpZmllciBoYW5kbGVzIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cy4gVGhpcyBpcyBteSBpbnR1aXRpb24uIEl0J3MgbGlrZWx5IHRoYXQgdGhleSdyZSB0cnlpbmcgdG8gaW1wcm92ZSB2ZXJpZmljYXRpb24gb2YgQlBGIHByb2dyYW1zIHRoYXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGVzZSBzbGVlcGFibGUgY29udGV4dHMuXG5cbk5vdywgSSBuZWVkIHRvIGtub3cgbW9yZSBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eGAuICBJJ2xsIHVzZSBgZ3JlcHBlcmAgKG9yIHNpbWlsYXIgdG9vbHMpIHRvIGZpbmQgd2hlcmUgdGhpcyBzdHJ1Y3QgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpZiB0aGVyZSBhcmUgbmV3IHBvdGVudGlhbCBwYXRocyBvZiBtZW1vcnkgY29ycnVwdGlvbi4gQmFzZWQgb24gd2hlcmUgaXQncyBhbGxvY2F0ZWQgYW5kIGhvdyBpdCdzIHVzZWQsIEkgY2FuIGdldCBhIGJldHRlciBzZW5zZSBpZiB0aGlzIGlzIGEgS01TQU4gdHJpZ2dlciBvciBub3QuXG5cbkZyb20gdGhpcywgSSdsbCBhc3Nlc3Mgd2hldGhlciBhIHNlcGFyYXRlIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBsaWtlbHkgdG8gZXhwb3NlIG5ldyB2dWxuZXJhYmlsaXRpZXMgdGhhdCBhcmUgbWlzc2VkIGJ5IHRoZSBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLiBJZiB0aGUgYWxsb2NhdGlvbi91c2Ugb2YgdGhpcyBzdHJ1Y3QgaXMgaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2VzIGxvY2tpbmcgdGhhdCBpcyBub3QgS0FTQU4tdmVyaWZpZWQsIHRoZW4gSSB3aWxsIHN0cm9uZ2x5IGNvbnNpZGVyIEtNU0FOIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNTo1MC43NTMwNDMwOTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzE1MDQ1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnVuY19pbmZvX2F1eFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdD0xMjA9SXQgcHJvZHVjZXMgdGhlIG91dHB1dDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdC0xODItICAgICAgICAgICAgLmZ1bmNfaW5mbyA9IChzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyAqKTB4ZmZmZjg4OWZmNzk1ZDI0MCxcXG5Eb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdDoxODM6ICAgICAgICAgICAgLmZ1bmNfaW5mb19hdXggPSAoc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICopMHhmZmZmODg5ZmY3OTVkZTIwLFxcbkRvY3VtZW50YXRpb24vYnBmL2RyZ24ucnN0LTE4NC0gICAgICAgICAgICAubGluZm8gPSAoc3RydWN0IGJwZl9saW5lX2luZm8gKikweGZmZmY4ODhhNzA3YWZjMDAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE2NDc9c3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MpIHt9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE2NDktXFxuaW5jbHVkZS9saW51eC9icGYuaDoxNjUwOnN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCB7XFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjUxLVxcdHUxNiBsaW5rYWdlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0xNzQyPXN0cnVjdCBicGZfcHJvZ19hdXgge1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0xODI4LVxcdHN0cnVjdCBicGZfZnVuY19pbmZvICpmdW5jX2luZm87XFxuaW5jbHVkZS9saW51eC9icGYuaDoxODI5OlxcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqZnVuY19pbmZvX2F1eDtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE4MzAtXFx0LyogYnBmX2xpbmVfaW5mbyBsb2FkZWQgZnJvbSB1c2Vyc3BhY2UuICBsaW5mby1cXHUwMDNlaW5zbl9vZmZcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9OTE5PXN0cnVjdCBicGZfdmVyaWZpZXJfZW52IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTA1MC1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjEwNTE6c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXggKnN1YnByb2dfYXV4KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTA1Mi17XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMDUzOlxcdHJldHVybiBcXHUwMDI2ZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWZ1bmNfaW5mb19hdXhbc3VicHJvZ107XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMDU0LX1cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODAwNz1pbnQgYnRmX3ByZXBhcmVfZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy04MDQ3LVxcbmtlcm5lbC9icGYvYnRmLmM6ODA0ODpcXHRpZiAocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2ddLnVucmVsaWFibGUpIHtcXG5rZXJuZWwvYnBmL2J0Zi5jLTgwNDktXFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcInVucmVsaWFibGUgQlRGIGZvciBmdW5jdGlvbiAlcygpXFxcIiwgdG5hbWUpO1xcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYz0xMzM9c3RhdGljIGludCBjaGVja19idGZfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy0xMzktXFx0c3RydWN0IGJwZl9mdW5jX2luZm8gKmtyZWNvcmQ7XFxua2VybmVsL2JwZi9jaGVja19idGYuYzoxNDA6XFx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICppbmZvX2F1eCA9IE5VTEw7XFxua2VybmVsL2JwZi9jaGVja19idGYuYy0xNDEtXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy0yMDEtXFxua2VybmVsL2JwZi9jaGVja19idGYuYzoyMDI6XFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4ID0gaW5mb19hdXg7XFxua2VybmVsL2JwZi9jaGVja19idGYuYy0yMDMtXFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTQwMT1zdGF0aWMgaW50IGFkanVzdF9zdWJwcm9nX3N0YXJ0c19hZnRlcl9yZW1vdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNDM4LVxcdFxcdFxcdFxcdHNpemVvZigqYXV4LVxcdTAwM2VmdW5jX2luZm8pICogbW92ZSk7XFxua2VybmVsL2JwZi9maXh1cHMuYzo0Mzk6XFx0XFx0XFx0aWYgKGF1eC1cXHUwMDNlZnVuY19pbmZvX2F1eClcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjQ0MDpcXHRcXHRcXHRcXHRtZW1tb3ZlKGF1eC1cXHUwMDNlZnVuY19pbmZvX2F1eCArIGksXFxua2VybmVsL2JwZi9maXh1cHMuYzo0NDE6XFx0XFx0XFx0XFx0XFx0YXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4ICsgaixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjQ0MjpcXHRcXHRcXHRcXHRcXHRzaXplb2YoKmF1eC1cXHUwMDNlZnVuY19pbmZvX2F1eCkgKiBtb3ZlKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTQ0My1cXHRcXHRcXHRhdXgtXFx1MDAzZWZ1bmNfaW5mb19jbnQgLT0gaiAtIGk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yNDQwPXN0YXRpYyB2b2lkIF9fYnBmX3Byb2dfcHV0X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI0NDQtXFx0a3ZmcmVlKGF1eC1cXHUwMDNlZnVuY19pbmZvKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNDQ1OlxcdGtmcmVlKGF1eC1cXHUwMDNlZnVuY19pbmZvX2F1eCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjQ0Ni1cXHRmcmVlX3VpZChhdXgtXFx1MDAzZXVzZXIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM4Mj1ib29sIGJwZl9zdWJwcm9nX2lzX2dsb2JhbChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzgzLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzg0OlxcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqYXV4ID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWZ1bmNfaW5mb19hdXg7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM4NS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05ODM5PXN0YXRpYyBpbnQgYnRmX2NoZWNrX3N1YnByb2dfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05ODUzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5ODU0OlxcdGlmIChwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWZ1bmNfaW5mb19hdXhbc3VicHJvZ10udW5yZWxpYWJsZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTg1NS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05ODYyLVxcdGlmIChlcnIpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk4NjM6XFx0XFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2ddLnVucmVsaWFibGUgPSB0cnVlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05ODY0LVxcdHJldHVybiBlcnI7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTkzOT1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk1OS1cXHRpZiAoYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGVudiwgc3VicHJvZykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTk2MDpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXggKnN1Yl9hdXggPSBzdWJwcm9nX2F1eChlbnYsIHN1YnByb2cpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05OTYxLVxcdFxcdGNvbnN0IGNoYXIgKnN1Yl9uYW1lID0gYnBmX3N1YnByb2dfbmFtZShlbnYsIHN1YnByb2cpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MzAzPXN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM2My1cXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MzY0OlxcdFxcdGlmIChhdXgtXFx1MDAzZWZ1bmNfaW5mb19hdXhbc3VicHJvZ25vXS5saW5rYWdlICE9IEJURl9GVU5DX1NUQVRJQykge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM2NS1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcXFxcblxcXCIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTY4PXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBib29sIGluX3NsZWVwYWJsZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY4Ny1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2ODg6XFx0XFx0aWYgKGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4KSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Njg5LVxcdFxcdFxcdHJldCA9IGJ0Zl9wcmVwYXJlX2Z1bmNfYXJncyhlbnYsIDApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5MC1cXHRcXHRcXHRpZiAocmV0IHx8IHN1Yi1cXHUwMDNlYXJnX2NudCAhPSAxIHx8IHN1Yi1cXHUwMDNlYXJnc1swXS5hcmdfdHlwZSAhPSBBUkdfUFRSX1RPX0NUWCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY5MTpcXHRcXHRcXHRcXHRlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlZnVuY19pbmZvX2F1eFswXS51bnJlbGlhYmxlID0gdHJ1ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2OTItXFx0XFx0XFx0XFx0c3ViLVxcdTAwM2VhcmdfY250ID0gMTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTc1NT1zdGF0aWMgaW50IGRvX2NoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTctXFx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXg7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NzU4OlxcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTktXFx0aW50IGNvbnRleHQsIGksIGosIHJldCwgbmV3X2NudDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDE5Mz1pbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDI2Ny1cXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjY4OlxcdFxcdGNvbnNlcnZhdGl2ZSA9IGF1eC1cXHUwMDNlZnVuY19pbmZvX2F1eFtzdWJwcm9nXS51bnJlbGlhYmxlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDI2OS1cXHRcXHRpZiAocHJvZ19leHRlbnNpb24pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6NTIuNjI0NTUyOTA2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1Njk0MTA5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gQlRGIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpbmZvX2F1eGAgc3RydWN0dXJlIGlzIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgQlRGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyIFR5cGUgRm9ybWF0KSBjaGVja2luZyBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIGFsbG9jYXRpb24gbG9naWMgaXMgbW9zdCBsaWtlbHkgd2l0aGluIHRoZSB2ZXJpZmljYXRpb24gZnVuY3Rpb24sIHNvIEknbGwgY2hlY2sgYGtlcm5lbC9icGYvY2hlY2tfYnRmLmNgLiBMaW5lIDEzMyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIHRoYXQgc291bmRzIGxpa2UgYSBsaWtlbHkgc3BvdCB0byBmaW5kIHRoZSBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBkZXRhaWxzLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhlcmUuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBpbiB0aGUgQlRGIHZhbGlkYXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjU0LjE5Mzk2NzUwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jaGVja19idGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDY1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICppbmZvX2F1eCA9IE5VTEw7XFxuIDE0MTpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuIDE0MjpcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmICpidGY7XFxuIDE0MzpcXHRcXHRicGZwdHJfdCB1cmVjb3JkO1xcbiAxNDQ6XFx0XFx0Ym9vbCBzY2FsYXJfcmV0dXJuO1xcbiAxNDU6XFx0XFx0aW50IHJldCA9IC1FTk9NRU07XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdFxcdG5mdW5jcyA9IGF0dHItXFx1MDAzZWZ1bmNfaW5mb19jbnQ7XFxuIDE0ODpcXHRcXHRpZiAoIW5mdW5jcykge1xcbiAxNDk6XFx0XFx0XFx0aWYgKGNoZWNrX2Fibm9ybWFsX3JldHVybihlbnYpKVxcbiAxNTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE1MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTUyOlxcdFxcdH1cXG4gMTUzOlxcdFxcdGlmIChuZnVuY3MgIT0gZW52LVxcdTAwM2VzdWJwcm9nX2NudCkge1xcbiAxNTQ6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJudW1iZXIgb2YgZnVuY3MgaW4gZnVuY19pbmZvIGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHN1YnByb2dzXFxcXG5cXFwiKTtcXG4gMTU1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxNTY6XFx0XFx0fVxcbiAxNTc6XFx0XFxuIDE1ODpcXHRcXHR1cmVjX3NpemUgPSBhdHRyLVxcdTAwM2VmdW5jX2luZm9fcmVjX3NpemU7XFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdHByb2cgPSBlbnYtXFx1MDAzZXByb2c7XFxuIDE2MTpcXHRcXHRidGYgPSBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWJ0ZjtcXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0dXJlY29yZCA9IG1ha2VfYnBmcHRyKGF0dHItXFx1MDAzZWZ1bmNfaW5mbywgdWF0dHIuaXNfa2VybmVsKTtcXG4gMTY0OlxcdFxcbiAxNjU6XFx0XFx0a3JlY29yZCA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlZnVuY19pbmZvO1xcbiAxNjY6XFx0XFx0aW5mb19hdXggPSBremFsbG9jX29ianMoKmluZm9fYXV4LCBuZnVuY3MsXFxuIDE2NzpcXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk4pO1xcbiAxNjg6XFx0XFx0aWYgKCFpbmZvX2F1eClcXG4gMTY5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmZ1bmNzOyBpKyspIHtcXG4gMTcyOlxcdFxcdFxcdC8qIGNoZWNrIGluc25fb2ZmICovXFxuIDE3MzpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHRcXHRpZiAoZW52LVxcdTAwM2VzdWJwcm9nX2luZm9baV0uc3RhcnQgIT0ga3JlY29yZFtpXS5pbnNuX29mZikge1xcbiAxNzY6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJmdW5jX2luZm8gQlRGIHNlY3Rpb24gZG9lc24ndCBtYXRjaCBzdWJwcm9nIGxheW91dCBpbiBCUEYgcHJvZ3JhbVxcXFxuXFxcIik7XFxuIDE3NzpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAxNzg6XFx0XFx0XFx0fVxcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHRcXHQvKiBBbHJlYWR5IGNoZWNrZWQgdHlwZV9pZCAqL1xcbiAxODE6XFx0XFx0XFx0dHlwZSA9IGJ0Zl90eXBlX2J5X2lkKGJ0Ziwga3JlY29yZFtpXS50eXBlX2lkKTtcXG4gMTgyOlxcdFxcdFxcdGluZm9fYXV4W2ldLmxpbmthZ2UgPSBCVEZfSU5GT19WTEVOKHR5cGUtXFx1MDAzZWluZm8pO1xcbiAxODM6XFx0XFx0XFx0LyogQWxyZWFkeSBjaGVja2VkIGZ1bmNfcHJvdG8gKi9cXG4gMTg0OlxcdFxcdFxcdGZ1bmNfcHJvdG8gPSBidGZfdHlwZV9ieV9pZChidGYsIHR5cGUtXFx1MDAzZXR5cGUpO1xcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRcXHRyZXRfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgZnVuY19wcm90by1cXHUwMDNldHlwZSwgTlVMTCk7XFxuIDE4NzpcXHRcXHRcXHRzY2FsYXJfcmV0dXJuID1cXG4gMTg4OlxcdFxcdFxcdFxcdGJ0Zl90eXBlX2lzX3NtYWxsX2ludChyZXRfdHlwZSkgfHwgYnRmX2lzX2FueV9lbnVtKHJldF90eXBlKTtcXG4gMTg5OlxcdFxcdFxcdGlmIChpIFxcdTAwMjZcXHUwMDI2ICFzY2FsYXJfcmV0dXJuIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldLmhhc19sZF9hYnMpIHtcXG4gMTkwOlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiTERfQUJTIGlzIG9ubHkgYWxsb3dlZCBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gJ2ludCcuXFxcXG5cXFwiKTtcXG4gMTkxOlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDE5MjpcXHRcXHRcXHR9XFxuIDE5MzpcXHRcXHRcXHRpZiAoaSBcXHUwMDI2XFx1MDAyNiAhc2NhbGFyX3JldHVybiBcXHUwMDI2XFx1MDAyNiBlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tpXS5oYXNfdGFpbF9jYWxsKSB7XFxuIDE5NDpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInRhaWxfY2FsbCBpcyBvbmx5IGFsbG93ZWQgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuICdpbnQnLlxcXFxuXFxcIik7XFxuIDE5NTpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAxOTY6XFx0XFx0XFx0fVxcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHRcXHRlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tpXS5uYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS1cXHUwMDNlbmFtZV9vZmYpO1xcbiAxOTk6XFx0XFx0XFx0YnBmcHRyX2FkZChcXHUwMDI2dXJlY29yZCwgdXJlY19zaXplKTtcXG4gMjAwOlxcdFxcdH1cXG4gMjAxOlxcdFxcbiAyMDI6XFx0XFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4ID0gaW5mb19hdXg7XFxuIDIwMzpcXHRcXHRyZXR1cm4gMDtcXG4gMjA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNTo1NC4xOTQwODAyMDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU3OTYzODI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiB2ZXJpZmllciBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgY2hhbmdlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBGaXJzdCwgdGhlIGBpbmZvX2F1eGAgc3RydWN0dXJlLCB3aGljaCBzZWVtcyB0byBiZSBjZW50cmFsIHRvIHRoaXMsIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpzYC4gVGhpcyBpcyBnb29kOyBpdCBndWFyYW50ZWVzIHRoZSBtZW1vcnkgaXMgemVyb2VkIG91dCBmcm9tIHRoZSBzdGFydCwgd2hpY2ggaXMgYSBnb29kIGJhc2VsaW5lIHRvIGF2b2lkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCByZXZvbHZlcyBhcm91bmQgaG93IHRoZSB2ZXJpZmllciB0cmFja3Mgc3VicHJvZ3JhbSBjYWxscyBhbmQgdmVyaWZpY2F0aW9uIHN0YXR1cyBpbiBib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cy4gUHJldmlvdXNseSwgd2UgaGFkIHRoZXNlIGFzIHNpbmdsZSBib29sZWFuIGZsYWdzOiBgY2FsbGVkYCBhbmQgYHZlcmlmaWVkYC4gTm93LCBpdCdzIGJlZW4gY2hhbmdlZCB0byBgYm9vbCBjYWxsZWRbMl07YCBhbmQgYGJvb2wgdmVyaWZpZWRbMl07YC4gVGhpcyBpcyBpbmRleGVkIGJ5IGBpbl9zbGVlcGFibGVgLCB3aGljaCBpcyBlaXRoZXIgMCBvciAxLCByZXByZXNlbnRpbmcgdGhlc2UgdHdvIGNvbnRleHRzLiBNYWtlcyBzZW5zZTsgdGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHdheSB0byBkaWZmZXJlbnRpYXRlIHRoZSBjYWxsL3ZlcmlmaWNhdGlvbiBzdGF0ZSBiZXR3ZWVuIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYGNoZWNrX2Z1bmNfY2FsbCgpYCwgdGhlIGBjYWxsZWRgIGZsYWcgaXMgYmVpbmcgc2V0OiBgc3ViX2F1eC1cdTAwM2VjYWxsZWRbaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KV0gPSB0cnVlO2AuIGBpbl9zbGVlcGFibGVfY29udGV4dChlbnYpYCByZXR1cm5zIGEgYm9vbCAtIHdoaWNoIEkgcXVpY2tseSB2ZXJpZmllZCBjYW4gb25seSByZXR1cm4gMCBvciAxLiBTbyB1c2luZyB0aGlzIGJvb2xlYW4gYXMgYW4gYXJyYXkgaW5kZXggaXMgc2FmZS5cblxuVGhlbiwgaW4gYGRvX2NoZWNrX3N1YnByb2dzKClgLCB3ZSBpdGVyYXRlIHRocm91Z2ggc3VicHJvZ3JhbXMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIsIGZvciBib3RoIGNvbnRleHRzICgwIGFuZCAxKS4gSWYgYSBzdWJwcm9ncmFtIGhhcyBiZWVuIGNhbGxlZCBpbiBhIHBhcnRpY3VsYXIgY29udGV4dCAqYnV0KiBub3QgeWV0IHZlcmlmaWVkIGZvciB0aGF0IGNvbnRleHQsIHdlIGNhbGwgYGRvX2NoZWNrX2NvbW1vbigpYCwgYW5kIHRoZW4gc2V0IGB2ZXJpZmllZFtjb250ZXh0XSA9IHRydWVgLlxuXG5JbiBgZG9fY2hlY2tfbWFpbigpYCwgYGRvX2NoZWNrX2NvbW1vbigpYCBpcyBjYWxsZWQgd2l0aCBgZW52LVx1MDAzZXByb2ctXHUwMDNlc2xlZXBhYmxlYCBhcyB0aGUgY29udGV4dC5cblxuSSBzZWUgYGRvX2NoZWNrX2NvbW1vbigpYCB1cGRhdGluZyBgc3RhdGUtXHUwMDNlaW5fc2xlZXBhYmxlYCwgYW5kIGFsc28gdGhlIGBpbnNuc190b3RhbGAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBhcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB3aXRoIHRoaXMgY2hhbmdlPyBJJ3ZlIGdvdCB0byBiZSBzdXJlLiBJJ3ZlIGJyb2tlbiBkb3duIG15IGNoZWNrOlxuXG4xLiAgYGluZm9fYXV4YCBpcyBga3phbGxvY19vYmpzYCwgd2hpY2ggbWVhbnMgdGhhdCBhbGwgb2YgYGNhbGxlZFswXWAsIGBjYWxsZWRbMV1gLCBgdmVyaWZpZWRbMF1gLCBhbmQgYHZlcmlmaWVkWzFdYCBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhhdCdzIGEgaHVnZSByZWxpZWYuXG4yLiAgSSBkaWQgYSBxdWljayBzY2FuIC0gTm8gZGlyZWN0IGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBldGMuKSB3aXRob3V0IGluaXRpYWxpemF0aW9uLlxuMy4gIE5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGRlcGVuZGluZyBvbiAqdW5pbml0aWFsaXplZCogZGF0YS5cbjQuICBObyBjaGFuZ2VzIGluIGJ1ZmZlciBzaXppbmcgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBsZWFrcy4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHJlYWRzLlxuNS4gIEFsbCB2YXJpYWJsZXMgdXNlZCB3aXRoaW4gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyAoYGNvbnRleHRgLCBgaWAsIGBqYCwgYHJldGAsIGBuZXdfY250YCwgYG9sZF9pbnNuc190b3RhbGApIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzYWdlLlxuXG5TbywgKmFzIGZhciBhcyBJIGNhbiBzZWUqLCB0aGVyZSBhcmUgbm8gb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaGVyZS4gVGhlIHBhdGNoIHNlZW1zIHNvbGlkIG9uIHRoYXQgZnJvbnQuXG5cbkknbGwgZG8gYSBxdWljayBgZ3JlcGAgZm9yIGBjYWxsZWRgIGFuZCBgdmVyaWZpZWRgIHdpdGhpbiBga2VybmVsL2JwZi9gIHRvIG1ha2UgZG91Ymx5IHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEl0J3MgdG9vIGltcG9ydGFudCB0byBiZSBjb21wbGFjZW50LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHNlYXJjaCByZXN1bHRzIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGVyZSBhcmUgbm8gb3RoZXIgcGxhY2VzIHRoZXNlIHZhcmlhYmxlcyBhcmUgdXNlZCwgYW5kIHRoYXQgdGhleSdyZSBiZWluZyB1c2VkIHNhZmVseSBhbmQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgyNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjU5Ljc3MzcyMTczMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc1MzkyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGNhbGxlZHx2ZXJpZmllZClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDYzOSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTkzMj1zdGF0aWMgdm9pZCAqZmRfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MzYtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjkzNzovKiBvbmx5IGNhbGxlZCBmcm9tIHN5c2NhbGwgKi9cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTM4LWludCBicGZfZmRfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyICp2YWx1ZSlcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05NTYtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjk1NzovKiBvbmx5IGNhbGxlZCBmcm9tIHN5c2NhbGwgKi9cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTU4LWludCBicGZfZmRfYXJyYXlfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM9MjM3PXZvaWQgYnBmX2ZtdF9zdGFja19tYXNrKGNoYXIgKmJ1Ziwgc3NpemVfdCBidWZfc3osIHU2NCBzdGFja19tYXNrKVxcbi0tXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy0yNTUtXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYzoyNTY6LyogRm9yIGdpdmVuIHZlcmlmaWVyIHN0YXRlIGJhY2t0cmFja19pbnNuKCkgaXMgY2FsbGVkIGZyb20gdGhlIGxhc3QgaW5zbiB0b1xcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtMjU3LSAqIHRoZSBmaXJzdCBpbnNuLiBJdHMgcHVycG9zZSBpcyB0byBjb21wdXRlIGEgYml0bWFzayBvZiByZWdpc3RlcnMgYW5kXFxuLS1cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jPTY2OT12b2lkIGJwZl9tYXJrX2FsbF9zY2FsYXJzX3ByZWNpc2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNzI4LSAqIE9uZSBpbXBvcnRhbnQgYW5kIHN1YnRsZSBhc3BlY3QgaXMgdGhhdCBwcmVjaXNlIG1hcmtzICpkbyBub3QgbWF0dGVyKiBpblxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6NzI5OiAqIHRoZSBjdXJyZW50bHkgdmVyaWZpZWQgc3RhdGUgKGN1cnJlbnQgc3RhdGUpLiBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZFxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNzMwLSAqIHdoeSB0aGlzIGlzIHRoZSBjYXNlLlxcbi0tXFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jPTEyNT1CUEZfQ0FMTF80KGJwZl9pbm9kZV9zdG9yYWdlX2dldCwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCBzdHJ1Y3QgaW5vZGUgKiwgaW5vZGUsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbm9kZV9zdG9yYWdlLmMtMTQ1LVxcbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYzoxNDY6XFx0LyogVGhpcyBoZWxwZXIgbXVzdCBvbmx5IGNhbGxlZCBmcm9tIHdoZXJlIHRoZSBpbm9kZSBpcyBndWFyYW50ZWVkXFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jLTE0Ny1cXHQgKiB0byBoYXZlIGEgcmVmY291bnQgYW5kIGNhbm5vdCBiZSBmcmVlZC5cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYz0xNjA9QlBGX0NBTExfMihicGZfaW5vZGVfc3RvcmFnZV9kZWxldGUsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbm9kZV9zdG9yYWdlLmMtMTY2LVxcbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYzoxNjc6XFx0LyogVGhpcyBoZWxwZXIgbXVzdCBvbmx5IGNhbGxlZCBmcm9tIHdoZXJlIHRoZSBpbm9kZSBpcyBndWFyYW50ZWVkXFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jLTE2OC1cXHQgKiB0byBoYXZlIGEgcmVmY291bnQgYW5kIGNhbm5vdCBiZSBmcmVlZC5cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYz0yNTE9dm9pZCBicGZfaW5zbl9hcnJheV9hZGp1c3RfYWZ0ZXJfcmVtb3ZlKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBvZmYsIHUzMiBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtMjY4LS8qXFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jOjI2OTogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBKSVRzLiBUaGUgaW1hZ2UgaXMgdGhlIHJlYWwgcHJvZ3JhbVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0yNzAtICogaW1hZ2UsIHRoZSBvZmZzZXRzIGFycmF5IHNldCB1cCB0aGUgeGxhdGVkIC1cXHUwMDNlIGppdHRlZCBtYXBwaW5nLlxcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jPTkzPXN0YXRpYyBzc2l6ZV90IGJwZl9zZXFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMjA4LVxcdH1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6MjA5OlxcdC8qIGJwZiBwcm9ncmFtIGNhbGxlZCBpZiAhcCAqL1xcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0yMTAtXFx0c2VxLVxcdTAwM2VvcC1cXHUwMDNlc3RvcChzZXEsIHApO1xcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jPTcyNz1CUEZfQ0FMTF80KGJwZl9sb29wLCB1MzIsIG5yX2xvb3BzLCB2b2lkICosIGNhbGxiYWNrX2ZuLCB2b2lkICosIGNhbGxiYWNrX2N0eCxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03MzMtXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjczNDpcXHQvKiBOb3RlOiB0aGVzZSBzYWZldHkgY2hlY2tzIGFyZSBhbHNvIHZlcmlmaWVkIHdoZW4gYnBmX2xvb3BcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzM1LVxcdCAqIGlzIGlubGluZWQsIGJlIGNhcmVmdWwgdG8gbW9kaWZ5IHRoaXMgY29kZSBpbiBzeW5jLiBTZWVcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz0zMDA9aW50IGJwZl9zZWxlbV91bmxpbmsoc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTM0Ni0gKiBVbmxpbmsgYW4gc2VsZW0gZnJvbSBtYXAgYW5kIGxvY2FsIHN0b3JhZ2Ugd2l0aCBsb2NrbGVzcyBmYWxsYmFjayBpZiBjYWxsZXJzXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjM0NzogKiBhcmUgcmFjaW5nIG9yIHJxc3BpbmxvY2sgcmV0dXJucyBlcnJvci4gSXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5XFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTM0OC0gKiBicGZfbG9jYWxfc3RvcmFnZV9kZXN0cm95KCkgb3IgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2ZyZWUoKS5cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jPTIyOD1icGZfbHNtX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0yODctXFxua2VybmVsL2JwZi9icGZfbHNtLmM6Mjg4Oi8qIFRoZSBzZXQgb2YgaG9va3Mgd2hpY2ggYXJlIGNhbGxlZCB3aXRob3V0IHBhZ2VmYXVsdHMgZGlzYWJsZWQgYW5kIGFyZSBhbGxvd2VkXFxua2VybmVsL2JwZi9icGZfbHNtLmMtMjg5LSAqIHRvIFxcXCJzbGVlcFxcXCIgYW5kIHRodXMgY2FuIGJlIHVzZWQgZm9yIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NzI2PXN0YXRpYyBsb25nIGJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTQxLVxcdC8qIEVycm9yIGR1cmluZyBzdF9vcHMtXFx1MDAzZXJlZygpLiBDYW4gaGFwcGVuIGlmIHRoaXMgc3RydWN0X29wcyBuZWVkcyB0byBiZVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo5NDI6XFx0ICogdmVyaWZpZWQgYXMgYSB3aG9sZSwgYWZ0ZXIgYWxsIGluaXRfbWVtYmVyKCkgY2FsbHMuIENhbiBhbHNvIGhhcHBlbiBpZlxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05NDMtXFx0ICogdGhlcmUgd2FzIGEgcmFjZSBpbiByZWdpc3RlcmluZyB0aGUgc3RydWN0X29wcyAodW5kZXIgdGhlIHNhbWUgbmFtZSkgdG9cXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xMDI3PXN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA0Ni1cXHQgKiBzZXRzb2Nrb3B0KFRDUF9DT05HRVNUSU9OLCBcXFwidGNwX2NjX3lcXFwiKS5cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA0NzpcXHQgKiBEdXJpbmcgdGhlIHN3aXRjaCwgIGJwZl9zdHJ1Y3Rfb3BzX3B1dCh0Y3BfY2NfeCkgaXMgY2FsbGVkXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNDgtXFx0ICogYW5kIGl0cyByZWZjb3VudCBtYXkgcmVhY2ggMCB3aGljaCB0aGVuIGZyZWUgaXRzXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTUyMj12b2lkIGJwZl9wcm9nX2Rpc2Fzc29jX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1NDAtICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBzdHJ1Y3Rfb3BzIHN0cnVjdCAoaS5lLiwga2RhdGEpIGFzc29jaWF0ZWQgd2l0aCBhXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE1NDE6ICogcHJvZ3JhbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIEJQRiBwcm9ncmFtIGNvbnRleHQgKGUuZy4sIGluIGEga2Z1bmMpLlxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTQyLSAqXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYz0xOTM9QlBGX0NBTExfMihicGZfdGFza19zdG9yYWdlX2RlbGV0ZSwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKixcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3Rhc2tfc3RvcmFnZS5jLTE5OS1cXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYzoyMDA6XFx0LyogVGhpcyBoZWxwZXIgbXVzdCBvbmx5IGJlIGNhbGxlZCBmcm9tIHBsYWNlcyB3aGVyZSB0aGUgbGlmZXRpbWUgb2YgdGhlIHRhc2tcXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYy0yMDEtXFx0ICogaXMgZ3VhcmFudGVlZC4gRWl0aGVyIGJ5IGJlaW5nIHJlZmNvdW50ZWQgb3IgYnkgYmVpbmcgcHJvdGVjdGVkXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTE3ODI9c3RhdGljIHZvaWQgYnRmX2ZyZWVfaWQoc3RydWN0IGJ0ZiAqYnRmKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0xNzk5LVxcdFxcdCAqIENsZWFyIHRoZSBpZCBoZXJlIHRvIG1ha2UgdGhpcyBmdW5jdGlvbiBpZGVtcG90ZW50LCBzaW5jZSBpdCB3aWxsIGdldFxcbmtlcm5lbC9icGYvYnRmLmM6MTgwMDpcXHRcXHQgKiBjYWxsZWQgYSBjb3VwbGUgb2YgdGltZXMgZm9yIG1vZHVsZSBCVEZzOiBvbiBtb2R1bGUgdW5sb2FkLCBhbmQgdGhlblxcbmtlcm5lbC9icGYvYnRmLmMtMTgwMS1cXHRcXHQgKiB0aGUgZmluYWwgYnRmX3B1dCgpLiBidGZfYWxsb2NfaWQoKSBzdGFydHMgSURzIHdpdGggMSwgc28gd2UgY2FuIHVzZVxcbi0tXFxua2VybmVsL2JwZi9idGYuYz0zOTc1PXN0YXRpYyBpbnQgYnRmX3BhcnNlX2twdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnRmX2ZpZWxkICpmaWVsZCxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtMzk5My1cXHRpZiAoaWQgPT0gLUVOT0VOVCkge1xcbmtlcm5lbC9icGYvYnRmLmM6Mzk5NDpcXHRcXHQvKiBidGZfcGFyc2Vfa3B0ciBzaG91bGQgb25seSBiZSBjYWxsZWQgdy8gYnRmID0gcHJvZ3JhbSBCVEYgKi9cXG5rZXJuZWwvYnBmL2J0Zi5jLTM5OTUtXFx0XFx0V0FSTl9PTl9PTkNFKGJ0Zl9pc19rZXJuZWwoYnRmKSk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTQwNDAtXFxua2VybmVsL2JwZi9idGYuYzo0MDQxOlxcdFxcdC8qIFdlIGFscmVhZHkgdmVyaWZpZWQgZHRvcl9mdW5jIHRvIGJlIGJ0Zl90eXBlX2lzX2Z1bmNcXG5rZXJuZWwvYnBmL2J0Zi5jLTQwNDItXFx0XFx0ICogaW4gcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzLlxcbi0tXFxua2VybmVsL2JwZi9idGYuYz03OTU2PXN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNzk4Mi1cXHRcXHQgKiByZXR1cm5zIHRvIHRoZSBrZXJuZWwsIHdoaWNoIGhhcyBubyBhcmVuYSB0byBjYXN0IHRoZSBhZGRyZXNzXFxua2VybmVsL2JwZi9idGYuYzo3OTgzOlxcdFxcdCAqIGJhY2sgaW50by4gQSBsb2NhbCBmdW5jdGlvbiBpcyB2ZXJpZmllZCBpbmxpbmUsIHNvIGl0cyBjYWxsZXJcXG5rZXJuZWwvYnBmL2J0Zi5jLTc5ODQtXFx0XFx0ICogcmVjZWl2ZXMgdGhlIHJlYWwgcmVnaXN0ZXIgc3RhdGUgYW5kIGFueSBtZW1iZXIgaXMgZmluZS5cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODUyMD1zdGF0aWMgaW50IGJ0Zl9tb2R1bGVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgb3AsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTg2MTQtXFx0XFx0XFx0ICogYnRmX3RyeV9nZXRfbW9kdWxlKCkgb24gc3VjaCBCVEZzIHdpbGwgZmFpbC4gVGhpcyBtYXlcXG5rZXJuZWwvYnBmL2J0Zi5jOjg2MTU6XFx0XFx0XFx0ICogYmUgY2FsbGVkIGFnYWluIG9uIGJ0Zl9wdXQoKSwgYnV0IGl0J3Mgb2sgdG8gZG8gc28uXFxua2VybmVsL2JwZi9idGYuYy04NjE2LVxcdFxcdFxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz04OTE5PXN0YXRpYyBpbnQgYnRmX3BvcHVsYXRlX2tmdW5jX3NldChzdHJ1Y3QgYnRmICpidGYsIGVudW0gYnRmX2tmdW5jX2hvb2sgaG9vayxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODk2NS1cXHRzZXQgPSB0YWItXFx1MDAzZXNldHNbaG9va107XFxua2VybmVsL2JwZi9idGYuYzo4OTY2OlxcdC8qIFdhcm4gd2hlbiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0IGlzIGNhbGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgaG9va1xcbmtlcm5lbC9icGYvYnRmLmMtODk2Ny1cXHQgKiBmb3IgbW9kdWxlIHNldHMuXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jPTY4PXN0YXRpYyB2b2lkIG1hcmtfc3VicHJvZ19taWdodF90aHJvdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmKVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYy03Ny0gKiAndycgaXMgYSBjYWxsZWUgZW50cnkgcG9pbnQuXFxua2VybmVsL2JwZi9jZmcuYzo3ODogKiBFdmVudHVhbGx5IHRoaXMgZnVuY3Rpb24gd291bGQgYmUgY2FsbGVkIHdoZW4gZW52LVxcdTAwM2VjZmcuaW5zbl9zdGF0ZVt3XSA9PSBFWFBMT1JFRC5cXG5rZXJuZWwvYnBmL2NmZy5jLTc5LSAqIFJlbHkgb24gREZTIHRyYXZlcnNhbCBvcmRlciBhbmQgYWJzZW5jZSBvZiByZWN1cnNpdmUgY2FsbHMgdG8gZ3VhcmFudGVlIHRoYXRcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmM9NDUxPXN0YXRpYyBpbnQgdmlzaXRfaW5zbihpbnQgdCwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNDg1LVxcdFxcdC8qIEZvciBmdW5jdGlvbnMgdGhhdCBpbnZva2UgY2FsbGJhY2tzIGl0IGlzIG5vdCBrbm93biBob3cgbWFueSB0aW1lc1xcbmtlcm5lbC9icGYvY2ZnLmM6NDg2OlxcdFxcdCAqIGNhbGxiYWNrIHdvdWxkIGJlIGNhbGxlZC4gVmVyaWZpZXIgbW9kZWxzIGNhbGxiYWNrIGNhbGxpbmcgZnVuY3Rpb25zXFxua2VybmVsL2JwZi9jZmcuYy00ODctXFx0XFx0ICogYnkgcmVwZWF0ZWRseSB2aXNpdGluZyBjYWxsYmFjayBib2RpZXMgYW5kIHJldHVybmluZyB0byBvcmlnaW4gY2FsbFxcbi0tXFxua2VybmVsL2JwZi9jZmcuYy01MDMtXFx0XFx0XFx0cmV0ID0gYnBmX2dldF9oZWxwZXJfcHJvdG8oZW52LCBpbnNuLVxcdTAwM2VpbW0sIFxcdTAwMjZmcCk7XFxua2VybmVsL2JwZi9jZmcuYzo1MDQ6XFx0XFx0XFx0LyogSWYgY2FsbGVkIGluIGEgbm9uLXNsZWVwYWJsZSBjb250ZXh0IHByb2dyYW0gd2lsbCBiZVxcbmtlcm5lbC9icGYvY2ZnLmMtNTA1LVxcdFxcdFxcdCAqIHJlamVjdGVkIGFueXdheSwgc28gd2Ugc2hvdWxkIGVuZCB1cCB3aXRoIHByZWNpc2VcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNTM2LVxcdFxcdFxcdH1cXG5rZXJuZWwvYnBmL2NmZy5jOjUzNzpcXHRcXHRcXHQvKiBTYW1lIGFzIGhlbHBlcnMsIGlmIGNhbGxlZCBpbiBhIG5vbi1zbGVlcGFibGUgY29udGV4dFxcbmtlcm5lbC9icGYvY2ZnLmMtNTM4LVxcdFxcdFxcdCAqIHByb2dyYW0gd2lsbCBiZSByZWplY3RlZCBhbnl3YXksIHNvIHdlIHNob3VsZCBlbmQgdXBcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDMtICogRXhhY3RseSBvbmUgb2YgQHByb2cgb3IgQGxpbmsgY2FuIGJlIG5vbi1udWxsLlxcbmtlcm5lbC9icGYvY2dyb3VwLmM6ODA0OiAqIE11c3QgYmUgY2FsbGVkIHdpdGggY2dyb3VwX211dGV4IGhlbGQuXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwMjk9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNTAtICpcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNTE6ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC5cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNTItICovXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExNTY9c3RhdGljIHZvaWQgcHVyZ2VfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE5NC0gKiBBdCBtb3N0IG9uZSBvZiBAcHJvZyBvciBAbGluayBjYW4gYmUgbm9uLU5VTEwuXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTk1OiAqIE11c3QgYmUgY2FsbGVkIHdpdGggY2dyb3VwX211dGV4IGhlbGQuXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTk2LSAqL1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMjYwPXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9kZXRhY2goc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjcwLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTI3MTovKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNncm91cF9tdXRleCBoZWxkIHRvIGF2b2lkIHJhY2VzLiAqL1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI3Mi1zdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9xdWVyeShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MjIzND1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdF9rZXJuKHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMjU0LVxcdCAqIEhlcmUgd2UgYWx3YXlzIHBhc3MgdGhlIGRhdGEgYW5kIG1lbXNldCgpIHNob3VsZFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjI1NTpcXHQgKiBiZSBjYWxsZWQgaWYgdGhhdCBkYXRhIHNob3VsZG4ndCBiZSBcXFwiZXhwb3J0ZWRcXFwiLlxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjI1Ni1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0zMC0gKlxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzozMTogKiBOb3RlOiB0aGUgaXRlcl9wcm9nIGlzIGNhbGxlZCB3aXRoIGNncm91cF9tdXRleCBoZWxkLlxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0zMi0gKlxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYz0zMT1zdGF0aWMgaW50IHByZXBhcmVfYnRmX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMTE2LVxcdFxcdGlmICh1bmxpa2VseSghZnVuY19wcm90byB8fCAhYnRmX3R5cGVfaXNfZnVuY19wcm90byhmdW5jX3Byb3RvKSkpXFxua2VybmVsL2JwZi9jaGVja19idGYuYzoxMTc6XFx0XFx0XFx0LyogYnRmX2Z1bmNfY2hlY2soKSBhbHJlYWR5IHZlcmlmaWVkIGl0IGR1cmluZyBCVEYgbG9hZCAqL1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMTE4LVxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0xMjQzPWludCBicGZfaml0X2JpbmFyeV9wYWNrX2ZpbmFsaXplKHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqcm9faGVhZGVyLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTI1OC1cXG5rZXJuZWwvYnBmL2NvcmUuYzoxMjU5Oi8qIGJwZl9qaXRfYmluYXJ5X3BhY2tfZnJlZSBpcyBjYWxsZWQgaW4gdHdvIGRpZmZlcmVudCBzY2VuYXJpb3M6XFxua2VybmVsL2JwZi9jb3JlLmMtMTI2MC0gKiAgIDEpIHdoZW4gdGhlIHByb2dyYW0gaXMgZnJlZWQgYWZ0ZXI7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yOTk3PWludCBicGZfcHJvZ19hcnJheV9jb3B5X2luZm8oc3RydWN0IGJwZl9wcm9nX2FycmF5ICphcnJheSxcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTMwMTEtXFxua2VybmVsL2JwZi9jb3JlLmM6MzAxMjpcXHQvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB1bmRlciB0cmFjZS9icGZfdHJhY2UuYzogYnBmX2V2ZW50X211dGV4ICovXFxua2VybmVsL2JwZi9jb3JlLmMtMzAxMy1cXHRyZXR1cm4gYnBmX3Byb2dfYXJyYXlfY29weV9jb3JlKGFycmF5LCBwcm9nX2lkcywgcmVxdWVzdF9jbnQpID8gLUVOT1NQQ1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzEyMz1CUEZfQ0FMTF8wKGJwZl91c2VyX3JuZF91MzIpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMTI2LVxcdCAqIG9mIHRoZSByZWdpc3RlcnMgcGFzc2VkIGludG8gdGhpcyBmdW5jdGlvbiwgdGhlbiBub3RlIHRoYXRcXG5rZXJuZWwvYnBmL2NvcmUuYzozMTI3OlxcdCAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gbmF0aXZlIGVCUEYgYW5kIGNsYXNzaWMtdG8tZUJQRlxcbmtlcm5lbC9icGYvY29yZS5jLTMxMjgtXFx0ICogdHJhbnNmb3JtYXRpb25zLiBSZWdpc3RlciBhc3NpZ25tZW50cyBmcm9tIGJvdGggc2lkZXMgYXJlXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTM3OD1zdGF0aWMgdm9pZCBicV94bWl0X2FsbChzdHJ1Y3QgeGRwX2Rldl9idWxrX3F1ZXVlICpicSwgdTMyIGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYy00MjItXFxua2VybmVsL2JwZi9kZXZtYXAuYzo0MjM6LyogX19kZXZfZmx1c2ggaXMgY2FsbGVkIGZyb20geGRwX2RvX2ZsdXNoKCkgd2hpY2ggX211c3RfIGJlIHNpZ25hbGxlZCBmcm9tIHRoZVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtNDI0LSAqIGRyaXZlciBiZWZvcmUgcmV0dXJuaW5nIGZyb20gaXRzIG5hcGktXFx1MDAzZXBvbGwoKSByb3V0aW5lLiBTZWUgdGhlIGNvbW1lbnQgYWJvdmVcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9OTQ5PXN0YXRpYyBsb25nIF9fZGV2X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTk2My1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjk2NDpcXHQvKiBhbHJlYWR5IHZlcmlmaWVkIHZhbHVlX3NpemUgXFx1MDAzYz0gc2l6ZW9mIHZhbCAqL1xcbmtlcm5lbC9icGYvZGV2bWFwLmMtOTY1LVxcdG1lbWNweShcXHUwMDI2dmFsLCB2YWx1ZSwgbWFwLVxcdTAwM2V2YWx1ZV9zaXplKTtcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9OTk4PXN0YXRpYyBsb25nIF9fZGV2X21hcF9oYXNoX3VwZGF0ZV9lbGVtKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtMTAwNy1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjEwMDg6XFx0LyogYWxyZWFkeSB2ZXJpZmllZCB2YWx1ZV9zaXplIFxcdTAwM2M9IHNpemVvZiB2YWwgKi9cXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTEwMDktXFx0bWVtY3B5KFxcdTAwMjZ2YWwsIHZhbHVlLCBtYXAtXFx1MDAzZXZhbHVlX3NpemUpO1xcbi0tXFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmMtMTMtICogdGhlcmUgaXMgYXZhaWxhYmxlIHJvb20gaW4gdGhlIGRpc3BhdGNoZXIgYSBkaXJlY3QgY2FsbCB0byB0aGUgQlBGXFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM6MTQ6ICogcHJvZ3JhbSB3aWxsIGJlIGdlbmVyYXRlZC4gQWxsIGNhbGxzIHRvIHRoZSBCUEYgcHJvZ3JhbXMgY2FsbGVkIHZpYVxcbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jLTE1LSAqIHRoZSBkaXNwYXRjaGVyIHdpbGwgdGhlbiBiZSBhIGRpcmVjdCBjYWxsLCBpbnN0ZWFkIG9mIGFuXFxuLS1cXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmM9OT1zdHJ1Y3QgZG1hYnVmX2l0ZXJfcHJpdiB7XFxuLS1cXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmMtMTItXFx0ICogcHJldmVudCBkZXN0cnVjdGlvbiBiZXR3ZWVuIHN0b3Avc3RhcnQuIElmIHJlYWRpbmcgaXMgbm90IHJlc3VtZWQgYW5kXFxua2VybmVsL2JwZi9kbWFidWZfaXRlci5jOjEzOlxcdCAqIHN0YXJ0IGlzIG5ldmVyIGNhbGxlZCBhZ2FpbiwgdGhlbiBkbWFidWZfaXRlcl9zZXFfZmluaSBkcm9wcyB0aGVcXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmMtMTQtXFx0ICogcmVmZXJlbmNlIHdoZW4gdGhlIGl0ZXJhdG9yIGlzIHJlbGVhc2VkLlxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjczPXN0YXRpYyB2b2lkIGh0YWJfZnJlZV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTUtICogYnBmX2xydV9saXN0LmMgbG9naWMuIEZvciBleGFtcGxlLCBjZXJ0YWluIGNvZGUgcGF0aCBvZlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NjogKiBicGZfbHJ1X3BvcF9mcmVlKCksIHdoaWNoIGlzIGNhbGxlZCBieSBmdW5jdGlvbiBwcmVhbGxvY19scnVfcG9wKCksXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk3LSAqIHdpbGwgYWNxdWlyZSBscnVfbG9jayBmaXJzdCBmb2xsb3dlZCBieSBhY3F1aXJpbmcgYnVja2V0X2xvY2suXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz02ODk9c3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqc2VsZWN0X2J1Y2tldChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHUzMiBoYXNoKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNjkzLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjY5NDovKiB0aGlzIGxvb2t1cCBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQgd2l0aCBidWNrZXQgbG9jayB0YWtlbiAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTY5NS1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTcwNy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo3MDg6LyogY2FuIGJlIGNhbGxlZCB3aXRob3V0IGJ1Y2tldCBsb2NrLiBpdCB3aWxsIHJlcGVhdCB0aGUgbG9vcCBpblxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTcwOS0gKiB0aGUgdW5saWtlbHkgZXZlbnQgd2hlbiBlbGVtZW50cyBtb3ZlZCBmcm9tIG9uZSBidWNrZXQgaW50byBhbm90aGVyXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz04NDA9c3RhdGljIHZvaWQgY2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtODU4LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjg1OTovKiBJdCBpcyBjYWxsZWQgZnJvbSB0aGUgYnBmX2xydV9saXN0IHdoZW4gdGhlIExSVSBuZWVkcyB0byBkZWxldGVcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04NjAtICogb2xkZXIgZWxlbWVudHMgZnJvbSB0aGUgaHRhYi5cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTE1NzE9c3RhdGljIHZvaWQgZGVsZXRlX2FsbF9lbGVtZW50cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNTc0LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjE1NzU6XFx0LyogSXQncyBjYWxsZWQgZnJvbSBhIHdvcmtlciB0aHJlYWQgYW5kIG1pZ3JhdGlvbiBoYXMgYmVlbiBkaXNhYmxlZCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNTc2LVxcdCAqIHRoZXJlZm9yZSwgaXQgaXMgT0sgdG8gaW52b2tlIGJwZl9tZW1fY2FjaGVfZnJlZSgpIGRpcmVjdGx5Llxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MTYyNj1zdGF0aWMgdm9pZCBodGFiX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNjMwLVxcdC8qIGJwZl9mcmVlX3VzZWRfbWFwcygpIG9yIGNsb3NlKG1hcF9mZCkgd2lsbCB0cmlnZ2VyIHRoaXMgbWFwX2ZyZWUgY2FsbGJhY2suXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTYzMTpcXHQgKiBicGZfZnJlZV91c2VkX21hcHMoKSBpcyBjYWxsZWQgYWZ0ZXIgYnBmIHByb2cgaXMgbm8gbG9uZ2VyIGV4ZWN1dGluZy5cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNjMyLVxcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gc3luY2hyb25pemVfcmN1KCkgaGVyZSB0byBwcm90ZWN0IG1hcCBlbGVtZW50cy5cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI2MTA9c3RhdGljIHZvaWQgZmRfaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjYzMC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNjMxOi8qIG9ubHkgY2FsbGVkIGZyb20gc3lzY2FsbCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI2MzItaW50IGJwZl9mZF9odGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiAqdmFsdWUpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjUwLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI2NTE6LyogT25seSBjYWxsZWQgZnJvbSBzeXNjYWxsICovXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY1Mi1pbnQgYnBmX2ZkX2h0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTc5Nz12b2lkIGJwZl9icHJpbnRmX2NsZWFudXAoc3RydWN0IGJwZl9icHJpbnRmX2RhdGEgKmRhdGEpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy04MTUtICogSW4gYXJndW1lbnQgcHJlcGFyYXRpb24gbW9kZSwgaWYgMCBpcyByZXR1cm5lZCwgc2FmZSB0ZW1wb3JhcnkgYnVmZmVycyBhcmVcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo4MTY6ICogYWxsb2NhdGVkIGFuZCBicGZfYnByaW50Zl9jbGVhbnVwIHNob3VsZCBiZSBjYWxsZWQgdG8gZnJlZSB0aGVtIGFmdGVyIHVzZS5cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy04MTctICovXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xMzE3PXN0YXRpYyBpbnQgX19icGZfYXN5bmNfaW5pdChzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4gKmFzeW5jLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgZmxhZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xMzc3LVxcdCAqIHdoZW4gdGhlcmUgYXJlIGNvbmN1cnJlbnQgdXJlZiByZWxlYXNlIGFuZCBicGYgdGltZXIgaW5pdCwgZWl0aGVyXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MTM3ODpcXHQgKiBicGZfdGltZXJfY2FuY2VsX2FuZF9mcmVlKCkgY2FsbGVkIGJ5IHVyZWYgcmVsZWFzZSByZWFkcyBhIG5vLU5VTExcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xMzc5LVxcdCAqIHRpbWVyIG9yIGF0b21pYzY0X3JlYWQoKSBiZWxvdyByZXR1cm5zIGEgemVybyB1c2VyY250Llxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MTY4Mz1zdGF0aWMgdm9pZCBicGZfYXN5bmNfY2FuY2VsX2FuZF9mcmVlKHN0cnVjdCBicGZfYXN5bmNfa2VybiAqYXN5bmMpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzEzLS8qXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MTcxNDogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBtYXBfZGVsZXRlL3VwZGF0ZV9lbGVtIGZvciBpbmRpdmlkdWFsIGVsZW1lbnQgYW5kXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTcxNS0gKiBieSBvcHMtXFx1MDAzZW1hcF9yZWxlYXNlX3VyZWYgd2hlbiB0aGUgdXNlciBzcGFjZSByZWZlcmVuY2UgdG8gYSBtYXAgcmVhY2hlcyB6ZXJvLlxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MTcxNz12b2lkIGJwZl90aW1lcl9jYW5jZWxfYW5kX2ZyZWUodm9pZCAqdmFsKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTcyMi0vKlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjE3MjM6ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgbWFwX2RlbGV0ZS91cGRhdGVfZWxlbSBmb3IgaW5kaXZpZHVhbCBlbGVtZW50IGFuZFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTE3MjQtICogYnkgb3BzLVxcdTAwM2VtYXBfcmVsZWFzZV91cmVmIHdoZW4gdGhlIHVzZXIgc3BhY2UgcmVmZXJlbmNlIHRvIGEgbWFwIHJlYWNoZXMgemVyby5cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTIyNDc9dm9pZCBicGZfbGlzdF9oZWFkX2ZyZWUoY29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZmllbGQsIHZvaWQgKmxpc3RfaGVhZCxcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTIyNTctXFx0ICogdG9vIGxvbmcsIGFuZCBhbHNvIHByZXZlbnQgZGVhZGxvY2tzIGlmIHRyYWNpbmcgcHJvZ3JhbXMgZW5kIHVwXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjI1ODpcXHQgKiBleGVjdXRpbmcgb24gZW50cnkvZXhpdCBvZiBmdW5jdGlvbnMgY2FsbGVkIGluc2lkZSB0aGUgY3JpdGljYWxcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMjU5LVxcdCAqIHNlY3Rpb24sIGFuZCBlbmQgdXAgZG9pbmcgbWFwIG9wcyB0aGF0IGNhbGwgYnBmX2xpc3RfaGVhZF9mcmVlIGZvclxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjM4OD1fX2JwZl9rZnVuYyB2b2lkICpicGZfcGVyY3B1X29ial9uZXdfaW1wbCh1NjQgbG9jYWxfdHlwZV9pZF9faywgdm9pZCAqbWV0YV9faWduKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjM5Mi1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyMzkzOi8qIE11c3QgYmUgY2FsbGVkIHVuZGVyIG1pZ3JhdGVfZGlzYWJsZSgpLCBhcyByZXF1aXJlZCBieSBicGZfbWVtX2ZyZWUgKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMzk0LXZvaWQgX19icGZfb2JqX2Ryb3BfaW1wbCh2b2lkICpwLCBjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCBib29sIHBlcmNwdSlcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTI0ODY9c3RhdGljIGludCBfX2JwZl9saXN0X2FkZChzdHJ1Y3QgYnBmX2xpc3Rfbm9kZV9rZXJuICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ5NC1cXHQvKiBJZiBsaXN0X2hlYWQgd2FzIDAtaW5pdGlhbGl6ZWQgYnkgbWFwLCBicGZfb2JqX2luaXRfZmllbGQgd2Fzbid0XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ5NTpcXHQgKiBjYWxsZWQgb24gaXRzIGZpZWxkcywgc28gaW5pdCBoZXJlXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ5Ni1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI1MjEtZmFpbDpcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNTIyOlxcdC8qIE9ubHkgY2FsbGVkIGZyb20gQlBGIHByb2csIG5vIG5lZWQgdG8gbWlncmF0ZV9kaXNhYmxlICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjUyMy1cXHRfX2JwZl9vYmpfZHJvcF9pbXBsKCh2b2lkICopbiAtIG9mZiwgcmVjLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yNTk3PXN0YXRpYyBzdHJ1Y3QgYnBmX2xpc3Rfbm9kZSAqX19icGZfbGlzdF9kZWwoc3RydWN0IGJwZl9saXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNjAzLVxcdC8qIElmIGxpc3RfaGVhZCB3YXMgMC1pbml0aWFsaXplZCBieSBtYXAsIGJwZl9vYmpfaW5pdF9maWVsZCB3YXNuJ3RcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNjA0OlxcdCAqIGNhbGxlZCBvbiBpdHMgZmllbGRzLCBzbyBpbml0IGhlcmVcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNjA1LVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjY5MD1fX2JwZl9rZnVuYyBib29sIGJwZl9saXN0X2VtcHR5KHN0cnVjdCBicGZfbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjY5NC1cXHQvKiBJZiBsaXN0X2hlYWQgd2FzIDAtaW5pdGlhbGl6ZWQgYnkgbWFwLCBicGZfb2JqX2luaXRfZmllbGQgd2Fzbid0XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjY5NTpcXHQgKiBjYWxsZWQgb24gaXRzIGZpZWxkcywgc28gaW5pdCBoZXJlXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjY5Ni1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTI3MjU9c3RhdGljIGludCBfX2JwZl9yYnRyZWVfYWRkKHN0cnVjdCBicGZfcmJfcm9vdCAqcm9vdCxcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI3MzctXFx0aWYgKGNtcHhjaGcoXFx1MDAyNm5vZGUtXFx1MDAzZW93bmVyLCBOVUxMLCBCUEZfUFRSX1BPSVNPTikpIHtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNzM4OlxcdFxcdC8qIE9ubHkgY2FsbGVkIGZyb20gQlBGIHByb2csIG5vIG5lZWQgdG8gbWlncmF0ZV9kaXNhYmxlICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjczOS1cXHRcXHRfX2JwZl9vYmpfZHJvcF9pbXBsKCh2b2lkICopbiAtIG9mZiwgcmVjLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00MzE4PV9fYnBmX2tmdW5jIGludCBicGZfdmVyaWZ5X3BrY3M3X3NpZ25hdHVyZShjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZGF0YV9wLFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDMzNC1cXHRcXHQgKiBBIGNhbGwgdG8ga2V5X3Rhc2tfcGVybWlzc2lvbigpIGhlcmUgd291bGQgYmUgcmVkdW5kYW50LCBhc1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQzMzU6XFx0XFx0ICogaXQgaXMgYWxyZWFkeSBkb25lIGJ5IGtleXJpbmdfc2VhcmNoKCkgY2FsbGVkIGJ5XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDMzNi1cXHRcXHQgKiBmaW5kX2FzeW1tZXRyaWNfa2V5KCkuXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NjIwPXN0YXRpYyB2b2lkIGRyYWluX21lbV9jYWNoZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy02MjMtXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjYyNDpcXHQvKiBObyBwcm9ncyBhcmUgdXNpbmcgdGhpcyBicGZfbWVtX2NhY2hlLCBidXQgaHRhYl9tYXBfZnJlZSgpIGNhbGxlZFxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy02MjUtXFx0ICogYnBmX21lbV9jYWNoZV9mcmVlKCkgZm9yIGFsbCByZW1haW5pbmcgZWxlbWVudHMgYW5kIHRoZXkgY2FuIGJlIGluXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9Nzc2PXN0YXRpYyB2b2lkIG5vdHJhY2UgKnVuaXRfYWxsb2Moc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtODE2LSAqIGFkZCBpdCB0byB0aGUgZnJlZV9sbGlzdCBvZiB0aGUgY3VycmVudCBjcHUuXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjgxNzogKiBMZXQga2ZyZWUoKSBsb2dpYyBkZWFsIHdpdGggaXQgd2hlbiBpdCdzIGxhdGVyIGNhbGxlZCBmcm9tIGlycV93b3JrLlxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy04MTgtICovXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz00MT1zdGF0aWMgdm9pZCBuZXRuc19icGZfYXR0YWNoX3R5cGVfbmVlZChlbnVtIG5ldG5zX2JwZl9hdHRhY2hfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNTMtXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6NTQ6LyogTXVzdCBiZSBjYWxsZWQgd2l0aCBuZXRuc19icGZfbXV0ZXggaGVsZC4gKi9cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy01NS1zdGF0aWMgdm9pZCBuZXRuc19icGZfcnVuX2FycmF5X2RldGFjaChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yMzA9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX25ldG5zX2xpbmtfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjM4LVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjIzOTovKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG5ldG5zX2JwZl9tdXRleCBoZWxkLiAqL1xcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTI0MC1zdGF0aWMgaW50IF9fbmV0bnNfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yOTE9aW50IG5ldG5zX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMzU2LVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjM1NzovKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG5ldG5zX2JwZl9tdXRleCBoZWxkLiAqL1xcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTM1OC1zdGF0aWMgaW50IF9fbmV0bnNfYnBmX3Byb2dfZGV0YWNoKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTQ0LSAqIFRoZSBiYXNpYyBwcmluY2lwbGUgb2YgYSBxdWV1ZS1iYXNlZCBzcGlubG9jayBjYW4gYmVzdCBiZSB1bmRlcnN0b29kXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NDU6ICogYnkgc3R1ZHlpbmcgYSBjbGFzc2ljIHF1ZXVlLWJhc2VkIHNwaW5sb2NrIGltcGxlbWVudGF0aW9uIGNhbGxlZCB0aGVcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy00Ni0gKiBNQ1MgbG9jay4gQSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBNQ1MgbG9jayBwYXBlciAoXFxcIkFsZ29yaXRobXMgZm9yIFNjYWxhYmxlXFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz0yNjE9aW50IF9fbG9ja2Z1bmMgcmVzaWxpZW50X3Rhc19zcGluX2xvY2socnFzcGlubG9ja190ICpsb2NrKVxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMjY3LVxcdC8qXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6MjY4OlxcdCAqIFdlIGFyZSBlaXRoZXIgY2FsbGVkIGRpcmVjdGx5IGZyb20gcmVzX3NwaW5fbG9jayBhZnRlciBncmFiYmluZyB0aGVcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yNjktXFx0ICogZGVhZGxvY2sgZGV0ZWN0aW9uIGVudHJ5IHdoZW4gcXVldWVkIHNwaW5sb2NrcyBhcmUgZGlzYWJsZWQsIG9yIGZyb21cXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTg1PXN0YXRpYyBpbnQgbWF5YmVfZXhpdF9zY2Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE5Ny1cXHRcXHQgKiB0cmF2ZXJzYWwgc3RvcHMgd2hlbjpcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE5ODpcXHRcXHQgKiBhLiBWZXJpZmljYXRpb24gZXJyb3IgaXMgZm91bmQsIG1heWJlX2V4aXRfc2NjKCkgaXMgbm90IGNhbGxlZC5cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE5OS1cXHRcXHQgKiBiLiBUb3AgbGV2ZWwgQlBGX0VYSVQgaXMgcmVhY2hlZC4gVG9wIGxldmVsIEJQRl9FWElUIGlzIG5vdCBhIG1lbWJlclxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz04Njk9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTIzLSAqXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5MjQ6ICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB2ZXJpZmllciBleHBsb3JpbmcgZGlmZmVyZW50IGJyYW5jaGVzIG9mXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05MjUtICogZXhlY3V0aW9uIHBvcHBlZCBmcm9tIHRoZSBzdGF0ZSBzdGFjay4gSWYgaXQgc2VlcyBhbiBvbGQgc3RhdGUgdGhhdCBoYXNcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzOT1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDUwLVxcdFxcdFxcdCAqXFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDUxOlxcdFxcdFxcdCAqIC0gV2hlbiBhIHZlcmlmaWNhdGlvbiBwYXRoIHRlcm1pbmF0ZXMsIGBtYXliZV9leGl0X3NjYygpYCBpcyBjYWxsZWRcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NTItXFx0XFx0XFx0ICogICBmcm9tIGBicGZfdXBkYXRlX2JyYW5jaF9jb3VudHMoKWAuIEZvciBzdGF0ZXMgd2l0aCBgYnJhbmNoZXMgPT0gMGAsIGl0XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NTUtXFx0XFx0XFx0ICogICB0aGlzIFNDQyB2aXNpdCBoYXZlIGJlZW4gZXhwbG9yZWQuIGBwcm9wYWdhdGVfYmFja2VkZ2VzKClgIGlzIHRoZW5cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0NTY6XFx0XFx0XFx0ICogICBjYWxsZWQsIHdoaWNoIHByb3BhZ2F0ZXMgcmVhZCBhbmQgcHJlY2lzaW9uIG1hcmtzIHRocm91Z2ggdGhlXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDU3LVxcdFxcdFxcdCAqICAgYmFja2VkZ2VzIHVudGlsIGEgZml4ZWQgcG9pbnQgaXMgcmVhY2hlZC5cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTg4NT1zdGF0aWMgdm9pZCBicGZfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTkxNC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo5MTU6LyogY2FsbGVkIGZyb20gd29ya3F1ZXVlICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTE2LXN0YXRpYyB2b2lkIGJwZl9tYXBfZnJlZV9kZWZlcnJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz05NTE9dm9pZCBicGZfbWFwX3B1dChzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTUzLVxcdGlmIChhdG9taWM2NF9kZWNfYW5kX3Rlc3QoXFx1MDAyNm1hcC1cXHUwMDNlcmVmY250KSkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjk1NDpcXHRcXHQvKiBicGZfbWFwX2ZyZWVfaWQoKSBtdXN0IGJlIGNhbGxlZCBmaXJzdCAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTk1NS1cXHRcXHRicGZfbWFwX2ZyZWVfaWQobWFwKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEwNTI9c3RhdGljIHNzaXplX3QgYnBmX2R1bW15X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTA2MC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMDYxOi8qIGNhbGxlZCBmb3IgYW55IGV4dHJhIG1lbW9yeS1tYXBwZWQgcmVnaW9ucyAoZXhjZXB0IGluaXRpYWwpICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTA2Mi1zdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwNjktXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA3MDovKiBjYWxsZWQgZm9yIGFsbCB1bm1hcHBlZCBtZW1vcnkgcmVnaW9uIChpbmNsdWRpbmcgaW5pdGlhbCkgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDcxLXN0YXRpYyB2b2lkIGJwZl9tYXBfbW1hcF9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyNTU9c3RhdGljIGludCBtYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTM4MC0jZGVmaW5lIEJQRl9NQVBfQ1JFQVRFX0xBU1RfRklFTEQgZXhjbF9wcm9nX2hhc2hfc2l6ZVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzODE6LyogY2FsbGVkIHZpYSBzeXNjYWxsICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTM4Mi1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjU2Mj1zdGF0aWMgdm9pZCBicGZfcHJvZ19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjU3OC1cXHRcXHQgICBcXFwicmVjdXJzaW9uX21pc3NlczpcXFxcdCVsbHVcXFxcblxcXCJcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNTc5OlxcdFxcdCAgIFxcXCJ2ZXJpZmllZF9pbnNuczpcXFxcdCV1XFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI1ODAtXFx0XFx0ICAgcHJvZy1cXHUwMDNldHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI1ODctXFx0XFx0ICAgc3RhdHMubWlzc2VzLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI1ODg6XFx0XFx0ICAgcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2V2ZXJpZmllZF9pbnNucyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjU4OS19XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zMzExPXN0YXRpYyBib29sIGJwZl9saW5rX2lzX3RyYWNlcG9pbnQoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzMyMi1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMzIzOi8qIGJwZl9saW5rX2ZyZWUgaXMgZ3VhcmFudGVlZCB0byBiZSBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzI0LXN0YXRpYyB2b2lkIGJwZl9saW5rX2ZyZWUoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzM2MD1zdGF0aWMgdm9pZCBicGZfbGlua19wdXRfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzM2Ni1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMzY3Oi8qIGJwZl9saW5rX3B1dCBtaWdodCBiZSBjYWxsZWQgZnJvbSBhdG9taWMgY29udGV4dC4gSXQgbmVlZHMgdG8gYmUgY2FsbGVkXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzM2OC0gKiBmcm9tIHNsZWVwYWJsZSBjb250ZXh0IGluIG9yZGVyIHRvIGFjcXVpcmUgc2xlZXBpbmcgbG9ja3MgZHVyaW5nIHRoZSBwcm9jZXNzLlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzYzND1zdGF0aWMgaW50IGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3MjctXFx0ICpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzI4OlxcdCAqIC0gaWYgdGd0X3Byb2cgPT0gTlVMTCB3aGVuIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZCB1c2luZyB0aGUgb2xkXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzcyOS1cXHQgKiAgIHJhd190cmFjZXBvaW50X29wZW4gQVBJLCBhbmQgd2UgbmVlZCBhIHRhcmdldCBmcm9tIHByb2ctXFx1MDAzZWF1eFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTA5OT1zdGF0aWMgaW50IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTE1OC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1MTU5OlxcdGluZm8udmVyaWZpZWRfaW5zbnMgPSBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXZlcmlmaWVkX2luc25zO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxNjAtXFx0aWYgKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYnRmKVxcbi0tXFxua2VybmVsL2JwZi90bnVtLmM9MjY4PXN0cnVjdCB0bnVtIHRudW1fYnN3YXA2NChzdHJ1Y3QgdG51bSBhKVxcbi0tXFxua2VybmVsL2JwZi90bnVtLmMtMjgyLSAqXFxua2VybmVsL2JwZi90bnVtLmM6MjgzOiAqIE5vdGU6IGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggeiBcXHUwMDNlPSB0bWF4LCBpdCBqdXN0IHJldHVybnNcXG5rZXJuZWwvYnBmL3RudW0uYzoyODQ6ICogZWFybHkgd2l0aCB0bWF4OyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHogXFx1MDAzYyB0bWluLCB0aGVcXG5rZXJuZWwvYnBmL3RudW0uYy0yODUtICogYWxnb3JpdGhtIGFscmVhZHkgcmV0dXJucyB0bWluLlxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTg9c3RhdGljIGludCBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXAsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDgtXFx0aWYgKGNtZCA9PSBGVFJBQ0VfT1BTX0NNRF9FTkFCTEVfU0hBUkVfSVBNT0RJRllfU0VMRikge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwOTpcXHRcXHQvKiBUaGlzIGlzIGNhbGxlZCBpbnNpZGUgcmVnaXN0ZXJfZnRyYWNlX2RpcmVjdF9tdWx0aSgpLCBzb1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExMC1cXHRcXHQgKiB0cmFtcG9saW5lJ3MgbXV0ZXggaXMgYWxyZWFkeSBsb2NrZWQuXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMzMtXFx0ICpcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMzQ6XFx0ICogVGhlIGZvbGxvd2luZyB0d28gY29tbWFuZHMgYXJlIGNhbGxlZCBmcm9tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTM1LVxcdCAqXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjMzPXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM3LVxcdCAqIFdoZW4gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKCkgZmFpbHMgYmVmb3JlIG1vZGlmeV9mZW50cnlfbXVsdGkoKS9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjM4OlxcdCAqIHVucmVnaXN0ZXJfZmVudHJ5X211bHRpKCkgaXMgY2FsbGVkLCBjdXJfaW1hZ2UgaXMgdW5jaGFuZ2VkXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzOS1cXHQgKiAoY3VyX2ltYWdlID09IG9sZF9pbWFnZSkgYW5kIGZ0cmFjZSBzdGlsbCBwb2ludHMgdG8gaXQuIEZyZWVpbmdcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDc4PXN0YXRpYyB2b2lkIF9fdXBkYXRlX3JlZzY0X2JvdW5kcyhzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTYtXFx0XFx0LyogVGhlIHU2NCByYW5nZSBhbmQgdGhlIHRudW0gb25seSBvdmVybGFwIGluIHRoZSBtYXhpbXVtIHZhbHVlXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTc6XFx0XFx0ICogcmVwcmVzZW50ZWQgYnkgdGhlIHRudW0sIGNhbGxlZCB0bWF4Llxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk4LVxcdFxcdCAqIHU2NDogIC0tLVt4eHh4eHhdLS0tLS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00MTMwPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxNjEtXFx0ICogQUxVLiBTZWUgYWxzbyByZXRyaWV2ZV9wdHJfbGltaXQoKS4gVGhlIGNoZWNrIGluXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQxNjI6XFx0ICogY2hlY2tfc3RhY2tfYWNjZXNzX2Zvcl9wdHJfYXJpdGhtZXRpYygpIGNhbGxlZCBieVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MTYzLVxcdCAqIGFkanVzdF9wdHJfbWluX21heF92YWxzKCkgcHJldmVudHMgdXNlcnMgZnJvbSBjcmVhdGluZyBzdGFjayBwb2ludGVyc1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNTo1OS44MzEyNjYyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODExMTAzOTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkNoZWNraW5nIGZvciBJbml0aWFsaXphdGlvbiBvZiBgZW52LVx1MDAzZXN1YnByb2dfdG9wb19vcmRlcmAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdmVyaWZ5IGEgY3J1Y2lhbCBkZXRhaWwgcmVnYXJkaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgZW52LVx1MDAzZXN1YnByb2dfdG9wb19vcmRlcmAuIEl0J3MgZXNzZW50aWFsIHRoYXQgdGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBhbHdheXMgcHJvcGVybHkgc2V0IHVwIGJlZm9yZSBgZG9fY2hlY2tfc3VicHJvZ3NgIGlzIGludm9rZWQuIFRoaXMgaXMgYSBjb21tb24gcG9pbnQgb2YgZXJyb3IgaW4gY29tcGlsZXIgYmFja2VuZHMsIHNvIEkgbmVlZCB0byBiZSBzdXJlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gaW5pdGlhdGUgYSBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiBgc3VicHJvZ190b3BvX29yZGVyYCB0aHJvdWdob3V0IHRoZSByZWxldmFudCBjb2RlIGJhc2UuIEkgbmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgcHJlY2lzZSB0byBjb25maXJtIGl0cyBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYW5kIHVzZS4gVGhpcyBzaG91bGRuJ3QgdGFrZSB0b28gbG9uZywgYnV0IGl0IG5lZWRzIHRvIGJlIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDAyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDY6MDEuNjQyMzczMTg2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk0ODkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdWJwcm9nX3RvcG9fb3JkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTk4NT1pbnQgYnBmX2NvbXB1dGVfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjAxNC1cXHRmb3IgKGsgPSBlbnYtXFx1MDAzZXN1YnByb2dfY250IC0gMTsgayBcXHUwMDNlPSAwOyBrLS0pIHtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjAxNTpcXHRcXHRpbnQgc3ViID0gZW52LVxcdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJba107XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIwMTYtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzEzNT1zdGF0aWMgaW50IHNvcnRfc3VicHJvZ3NfdG9wbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMDQtXFx0XFx0XFx0XFx0Y29sb3JbY3VyXSA9IDI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyMDU6XFx0XFx0XFx0XFx0ZW52LVxcdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJbb3JkZXIrK10gPSBjdXI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMDYtXFx0XFx0XFx0XFx0dG9wLS07XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIxMy1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInRvcG9fb3JkZXJbJWRdID0gJXNcXFxcblxcXCIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyMTQ6XFx0XFx0XFx0XFx0aSwgYnBmX3N1YnByb2dfbmFtZShlbnYsIGVudi1cXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2ldKSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMTUtb3V0Olxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NzU1PXN0YXRpYyBpbnQgZG9fY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc3OC1cXHRmb3IgKGogPSBlbnYtXFx1MDAzZXN1YnByb2dfY250IC0gMTsgaiBcXHUwMDNlPSAwOyBqLS0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3Nzk6XFx0XFx0aSA9IGVudi1cXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2pdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc4MC1cXHRcXHRpZiAoIWkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA2OjAxLjY5MDMyNzg4NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTE3MzQ5NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHNvcnRfc3VicHJvZ3NfdG9wb2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYHNvcnRfc3VicHJvZ3NfdG9wb2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBicGZfdmVyaWZpZXJfZW52YCBjb250ZXh0LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgaXRzIHB1cnBvc2UuIEl0J3Mgb2J2aW91c2x5IGRlc2lnbmVkIGZvciB0b3BvbG9naWNhbCBzb3J0aW5nIG9mIHN1YnByb2dyYW1zIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyLiBUaGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKj8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgY2hhaW4gdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCB1bmRlcnN0YW5kIHdoeSBhbmQgd2hlbiB0aGUgdmVyaWZpZXIgZGVjaWRlcyB0byBpbnZva2UgdGhpcyBzb3J0aW5nIGZ1bmN0aW9uLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMga2V5IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbXBhY3QgYW5kIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBpc3N1ZXMuIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gdHJhY2UgdGhvc2UgY2FsbHM7IGZpbmRpbmcgdGhpcyBmdW5jdGlvbidzIGNhbGxlcnMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDY6MDMuODA3NjgwNzI3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMxNDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3J0X3N1YnByb2dzX3RvcG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzA2MT1zdGF0aWMgaW50IGNoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEzNC0gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzEzNTpzdGF0aWMgaW50IHNvcnRfc3VicHJvZ3NfdG9wbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTM2LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTMwNj1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTQ3NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE0NzY6XFx0cmV0ID0gc29ydF9zdWJwcm9nc190b3BvKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDc3LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNjowMy44NTcwMDA1NzdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyOTc5NzYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBpc3N1ZSAqc2hvdWxkKiBiZSBzb21ld2hlcmUgYXJvdW5kIGxpbmUgMjE0NzUgb2YgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGxvZ2ljIHRoYXQncyBsZWFkaW5nIHRvIHRoZSB1bmV4cGVjdGVkIGJlaGF2aW9yIEknbSBzZWVpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGZsYXdzIGluIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcy4uLiB3ZWxsLCBpdCBjb3VsZCBiZSBhbnkgbnVtYmVyIG9mIHRoaW5ncy4gTWVtb3J5IGFjY2VzcyB0cmFja2luZz8gUmVnaXN0ZXIgc3RhdGUgbWFuYWdlbWVudD8gTG9vcCB1bnJvbGxpbmcgaW50ZXJhY3Rpb25zPyBQZXJoYXBzIHRoZXJlJ3MgYW4gaXNzdWUgd2l0aCBob3cgaXQgaW50ZXJwcmV0cyBpbnN0cnVjdGlvbiBzZW1hbnRpY3MsIG9yIGEgc3VidGxlIGJ1ZyBpbiB0aGUgY29uc3RyYWludHMgaXQgZW5mb3JjZXMuIEdpdmVuIHRoZSBuYXR1cmUgb2YgQlBGIHZlcmlmaWNhdGlvbiwgaXQncyBvZnRlbiBhIGNvbXBsZXggaW50ZXJwbGF5IG9mIGRpZmZlcmVudCBmYWN0b3JzLCBzbyBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyBpbiB0aGF0IGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTcxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDY6MDUuNzg2ODAxNzgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE0NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNDcwOlxcdFxcdFxcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xcbjIxNDcxOlxcdFxcbjIxNDcyOlxcdFxcdHJldCA9IGJwZl9wcnVuZV9kZWFkX2JyYW5jaGVzKGVudik7XFxuMjE0NzM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjE0NzQ6XFx0XFx0XFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XFxuMjE0NzU6XFx0XFxuMjE0NzY6XFx0XFx0cmV0ID0gc29ydF9zdWJwcm9nc190b3BvKGVudik7XFxuMjE0Nzc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjE0Nzg6XFx0XFx0XFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XFxuMjE0Nzk6XFx0XFxuMjE0ODA6XFx0XFx0cmV0ID0gYnBmX2NvbXB1dGVfc2NjKGVudik7XFxuMjE0ODE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjE0ODI6XFx0XFx0XFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XFxuMjE0ODM6XFx0XFxuMjE0ODQ6XFx0XFx0LyogbXVzdCBwcmVjZWRlIHRoZSBmaXJzdCBicGZfcmV0X3JlZ19wYWlyKCkgdXNlciBiZWxvdyAqL1xcbjIxNDg1OlxcdFxcdHJldCA9IGJwZl9jb21wdXRlX3N1YnByb2dfcmV0X3JlZ3MoZW52KTtcXG4yMTQ4NjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4yMTQ4NzpcXHRcXHRcXHRnb3RvIHNraXBfZnVsbF9jaGVjaztcXG4yMTQ4ODpcXHRcXG4yMTQ4OTpcXHRcXHRyZXQgPSBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhlbnYpO1xcbjIxNDkwOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIxNDkxOlxcdFxcdFxcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xcbjIxNDkyOlxcdFxcbjIxNDkzOlxcdFxcdHJldCA9IG1hcmtfZmFzdGNhbGxfcGF0dGVybnMoZW52KTtcXG4yMTQ5NDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4yMTQ5NTpcXHRcXHRcXHRnb3RvIHNraXBfZnVsbF9jaGVjaztcXG4yMTQ5NjpcXHRcXG4yMTQ5NzpcXHRcXHRyZXQgPSBkb19jaGVja19tYWluKGVudik7XFxuMjE0OTg6XFx0XFx0cmV0ID0gcmV0ID86IGRvX2NoZWNrX3N1YnByb2dzKGVudik7XFxuMjE0OTk6XFx0XFxuMjE1MDA6XFx0XFx0aWYgKHJldCA9PSAwIFxcdTAwMjZcXHUwMDI2IGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eCkpXFxuMjE1MDE6XFx0XFx0XFx0cmV0ID0gYnBmX3Byb2dfb2ZmbG9hZF9maW5hbGl6ZShlbnYpO1xcbjIxNTAyOlxcdFxcbjIxNTAzOlxcdHNraXBfZnVsbF9jaGVjazpcXG4yMTUwNDpcXHRcXHRrdmZyZWUoZW52LVxcdTAwM2VleHBsb3JlZF9zdGF0ZXMpO1xcbjIxNTA1OlxcdFxcbjIxNTA2OlxcdFxcdC8qIG1pZ2h0IGRlY3JlYXNlIHN0YWNrIGRlcHRoLCBrZWVwIGl0IGJlZm9yZSBwYXNzZXMgdGhhdFxcbjIxNTA3OlxcdFxcdCAqIGFsbG9jYXRlIGFkZGl0aW9uYWwgc2xvdHMuXFxuMjE1MDg6XFx0XFx0ICovXFxuMjE1MDk6XFx0XFx0aWYgKHJldCA9PSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNjowNS43ODc3NDAzNTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY1ODEwODQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgU3VicHJvZ3JhbSBPcmRlcmluZyoqXG5cbk9rYXksIHNvIGBzb3J0X3N1YnByb2dzX3RvcG9gIG5lZWRzIHRvIGV4ZWN1dGUgYmVmb3JlIGJvdGggYGRvX2NoZWNrX21haW5gIGFuZCBgZG9fY2hlY2tfc3VicHJvZ3NgLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSBuZWVkIHRoZSB0b3BvbG9naWNhbCBzb3J0IHBlcmZvcm1lZCBiZWZvcmUgd2Ugc3RhcnQgdmFsaWRhdGluZyBhbnl0aGluZyBhZ2FpbnN0IHRoZSByZXN1bHRpbmcgb3JkZXIuIFRoZSBjcml0aWNhbCBwYXJ0IEknbSBmb2N1c2luZyBvbiBub3cgaXMgaG93IGBzdWJwcm9nX3RvcG9fb3JkZXJgIGlzIGJlaW5nIGFsbG9jYXRlZC4gSSByZWNhbGwgdGhhdCB2YXJpYWJsZSwgYHN1YnByb2dfdG9wb19vcmRlcmAgaXMgYWxsb2NhdGVkIHdpdGhpbiBlaXRoZXIgYGJwZl9jaGVja2Agb3IgYGFsbG9jX2VudmAuIEkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBjb25maXJtIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGJlY2F1c2UgZGVwZW5kaW5nIG9uIHdoZW4gaXQgaXMgc2V0LCBpdCB3aWxsIGltcGFjdCB0aGUgZW50aXJlIGNvbnRyb2wgZmxvdyBhbmQgbWFrZSBzdXJlIGFsbCBjaGVja3MgaGF2ZSBhIHdlbGwgZGVmaW5lZCBzdGFydGluZyBwb2ludC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY2FsbGluZyBjb250ZXh0IG9mIHRob3NlIGZ1bmN0aW9ucyB0byBiZSBjZXJ0YWluIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA0OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDY6MDkuNDQ1ODUyNzEyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDk2MDgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdWJwcm9nX3RvcG9fb3JkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMTM1PXN0YXRpYyBpbnQgc29ydF9zdWJwcm9nc190b3BvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIwNC1cXHRcXHRcXHRcXHRjb2xvcltjdXJdID0gMjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIwNTpcXHRcXHRcXHRcXHRlbnYtXFx1MDAzZXN1YnByb2dfdG9wb19vcmRlcltvcmRlcisrXSA9IGN1cjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIwNi1cXHRcXHRcXHRcXHR0b3AtLTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjEzLVxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwidG9wb19vcmRlclslZF0gPSAlc1xcXFxuXFxcIixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIxNDpcXHRcXHRcXHRcXHRpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgZW52LVxcdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJbaV0pKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIxNS1vdXQ6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk3NTU9c3RhdGljIGludCBkb19jaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzc4LVxcdGZvciAoaiA9IGVudi1cXHUwMDNlc3VicHJvZ19jbnQgLSAxOyBqIFxcdTAwM2U9IDA7IGotLSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTc3OTpcXHRcXHRpID0gZW52LVxcdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJbal07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzgwLVxcdFxcdGlmICghaSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDY6MDkuNTA2ODIxOTQxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MzkwMTAxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgc29ydF9zdWJwcm9nc190b3BvYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGVudi1cdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJgIHN0cnVjdHVyZSBpcyBwb3B1bGF0ZWQuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIGBzb3J0X3N1YnByb2dzX3RvcG9gIGZ1bmN0aW9uLiBUaGF0J3Mgd2hlcmUgdGhlIGFsbG9jYXRpb24gYW5kIG9yZGVyaW5nIGxvZ2ljIGxpa2VseSByZXNpZGUuIEkgbmVlZCB0byB0cmFjZSB0aGlzIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIHRoZSBzdWJwcm9ncmFtcyBmcm9tIGEgdG9wb2xvZ2ljYWwgcG9pbnQgb2Ygdmlldy4gTGV0J3Mgc2VlIGhvdyB0aGV5IGFyZSBzb3J0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjkxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDY6MTEuMTQ1ODQxNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY4NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTM1OlxcdHN0YXRpYyBpbnQgc29ydF9zdWJwcm9nc190b3BvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuMzEzNjpcXHR7XFxuMzEzNzpcXHRcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc2kgPSBlbnYtXFx1MDAzZXN1YnByb2dfaW5mbztcXG4zMTM4OlxcdFxcdGludCAqaW5zbl9wb3N0b3JkZXIgPSBlbnYtXFx1MDAzZWNmZy5pbnNuX3Bvc3RvcmRlcjtcXG4zMTM5OlxcdFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpO1xcbjMxNDA6XFx0XFx0aW50IGNudCA9IGVudi1cXHUwMDNlc3VicHJvZ19jbnQ7XFxuMzE0MTpcXHRcXHRpbnQgKmRmc19zdGFjayA9IE5VTEw7XFxuMzE0MjpcXHRcXHRpbnQgdG9wID0gMCwgb3JkZXIgPSAwO1xcbjMxNDM6XFx0XFx0aW50IGksIHJldCA9IDA7XFxuMzE0NDpcXHRcXHR1OCAqY29sb3IgPSBOVUxMO1xcbjMxNDU6XFx0XFxuMzE0NjpcXHRcXHRjb2xvciA9IGt2emFsbG9jX29ianMoKmNvbG9yLCBjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuMzE0NzpcXHRcXHRkZnNfc3RhY2sgPSBrdm1hbGxvY19vYmpzKCpkZnNfc3RhY2ssIGNudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4zMTQ4OlxcdFxcdGlmICghY29sb3IgfHwgIWRmc19zdGFjaykge1xcbjMxNDk6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4zMTUwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxNTE6XFx0XFx0fVxcbjMxNTI6XFx0XFxuMzE1MzpcXHRcXHQvKlxcbjMxNTQ6XFx0XFx0ICogREZTIHBvc3Qtb3JkZXIgdHJhdmVyc2FsLlxcbjMxNTU6XFx0XFx0ICogQ29sb3IgdmFsdWVzOiAwID0gdW52aXNpdGVkLCAxID0gb24gc3RhY2ssIDIgPSBkb25lLlxcbjMxNTY6XFx0XFx0ICovXFxuMzE1NzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4zMTU4OlxcdFxcdFxcdGlmIChjb2xvcltpXSlcXG4zMTU5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMxNjA6XFx0XFx0XFx0Y29sb3JbaV0gPSAxO1xcbjMxNjE6XFx0XFx0XFx0ZGZzX3N0YWNrW3RvcCsrXSA9IGk7XFxuMzE2MjpcXHRcXG4zMTYzOlxcdFxcdFxcdHdoaWxlICh0b3AgXFx1MDAzZSAwKSB7XFxuMzE2NDpcXHRcXHRcXHRcXHRpbnQgY3VyID0gZGZzX3N0YWNrW3RvcCAtIDFdO1xcbjMxNjU6XFx0XFx0XFx0XFx0aW50IHBvX3N0YXJ0ID0gc2lbY3VyXS5wb3N0b3JkZXJfc3RhcnQ7XFxuMzE2NjpcXHRcXHRcXHRcXHRpbnQgcG9fZW5kID0gc2lbY3VyICsgMV0ucG9zdG9yZGVyX3N0YXJ0O1xcbjMxNjc6XFx0XFx0XFx0XFx0Ym9vbCBwdXNoZWQgPSBmYWxzZTtcXG4zMTY4OlxcdFxcdFxcdFxcdGludCBqO1xcbjMxNjk6XFx0XFxuMzE3MDpcXHRcXHRcXHRcXHRmb3IgKGogPSBwb19zdGFydDsgaiBcXHUwMDNjIHBvX2VuZDsgaisrKSB7XFxuMzE3MTpcXHRcXHRcXHRcXHRcXHRpbnQgaWR4ID0gaW5zbl9wb3N0b3JkZXJbal07XFxuMzE3MjpcXHRcXHRcXHRcXHRcXHRpbnQgY2FsbGVlO1xcbjMxNzM6XFx0XFxuMzE3NDpcXHRcXHRcXHRcXHRcXHRpZiAoIWJwZl9wc2V1ZG9fY2FsbChcXHUwMDI2aW5zbltpZHhdKSBcXHUwMDI2XFx1MDAyNiAhYnBmX3BzZXVkb19mdW5jKFxcdTAwMjZpbnNuW2lkeF0pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNjoxMS4xNDcwMzcxMloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDc1NDE2ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOlxuXG4qKkZpbmRpbmcgdGhlIEFsbG9jYXRpb24gb2YgYGVudi1cdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYGVudi1cdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJgIGlzIGJlaW5nIGFsbG9jYXRlZC4gVGhpcyBmZWVscyBsaWtlIGEgY2xhc3NpYyBkZWJ1Z2dpbmcgZXhlcmNpc2UuIEknbSBnb2luZyB0byBuZWVkIHRvIHN0YXJ0IGJ5IGRvaW5nIGEgY29tcHJlaGVuc2l2ZSBzZWFyY2ggdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuIEkgZG9uJ3Qgd2FudCB0byBtaXNzIGFueXRoaW5nLCBzbyBJJ2xsIGdvIHdpZGUsIHNlYXJjaGluZyB0aGUgZW50aXJlIHByb2plY3QgdHJlZS4gTGV0J3Mgc2VlIHdoYXQgSSB0dXJuIHVwLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbnZvbHZlIGxvb2tpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUzMCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDY6MTIuNjIyNDYyNTVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MDU3NTU3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3VicHJvZ190b3BvX29yZGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9OTE5PXN0cnVjdCBicGZfdmVyaWZpZXJfZW52IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtOTY0LVxcdC8qIHN1YnByb2cgaW5kaWNlcyBzb3J0ZWQgaW4gdG9wb2xvZ2ljYWwgb3JkZXI6IGxlYXZlcyBmaXJzdCwgY2FsbGVycyBsYXN0ICovXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDo5NjU6XFx0aW50IHN1YnByb2dfdG9wb19vcmRlcltCUEZfTUFYX1NVQlBST0dTICsgMl07XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC05NjYtXFx0dW5pb24ge1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE5ODU9aW50IGJwZl9jb21wdXRlX3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIwMTQtXFx0Zm9yIChrID0gZW52LVxcdTAwM2VzdWJwcm9nX2NudCAtIDE7IGsgXFx1MDAzZT0gMDsgay0tKSB7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjIwMTU6XFx0XFx0aW50IHN1YiA9IGVudi1cXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2tdO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMDE2LVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTMxMzU9c3RhdGljIGludCBzb3J0X3N1YnByb2dzX3RvcG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjA0LVxcdFxcdFxcdFxcdGNvbG9yW2N1cl0gPSAyO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMjA1OlxcdFxcdFxcdFxcdGVudi1cXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW29yZGVyKytdID0gY3VyO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjA2LVxcdFxcdFxcdFxcdHRvcC0tO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMTMtXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJ0b3BvX29yZGVyWyVkXSA9ICVzXFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMjE0OlxcdFxcdFxcdFxcdGksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBlbnYtXFx1MDAzZXN1YnByb2dfdG9wb19vcmRlcltpXSkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjE1LW91dDpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTc1NT1zdGF0aWMgaW50IGRvX2NoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NzgtXFx0Zm9yIChqID0gZW52LVxcdTAwM2VzdWJwcm9nX2NudCAtIDE7IGogXFx1MDAzZT0gMDsgai0tKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Nzc5OlxcdFxcdGkgPSBlbnYtXFx1MDAzZXN1YnByb2dfdG9wb19vcmRlcltqXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3ODAtXFx0XFx0aWYgKCFpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNjoxNi4yMjgyMzYxNTRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQwMTY1MjU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBgc3VicHJvZ190b3BvX29yZGVyYCBpcyBhbiBlbWJlZGRlZCBhcnJheSB3aXRoaW4gYHN0cnVjdCBicGZfdmVyaWZpZXJfZW52YCwgYW5kIGBlbnZgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC4gVGhpcyBpcyBrZXkuIE5vdywgcmVnYXJkaW5nIHRoZSBwYXRjaCBpdHNlbGYsIGhlcmUncyBteSBhc3Nlc3NtZW50OlxuXG4xLiAgKipgaW5jbHVkZS9saW51eC9icGYuaGA6KiogVGhlIGNoYW5nZSBpbiBgc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4YCwgcmVwbGFjaW5nIHNpbmdsZS1iaXQgYml0ZmllbGRzIGBjYWxsZWRgIGFuZCBgdmVyaWZpZWRgIHdpdGggYGJvb2wgY2FsbGVkWzJdYCBhbmQgYGJvb2wgdmVyaWZpZWRbMl1gLCBpcyBkZWZpbml0ZWx5IGludGVyZXN0aW5nLiBUaGVzZSBhdXhpbGlhcnkgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGR1cmluZyBCVEYgcHJvY2Vzc2luZy4gVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoYXQgdGhleSBhcmUgZWl0aGVyIHplcm8taW5pdGlhbGl6ZWQgb3IgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpzYC4gVGhpcyBzZXRzIHRoZSBzdGFnZS5cblxuMi4gICoqYGtlcm5lbC9icGYvdmVyaWZpZXIuY2A6KiogVGhlIGNvcmUgbG9naWMgaGFzIGJlZW4gbW9kaWZpZWQuIEluIGBjaGVja19mdW5jX2NhbGwoKWAsIHdlJ3JlIG5vdyB0cmFja2luZyB0aGUgaW52b2NhdGlvbiBjb250ZXh0IGV4cGxpY2l0bHkgd2l0aCBgc3ViX2F1eC1cdTAwM2VjYWxsZWRbaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KV0gPSB0cnVlYCBpbnN0ZWFkIG9mIGEgc2ltcGxlIGJvb2xlYW4gYXNzaWdubWVudC4gVGhlIGludHJvZHVjdGlvbiBvZiBgaW5fc2xlZXBhYmxlYCBhcyBhIHBhcmFtZXRlciB0byBgZG9fY2hlY2tfY29tbW9uKClgIGFuZCB0aGUgZXhwbGljaXQgc2V0dGluZyBvZiBgc3RhdGUtXHUwMDNlaW5fc2xlZXBhYmxlYCBpcyBpbXBvcnRhbnQgZm9yIGhhbmRsaW5nIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cywgYW5kIGl0IHVwZGF0ZXMgaW5zbiBhY2N1bXVsYXRpb24uICBgZG9fY2hlY2tfc3VicHJvZ3MoKWAgaXRlcmF0ZXMgaW4gcmV2ZXJzZSB0b3BvbG9naWNhbCBvcmRlciwgY2hlY2tpbmcgYm90aCBjb250ZXh0cyBpZiBtYXJrZWQgYXMgY2FsbGVkLiAgRmluYWxseSwgYGRvX2NoZWNrX21haW4oKWAgY2FsbHMgYGRvX2NoZWNrX2NvbW1vbigpYC4gVGhlIHJldmVyc2UgdG9wb2xvZ2ljYWwgb3JkZXIgYW5kIGR1YWwtY29udGV4dCBjaGVja2luZyBpcyBhIGtleSBjaGFuZ2UuXG5cbjMuICAqKlNlbGZ0ZXN0czoqKiBUaGUgYWRkaXRpb24gb2YgdGVzdHMgZm9yIGdsb2JhbCBzdWJwcm9ncmFtcyBpbiBib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cyBpcyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIHdoYXQgdGhlIGRldmVsb3BlcnMgYXJlIHRyeWluZyB0byB2YWxpZGF0ZSwgZW5zdXJpbmcgdGhleSBoYXZlbid0IGludHJvZHVjZWQgYW55IHJlZ3Jlc3Npb24gb3IgbmV3IGlzc3VlcyB3aGVuIGhhbmRsaW5nIGRpZmZlcmVudCBjb250ZXh0cy5cblxuTm93LCBsZXQncyBldmFsdWF0ZSB0aGlzIGluIHRoZSBjb250ZXh0IG9mIEtNU0FOIHZzLiBLQVNBTjpcblxuKiAgICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZS4gVGhlIHBhdGNoIGlzIHdvcmtpbmcgb24gYHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eGAsIHdoaWNoIGlzIGVudGlyZWx5IGludGVybmFsIHZlcmlmaWVyIG1ldGFkYXRhLiBObyBkYXRhIGZyb20gdGhhdCBzdHJ1Y3QgaXMgZXZlciBleHBvc2VkIHRvIHVzZXJzcGFjZS5cbiogICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogTm8uICBGaWVsZHMgd2l0aGluIGBicGZfZnVuY19pbmZvX2F1eGAgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEFueSBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZXJlJ3Mgbm8gcmlzayBoZXJlLlxuKiAgICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uOioqIE5vLiAgWmVyby1hbGxvY2F0aW9uIHZpYSBga3phbGxvY19vYmpzYCBpcyB2ZXJ5IHN0cmFpZ2h0Zm9yd2FyZC5cbiogICAqKkJvdW5kcyBjaGVja3MgXHUwMDI2IGxvZ2ljIHRoYXQgY291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6KiogTm8uXG5cblBvdGVudGlhbCBidWdzLCBhcyBJIHNlZSBpdCwgd291bGQgYmUgcmVsYXRlZCB0bzpcblxuKiAgIFZlcmlmaWVyIGxvZ2ljIGJ1Z3MgKHJlamVjdGluZyB2YWxpZCBwcm9ncmFtcywgYWNjZXB0aW5nIGludmFsaWQgcHJvZ3JhbXMgd2l0aCBpbmNvcnJlY3QgY29udGV4dCB2ZXJpZmljYXRpb24pLlxuKiAgIEluZmluaXRlIGxvb3BzIG9yIG9yZGVyaW5nIGlzc3VlcyBkdXJpbmcgc3VicHJvZ3JhbSBpdGVyYXRpb24uXG4qICAgT3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb24gdGhlIGBjYWxsZWRgIG9yIGB2ZXJpZmllZGAgYXJyYXlzIGlmIGBpbl9zbGVlcGFibGVfY29udGV4dChlbnYpYCByZXR1cm5lZCBhbnl0aGluZyBvdGhlciB0aGFuIDAgb3IgMS4gSG93ZXZlciwgc2luY2UgaXQgcmV0dXJucyBhIGBib29sYCBhbmQgd2Uga25vdyB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgaXMgMiwgYW55IG91dC1vZi1ib3VuZHMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIC8gY29tcGlsZXIgYm91bmRzIGNoZWNrcy4gTm9uZSBvZiB0aGVzZSBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGVyZWZvcmUsICoqTmVlZHNLTVNBTiA9IGZhbHNlLioqXG5cbk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6XG5cbiogICAqKktBU0FOIC8gc3RhbmRhcmQgc2FuaXRpemVyczoqKiBXZSdyZSBwcm90ZWN0ZWQgYWdhaW5zdCB2ZXJpZmllciBsb2dpYyBidWdzLCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvbiB0aG9zZSBgY2FsbGVkYCAvIGB2ZXJpZmllZGAgYXJyYXlzLCBhbnkgcG90ZW50aWFsIHN0YXRlIGFsbG9jYXRpb24gZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIG9yIGluZmluaXRlIGxvb3BzIGJ5IEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy5cbiogICAqKktNU0FOOioqIFdlJ3JlICpub3QqIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIGhlYXAgb3Igc3RhY2sgdmFyaWFibGVzLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nIG9yIGZpZWxkcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdXNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBpbiBjb25kaXRpb25hbCBsb2dpYy4gIGBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXhgIGlzIGNvbnNpc3RlbnRseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBga3phbGxvY19vYmpzYC4gTm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBoZXJlLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyOTAsIk91dHB1dFRva2VucyI6Mjc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA2OjIzLjYyOTg5Mjc1OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBhbmQgdmVyaWZ5IGdsb2JhbCBzdWJwcm9ncmFtIGNhbGxzIHNlcGFyYXRlbHkgZm9yIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZS9SQ1UgY29udGV4dHMuIEl0IHJlcGxhY2VzIHRoZSBzaW5nbGUtYml0IGBjYWxsZWRgIGFuZCBgdmVyaWZpZWRgIGZsYWdzIGluIGBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXhgIHdpdGggdHdvLWVsZW1lbnQgYm9vbGVhbiBhcnJheXMgaW5kZXhlZCBieSBgaW5fc2xlZXBhYmxlYC5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suIFRoZSBgYnBmX2Z1bmNfaW5mb19hdXhgIHN0cnVjdHVyZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uICh2aWEgYGt6YWxsb2Nfb2Jqc2ApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGBkb19jaGVja19zdWJwcm9ncygpYCwgYGRvX2NoZWNrX2NvbW1vbigpYCwgYW5kIGBjaGVja19mdW5jX2NhbGwoKWAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGUgYXJyYXlzIGFyZSBpbmRleGVkIHVzaW5nIGJvb2xlYW4gdmFsdWVzICgwIG9yIDEpLCBtYXRjaGluZyB0aGUgYXJyYXkgZGltZW5zaW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IEFueSBtZW1vcnkgYWNjZXNzIGlzc3VlcyAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIGFjY2VzcywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgc3RhdGUgYWxsb2NhdGlvbiBpc3N1ZXMsIG9yIGxvZ2ljL3ZlcmlmaWVyIHRyYXZlcnNhbCBidWdzKSB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHRyYWNrIGFuZCB2ZXJpZnkgZ2xvYmFsIHN1YnByb2dyYW0gY2FsbHMgc2VwYXJhdGVseSBmb3Igc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlL1JDVSBjb250ZXh0cy4gSXQgcmVwbGFjZXMgdGhlIHNpbmdsZS1iaXQgYGNhbGxlZGAgYW5kIGB2ZXJpZmllZGAgZmxhZ3MgaW4gYHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eGAgd2l0aCB0d28tZWxlbWVudCBib29sZWFuIGFycmF5cyBpbmRleGVkIGJ5IGBpbl9zbGVlcGFibGVgLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4gVGhlIGBicGZfZnVuY19pbmZvX2F1eGAgc3RydWN0dXJlcyBhcmUgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKHZpYSBga3phbGxvY19vYmpzYCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gYGRvX2NoZWNrX3N1YnByb2dzKClgLCBgZG9fY2hlY2tfY29tbW9uKClgLCBhbmQgYGNoZWNrX2Z1bmNfY2FsbCgpYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZSBhcnJheXMgYXJlIGluZGV4ZWQgdXNpbmcgYm9vbGVhbiB2YWx1ZXMgKDAgb3IgMSksIG1hdGNoaW5nIHRoZSBhcnJheSBkaW1lbnNpb24uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuLSBLQVNBTiAvIFN0YW5kYXJkIERldGVjdG9yczogQW55IG1lbW9yeSBhY2Nlc3MgaXNzdWVzIChzdWNoIGFzIGFycmF5IG91dC1vZi1ib3VuZHMgYWNjZXNzLCBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBzdGF0ZSBhbGxvY2F0aW9uIGlzc3Vlcywgb3IgbG9naWMvdmVyaWZpZXIgdHJhdmVyc2FsIGJ1Z3MpIHdvdWxkIGJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow2hn88[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 10:02:59 +0000 UTC FinishedAt: 2026-09-06 10:06:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "3ccdb07813829ba9487273e75d1cb238cfa774c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "3ccdb07813829ba9487273e75d1cb238cfa774c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "efa71e25-cbe2-4f6f-b01b-17ea81825a82" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "do_check_subprogs", "do_check_common", "check_func_call", "do_check_main" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2RvX2NoZWNrX3N1YnByb2dzJiMzNDssCiAgICAmIzM0O2RvX2NoZWNrX2NvbW1vbiYjMzQ7LAogICAgJiMzNDtjaGVja19mdW5jX2NhbGwmIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfbWFpbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdHJhY2sgYW5kIHZlcmlmeSBnbG9iYWwgc3VicHJvZ3JhbSBjYWxscyBzZXBhcmF0ZWx5IGZvciBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUvUkNVIGNvbnRleHRzLiBJdCByZXBsYWNlcyB0aGUgc2luZ2xlLWJpdCBgY2FsbGVkYCBhbmQgYHZlcmlmaWVkYCBmbGFncyBpbiBgc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4YCB3aXRoIHR3by1lbGVtZW50IGJvb2xlYW4gYXJyYXlzIGluZGV4ZWQgYnkgYGluX3NsZWVwYWJsZWAuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4gVGhlIGBicGZfZnVuY19pbmZvX2F1eGAgc3RydWN0dXJlcyBhcmUgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKHZpYSBga3phbGxvY19vYmpzYCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gYGRvX2NoZWNrX3N1YnByb2dzKClgLCBgZG9fY2hlY2tfY29tbW9uKClgLCBhbmQgYGNoZWNrX2Z1bmNfY2FsbCgpYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZSBhcnJheXMgYXJlIGluZGV4ZWQgdXNpbmcgYm9vbGVhbiB2YWx1ZXMgKDAgb3IgMSksIG1hdGNoaW5nIHRoZSBhcnJheSBkaW1lbnNpb24uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4tIEtBU0FOIC8gU3RhbmRhcmQgRGV0ZWN0b3JzOiBBbnkgbWVtb3J5IGFjY2VzcyBpc3N1ZXMgKHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHN0YXRlIGFsbG9jYXRpb24gaXNzdWVzLCBvciBsb2dpYy92ZXJpZmllciB0cmF2ZXJzYWwgYnVncykgd291bGQgYmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHRyYWNrIGFuZCB2ZXJpZnkgZ2xvYmFsIHN1YnByb2dyYW1zIHNlcGFyYXRlbHkgYWNyb3NzIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBleGVjdXRpb24gY29udGV4dHMsIG1vZGlmeWluZyBzdWJwcm9ncmFtIHZlcmlmaWNhdGlvbiBsb29wcywgdG9wb2xvZ2ljYWwgdHJhdmVyc2FsIG9yZGVyLCBhbmQgY29udGV4dCBzdGF0ZSBoYW5kbGluZyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NmVmYTYwM2EwZDUyMmU2ZWVjNjMyMzBkMTlhNmUyNjBkZmVlM2Q4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxMDowNToxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggM2E3ZWIyMTg1YzM1NC4uNjZkMDQyNDRjNzM3OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0xNjUwLDggJiM0MzsxNjUwLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3NcbiBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXgge1xuIFx0dTE2IGxpbmthZ2U7XG4gXHRib29sIHVucmVsaWFibGU7XG4tXHRib29sIGNhbGxlZCA6IDE7XG4tXHRib29sIHZlcmlmaWVkIDogMTtcbiYjNDM7XHQvKiBJbmRleGVkIGJ5IGluX3NsZWVwYWJsZS4gKi9cbiYjNDM7XHRib29sIGNhbGxlZFsyXTtcbiYjNDM7XHRib29sIHZlcmlmaWVkWzJdO1xuIH07XG4gXG4gZW51bSBicGZfaml0X3Bva2VfcmVhc29uIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDViNTFlN2VlMWEzZjkuLmY3NTlhMDIwYzhhNWEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTk5NTcsNiAmIzQzOzk5NTcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRpZiAoZXJyID09IC1FRkFVTFQpXG4gXHRcdHJldHVybiBlcnI7XG4gXHRpZiAoYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGVudiwgc3VicHJvZykpIHtcbiYjNDM7XHRcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgc3VicHJvZyk7XG4gXHRcdGNvbnN0IGNoYXIgKnN1Yl9uYW1lID0gYnBmX3N1YnByb2dfbmFtZShlbnYsIHN1YnByb2cpO1xuIFx0XHRjb25zdCBjaGFyICpvcGVyYXRpb247XG4gXHRcdGJvb2wgcmV0dXJuc192b2lkO1xuQEAgLTk5ODgsMTEgJiM0Mzs5OTg5LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0aWYgKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwpXG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0Z1bmMjJWQgKCYjMzk7JXMmIzM5OykgaXMgZ2xvYmFsIGFuZCBhc3N1bWVkIHZhbGlkLlxcblwmIzM0OyxcbiBcdFx0XHRcdHN1YnByb2csIHN1Yl9uYW1lKTtcbiYjNDM7XHRcdHN1Yl9hdXgtXHUwMDNlY2FsbGVkW2luX3NsZWVwYWJsZV9jb250ZXh0KGVudildID0gdHJ1ZTtcbiBcdFx0cmV0dXJuc192b2lkID0gc3VicHJvZ19yZXR1cm5zX3ZvaWQoZW52LCBzdWJwcm9nKTtcbiBcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10uY2hhbmdlc19wa3RfZGF0YSlcbiBcdFx0XHRjbGVhcl9hbGxfcGt0X3BvaW50ZXJzKGVudik7XG4tXHRcdC8qIG1hcmsgZ2xvYmFsIHN1YnByb2cgZm9yIHZlcmlmeWluZyBhZnRlciBtYWluIHByb2cgKi9cbi1cdFx0c3VicHJvZ19hdXgoZW52LCBzdWJwcm9nKS1cdTAwM2VjYWxsZWQgPSB0cnVlO1xuIFx0XHRpZiAocmV0dXJuc192b2lkKVxuIFx0XHRcdGJwZl9kaWFnX3JlY29yZF9zY3J1YihlbnYsIFx1MDAyNmNhbGxlci1cdTAwM2VyZWdzW0JQRl9SRUdfMF0sIEJQRl9ESUFHX01PRF9DQUxMRVJfU0FWRUQpO1xuIFx0XHRlbHNlXG5AQCAtMTA4MDQsNyAmIzQzOzEwODA0LDEyIEBAIGludCBicGZfZ2V0X2hlbHBlcl9wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgZnVuY19pZCxcbiBcdHJldHVybiAqcHRyIFx1MDAyNlx1MDAyNiAoKnB0ciktXHUwMDNlZnVuYyA/IDAgOiAtRUlOVkFMO1xuIH1cbiBcbi0vKiBDaGVjayBpZiB3ZSYjMzk7cmUgaW4gYSBzbGVlcGFibGUgY29udGV4dC4gKi9cbiYjNDM7LypcbiYjNDM7ICogVGhpcyBwcmVkaWNhdGUgaXMgdGhlIGludmVyc2Ugb2YgaW5fcmN1X2NzKCk6IG5vbi1zbGVlcGFibGUgcHJvZ3JhbXMgYW5kXG4mIzQzOyAqIGV2ZXJ5IGNvbmRpdGlvbiB0aGF0IHByZXZlbnRzIHNsZWVwaW5nIGFsc28gcHJvdmlkZSBSQ1UgcHJvdGVjdGlvbi4gR2xvYmFsXG4mIzQzOyAqIHN1YnByb2cgdmVyaWZpY2F0aW9uIHJlbGllcyBvbiB0aGlzIGVxdWl2YWxlbmNlIHRvIHJlcHJlc2VudCB0aGUgY2FsbGVyJiMzOTtzXG4mIzQzOyAqIGV4ZWN1dGlvbiBjb250ZXh0IHVzaW5nIG9ubHkgdGhlIGluX3NsZWVwYWJsZSBiaXQuXG4mIzQzOyAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpbl9zbGVlcGFibGVfY29udGV4dChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHJldHVybiAhZW52LVx1MDAzZWN1cl9zdGF0ZS1cdTAwM2VhY3RpdmVfcmN1X2xvY2tzIFx1MDAyNlx1MDAyNlxuQEAgLTE5NTYwLDEzICYjNDM7MTk1NjUsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9zdGF0ZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4mIzQzO3N0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBib29sIGluX3NsZWVwYWJsZSlcbiB7XG4gXHRib29sIHBvcF9sb2cgPSAhKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwyKTtcbiBcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWIgPSBzdWJwcm9nX2luZm8oZW52LCBzdWJwcm9nKTtcbiBcdHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eDtcbiBcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXRlO1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3M7XG4mIzQzO1x0dTMyIG9sZF9pbnNuc190b3RhbCA9IHN1Yi1cdTAwM2VpbnNuc190b3RhbDtcbiBcdHUzMiBpbnNuX3Byb2Nlc3NlZCA9IGVudi1cdTAwM2VpbnNuX3Byb2Nlc3NlZDtcbiBcdGludCByZXQsIGk7XG4gXG5AQCAtMTk1NzksNyAmIzQzOzE5NTg1LDcgQEAgc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4gXHRzdGF0ZS1cdTAwM2VjdXJmcmFtZSA9IDA7XG4gXHRzdGF0ZS1cdTAwM2VzcGVjdWxhdGl2ZSA9IGZhbHNlO1xuIFx0c3RhdGUtXHUwMDNlYnJhbmNoZXMgPSAxO1xuLVx0c3RhdGUtXHUwMDNlaW5fc2xlZXBhYmxlID0gZW52LVx1MDAzZXByb2ctXHUwMDNlc2xlZXBhYmxlO1xuJiM0MztcdHN0YXRlLVx1MDAzZWluX3NsZWVwYWJsZSA9IGluX3NsZWVwYWJsZTtcbiBcdHN0YXRlLVx1MDAzZWZyYW1lWzBdID0ga3phbGxvY19vYmooc3RydWN0IGJwZl9mdW5jX3N0YXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFzdGF0ZS1cdTAwM2VmcmFtZVswXSkge1xuIFx0XHRrZnJlZShzdGF0ZSk7XG5AQCAtMTk3MjEsNyAmIzQzOzE5NzI3LDggQEAgc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4gXHQgKiBBY2N1bXVsYXRlIHRoZWlyIHRvdGFsIGNvdW50cyBhcyB0b3RhbCBjb3VudHMgb2YgdGhlIG1haW4gb3JcbiBcdCAqIGdsb2JhbCBzdWJwcm9nIGhvc3RpbmcgdGhlIGFzeW5jIGNhbGwuXG4gXHQgKi9cbi1cdGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10uaW5zbnNfdG90YWwgPSBlbnYtXHUwMDNlaW5zbl9wcm9jZXNzZWQgLSBpbnNuX3Byb2Nlc3NlZDtcbiYjNDM7XHRlbnYtXHUwMDNlc3VicHJvZ19pbmZvW3N1YnByb2ddLmluc25zX3RvdGFsID0gb2xkX2luc25zX3RvdGFsICYjNDM7XG4mIzQzO1x0XHRcdFx0XHRcdChlbnYtXHUwMDNlaW5zbl9wcm9jZXNzZWQgLSBpbnNuX3Byb2Nlc3NlZCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xOTc0OSw0NSAmIzQzOzE5NzU2LDU1IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXg7XG4gXHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXggKnN1Yl9hdXg7XG4tXHRpbnQgaSwgcmV0LCBuZXdfY250O1xuJiM0MztcdGludCBjb250ZXh0LCBpLCBqLCByZXQsIG5ld19jbnQ7XG4gXG4gXHRpZiAoIWF1eC1cdTAwM2VmdW5jX2luZm8pXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogZXhjZXB0aW9uIGNhbGxiYWNrIGlzIHByZXN1bWVkIHRvIGJlIGFsd2F5cyBjYWxsZWQgKi9cbi1cdGlmIChlbnYtXHUwMDNlZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpXG4tXHRcdHN1YnByb2dfYXV4KGVudiwgZW52LVx1MDAzZWV4Y2VwdGlvbl9jYWxsYmFja19zdWJwcm9nKS1cdTAwM2VjYWxsZWQgPSB0cnVlO1xuJiM0MztcdGlmIChlbnYtXHUwMDNlZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpIHtcbiYjNDM7XHRcdHN1Yl9hdXggPSBzdWJwcm9nX2F1eChlbnYsIGVudi1cdTAwM2VleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZyk7XG4mIzQzO1x0XHRzdWJfYXV4LVx1MDAzZWNhbGxlZFtlbnYtXHUwMDNlcHJvZy1cdTAwM2VzbGVlcGFibGVdID0gdHJ1ZTtcbiYjNDM7XHR9XG4gXG4gYWdhaW46XG4gXHRuZXdfY250ID0gMDtcbi1cdGZvciAoaSA9IDE7IGkgXHUwMDNjIGVudi1cdTAwM2VzdWJwcm9nX2NudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdhbGsgY2FsbGVycyBiZWZvcmUgY2FsbGVlcyBzbyBlYWNoIGdsb2JhbCBzdWJwcm9nIG5vcm1hbGx5IHNlZXMgYWxsXG4mIzQzO1x0ICogb2YgaXRzIGNvbnRleHRzIGJlZm9yZSBpdCBpcyB2ZXJpZmllZC4gQXN5bmMgY2FsbGJhY2sgY3ljbGVzIGNhbiBhZGQgYVxuJiM0MztcdCAqIGNvbnRleHQgdG8gYW4gZWFybGllciBzdWJwcm9nLCBzbyByZXBlYXQgdW50aWwgZXZlcnkgY2FsbGVkIGNvbnRleHQgaXNcbiYjNDM7XHQgKiB2ZXJpZmllZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGogPSBlbnYtXHUwMDNlc3VicHJvZ19jbnQgLSAxOyBqIFx1MDAzZT0gMDsgai0tKSB7XG4mIzQzO1x0XHRpID0gZW52LVx1MDAzZXN1YnByb2dfdG9wb19vcmRlcltqXTtcbiYjNDM7XHRcdGlmICghaSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGVudiwgaSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHN1Yl9hdXggPSBzdWJwcm9nX2F1eChlbnYsIGkpO1xuLVx0XHRpZiAoIXN1Yl9hdXgtXHUwMDNlY2FsbGVkIHx8IHN1Yl9hdXgtXHUwMDNldmVyaWZpZWQpXG4tXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRmb3IgKGNvbnRleHQgPSAwOyBjb250ZXh0IFx1MDAzYyBBUlJBWV9TSVpFKHN1Yl9hdXgtXHUwMDNlY2FsbGVkKTsgY29udGV4dCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKCFzdWJfYXV4LVx1MDAzZWNhbGxlZFtjb250ZXh0XSB8fCBzdWJfYXV4LVx1MDAzZXZlcmlmaWVkW2NvbnRleHRdKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRlbnYtXHUwMDNlaW5zbl9pZHggPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0O1xuLVx0XHRXQVJOX09OX09OQ0UoZW52LVx1MDAzZWluc25faWR4ID09IDApO1xuLVx0XHRyZXQgPSBkb19jaGVja19jb21tb24oZW52LCBpKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdHJldHVybiByZXQ7XG4tXHRcdH0gZWxzZSBpZiAoZW52LVx1MDAzZWxvZy5sZXZlbCBcdTAwMjYgQlBGX0xPR19MRVZFTCkge1xuLVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtGdW5jIyVkICgmIzM5OyVzJiMzOTspIGlzIHNhZmUgZm9yIGFueSBhcmdzIHRoYXQgbWF0Y2ggaXRzIHByb3RvdHlwZVxcblwmIzM0Oyxcbi1cdFx0XHRcdGksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBpKSk7XG4tXHRcdH1cbiYjNDM7XHRcdFx0ZW52LVx1MDAzZWluc25faWR4ID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5zdGFydDtcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFKGVudi1cdTAwM2VpbnNuX2lkeCA9PSAwKTtcbiYjNDM7XHRcdFx0cmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgaSwgY29udGV4dCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0aWYgKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwpXG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0Z1bmMjJWQgKCYjMzk7JXMmIzM5OykgaXMgc2FmZSBmb3IgYW55IGFyZ3MgXCYjMzQ7XG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt0aGF0IG1hdGNoIGl0cyBwcm90b3R5cGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgaSkpO1xuIFxuLVx0XHQvKiBXZSB2ZXJpZmllZCBuZXcgZ2xvYmFsIHN1YnByb2csIGl0IG1pZ2h0IGhhdmUgY2FsbGVkIHNvbWVcbi1cdFx0ICogbW9yZSBnbG9iYWwgc3VicHJvZ3MgdGhhdCB3ZSBoYXZlbiYjMzk7dCB2ZXJpZmllZCB5ZXQsIHNvIHdlXG4tXHRcdCAqIG5lZWQgdG8gZG8gYW5vdGhlciBwYXNzIG92ZXIgc3VicHJvZ3MgdG8gdmVyaWZ5IHRob3NlLlxuLVx0XHQgKi9cbi1cdFx0c3ViX2F1eC1cdTAwM2V2ZXJpZmllZCA9IHRydWU7XG4tXHRcdG5ld19jbnQmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRzdWJfYXV4LVx1MDAzZXZlcmlmaWVkW2NvbnRleHRdID0gdHJ1ZTtcbiYjNDM7XHRcdFx0bmV3X2NudCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4tXHQvKiBXZSBjYW4mIzM5O3QgbG9vcCBmb3JldmVyIGFzIHdlIHZlcmlmeSBhdCBsZWFzdCBvbmUgZ2xvYmFsIHN1YnByb2cgb25cbi1cdCAqIGVhY2ggcGFzcy5cbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGNhbiYjMzk7dCBsb29wIGZvcmV2ZXIgYXMgZWFjaCBwYXNzIHZlcmlmaWVzIGF0IGxlYXN0IG9uZSBuZXcgY29udGV4dCxcbiYjNDM7XHQgKiBhbmQgdGhlcmUgYXJlIG9ubHkgdHdvIGNvbnRleHRzIHBlciBnbG9iYWwgc3VicHJvZy5cbiBcdCAqL1xuIFx0aWYgKG5ld19jbnQpXG4gXHRcdGdvdG8gYWdhaW47XG5AQCAtMTk4MDAsNyAmIzQzOzE5ODE3LDcgQEAgc3RhdGljIGludCBkb19jaGVja19tYWluKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRpbnQgcmV0O1xuIFxuIFx0ZW52LVx1MDAzZWluc25faWR4ID0gMDtcbi1cdHJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIDApO1xuJiM0MztcdHJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIDAsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZXNsZWVwYWJsZSk7XG4gXHRpZiAoIXJldClcbiBcdFx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZXN0YWNrX2RlcHRoID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1swXS5zdGFja19kZXB0aDtcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcbmluZGV4IDZiZjk1NTUwYTAyNDguLjk4N2NhOWRlYzZiN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jXG5AQCAtOSw2ICYjNDM7OSwxMSBAQFxuIFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4gXG4mIzQzO3N0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbiYjNDM7dm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xuJiM0Mzt2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbiYjNDM7dm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbiYjNDM7XG4gLyogVGltZXIgdGVzdHMgKi9cbiBcbiBzdHJ1Y3QgdGltZXJfZWxlbSB7XG5AQCAtNjYsNiAmIzQzOzcxLDcgQEAgaW50IHRpbWVyX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcbiBcbiBzdHJ1Y3Qgd3FfZWxlbSB7XG4gXHRzdHJ1Y3QgYnBmX3dxIHc7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0IF9fa3B0ciAqdGFzaztcbiB9O1xuIFxuIHN0cnVjdCB7XG5AQCAtMTE5LDYgJiM0MzsxMjUsMTA2IEBAIGludCB3cV9zbGVlcGFibGVfcHJvZyh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO19fbm9pbmxpbmUgaW50IHdxX2dsb2JhbF9hY3F1aXJlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssICphY3F1aXJlZDtcbiYjNDM7XHRzdHJ1Y3Qgd3FfZWxlbSAqdmFsO1xuJiM0MztcdGludCBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndxX21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHR0YXNrID0gdmFsLVx1MDAzZXRhc2s7XG4mIzQzO1x0aWYgKCF0YXNrKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZSh0YXNrKTtcbiYjNDM7XHRpZiAoYWNxdWlyZWQpXG4mIzQzO1x0XHRicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB3cV9nbG9iYWxfcmN1X2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0d3FfZ2xvYmFsX2FjcXVpcmUoKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2ZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyXCYjMzQ7KVxuJiM0MztpbnQgd3FfZ2xvYmFsX3JjdV9wcm9nKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3cV9lbGVtICp2YWw7XG4mIzQzO1x0aW50IGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2d3FfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl93cV9pbml0KFx1MDAyNnZhbC1cdTAwM2V3LCBcdTAwMjZ3cV9tYXAsIDApO1xuJiM0MztcdGJwZl93cV9zZXRfY2FsbGJhY2soXHUwMDI2dmFsLVx1MDAzZXcsIHdxX2dsb2JhbF9yY3VfY2IsIDApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdxX2dsb2JhbF9yY3VfbG9ja19jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0d3FfZ2xvYmFsX2FjcXVpcmUoKTtcbiYjNDM7XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCB3cV9nbG9iYWxfcmN1X2xvY2tfcHJvZyh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3FfZWxlbSAqdmFsO1xuJiM0MztcdGludCBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiBWZXJpZnkgdGhlIHNhbWUgZ2xvYmFsIHN1YnByb2cgaW4gbm9uLXNsZWVwYWJsZSBhbmQgcHJvdGVjdGVkIGNvbnRleHRzLiAqL1xuJiM0MztcdHdxX2dsb2JhbF9hY3F1aXJlKCk7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2d3FfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl93cV9pbml0KFx1MDAyNnZhbC1cdTAwM2V3LCBcdTAwMjZ3cV9tYXAsIDApO1xuJiM0MztcdGJwZl93cV9zZXRfY2FsbGJhY2soXHUwMDI2dmFsLVx1MDAzZXcsIHdxX2dsb2JhbF9yY3VfbG9ja19jYiwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fbm9pbmxpbmUgaW50IHdxX2dsb2JhbF9ub19yY3Uodm9pZClcbiYjNDM7e1xuJiM0MztcdGJhcnJpZXIoKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB3cV9nbG9iYWxfbm9fcmN1X2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0d3FfZ2xvYmFsX25vX3JjdSgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgd3FfZ2xvYmFsX25vX3JjdV9wcm9nKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3cV9lbGVtICp2YWw7XG4mIzQzO1x0aW50IGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIFZlcmlmeSB0aGUgc2FtZSBnbG9iYWwgaW4gbm9uLXNsZWVwYWJsZSBhbmQgdW5wcm90ZWN0ZWQgY29udGV4dHMuICovXG4mIzQzO1x0d3FfZ2xvYmFsX25vX3JjdSgpO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndxX21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfd3FfaW5pdChcdTAwMjZ2YWwtXHUwMDNldywgXHUwMDI2d3FfbWFwLCAwKTtcbiYjNDM7XHRicGZfd3Ffc2V0X2NhbGxiYWNrKFx1MDAyNnZhbC1cdTAwM2V3LCB3cV9nbG9iYWxfbm9fcmN1X2NiLCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBUYXNrIHdvcmsgdGVzdHMgKi9cbiBcbiBzdHJ1Y3QgdGFza193b3JrX2VsZW0ge1xuQEAgLTE3OSwzICYjNDM7Mjg1LDI5IEBAIGludCB0YXNrX3dvcmtfc2xlZXBhYmxlX3Byb2codm9pZCAqY3R4KVxuIFx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2dmFsLVx1MDAzZXR3LCBcdTAwMjZ0YXNrX3dvcmtfbWFwLCB0YXNrX3dvcmtfY2IpO1xuIFx0cmV0dXJuIDA7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0YXNrX3dvcmtfZ2xvYmFsX3JjdV9jYihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHdxX2dsb2JhbF9hY3F1aXJlKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O1IxIG11c3QgYmUgYSByY3UgcG9pbnRlclwmIzM0OylcbiYjNDM7aW50IHRhc2tfd29ya19nbG9iYWxfcmN1X3Byb2codm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfd29ya19lbGVtICp2YWw7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuJiM0MztcdGludCBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRhc2tfd29ya19tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuJiM0MztcdGlmICghdGFzaylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSh0YXNrLCBcdTAwMjZ2YWwtXHUwMDNldHcsIFx1MDAyNnRhc2tfd29ya19tYXAsXG4mIzQzO1x0XHRcdFx0ICAgICAgdGFza193b3JrX2dsb2JhbF9yY3VfY2IpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfc3VicHJvZ3MmIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfY29tbW9uJiMzNDssCiAgICAmIzM0O2NoZWNrX2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDtkb19jaGVja19tYWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdHJhY2sgYW5kIHZlcmlmeSBnbG9iYWwgc3VicHJvZ3JhbXMgc2VwYXJhdGVseSBhY3Jvc3Mgc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIGV4ZWN1dGlvbiBjb250ZXh0cywgbW9kaWZ5aW5nIHN1YnByb2dyYW0gdmVyaWZpY2F0aW9uIGxvb3BzLCB0b3BvbG9naWNhbCB0cmF2ZXJzYWwgb3JkZXIsIGFuZCBjb250ZXh0IHN0YXRlIGhhbmRsaW5nIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU2ZWZhNjAzYTBkNTIyZTZlZWM2MzIzMGQxOWE2ZTI2MGRmZWUzZDgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDEwOjA1OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmgKaW5kZXggM2E3ZWIyMTg1YzM1NC4uNjZkMDQyNDRjNzM3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi5oCkBAIC0xNjUwLDggJiM0MzsxNjUwLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MKIHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCB7CiAJdTE2IGxpbmthZ2U7CiAJYm9vbCB1bnJlbGlhYmxlOwotCWJvb2wgY2FsbGVkIDogMTsKLQlib29sIHZlcmlmaWVkIDogMTsKJiM0MzsJLyogSW5kZXhlZCBieSBpbl9zbGVlcGFibGUuICovCiYjNDM7CWJvb2wgY2FsbGVkWzJdOwomIzQzOwlib29sIHZlcmlmaWVkWzJdOwogfTsKIAogZW51bSBicGZfaml0X3Bva2VfcmVhc29uIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA1YjUxZTdlZTFhM2Y5Li5mNzU5YTAyMGM4YTVhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC05OTU3LDYgJiM0Mzs5OTU3LDcgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCWlmIChlcnIgPT0gLUVGQVVMVCkKIAkJcmV0dXJuIGVycjsKIAlpZiAoYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGVudiwgc3VicHJvZykpIHsKJiM0MzsJCXN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgc3VicHJvZyk7CiAJCWNvbnN0IGNoYXIgKnN1Yl9uYW1lID0gYnBmX3N1YnByb2dfbmFtZShlbnYsIHN1YnByb2cpOwogCQljb25zdCBjaGFyICpvcGVyYXRpb247CiAJCWJvb2wgcmV0dXJuc192b2lkOwpAQCAtOTk4OCwxMSAmIzQzOzk5ODksMTAgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQlpZiAoZW52LSZndDtsb2cubGV2ZWwgJmFtcDsgQlBGX0xPR19MRVZFTCkKIAkJCXZlcmJvc2UoZW52LCAmIzM0O0Z1bmMjJWQgKCYjMzk7JXMmIzM5OykgaXMgZ2xvYmFsIGFuZCBhc3N1bWVkIHZhbGlkLlxuJiMzNDssCiAJCQkJc3VicHJvZywgc3ViX25hbWUpOwomIzQzOwkJc3ViX2F1eC0mZ3Q7Y2FsbGVkW2luX3NsZWVwYWJsZV9jb250ZXh0KGVudildID0gdHJ1ZTsKIAkJcmV0dXJuc192b2lkID0gc3VicHJvZ19yZXR1cm5zX3ZvaWQoZW52LCBzdWJwcm9nKTsKIAkJaWYgKGVudi0mZ3Q7c3VicHJvZ19pbmZvW3N1YnByb2ddLmNoYW5nZXNfcGt0X2RhdGEpCiAJCQljbGVhcl9hbGxfcGt0X3BvaW50ZXJzKGVudik7Ci0JCS8qIG1hcmsgZ2xvYmFsIHN1YnByb2cgZm9yIHZlcmlmeWluZyBhZnRlciBtYWluIHByb2cgKi8KLQkJc3VicHJvZ19hdXgoZW52LCBzdWJwcm9nKS0mZ3Q7Y2FsbGVkID0gdHJ1ZTsKIAkJaWYgKHJldHVybnNfdm9pZCkKIAkJCWJwZl9kaWFnX3JlY29yZF9zY3J1YihlbnYsICZhbXA7Y2FsbGVyLSZndDtyZWdzW0JQRl9SRUdfMF0sIEJQRl9ESUFHX01PRF9DQUxMRVJfU0FWRUQpOwogCQllbHNlCkBAIC0xMDgwNCw3ICYjNDM7MTA4MDQsMTIgQEAgaW50IGJwZl9nZXRfaGVscGVyX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBmdW5jX2lkLAogCXJldHVybiAqcHRyICZhbXA7JmFtcDsgKCpwdHIpLSZndDtmdW5jID8gMCA6IC1FSU5WQUw7CiB9CiAKLS8qIENoZWNrIGlmIHdlJiMzOTtyZSBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LiAqLwomIzQzOy8qCiYjNDM7ICogVGhpcyBwcmVkaWNhdGUgaXMgdGhlIGludmVyc2Ugb2YgaW5fcmN1X2NzKCk6IG5vbi1zbGVlcGFibGUgcHJvZ3JhbXMgYW5kCiYjNDM7ICogZXZlcnkgY29uZGl0aW9uIHRoYXQgcHJldmVudHMgc2xlZXBpbmcgYWxzbyBwcm92aWRlIFJDVSBwcm90ZWN0aW9uLiBHbG9iYWwKJiM0MzsgKiBzdWJwcm9nIHZlcmlmaWNhdGlvbiByZWxpZXMgb24gdGhpcyBlcXVpdmFsZW5jZSB0byByZXByZXNlbnQgdGhlIGNhbGxlciYjMzk7cwomIzQzOyAqIGV4ZWN1dGlvbiBjb250ZXh0IHVzaW5nIG9ubHkgdGhlIGluX3NsZWVwYWJsZSBiaXQuCiYjNDM7ICovCiBzdGF0aWMgaW5saW5lIGJvb2wgaW5fc2xlZXBhYmxlX2NvbnRleHQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKIAlyZXR1cm4gIWVudi0mZ3Q7Y3VyX3N0YXRlLSZndDthY3RpdmVfcmN1X2xvY2tzICZhbXA7JmFtcDsKQEAgLTE5NTYwLDEzICYjNDM7MTk1NjUsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9zdGF0ZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKQomIzQzO3N0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBib29sIGluX3NsZWVwYWJsZSkKIHsKIAlib29sIHBvcF9sb2cgPSAhKGVudi0mZ3Q7bG9nLmxldmVsICZhbXA7IEJQRl9MT0dfTEVWRUwyKTsKIAlzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3ViID0gc3VicHJvZ19pbmZvKGVudiwgc3VicHJvZyk7CiAJc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZW52LSZndDtwcm9nLSZndDthdXg7CiAJc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3RhdGU7CiAJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3M7CiYjNDM7CXUzMiBvbGRfaW5zbnNfdG90YWwgPSBzdWItJmd0O2luc25zX3RvdGFsOwogCXUzMiBpbnNuX3Byb2Nlc3NlZCA9IGVudi0mZ3Q7aW5zbl9wcm9jZXNzZWQ7CiAJaW50IHJldCwgaTsKIApAQCAtMTk1NzksNyAmIzQzOzE5NTg1LDcgQEAgc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpCiAJc3RhdGUtJmd0O2N1cmZyYW1lID0gMDsKIAlzdGF0ZS0mZ3Q7c3BlY3VsYXRpdmUgPSBmYWxzZTsKIAlzdGF0ZS0mZ3Q7YnJhbmNoZXMgPSAxOwotCXN0YXRlLSZndDtpbl9zbGVlcGFibGUgPSBlbnYtJmd0O3Byb2ctJmd0O3NsZWVwYWJsZTsKJiM0MzsJc3RhdGUtJmd0O2luX3NsZWVwYWJsZSA9IGluX3NsZWVwYWJsZTsKIAlzdGF0ZS0mZ3Q7ZnJhbWVbMF0gPSBremFsbG9jX29iaihzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFzdGF0ZS0mZ3Q7ZnJhbWVbMF0pIHsKIAkJa2ZyZWUoc3RhdGUpOwpAQCAtMTk3MjEsNyAmIzQzOzE5NzI3LDggQEAgc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpCiAJICogQWNjdW11bGF0ZSB0aGVpciB0b3RhbCBjb3VudHMgYXMgdG90YWwgY291bnRzIG9mIHRoZSBtYWluIG9yCiAJICogZ2xvYmFsIHN1YnByb2cgaG9zdGluZyB0aGUgYXN5bmMgY2FsbC4KIAkgKi8KLQllbnYtJmd0O3N1YnByb2dfaW5mb1tzdWJwcm9nXS5pbnNuc190b3RhbCA9IGVudi0mZ3Q7aW5zbl9wcm9jZXNzZWQgLSBpbnNuX3Byb2Nlc3NlZDsKJiM0MzsJZW52LSZndDtzdWJwcm9nX2luZm9bc3VicHJvZ10uaW5zbnNfdG90YWwgPSBvbGRfaW5zbnNfdG90YWwgJiM0MzsKJiM0MzsJCQkJCQkoZW52LSZndDtpbnNuX3Byb2Nlc3NlZCAtIGluc25fcHJvY2Vzc2VkKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xOTc0OSw0NSAmIzQzOzE5NzU2LDU1IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtJmd0O3Byb2ctJmd0O2F1eDsKIAlzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXggKnN1Yl9hdXg7Ci0JaW50IGksIHJldCwgbmV3X2NudDsKJiM0MzsJaW50IGNvbnRleHQsIGksIGosIHJldCwgbmV3X2NudDsKIAogCWlmICghYXV4LSZndDtmdW5jX2luZm8pCiAJCXJldHVybiAwOwogCiAJLyogZXhjZXB0aW9uIGNhbGxiYWNrIGlzIHByZXN1bWVkIHRvIGJlIGFsd2F5cyBjYWxsZWQgKi8KLQlpZiAoZW52LSZndDtleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZykKLQkJc3VicHJvZ19hdXgoZW52LCBlbnYtJmd0O2V4Y2VwdGlvbl9jYWxsYmFja19zdWJwcm9nKS0mZ3Q7Y2FsbGVkID0gdHJ1ZTsKJiM0MzsJaWYgKGVudi0mZ3Q7ZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpIHsKJiM0MzsJCXN1Yl9hdXggPSBzdWJwcm9nX2F1eChlbnYsIGVudi0mZ3Q7ZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpOwomIzQzOwkJc3ViX2F1eC0mZ3Q7Y2FsbGVkW2Vudi0mZ3Q7cHJvZy0mZ3Q7c2xlZXBhYmxlXSA9IHRydWU7CiYjNDM7CX0KIAogYWdhaW46CiAJbmV3X2NudCA9IDA7Ci0JZm9yIChpID0gMTsgaSAmbHQ7IGVudi0mZ3Q7c3VicHJvZ19jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CS8qCiYjNDM7CSAqIFdhbGsgY2FsbGVycyBiZWZvcmUgY2FsbGVlcyBzbyBlYWNoIGdsb2JhbCBzdWJwcm9nIG5vcm1hbGx5IHNlZXMgYWxsCiYjNDM7CSAqIG9mIGl0cyBjb250ZXh0cyBiZWZvcmUgaXQgaXMgdmVyaWZpZWQuIEFzeW5jIGNhbGxiYWNrIGN5Y2xlcyBjYW4gYWRkIGEKJiM0MzsJICogY29udGV4dCB0byBhbiBlYXJsaWVyIHN1YnByb2csIHNvIHJlcGVhdCB1bnRpbCBldmVyeSBjYWxsZWQgY29udGV4dCBpcwomIzQzOwkgKiB2ZXJpZmllZC4KJiM0MzsJICovCiYjNDM7CWZvciAoaiA9IGVudi0mZ3Q7c3VicHJvZ19jbnQgLSAxOyBqICZndDs9IDA7IGotLSkgewomIzQzOwkJaSA9IGVudi0mZ3Q7c3VicHJvZ190b3BvX29yZGVyW2pdOwomIzQzOwkJaWYgKCFpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlpZiAoIWJwZl9zdWJwcm9nX2lzX2dsb2JhbChlbnYsIGkpKQogCQkJY29udGludWU7CiAKIAkJc3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgaSk7Ci0JCWlmICghc3ViX2F1eC0mZ3Q7Y2FsbGVkIHx8IHN1Yl9hdXgtJmd0O3ZlcmlmaWVkKQotCQkJY29udGludWU7CiYjNDM7CQlmb3IgKGNvbnRleHQgPSAwOyBjb250ZXh0ICZsdDsgQVJSQVlfU0laRShzdWJfYXV4LSZndDtjYWxsZWQpOyBjb250ZXh0JiM0MzsmIzQzOykgewomIzQzOwkJCWlmICghc3ViX2F1eC0mZ3Q7Y2FsbGVkW2NvbnRleHRdIHx8IHN1Yl9hdXgtJmd0O3ZlcmlmaWVkW2NvbnRleHRdKQomIzQzOwkJCQljb250aW51ZTsKIAotCQllbnYtJmd0O2luc25faWR4ID0gZW52LSZndDtzdWJwcm9nX2luZm9baV0uc3RhcnQ7Ci0JCVdBUk5fT05fT05DRShlbnYtJmd0O2luc25faWR4ID09IDApOwotCQlyZXQgPSBkb19jaGVja19jb21tb24oZW52LCBpKTsKLQkJaWYgKHJldCkgewotCQkJcmV0dXJuIHJldDsKLQkJfSBlbHNlIGlmIChlbnYtJmd0O2xvZy5sZXZlbCAmYW1wOyBCUEZfTE9HX0xFVkVMKSB7Ci0JCQl2ZXJib3NlKGVudiwgJiMzNDtGdW5jIyVkICgmIzM5OyVzJiMzOTspIGlzIHNhZmUgZm9yIGFueSBhcmdzIHRoYXQgbWF0Y2ggaXRzIHByb3RvdHlwZVxuJiMzNDssCi0JCQkJaSwgYnBmX3N1YnByb2dfbmFtZShlbnYsIGkpKTsKLQkJfQomIzQzOwkJCWVudi0mZ3Q7aW5zbl9pZHggPSBlbnYtJmd0O3N1YnByb2dfaW5mb1tpXS5zdGFydDsKJiM0MzsJCQlXQVJOX09OX09OQ0UoZW52LSZndDtpbnNuX2lkeCA9PSAwKTsKJiM0MzsJCQlyZXQgPSBkb19jaGVja19jb21tb24oZW52LCBpLCBjb250ZXh0KTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJCWlmIChlbnYtJmd0O2xvZy5sZXZlbCAmYW1wOyBCUEZfTE9HX0xFVkVMKQomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDtGdW5jIyVkICgmIzM5OyVzJiMzOTspIGlzIHNhZmUgZm9yIGFueSBhcmdzICYjMzQ7CiYjNDM7CQkJCQkmIzM0O3RoYXQgbWF0Y2ggaXRzIHByb3RvdHlwZVxuJiMzNDssCiYjNDM7CQkJCQlpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgaSkpOwogCi0JCS8qIFdlIHZlcmlmaWVkIG5ldyBnbG9iYWwgc3VicHJvZywgaXQgbWlnaHQgaGF2ZSBjYWxsZWQgc29tZQotCQkgKiBtb3JlIGdsb2JhbCBzdWJwcm9ncyB0aGF0IHdlIGhhdmVuJiMzOTt0IHZlcmlmaWVkIHlldCwgc28gd2UKLQkJICogbmVlZCB0byBkbyBhbm90aGVyIHBhc3Mgb3ZlciBzdWJwcm9ncyB0byB2ZXJpZnkgdGhvc2UuCi0JCSAqLwotCQlzdWJfYXV4LSZndDt2ZXJpZmllZCA9IHRydWU7Ci0JCW5ld19jbnQmIzQzOyYjNDM7OwomIzQzOwkJCXN1Yl9hdXgtJmd0O3ZlcmlmaWVkW2NvbnRleHRdID0gdHJ1ZTsKJiM0MzsJCQluZXdfY250JiM0MzsmIzQzOzsKJiM0MzsJCX0KIAl9CiAKLQkvKiBXZSBjYW4mIzM5O3QgbG9vcCBmb3JldmVyIGFzIHdlIHZlcmlmeSBhdCBsZWFzdCBvbmUgZ2xvYmFsIHN1YnByb2cgb24KLQkgKiBlYWNoIHBhc3MuCiYjNDM7CS8qCiYjNDM7CSAqIFdlIGNhbiYjMzk7dCBsb29wIGZvcmV2ZXIgYXMgZWFjaCBwYXNzIHZlcmlmaWVzIGF0IGxlYXN0IG9uZSBuZXcgY29udGV4dCwKJiM0MzsJICogYW5kIHRoZXJlIGFyZSBvbmx5IHR3byBjb250ZXh0cyBwZXIgZ2xvYmFsIHN1YnByb2cuCiAJICovCiAJaWYgKG5ld19jbnQpCiAJCWdvdG8gYWdhaW47CkBAIC0xOTgwMCw3ICYjNDM7MTk4MTcsNyBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX21haW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAlpbnQgcmV0OwogCiAJZW52LSZndDtpbnNuX2lkeCA9IDA7Ci0JcmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgMCk7CiYjNDM7CXJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIDAsIGVudi0mZ3Q7cHJvZy0mZ3Q7c2xlZXBhYmxlKTsKIAlpZiAoIXJldCkKIAkJZW52LSZndDtwcm9nLSZndDthdXgtJmd0O3N0YWNrX2RlcHRoID0gZW52LSZndDtzdWJwcm9nX2luZm9bMF0uc3RhY2tfZGVwdGg7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jCmluZGV4IDZiZjk1NTUwYTAyNDguLjk4N2NhOWRlYzZiN2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYwpAQCAtOSw2ICYjNDM7OSwxMSBAQAogCiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiAKJiM0MztzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJwZl90YXNrX2FjcXVpcmUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07CiYjNDM7dm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiYjNDM7CiAvKiBUaW1lciB0ZXN0cyAqLwogCiBzdHJ1Y3QgdGltZXJfZWxlbSB7CkBAIC02Niw2ICYjNDM7NzEsNyBAQCBpbnQgdGltZXJfc2xlZXBhYmxlX3Byb2codm9pZCAqY3R4KQogCiBzdHJ1Y3Qgd3FfZWxlbSB7CiAJc3RydWN0IGJwZl93cSB3OwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgX19rcHRyICp0YXNrOwogfTsKIAogc3RydWN0IHsKQEAgLTExOSw2ICYjNDM7MTI1LDEwNiBAQCBpbnQgd3Ffc2xlZXBhYmxlX3Byb2codm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7X19ub2lubGluZSBpbnQgd3FfZ2xvYmFsX2FjcXVpcmUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgKmFjcXVpcmVkOwomIzQzOwlzdHJ1Y3Qgd3FfZWxlbSAqdmFsOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3dxX21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0YXNrID0gdmFsLSZndDt0YXNrOwomIzQzOwlpZiAoIXRhc2spCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHRhc2spOwomIzQzOwlpZiAoYWNxdWlyZWQpCiYjNDM7CQlicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3FfZ2xvYmFsX3JjdV9jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXdxX2dsb2JhbF9hY3F1aXJlKCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1IxIG11c3QgYmUgYSByY3UgcG9pbnRlciYjMzQ7KQomIzQzO2ludCB3cV9nbG9iYWxfcmN1X3Byb2codm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHdxX2VsZW0gKnZhbDsKJiM0MzsJaW50IGtleSA9IDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDt3cV9tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX3dxX2luaXQoJmFtcDt2YWwtJmd0O3csICZhbXA7d3FfbWFwLCAwKTsKJiM0MzsJYnBmX3dxX3NldF9jYWxsYmFjaygmYW1wO3ZhbC0mZ3Q7dywgd3FfZ2xvYmFsX3JjdV9jYiwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdxX2dsb2JhbF9yY3VfbG9ja19jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXdxX2dsb2JhbF9hY3F1aXJlKCk7CiYjNDM7CWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IHdxX2dsb2JhbF9yY3VfbG9ja19wcm9nKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3cV9lbGVtICp2YWw7CiYjNDM7CWludCBrZXkgPSAwOwomIzQzOwomIzQzOwkvKiBWZXJpZnkgdGhlIHNhbWUgZ2xvYmFsIHN1YnByb2cgaW4gbm9uLXNsZWVwYWJsZSBhbmQgcHJvdGVjdGVkIGNvbnRleHRzLiAqLwomIzQzOwl3cV9nbG9iYWxfYWNxdWlyZSgpOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7d3FfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl93cV9pbml0KCZhbXA7dmFsLSZndDt3LCAmYW1wO3dxX21hcCwgMCk7CiYjNDM7CWJwZl93cV9zZXRfY2FsbGJhY2soJmFtcDt2YWwtJmd0O3csIHdxX2dsb2JhbF9yY3VfbG9ja19jYiwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztfX25vaW5saW5lIGludCB3cV9nbG9iYWxfbm9fcmN1KHZvaWQpCiYjNDM7ewomIzQzOwliYXJyaWVyKCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdxX2dsb2JhbF9ub19yY3VfY2Iodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpCiYjNDM7ewomIzQzOwl3cV9nbG9iYWxfbm9fcmN1KCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MSYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCB3cV9nbG9iYWxfbm9fcmN1X3Byb2codm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHdxX2VsZW0gKnZhbDsKJiM0MzsJaW50IGtleSA9IDA7CiYjNDM7CiYjNDM7CS8qIFZlcmlmeSB0aGUgc2FtZSBnbG9iYWwgaW4gbm9uLXNsZWVwYWJsZSBhbmQgdW5wcm90ZWN0ZWQgY29udGV4dHMuICovCiYjNDM7CXdxX2dsb2JhbF9ub19yY3UoKTsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3dxX21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfd3FfaW5pdCgmYW1wO3ZhbC0mZ3Q7dywgJmFtcDt3cV9tYXAsIDApOwomIzQzOwlicGZfd3Ffc2V0X2NhbGxiYWNrKCZhbXA7dmFsLSZndDt3LCB3cV9nbG9iYWxfbm9fcmN1X2NiLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogVGFzayB3b3JrIHRlc3RzICovCiAKIHN0cnVjdCB0YXNrX3dvcmtfZWxlbSB7CkBAIC0xNzksMyAmIzQzOzI4NSwyOSBAQCBpbnQgdGFza193b3JrX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eCkKIAlicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSh0YXNrLCAmYW1wO3ZhbC0mZ3Q7dHcsICZhbXA7dGFza193b3JrX21hcCwgdGFza193b3JrX2NiKTsKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRhc2tfd29ya19nbG9iYWxfcmN1X2NiKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gd3FfZ2xvYmFsX2FjcXVpcmUoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7ZmVudHJ5L2JwZl9mZW50cnlfdGVzdDEmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXImIzM0OykKJiM0MztpbnQgdGFza193b3JrX2dsb2JhbF9yY3VfcHJvZyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza193b3JrX2VsZW0gKnZhbDsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3Rhc2tfd29ya19tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlpZiAoIXRhc2spCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgJmFtcDt2YWwtJmd0O3R3LCAmYW1wO3Rhc2tfd29ya19tYXAsCiYjNDM7CQkJCSAgICAgIHRhc2tfd29ya19nbG9iYWxfcmN1X2NiKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODg4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhcyBJIGxvb2sgb3ZlciB0aGlzIHBhdGNoIHNlcmllcyBmb3IgdGhlIGtlcm5lbC4gVGhlIHVzZXIgd2FudHMgbWUgdG8gYW5hbHl6ZSB0aGlzLCBhbmQgbXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIHRvdWNoZXMgc29tZXRoaW5nIGltcG9ydGFudCwgdGhlIEJQRiB2ZXJpZmllci4KCkZpcnN0LCBJIHNlZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSBpbiBgaW5jbHVkZS9saW51eC9icGYuaGAgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiAgU3BlY2lmaWNhbGx5LCB0aGUgc3RydWN0IGBicGZfZnVuY19pbmZvX2F1eGAgaGFzIGJlZW4gbW9kaWZpZWQuIFRoZSBgY2FsbGVkYCBhbmQgYHZlcmlmaWVkYCBib29sZWFucyBhcmUgbm93IGFycmF5cyBvZiB0d28gZWxlbWVudHMsIGBjYWxsZWRbMl1gIGFuZCBgdmVyaWZpZWRbMl1gLiAgVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFdoeSB0d28/ICBJIHN1c3BlY3QgdGhpcyByZWxhdGVzIHRvIHRyYWNraW5nIHZlcmlmaWNhdGlvbiBzdGF0ZSBpbiBkaWZmZXJlbnQgY29udGV4dHMgLSBsaWtlbHkgc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIG9uZXMsIHdoaWNoIGlzIGNvbmZpcm1lZCBsYXRlci4KCkxvb2tpbmcgZGVlcGVyIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIEkgc2VlIGZ1bmN0aW9ucyBsaWtlIGBjaGVja19mdW5jX2NhbGxgLCBgZG9fY2hlY2tfY29tbW9uYCwgYGRvX2NoZWNrX3N1YnByb2dzYCwgYW5kIGBkb19jaGVja19tYWluYCBhcmUgdGhlIGZvY3VzLiBJIG5vdGljZSBgaW5fc2xlZXBhYmxlX2NvbnRleHQoKWAgaXMgdXNlZCwgYW5kIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBzdHJhdGVnaWNhbGx5IG1hcmtpbmcgZnVuY3Rpb24gY2FsbHMgYXMgYGNhbGxlZGAgYW5kIGB2ZXJpZmllZGAgaW4gZGlmZmVyZW50IGNvbnRleHRzLCBiYXNlZCBvbiB3aGV0aGVyIHRoZSBwcm9ncmFtIGlzIG9wZXJhdGluZyBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCB3aGljaCBpcyBsaWtlbHkgY3JpdGljYWwuICBUaGUgYGRvX2NoZWNrX3N1YnByb2dzYCBmdW5jdGlvbiBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuICBJdCBub3cgaGFuZGxlcyBhbiBleGNlcHRpb24gY2FsbGJhY2sgYW5kIGl0ZXJhdGVzIHRocm91Z2ggc3VicHJvZ3JhbXMgaW4gYSB0b3BvbG9naWNhbCBvcmRlci4gSXQgZG9lcyBhIGxvb3AgYGZvciAoY29udGV4dCA9IDA7IGNvbnRleHQgJmx0OyBBUlJBWV9TSVpFKHN1Yl9hdXgtJmd0O2NhbGxlZCk7IGNvbnRleHQmIzQzOyYjNDM7KWAgLSB0aGlzIGlzIHRoZSBrZXkuICBJdCBkb2VzICptdWx0aXBsZSogdmVyaWZpY2F0aW9uIHBhc3NlcyBwZXIgY29udGV4dCEgVGhhdCYjMzk7cyBhIHN0cm9uZyBzaWduYWwgb2Ygc2lnbmlmaWNhbnQgbG9naWMgY2hhbmdlLgoKVGhlbiBgZG9fY2hlY2tfbWFpbmAgY2FsbHMgYGRvX2NoZWNrX2NvbW1vbmAsIGFnYWluIGxpbmtpbmcgdmVyaWZpY2F0aW9uIHRvIHRoZSBzbGVlcGFibGUgY29udGV4dC4gVGhlIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgYWNjdW11bGF0aW5nIHRvdGFsIGluc3RydWN0aW9uIGNvdW50IGluIGBkb19jaGVja19jb21tb25gIGFsc28gbmVlZCB0byBiZSBzY3J1dGluaXplZCBmb3IgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGluc3RydWN0aW9uIGNvdW50aW5nIGFjcm9zcyB0aGVzZSBkaWZmZXJlbnQgdmVyaWZpY2F0aW9uIHN0YXRlcy4KCk5vdywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBUaGUgQlBGIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgcGF0aCBhbmQgZWFzaWx5IHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgc3lzY2FsbC4gU3l6a2FsbGVyJiMzOTtzIGRlZXAgQlBGIHN1cHBvcnQgbWFrZXMgaXQgZXZlbiBlYXNpZXIgdG8gdHJpZ2dlci4gVGhlIGNvcmUgc3Vic3lzdGVtLCBsb2dpYyBjaGFuZ2VzIGFyb3VuZCBzbGVlcGFibGUgdnMuIG5vbi1zbGVlcGFibGUgY29udGV4dHMsIHRoZSB0b3BvbG9naWNhbCBvcmRlciBsb29wIGFuZCBlc3BlY2lhbGx5IHRoZSBtdWx0aXBsZSB2ZXJpZmljYXRpb24gcGFzc2VzIHBlciBjb250ZXh0LCBhbGwgc2NyZWFtICYjMzQ7V29ydGhGdXp6aW5nPXRydWUuJiMzNDsgIFRoaXMgaXMgZGVmaW5pdGVseSBhbiBhcmVhIHdoZXJlIHN1YnRsZSBidWdzIGNvdWxkIGJlIGx1cmtpbmcuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MuIFRoZSBCUEYgdmVyaWZpZXIgd2lsbCBsaWtlbHkgcmVxdWlyZSBgQ09ORklHX0JQRl9TWVNDQUxMYCAoYW5kIHBvc3NpYmx5IGBDT05GSUdfQlBGYCkgdG8gYmUgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIG9yIGNoZWNrIHRoZSBrZXJuZWwmIzM5O3MgYEtjb25maWdgIG9yIHJlbGV2YW50IGBNYWtlZmlsZWAgZmlsZXMgdG8gdmVyaWZ5IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBiZWZvcmUgbW92aW5nIGZvcndhcmQgd2l0aCBhbnkgZnV6emluZyBwbGFucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXJpZmllclxcLmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2l0ZXIuYz03Mjc9QlBGX0NBTExfNChicGZfbG9vcCwgdTMyLCBucl9sb29wcywgdm9pZCAqLCBjYWxsYmFja19mbiwgdm9pZCAqLCBjYWxsYmFja19jdHgsXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTczNS1cdCAqIGlzIGlubGluZWQsIGJlIGNhcmVmdWwgdG8gbW9kaWZ5IHRoaXMgY29kZSBpbiBzeW5jLiBTZWVcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo3MzY6XHQgKiBmdW5jdGlvbiB2ZXJpZmllci5jOmlubGluZV9icGZfbG9vcC5cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03MzctXHQgKi9cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDY0PV9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgc3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqbWV0YSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDc1LVx0LyogVmVyaWZpZXIgc3RyaXBzIEtGX1JFVF9OVUxMIGlmIGlucHV0IGlzIG93bmVkIHJlZiwgc2VlIGlzX2tmdW5jX3JldF9udWxsXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDc2Olx0ICogaW4gdmVyaWZpZXIuY1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ3Ny1cdCAqL1xuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmM9OTkyPV9fYnBmX2tmdW5jIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYnBmX2l0ZXJfdGFza192bWFfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgKml0KVxuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTAxMS1cdCAqIFRoZSB2ZXJpZmllciBvbmx5IHRydXN0cyB2bV9tbSBhbmQgdm1fZmlsZSAoc2VlXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjEwMTI6XHQgKiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTCBpbiB2ZXJpZmllci5jKS4gVGFrZSBhIHJlZmVyZW5jZVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEzLVx0ICogb24gdm1fZmlsZTsgdm1fbW0gaXMgYWxyZWFkeSBjb3JyZWN0IGJlY2F1c2UgbG9ja192bWFfdW5kZXJfcmN1KClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ3MjA9c3RhdGljIGludCBhZGp1c3RfcHRyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODk3LVx0XHQvKiBXZSBkb24mIzM5O3QgYWxsb3cgc3VidHJhY3Rpb24gZnJvbSBGUCwgYmVjYXVzZSAoYWNjb3JkaW5nIHRvXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ4OTg6XHRcdCAqIHRlc3RfdmVyaWZpZXIuYyB0ZXN0IFwmIzM0O2ludmFsaWQgZnAgYXJpdGhtZXRpY1wmIzM0OywgSklUcyBtaWdodCBub3Rcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDg5OS1cdFx0ICogYmUgYWJsZSB0byBkZWFsIHdpdGggaXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc1NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgVmVyaWZpZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IEtjb25maWcgb3B0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgQlBGIHZlcmlmaWVyIGNvZGUsIHNwZWNpZmljYWxseSBgdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgbW92ZSB3b3VsZCBiZSB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBzdWJzeXN0ZW0gd291bGQgcmVzaWRlLCBhbmQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGFyZSB0eXBpY2FsbHkgZGVmaW5lZCBhbG9uZ3NpZGUgdGhlIHNvdXJjZSBmaWxlcy4gSG9wZWZ1bGx5LCB0aGUgaW5jbHVzaW9uIG9mIGB2ZXJpZmllci5jYCB3aWxsIGJlIGNvbmRpdGlvbmFsIGJhc2VkIG9uIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFnLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydCB0aGUgaHVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZlcmlmaWVyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTExNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIEJ1aWxkIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgYW5kIHNwZWNpZmljYWxseSBsaW5lIDkuIEl0JiMzOTtzIGJ1aWxkaW5nIHRoZSBCUEYgc3Vic3lzdGVtLCBhbmQgdGhpcyBsaW5lIGlzIGtleTogYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIC4uLmAgSSBzZWUgdGhhdCB0aGUgb2JqZWN0IGZpbGVzIGBzeXNjYWxsLm9gLCBgdmVyaWZpZXIub2AsIGBpbm9kZS5vYCwgYGhlbHBlcnMub2AgYW5kIHBvdGVudGlhbGx5IG1vcmUsIGFyZSBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBLY29uZmlnIHZhcmlhYmxlLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCB3aHkgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZGVmaW5lZC4gV2hlcmUgZG9lcyB0aGlzIGdldCBzZXQ/IEEgcXVpY2sgbG9vayBpbiBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AgaXMgZGVmaW5pdGVseSBpbiBvcmRlci4gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyBpbiBvbmUgb2YgdGhvc2UsIHNpbmNlIHRoZXkgaGFuZGxlIGEgbG90IG9mIHRoZSBpbml0aWFsIGtlcm5lbCBjb25maWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgdGhpcyBjb25maWcgb3B0aW9uIHRvIGJlIHNlbGVjdGVkLiBJcyBpdCBhIGRpcmVjdCBkZXBlbmRlbmN5PyBBbm90aGVyIG9wdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGhlIEJQRiBzeXN0ZW0gYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSBidWlsZCBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgQlBGIHN1YnN5c3RlbSYjMzk7cyBhcmNoaXRlY3R1cmUgYW5kIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUxMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBmb3IgQlBGX1NZU0NBTEwgaW4gdGhlIENvbmZpZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGBCUEZfU1lTQ0FMTGAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgYXNzdW1pbmcgaXQmIzM5O3MgbGlrZWx5IGEga2VybmVsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLCBwcm9iYWJseSB1bmRlciBvbmUgb2YgdGhlIGJyb2FkZXIgQlBGIG9yIHNlY3VyaXR5LXJlbGF0ZWQgc2VjdGlvbnMuIFNpbmNlIGl0JiMzOTtzIGEgc3lzY2FsbC1yZWxhdGVkIGZlYXR1cmUsIEkgY2FuIGFsbW9zdCBndWFyYW50ZWUgaXRzIGV4aXN0ZW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSB0aGUgc3RhbmRhcmQgdG9vbHM7IGEgYGdyZXBgIHRocm91Z2ggdGhlIGtlcm5lbCYjMzk7cyBgS2NvbmZpZ2AgZmlsZXMgc2hvdWxkIGRvIHRoZSB0cmljaywgbWF5YmUgc3RhcnRpbmcgd2l0aCBhIHdpbGRjYXJkIHNlYXJjaCBsaWtlIGBLY29uZmlnKiBCUEZfU1lTQ0FMTGAuIE9yIHBlcmhhcHMgSSB3aWxsIHVzZSAmIzM5O2ZpbmQmIzM5OyBhbmQgJiMzOTtncmVwJiMzOTsgY29tbWFuZHMgdG8gc2VhcmNoLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGNvZGViYXNlLCBJIG1pZ2h0IG5lZWQgdG8gcmVmaW5lIHRoYXQgc2VhcmNoIGlmIGl0JiMzOTtzIHRvbyBicm9hZCBpbml0aWFsbHkuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBhcm91bmQgdGhhdCBvcHRpb24g4oCTIHdoYXQgb3RoZXIgZmVhdHVyZXMgZG9lcyBpdCBlbmFibGUgb3IgZGlzYWJsZT8gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQW5kIG1vcmUgaW1wb3J0YW50bHksIHdoYXQmIzM5O3MgdGhlIGRlZmF1bHQgdmFsdWUgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0PyBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIGNoZWNrIHJlbGV2YW50IGBNYWtlZmlsZWBzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29uZmlnIG9wdGlvbiB0cmFuc2xhdGVzIGludG8gYnVpbGQgZmxhZ3MgYW5kIHVsdGltYXRlbHksIGhvdyBpdCBhZmZlY3RzIHRoZSBnZW5lcmF0ZWQga2VybmVsIGNvZGUuIElkZWFsbHksIEkmIzM5O2xsIGZpbmQgYSBjb25jaXNlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIG9wdGlvbiBhY3R1YWxseSAqZG9lcyogYWxvbmcgdGhlIHdheS4gVGhhdCYjMzk7cyB0aGUgcHJpb3JpdHkgcmlnaHQgbm93LCBmaW5kaW5nIGl0cyBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI5PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTMwLVxua2VybmVsL2JwZi9LY29uZmlnOjMxOmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk1NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEJQRiBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIEJQRi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMS4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgdGhlIGNvcmUgZGVmaW5pdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHdoYXQgb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIHRvIGdldCB0aGUgYmFzaWMgQlBGIGluZnJhc3RydWN0dXJlIHVwIGFuZCBydW5uaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB3aGV0aGVyIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBmZWF0dXJlcyBhcmUgcmVxdWlyZWQsIGFueSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgQlBGIHJlbGllcyBvbiAobGlrZSB0cmFjaW5nIG9yIGluc3RydW1lbnRhdGlvbiBjYXBhYmlsaXRpZXMsIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQpLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gc2VlIGlmIGFueSBvdGhlciBCUEYgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgYWxzbyBkZWZpbmVkIGluIHRoaXMgZmlsZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgaWYgdGhlIGRlcGVuZGVuY2llcyBtYWtlIHNlbnNlIG9yIHNlZW0gdW51c3VhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cbiAgMjY6XHRjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxuICAyNzpcdFx0Ym9vbFxuICAyODpcdFxuICAyOTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAzMDpcdFxuICAzMTpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAzMjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMzM6XHRcdHNlbGVjdCBCUEZcbiAgMzQ6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzNTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDM2Olx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDM3Olx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzODpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzk6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICA0MDpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgNDE6XHRcdGRlZmF1bHQgblxuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQ0Olx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBCUEZfSklUXG4gIDQ3Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0OTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNTA6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDUxOlx0XHRoZWxwXG4gIDUyOlx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNTM6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDU0Olx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTU6XHRcdCAgcHJvZ3JhbXMuXG4gIDU2Olx0XG4gIDU3Olx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1ODpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTk6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA2MDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDYxOlx0XG4gIDYyOlx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDYzOlx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4gIDY0Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzcyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCBleGFjdGx5ICp3aGF0KiBoYXMgY2hhbmdlZCB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci4gSXQgbG9va3MgbGlrZSB0aGUgZm9jdXMgaXMgb24gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgc2NhbiBoaWdobGlnaHRzIGEgc2V0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBjZW50cmFsIHRvIHRoZSB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSSBzZWUgYGNoZWNrX2Z1bmNfY2FsbGAsIHdoaWNoIGlzIGtleSB0byBob3cgZnVuY3Rpb24gY2FsbHMgYXJlIGhhbmRsZWQsIGFuZCBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gY2FsbGVkIGBpbl9zbGVlcGFibGVfY29udGV4dGAsIGxpa2VseSByZWxhdGVkIHRvIGNvbnRleHQgY2hlY2tzLiBUaGVuIHRoZXJlJiMzOTtzIHRoZSBjb3JlIGxvZ2ljOiBgZG9fY2hlY2tfY29tbW9uYCwgYGRvX2NoZWNrX3N1YnByb2dzYCwgYW5kIGBkb19jaGVja19tYWluYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgd29ya2hvcnNlcyBvZiB0aGUgdmVyaWZpZXIsIGVhY2ggaGFuZGxpbmcgYSBzcGVjaWZpYyBhc3BlY3QuIEFuZCBvZiBjb3Vyc2UsIHRoZSBlbnRyeSBwb2ludCwgYGJwZl9jaGVja2AsIHdoaWNoIG9yY2hlc3RyYXRlcyBldmVyeXRoaW5nIGJ5IGNhbGxpbmcgYm90aCBgZG9fY2hlY2tfbWFpbmAgYW5kIGBkb19jaGVja19zdWJwcm9nc2AuCgpNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB0aG9yb3VnaGx5IHJldmlldyBgYnBmX2NoZWNrYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250cm9sIGZsb3cgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBjYWxsIGhpZXJhcmNoeS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgcGF0aHMgb2YgZXhlY3V0aW9uIHRocm91Z2ggdGhlIGRpZmZlcmVudCBgZG9fY2hlY2tfKmAgZnVuY3Rpb25zLCBjYXJlZnVsbHkgZXhhbWluaW5nIHRoZWlyIHJvbGVzIGFuZCBkYXRhIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2RpZmllZCB2ZXJpZmllciYjMzk7cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fY2hlY2tfc3VicHJvZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTY4PXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBib29sIGluX3NsZWVwYWJsZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTQtICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3NTU6c3RhdGljIGludCBkb19jaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzU2LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjEzMDY9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDk3LVx0cmV0ID0gZG9fY2hlY2tfbWFpbihlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxNDk4Olx0cmV0ID0gcmV0ID86IGRvX2NoZWNrX3N1YnByb2dzKGVudik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE0OTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDcyCgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDYzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgd2FudGVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBtb2RpZmllZCwgc28gSSB0cmFjZWQgdGhlIGNhbGxzIHRvIGBicGZfY2hlY2tgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHByaW1hcmlseSBjYWxsZWQgYnkgYGJwZl9wcm9nX2xvYWRgIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBJIHRoZW4gZXhwYW5kZWQgbXkgZm9jdXMgdG8gaW5jbHVkZSB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCB3ZXJlIGFsc28gbW9kaWZpZWQ6IGBjaGVja19mdW5jX2NhbGxgLCBgZG9fY2hlY2tfY29tbW9uYCwgYGRvX2NoZWNrX3N1YnByb2dzYCwgYW5kIGBkb19jaGVja19tYWluYC4KCkFyZSB0aGVzZSBnb29kIHRhcmdldHMgZm9yIGZvY3VzZWQgdGVzdGluZz8gRGVmaW5pdGVseS4gYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBCUEYgdmVyaWZpZXIuIGBkb19jaGVja19zdWJwcm9nc2AgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBnaXZlbiB0aGUgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIGl0ZXJhdGluZyBvdmVyIHNsZWVwYWJsZSB2ZXJzdXMgbm9uLXNsZWVwYWJsZSBjb250ZXh0cyBhbmQgdGhlIHRvcG9sb2dpY2FsIG9yZGVyIG9mIHN1YnByb2dyYW1zLiBgZG9fY2hlY2tfY29tbW9uYCB2ZXJpZmllcyB0aGUgc3VicHJvZ3JhbXMgYW5kIHRoZSBtYWluIHByb2dyYW0gdW5kZXIgYSBnaXZlbiBzbGVlcGFibGUgY29udGV4dCwgd2hpbGUgYGNoZWNrX2Z1bmNfY2FsbGAgaGFuZGxlcyB0aGUgcHNldWRvLWNhbGxzIGFuZCBtYXJrcyB0aGUgY2FsbCBjb250ZXh0LiBBbmQgYGRvX2NoZWNrX21haW5gIGlzLCBuYXR1cmFsbHksIHRoZSBtYWluIHByb2dyYW0gdmVyaWZpZXIuCgpJdCYjMzk7cyBjbGVhciB0aGF0IHRoZXNlIGFyZSAqbm90KiB1YmlxdWl0b3VzIGhvdHBhdGhzLCB3aGljaCBpcyBnb29kLiBCUEYgdmVyaWZpY2F0aW9uIGlzIG9ubHkgdHJpZ2dlcmVkIGJ5IHRoZSBgYnBmKEJQRl9QUk9HX0xPQUQpYCBzeXNjYWxsLiBUaGlzIG5hcnJvd3MgdGhlIHNjb3BlIGFuZCBtYWtlcyB0aGVzZSBmdW5jdGlvbnMgZXZlbiBiZXR0ZXIgdGFyZ2V0cyBmb3IgZm9jdXNzZWQgYW5hbHlzaXMuCgpOb3csIGxvb2tpbmcgYXQgdGhlIG1vZGlmaWVkIGZpbGVzLCB3ZSBoYXZlIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCwgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGFuZCBhIHNlbGYtdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY2AuIFRoZSBjb25maWcgd2UgbmVlZCB0byBlbmFibGUgaXMgYEJQRl9TWVNDQUxMYC4KCkNvbnNpZGVyaW5nIHRoaXMsIHRoZSBhbmFseXNpcyBzYXlzIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gVGhlIGp1c3RpZmljYXRpb24gaXMgc29saWQ6IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgQlBGIHZlcmlmaWVyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIGhhbmRsZSBnbG9iYWwgc3VicHJvZ3JhbSB2ZXJpZmljYXRpb24gZGlmZmVyZW50bHkgYmFzZWQgb24gc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIGNvbnRleHRzLiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gbG9vcCBvcmRlcnMsIHRvcG9sb2dpY2FsIG9yZGVyaW5nLCBhbmQgY29udGV4dCB0cmFja2luZy4gQmVjYXVzZSB0aGlzIHRvdWNoZXMgY29yZSB2ZXJpZmljYXRpb24gbG9naWMgYW5kIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYGJwZihCUEZfUFJPR19MT0FEKWAgc3lzdGVtIGNhbGwsIHRoZXJlJiMzOTtzIGEgc3Ryb25nIHBvdGVudGlhbCBmb3Igc3RhdGUgdmFsaWRhdGlvbiBwcm9ibGVtcywgaW5maW5pdGUgbG9vcHMsIG9yIGV2ZW4gdmVyaWZpZXIgY3Jhc2hlcy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNoYW5nZSB3ZSB3YW50IHRvIHRhcmdldC4KClNvLCBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGVzZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfc3VicHJvZ3MmIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfY29tbW9uJiMzNDssCiAgICAmIzM0O2NoZWNrX2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDtkb19jaGVja19tYWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdHJhY2sgYW5kIHZlcmlmeSBnbG9iYWwgc3VicHJvZ3JhbXMgc2VwYXJhdGVseSBhY3Jvc3Mgc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIGV4ZWN1dGlvbiBjb250ZXh0cywgbW9kaWZ5aW5nIHN1YnByb2dyYW0gdmVyaWZpY2F0aW9uIGxvb3BzLCB0b3BvbG9naWNhbCB0cmF2ZXJzYWwgb3JkZXIsIGFuZCBjb250ZXh0IHN0YXRlIGhhbmRsaW5nIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfc3VicHJvZ3MmIzM0OywKICAgICYjMzQ7ZG9fY2hlY2tfY29tbW9uJiMzNDssCiAgICAmIzM0O2NoZWNrX2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDtkb19jaGVja19tYWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdHJhY2sgYW5kIHZlcmlmeSBnbG9iYWwgc3VicHJvZ3JhbXMgc2VwYXJhdGVseSBhY3Jvc3Mgc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIGV4ZWN1dGlvbiBjb250ZXh0cywgbW9kaWZ5aW5nIHN1YnByb2dyYW0gdmVyaWZpY2F0aW9uIGxvb3BzLCB0b3BvbG9naWNhbCB0cmF2ZXJzYWwgb3JkZXIsIGFuZCBjb250ZXh0IHN0YXRlIGhhbmRsaW5nIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdHJhY2sgYW5kIHZlcmlmeSBnbG9iYWwgc3VicHJvZ3JhbSBjYWxscyBzZXBhcmF0ZWx5IGZvciBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUvUkNVIGNvbnRleHRzLiBJdCByZXBsYWNlcyB0aGUgc2luZ2xlLWJpdCBgY2FsbGVkYCBhbmQgYHZlcmlmaWVkYCBmbGFncyBpbiBgc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4YCB3aXRoIHR3by1lbGVtZW50IGJvb2xlYW4gYXJyYXlzIGluZGV4ZWQgYnkgYGluX3NsZWVwYWJsZWAuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4gVGhlIGBicGZfZnVuY19pbmZvX2F1eGAgc3RydWN0dXJlcyBhcmUgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKHZpYSBga3phbGxvY19vYmpzYCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gYGRvX2NoZWNrX3N1YnByb2dzKClgLCBgZG9fY2hlY2tfY29tbW9uKClgLCBhbmQgYGNoZWNrX2Z1bmNfY2FsbCgpYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZSBhcnJheXMgYXJlIGluZGV4ZWQgdXNpbmcgYm9vbGVhbiB2YWx1ZXMgKDAgb3IgMSksIG1hdGNoaW5nIHRoZSBhcnJheSBkaW1lbnNpb24uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4tIEtBU0FOIC8gU3RhbmRhcmQgRGV0ZWN0b3JzOiBBbnkgbWVtb3J5IGFjY2VzcyBpc3N1ZXMgKHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHN0YXRlIGFsbG9jYXRpb24gaXNzdWVzLCBvciBsb2dpYy92ZXJpZmllciB0cmF2ZXJzYWwgYnVncykgd291bGQgYmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTZlZmE2MDNhMGQ1MjJlNmVlYzYzMjMwZDE5YTZlMjYwZGZlZTNkOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTA6MDU6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCAzYTdlYjIxODVjMzU0Li42NmQwNDI0NGM3Mzc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTE2NTAsOCAmIzQzOzE2NTAsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFncwogc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4IHsKIAl1MTYgbGlua2FnZTsKIAlib29sIHVucmVsaWFibGU7Ci0JYm9vbCBjYWxsZWQgOiAxOwotCWJvb2wgdmVyaWZpZWQgOiAxOwomIzQzOwkvKiBJbmRleGVkIGJ5IGluX3NsZWVwYWJsZS4gKi8KJiM0MzsJYm9vbCBjYWxsZWRbMl07CiYjNDM7CWJvb2wgdmVyaWZpZWRbMl07CiB9OwogCiBlbnVtIGJwZl9qaXRfcG9rZV9yZWFzb24gewpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDViNTFlN2VlMWEzZjkuLmY3NTlhMDIwYzhhNWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTk5NTcsNiAmIzQzOzk5NTcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJaWYgKGVyciA9PSAtRUZBVUxUKQogCQlyZXR1cm4gZXJyOwogCWlmIChicGZfc3VicHJvZ19pc19nbG9iYWwoZW52LCBzdWJwcm9nKSkgewomIzQzOwkJc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICpzdWJfYXV4ID0gc3VicHJvZ19hdXgoZW52LCBzdWJwcm9nKTsKIAkJY29uc3QgY2hhciAqc3ViX25hbWUgPSBicGZfc3VicHJvZ19uYW1lKGVudiwgc3VicHJvZyk7CiAJCWNvbnN0IGNoYXIgKm9wZXJhdGlvbjsKIAkJYm9vbCByZXR1cm5zX3ZvaWQ7CkBAIC05OTg4LDExICYjNDM7OTk4OSwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCWlmIChlbnYtJmd0O2xvZy5sZXZlbCAmYW1wOyBCUEZfTE9HX0xFVkVMKQogCQkJdmVyYm9zZShlbnYsICYjMzQ7RnVuYyMlZCAoJiMzOTslcyYjMzk7KSBpcyBnbG9iYWwgYW5kIGFzc3VtZWQgdmFsaWQuXG4mIzM0OywKIAkJCQlzdWJwcm9nLCBzdWJfbmFtZSk7CiYjNDM7CQlzdWJfYXV4LSZndDtjYWxsZWRbaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KV0gPSB0cnVlOwogCQlyZXR1cm5zX3ZvaWQgPSBzdWJwcm9nX3JldHVybnNfdm9pZChlbnYsIHN1YnByb2cpOwogCQlpZiAoZW52LSZndDtzdWJwcm9nX2luZm9bc3VicHJvZ10uY2hhbmdlc19wa3RfZGF0YSkKIAkJCWNsZWFyX2FsbF9wa3RfcG9pbnRlcnMoZW52KTsKLQkJLyogbWFyayBnbG9iYWwgc3VicHJvZyBmb3IgdmVyaWZ5aW5nIGFmdGVyIG1haW4gcHJvZyAqLwotCQlzdWJwcm9nX2F1eChlbnYsIHN1YnByb2cpLSZndDtjYWxsZWQgPSB0cnVlOwogCQlpZiAocmV0dXJuc192b2lkKQogCQkJYnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgJmFtcDtjYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18wXSwgQlBGX0RJQUdfTU9EX0NBTExFUl9TQVZFRCk7CiAJCWVsc2UKQEAgLTEwODA0LDcgJiM0MzsxMDgwNCwxMiBAQCBpbnQgYnBmX2dldF9oZWxwZXJfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGZ1bmNfaWQsCiAJcmV0dXJuICpwdHIgJmFtcDsmYW1wOyAoKnB0ciktJmd0O2Z1bmMgPyAwIDogLUVJTlZBTDsKIH0KIAotLyogQ2hlY2sgaWYgd2UmIzM5O3JlIGluIGEgc2xlZXBhYmxlIGNvbnRleHQuICovCiYjNDM7LyoKJiM0MzsgKiBUaGlzIHByZWRpY2F0ZSBpcyB0aGUgaW52ZXJzZSBvZiBpbl9yY3VfY3MoKTogbm9uLXNsZWVwYWJsZSBwcm9ncmFtcyBhbmQKJiM0MzsgKiBldmVyeSBjb25kaXRpb24gdGhhdCBwcmV2ZW50cyBzbGVlcGluZyBhbHNvIHByb3ZpZGUgUkNVIHByb3RlY3Rpb24uIEdsb2JhbAomIzQzOyAqIHN1YnByb2cgdmVyaWZpY2F0aW9uIHJlbGllcyBvbiB0aGlzIGVxdWl2YWxlbmNlIHRvIHJlcHJlc2VudCB0aGUgY2FsbGVyJiMzOTtzCiYjNDM7ICogZXhlY3V0aW9uIGNvbnRleHQgdXNpbmcgb25seSB0aGUgaW5fc2xlZXBhYmxlIGJpdC4KJiM0MzsgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBpbl9zbGVlcGFibGVfY29udGV4dChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogewogCXJldHVybiAhZW52LSZndDtjdXJfc3RhdGUtJmd0O2FjdGl2ZV9yY3VfbG9ja3MgJmFtcDsmYW1wOwpAQCAtMTk1NjAsMTMgJiM0MzsxOTU2NSwxNCBAQCBzdGF0aWMgdm9pZCBmcmVlX3N0YXRlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCX0KIH0KIAotc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpCiYjNDM7c3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2csIGJvb2wgaW5fc2xlZXBhYmxlKQogewogCWJvb2wgcG9wX2xvZyA9ICEoZW52LSZndDtsb2cubGV2ZWwgJmFtcDsgQlBGX0xPR19MRVZFTDIpOwogCXN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWIgPSBzdWJwcm9nX2luZm8oZW52LCBzdWJwcm9nKTsKIAlzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtJmd0O3Byb2ctJmd0O2F1eDsKIAlzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGF0ZTsKIAlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnczsKJiM0MzsJdTMyIG9sZF9pbnNuc190b3RhbCA9IHN1Yi0mZ3Q7aW5zbnNfdG90YWw7CiAJdTMyIGluc25fcHJvY2Vzc2VkID0gZW52LSZndDtpbnNuX3Byb2Nlc3NlZDsKIAlpbnQgcmV0LCBpOwogCkBAIC0xOTU3OSw3ICYjNDM7MTk1ODUsNyBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZykKIAlzdGF0ZS0mZ3Q7Y3VyZnJhbWUgPSAwOwogCXN0YXRlLSZndDtzcGVjdWxhdGl2ZSA9IGZhbHNlOwogCXN0YXRlLSZndDticmFuY2hlcyA9IDE7Ci0Jc3RhdGUtJmd0O2luX3NsZWVwYWJsZSA9IGVudi0mZ3Q7cHJvZy0mZ3Q7c2xlZXBhYmxlOwomIzQzOwlzdGF0ZS0mZ3Q7aW5fc2xlZXBhYmxlID0gaW5fc2xlZXBhYmxlOwogCXN0YXRlLSZndDtmcmFtZVswXSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBicGZfZnVuY19zdGF0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIXN0YXRlLSZndDtmcmFtZVswXSkgewogCQlrZnJlZShzdGF0ZSk7CkBAIC0xOTcyMSw3ICYjNDM7MTk3MjcsOCBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZykKIAkgKiBBY2N1bXVsYXRlIHRoZWlyIHRvdGFsIGNvdW50cyBhcyB0b3RhbCBjb3VudHMgb2YgdGhlIG1haW4gb3IKIAkgKiBnbG9iYWwgc3VicHJvZyBob3N0aW5nIHRoZSBhc3luYyBjYWxsLgogCSAqLwotCWVudi0mZ3Q7c3VicHJvZ19pbmZvW3N1YnByb2ddLmluc25zX3RvdGFsID0gZW52LSZndDtpbnNuX3Byb2Nlc3NlZCAtIGluc25fcHJvY2Vzc2VkOwomIzQzOwllbnYtJmd0O3N1YnByb2dfaW5mb1tzdWJwcm9nXS5pbnNuc190b3RhbCA9IG9sZF9pbnNuc190b3RhbCAmIzQzOwomIzQzOwkJCQkJCShlbnYtJmd0O2luc25fcHJvY2Vzc2VkIC0gaW5zbl9wcm9jZXNzZWQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE5NzQ5LDQ1ICYjNDM7MTk3NTYsNTUgQEAgc3RhdGljIGludCBkb19jaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogewogCXN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCA9IGVudi0mZ3Q7cHJvZy0mZ3Q7YXV4OwogCXN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eDsKLQlpbnQgaSwgcmV0LCBuZXdfY250OwomIzQzOwlpbnQgY29udGV4dCwgaSwgaiwgcmV0LCBuZXdfY250OwogCiAJaWYgKCFhdXgtJmd0O2Z1bmNfaW5mbykKIAkJcmV0dXJuIDA7CiAKIAkvKiBleGNlcHRpb24gY2FsbGJhY2sgaXMgcHJlc3VtZWQgdG8gYmUgYWx3YXlzIGNhbGxlZCAqLwotCWlmIChlbnYtJmd0O2V4Y2VwdGlvbl9jYWxsYmFja19zdWJwcm9nKQotCQlzdWJwcm9nX2F1eChlbnYsIGVudi0mZ3Q7ZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpLSZndDtjYWxsZWQgPSB0cnVlOwomIzQzOwlpZiAoZW52LSZndDtleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZykgewomIzQzOwkJc3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgZW52LSZndDtleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZyk7CiYjNDM7CQlzdWJfYXV4LSZndDtjYWxsZWRbZW52LSZndDtwcm9nLSZndDtzbGVlcGFibGVdID0gdHJ1ZTsKJiM0MzsJfQogCiBhZ2FpbjoKIAluZXdfY250ID0gMDsKLQlmb3IgKGkgPSAxOyBpICZsdDsgZW52LSZndDtzdWJwcm9nX2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJLyoKJiM0MzsJICogV2FsayBjYWxsZXJzIGJlZm9yZSBjYWxsZWVzIHNvIGVhY2ggZ2xvYmFsIHN1YnByb2cgbm9ybWFsbHkgc2VlcyBhbGwKJiM0MzsJICogb2YgaXRzIGNvbnRleHRzIGJlZm9yZSBpdCBpcyB2ZXJpZmllZC4gQXN5bmMgY2FsbGJhY2sgY3ljbGVzIGNhbiBhZGQgYQomIzQzOwkgKiBjb250ZXh0IHRvIGFuIGVhcmxpZXIgc3VicHJvZywgc28gcmVwZWF0IHVudGlsIGV2ZXJ5IGNhbGxlZCBjb250ZXh0IGlzCiYjNDM7CSAqIHZlcmlmaWVkLgomIzQzOwkgKi8KJiM0MzsJZm9yIChqID0gZW52LSZndDtzdWJwcm9nX2NudCAtIDE7IGogJmd0Oz0gMDsgai0tKSB7CiYjNDM7CQlpID0gZW52LSZndDtzdWJwcm9nX3RvcG9fb3JkZXJbal07CiYjNDM7CQlpZiAoIWkpCiYjNDM7CQkJY29udGludWU7CiAJCWlmICghYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGVudiwgaSkpCiAJCQljb250aW51ZTsKIAogCQlzdWJfYXV4ID0gc3VicHJvZ19hdXgoZW52LCBpKTsKLQkJaWYgKCFzdWJfYXV4LSZndDtjYWxsZWQgfHwgc3ViX2F1eC0mZ3Q7dmVyaWZpZWQpCi0JCQljb250aW51ZTsKJiM0MzsJCWZvciAoY29udGV4dCA9IDA7IGNvbnRleHQgJmx0OyBBUlJBWV9TSVpFKHN1Yl9hdXgtJmd0O2NhbGxlZCk7IGNvbnRleHQmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKCFzdWJfYXV4LSZndDtjYWxsZWRbY29udGV4dF0gfHwgc3ViX2F1eC0mZ3Q7dmVyaWZpZWRbY29udGV4dF0pCiYjNDM7CQkJCWNvbnRpbnVlOwogCi0JCWVudi0mZ3Q7aW5zbl9pZHggPSBlbnYtJmd0O3N1YnByb2dfaW5mb1tpXS5zdGFydDsKLQkJV0FSTl9PTl9PTkNFKGVudi0mZ3Q7aW5zbl9pZHggPT0gMCk7Ci0JCXJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIGkpOwotCQlpZiAocmV0KSB7Ci0JCQlyZXR1cm4gcmV0OwotCQl9IGVsc2UgaWYgKGVudi0mZ3Q7bG9nLmxldmVsICZhbXA7IEJQRl9MT0dfTEVWRUwpIHsKLQkJCXZlcmJvc2UoZW52LCAmIzM0O0Z1bmMjJWQgKCYjMzk7JXMmIzM5OykgaXMgc2FmZSBmb3IgYW55IGFyZ3MgdGhhdCBtYXRjaCBpdHMgcHJvdG90eXBlXG4mIzM0OywKLQkJCQlpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgaSkpOwotCQl9CiYjNDM7CQkJZW52LSZndDtpbnNuX2lkeCA9IGVudi0mZ3Q7c3VicHJvZ19pbmZvW2ldLnN0YXJ0OwomIzQzOwkJCVdBUk5fT05fT05DRShlbnYtJmd0O2luc25faWR4ID09IDApOwomIzQzOwkJCXJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIGksIGNvbnRleHQpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQkJaWYgKGVudi0mZ3Q7bG9nLmxldmVsICZhbXA7IEJQRl9MT0dfTEVWRUwpCiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0O0Z1bmMjJWQgKCYjMzk7JXMmIzM5OykgaXMgc2FmZSBmb3IgYW55IGFyZ3MgJiMzNDsKJiM0MzsJCQkJCSYjMzQ7dGhhdCBtYXRjaCBpdHMgcHJvdG90eXBlXG4mIzM0OywKJiM0MzsJCQkJCWksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBpKSk7CiAKLQkJLyogV2UgdmVyaWZpZWQgbmV3IGdsb2JhbCBzdWJwcm9nLCBpdCBtaWdodCBoYXZlIGNhbGxlZCBzb21lCi0JCSAqIG1vcmUgZ2xvYmFsIHN1YnByb2dzIHRoYXQgd2UgaGF2ZW4mIzM5O3QgdmVyaWZpZWQgeWV0LCBzbyB3ZQotCQkgKiBuZWVkIHRvIGRvIGFub3RoZXIgcGFzcyBvdmVyIHN1YnByb2dzIHRvIHZlcmlmeSB0aG9zZS4KLQkJICovCi0JCXN1Yl9hdXgtJmd0O3ZlcmlmaWVkID0gdHJ1ZTsKLQkJbmV3X2NudCYjNDM7JiM0Mzs7CiYjNDM7CQkJc3ViX2F1eC0mZ3Q7dmVyaWZpZWRbY29udGV4dF0gPSB0cnVlOwomIzQzOwkJCW5ld19jbnQmIzQzOyYjNDM7OwomIzQzOwkJfQogCX0KIAotCS8qIFdlIGNhbiYjMzk7dCBsb29wIGZvcmV2ZXIgYXMgd2UgdmVyaWZ5IGF0IGxlYXN0IG9uZSBnbG9iYWwgc3VicHJvZyBvbgotCSAqIGVhY2ggcGFzcy4KJiM0MzsJLyoKJiM0MzsJICogV2UgY2FuJiMzOTt0IGxvb3AgZm9yZXZlciBhcyBlYWNoIHBhc3MgdmVyaWZpZXMgYXQgbGVhc3Qgb25lIG5ldyBjb250ZXh0LAomIzQzOwkgKiBhbmQgdGhlcmUgYXJlIG9ubHkgdHdvIGNvbnRleHRzIHBlciBnbG9iYWwgc3VicHJvZy4KIAkgKi8KIAlpZiAobmV3X2NudCkKIAkJZ290byBhZ2FpbjsKQEAgLTE5ODAwLDcgJiM0MzsxOTgxNyw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfbWFpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCWludCByZXQ7CiAKIAllbnYtJmd0O2luc25faWR4ID0gMDsKLQlyZXQgPSBkb19jaGVja19jb21tb24oZW52LCAwKTsKJiM0MzsJcmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgMCwgZW52LSZndDtwcm9nLSZndDtzbGVlcGFibGUpOwogCWlmICghcmV0KQogCQllbnYtJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7c3RhY2tfZGVwdGggPSBlbnYtJmd0O3N1YnByb2dfaW5mb1swXS5zdGFja19kZXB0aDsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMKaW5kZXggNmJmOTU1NTBhMDI0OC4uOTg3Y2E5ZGVjNmI3ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jCkBAIC05LDYgJiM0Mzs5LDExIEBACiAKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKIAomIzQzO3N0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTsKJiM0Mzt2b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07CiYjNDM7dm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07CiYjNDM7dm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTsKJiM0MzsKIC8qIFRpbWVyIHRlc3RzICovCiAKIHN0cnVjdCB0aW1lcl9lbGVtIHsKQEAgLTY2LDYgJiM0Mzs3MSw3IEBAIGludCB0aW1lcl9zbGVlcGFibGVfcHJvZyh2b2lkICpjdHgpCiAKIHN0cnVjdCB3cV9lbGVtIHsKIAlzdHJ1Y3QgYnBmX3dxIHc7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCBfX2twdHIgKnRhc2s7CiB9OwogCiBzdHJ1Y3QgewpAQCAtMTE5LDYgJiM0MzsxMjUsMTA2IEBAIGludCB3cV9zbGVlcGFibGVfcHJvZyh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztfX25vaW5saW5lIGludCB3cV9nbG9iYWxfYWNxdWlyZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAqYWNxdWlyZWQ7CiYjNDM7CXN0cnVjdCB3cV9lbGVtICp2YWw7CiYjNDM7CWludCBrZXkgPSAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7d3FfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXRhc2sgPSB2YWwtJmd0O3Rhc2s7CiYjNDM7CWlmICghdGFzaykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlhY3F1aXJlZCA9IGJwZl90YXNrX2FjcXVpcmUodGFzayk7CiYjNDM7CWlmIChhY3F1aXJlZCkKJiM0MzsJCWJwZl90YXNrX3JlbGVhc2UoYWNxdWlyZWQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cV9nbG9iYWxfcmN1X2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKQomIzQzO3sKJiM0MzsJd3FfZ2xvYmFsX2FjcXVpcmUoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyJiMzNDspCiYjNDM7aW50IHdxX2dsb2JhbF9yY3VfcHJvZyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3FfZWxlbSAqdmFsOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3dxX21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfd3FfaW5pdCgmYW1wO3ZhbC0mZ3Q7dywgJmFtcDt3cV9tYXAsIDApOwomIzQzOwlicGZfd3Ffc2V0X2NhbGxiYWNrKCZhbXA7dmFsLSZndDt3LCB3cV9nbG9iYWxfcmN1X2NiLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3FfZ2xvYmFsX3JjdV9sb2NrX2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKQomIzQzO3sKJiM0MzsJYnBmX3JjdV9yZWFkX2xvY2soKTsKJiM0MzsJd3FfZ2xvYmFsX2FjcXVpcmUoKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7ZmVudHJ5L2JwZl9mZW50cnlfdGVzdDEmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgd3FfZ2xvYmFsX3JjdV9sb2NrX3Byb2codm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHdxX2VsZW0gKnZhbDsKJiM0MzsJaW50IGtleSA9IDA7CiYjNDM7CiYjNDM7CS8qIFZlcmlmeSB0aGUgc2FtZSBnbG9iYWwgc3VicHJvZyBpbiBub24tc2xlZXBhYmxlIGFuZCBwcm90ZWN0ZWQgY29udGV4dHMuICovCiYjNDM7CXdxX2dsb2JhbF9hY3F1aXJlKCk7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDt3cV9tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX3dxX2luaXQoJmFtcDt2YWwtJmd0O3csICZhbXA7d3FfbWFwLCAwKTsKJiM0MzsJYnBmX3dxX3NldF9jYWxsYmFjaygmYW1wO3ZhbC0mZ3Q7dywgd3FfZ2xvYmFsX3JjdV9sb2NrX2NiLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO19fbm9pbmxpbmUgaW50IHdxX2dsb2JhbF9ub19yY3Uodm9pZCkKJiM0Mzt7CiYjNDM7CWJhcnJpZXIoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3FfZ2xvYmFsX25vX3JjdV9jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXdxX2dsb2JhbF9ub19yY3UoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IHdxX2dsb2JhbF9ub19yY3VfcHJvZyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3FfZWxlbSAqdmFsOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJLyogVmVyaWZ5IHRoZSBzYW1lIGdsb2JhbCBpbiBub24tc2xlZXBhYmxlIGFuZCB1bnByb3RlY3RlZCBjb250ZXh0cy4gKi8KJiM0MzsJd3FfZ2xvYmFsX25vX3JjdSgpOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7d3FfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl93cV9pbml0KCZhbXA7dmFsLSZndDt3LCAmYW1wO3dxX21hcCwgMCk7CiYjNDM7CWJwZl93cV9zZXRfY2FsbGJhY2soJmFtcDt2YWwtJmd0O3csIHdxX2dsb2JhbF9ub19yY3VfY2IsIDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBUYXNrIHdvcmsgdGVzdHMgKi8KIAogc3RydWN0IHRhc2tfd29ya19lbGVtIHsKQEAgLTE3OSwzICYjNDM7Mjg1LDI5IEBAIGludCB0YXNrX3dvcmtfc2xlZXBhYmxlX3Byb2codm9pZCAqY3R4KQogCWJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHRhc2ssICZhbXA7dmFsLSZndDt0dywgJmFtcDt0YXNrX3dvcmtfbWFwLCB0YXNrX3dvcmtfY2IpOwogCXJldHVybiAwOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGFza193b3JrX2dsb2JhbF9yY3VfY2Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiB3cV9nbG9iYWxfYWNxdWlyZSgpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1IxIG11c3QgYmUgYSByY3UgcG9pbnRlciYjMzQ7KQomIzQzO2ludCB0YXNrX3dvcmtfZ2xvYmFsX3JjdV9wcm9nKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3dvcmtfZWxlbSAqdmFsOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiYjNDM7CWludCBrZXkgPSAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGFza193b3JrX21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7CiYjNDM7CWlmICghdGFzaykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSh0YXNrLCAmYW1wO3ZhbC0mZ3Q7dHcsICZhbXA7dGFza193b3JrX21hcCwKJiM0MzsJCQkJICAgICAgdGFza193b3JrX2dsb2JhbF9yY3VfY2IpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTAwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIE5lZWQgZm9yIGEgRGVkaWNhdGVkIEtNU0FOIEZ1enppbmcgU2Vzc2lvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBzcGlubmluZyB1cCBhIHNlcGFyYXRlIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYmV5b25kIHdoYXQgd2UmIzM5O3JlIGFscmVhZHkgZG9pbmcgd2l0aCBLQVNBTi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHRocm91Z2ggdGhlIGNoYW5nZXMgbWV0aG9kaWNhbGx5IGFuZCB0aGVuIG1ha2UgdGhlIGNhbGwuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gSSYjMzk7bGwgZXhhbWluZSB0aGUgY29kZSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHRoZXkgcmVsYXRlIHRvIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IEtNU0FOIG1pZ2h0IGNhdGNoIGJldHRlciB0aGFuIEtBU0FOLgoKQWxyaWdodCwgdGhlIHBhdGNoIHRvdWNoZXMgYGluY2x1ZGUvbGludXgvYnBmLmhgIGFuZCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYW5kIGluY2x1ZGVzIGEgc2VsZi10ZXN0LiBMZXTigJlzIHN0YXJ0IHdpdGggYGluY2x1ZGUvbGludXgvYnBmLmhgLiBUaGV5JiMzOTt2ZSBtb2RpZmllZCBgc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4YC4gVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoZSBjaGFuZ2UgZnJvbSBzaW5nbGUgYGNhbGxlZGAgYW5kIGB2ZXJpZmllZGAgYm9vbHMgdG8gYXJyYXlzOiBgY2FsbGVkWzJdYCBhbmQgYHZlcmlmaWVkWzJdYC4gSW5kZXhlZCBieSBgaW5fc2xlZXBhYmxlX2NvbnRleHRgLiBUaGlzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgY29udGV4dC1zZW5zaXRpdmUgY2hhbmdlLCBsaWtlbHkgZGVhbGluZyB3aXRoIGhvdyBCUEYgZnVuY3Rpb25zIGJlaGF2ZSBpbiBzbGVlcGFibGUgdmVyc3VzIG5vbi1zbGVlcGFibGUgY29udGV4dHMuCgpNb3Zpbmcgb24gdG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuICBJIHNlZSB0aGUgYGNoZWNrX2Z1bmNfY2FsbCgpYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIHNldCBgc3ViX2F1eC0mZ3Q7Y2FsbGVkW2luX3NsZWVwYWJsZV9jb250ZXh0KGVudildID0gdHJ1ZTtgLiAgVGhlIHZlcmlmaWVyIGlzIG5vdyB0cmFja2luZyBjYWxscyBiYXNlZCBvbiB3aGV0aGVyIHRoZXkgb2NjdXIgaW4gYSBzbGVlcGFibGUgY29udGV4dC4gIEFsc28sIGBkb19jaGVja19jb21tb25gIG5vdyBleHBsaWNpdGx5IHBhc3NlcyBgaW5fc2xlZXBhYmxlYCB0byBgc3RhdGUtJmd0O2luX3NsZWVwYWJsZWAuICBGaW5hbGx5LCBgZG9fY2hlY2tfc3VicHJvZ3MoKWAgaXRlcmF0ZXMgYW5kIHNldHMgYHN1Yl9hdXgtJmd0O3ZlcmlmaWVkW2NvbnRleHRdID0gdHJ1ZTtgLiBgZG9fY2hlY2tfbWFpbigpYCBsb29rcyBsaWtlIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBzbyBJJiMzOTtsbCBjaGVjayBpZiB0aGUgY2hhbmdlIGlzIGxpbWl0ZWQgdG8gYSBzaW5nbGUgY29udGV4dCAoZS5nLiBgbWFpbmAgb25seSkuCgpUaGlzIGFsbCBwb2ludHMgdG8gY2hhbmdlcyBpbiBob3cgdGhlIEJQRiB2ZXJpZmllciBoYW5kbGVzIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cy4gVGhpcyBpcyBteSBpbnR1aXRpb24uIEl0JiMzOTtzIGxpa2VseSB0aGF0IHRoZXkmIzM5O3JlIHRyeWluZyB0byBpbXByb3ZlIHZlcmlmaWNhdGlvbiBvZiBCUEYgcHJvZ3JhbXMgdGhhdCBtaWdodCBpbnRlcmFjdCB3aXRoIHRoZXNlIHNsZWVwYWJsZSBjb250ZXh0cy4KCk5vdywgSSBuZWVkIHRvIGtub3cgbW9yZSBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eGAuICBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIChvciBzaW1pbGFyIHRvb2xzKSB0byBmaW5kIHdoZXJlIHRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSBhbmQgaWYgdGhlcmUgYXJlIG5ldyBwb3RlbnRpYWwgcGF0aHMgb2YgbWVtb3J5IGNvcnJ1cHRpb24uIEJhc2VkIG9uIHdoZXJlIGl0JiMzOTtzIGFsbG9jYXRlZCBhbmQgaG93IGl0JiMzOTtzIHVzZWQsIEkgY2FuIGdldCBhIGJldHRlciBzZW5zZSBpZiB0aGlzIGlzIGEgS01TQU4gdHJpZ2dlciBvciBub3QuCgpGcm9tIHRoaXMsIEkmIzM5O2xsIGFzc2VzcyB3aGV0aGVyIGEgc2VwYXJhdGUgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIGxpa2VseSB0byBleHBvc2UgbmV3IHZ1bG5lcmFiaWxpdGllcyB0aGF0IGFyZSBtaXNzZWQgYnkgdGhlIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuIElmIHRoZSBhbGxvY2F0aW9uL3VzZSBvZiB0aGlzIHN0cnVjdCBpcyBpbiBhIGNyaXRpY2FsIHNlY3Rpb24sIG9yIHVzZXMgbG9ja2luZyB0aGF0IGlzIG5vdCBLQVNBTi12ZXJpZmllZCwgdGhlbiBJIHdpbGwgc3Ryb25nbHkgY29uc2lkZXIgS01TQU4gZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnVuY19pbmZvX2F1eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdD0xMjA9SXQgcHJvZHVjZXMgdGhlIG91dHB1dDo6XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvZHJnbi5yc3QtMTgyLSAgICAgICAgICAgIC5mdW5jX2luZm8gPSAoc3RydWN0IGJwZl9mdW5jX2luZm8gKikweGZmZmY4ODlmZjc5NWQyNDAsXG5Eb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdDoxODM6ICAgICAgICAgICAgLmZ1bmNfaW5mb19hdXggPSAoc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICopMHhmZmZmODg5ZmY3OTVkZTIwLFxuRG9jdW1lbnRhdGlvbi9icGYvZHJnbi5yc3QtMTg0LSAgICAgICAgICAgIC5saW5mbyA9IChzdHJ1Y3QgYnBmX2xpbmVfaW5mbyAqKTB4ZmZmZjg4OGE3MDdhZmMwMCxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE2NDc9c3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MpIHt9XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0xNjQ5LVxuaW5jbHVkZS9saW51eC9icGYuaDoxNjUwOnN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCB7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE2NTEtXHR1MTYgbGlua2FnZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE3NDI9c3RydWN0IGJwZl9wcm9nX2F1eCB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0xODI4LVx0c3RydWN0IGJwZl9mdW5jX2luZm8gKmZ1bmNfaW5mbztcbmluY2x1ZGUvbGludXgvYnBmLmg6MTgyOTpcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqZnVuY19pbmZvX2F1eDtcbmluY2x1ZGUvbGludXgvYnBmLmgtMTgzMC1cdC8qIGJwZl9saW5lX2luZm8gbG9hZGVkIGZyb20gdXNlcnNwYWNlLiAgbGluZm8tXHUwMDNlaW5zbl9vZmZcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTkxOT1zdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiB7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMDUwLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMDUxOnN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICpzdWJwcm9nX2F1eChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTA1Mi17XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjEwNTM6XHRyZXR1cm4gXHUwMDI2ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWZ1bmNfaW5mb19hdXhbc3VicHJvZ107XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTEwNTQtfVxuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODAwNz1pbnQgYnRmX3ByZXBhcmVfZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtODA0Ny1cbmtlcm5lbC9icGYvYnRmLmM6ODA0ODpcdGlmIChwcm9nLVx1MDAzZWF1eC1cdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2ddLnVucmVsaWFibGUpIHtcbmtlcm5lbC9icGYvYnRmLmMtODA0OS1cdFx0dmVyaWZpZXJfYnVnKGVudiwgXCYjMzQ7dW5yZWxpYWJsZSBCVEYgZm9yIGZ1bmN0aW9uICVzKClcJiMzNDssIHRuYW1lKTtcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTEzMz1zdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy0xMzktXHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyAqa3JlY29yZDtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6MTQwOlx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICppbmZvX2F1eCA9IE5VTEw7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTE0MS1cdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTIwMS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6MjAyOlx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlZnVuY19pbmZvX2F1eCA9IGluZm9fYXV4O1xua2VybmVsL2JwZi9jaGVja19idGYuYy0yMDMtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTQwMT1zdGF0aWMgaW50IGFkanVzdF9zdWJwcm9nX3N0YXJ0c19hZnRlcl9yZW1vdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTQzOC1cdFx0XHRcdHNpemVvZigqYXV4LVx1MDAzZWZ1bmNfaW5mbykgKiBtb3ZlKTtcbmtlcm5lbC9icGYvZml4dXBzLmM6NDM5Olx0XHRcdGlmIChhdXgtXHUwMDNlZnVuY19pbmZvX2F1eClcbmtlcm5lbC9icGYvZml4dXBzLmM6NDQwOlx0XHRcdFx0bWVtbW92ZShhdXgtXHUwMDNlZnVuY19pbmZvX2F1eCAmIzQzOyBpLFxua2VybmVsL2JwZi9maXh1cHMuYzo0NDE6XHRcdFx0XHRcdGF1eC1cdTAwM2VmdW5jX2luZm9fYXV4ICYjNDM7IGosXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjQ0MjpcdFx0XHRcdFx0c2l6ZW9mKCphdXgtXHUwMDNlZnVuY19pbmZvX2F1eCkgKiBtb3ZlKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtNDQzLVx0XHRcdGF1eC1cdTAwM2VmdW5jX2luZm9fY250IC09IGogLSBpO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI0NDA9c3RhdGljIHZvaWQgX19icGZfcHJvZ19wdXRfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI0NDQtXHRrdmZyZWUoYXV4LVx1MDAzZWZ1bmNfaW5mbyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNDQ1Olx0a2ZyZWUoYXV4LVx1MDAzZWZ1bmNfaW5mb19hdXgpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMjQ0Ni1cdGZyZWVfdWlkKGF1eC1cdTAwM2V1c2VyKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzgyPWJvb2wgYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM4My17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzg0Olx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICphdXggPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlZnVuY19pbmZvX2F1eDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zODUtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk4Mzk9c3RhdGljIGludCBidGZfY2hlY2tfc3VicHJvZ19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05ODUzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjk4NTQ6XHRpZiAocHJvZy1cdTAwM2VhdXgtXHUwMDNlZnVuY19pbmZvX2F1eFtzdWJwcm9nXS51bnJlbGlhYmxlKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk4NTUtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05ODYyLVx0aWYgKGVycilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5ODYzOlx0XHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2ddLnVucmVsaWFibGUgPSB0cnVlO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTk4NjQtXHRyZXR1cm4gZXJyO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05OTM5PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk1OS1cdGlmIChicGZfc3VicHJvZ19pc19nbG9iYWwoZW52LCBzdWJwcm9nKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjk5NjA6XHRcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgc3VicHJvZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk2MS1cdFx0Y29uc3QgY2hhciAqc3ViX25hbWUgPSBicGZfc3VicHJvZ19uYW1lKGVudiwgc3VicHJvZyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MzAzPXN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczNjMtXHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzM2NDpcdFx0aWYgKGF1eC1cdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2dub10ubGlua2FnZSAhPSBCVEZfRlVOQ19TVEFUSUMpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM2NS1cdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGJhY2sgZnVuY3Rpb24gbm90IHN0YXRpY1xcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTY4PXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBib29sIGluX3NsZWVwYWJsZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2ODctXHRcdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Njg4Olx0XHRpZiAoZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWZ1bmNfaW5mb19hdXgpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY4OS1cdFx0XHRyZXQgPSBidGZfcHJlcGFyZV9mdW5jX2FyZ3MoZW52LCAwKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5MC1cdFx0XHRpZiAocmV0IHx8IHN1Yi1cdTAwM2VhcmdfY250ICE9IDEgfHwgc3ViLVx1MDAzZWFyZ3NbMF0uYXJnX3R5cGUgIT0gQVJHX1BUUl9UT19DVFgpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY5MTpcdFx0XHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VmdW5jX2luZm9fYXV4WzBdLnVucmVsaWFibGUgPSB0cnVlO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjkyLVx0XHRcdFx0c3ViLVx1MDAzZWFyZ19jbnQgPSAxO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTc1NT1zdGF0aWMgaW50IGRvX2NoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzU3LVx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NzU4Olx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICpzdWJfYXV4O1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzU5LVx0aW50IGNvbnRleHQsIGksIGosIHJldCwgbmV3X2NudDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAxOTM9aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjY3LVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAyNjg6XHRcdGNvbnNlcnZhdGl2ZSA9IGF1eC1cdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2ddLnVucmVsaWFibGU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAyNjktXHRcdGlmIChwcm9nX2V4dGVuc2lvbikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTA1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBCVEYgVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpbmZvX2F1eGAgc3RydWN0dXJlIGlzIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgQlRGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyIFR5cGUgRm9ybWF0KSBjaGVja2luZyBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIGFsbG9jYXRpb24gbG9naWMgaXMgbW9zdCBsaWtlbHkgd2l0aGluIHRoZSB2ZXJpZmljYXRpb24gZnVuY3Rpb24sIHNvIEkmIzM5O2xsIGNoZWNrIGBrZXJuZWwvYnBmL2NoZWNrX2J0Zi5jYC4gTGluZSAxMzMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyB0aGF0IHNvdW5kcyBsaWtlIGEgbGlrZWx5IHNwb3QgdG8gZmluZCB0aGUgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgZGV0YWlscy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhlcmUuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBpbiB0aGUgQlRGIHZhbGlkYXRpb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NoZWNrX2J0Zi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDY1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqaW5mb19hdXggPSBOVUxMO1xuIDE0MTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIDE0MjpcdFx0Y29uc3Qgc3RydWN0IGJ0ZiAqYnRmO1xuIDE0MzpcdFx0YnBmcHRyX3QgdXJlY29yZDtcbiAxNDQ6XHRcdGJvb2wgc2NhbGFyX3JldHVybjtcbiAxNDU6XHRcdGludCByZXQgPSAtRU5PTUVNO1xuIDE0NjpcdFxuIDE0NzpcdFx0bmZ1bmNzID0gYXR0ci1cdTAwM2VmdW5jX2luZm9fY250O1xuIDE0ODpcdFx0aWYgKCFuZnVuY3MpIHtcbiAxNDk6XHRcdFx0aWYgKGNoZWNrX2Fibm9ybWFsX3JldHVybihlbnYpKVxuIDE1MDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE1MTpcdFx0XHRyZXR1cm4gMDtcbiAxNTI6XHRcdH1cbiAxNTM6XHRcdGlmIChuZnVuY3MgIT0gZW52LVx1MDAzZXN1YnByb2dfY250KSB7XG4gMTU0Olx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtudW1iZXIgb2YgZnVuY3MgaW4gZnVuY19pbmZvIGRvZXNuJiMzOTt0IG1hdGNoIG51bWJlciBvZiBzdWJwcm9nc1xcblwmIzM0Oyk7XG4gMTU1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE1NjpcdFx0fVxuIDE1NzpcdFxuIDE1ODpcdFx0dXJlY19zaXplID0gYXR0ci1cdTAwM2VmdW5jX2luZm9fcmVjX3NpemU7XG4gMTU5Olx0XG4gMTYwOlx0XHRwcm9nID0gZW52LVx1MDAzZXByb2c7XG4gMTYxOlx0XHRidGYgPSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VidGY7XG4gMTYyOlx0XG4gMTYzOlx0XHR1cmVjb3JkID0gbWFrZV9icGZwdHIoYXR0ci1cdTAwM2VmdW5jX2luZm8sIHVhdHRyLmlzX2tlcm5lbCk7XG4gMTY0Olx0XG4gMTY1Olx0XHRrcmVjb3JkID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlZnVuY19pbmZvO1xuIDE2NjpcdFx0aW5mb19hdXggPSBremFsbG9jX29ianMoKmluZm9fYXV4LCBuZnVuY3MsXG4gMTY3Olx0XHRcdFx0XHRHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk4pO1xuIDE2ODpcdFx0aWYgKCFpbmZvX2F1eClcbiAxNjk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTcwOlx0XG4gMTcxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZnVuY3M7IGkmIzQzOyYjNDM7KSB7XG4gMTcyOlx0XHRcdC8qIGNoZWNrIGluc25fb2ZmICovXG4gMTczOlx0XHRcdHJldCA9IC1FSU5WQUw7XG4gMTc0Olx0XG4gMTc1Olx0XHRcdGlmIChlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0ICE9IGtyZWNvcmRbaV0uaW5zbl9vZmYpIHtcbiAxNzY6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7ZnVuY19pbmZvIEJURiBzZWN0aW9uIGRvZXNuJiMzOTt0IG1hdGNoIHN1YnByb2cgbGF5b3V0IGluIEJQRiBwcm9ncmFtXFxuXCYjMzQ7KTtcbiAxNzc6XHRcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDE3ODpcdFx0XHR9XG4gMTc5Olx0XG4gMTgwOlx0XHRcdC8qIEFscmVhZHkgY2hlY2tlZCB0eXBlX2lkICovXG4gMTgxOlx0XHRcdHR5cGUgPSBidGZfdHlwZV9ieV9pZChidGYsIGtyZWNvcmRbaV0udHlwZV9pZCk7XG4gMTgyOlx0XHRcdGluZm9fYXV4W2ldLmxpbmthZ2UgPSBCVEZfSU5GT19WTEVOKHR5cGUtXHUwMDNlaW5mbyk7XG4gMTgzOlx0XHRcdC8qIEFscmVhZHkgY2hlY2tlZCBmdW5jX3Byb3RvICovXG4gMTg0Olx0XHRcdGZ1bmNfcHJvdG8gPSBidGZfdHlwZV9ieV9pZChidGYsIHR5cGUtXHUwMDNldHlwZSk7XG4gMTg1Olx0XG4gMTg2Olx0XHRcdHJldF90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBmdW5jX3Byb3RvLVx1MDAzZXR5cGUsIE5VTEwpO1xuIDE4NzpcdFx0XHRzY2FsYXJfcmV0dXJuID1cbiAxODg6XHRcdFx0XHRidGZfdHlwZV9pc19zbWFsbF9pbnQocmV0X3R5cGUpIHx8IGJ0Zl9pc19hbnlfZW51bShyZXRfdHlwZSk7XG4gMTg5Olx0XHRcdGlmIChpIFx1MDAyNlx1MDAyNiAhc2NhbGFyX3JldHVybiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5oYXNfbGRfYWJzKSB7XG4gMTkwOlx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0xEX0FCUyBpcyBvbmx5IGFsbG93ZWQgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuICYjMzk7aW50JiMzOTsuXFxuXCYjMzQ7KTtcbiAxOTE6XHRcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDE5MjpcdFx0XHR9XG4gMTkzOlx0XHRcdGlmIChpIFx1MDAyNlx1MDAyNiAhc2NhbGFyX3JldHVybiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5oYXNfdGFpbF9jYWxsKSB7XG4gMTk0Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3RhaWxfY2FsbCBpcyBvbmx5IGFsbG93ZWQgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuICYjMzk7aW50JiMzOTsuXFxuXCYjMzQ7KTtcbiAxOTU6XHRcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDE5NjpcdFx0XHR9XG4gMTk3Olx0XG4gMTk4Olx0XHRcdGVudi1cdTAwM2VzdWJwcm9nX2luZm9baV0ubmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHR5cGUtXHUwMDNlbmFtZV9vZmYpO1xuIDE5OTpcdFx0XHRicGZwdHJfYWRkKFx1MDAyNnVyZWNvcmQsIHVyZWNfc2l6ZSk7XG4gMjAwOlx0XHR9XG4gMjAxOlx0XG4gMjAyOlx0XHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VmdW5jX2luZm9fYXV4ID0gaW5mb19hdXg7XG4gMjAzOlx0XHRyZXR1cm4gMDtcbiAyMDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJQRiB2ZXJpZmllciBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgY2hhbmdlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBGaXJzdCwgdGhlIGBpbmZvX2F1eGAgc3RydWN0dXJlLCB3aGljaCBzZWVtcyB0byBiZSBjZW50cmFsIHRvIHRoaXMsIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpzYC4gVGhpcyBpcyBnb29kOyBpdCBndWFyYW50ZWVzIHRoZSBtZW1vcnkgaXMgemVyb2VkIG91dCBmcm9tIHRoZSBzdGFydCwgd2hpY2ggaXMgYSBnb29kIGJhc2VsaW5lIHRvIGF2b2lkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgdmVyaWZpZXIgdHJhY2tzIHN1YnByb2dyYW0gY2FsbHMgYW5kIHZlcmlmaWNhdGlvbiBzdGF0dXMgaW4gYm90aCBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUgY29udGV4dHMuIFByZXZpb3VzbHksIHdlIGhhZCB0aGVzZSBhcyBzaW5nbGUgYm9vbGVhbiBmbGFnczogYGNhbGxlZGAgYW5kIGB2ZXJpZmllZGAuIE5vdywgaXQmIzM5O3MgYmVlbiBjaGFuZ2VkIHRvIGBib29sIGNhbGxlZFsyXTtgIGFuZCBgYm9vbCB2ZXJpZmllZFsyXTtgLiBUaGlzIGlzIGluZGV4ZWQgYnkgYGluX3NsZWVwYWJsZWAsIHdoaWNoIGlzIGVpdGhlciAwIG9yIDEsIHJlcHJlc2VudGluZyB0aGVzZSB0d28gY29udGV4dHMuIE1ha2VzIHNlbnNlOyB0aGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgd2F5IHRvIGRpZmZlcmVudGlhdGUgdGhlIGNhbGwvdmVyaWZpY2F0aW9uIHN0YXRlIGJldHdlZW4gc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIGNvbnRleHRzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYGNoZWNrX2Z1bmNfY2FsbCgpYCwgdGhlIGBjYWxsZWRgIGZsYWcgaXMgYmVpbmcgc2V0OiBgc3ViX2F1eC0mZ3Q7Y2FsbGVkW2luX3NsZWVwYWJsZV9jb250ZXh0KGVudildID0gdHJ1ZTtgLiBgaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KWAgcmV0dXJucyBhIGJvb2wgLSB3aGljaCBJIHF1aWNrbHkgdmVyaWZpZWQgY2FuIG9ubHkgcmV0dXJuIDAgb3IgMS4gU28gdXNpbmcgdGhpcyBib29sZWFuIGFzIGFuIGFycmF5IGluZGV4IGlzIHNhZmUuCgpUaGVuLCBpbiBgZG9fY2hlY2tfc3VicHJvZ3MoKWAsIHdlIGl0ZXJhdGUgdGhyb3VnaCBzdWJwcm9ncmFtcyBpbiB0b3BvbG9naWNhbCBvcmRlciwgZm9yIGJvdGggY29udGV4dHMgKDAgYW5kIDEpLiBJZiBhIHN1YnByb2dyYW0gaGFzIGJlZW4gY2FsbGVkIGluIGEgcGFydGljdWxhciBjb250ZXh0ICpidXQqIG5vdCB5ZXQgdmVyaWZpZWQgZm9yIHRoYXQgY29udGV4dCwgd2UgY2FsbCBgZG9fY2hlY2tfY29tbW9uKClgLCBhbmQgdGhlbiBzZXQgYHZlcmlmaWVkW2NvbnRleHRdID0gdHJ1ZWAuCgpJbiBgZG9fY2hlY2tfbWFpbigpYCwgYGRvX2NoZWNrX2NvbW1vbigpYCBpcyBjYWxsZWQgd2l0aCBgZW52LSZndDtwcm9nLSZndDtzbGVlcGFibGVgIGFzIHRoZSBjb250ZXh0LgoKSSBzZWUgYGRvX2NoZWNrX2NvbW1vbigpYCB1cGRhdGluZyBgc3RhdGUtJmd0O2luX3NsZWVwYWJsZWAsIGFuZCBhbHNvIHRoZSBgaW5zbnNfdG90YWxgLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGFyZSB3ZSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHdpdGggdGhpcyBjaGFuZ2U/IEkmIzM5O3ZlIGdvdCB0byBiZSBzdXJlLiBJJiMzOTt2ZSBicm9rZW4gZG93biBteSBjaGVjazoKCjEuICBgaW5mb19hdXhgIGlzIGBremFsbG9jX29ianNgLCB3aGljaCBtZWFucyB0aGF0IGFsbCBvZiBgY2FsbGVkWzBdYCwgYGNhbGxlZFsxXWAsIGB2ZXJpZmllZFswXWAsIGFuZCBgdmVyaWZpZWRbMV1gIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGF0JiMzOTtzIGEgaHVnZSByZWxpZWYuCjIuICBJIGRpZCBhIHF1aWNrIHNjYW4gLSBObyBkaXJlY3QgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIGV0Yy4pIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uCjMuICBObyBjb25kaXRpb25hbCBicmFuY2hlcyBkZXBlbmRpbmcgb24gKnVuaW5pdGlhbGl6ZWQqIGRhdGEuCjQuICBObyBjaGFuZ2VzIGluIGJ1ZmZlciBzaXppbmcgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBsZWFrcy4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHJlYWRzLgo1LiAgQWxsIHZhcmlhYmxlcyB1c2VkIHdpdGhpbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIChgY29udGV4dGAsIGBpYCwgYGpgLCBgcmV0YCwgYG5ld19jbnRgLCBgb2xkX2luc25zX3RvdGFsYCkgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZCBiZWZvcmUgdXNhZ2UuCgpTbywgKmFzIGZhciBhcyBJIGNhbiBzZWUqLCB0aGVyZSBhcmUgbm8gb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaGVyZS4gVGhlIHBhdGNoIHNlZW1zIHNvbGlkIG9uIHRoYXQgZnJvbnQuCgpJJiMzOTtsbCBkbyBhIHF1aWNrIGBncmVwYCBmb3IgYGNhbGxlZGAgYW5kIGB2ZXJpZmllZGAgd2l0aGluIGBrZXJuZWwvYnBmL2AgdG8gbWFrZSBkb3VibHkgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEl0JiMzOTtzIHRvbyBpbXBvcnRhbnQgdG8gYmUgY29tcGxhY2VudC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc2VhcmNoIHJlc3VsdHMgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoZXJlIGFyZSBubyBvdGhlciBwbGFjZXMgdGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkLCBhbmQgdGhhdCB0aGV5JiMzOTtyZSBiZWluZyB1c2VkIHNhZmVseSBhbmQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoY2FsbGVkfHZlcmlmaWVkKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDYzOSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxua2VybmVsL2JwZi9hcnJheW1hcC5jPTkzMj1zdGF0aWMgdm9pZCAqZmRfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTM2LVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjkzNzovKiBvbmx5IGNhbGxlZCBmcm9tIHN5c2NhbGwgKi9cbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MzgtaW50IGJwZl9mZF9hcnJheV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgKnZhbHVlKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy05NTYtXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTU3Oi8qIG9ubHkgY2FsbGVkIGZyb20gc3lzY2FsbCAqL1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTk1OC1pbnQgYnBmX2ZkX2FycmF5X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4tLVxua2VybmVsL2JwZi9iYWNrdHJhY2suYz0yMzc9dm9pZCBicGZfZm10X3N0YWNrX21hc2soY2hhciAqYnVmLCBzc2l6ZV90IGJ1Zl9zeiwgdTY0IHN0YWNrX21hc2spXG4tLVxua2VybmVsL2JwZi9iYWNrdHJhY2suYy0yNTUtXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjI1NjovKiBGb3IgZ2l2ZW4gdmVyaWZpZXIgc3RhdGUgYmFja3RyYWNrX2luc24oKSBpcyBjYWxsZWQgZnJvbSB0aGUgbGFzdCBpbnNuIHRvXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTI1Ny0gKiB0aGUgZmlyc3QgaW5zbi4gSXRzIHB1cnBvc2UgaXMgdG8gY29tcHV0ZSBhIGJpdG1hc2sgb2YgcmVnaXN0ZXJzIGFuZFxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmM9NjY5PXZvaWQgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNzI4LSAqIE9uZSBpbXBvcnRhbnQgYW5kIHN1YnRsZSBhc3BlY3QgaXMgdGhhdCBwcmVjaXNlIG1hcmtzICpkbyBub3QgbWF0dGVyKiBpblxua2VybmVsL2JwZi9iYWNrdHJhY2suYzo3Mjk6ICogdGhlIGN1cnJlbnRseSB2ZXJpZmllZCBzdGF0ZSAoY3VycmVudCBzdGF0ZSkuIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTczMC0gKiB3aHkgdGhpcyBpcyB0aGUgY2FzZS5cbi0tXG5rZXJuZWwvYnBmL2JwZl9pbm9kZV9zdG9yYWdlLmM9MTI1PUJQRl9DQUxMXzQoYnBmX2lub2RlX3N0b3JhZ2VfZ2V0LCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHN0cnVjdCBpbm9kZSAqLCBpbm9kZSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9pbm9kZV9zdG9yYWdlLmMtMTQ1LVxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jOjE0NjpcdC8qIFRoaXMgaGVscGVyIG11c3Qgb25seSBjYWxsZWQgZnJvbSB3aGVyZSB0aGUgaW5vZGUgaXMgZ3VhcmFudGVlZFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jLTE0Ny1cdCAqIHRvIGhhdmUgYSByZWZjb3VudCBhbmQgY2Fubm90IGJlIGZyZWVkLlxuLS1cbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYz0xNjA9QlBGX0NBTExfMihicGZfaW5vZGVfc3RvcmFnZV9kZWxldGUsXG4tLVxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jLTE2Ni1cbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYzoxNjc6XHQvKiBUaGlzIGhlbHBlciBtdXN0IG9ubHkgY2FsbGVkIGZyb20gd2hlcmUgdGhlIGlub2RlIGlzIGd1YXJhbnRlZWRcbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYy0xNjgtXHQgKiB0byBoYXZlIGEgcmVmY291bnQgYW5kIGNhbm5vdCBiZSBmcmVlZC5cbi0tXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM9MjUxPXZvaWQgYnBmX2luc25fYXJyYXlfYWRqdXN0X2FmdGVyX3JlbW92ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgb2ZmLCB1MzIgbGVuKVxuLS1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0yNjgtLypcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYzoyNjk6ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgSklUcy4gVGhlIGltYWdlIGlzIHRoZSByZWFsIHByb2dyYW1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0yNzAtICogaW1hZ2UsIHRoZSBvZmZzZXRzIGFycmF5IHNldCB1cCB0aGUgeGxhdGVkIC1cdTAwM2Ugaml0dGVkIG1hcHBpbmcuXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jPTkzPXN0YXRpYyBzc2l6ZV90IGJwZl9zZXFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTIwOC1cdH1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzoyMDk6XHQvKiBicGYgcHJvZ3JhbSBjYWxsZWQgaWYgIXAgKi9cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0yMTAtXHRzZXEtXHUwMDNlb3AtXHUwMDNlc3RvcChzZXEsIHApO1xuLS1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYz03Mjc9QlBGX0NBTExfNChicGZfbG9vcCwgdTMyLCBucl9sb29wcywgdm9pZCAqLCBjYWxsYmFja19mbiwgdm9pZCAqLCBjYWxsYmFja19jdHgsXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTczMy1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo3MzQ6XHQvKiBOb3RlOiB0aGVzZSBzYWZldHkgY2hlY2tzIGFyZSBhbHNvIHZlcmlmaWVkIHdoZW4gYnBmX2xvb3Bcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03MzUtXHQgKiBpcyBpbmxpbmVkLCBiZSBjYXJlZnVsIHRvIG1vZGlmeSB0aGlzIGNvZGUgaW4gc3luYy4gU2VlXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTMwMD1pbnQgYnBmX3NlbGVtX3VubGluayhzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTM0Ni0gKiBVbmxpbmsgYW4gc2VsZW0gZnJvbSBtYXAgYW5kIGxvY2FsIHN0b3JhZ2Ugd2l0aCBsb2NrbGVzcyBmYWxsYmFjayBpZiBjYWxsZXJzXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6MzQ3OiAqIGFyZSByYWNpbmcgb3IgcnFzcGlubG9jayByZXR1cm5zIGVycm9yLiBJdCBzaG91bGQgb25seSBiZSBjYWxsZWQgYnlcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zNDgtICogYnBmX2xvY2FsX3N0b3JhZ2VfZGVzdHJveSgpIG9yIGJwZl9sb2NhbF9zdG9yYWdlX21hcF9mcmVlKCkuXG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmM9MjI4PWJwZl9sc21fZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0yODctXG5rZXJuZWwvYnBmL2JwZl9sc20uYzoyODg6LyogVGhlIHNldCBvZiBob29rcyB3aGljaCBhcmUgY2FsbGVkIHdpdGhvdXQgcGFnZWZhdWx0cyBkaXNhYmxlZCBhbmQgYXJlIGFsbG93ZWRcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTI4OS0gKiB0byBcJiMzNDtzbGVlcFwmIzM0OyBhbmQgdGh1cyBjYW4gYmUgdXNlZCBmb3Igc2xlZXBhYmxlIEJQRiBwcm9ncmFtcy5cbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NzI2PXN0YXRpYyBsb25nIGJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk0MS1cdC8qIEVycm9yIGR1cmluZyBzdF9vcHMtXHUwMDNlcmVnKCkuIENhbiBoYXBwZW4gaWYgdGhpcyBzdHJ1Y3Rfb3BzIG5lZWRzIHRvIGJlXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTQyOlx0ICogdmVyaWZpZWQgYXMgYSB3aG9sZSwgYWZ0ZXIgYWxsIGluaXRfbWVtYmVyKCkgY2FsbHMuIENhbiBhbHNvIGhhcHBlbiBpZlxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk0My1cdCAqIHRoZXJlIHdhcyBhIHJhY2UgaW4gcmVnaXN0ZXJpbmcgdGhlIHN0cnVjdF9vcHMgKHVuZGVyIHRoZSBzYW1lIG5hbWUpIHRvXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEwMjc9c3RhdGljIHZvaWQgYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA0Ni1cdCAqIHNldHNvY2tvcHQoVENQX0NPTkdFU1RJT04sIFwmIzM0O3RjcF9jY195XCYjMzQ7KS5cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDQ3Olx0ICogRHVyaW5nIHRoZSBzd2l0Y2gsICBicGZfc3RydWN0X29wc19wdXQodGNwX2NjX3gpIGlzIGNhbGxlZFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNDgtXHQgKiBhbmQgaXRzIHJlZmNvdW50IG1heSByZWFjaCAwIHdoaWNoIHRoZW4gZnJlZSBpdHNcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTUyMj12b2lkIGJwZl9wcm9nX2Rpc2Fzc29jX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTQwLSAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgc3RydWN0X29wcyBzdHJ1Y3QgKGkuZS4sIGtkYXRhKSBhc3NvY2lhdGVkIHdpdGggYVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE1NDE6ICogcHJvZ3JhbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIEJQRiBwcm9ncmFtIGNvbnRleHQgKGUuZy4sIGluIGEga2Z1bmMpLlxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1NDItICpcbi0tXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYz0xOTM9QlBGX0NBTExfMihicGZfdGFza19zdG9yYWdlX2RlbGV0ZSwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKixcbi0tXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYy0xOTktXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYzoyMDA6XHQvKiBUaGlzIGhlbHBlciBtdXN0IG9ubHkgYmUgY2FsbGVkIGZyb20gcGxhY2VzIHdoZXJlIHRoZSBsaWZldGltZSBvZiB0aGUgdGFza1xua2VybmVsL2JwZi9icGZfdGFza19zdG9yYWdlLmMtMjAxLVx0ICogaXMgZ3VhcmFudGVlZC4gRWl0aGVyIGJ5IGJlaW5nIHJlZmNvdW50ZWQgb3IgYnkgYmVpbmcgcHJvdGVjdGVkXG4tLVxua2VybmVsL2JwZi9idGYuYz0xNzgyPXN0YXRpYyB2b2lkIGJ0Zl9mcmVlX2lkKHN0cnVjdCBidGYgKmJ0Zilcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTE3OTktXHRcdCAqIENsZWFyIHRoZSBpZCBoZXJlIHRvIG1ha2UgdGhpcyBmdW5jdGlvbiBpZGVtcG90ZW50LCBzaW5jZSBpdCB3aWxsIGdldFxua2VybmVsL2JwZi9idGYuYzoxODAwOlx0XHQgKiBjYWxsZWQgYSBjb3VwbGUgb2YgdGltZXMgZm9yIG1vZHVsZSBCVEZzOiBvbiBtb2R1bGUgdW5sb2FkLCBhbmQgdGhlblxua2VybmVsL2JwZi9idGYuYy0xODAxLVx0XHQgKiB0aGUgZmluYWwgYnRmX3B1dCgpLiBidGZfYWxsb2NfaWQoKSBzdGFydHMgSURzIHdpdGggMSwgc28gd2UgY2FuIHVzZVxuLS1cbmtlcm5lbC9icGYvYnRmLmM9Mzk3NT1zdGF0aWMgaW50IGJ0Zl9wYXJzZV9rcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJ0Zl9maWVsZCAqZmllbGQsXG4tLVxua2VybmVsL2JwZi9idGYuYy0zOTkzLVx0aWYgKGlkID09IC1FTk9FTlQpIHtcbmtlcm5lbC9icGYvYnRmLmM6Mzk5NDpcdFx0LyogYnRmX3BhcnNlX2twdHIgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHcvIGJ0ZiA9IHByb2dyYW0gQlRGICovXG5rZXJuZWwvYnBmL2J0Zi5jLTM5OTUtXHRcdFdBUk5fT05fT05DRShidGZfaXNfa2VybmVsKGJ0ZikpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNDA0MC1cbmtlcm5lbC9icGYvYnRmLmM6NDA0MTpcdFx0LyogV2UgYWxyZWFkeSB2ZXJpZmllZCBkdG9yX2Z1bmMgdG8gYmUgYnRmX3R5cGVfaXNfZnVuY1xua2VybmVsL2JwZi9idGYuYy00MDQyLVx0XHQgKiBpbiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MuXG4tLVxua2VybmVsL2JwZi9idGYuYz03OTU2PXN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTc5ODItXHRcdCAqIHJldHVybnMgdG8gdGhlIGtlcm5lbCwgd2hpY2ggaGFzIG5vIGFyZW5hIHRvIGNhc3QgdGhlIGFkZHJlc3Ncbmtlcm5lbC9icGYvYnRmLmM6Nzk4MzpcdFx0ICogYmFjayBpbnRvLiBBIGxvY2FsIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIGlubGluZSwgc28gaXRzIGNhbGxlclxua2VybmVsL2JwZi9idGYuYy03OTg0LVx0XHQgKiByZWNlaXZlcyB0aGUgcmVhbCByZWdpc3RlciBzdGF0ZSBhbmQgYW55IG1lbWJlciBpcyBmaW5lLlxuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODUyMD1zdGF0aWMgaW50IGJ0Zl9tb2R1bGVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgb3AsXG4tLVxua2VybmVsL2JwZi9idGYuYy04NjE0LVx0XHRcdCAqIGJ0Zl90cnlfZ2V0X21vZHVsZSgpIG9uIHN1Y2ggQlRGcyB3aWxsIGZhaWwuIFRoaXMgbWF5XG5rZXJuZWwvYnBmL2J0Zi5jOjg2MTU6XHRcdFx0ICogYmUgY2FsbGVkIGFnYWluIG9uIGJ0Zl9wdXQoKSwgYnV0IGl0JiMzOTtzIG9rIHRvIGRvIHNvLlxua2VybmVsL2JwZi9idGYuYy04NjE2LVx0XHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODkxOT1zdGF0aWMgaW50IGJ0Zl9wb3B1bGF0ZV9rZnVuY19zZXQoc3RydWN0IGJ0ZiAqYnRmLCBlbnVtIGJ0Zl9rZnVuY19ob29rIGhvb2ssXG4tLVxua2VybmVsL2JwZi9idGYuYy04OTY1LVx0c2V0ID0gdGFiLVx1MDAzZXNldHNbaG9va107XG5rZXJuZWwvYnBmL2J0Zi5jOjg5NjY6XHQvKiBXYXJuIHdoZW4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldCBpcyBjYWxsZWQgdHdpY2UgZm9yIHRoZSBzYW1lIGhvb2tcbmtlcm5lbC9icGYvYnRmLmMtODk2Ny1cdCAqIGZvciBtb2R1bGUgc2V0cy5cbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTY4PXN0YXRpYyB2b2lkIG1hcmtfc3VicHJvZ19taWdodF90aHJvdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmKVxuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNzctICogJiMzOTt3JiMzOTsgaXMgYSBjYWxsZWUgZW50cnkgcG9pbnQuXG5rZXJuZWwvYnBmL2NmZy5jOjc4OiAqIEV2ZW50dWFsbHkgdGhpcyBmdW5jdGlvbiB3b3VsZCBiZSBjYWxsZWQgd2hlbiBlbnYtXHUwMDNlY2ZnLmluc25fc3RhdGVbd10gPT0gRVhQTE9SRUQuXG5rZXJuZWwvYnBmL2NmZy5jLTc5LSAqIFJlbHkgb24gREZTIHRyYXZlcnNhbCBvcmRlciBhbmQgYWJzZW5jZSBvZiByZWN1cnNpdmUgY2FsbHMgdG8gZ3VhcmFudGVlIHRoYXRcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTQ1MT1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy00ODUtXHRcdC8qIEZvciBmdW5jdGlvbnMgdGhhdCBpbnZva2UgY2FsbGJhY2tzIGl0IGlzIG5vdCBrbm93biBob3cgbWFueSB0aW1lc1xua2VybmVsL2JwZi9jZmcuYzo0ODY6XHRcdCAqIGNhbGxiYWNrIHdvdWxkIGJlIGNhbGxlZC4gVmVyaWZpZXIgbW9kZWxzIGNhbGxiYWNrIGNhbGxpbmcgZnVuY3Rpb25zXG5rZXJuZWwvYnBmL2NmZy5jLTQ4Ny1cdFx0ICogYnkgcmVwZWF0ZWRseSB2aXNpdGluZyBjYWxsYmFjayBib2RpZXMgYW5kIHJldHVybmluZyB0byBvcmlnaW4gY2FsbFxuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNTAzLVx0XHRcdHJldCA9IGJwZl9nZXRfaGVscGVyX3Byb3RvKGVudiwgaW5zbi1cdTAwM2VpbW0sIFx1MDAyNmZwKTtcbmtlcm5lbC9icGYvY2ZnLmM6NTA0Olx0XHRcdC8qIElmIGNhbGxlZCBpbiBhIG5vbi1zbGVlcGFibGUgY29udGV4dCBwcm9ncmFtIHdpbGwgYmVcbmtlcm5lbC9icGYvY2ZnLmMtNTA1LVx0XHRcdCAqIHJlamVjdGVkIGFueXdheSwgc28gd2Ugc2hvdWxkIGVuZCB1cCB3aXRoIHByZWNpc2Vcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTUzNi1cdFx0XHR9XG5rZXJuZWwvYnBmL2NmZy5jOjUzNzpcdFx0XHQvKiBTYW1lIGFzIGhlbHBlcnMsIGlmIGNhbGxlZCBpbiBhIG5vbi1zbGVlcGFibGUgY29udGV4dFxua2VybmVsL2JwZi9jZmcuYy01MzgtXHRcdFx0ICogcHJvZ3JhbSB3aWxsIGJlIHJlamVjdGVkIGFueXdheSwgc28gd2Ugc2hvdWxkIGVuZCB1cFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtODAzLSAqIEV4YWN0bHkgb25lIG9mIEBwcm9nIG9yIEBsaW5rIGNhbiBiZSBub24tbnVsbC5cbmtlcm5lbC9icGYvY2dyb3VwLmM6ODA0OiAqIE11c3QgYmUgY2FsbGVkIHdpdGggY2dyb3VwX211dGV4IGhlbGQuXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNS0gKi9cbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwMjk9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDUwLSAqXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNTE6ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC5cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA1Mi0gKi9cbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExNTY9c3RhdGljIHZvaWQgcHVyZ2VfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExOTQtICogQXQgbW9zdCBvbmUgb2YgQHByb2cgb3IgQGxpbmsgY2FuIGJlIG5vbi1OVUxMLlxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTk1OiAqIE11c3QgYmUgY2FsbGVkIHdpdGggY2dyb3VwX211dGV4IGhlbGQuXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExOTYtICovXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMjYwPXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9kZXRhY2goc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI3MC1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTI3MTovKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNncm91cF9tdXRleCBoZWxkIHRvIGF2b2lkIHJhY2VzLiAqL1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjcyLXN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3F1ZXJ5KHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MjIzND1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdF9rZXJuKHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjI1NC1cdCAqIEhlcmUgd2UgYWx3YXlzIHBhc3MgdGhlIGRhdGEgYW5kIG1lbXNldCgpIHNob3VsZFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMjU1Olx0ICogYmUgY2FsbGVkIGlmIHRoYXQgZGF0YSBzaG91bGRuJiMzOTt0IGJlIFwmIzM0O2V4cG9ydGVkXCYjMzQ7Llxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMjU2LVx0ICovXG4tLVxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTMwLSAqXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6MzE6ICogTm90ZTogdGhlIGl0ZXJfcHJvZyBpcyBjYWxsZWQgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC5cbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0zMi0gKlxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBwcmVwYXJlX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy0xMTYtXHRcdGlmICh1bmxpa2VseSghZnVuY19wcm90byB8fCAhYnRmX3R5cGVfaXNfZnVuY19wcm90byhmdW5jX3Byb3RvKSkpXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjExNzpcdFx0XHQvKiBidGZfZnVuY19jaGVjaygpIGFscmVhZHkgdmVyaWZpZWQgaXQgZHVyaW5nIEJURiBsb2FkICovXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTExOC1cdFx0XHRnb3RvIGVycl9mcmVlO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTEyNDM9aW50IGJwZl9qaXRfYmluYXJ5X3BhY2tfZmluYWxpemUoc3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpyb19oZWFkZXIsXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTI1OC1cbmtlcm5lbC9icGYvY29yZS5jOjEyNTk6LyogYnBmX2ppdF9iaW5hcnlfcGFja19mcmVlIGlzIGNhbGxlZCBpbiB0d28gZGlmZmVyZW50IHNjZW5hcmlvczpcbmtlcm5lbC9icGYvY29yZS5jLTEyNjAtICogICAxKSB3aGVuIHRoZSBwcm9ncmFtIGlzIGZyZWVkIGFmdGVyO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI5OTc9aW50IGJwZl9wcm9nX2FycmF5X2NvcHlfaW5mbyhzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmFycmF5LFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMwMTEtXG5rZXJuZWwvYnBmL2NvcmUuYzozMDEyOlx0LyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdW5kZXIgdHJhY2UvYnBmX3RyYWNlLmM6IGJwZl9ldmVudF9tdXRleCAqL1xua2VybmVsL2JwZi9jb3JlLmMtMzAxMy1cdHJldHVybiBicGZfcHJvZ19hcnJheV9jb3B5X2NvcmUoYXJyYXksIHByb2dfaWRzLCByZXF1ZXN0X2NudCkgPyAtRU5PU1BDXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzEyMz1CUEZfQ0FMTF8wKGJwZl91c2VyX3JuZF91MzIpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzEyNi1cdCAqIG9mIHRoZSByZWdpc3RlcnMgcGFzc2VkIGludG8gdGhpcyBmdW5jdGlvbiwgdGhlbiBub3RlIHRoYXRcbmtlcm5lbC9icGYvY29yZS5jOjMxMjc6XHQgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG5hdGl2ZSBlQlBGIGFuZCBjbGFzc2ljLXRvLWVCUEZcbmtlcm5lbC9icGYvY29yZS5jLTMxMjgtXHQgKiB0cmFuc2Zvcm1hdGlvbnMuIFJlZ2lzdGVyIGFzc2lnbm1lbnRzIGZyb20gYm90aCBzaWRlcyBhcmVcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTM3OD1zdGF0aWMgdm9pZCBicV94bWl0X2FsbChzdHJ1Y3QgeGRwX2Rldl9idWxrX3F1ZXVlICpicSwgdTMyIGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmMtNDIyLVxua2VybmVsL2JwZi9kZXZtYXAuYzo0MjM6LyogX19kZXZfZmx1c2ggaXMgY2FsbGVkIGZyb20geGRwX2RvX2ZsdXNoKCkgd2hpY2ggX211c3RfIGJlIHNpZ25hbGxlZCBmcm9tIHRoZVxua2VybmVsL2JwZi9kZXZtYXAuYy00MjQtICogZHJpdmVyIGJlZm9yZSByZXR1cm5pbmcgZnJvbSBpdHMgbmFwaS1cdTAwM2Vwb2xsKCkgcm91dGluZS4gU2VlIHRoZSBjb21tZW50IGFib3ZlXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYz05NDk9c3RhdGljIGxvbmcgX19kZXZfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTk2My1cbmtlcm5lbC9icGYvZGV2bWFwLmM6OTY0Olx0LyogYWxyZWFkeSB2ZXJpZmllZCB2YWx1ZV9zaXplIFx1MDAzYz0gc2l6ZW9mIHZhbCAqL1xua2VybmVsL2JwZi9kZXZtYXAuYy05NjUtXHRtZW1jcHkoXHUwMDI2dmFsLCB2YWx1ZSwgbWFwLVx1MDAzZXZhbHVlX3NpemUpO1xuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9OTk4PXN0YXRpYyBsb25nIF9fZGV2X21hcF9oYXNoX3VwZGF0ZV9lbGVtKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTEwMDctXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjEwMDg6XHQvKiBhbHJlYWR5IHZlcmlmaWVkIHZhbHVlX3NpemUgXHUwMDNjPSBzaXplb2YgdmFsICovXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTEwMDktXHRtZW1jcHkoXHUwMDI2dmFsLCB2YWx1ZSwgbWFwLVx1MDAzZXZhbHVlX3NpemUpO1xuLS1cbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jLTEzLSAqIHRoZXJlIGlzIGF2YWlsYWJsZSByb29tIGluIHRoZSBkaXNwYXRjaGVyIGEgZGlyZWN0IGNhbGwgdG8gdGhlIEJQRlxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM6MTQ6ICogcHJvZ3JhbSB3aWxsIGJlIGdlbmVyYXRlZC4gQWxsIGNhbGxzIHRvIHRoZSBCUEYgcHJvZ3JhbXMgY2FsbGVkIHZpYVxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmMtMTUtICogdGhlIGRpc3BhdGNoZXIgd2lsbCB0aGVuIGJlIGEgZGlyZWN0IGNhbGwsIGluc3RlYWQgb2YgYW5cbi0tXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmM9OT1zdHJ1Y3QgZG1hYnVmX2l0ZXJfcHJpdiB7XG4tLVxua2VybmVsL2JwZi9kbWFidWZfaXRlci5jLTEyLVx0ICogcHJldmVudCBkZXN0cnVjdGlvbiBiZXR3ZWVuIHN0b3Avc3RhcnQuIElmIHJlYWRpbmcgaXMgbm90IHJlc3VtZWQgYW5kXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmM6MTM6XHQgKiBzdGFydCBpcyBuZXZlciBjYWxsZWQgYWdhaW4sIHRoZW4gZG1hYnVmX2l0ZXJfc2VxX2ZpbmkgZHJvcHMgdGhlXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmMtMTQtXHQgKiByZWZlcmVuY2Ugd2hlbiB0aGUgaXRlcmF0b3IgaXMgcmVsZWFzZWQuXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjczPXN0YXRpYyB2b2lkIGh0YWJfZnJlZV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1LSAqIGJwZl9scnVfbGlzdC5jIGxvZ2ljLiBGb3IgZXhhbXBsZSwgY2VydGFpbiBjb2RlIHBhdGggb2Zcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NjogKiBicGZfbHJ1X3BvcF9mcmVlKCksIHdoaWNoIGlzIGNhbGxlZCBieSBmdW5jdGlvbiBwcmVhbGxvY19scnVfcG9wKCksXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTctICogd2lsbCBhY3F1aXJlIGxydV9sb2NrIGZpcnN0IGZvbGxvd2VkIGJ5IGFjcXVpcmluZyBidWNrZXRfbG9jay5cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz02ODk9c3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqc2VsZWN0X2J1Y2tldChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHUzMiBoYXNoKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTY5My1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjY5NDovKiB0aGlzIGxvb2t1cCBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQgd2l0aCBidWNrZXQgbG9jayB0YWtlbiAqL1xua2VybmVsL2JwZi9oYXNodGFiLmMtNjk1LXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsIHUzMiBoYXNoLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTcwNy1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjcwODovKiBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYnVja2V0IGxvY2suIGl0IHdpbGwgcmVwZWF0IHRoZSBsb29wIGluXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03MDktICogdGhlIHVubGlrZWx5IGV2ZW50IHdoZW4gZWxlbWVudHMgbW92ZWQgZnJvbSBvbmUgYnVja2V0IGludG8gYW5vdGhlclxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTg0MD1zdGF0aWMgdm9pZCBjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtODU4LVxua2VybmVsL2JwZi9oYXNodGFiLmM6ODU5Oi8qIEl0IGlzIGNhbGxlZCBmcm9tIHRoZSBicGZfbHJ1X2xpc3Qgd2hlbiB0aGUgTFJVIG5lZWRzIHRvIGRlbGV0ZVxua2VybmVsL2JwZi9oYXNodGFiLmMtODYwLSAqIG9sZGVyIGVsZW1lbnRzIGZyb20gdGhlIGh0YWIuXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MTU3MT1zdGF0aWMgdm9pZCBkZWxldGVfYWxsX2VsZW1lbnRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNTc0LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTU3NTpcdC8qIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGEgd29ya2VyIHRocmVhZCBhbmQgbWlncmF0aW9uIGhhcyBiZWVuIGRpc2FibGVkLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTU3Ni1cdCAqIHRoZXJlZm9yZSwgaXQgaXMgT0sgdG8gaW52b2tlIGJwZl9tZW1fY2FjaGVfZnJlZSgpIGRpcmVjdGx5LlxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTE2MjY9c3RhdGljIHZvaWQgaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE2MzAtXHQvKiBicGZfZnJlZV91c2VkX21hcHMoKSBvciBjbG9zZShtYXBfZmQpIHdpbGwgdHJpZ2dlciB0aGlzIG1hcF9mcmVlIGNhbGxiYWNrLlxua2VybmVsL2JwZi9oYXNodGFiLmM6MTYzMTpcdCAqIGJwZl9mcmVlX3VzZWRfbWFwcygpIGlzIGNhbGxlZCBhZnRlciBicGYgcHJvZyBpcyBubyBsb25nZXIgZXhlY3V0aW5nLlxua2VybmVsL2JwZi9oYXNodGFiLmMtMTYzMi1cdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gc3luY2hyb25pemVfcmN1KCkgaGVyZSB0byBwcm90ZWN0IG1hcCBlbGVtZW50cy5cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNjEwPXN0YXRpYyB2b2lkIGZkX2h0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjMwLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjYzMTovKiBvbmx5IGNhbGxlZCBmcm9tIHN5c2NhbGwgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI2MzItaW50IGJwZl9mZF9odGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiAqdmFsdWUpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY1MC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI2NTE6LyogT25seSBjYWxsZWQgZnJvbSBzeXNjYWxsICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjUyLWludCBicGZfZmRfaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTc5Nz12b2lkIGJwZl9icHJpbnRmX2NsZWFudXAoc3RydWN0IGJwZl9icHJpbnRmX2RhdGEgKmRhdGEpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtODE1LSAqIEluIGFyZ3VtZW50IHByZXBhcmF0aW9uIG1vZGUsIGlmIDAgaXMgcmV0dXJuZWQsIHNhZmUgdGVtcG9yYXJ5IGJ1ZmZlcnMgYXJlXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo4MTY6ICogYWxsb2NhdGVkIGFuZCBicGZfYnByaW50Zl9jbGVhbnVwIHNob3VsZCBiZSBjYWxsZWQgdG8gZnJlZSB0aGVtIGFmdGVyIHVzZS5cbmtlcm5lbC9icGYvaGVscGVycy5jLTgxNy0gKi9cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xMzE3PXN0YXRpYyBpbnQgX19icGZfYXN5bmNfaW5pdChzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4gKmFzeW5jLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgZmxhZ3MsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTM3Ny1cdCAqIHdoZW4gdGhlcmUgYXJlIGNvbmN1cnJlbnQgdXJlZiByZWxlYXNlIGFuZCBicGYgdGltZXIgaW5pdCwgZWl0aGVyXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoxMzc4Olx0ICogYnBmX3RpbWVyX2NhbmNlbF9hbmRfZnJlZSgpIGNhbGxlZCBieSB1cmVmIHJlbGVhc2UgcmVhZHMgYSBuby1OVUxMXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xMzc5LVx0ICogdGltZXIgb3IgYXRvbWljNjRfcmVhZCgpIGJlbG93IHJldHVybnMgYSB6ZXJvIHVzZXJjbnQuXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9MTY4Mz1zdGF0aWMgdm9pZCBicGZfYXN5bmNfY2FuY2VsX2FuZF9mcmVlKHN0cnVjdCBicGZfYXN5bmNfa2VybiAqYXN5bmMpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTcxMy0vKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MTcxNDogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBtYXBfZGVsZXRlL3VwZGF0ZV9lbGVtIGZvciBpbmRpdmlkdWFsIGVsZW1lbnQgYW5kXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzE1LSAqIGJ5IG9wcy1cdTAwM2VtYXBfcmVsZWFzZV91cmVmIHdoZW4gdGhlIHVzZXIgc3BhY2UgcmVmZXJlbmNlIHRvIGEgbWFwIHJlYWNoZXMgemVyby5cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xNzE3PXZvaWQgYnBmX3RpbWVyX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp2YWwpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTcyMi0vKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MTcyMzogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBtYXBfZGVsZXRlL3VwZGF0ZV9lbGVtIGZvciBpbmRpdmlkdWFsIGVsZW1lbnQgYW5kXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzI0LSAqIGJ5IG9wcy1cdTAwM2VtYXBfcmVsZWFzZV91cmVmIHdoZW4gdGhlIHVzZXIgc3BhY2UgcmVmZXJlbmNlIHRvIGEgbWFwIHJlYWNoZXMgemVyby5cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yMjQ3PXZvaWQgYnBmX2xpc3RfaGVhZF9mcmVlKGNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmZpZWxkLCB2b2lkICpsaXN0X2hlYWQsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjI1Ny1cdCAqIHRvbyBsb25nLCBhbmQgYWxzbyBwcmV2ZW50IGRlYWRsb2NrcyBpZiB0cmFjaW5nIHByb2dyYW1zIGVuZCB1cFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjI1ODpcdCAqIGV4ZWN1dGluZyBvbiBlbnRyeS9leGl0IG9mIGZ1bmN0aW9ucyBjYWxsZWQgaW5zaWRlIHRoZSBjcml0aWNhbFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjI1OS1cdCAqIHNlY3Rpb24sIGFuZCBlbmQgdXAgZG9pbmcgbWFwIG9wcyB0aGF0IGNhbGwgYnBmX2xpc3RfaGVhZF9mcmVlIGZvclxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTIzODg9X19icGZfa2Z1bmMgdm9pZCAqYnBmX3BlcmNwdV9vYmpfbmV3X2ltcGwodTY0IGxvY2FsX3R5cGVfaWRfX2ssIHZvaWQgKm1ldGFfX2lnbilcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMzkyLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjM5MzovKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBtaWdyYXRlX2Rpc2FibGUoKSwgYXMgcmVxdWlyZWQgYnkgYnBmX21lbV9mcmVlICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMzk0LXZvaWQgX19icGZfb2JqX2Ryb3BfaW1wbCh2b2lkICpwLCBjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCBib29sIHBlcmNwdSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDg2PXN0YXRpYyBpbnQgX19icGZfbGlzdF9hZGQoc3RydWN0IGJwZl9saXN0X25vZGVfa2VybiAqbm9kZSxcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDk0LVx0LyogSWYgbGlzdF9oZWFkIHdhcyAwLWluaXRpYWxpemVkIGJ5IG1hcCwgYnBmX29ial9pbml0X2ZpZWxkIHdhc24mIzM5O3Rcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0OTU6XHQgKiBjYWxsZWQgb24gaXRzIGZpZWxkcywgc28gaW5pdCBoZXJlXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDk2LVx0ICovXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjUyMS1mYWlsOlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjUyMjpcdC8qIE9ubHkgY2FsbGVkIGZyb20gQlBGIHByb2csIG5vIG5lZWQgdG8gbWlncmF0ZV9kaXNhYmxlICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNTIzLVx0X19icGZfb2JqX2Ryb3BfaW1wbCgodm9pZCAqKW4gLSBvZmYsIHJlYywgZmFsc2UpO1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTI1OTc9c3RhdGljIHN0cnVjdCBicGZfbGlzdF9ub2RlICpfX2JwZl9saXN0X2RlbChzdHJ1Y3QgYnBmX2xpc3RfaGVhZCAqaGVhZCxcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNjAzLVx0LyogSWYgbGlzdF9oZWFkIHdhcyAwLWluaXRpYWxpemVkIGJ5IG1hcCwgYnBmX29ial9pbml0X2ZpZWxkIHdhc24mIzM5O3Rcbmtlcm5lbC9icGYvaGVscGVycy5jOjI2MDQ6XHQgKiBjYWxsZWQgb24gaXRzIGZpZWxkcywgc28gaW5pdCBoZXJlXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNjA1LVx0ICovXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjY5MD1fX2JwZl9rZnVuYyBib29sIGJwZl9saXN0X2VtcHR5KHN0cnVjdCBicGZfbGlzdF9oZWFkICpoZWFkKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTI2OTQtXHQvKiBJZiBsaXN0X2hlYWQgd2FzIDAtaW5pdGlhbGl6ZWQgYnkgbWFwLCBicGZfb2JqX2luaXRfZmllbGQgd2FzbiYjMzk7dFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjY5NTpcdCAqIGNhbGxlZCBvbiBpdHMgZmllbGRzLCBzbyBpbml0IGhlcmVcbmtlcm5lbC9icGYvaGVscGVycy5jLTI2OTYtXHQgKi9cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yNzI1PXN0YXRpYyBpbnQgX19icGZfcmJ0cmVlX2FkZChzdHJ1Y3QgYnBmX3JiX3Jvb3QgKnJvb3QsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjczNy1cdGlmIChjbXB4Y2hnKFx1MDAyNm5vZGUtXHUwMDNlb3duZXIsIE5VTEwsIEJQRl9QVFJfUE9JU09OKSkge1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjczODpcdFx0LyogT25seSBjYWxsZWQgZnJvbSBCUEYgcHJvZywgbm8gbmVlZCB0byBtaWdyYXRlX2Rpc2FibGUgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jLTI3MzktXHRcdF9fYnBmX29ial9kcm9wX2ltcGwoKHZvaWQgKiluIC0gb2ZmLCByZWMsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00MzE4PV9fYnBmX2tmdW5jIGludCBicGZfdmVyaWZ5X3BrY3M3X3NpZ25hdHVyZShjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZGF0YV9wLFxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQzMzQtXHRcdCAqIEEgY2FsbCB0byBrZXlfdGFza19wZXJtaXNzaW9uKCkgaGVyZSB3b3VsZCBiZSByZWR1bmRhbnQsIGFzXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzM1Olx0XHQgKiBpdCBpcyBhbHJlYWR5IGRvbmUgYnkga2V5cmluZ19zZWFyY2goKSBjYWxsZWQgYnlcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzMzYtXHRcdCAqIGZpbmRfYXN5bW1ldHJpY19rZXkoKS5cbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NjIwPXN0YXRpYyB2b2lkIGRyYWluX21lbV9jYWNoZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNjIzLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjYyNDpcdC8qIE5vIHByb2dzIGFyZSB1c2luZyB0aGlzIGJwZl9tZW1fY2FjaGUsIGJ1dCBodGFiX21hcF9mcmVlKCkgY2FsbGVkXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNjI1LVx0ICogYnBmX21lbV9jYWNoZV9mcmVlKCkgZm9yIGFsbCByZW1haW5pbmcgZWxlbWVudHMgYW5kIHRoZXkgY2FuIGJlIGluXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTc3Nj1zdGF0aWMgdm9pZCBub3RyYWNlICp1bml0X2FsbG9jKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy04MTYtICogYWRkIGl0IHRvIHRoZSBmcmVlX2xsaXN0IG9mIHRoZSBjdXJyZW50IGNwdS5cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo4MTc6ICogTGV0IGtmcmVlKCkgbG9naWMgZGVhbCB3aXRoIGl0IHdoZW4gaXQmIzM5O3MgbGF0ZXIgY2FsbGVkIGZyb20gaXJxX3dvcmsuXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtODE4LSAqL1xuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTQxPXN0YXRpYyB2b2lkIG5ldG5zX2JwZl9hdHRhY2hfdHlwZV9uZWVkKGVudW0gbmV0bnNfYnBmX2F0dGFjaF90eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNTMtXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzo1NDovKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG5ldG5zX2JwZl9tdXRleCBoZWxkLiAqL1xua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNTUtc3RhdGljIHZvaWQgbmV0bnNfYnBmX3J1bl9hcnJheV9kZXRhY2goc3RydWN0IG5ldCAqbmV0LFxuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTIzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfbmV0bnNfbGlua19vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjM4LVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6MjM5Oi8qIE11c3QgYmUgY2FsbGVkIHdpdGggbmV0bnNfYnBmX211dGV4IGhlbGQuICovXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0yNDAtc3RhdGljIGludCBfX25ldG5zX2JwZl9wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTI5MT1pbnQgbmV0bnNfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMzU2LVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6MzU3Oi8qIE11c3QgYmUgY2FsbGVkIHdpdGggbmV0bnNfYnBmX211dGV4IGhlbGQuICovXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0zNTgtc3RhdGljIGludCBfX25ldG5zX2JwZl9wcm9nX2RldGFjaChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNDQtICogVGhlIGJhc2ljIHByaW5jaXBsZSBvZiBhIHF1ZXVlLWJhc2VkIHNwaW5sb2NrIGNhbiBiZXN0IGJlIHVuZGVyc3Rvb2Rcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjQ1OiAqIGJ5IHN0dWR5aW5nIGEgY2xhc3NpYyBxdWV1ZS1iYXNlZCBzcGlubG9jayBpbXBsZW1lbnRhdGlvbiBjYWxsZWQgdGhlXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy00Ni0gKiBNQ1MgbG9jay4gQSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBNQ1MgbG9jayBwYXBlciAoXCYjMzQ7QWxnb3JpdGhtcyBmb3IgU2NhbGFibGVcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz0yNjE9aW50IF9fbG9ja2Z1bmMgcmVzaWxpZW50X3Rhc19zcGluX2xvY2socnFzcGlubG9ja190ICpsb2NrKVxuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI2Ny1cdC8qXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzoyNjg6XHQgKiBXZSBhcmUgZWl0aGVyIGNhbGxlZCBkaXJlY3RseSBmcm9tIHJlc19zcGluX2xvY2sgYWZ0ZXIgZ3JhYmJpbmcgdGhlXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yNjktXHQgKiBkZWFkbG9jayBkZXRlY3Rpb24gZW50cnkgd2hlbiBxdWV1ZWQgc3BpbmxvY2tzIGFyZSBkaXNhYmxlZCwgb3IgZnJvbVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTg1PXN0YXRpYyBpbnQgbWF5YmVfZXhpdF9zY2Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xOTctXHRcdCAqIHRyYXZlcnNhbCBzdG9wcyB3aGVuOlxua2VybmVsL2JwZi9zdGF0ZXMuYzoxOTg6XHRcdCAqIGEuIFZlcmlmaWNhdGlvbiBlcnJvciBpcyBmb3VuZCwgbWF5YmVfZXhpdF9zY2MoKSBpcyBub3QgY2FsbGVkLlxua2VybmVsL2JwZi9zdGF0ZXMuYy0xOTktXHRcdCAqIGIuIFRvcCBsZXZlbCBCUEZfRVhJVCBpcyByZWFjaGVkLiBUb3AgbGV2ZWwgQlBGX0VYSVQgaXMgbm90IGEgbWVtYmVyXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz04Njk9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTkyMy0gKlxua2VybmVsL2JwZi9zdGF0ZXMuYzo5MjQ6ICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB2ZXJpZmllciBleHBsb3JpbmcgZGlmZmVyZW50IGJyYW5jaGVzIG9mXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTkyNS0gKiBleGVjdXRpb24gcG9wcGVkIGZyb20gdGhlIHN0YXRlIHN0YWNrLiBJZiBpdCBzZWVzIGFuIG9sZCBzdGF0ZSB0aGF0IGhhc1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzOT1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQ1MC1cdFx0XHQgKlxua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDUxOlx0XHRcdCAqIC0gV2hlbiBhIHZlcmlmaWNhdGlvbiBwYXRoIHRlcm1pbmF0ZXMsIGBtYXliZV9leGl0X3NjYygpYCBpcyBjYWxsZWRcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQ1Mi1cdFx0XHQgKiAgIGZyb20gYGJwZl91cGRhdGVfYnJhbmNoX2NvdW50cygpYC4gRm9yIHN0YXRlcyB3aXRoIGBicmFuY2hlcyA9PSAwYCwgaXRcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NTUtXHRcdFx0ICogICB0aGlzIFNDQyB2aXNpdCBoYXZlIGJlZW4gZXhwbG9yZWQuIGBwcm9wYWdhdGVfYmFja2VkZ2VzKClgIGlzIHRoZW5cbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQ1NjpcdFx0XHQgKiAgIGNhbGxlZCwgd2hpY2ggcHJvcGFnYXRlcyByZWFkIGFuZCBwcmVjaXNpb24gbWFya3MgdGhyb3VnaCB0aGVcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQ1Ny1cdFx0XHQgKiAgIGJhY2tlZGdlcyB1bnRpbCBhIGZpeGVkIHBvaW50IGlzIHJlYWNoZWQuXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9ODg1PXN0YXRpYyB2b2lkIGJwZl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTkxNC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjkxNTovKiBjYWxsZWQgZnJvbSB3b3JrcXVldWUgKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTkxNi1zdGF0aWMgdm9pZCBicGZfbWFwX2ZyZWVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTk1MT12b2lkIGJwZl9tYXBfcHV0KHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTUzLVx0aWYgKGF0b21pYzY0X2RlY19hbmRfdGVzdChcdTAwMjZtYXAtXHUwMDNlcmVmY250KSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6OTU0Olx0XHQvKiBicGZfbWFwX2ZyZWVfaWQoKSBtdXN0IGJlIGNhbGxlZCBmaXJzdCAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmMtOTU1LVx0XHRicGZfbWFwX2ZyZWVfaWQobWFwKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMDUyPXN0YXRpYyBzc2l6ZV90IGJwZl9kdW1teV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDYwLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA2MTovKiBjYWxsZWQgZm9yIGFueSBleHRyYSBtZW1vcnktbWFwcGVkIHJlZ2lvbnMgKGV4Y2VwdCBpbml0aWFsKSAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMTA2Mi1zdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDY5LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA3MDovKiBjYWxsZWQgZm9yIGFsbCB1bm1hcHBlZCBtZW1vcnkgcmVnaW9uIChpbmNsdWRpbmcgaW5pdGlhbCkgKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwNzEtc3RhdGljIHZvaWQgYnBmX21hcF9tbWFwX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyNTU9c3RhdGljIGludCBtYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzODAtI2RlZmluZSBCUEZfTUFQX0NSRUFURV9MQVNUX0ZJRUxEIGV4Y2xfcHJvZ19oYXNoX3NpemVcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzODE6LyogY2FsbGVkIHZpYSBzeXNjYWxsICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzgyLXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjU2Mj1zdGF0aWMgdm9pZCBicGZfcHJvZ19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI1NzgtXHRcdCAgIFwmIzM0O3JlY3Vyc2lvbl9taXNzZXM6XFx0JWxsdVxcblwmIzM0O1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MjU3OTpcdFx0ICAgXCYjMzQ7dmVyaWZpZWRfaW5zbnM6XFx0JXVcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNTgwLVx0XHQgICBwcm9nLVx1MDAzZXR5cGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjU4Ny1cdFx0ICAgc3RhdHMubWlzc2VzLFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjU4ODpcdFx0ICAgcHJvZy1cdTAwM2VhdXgtXHUwMDNldmVyaWZpZWRfaW5zbnMpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMjU4OS19XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzMxMT1zdGF0aWMgYm9vbCBicGZfbGlua19pc190cmFjZXBvaW50KHN0cnVjdCBicGZfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzIyLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzMyMzovKiBicGZfbGlua19mcmVlIGlzIGd1YXJhbnRlZWQgdG8gYmUgY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0ICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzI0LXN0YXRpYyB2b2lkIGJwZl9saW5rX2ZyZWUoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTMzNjA9c3RhdGljIHZvaWQgYnBmX2xpbmtfcHV0X2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzY2LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzM2NzovKiBicGZfbGlua19wdXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gYXRvbWljIGNvbnRleHQuIEl0IG5lZWRzIHRvIGJlIGNhbGxlZFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzM2OC0gKiBmcm9tIHNsZWVwYWJsZSBjb250ZXh0IGluIG9yZGVyIHRvIGFjcXVpcmUgc2xlZXBpbmcgbG9ja3MgZHVyaW5nIHRoZSBwcm9jZXNzLlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM2MzQ9c3RhdGljIGludCBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzcyNy1cdCAqXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzI4Olx0ICogLSBpZiB0Z3RfcHJvZyA9PSBOVUxMIHdoZW4gdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkIHVzaW5nIHRoZSBvbGRcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3MjktXHQgKiAgIHJhd190cmFjZXBvaW50X29wZW4gQVBJLCBhbmQgd2UgbmVlZCBhIHRhcmdldCBmcm9tIHByb2ctXHUwMDNlYXV4XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTA5OT1zdGF0aWMgaW50IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxNTgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1MTU5Olx0aW5mby52ZXJpZmllZF9pbnNucyA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZXZlcmlmaWVkX2luc25zO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTE2MC1cdGlmIChwcm9nLVx1MDAzZWF1eC1cdTAwM2VidGYpXG4tLVxua2VybmVsL2JwZi90bnVtLmM9MjY4PXN0cnVjdCB0bnVtIHRudW1fYnN3YXA2NChzdHJ1Y3QgdG51bSBhKVxuLS1cbmtlcm5lbC9icGYvdG51bS5jLTI4Mi0gKlxua2VybmVsL2JwZi90bnVtLmM6MjgzOiAqIE5vdGU6IGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggeiBcdTAwM2U9IHRtYXgsIGl0IGp1c3QgcmV0dXJuc1xua2VybmVsL2JwZi90bnVtLmM6Mjg0OiAqIGVhcmx5IHdpdGggdG1heDsgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB6IFx1MDAzYyB0bWluLCB0aGVcbmtlcm5lbC9icGYvdG51bS5jLTI4NS0gKiBhbGdvcml0aG0gYWxyZWFkeSByZXR1cm5zIHRtaW4uXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTg9c3RhdGljIGludCBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXAsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTA4LVx0aWYgKGNtZCA9PSBGVFJBQ0VfT1BTX0NNRF9FTkFCTEVfU0hBUkVfSVBNT0RJRllfU0VMRikge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTA5Olx0XHQvKiBUaGlzIGlzIGNhbGxlZCBpbnNpZGUgcmVnaXN0ZXJfZnRyYWNlX2RpcmVjdF9tdWx0aSgpLCBzb1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEwLVx0XHQgKiB0cmFtcG9saW5lJiMzOTtzIG11dGV4IGlzIGFscmVhZHkgbG9ja2VkLlxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEzMy1cdCAqXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMzQ6XHQgKiBUaGUgZm9sbG93aW5nIHR3byBjb21tYW5kcyBhcmUgY2FsbGVkIGZyb21cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEzNS1cdCAqXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYzMz1zdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzctXHQgKiBXaGVuIGJwZl90cmFtcG9saW5lX3VwZGF0ZSgpIGZhaWxzIGJlZm9yZSBtb2RpZnlfZmVudHJ5X211bHRpKCkvXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjM4Olx0ICogdW5yZWdpc3Rlcl9mZW50cnlfbXVsdGkoKSBpcyBjYWxsZWQsIGN1cl9pbWFnZSBpcyB1bmNoYW5nZWRcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzktXHQgKiAoY3VyX2ltYWdlID09IG9sZF9pbWFnZSkgYW5kIGZ0cmFjZSBzdGlsbCBwb2ludHMgdG8gaXQuIEZyZWVpbmdcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA3OD1zdGF0aWMgdm9pZCBfX3VwZGF0ZV9yZWc2NF9ib3VuZHMoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5Ni1cdFx0LyogVGhlIHU2NCByYW5nZSBhbmQgdGhlIHRudW0gb25seSBvdmVybGFwIGluIHRoZSBtYXhpbXVtIHZhbHVlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5NzpcdFx0ICogcmVwcmVzZW50ZWQgYnkgdGhlIHRudW0sIGNhbGxlZCB0bWF4Llxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTgtXHRcdCAqIHU2NDogIC0tLVt4eHh4eHhdLS0tLS1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDEzMD1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDE2MS1cdCAqIEFMVS4gU2VlIGFsc28gcmV0cmlldmVfcHRyX2xpbWl0KCkuIFRoZSBjaGVjayBpblxua2VybmVsL2JwZi92ZXJpZmllci5jOjQxNjI6XHQgKiBjaGVja19zdGFja19hY2Nlc3NfZm9yX3B0cl9hcml0aG1ldGljKCkgY2FsbGVkIGJ5XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDE2My1cdCAqIGFkanVzdF9wdHJfbWluX21heF92YWxzKCkgcHJldmVudHMgdXNlcnMgZnJvbSBjcmVhdGluZyBzdGFjayBwb2ludGVyc1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDAyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgc2l0dWF0aW9uOgoKKipDaGVja2luZyBmb3IgSW5pdGlhbGl6YXRpb24gb2YgYGVudi0mZ3Q7c3VicHJvZ190b3BvX29yZGVyYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdmVyaWZ5IGEgY3J1Y2lhbCBkZXRhaWwgcmVnYXJkaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgZW52LSZndDtzdWJwcm9nX3RvcG9fb3JkZXJgLiBJdCYjMzk7cyBlc3NlbnRpYWwgdGhhdCB0aGlzIGRhdGEgc3RydWN0dXJlIGlzIGFsd2F5cyBwcm9wZXJseSBzZXQgdXAgYmVmb3JlIGBkb19jaGVja19zdWJwcm9nc2AgaXMgaW52b2tlZC4gVGhpcyBpcyBhIGNvbW1vbiBwb2ludCBvZiBlcnJvciBpbiBjb21waWxlciBiYWNrZW5kcywgc28gSSBuZWVkIHRvIGJlIHN1cmUuIE15IG5leHQgc3RlcCBpcyB0byBpbml0aWF0ZSBhIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBzdWJwcm9nX3RvcG9fb3JkZXJgIHRocm91Z2hvdXQgdGhlIHJlbGV2YW50IGNvZGUgYmFzZS4gSSBuZWVkIHRvIGJlIHRob3JvdWdoIGFuZCBwcmVjaXNlIHRvIGNvbmZpcm0gaXRzIHByb3BlciBpbml0aWFsaXphdGlvbiBhbmQgdXNlLiBUaGlzIHNob3VsZG4mIzM5O3QgdGFrZSB0b28gbG9uZywgYnV0IGl0IG5lZWRzIHRvIGJlIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N1YnByb2dfdG9wb19vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9saXZlbmVzcy5jPTE5ODU9aW50IGJwZl9jb21wdXRlX3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMDE0LVx0Zm9yIChrID0gZW52LVx1MDAzZXN1YnByb2dfY250IC0gMTsgayBcdTAwM2U9IDA7IGstLSkge1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjIwMTU6XHRcdGludCBzdWIgPSBlbnYtXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2tdO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTIwMTYtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTMxMzU9c3RhdGljIGludCBzb3J0X3N1YnByb2dzX3RvcG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIwNC1cdFx0XHRcdGNvbG9yW2N1cl0gPSAyO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjMyMDU6XHRcdFx0XHRlbnYtXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW29yZGVyJiM0MzsmIzQzO10gPSBjdXI7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIwNi1cdFx0XHRcdHRvcC0tO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjEzLVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDt0b3BvX29yZGVyWyVkXSA9ICVzXFxuXCYjMzQ7LFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyMTQ6XHRcdFx0XHRpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgZW52LVx1MDAzZXN1YnByb2dfdG9wb19vcmRlcltpXSkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMTUtb3V0OlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTc1NT1zdGF0aWMgaW50IGRvX2NoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzc4LVx0Zm9yIChqID0gZW52LVx1MDAzZXN1YnByb2dfY250IC0gMTsgaiBcdTAwM2U9IDA7IGotLSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Nzc5Olx0XHRpID0gZW52LVx1MDAzZXN1YnByb2dfdG9wb19vcmRlcltqXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc4MC1cdFx0aWYgKCFpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzcwMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgc29ydF9zdWJwcm9nc190b3BvYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYHNvcnRfc3VicHJvZ3NfdG9wb2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBicGZfdmVyaWZpZXJfZW52YCBjb250ZXh0LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgaXRzIHB1cnBvc2UuIEl0JiMzOTtzIG9idmlvdXNseSBkZXNpZ25lZCBmb3IgdG9wb2xvZ2ljYWwgc29ydGluZyBvZiBzdWJwcm9ncmFtcyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpczogd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqdXNlZCo/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIGNoYWluIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBhbmQgdW5kZXJzdGFuZCB3aHkgYW5kIHdoZW4gdGhlIHZlcmlmaWVyIGRlY2lkZXMgdG8gaW52b2tlIHRoaXMgc29ydGluZyBmdW5jdGlvbi4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGtleSBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaW1wYWN0IGFuZCBpZGVudGlmeWluZyBwb3RlbnRpYWwgaXNzdWVzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byB0cmFjZSB0aG9zZSBjYWxsczsgZmluZGluZyB0aGlzIGZ1bmN0aW9uJiMzOTtzIGNhbGxlcnMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvcnRfc3VicHJvZ3NfdG9wbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTMwNjE9c3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTM0LSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjMxMzU6c3RhdGljIGludCBzb3J0X3N1YnByb2dzX3RvcG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTM2LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjEzMDY9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDc1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxNDc2Olx0cmV0ID0gc29ydF9zdWJwcm9nc190b3BvKGVudik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjE0NzctXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE3MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGlzc3VlICpzaG91bGQqIGJlIHNvbWV3aGVyZSBhcm91bmQgbGluZSAyMTQ3NSBvZiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGxvZ2ljIHRoYXQmIzM5O3MgbGVhZGluZyB0byB0aGUgdW5leHBlY3RlZCBiZWhhdmlvciBJJiMzOTttIHNlZWluZy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGZsYXdzIGluIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcy4uLiB3ZWxsLCBpdCBjb3VsZCBiZSBhbnkgbnVtYmVyIG9mIHRoaW5ncy4gTWVtb3J5IGFjY2VzcyB0cmFja2luZz8gUmVnaXN0ZXIgc3RhdGUgbWFuYWdlbWVudD8gTG9vcCB1bnJvbGxpbmcgaW50ZXJhY3Rpb25zPyBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGlzc3VlIHdpdGggaG93IGl0IGludGVycHJldHMgaW5zdHJ1Y3Rpb24gc2VtYW50aWNzLCBvciBhIHN1YnRsZSBidWcgaW4gdGhlIGNvbnN0cmFpbnRzIGl0IGVuZm9yY2VzLiBHaXZlbiB0aGUgbmF0dXJlIG9mIEJQRiB2ZXJpZmljYXRpb24sIGl0JiMzOTtzIG9mdGVuIGEgY29tcGxleCBpbnRlcnBsYXkgb2YgZGlmZmVyZW50IGZhY3RvcnMsIHNvIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyBpbiB0aGF0IGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE0NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE0NzA6XHRcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4yMTQ3MTpcdFxuMjE0NzI6XHRcdHJldCA9IGJwZl9wcnVuZV9kZWFkX2JyYW5jaGVzKGVudik7XG4yMTQ3MzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIxNDc0Olx0XHRcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xuMjE0NzU6XHRcbjIxNDc2Olx0XHRyZXQgPSBzb3J0X3N1YnByb2dzX3RvcG8oZW52KTtcbjIxNDc3Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMjE0Nzg6XHRcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4yMTQ3OTpcdFxuMjE0ODA6XHRcdHJldCA9IGJwZl9jb21wdXRlX3NjYyhlbnYpO1xuMjE0ODE6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMTQ4MjpcdFx0XHRnb3RvIHNraXBfZnVsbF9jaGVjaztcbjIxNDgzOlx0XG4yMTQ4NDpcdFx0LyogbXVzdCBwcmVjZWRlIHRoZSBmaXJzdCBicGZfcmV0X3JlZ19wYWlyKCkgdXNlciBiZWxvdyAqL1xuMjE0ODU6XHRcdHJldCA9IGJwZl9jb21wdXRlX3N1YnByb2dfcmV0X3JlZ3MoZW52KTtcbjIxNDg2Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMjE0ODc6XHRcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4yMTQ4ODpcdFxuMjE0ODk6XHRcdHJldCA9IGJwZl9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzKGVudik7XG4yMTQ5MDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIxNDkxOlx0XHRcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xuMjE0OTI6XHRcbjIxNDkzOlx0XHRyZXQgPSBtYXJrX2Zhc3RjYWxsX3BhdHRlcm5zKGVudik7XG4yMTQ5NDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIxNDk1Olx0XHRcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xuMjE0OTY6XHRcbjIxNDk3Olx0XHRyZXQgPSBkb19jaGVja19tYWluKGVudik7XG4yMTQ5ODpcdFx0cmV0ID0gcmV0ID86IGRvX2NoZWNrX3N1YnByb2dzKGVudik7XG4yMTQ5OTpcdFxuMjE1MDA6XHRcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eCkpXG4yMTUwMTpcdFx0XHRyZXQgPSBicGZfcHJvZ19vZmZsb2FkX2ZpbmFsaXplKGVudik7XG4yMTUwMjpcdFxuMjE1MDM6XHRza2lwX2Z1bGxfY2hlY2s6XG4yMTUwNDpcdFx0a3ZmcmVlKGVudi1cdTAwM2VleHBsb3JlZF9zdGF0ZXMpO1xuMjE1MDU6XHRcbjIxNTA2Olx0XHQvKiBtaWdodCBkZWNyZWFzZSBzdGFjayBkZXB0aCwga2VlcCBpdCBiZWZvcmUgcGFzc2VzIHRoYXRcbjIxNTA3Olx0XHQgKiBhbGxvY2F0ZSBhZGRpdGlvbmFsIHNsb3RzLlxuMjE1MDg6XHRcdCAqL1xuMjE1MDk6XHRcdGlmIChyZXQgPT0gMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwNDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBTdWJwcm9ncmFtIE9yZGVyaW5nKioKCk9rYXksIHNvIGBzb3J0X3N1YnByb2dzX3RvcG9gIG5lZWRzIHRvIGV4ZWN1dGUgYmVmb3JlIGJvdGggYGRvX2NoZWNrX21haW5gIGFuZCBgZG9fY2hlY2tfc3VicHJvZ3NgLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSBuZWVkIHRoZSB0b3BvbG9naWNhbCBzb3J0IHBlcmZvcm1lZCBiZWZvcmUgd2Ugc3RhcnQgdmFsaWRhdGluZyBhbnl0aGluZyBhZ2FpbnN0IHRoZSByZXN1bHRpbmcgb3JkZXIuIFRoZSBjcml0aWNhbCBwYXJ0IEkmIzM5O20gZm9jdXNpbmcgb24gbm93IGlzIGhvdyBgc3VicHJvZ190b3BvX29yZGVyYCBpcyBiZWluZyBhbGxvY2F0ZWQuIEkgcmVjYWxsIHRoYXQgdmFyaWFibGUsIGBzdWJwcm9nX3RvcG9fb3JkZXJgIGlzIGFsbG9jYXRlZCB3aXRoaW4gZWl0aGVyIGBicGZfY2hlY2tgIG9yIGBhbGxvY19lbnZgLiBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgY29uZmlybSB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBiZWNhdXNlIGRlcGVuZGluZyBvbiB3aGVuIGl0IGlzIHNldCwgaXQgd2lsbCBpbXBhY3QgdGhlIGVudGlyZSBjb250cm9sIGZsb3cgYW5kIG1ha2Ugc3VyZSBhbGwgY2hlY2tzIGhhdmUgYSB3ZWxsIGRlZmluZWQgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgdGhvc2UgZnVuY3Rpb25zIHRvIGJlIGNlcnRhaW4gSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N1YnByb2dfdG9wb19vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzEzNT1zdGF0aWMgaW50IHNvcnRfc3VicHJvZ3NfdG9wbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjA0LVx0XHRcdFx0Y29sb3JbY3VyXSA9IDI7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIwNTpcdFx0XHRcdGVudi1cdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJbb3JkZXImIzQzOyYjNDM7XSA9IGN1cjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjA2LVx0XHRcdFx0dG9wLS07XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMTMtXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3RvcG9fb3JkZXJbJWRdID0gJXNcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIxNDpcdFx0XHRcdGksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBlbnYtXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2ldKSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIxNS1vdXQ6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NzU1PXN0YXRpYyBpbnQgZG9fY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NzgtXHRmb3IgKGogPSBlbnYtXHUwMDNlc3VicHJvZ19jbnQgLSAxOyBqIFx1MDAzZT0gMDsgai0tKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3Nzk6XHRcdGkgPSBlbnYtXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2pdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzgwLVx0XHRpZiAoIWkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjkxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBzb3J0X3N1YnByb2dzX3RvcG9gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGVudi0mZ3Q7c3VicHJvZ190b3BvX29yZGVyYCBzdHJ1Y3R1cmUgaXMgcG9wdWxhdGVkLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIHRoZSBgc29ydF9zdWJwcm9nc190b3BvYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYWxsb2NhdGlvbiBhbmQgb3JkZXJpbmcgbG9naWMgbGlrZWx5IHJlc2lkZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhlIHN1YnByb2dyYW1zIGZyb20gYSB0b3BvbG9naWNhbCBwb2ludCBvZiB2aWV3LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGFyZSBzb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMTM1Olx0c3RhdGljIGludCBzb3J0X3N1YnByb2dzX3RvcG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbjMxMzY6XHR7XG4zMTM3Olx0XHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc2kgPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvO1xuMzEzODpcdFx0aW50ICppbnNuX3Bvc3RvcmRlciA9IGVudi1cdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXI7XG4zMTM5Olx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4zMTQwOlx0XHRpbnQgY250ID0gZW52LVx1MDAzZXN1YnByb2dfY250O1xuMzE0MTpcdFx0aW50ICpkZnNfc3RhY2sgPSBOVUxMO1xuMzE0MjpcdFx0aW50IHRvcCA9IDAsIG9yZGVyID0gMDtcbjMxNDM6XHRcdGludCBpLCByZXQgPSAwO1xuMzE0NDpcdFx0dTggKmNvbG9yID0gTlVMTDtcbjMxNDU6XHRcbjMxNDY6XHRcdGNvbG9yID0ga3Z6YWxsb2Nfb2JqcygqY29sb3IsIGNudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjMxNDc6XHRcdGRmc19zdGFjayA9IGt2bWFsbG9jX29ianMoKmRmc19zdGFjaywgY250LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuMzE0ODpcdFx0aWYgKCFjb2xvciB8fCAhZGZzX3N0YWNrKSB7XG4zMTQ5Olx0XHRcdHJldCA9IC1FTk9NRU07XG4zMTUwOlx0XHRcdGdvdG8gb3V0O1xuMzE1MTpcdFx0fVxuMzE1MjpcdFxuMzE1MzpcdFx0LypcbjMxNTQ6XHRcdCAqIERGUyBwb3N0LW9yZGVyIHRyYXZlcnNhbC5cbjMxNTU6XHRcdCAqIENvbG9yIHZhbHVlczogMCA9IHVudmlzaXRlZCwgMSA9IG9uIHN0YWNrLCAyID0gZG9uZS5cbjMxNTY6XHRcdCAqL1xuMzE1NzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuMzE1ODpcdFx0XHRpZiAoY29sb3JbaV0pXG4zMTU5Olx0XHRcdFx0Y29udGludWU7XG4zMTYwOlx0XHRcdGNvbG9yW2ldID0gMTtcbjMxNjE6XHRcdFx0ZGZzX3N0YWNrW3RvcCYjNDM7JiM0MztdID0gaTtcbjMxNjI6XHRcbjMxNjM6XHRcdFx0d2hpbGUgKHRvcCBcdTAwM2UgMCkge1xuMzE2NDpcdFx0XHRcdGludCBjdXIgPSBkZnNfc3RhY2tbdG9wIC0gMV07XG4zMTY1Olx0XHRcdFx0aW50IHBvX3N0YXJ0ID0gc2lbY3VyXS5wb3N0b3JkZXJfc3RhcnQ7XG4zMTY2Olx0XHRcdFx0aW50IHBvX2VuZCA9IHNpW2N1ciAmIzQzOyAxXS5wb3N0b3JkZXJfc3RhcnQ7XG4zMTY3Olx0XHRcdFx0Ym9vbCBwdXNoZWQgPSBmYWxzZTtcbjMxNjg6XHRcdFx0XHRpbnQgajtcbjMxNjk6XHRcbjMxNzA6XHRcdFx0XHRmb3IgKGogPSBwb19zdGFydDsgaiBcdTAwM2MgcG9fZW5kOyBqJiM0MzsmIzQzOykge1xuMzE3MTpcdFx0XHRcdFx0aW50IGlkeCA9IGluc25fcG9zdG9yZGVyW2pdO1xuMzE3MjpcdFx0XHRcdFx0aW50IGNhbGxlZTtcbjMxNzM6XHRcbjMxNzQ6XHRcdFx0XHRcdGlmICghYnBmX3BzZXVkb19jYWxsKFx1MDAyNmluc25baWR4XSkgXHUwMDI2XHUwMDI2ICFicGZfcHNldWRvX2Z1bmMoXHUwMDI2aW5zbltpZHhdKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MzAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkZpbmRpbmcgdGhlIEFsbG9jYXRpb24gb2YgYGVudi0mZ3Q7c3VicHJvZ190b3BvX29yZGVyYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgZW52LSZndDtzdWJwcm9nX3RvcG9fb3JkZXJgIGlzIGJlaW5nIGFsbG9jYXRlZC4gVGhpcyBmZWVscyBsaWtlIGEgY2xhc3NpYyBkZWJ1Z2dpbmcgZXhlcmNpc2UuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBzdGFydCBieSBkb2luZyBhIGNvbXByZWhlbnNpdmUgc2VhcmNoIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcsIHNvIEkmIzM5O2xsIGdvIHdpZGUsIHNlYXJjaGluZyB0aGUgZW50aXJlIHByb2plY3QgdHJlZS4gTGV0JiMzOTtzIHNlZSB3aGF0IEkgdHVybiB1cC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB3aWxsIGludm9sdmUgbG9va2luZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N1YnByb2dfdG9wb19vcmRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTkxOT1zdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiB7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC05NjQtXHQvKiBzdWJwcm9nIGluZGljZXMgc29ydGVkIGluIHRvcG9sb2dpY2FsIG9yZGVyOiBsZWF2ZXMgZmlyc3QsIGNhbGxlcnMgbGFzdCAqL1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDo5NjU6XHRpbnQgc3VicHJvZ190b3BvX29yZGVyW0JQRl9NQVhfU1VCUFJPR1MgJiM0MzsgMl07XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTk2Ni1cdHVuaW9uIHtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTk4NT1pbnQgYnBmX2NvbXB1dGVfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIwMTQtXHRmb3IgKGsgPSBlbnYtXHUwMDNlc3VicHJvZ19jbnQgLSAxOyBrIFx1MDAzZT0gMDsgay0tKSB7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjAxNTpcdFx0aW50IHN1YiA9IGVudi1cdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJba107XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjAxNi1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzEzNT1zdGF0aWMgaW50IHNvcnRfc3VicHJvZ3NfdG9wbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjA0LVx0XHRcdFx0Y29sb3JbY3VyXSA9IDI7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIwNTpcdFx0XHRcdGVudi1cdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJbb3JkZXImIzQzOyYjNDM7XSA9IGN1cjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjA2LVx0XHRcdFx0dG9wLS07XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMTMtXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3RvcG9fb3JkZXJbJWRdID0gJXNcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIxNDpcdFx0XHRcdGksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBlbnYtXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2ldKSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIxNS1vdXQ6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NzU1PXN0YXRpYyBpbnQgZG9fY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NzgtXHRmb3IgKGogPSBlbnYtXHUwMDNlc3VicHJvZ19jbnQgLSAxOyBqIFx1MDAzZT0gMDsgai0tKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3Nzk6XHRcdGkgPSBlbnYtXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2pdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzgwLVx0XHRpZiAoIWkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjkwCgkJCQkJCQlvdXRwdXQ6IDI3NQoJCQkJCQkJdGhvdWdodHM6IDgzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBzdWJwcm9nX3RvcG9fb3JkZXJgIGlzIGFuIGVtYmVkZGVkIGFycmF5IHdpdGhpbiBgc3RydWN0IGJwZl92ZXJpZmllcl9lbnZgLCBhbmQgYGVudmAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLiBUaGlzIGlzIGtleS4gTm93LCByZWdhcmRpbmcgdGhlIHBhdGNoIGl0c2VsZiwgaGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50OgoKMS4gICoqYGluY2x1ZGUvbGludXgvYnBmLmhgOioqIFRoZSBjaGFuZ2UgaW4gYHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eGAsIHJlcGxhY2luZyBzaW5nbGUtYml0IGJpdGZpZWxkcyBgY2FsbGVkYCBhbmQgYHZlcmlmaWVkYCB3aXRoIGBib29sIGNhbGxlZFsyXWAgYW5kIGBib29sIHZlcmlmaWVkWzJdYCwgaXMgZGVmaW5pdGVseSBpbnRlcmVzdGluZy4gVGhlc2UgYXV4aWxpYXJ5IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBkdXJpbmcgQlRGIHByb2Nlc3NpbmcuIFRoZSBjcml0aWNhbCB0aGluZyBpcyB0aGF0IHRoZXkgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIG9yIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2Jqc2AuIFRoaXMgc2V0cyB0aGUgc3RhZ2UuCgoyLiAgKipga2VybmVsL2JwZi92ZXJpZmllci5jYDoqKiBUaGUgY29yZSBsb2dpYyBoYXMgYmVlbiBtb2RpZmllZC4gSW4gYGNoZWNrX2Z1bmNfY2FsbCgpYCwgd2UmIzM5O3JlIG5vdyB0cmFja2luZyB0aGUgaW52b2NhdGlvbiBjb250ZXh0IGV4cGxpY2l0bHkgd2l0aCBgc3ViX2F1eC0mZ3Q7Y2FsbGVkW2luX3NsZWVwYWJsZV9jb250ZXh0KGVudildID0gdHJ1ZWAgaW5zdGVhZCBvZiBhIHNpbXBsZSBib29sZWFuIGFzc2lnbm1lbnQuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGluX3NsZWVwYWJsZWAgYXMgYSBwYXJhbWV0ZXIgdG8gYGRvX2NoZWNrX2NvbW1vbigpYCBhbmQgdGhlIGV4cGxpY2l0IHNldHRpbmcgb2YgYHN0YXRlLSZndDtpbl9zbGVlcGFibGVgIGlzIGltcG9ydGFudCBmb3IgaGFuZGxpbmcgc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIGNvbnRleHRzLCBhbmQgaXQgdXBkYXRlcyBpbnNuIGFjY3VtdWxhdGlvbi4gIGBkb19jaGVja19zdWJwcm9ncygpYCBpdGVyYXRlcyBpbiByZXZlcnNlIHRvcG9sb2dpY2FsIG9yZGVyLCBjaGVja2luZyBib3RoIGNvbnRleHRzIGlmIG1hcmtlZCBhcyBjYWxsZWQuICBGaW5hbGx5LCBgZG9fY2hlY2tfbWFpbigpYCBjYWxscyBgZG9fY2hlY2tfY29tbW9uKClgLiBUaGUgcmV2ZXJzZSB0b3BvbG9naWNhbCBvcmRlciBhbmQgZHVhbC1jb250ZXh0IGNoZWNraW5nIGlzIGEga2V5IGNoYW5nZS4KCjMuICAqKlNlbGZ0ZXN0czoqKiBUaGUgYWRkaXRpb24gb2YgdGVzdHMgZm9yIGdsb2JhbCBzdWJwcm9ncmFtcyBpbiBib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cyBpcyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIHdoYXQgdGhlIGRldmVsb3BlcnMgYXJlIHRyeWluZyB0byB2YWxpZGF0ZSwgZW5zdXJpbmcgdGhleSBoYXZlbiYjMzk7dCBpbnRyb2R1Y2VkIGFueSByZWdyZXNzaW9uIG9yIG5ldyBpc3N1ZXMgd2hlbiBoYW5kbGluZyBkaWZmZXJlbnQgY29udGV4dHMuCgpOb3csIGxldCYjMzk7cyBldmFsdWF0ZSB0aGlzIGluIHRoZSBjb250ZXh0IG9mIEtNU0FOIHZzLiBLQVNBTjoKCiogICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vcGUuIFRoZSBwYXRjaCBpcyB3b3JraW5nIG9uIGBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXhgLCB3aGljaCBpcyBlbnRpcmVseSBpbnRlcm5hbCB2ZXJpZmllciBtZXRhZGF0YS4gTm8gZGF0YSBmcm9tIHRoYXQgc3RydWN0IGlzIGV2ZXIgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCiogICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogTm8uICBGaWVsZHMgd2l0aGluIGBicGZfZnVuY19pbmZvX2F1eGAgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEFueSBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZXJlJiMzOTtzIG5vIHJpc2sgaGVyZS4KKiAgICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uOioqIE5vLiAgWmVyby1hbGxvY2F0aW9uIHZpYSBga3phbGxvY19vYmpzYCBpcyB2ZXJ5IHN0cmFpZ2h0Zm9yd2FyZC4KKiAgICoqQm91bmRzIGNoZWNrcyAmYW1wOyBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vLgoKUG90ZW50aWFsIGJ1Z3MsIGFzIEkgc2VlIGl0LCB3b3VsZCBiZSByZWxhdGVkIHRvOgoKKiAgIFZlcmlmaWVyIGxvZ2ljIGJ1Z3MgKHJlamVjdGluZyB2YWxpZCBwcm9ncmFtcywgYWNjZXB0aW5nIGludmFsaWQgcHJvZ3JhbXMgd2l0aCBpbmNvcnJlY3QgY29udGV4dCB2ZXJpZmljYXRpb24pLgoqICAgSW5maW5pdGUgbG9vcHMgb3Igb3JkZXJpbmcgaXNzdWVzIGR1cmluZyBzdWJwcm9ncmFtIGl0ZXJhdGlvbi4KKiAgIE91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIHRoZSBgY2FsbGVkYCBvciBgdmVyaWZpZWRgIGFycmF5cyBpZiBgaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KWAgcmV0dXJuZWQgYW55dGhpbmcgb3RoZXIgdGhhbiAwIG9yIDEuIEhvd2V2ZXIsIHNpbmNlIGl0IHJldHVybnMgYSBgYm9vbGAgYW5kIHdlIGtub3cgdGhlIHNpemUgb2YgdGhlIGFycmF5IGlzIDIsIGFueSBvdXQtb2YtYm91bmRzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiAvIGNvbXBpbGVyIGJvdW5kcyBjaGVja3MuIE5vbmUgb2YgdGhlc2UgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZXJlZm9yZSwgKipOZWVkc0tNU0FOID0gZmFsc2UuKioKCk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6CgoqICAgKipLQVNBTiAvIHN0YW5kYXJkIHNhbml0aXplcnM6KiogV2UmIzM5O3JlIHByb3RlY3RlZCBhZ2FpbnN0IHZlcmlmaWVyIGxvZ2ljIGJ1Z3MsIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIHRob3NlIGBjYWxsZWRgIC8gYHZlcmlmaWVkYCBhcnJheXMsIGFueSBwb3RlbnRpYWwgc3RhdGUgYWxsb2NhdGlvbiBlcnJvcnMsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgb3IgaW5maW5pdGUgbG9vcHMgYnkgS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLgoqICAgKipLTVNBTjoqKiBXZSYjMzk7cmUgKm5vdCogZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayB2YXJpYWJsZXMsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgb3IgZmllbGRzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1c2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGluIGNvbmRpdGlvbmFsIGxvZ2ljLiAgYHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eGAgaXMgY29uc2lzdGVudGx5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBremFsbG9jX29ianNgLiBObyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIGhlcmUuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBhbmQgdmVyaWZ5IGdsb2JhbCBzdWJwcm9ncmFtIGNhbGxzIHNlcGFyYXRlbHkgZm9yIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZS9SQ1UgY29udGV4dHMuIEl0IHJlcGxhY2VzIHRoZSBzaW5nbGUtYml0IGBjYWxsZWRgIGFuZCBgdmVyaWZpZWRgIGZsYWdzIGluIGBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXhgIHdpdGggdHdvLWVsZW1lbnQgYm9vbGVhbiBhcnJheXMgaW5kZXhlZCBieSBgaW5fc2xlZXBhYmxlYC5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLiBUaGUgYGJwZl9mdW5jX2luZm9fYXV4YCBzdHJ1Y3R1cmVzIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAodmlhIGBremFsbG9jX29ianNgKSwgYW5kIGFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiBgZG9fY2hlY2tfc3VicHJvZ3MoKWAsIGBkb19jaGVja19jb21tb24oKWAsIGFuZCBgY2hlY2tfZnVuY19jYWxsKClgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlIGFycmF5cyBhcmUgaW5kZXhlZCB1c2luZyBib29sZWFuIHZhbHVlcyAoMCBvciAxKSwgbWF0Y2hpbmcgdGhlIGFycmF5IGRpbWVuc2lvbi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IEFueSBtZW1vcnkgYWNjZXNzIGlzc3VlcyAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIGFjY2VzcywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgc3RhdGUgYWxsb2NhdGlvbiBpc3N1ZXMsIG9yIGxvZ2ljL3ZlcmlmaWVyIHRyYXZlcnNhbCBidWdzKSB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHRyYWNrIGFuZCB2ZXJpZnkgZ2xvYmFsIHN1YnByb2dyYW0gY2FsbHMgc2VwYXJhdGVseSBmb3Igc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlL1JDVSBjb250ZXh0cy4gSXQgcmVwbGFjZXMgdGhlIHNpbmdsZS1iaXQgYGNhbGxlZGAgYW5kIGB2ZXJpZmllZGAgZmxhZ3MgaW4gYHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eGAgd2l0aCB0d28tZWxlbWVudCBib29sZWFuIGFycmF5cyBpbmRleGVkIGJ5IGBpbl9zbGVlcGFibGVgLlxuXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suIFRoZSBgYnBmX2Z1bmNfaW5mb19hdXhgIHN0cnVjdHVyZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uICh2aWEgYGt6YWxsb2Nfb2Jqc2ApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGBkb19jaGVja19zdWJwcm9ncygpYCwgYGRvX2NoZWNrX2NvbW1vbigpYCwgYW5kIGBjaGVja19mdW5jX2NhbGwoKWAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGUgYXJyYXlzIGFyZSBpbmRleGVkIHVzaW5nIGJvb2xlYW4gdmFsdWVzICgwIG9yIDEpLCBtYXRjaGluZyB0aGUgYXJyYXkgZGltZW5zaW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuLSBLQVNBTiAvIFN0YW5kYXJkIERldGVjdG9yczogQW55IG1lbW9yeSBhY2Nlc3MgaXNzdWVzIChzdWNoIGFzIGFycmF5IG91dC1vZi1ib3VuZHMgYWNjZXNzLCBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBzdGF0ZSBhbGxvY2F0aW9uIGlzc3Vlcywgb3IgbG9naWMvdmVyaWZpZXIgdHJhdmVyc2FsIGJ1Z3MpIHdvdWxkIGJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6MTMuMjM2MzM3MTMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzOTM1OTM3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImRvX2NoZWNrX3N1YnByb2dzXCIsXG4gICAgXCJkb19jaGVja19jb21tb25cIixcbiAgICBcImNoZWNrX2Z1bmNfY2FsbFwiLFxuICAgIFwiZG9fY2hlY2tfbWFpblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBhbmQgdmVyaWZ5IGdsb2JhbCBzdWJwcm9ncmFtIGNhbGxzIHNlcGFyYXRlbHkgZm9yIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZS9SQ1UgY29udGV4dHMuIEl0IHJlcGxhY2VzIHRoZSBzaW5nbGUtYml0IGBjYWxsZWRgIGFuZCBgdmVyaWZpZWRgIGZsYWdzIGluIGBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXhgIHdpdGggdHdvLWVsZW1lbnQgYm9vbGVhbiBhcnJheXMgaW5kZXhlZCBieSBgaW5fc2xlZXBhYmxlYC5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suIFRoZSBgYnBmX2Z1bmNfaW5mb19hdXhgIHN0cnVjdHVyZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uICh2aWEgYGt6YWxsb2Nfb2Jqc2ApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGBkb19jaGVja19zdWJwcm9ncygpYCwgYGRvX2NoZWNrX2NvbW1vbigpYCwgYW5kIGBjaGVja19mdW5jX2NhbGwoKWAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGUgYXJyYXlzIGFyZSBpbmRleGVkIHVzaW5nIGJvb2xlYW4gdmFsdWVzICgwIG9yIDEpLCBtYXRjaGluZyB0aGUgYXJyYXkgZGltZW5zaW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IEFueSBtZW1vcnkgYWNjZXNzIGlzc3VlcyAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIGFjY2VzcywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgc3RhdGUgYWxsb2NhdGlvbiBpc3N1ZXMsIG9yIGxvZ2ljL3ZlcmlmaWVyIHRyYXZlcnNhbCBidWdzKSB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHRyYWNrIGFuZCB2ZXJpZnkgZ2xvYmFsIHN1YnByb2dyYW1zIHNlcGFyYXRlbHkgYWNyb3NzIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBleGVjdXRpb24gY29udGV4dHMsIG1vZGlmeWluZyBzdWJwcm9ncmFtIHZlcmlmaWNhdGlvbiBsb29wcywgdG9wb2xvZ2ljYWwgdHJhdmVyc2FsIG9yZGVyLCBhbmQgY29udGV4dCBzdGF0ZSBoYW5kbGluZyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjEzLjIzNjM0Mzc0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5NDc5NzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTZlZmE2MDNhMGQ1MjJlNmVlYzYzMjMwZDE5YTZlMjYwZGZlZTNkOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDEwOjA1OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuaW5kZXggM2E3ZWIyMTg1YzM1NC4uNjZkMDQyNDRjNzM3OCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbkBAIC0xNjUwLDggKzE2NTAsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFnc1xcbiBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXgge1xcbiBcXHR1MTYgbGlua2FnZTtcXG4gXFx0Ym9vbCB1bnJlbGlhYmxlO1xcbi1cXHRib29sIGNhbGxlZCA6IDE7XFxuLVxcdGJvb2wgdmVyaWZpZWQgOiAxO1xcbitcXHQvKiBJbmRleGVkIGJ5IGluX3NsZWVwYWJsZS4gKi9cXG4rXFx0Ym9vbCBjYWxsZWRbMl07XFxuK1xcdGJvb2wgdmVyaWZpZWRbMl07XFxuIH07XFxuIFxcbiBlbnVtIGJwZl9qaXRfcG9rZV9yZWFzb24ge1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCA1YjUxZTdlZTFhM2Y5Li5mNzU5YTAyMGM4YTVhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC05OTU3LDYgKzk5NTcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdGlmIChlcnIgPT0gLUVGQVVMVClcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0aWYgKGJwZl9zdWJwcm9nX2lzX2dsb2JhbChlbnYsIHN1YnByb2cpKSB7XFxuK1xcdFxcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgc3VicHJvZyk7XFxuIFxcdFxcdGNvbnN0IGNoYXIgKnN1Yl9uYW1lID0gYnBmX3N1YnByb2dfbmFtZShlbnYsIHN1YnByb2cpO1xcbiBcXHRcXHRjb25zdCBjaGFyICpvcGVyYXRpb247XFxuIFxcdFxcdGJvb2wgcmV0dXJuc192b2lkO1xcbkBAIC05OTg4LDExICs5OTg5LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0aWYgKGVudi1cXHUwMDNlbG9nLmxldmVsIFxcdTAwMjYgQlBGX0xPR19MRVZFTClcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJGdW5jIyVkICgnJXMnKSBpcyBnbG9iYWwgYW5kIGFzc3VtZWQgdmFsaWQuXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRzdWJwcm9nLCBzdWJfbmFtZSk7XFxuK1xcdFxcdHN1Yl9hdXgtXFx1MDAzZWNhbGxlZFtpbl9zbGVlcGFibGVfY29udGV4dChlbnYpXSA9IHRydWU7XFxuIFxcdFxcdHJldHVybnNfdm9pZCA9IHN1YnByb2dfcmV0dXJuc192b2lkKGVudiwgc3VicHJvZyk7XFxuIFxcdFxcdGlmIChlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5jaGFuZ2VzX3BrdF9kYXRhKVxcbiBcXHRcXHRcXHRjbGVhcl9hbGxfcGt0X3BvaW50ZXJzKGVudik7XFxuLVxcdFxcdC8qIG1hcmsgZ2xvYmFsIHN1YnByb2cgZm9yIHZlcmlmeWluZyBhZnRlciBtYWluIHByb2cgKi9cXG4tXFx0XFx0c3VicHJvZ19hdXgoZW52LCBzdWJwcm9nKS1cXHUwMDNlY2FsbGVkID0gdHJ1ZTtcXG4gXFx0XFx0aWYgKHJldHVybnNfdm9pZClcXG4gXFx0XFx0XFx0YnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgXFx1MDAyNmNhbGxlci1cXHUwMDNlcmVnc1tCUEZfUkVHXzBdLCBCUEZfRElBR19NT0RfQ0FMTEVSX1NBVkVEKTtcXG4gXFx0XFx0ZWxzZVxcbkBAIC0xMDgwNCw3ICsxMDgwNCwxMiBAQCBpbnQgYnBmX2dldF9oZWxwZXJfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGZ1bmNfaWQsXFxuIFxcdHJldHVybiAqcHRyIFxcdTAwMjZcXHUwMDI2ICgqcHRyKS1cXHUwMDNlZnVuYyA/IDAgOiAtRUlOVkFMO1xcbiB9XFxuIFxcbi0vKiBDaGVjayBpZiB3ZSdyZSBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LiAqL1xcbisvKlxcbisgKiBUaGlzIHByZWRpY2F0ZSBpcyB0aGUgaW52ZXJzZSBvZiBpbl9yY3VfY3MoKTogbm9uLXNsZWVwYWJsZSBwcm9ncmFtcyBhbmRcXG4rICogZXZlcnkgY29uZGl0aW9uIHRoYXQgcHJldmVudHMgc2xlZXBpbmcgYWxzbyBwcm92aWRlIFJDVSBwcm90ZWN0aW9uLiBHbG9iYWxcXG4rICogc3VicHJvZyB2ZXJpZmljYXRpb24gcmVsaWVzIG9uIHRoaXMgZXF1aXZhbGVuY2UgdG8gcmVwcmVzZW50IHRoZSBjYWxsZXInc1xcbisgKiBleGVjdXRpb24gY29udGV4dCB1c2luZyBvbmx5IHRoZSBpbl9zbGVlcGFibGUgYml0LlxcbisgKi9cXG4gc3RhdGljIGlubGluZSBib29sIGluX3NsZWVwYWJsZV9jb250ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIHtcXG4gXFx0cmV0dXJuICFlbnYtXFx1MDAzZWN1cl9zdGF0ZS1cXHUwMDNlYWN0aXZlX3JjdV9sb2NrcyBcXHUwMDI2XFx1MDAyNlxcbkBAIC0xOTU2MCwxMyArMTk1NjUsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9zdGF0ZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcXG4rc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2csIGJvb2wgaW5fc2xlZXBhYmxlKVxcbiB7XFxuIFxcdGJvb2wgcG9wX2xvZyA9ICEoZW52LVxcdTAwM2Vsb2cubGV2ZWwgXFx1MDAyNiBCUEZfTE9HX0xFVkVMMik7XFxuIFxcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWIgPSBzdWJwcm9nX2luZm8oZW52LCBzdWJwcm9nKTtcXG4gXFx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXg7XFxuIFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXRlO1xcbiBcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncztcXG4rXFx0dTMyIG9sZF9pbnNuc190b3RhbCA9IHN1Yi1cXHUwMDNlaW5zbnNfdG90YWw7XFxuIFxcdHUzMiBpbnNuX3Byb2Nlc3NlZCA9IGVudi1cXHUwMDNlaW5zbl9wcm9jZXNzZWQ7XFxuIFxcdGludCByZXQsIGk7XFxuIFxcbkBAIC0xOTU3OSw3ICsxOTU4NSw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxcbiBcXHRzdGF0ZS1cXHUwMDNlY3VyZnJhbWUgPSAwO1xcbiBcXHRzdGF0ZS1cXHUwMDNlc3BlY3VsYXRpdmUgPSBmYWxzZTtcXG4gXFx0c3RhdGUtXFx1MDAzZWJyYW5jaGVzID0gMTtcXG4tXFx0c3RhdGUtXFx1MDAzZWluX3NsZWVwYWJsZSA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlc2xlZXBhYmxlO1xcbitcXHRzdGF0ZS1cXHUwMDNlaW5fc2xlZXBhYmxlID0gaW5fc2xlZXBhYmxlO1xcbiBcXHRzdGF0ZS1cXHUwMDNlZnJhbWVbMF0gPSBremFsbG9jX29iaihzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIFxcdGlmICghc3RhdGUtXFx1MDAzZWZyYW1lWzBdKSB7XFxuIFxcdFxcdGtmcmVlKHN0YXRlKTtcXG5AQCAtMTk3MjEsNyArMTk3MjcsOCBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcXG4gXFx0ICogQWNjdW11bGF0ZSB0aGVpciB0b3RhbCBjb3VudHMgYXMgdG90YWwgY291bnRzIG9mIHRoZSBtYWluIG9yXFxuIFxcdCAqIGdsb2JhbCBzdWJwcm9nIGhvc3RpbmcgdGhlIGFzeW5jIGNhbGwuXFxuIFxcdCAqL1xcbi1cXHRlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5pbnNuc190b3RhbCA9IGVudi1cXHUwMDNlaW5zbl9wcm9jZXNzZWQgLSBpbnNuX3Byb2Nlc3NlZDtcXG4rXFx0ZW52LVxcdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10uaW5zbnNfdG90YWwgPSBvbGRfaW5zbnNfdG90YWwgK1xcbitcXHRcXHRcXHRcXHRcXHRcXHQoZW52LVxcdTAwM2VpbnNuX3Byb2Nlc3NlZCAtIGluc25fcHJvY2Vzc2VkKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTk3NDksNDUgKzE5NzU2LDU1IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eDtcXG4gXFx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICpzdWJfYXV4O1xcbi1cXHRpbnQgaSwgcmV0LCBuZXdfY250O1xcbitcXHRpbnQgY29udGV4dCwgaSwgaiwgcmV0LCBuZXdfY250O1xcbiBcXG4gXFx0aWYgKCFhdXgtXFx1MDAzZWZ1bmNfaW5mbylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHQvKiBleGNlcHRpb24gY2FsbGJhY2sgaXMgcHJlc3VtZWQgdG8gYmUgYWx3YXlzIGNhbGxlZCAqL1xcbi1cXHRpZiAoZW52LVxcdTAwM2VleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZylcXG4tXFx0XFx0c3VicHJvZ19hdXgoZW52LCBlbnYtXFx1MDAzZWV4Y2VwdGlvbl9jYWxsYmFja19zdWJwcm9nKS1cXHUwMDNlY2FsbGVkID0gdHJ1ZTtcXG4rXFx0aWYgKGVudi1cXHUwMDNlZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpIHtcXG4rXFx0XFx0c3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgZW52LVxcdTAwM2VleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZyk7XFxuK1xcdFxcdHN1Yl9hdXgtXFx1MDAzZWNhbGxlZFtlbnYtXFx1MDAzZXByb2ctXFx1MDAzZXNsZWVwYWJsZV0gPSB0cnVlO1xcbitcXHR9XFxuIFxcbiBhZ2FpbjpcXG4gXFx0bmV3X2NudCA9IDA7XFxuLVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBlbnYtXFx1MDAzZXN1YnByb2dfY250OyBpKyspIHtcXG4rXFx0LypcXG4rXFx0ICogV2FsayBjYWxsZXJzIGJlZm9yZSBjYWxsZWVzIHNvIGVhY2ggZ2xvYmFsIHN1YnByb2cgbm9ybWFsbHkgc2VlcyBhbGxcXG4rXFx0ICogb2YgaXRzIGNvbnRleHRzIGJlZm9yZSBpdCBpcyB2ZXJpZmllZC4gQXN5bmMgY2FsbGJhY2sgY3ljbGVzIGNhbiBhZGQgYVxcbitcXHQgKiBjb250ZXh0IHRvIGFuIGVhcmxpZXIgc3VicHJvZywgc28gcmVwZWF0IHVudGlsIGV2ZXJ5IGNhbGxlZCBjb250ZXh0IGlzXFxuK1xcdCAqIHZlcmlmaWVkLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChqID0gZW52LVxcdTAwM2VzdWJwcm9nX2NudCAtIDE7IGogXFx1MDAzZT0gMDsgai0tKSB7XFxuK1xcdFxcdGkgPSBlbnYtXFx1MDAzZXN1YnByb2dfdG9wb19vcmRlcltqXTtcXG4rXFx0XFx0aWYgKCFpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKCFicGZfc3VicHJvZ19pc19nbG9iYWwoZW52LCBpKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRzdWJfYXV4ID0gc3VicHJvZ19hdXgoZW52LCBpKTtcXG4tXFx0XFx0aWYgKCFzdWJfYXV4LVxcdTAwM2VjYWxsZWQgfHwgc3ViX2F1eC1cXHUwMDNldmVyaWZpZWQpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRmb3IgKGNvbnRleHQgPSAwOyBjb250ZXh0IFxcdTAwM2MgQVJSQVlfU0laRShzdWJfYXV4LVxcdTAwM2VjYWxsZWQpOyBjb250ZXh0KyspIHtcXG4rXFx0XFx0XFx0aWYgKCFzdWJfYXV4LVxcdTAwM2VjYWxsZWRbY29udGV4dF0gfHwgc3ViX2F1eC1cXHUwMDNldmVyaWZpZWRbY29udGV4dF0pXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0ZW52LVxcdTAwM2VpbnNuX2lkeCA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0O1xcbi1cXHRcXHRXQVJOX09OX09OQ0UoZW52LVxcdTAwM2VpbnNuX2lkeCA9PSAwKTtcXG4tXFx0XFx0cmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgaSk7XFxuLVxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0XFx0fSBlbHNlIGlmIChlbnYtXFx1MDAzZWxvZy5sZXZlbCBcXHUwMDI2IEJQRl9MT0dfTEVWRUwpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJGdW5jIyVkICgnJXMnKSBpcyBzYWZlIGZvciBhbnkgYXJncyB0aGF0IG1hdGNoIGl0cyBwcm90b3R5cGVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdGksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBpKSk7XFxuLVxcdFxcdH1cXG4rXFx0XFx0XFx0ZW52LVxcdTAwM2VpbnNuX2lkeCA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0O1xcbitcXHRcXHRcXHRXQVJOX09OX09OQ0UoZW52LVxcdTAwM2VpbnNuX2lkeCA9PSAwKTtcXG4rXFx0XFx0XFx0cmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgaSwgY29udGV4dCk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdGlmIChlbnYtXFx1MDAzZWxvZy5sZXZlbCBcXHUwMDI2IEJQRl9MT0dfTEVWRUwpXFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiRnVuYyMlZCAoJyVzJykgaXMgc2FmZSBmb3IgYW55IGFyZ3MgXFxcIlxcbitcXHRcXHRcXHRcXHRcXHRcXFwidGhhdCBtYXRjaCBpdHMgcHJvdG90eXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgaSkpO1xcbiBcXG4tXFx0XFx0LyogV2UgdmVyaWZpZWQgbmV3IGdsb2JhbCBzdWJwcm9nLCBpdCBtaWdodCBoYXZlIGNhbGxlZCBzb21lXFxuLVxcdFxcdCAqIG1vcmUgZ2xvYmFsIHN1YnByb2dzIHRoYXQgd2UgaGF2ZW4ndCB2ZXJpZmllZCB5ZXQsIHNvIHdlXFxuLVxcdFxcdCAqIG5lZWQgdG8gZG8gYW5vdGhlciBwYXNzIG92ZXIgc3VicHJvZ3MgdG8gdmVyaWZ5IHRob3NlLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0c3ViX2F1eC1cXHUwMDNldmVyaWZpZWQgPSB0cnVlO1xcbi1cXHRcXHRuZXdfY250Kys7XFxuK1xcdFxcdFxcdHN1Yl9hdXgtXFx1MDAzZXZlcmlmaWVkW2NvbnRleHRdID0gdHJ1ZTtcXG4rXFx0XFx0XFx0bmV3X2NudCsrO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFdlIGNhbid0IGxvb3AgZm9yZXZlciBhcyB3ZSB2ZXJpZnkgYXQgbGVhc3Qgb25lIGdsb2JhbCBzdWJwcm9nIG9uXFxuLVxcdCAqIGVhY2ggcGFzcy5cXG4rXFx0LypcXG4rXFx0ICogV2UgY2FuJ3QgbG9vcCBmb3JldmVyIGFzIGVhY2ggcGFzcyB2ZXJpZmllcyBhdCBsZWFzdCBvbmUgbmV3IGNvbnRleHQsXFxuK1xcdCAqIGFuZCB0aGVyZSBhcmUgb25seSB0d28gY29udGV4dHMgcGVyIGdsb2JhbCBzdWJwcm9nLlxcbiBcXHQgKi9cXG4gXFx0aWYgKG5ld19jbnQpXFxuIFxcdFxcdGdvdG8gYWdhaW47XFxuQEAgLTE5ODAwLDcgKzE5ODE3LDcgQEAgc3RhdGljIGludCBkb19jaGVja19tYWluKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRlbnYtXFx1MDAzZWluc25faWR4ID0gMDtcXG4tXFx0cmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgMCk7XFxuK1xcdHJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIDAsIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlc2xlZXBhYmxlKTtcXG4gXFx0aWYgKCFyZXQpXFxuIFxcdFxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VzdGFja19kZXB0aCA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvWzBdLnN0YWNrX2RlcHRoO1xcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xcbmluZGV4IDZiZjk1NTUwYTAyNDguLjk4N2NhOWRlYzZiN2YgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcXG5AQCAtOSw2ICs5LDExIEBAXFxuIFxcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4gXFxuK3N0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcXG4rdm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xcbit2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcXG4rdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcXG4rXFxuIC8qIFRpbWVyIHRlc3RzICovXFxuIFxcbiBzdHJ1Y3QgdGltZXJfZWxlbSB7XFxuQEAgLTY2LDYgKzcxLDcgQEAgaW50IHRpbWVyX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcXG4gXFxuIHN0cnVjdCB3cV9lbGVtIHtcXG4gXFx0c3RydWN0IGJwZl93cSB3O1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19rcHRyICp0YXNrO1xcbiB9O1xcbiBcXG4gc3RydWN0IHtcXG5AQCAtMTE5LDYgKzEyNSwxMDYgQEAgaW50IHdxX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK19fbm9pbmxpbmUgaW50IHdxX2dsb2JhbF9hY3F1aXJlKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAqYWNxdWlyZWQ7XFxuK1xcdHN0cnVjdCB3cV9lbGVtICp2YWw7XFxuK1xcdGludCBrZXkgPSAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2d3FfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0dGFzayA9IHZhbC1cXHUwMDNldGFzaztcXG4rXFx0aWYgKCF0YXNrKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZSh0YXNrKTtcXG4rXFx0aWYgKGFjcXVpcmVkKVxcbitcXHRcXHRicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3FfZ2xvYmFsX3JjdV9jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcXG4re1xcbitcXHR3cV9nbG9iYWxfYWNxdWlyZSgpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiUjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyXFxcIilcXG4raW50IHdxX2dsb2JhbF9yY3VfcHJvZyh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IHdxX2VsZW0gKnZhbDtcXG4rXFx0aW50IGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ3cV9tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfd3FfaW5pdChcXHUwMDI2dmFsLVxcdTAwM2V3LCBcXHUwMDI2d3FfbWFwLCAwKTtcXG4rXFx0YnBmX3dxX3NldF9jYWxsYmFjayhcXHUwMDI2dmFsLVxcdTAwM2V3LCB3cV9nbG9iYWxfcmN1X2NiLCAwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3FfZ2xvYmFsX3JjdV9sb2NrX2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxcbit7XFxuK1xcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHdxX2dsb2JhbF9hY3F1aXJlKCk7XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcXFwiKVxcbitfX3N1Y2Nlc3NcXG4raW50IHdxX2dsb2JhbF9yY3VfbG9ja19wcm9nKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3Qgd3FfZWxlbSAqdmFsO1xcbitcXHRpbnQga2V5ID0gMDtcXG4rXFxuK1xcdC8qIFZlcmlmeSB0aGUgc2FtZSBnbG9iYWwgc3VicHJvZyBpbiBub24tc2xlZXBhYmxlIGFuZCBwcm90ZWN0ZWQgY29udGV4dHMuICovXFxuK1xcdHdxX2dsb2JhbF9hY3F1aXJlKCk7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ3cV9tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfd3FfaW5pdChcXHUwMDI2dmFsLVxcdTAwM2V3LCBcXHUwMDI2d3FfbWFwLCAwKTtcXG4rXFx0YnBmX3dxX3NldF9jYWxsYmFjayhcXHUwMDI2dmFsLVxcdTAwM2V3LCB3cV9nbG9iYWxfcmN1X2xvY2tfY2IsIDApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rX19ub2lubGluZSBpbnQgd3FfZ2xvYmFsX25vX3JjdSh2b2lkKVxcbit7XFxuK1xcdGJhcnJpZXIoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3FfZ2xvYmFsX25vX3JjdV9jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcXG4re1xcbitcXHR3cV9nbG9iYWxfbm9fcmN1KCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcImZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCB3cV9nbG9iYWxfbm9fcmN1X3Byb2codm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB3cV9lbGVtICp2YWw7XFxuK1xcdGludCBrZXkgPSAwO1xcbitcXG4rXFx0LyogVmVyaWZ5IHRoZSBzYW1lIGdsb2JhbCBpbiBub24tc2xlZXBhYmxlIGFuZCB1bnByb3RlY3RlZCBjb250ZXh0cy4gKi9cXG4rXFx0d3FfZ2xvYmFsX25vX3JjdSgpO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2d3FfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX3dxX2luaXQoXFx1MDAyNnZhbC1cXHUwMDNldywgXFx1MDAyNndxX21hcCwgMCk7XFxuK1xcdGJwZl93cV9zZXRfY2FsbGJhY2soXFx1MDAyNnZhbC1cXHUwMDNldywgd3FfZ2xvYmFsX25vX3JjdV9jYiwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKiBUYXNrIHdvcmsgdGVzdHMgKi9cXG4gXFxuIHN0cnVjdCB0YXNrX3dvcmtfZWxlbSB7XFxuQEAgLTE3OSwzICsyODUsMjkgQEAgaW50IHRhc2tfd29ya19zbGVlcGFibGVfcHJvZyh2b2lkICpjdHgpXFxuIFxcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHRhc2ssIFxcdTAwMjZ2YWwtXFx1MDAzZXR3LCBcXHUwMDI2dGFza193b3JrX21hcCwgdGFza193b3JrX2NiKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbnQgdGFza193b3JrX2dsb2JhbF9yY3VfY2Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSlcXG4re1xcbitcXHRyZXR1cm4gd3FfZ2xvYmFsX2FjcXVpcmUoKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiUjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyXFxcIilcXG4raW50IHRhc2tfd29ya19nbG9iYWxfcmN1X3Byb2codm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3dvcmtfZWxlbSAqdmFsO1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuK1xcdGludCBrZXkgPSAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2dGFza193b3JrX21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0aWYgKCF0YXNrKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHRhc2ssIFxcdTAwMjZ2YWwtXFx1MDAzZXR3LCBcXHUwMDI2dGFza193b3JrX21hcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdGFza193b3JrX2dsb2JhbF9yY3VfY2IpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNToxMy44NTY2Njk5MzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwNjgxMTg4NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJkb19jaGVja19zdWJwcm9nc1wiLFxuICAgIFwiZG9fY2hlY2tfY29tbW9uXCIsXG4gICAgXCJjaGVja19mdW5jX2NhbGxcIixcbiAgICBcImRvX2NoZWNrX21haW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHRyYWNrIGFuZCB2ZXJpZnkgZ2xvYmFsIHN1YnByb2dyYW1zIHNlcGFyYXRlbHkgYWNyb3NzIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBleGVjdXRpb24gY29udGV4dHMsIG1vZGlmeWluZyBzdWJwcm9ncmFtIHZlcmlmaWNhdGlvbiBsb29wcywgdG9wb2xvZ2ljYWwgdHJhdmVyc2FsIG9yZGVyLCBhbmQgY29udGV4dCBzdGF0ZSBoYW5kbGluZyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTZlZmE2MDNhMGQ1MjJlNmVlYzYzMjMwZDE5YTZlMjYwZGZlZTNkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTA6MDU6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggM2E3ZWIyMTg1YzM1NC4uNjZkMDQyNDRjNzM3OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0xNjUwLDggKzE2NTAsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFnc1xuIHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCB7XG4gXHR1MTYgbGlua2FnZTtcbiBcdGJvb2wgdW5yZWxpYWJsZTtcbi1cdGJvb2wgY2FsbGVkIDogMTtcbi1cdGJvb2wgdmVyaWZpZWQgOiAxO1xuK1x0LyogSW5kZXhlZCBieSBpbl9zbGVlcGFibGUuICovXG4rXHRib29sIGNhbGxlZFsyXTtcbitcdGJvb2wgdmVyaWZpZWRbMl07XG4gfTtcbiBcbiBlbnVtIGJwZl9qaXRfcG9rZV9yZWFzb24ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNWI1MWU3ZWUxYTNmOS4uZjc1OWEwMjBjOGE1YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtOTk1Nyw2ICs5OTU3LDcgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0aWYgKGVyciA9PSAtRUZBVUxUKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0aWYgKGJwZl9zdWJwcm9nX2lzX2dsb2JhbChlbnYsIHN1YnByb2cpKSB7XG4rXHRcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgc3VicHJvZyk7XG4gXHRcdGNvbnN0IGNoYXIgKnN1Yl9uYW1lID0gYnBmX3N1YnByb2dfbmFtZShlbnYsIHN1YnByb2cpO1xuIFx0XHRjb25zdCBjaGFyICpvcGVyYXRpb247XG4gXHRcdGJvb2wgcmV0dXJuc192b2lkO1xuQEAgLTk5ODgsMTEgKzk5ODksMTAgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRpZiAoZW52LVx1MDAzZWxvZy5sZXZlbCBcdTAwMjYgQlBGX0xPR19MRVZFTClcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCJGdW5jIyVkICgnJXMnKSBpcyBnbG9iYWwgYW5kIGFzc3VtZWQgdmFsaWQuXFxuXCIsXG4gXHRcdFx0XHRzdWJwcm9nLCBzdWJfbmFtZSk7XG4rXHRcdHN1Yl9hdXgtXHUwMDNlY2FsbGVkW2luX3NsZWVwYWJsZV9jb250ZXh0KGVudildID0gdHJ1ZTtcbiBcdFx0cmV0dXJuc192b2lkID0gc3VicHJvZ19yZXR1cm5zX3ZvaWQoZW52LCBzdWJwcm9nKTtcbiBcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10uY2hhbmdlc19wa3RfZGF0YSlcbiBcdFx0XHRjbGVhcl9hbGxfcGt0X3BvaW50ZXJzKGVudik7XG4tXHRcdC8qIG1hcmsgZ2xvYmFsIHN1YnByb2cgZm9yIHZlcmlmeWluZyBhZnRlciBtYWluIHByb2cgKi9cbi1cdFx0c3VicHJvZ19hdXgoZW52LCBzdWJwcm9nKS1cdTAwM2VjYWxsZWQgPSB0cnVlO1xuIFx0XHRpZiAocmV0dXJuc192b2lkKVxuIFx0XHRcdGJwZl9kaWFnX3JlY29yZF9zY3J1YihlbnYsIFx1MDAyNmNhbGxlci1cdTAwM2VyZWdzW0JQRl9SRUdfMF0sIEJQRl9ESUFHX01PRF9DQUxMRVJfU0FWRUQpO1xuIFx0XHRlbHNlXG5AQCAtMTA4MDQsNyArMTA4MDQsMTIgQEAgaW50IGJwZl9nZXRfaGVscGVyX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBmdW5jX2lkLFxuIFx0cmV0dXJuICpwdHIgXHUwMDI2XHUwMDI2ICgqcHRyKS1cdTAwM2VmdW5jID8gMCA6IC1FSU5WQUw7XG4gfVxuIFxuLS8qIENoZWNrIGlmIHdlJ3JlIGluIGEgc2xlZXBhYmxlIGNvbnRleHQuICovXG4rLypcbisgKiBUaGlzIHByZWRpY2F0ZSBpcyB0aGUgaW52ZXJzZSBvZiBpbl9yY3VfY3MoKTogbm9uLXNsZWVwYWJsZSBwcm9ncmFtcyBhbmRcbisgKiBldmVyeSBjb25kaXRpb24gdGhhdCBwcmV2ZW50cyBzbGVlcGluZyBhbHNvIHByb3ZpZGUgUkNVIHByb3RlY3Rpb24uIEdsb2JhbFxuKyAqIHN1YnByb2cgdmVyaWZpY2F0aW9uIHJlbGllcyBvbiB0aGlzIGVxdWl2YWxlbmNlIHRvIHJlcHJlc2VudCB0aGUgY2FsbGVyJ3NcbisgKiBleGVjdXRpb24gY29udGV4dCB1c2luZyBvbmx5IHRoZSBpbl9zbGVlcGFibGUgYml0LlxuKyAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpbl9zbGVlcGFibGVfY29udGV4dChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHJldHVybiAhZW52LVx1MDAzZWN1cl9zdGF0ZS1cdTAwM2VhY3RpdmVfcmN1X2xvY2tzIFx1MDAyNlx1MDAyNlxuQEAgLTE5NTYwLDEzICsxOTU2NSwxNCBAQCBzdGF0aWMgdm9pZCBmcmVlX3N0YXRlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbitzdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZywgYm9vbCBpbl9zbGVlcGFibGUpXG4ge1xuIFx0Ym9vbCBwb3BfbG9nID0gIShlbnYtXHUwMDNlbG9nLmxldmVsIFx1MDAyNiBCUEZfTE9HX0xFVkVMMik7XG4gXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3ViID0gc3VicHJvZ19pbmZvKGVudiwgc3VicHJvZyk7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXg7XG4gXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGF0ZTtcbiBcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzO1xuK1x0dTMyIG9sZF9pbnNuc190b3RhbCA9IHN1Yi1cdTAwM2VpbnNuc190b3RhbDtcbiBcdHUzMiBpbnNuX3Byb2Nlc3NlZCA9IGVudi1cdTAwM2VpbnNuX3Byb2Nlc3NlZDtcbiBcdGludCByZXQsIGk7XG4gXG5AQCAtMTk1NzksNyArMTk1ODUsNyBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbiBcdHN0YXRlLVx1MDAzZWN1cmZyYW1lID0gMDtcbiBcdHN0YXRlLVx1MDAzZXNwZWN1bGF0aXZlID0gZmFsc2U7XG4gXHRzdGF0ZS1cdTAwM2VicmFuY2hlcyA9IDE7XG4tXHRzdGF0ZS1cdTAwM2Vpbl9zbGVlcGFibGUgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VzbGVlcGFibGU7XG4rXHRzdGF0ZS1cdTAwM2Vpbl9zbGVlcGFibGUgPSBpbl9zbGVlcGFibGU7XG4gXHRzdGF0ZS1cdTAwM2VmcmFtZVswXSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBicGZfZnVuY19zdGF0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghc3RhdGUtXHUwMDNlZnJhbWVbMF0pIHtcbiBcdFx0a2ZyZWUoc3RhdGUpO1xuQEAgLTE5NzIxLDcgKzE5NzI3LDggQEAgc3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4gXHQgKiBBY2N1bXVsYXRlIHRoZWlyIHRvdGFsIGNvdW50cyBhcyB0b3RhbCBjb3VudHMgb2YgdGhlIG1haW4gb3JcbiBcdCAqIGdsb2JhbCBzdWJwcm9nIGhvc3RpbmcgdGhlIGFzeW5jIGNhbGwuXG4gXHQgKi9cbi1cdGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10uaW5zbnNfdG90YWwgPSBlbnYtXHUwMDNlaW5zbl9wcm9jZXNzZWQgLSBpbnNuX3Byb2Nlc3NlZDtcbitcdGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10uaW5zbnNfdG90YWwgPSBvbGRfaW5zbnNfdG90YWwgK1xuK1x0XHRcdFx0XHRcdChlbnYtXHUwMDNlaW5zbl9wcm9jZXNzZWQgLSBpbnNuX3Byb2Nlc3NlZCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xOTc0OSw0NSArMTk3NTYsNTUgQEAgc3RhdGljIGludCBkb19jaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eDtcbiBcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eDtcbi1cdGludCBpLCByZXQsIG5ld19jbnQ7XG4rXHRpbnQgY29udGV4dCwgaSwgaiwgcmV0LCBuZXdfY250O1xuIFxuIFx0aWYgKCFhdXgtXHUwMDNlZnVuY19pbmZvKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIGV4Y2VwdGlvbiBjYWxsYmFjayBpcyBwcmVzdW1lZCB0byBiZSBhbHdheXMgY2FsbGVkICovXG4tXHRpZiAoZW52LVx1MDAzZWV4Y2VwdGlvbl9jYWxsYmFja19zdWJwcm9nKVxuLVx0XHRzdWJwcm9nX2F1eChlbnYsIGVudi1cdTAwM2VleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZyktXHUwMDNlY2FsbGVkID0gdHJ1ZTtcbitcdGlmIChlbnYtXHUwMDNlZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpIHtcbitcdFx0c3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgZW52LVx1MDAzZWV4Y2VwdGlvbl9jYWxsYmFja19zdWJwcm9nKTtcbitcdFx0c3ViX2F1eC1cdTAwM2VjYWxsZWRbZW52LVx1MDAzZXByb2ctXHUwMDNlc2xlZXBhYmxlXSA9IHRydWU7XG4rXHR9XG4gXG4gYWdhaW46XG4gXHRuZXdfY250ID0gMDtcbi1cdGZvciAoaSA9IDE7IGkgXHUwMDNjIGVudi1cdTAwM2VzdWJwcm9nX2NudDsgaSsrKSB7XG4rXHQvKlxuK1x0ICogV2FsayBjYWxsZXJzIGJlZm9yZSBjYWxsZWVzIHNvIGVhY2ggZ2xvYmFsIHN1YnByb2cgbm9ybWFsbHkgc2VlcyBhbGxcbitcdCAqIG9mIGl0cyBjb250ZXh0cyBiZWZvcmUgaXQgaXMgdmVyaWZpZWQuIEFzeW5jIGNhbGxiYWNrIGN5Y2xlcyBjYW4gYWRkIGFcbitcdCAqIGNvbnRleHQgdG8gYW4gZWFybGllciBzdWJwcm9nLCBzbyByZXBlYXQgdW50aWwgZXZlcnkgY2FsbGVkIGNvbnRleHQgaXNcbitcdCAqIHZlcmlmaWVkLlxuK1x0ICovXG4rXHRmb3IgKGogPSBlbnYtXHUwMDNlc3VicHJvZ19jbnQgLSAxOyBqIFx1MDAzZT0gMDsgai0tKSB7XG4rXHRcdGkgPSBlbnYtXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2pdO1xuK1x0XHRpZiAoIWkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGVudiwgaSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHN1Yl9hdXggPSBzdWJwcm9nX2F1eChlbnYsIGkpO1xuLVx0XHRpZiAoIXN1Yl9hdXgtXHUwMDNlY2FsbGVkIHx8IHN1Yl9hdXgtXHUwMDNldmVyaWZpZWQpXG4tXHRcdFx0Y29udGludWU7XG4rXHRcdGZvciAoY29udGV4dCA9IDA7IGNvbnRleHQgXHUwMDNjIEFSUkFZX1NJWkUoc3ViX2F1eC1cdTAwM2VjYWxsZWQpOyBjb250ZXh0KyspIHtcbitcdFx0XHRpZiAoIXN1Yl9hdXgtXHUwMDNlY2FsbGVkW2NvbnRleHRdIHx8IHN1Yl9hdXgtXHUwMDNldmVyaWZpZWRbY29udGV4dF0pXG4rXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0ZW52LVx1MDAzZWluc25faWR4ID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5zdGFydDtcbi1cdFx0V0FSTl9PTl9PTkNFKGVudi1cdTAwM2VpbnNuX2lkeCA9PSAwKTtcbi1cdFx0cmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgaSk7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHR9IGVsc2UgaWYgKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwpIHtcbi1cdFx0XHR2ZXJib3NlKGVudiwgXCJGdW5jIyVkICgnJXMnKSBpcyBzYWZlIGZvciBhbnkgYXJncyB0aGF0IG1hdGNoIGl0cyBwcm90b3R5cGVcXG5cIixcbi1cdFx0XHRcdGksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBpKSk7XG4tXHRcdH1cbitcdFx0XHRlbnYtXHUwMDNlaW5zbl9pZHggPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0O1xuK1x0XHRcdFdBUk5fT05fT05DRShlbnYtXHUwMDNlaW5zbl9pZHggPT0gMCk7XG4rXHRcdFx0cmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgaSwgY29udGV4dCk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0aWYgKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwpXG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJGdW5jIyVkICgnJXMnKSBpcyBzYWZlIGZvciBhbnkgYXJncyBcIlxuK1x0XHRcdFx0XHRcInRoYXQgbWF0Y2ggaXRzIHByb3RvdHlwZVxcblwiLFxuK1x0XHRcdFx0XHRpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgaSkpO1xuIFxuLVx0XHQvKiBXZSB2ZXJpZmllZCBuZXcgZ2xvYmFsIHN1YnByb2csIGl0IG1pZ2h0IGhhdmUgY2FsbGVkIHNvbWVcbi1cdFx0ICogbW9yZSBnbG9iYWwgc3VicHJvZ3MgdGhhdCB3ZSBoYXZlbid0IHZlcmlmaWVkIHlldCwgc28gd2Vcbi1cdFx0ICogbmVlZCB0byBkbyBhbm90aGVyIHBhc3Mgb3ZlciBzdWJwcm9ncyB0byB2ZXJpZnkgdGhvc2UuXG4tXHRcdCAqL1xuLVx0XHRzdWJfYXV4LVx1MDAzZXZlcmlmaWVkID0gdHJ1ZTtcbi1cdFx0bmV3X2NudCsrO1xuK1x0XHRcdHN1Yl9hdXgtXHUwMDNldmVyaWZpZWRbY29udGV4dF0gPSB0cnVlO1xuK1x0XHRcdG5ld19jbnQrKztcbitcdFx0fVxuIFx0fVxuIFxuLVx0LyogV2UgY2FuJ3QgbG9vcCBmb3JldmVyIGFzIHdlIHZlcmlmeSBhdCBsZWFzdCBvbmUgZ2xvYmFsIHN1YnByb2cgb25cbi1cdCAqIGVhY2ggcGFzcy5cbitcdC8qXG4rXHQgKiBXZSBjYW4ndCBsb29wIGZvcmV2ZXIgYXMgZWFjaCBwYXNzIHZlcmlmaWVzIGF0IGxlYXN0IG9uZSBuZXcgY29udGV4dCxcbitcdCAqIGFuZCB0aGVyZSBhcmUgb25seSB0d28gY29udGV4dHMgcGVyIGdsb2JhbCBzdWJwcm9nLlxuIFx0ICovXG4gXHRpZiAobmV3X2NudClcbiBcdFx0Z290byBhZ2FpbjtcbkBAIC0xOTgwMCw3ICsxOTgxNyw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfbWFpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0aW50IHJldDtcbiBcbiBcdGVudi1cdTAwM2VpbnNuX2lkeCA9IDA7XG4tXHRyZXQgPSBkb19jaGVja19jb21tb24oZW52LCAwKTtcbitcdHJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIDAsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZXNsZWVwYWJsZSk7XG4gXHRpZiAoIXJldClcbiBcdFx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZXN0YWNrX2RlcHRoID0gZW52LVx1MDAzZXN1YnByb2dfaW5mb1swXS5zdGFja19kZXB0aDtcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcbmluZGV4IDZiZjk1NTUwYTAyNDguLjk4N2NhOWRlYzZiN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jXG5AQCAtOSw2ICs5LDExIEBAXG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIFxuK3N0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbit2b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XG4rdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4rdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbitcbiAvKiBUaW1lciB0ZXN0cyAqL1xuIFxuIHN0cnVjdCB0aW1lcl9lbGVtIHtcbkBAIC02Niw2ICs3MSw3IEBAIGludCB0aW1lcl9zbGVlcGFibGVfcHJvZyh2b2lkICpjdHgpXG4gXG4gc3RydWN0IHdxX2VsZW0ge1xuIFx0c3RydWN0IGJwZl93cSB3O1xuK1x0c3RydWN0IHRhc2tfc3RydWN0IF9fa3B0ciAqdGFzaztcbiB9O1xuIFxuIHN0cnVjdCB7XG5AQCAtMTE5LDYgKzEyNSwxMDYgQEAgaW50IHdxX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitfX25vaW5saW5lIGludCB3cV9nbG9iYWxfYWNxdWlyZSh2b2lkKVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgKmFjcXVpcmVkO1xuK1x0c3RydWN0IHdxX2VsZW0gKnZhbDtcbitcdGludCBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ3cV9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR0YXNrID0gdmFsLVx1MDAzZXRhc2s7XG4rXHRpZiAoIXRhc2spXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHRhc2spO1xuK1x0aWYgKGFjcXVpcmVkKVxuK1x0XHRicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHdxX2dsb2JhbF9yY3VfY2Iodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXG4re1xuK1x0d3FfZ2xvYmFsX2FjcXVpcmUoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwiKVxuK19fZmFpbHVyZSBfX21zZyhcIlIxIG11c3QgYmUgYSByY3UgcG9pbnRlclwiKVxuK2ludCB3cV9nbG9iYWxfcmN1X3Byb2codm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB3cV9lbGVtICp2YWw7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2d3FfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX3dxX2luaXQoXHUwMDI2dmFsLVx1MDAzZXcsIFx1MDAyNndxX21hcCwgMCk7XG4rXHRicGZfd3Ffc2V0X2NhbGxiYWNrKFx1MDAyNnZhbC1cdTAwM2V3LCB3cV9nbG9iYWxfcmN1X2NiLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHdxX2dsb2JhbF9yY3VfbG9ja19jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcbit7XG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0d3FfZ2xvYmFsX2FjcXVpcmUoKTtcbitcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwiKVxuK19fc3VjY2Vzc1xuK2ludCB3cV9nbG9iYWxfcmN1X2xvY2tfcHJvZyh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHdxX2VsZW0gKnZhbDtcbitcdGludCBrZXkgPSAwO1xuK1xuK1x0LyogVmVyaWZ5IHRoZSBzYW1lIGdsb2JhbCBzdWJwcm9nIGluIG5vbi1zbGVlcGFibGUgYW5kIHByb3RlY3RlZCBjb250ZXh0cy4gKi9cbitcdHdxX2dsb2JhbF9hY3F1aXJlKCk7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndxX21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl93cV9pbml0KFx1MDAyNnZhbC1cdTAwM2V3LCBcdTAwMjZ3cV9tYXAsIDApO1xuK1x0YnBmX3dxX3NldF9jYWxsYmFjayhcdTAwMjZ2YWwtXHUwMDNldywgd3FfZ2xvYmFsX3JjdV9sb2NrX2NiLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitfX25vaW5saW5lIGludCB3cV9nbG9iYWxfbm9fcmN1KHZvaWQpXG4re1xuK1x0YmFycmllcigpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3FfZ2xvYmFsX25vX3JjdV9jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcbit7XG4rXHR3cV9nbG9iYWxfbm9fcmN1KCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcIilcbitfX3N1Y2Nlc3NcbitpbnQgd3FfZ2xvYmFsX25vX3JjdV9wcm9nKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qgd3FfZWxlbSAqdmFsO1xuK1x0aW50IGtleSA9IDA7XG4rXG4rXHQvKiBWZXJpZnkgdGhlIHNhbWUgZ2xvYmFsIGluIG5vbi1zbGVlcGFibGUgYW5kIHVucHJvdGVjdGVkIGNvbnRleHRzLiAqL1xuK1x0d3FfZ2xvYmFsX25vX3JjdSgpO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ3cV9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfd3FfaW5pdChcdTAwMjZ2YWwtXHUwMDNldywgXHUwMDI2d3FfbWFwLCAwKTtcbitcdGJwZl93cV9zZXRfY2FsbGJhY2soXHUwMDI2dmFsLVx1MDAzZXcsIHdxX2dsb2JhbF9ub19yY3VfY2IsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIFRhc2sgd29yayB0ZXN0cyAqL1xuIFxuIHN0cnVjdCB0YXNrX3dvcmtfZWxlbSB7XG5AQCAtMTc5LDMgKzI4NSwyOSBAQCBpbnQgdGFza193b3JrX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcbiBcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHRhc2ssIFx1MDAyNnZhbC1cdTAwM2V0dywgXHUwMDI2dGFza193b3JrX21hcCwgdGFza193b3JrX2NiKTtcbiBcdHJldHVybiAwO1xuIH1cbitcbitzdGF0aWMgaW50IHRhc2tfd29ya19nbG9iYWxfcmN1X2NiKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpXG4re1xuK1x0cmV0dXJuIHdxX2dsb2JhbF9hY3F1aXJlKCk7XG4rfVxuK1xuK1NFQyhcImZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiUjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyXCIpXG4raW50IHRhc2tfd29ya19nbG9iYWxfcmN1X3Byb2codm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3dvcmtfZWxlbSAqdmFsO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuK1x0aW50IGtleSA9IDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRhc2tfd29ya19tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR0YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRpZiAoIXRhc2spXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2dmFsLVx1MDAzZXR3LCBcdTAwMjZ0YXNrX3dvcmtfbWFwLFxuK1x0XHRcdFx0ICAgICAgdGFza193b3JrX2dsb2JhbF9yY3VfY2IpO1xuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6MTMuODU2NjcyMDQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM3NjQ5MTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcgYXMgSSBsb29rIG92ZXIgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIHRoZSBrZXJuZWwuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGFuYWx5emUgdGhpcywgYW5kIG15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyB0b3VjaGVzIHNvbWV0aGluZyBpbXBvcnRhbnQsIHRoZSBCUEYgdmVyaWZpZXIuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSBpbiBgaW5jbHVkZS9saW51eC9icGYuaGAgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiAgU3BlY2lmaWNhbGx5LCB0aGUgc3RydWN0IGBicGZfZnVuY19pbmZvX2F1eGAgaGFzIGJlZW4gbW9kaWZpZWQuIFRoZSBgY2FsbGVkYCBhbmQgYHZlcmlmaWVkYCBib29sZWFucyBhcmUgbm93IGFycmF5cyBvZiB0d28gZWxlbWVudHMsIGBjYWxsZWRbMl1gIGFuZCBgdmVyaWZpZWRbMl1gLiAgVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFdoeSB0d28/ICBJIHN1c3BlY3QgdGhpcyByZWxhdGVzIHRvIHRyYWNraW5nIHZlcmlmaWNhdGlvbiBzdGF0ZSBpbiBkaWZmZXJlbnQgY29udGV4dHMgLSBsaWtlbHkgc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlIG9uZXMsIHdoaWNoIGlzIGNvbmZpcm1lZCBsYXRlci5cblxuTG9va2luZyBkZWVwZXIgaW50byBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgSSBzZWUgZnVuY3Rpb25zIGxpa2UgYGNoZWNrX2Z1bmNfY2FsbGAsIGBkb19jaGVja19jb21tb25gLCBgZG9fY2hlY2tfc3VicHJvZ3NgLCBhbmQgYGRvX2NoZWNrX21haW5gIGFyZSB0aGUgZm9jdXMuIEkgbm90aWNlIGBpbl9zbGVlcGFibGVfY29udGV4dCgpYCBpcyB1c2VkLCBhbmQgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHN0cmF0ZWdpY2FsbHkgbWFya2luZyBmdW5jdGlvbiBjYWxscyBhcyBgY2FsbGVkYCBhbmQgYHZlcmlmaWVkYCBpbiBkaWZmZXJlbnQgY29udGV4dHMsIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHByb2dyYW0gaXMgb3BlcmF0aW5nIGluIGEgc2xlZXBhYmxlIGNvbnRleHQsIHdoaWNoIGlzIGxpa2VseSBjcml0aWNhbC4gIFRoZSBgZG9fY2hlY2tfc3VicHJvZ3NgIGZ1bmN0aW9uIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gIEl0IG5vdyBoYW5kbGVzIGFuIGV4Y2VwdGlvbiBjYWxsYmFjayBhbmQgaXRlcmF0ZXMgdGhyb3VnaCBzdWJwcm9ncmFtcyBpbiBhIHRvcG9sb2dpY2FsIG9yZGVyLiBJdCBkb2VzIGEgbG9vcCBgZm9yIChjb250ZXh0ID0gMDsgY29udGV4dCBcdTAwM2MgQVJSQVlfU0laRShzdWJfYXV4LVx1MDAzZWNhbGxlZCk7IGNvbnRleHQrKylgIC0gdGhpcyBpcyB0aGUga2V5LiAgSXQgZG9lcyAqbXVsdGlwbGUqIHZlcmlmaWNhdGlvbiBwYXNzZXMgcGVyIGNvbnRleHQhIFRoYXQncyBhIHN0cm9uZyBzaWduYWwgb2Ygc2lnbmlmaWNhbnQgbG9naWMgY2hhbmdlLlxuXG5UaGVuIGBkb19jaGVja19tYWluYCBjYWxscyBgZG9fY2hlY2tfY29tbW9uYCwgYWdhaW4gbGlua2luZyB2ZXJpZmljYXRpb24gdG8gdGhlIHNsZWVwYWJsZSBjb250ZXh0LiBUaGUgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBhY2N1bXVsYXRpbmcgdG90YWwgaW5zdHJ1Y3Rpb24gY291bnQgaW4gYGRvX2NoZWNrX2NvbW1vbmAgYWxzbyBuZWVkIHRvIGJlIHNjcnV0aW5pemVkIGZvciBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gaW5zdHJ1Y3Rpb24gY291bnRpbmcgYWNyb3NzIHRoZXNlIGRpZmZlcmVudCB2ZXJpZmljYXRpb24gc3RhdGVzLlxuXG5Ob3csIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGxvb2tzIHByb21pc2luZy4gVGhlIEJQRiB2ZXJpZmllciBpcyBhIGNyaXRpY2FsIHBhdGggYW5kIGVhc2lseSByZWFjaGFibGUgdmlhIHRoZSBgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLilgIHN5c2NhbGwuIFN5emthbGxlcidzIGRlZXAgQlBGIHN1cHBvcnQgbWFrZXMgaXQgZXZlbiBlYXNpZXIgdG8gdHJpZ2dlci4gVGhlIGNvcmUgc3Vic3lzdGVtLCBsb2dpYyBjaGFuZ2VzIGFyb3VuZCBzbGVlcGFibGUgdnMuIG5vbi1zbGVlcGFibGUgY29udGV4dHMsIHRoZSB0b3BvbG9naWNhbCBvcmRlciBsb29wIGFuZCBlc3BlY2lhbGx5IHRoZSBtdWx0aXBsZSB2ZXJpZmljYXRpb24gcGFzc2VzIHBlciBjb250ZXh0LCBhbGwgc2NyZWFtIFwiV29ydGhGdXp6aW5nPXRydWUuXCIgIFRoaXMgaXMgZGVmaW5pdGVseSBhbiBhcmVhIHdoZXJlIHN1YnRsZSBidWdzIGNvdWxkIGJlIGx1cmtpbmcuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy4gVGhlIEJQRiB2ZXJpZmllciB3aWxsIGxpa2VseSByZXF1aXJlIGBDT05GSUdfQlBGX1NZU0NBTExgIChhbmQgcG9zc2libHkgYENPTkZJR19CUEZgKSB0byBiZSBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBjaGVjayB0aGUga2VybmVsJ3MgYEtjb25maWdgIG9yIHJlbGV2YW50IGBNYWtlZmlsZWAgZmlsZXMgdG8gdmVyaWZ5IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBiZWZvcmUgbW92aW5nIGZvcndhcmQgd2l0aCBhbnkgZnV6emluZyBwbGFucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg4OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjE5LjIzMzE2NjAxMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTA3Mzk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXJpZmllclxcXFwuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYnBmX2l0ZXIuYz03Mjc9QlBGX0NBTExfNChicGZfbG9vcCwgdTMyLCBucl9sb29wcywgdm9pZCAqLCBjYWxsYmFja19mbiwgdm9pZCAqLCBjYWxsYmFja19jdHgsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzM1LVxcdCAqIGlzIGlubGluZWQsIGJlIGNhcmVmdWwgdG8gbW9kaWZ5IHRoaXMgY29kZSBpbiBzeW5jLiBTZWVcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NzM2OlxcdCAqIGZ1bmN0aW9uIHZlcmlmaWVyLmM6aW5saW5lX2JwZl9sb29wLlxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03MzctXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDY0PV9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgc3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqbWV0YSlcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NzUtXFx0LyogVmVyaWZpZXIgc3RyaXBzIEtGX1JFVF9OVUxMIGlmIGlucHV0IGlzIG93bmVkIHJlZiwgc2VlIGlzX2tmdW5jX3JldF9udWxsXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ3NjpcXHQgKiBpbiB2ZXJpZmllci5jXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ3Ny1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM9OTkyPV9fYnBmX2tmdW5jIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYnBmX2l0ZXJfdGFza192bWFfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgKml0KVxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDExLVxcdCAqIFRoZSB2ZXJpZmllciBvbmx5IHRydXN0cyB2bV9tbSBhbmQgdm1fZmlsZSAoc2VlXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMDEyOlxcdCAqIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMIGluIHZlcmlmaWVyLmMpLiBUYWtlIGEgcmVmZXJlbmNlXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEzLVxcdCAqIG9uIHZtX2ZpbGU7IHZtX21tIGlzIGFscmVhZHkgY29ycmVjdCBiZWNhdXNlIGxvY2tfdm1hX3VuZGVyX3JjdSgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ3MjA9c3RhdGljIGludCBhZGp1c3RfcHRyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ4OTctXFx0XFx0LyogV2UgZG9uJ3QgYWxsb3cgc3VidHJhY3Rpb24gZnJvbSBGUCwgYmVjYXVzZSAoYWNjb3JkaW5nIHRvXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0ODk4OlxcdFxcdCAqIHRlc3RfdmVyaWZpZXIuYyB0ZXN0IFxcXCJpbnZhbGlkIGZwIGFyaXRobWV0aWNcXFwiLCBKSVRzIG1pZ2h0IG5vdFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDg5OS1cXHRcXHQgKiBiZSBhYmxlIHRvIGRlYWwgd2l0aCBpdC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6MTkuMzE0MjQ1MDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzE1MzY2NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIFZlcmlmaWVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IEtjb25maWcgb3B0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgQlBGIHZlcmlmaWVyIGNvZGUsIHNwZWNpZmljYWxseSBgdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgbW92ZSB3b3VsZCBiZSB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHN1YnN5c3RlbSB3b3VsZCByZXNpZGUsIGFuZCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIHR5cGljYWxseSBkZWZpbmVkIGFsb25nc2lkZSB0aGUgc291cmNlIGZpbGVzLiBIb3BlZnVsbHksIHRoZSBpbmNsdXNpb24gb2YgYHZlcmlmaWVyLmNgIHdpbGwgYmUgY29uZGl0aW9uYWwgYmFzZWQgb24gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWcuIFRoYXQncyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgdGhlIGh1bnQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzU2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6MjEuMDI5NjEzOTk4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NTkwNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZlcmlmaWVyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gKz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjIxLjEwOTIxMDkxNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMTc2NzI5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgQnVpbGQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgYW5kIHNwZWNpZmljYWxseSBsaW5lIDkuIEl0J3MgYnVpbGRpbmcgdGhlIEJQRiBzdWJzeXN0ZW0sIGFuZCB0aGlzIGxpbmUgaXMga2V5OiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyAuLi5gIEkgc2VlIHRoYXQgdGhlIG9iamVjdCBmaWxlcyBgc3lzY2FsbC5vYCwgYHZlcmlmaWVyLm9gLCBgaW5vZGUub2AsIGBoZWxwZXJzLm9gIGFuZCBwb3RlbnRpYWxseSBtb3JlLCBhcmUgY29uZGl0aW9uYWxseSBpbmNsdWRlZCBiYXNlZCBvbiB0aGUgYENPTkZJR19CUEZfU1lTQ0FMTGAgS2NvbmZpZyB2YXJpYWJsZS5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCB3aHkgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZGVmaW5lZC4gV2hlcmUgZG9lcyB0aGlzIGdldCBzZXQ/IEEgcXVpY2sgbG9vayBpbiBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AgaXMgZGVmaW5pdGVseSBpbiBvcmRlci4gSSdtIGd1ZXNzaW5nIGl0J3MgaW4gb25lIG9mIHRob3NlLCBzaW5jZSB0aGV5IGhhbmRsZSBhIGxvdCBvZiB0aGUgaW5pdGlhbCBrZXJuZWwgY29uZmlnLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRyaWdnZXJzIHRoaXMgY29uZmlnIG9wdGlvbiB0byBiZSBzZWxlY3RlZC4gSXMgaXQgYSBkaXJlY3QgZGVwZW5kZW5jeT8gQW5vdGhlciBvcHRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBCUEYgc3lzdGVtIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgYnVpbGQgcHJvY2Vzcy4gRnJvbSB0aGVyZSwgSSBjYW4gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIEJQRiBzdWJzeXN0ZW0ncyBhcmNoaXRlY3R1cmUgYW5kIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNToyNC40MjY4ODY2MDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5NjgxNDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6MjQuNTA3ODYzOTYxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg4MzQxMzU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIGZvciBCUEZfU1lTQ0FMTCBpbiB0aGUgQ29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBgQlBGX1NZU0NBTExgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgYXNzdW1pbmcgaXQncyBsaWtlbHkgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIsIHByb2JhYmx5IHVuZGVyIG9uZSBvZiB0aGUgYnJvYWRlciBCUEYgb3Igc2VjdXJpdHktcmVsYXRlZCBzZWN0aW9ucy4gU2luY2UgaXQncyBhIHN5c2NhbGwtcmVsYXRlZCBmZWF0dXJlLCBJIGNhbiBhbG1vc3QgZ3VhcmFudGVlIGl0cyBleGlzdGVuY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGRlZmluZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSB0aGUgc3RhbmRhcmQgdG9vbHM7IGEgYGdyZXBgIHRocm91Z2ggdGhlIGtlcm5lbCdzIGBLY29uZmlnYCBmaWxlcyBzaG91bGQgZG8gdGhlIHRyaWNrLCBtYXliZSBzdGFydGluZyB3aXRoIGEgd2lsZGNhcmQgc2VhcmNoIGxpa2UgYEtjb25maWcqIEJQRl9TWVNDQUxMYC4gT3IgcGVyaGFwcyBJIHdpbGwgdXNlICdmaW5kJyBhbmQgJ2dyZXAnIGNvbW1hbmRzIHRvIHNlYXJjaC4gRGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBjb2RlYmFzZSwgSSBtaWdodCBuZWVkIHRvIHJlZmluZSB0aGF0IHNlYXJjaCBpZiBpdCdzIHRvbyBicm9hZCBpbml0aWFsbHkuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0IGFyb3VuZCB0aGF0IG9wdGlvbiDigJMgd2hhdCBvdGhlciBmZWF0dXJlcyBkb2VzIGl0IGVuYWJsZSBvciBkaXNhYmxlPyBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCdzIHRoZSBkZWZhdWx0IHZhbHVlIGFuZCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSdsbCBwcm9iYWJseSBhbHNvIGNoZWNrIHJlbGV2YW50IGBNYWtlZmlsZWBzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29uZmlnIG9wdGlvbiB0cmFuc2xhdGVzIGludG8gYnVpbGQgZmxhZ3MgYW5kIHVsdGltYXRlbHksIGhvdyBpdCBhZmZlY3RzIHRoZSBnZW5lcmF0ZWQga2VybmVsIGNvZGUuIElkZWFsbHksIEknbGwgZmluZCBhIGNvbmNpc2UgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGUgb3B0aW9uIGFjdHVhbGx5ICpkb2VzKiBhbG9uZyB0aGUgd2F5LiBUaGF0J3MgdGhlIHByaW9yaXR5IHJpZ2h0IG5vdywgZmluZGluZyBpdHMgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUxMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjI3LjM5MTI4MDU5M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyOTY0NTU5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI5PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTMwLVxcbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMzItXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNToyOS4zMjA5MzkxMzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc3MzM4MTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgQlBGIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBCUEYuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMS4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgdGhlIGNvcmUgZGVmaW5pdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gSSdtIGV4cGVjdGluZyB0byBzZWUgd2hhdCBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUgdG8gZ2V0IHRoZSBiYXNpYyBCUEYgaW5mcmFzdHJ1Y3R1cmUgdXAgYW5kIHJ1bm5pbmcuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugd2hldGhlciBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgZmVhdHVyZXMgYXJlIHJlcXVpcmVkLCBhbnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEJQRiByZWxpZXMgb24gKGxpa2UgdHJhY2luZyBvciBpbnN0cnVtZW50YXRpb24gY2FwYWJpbGl0aWVzLCBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0KS4gSSdtIGFsc28gZ29pbmcgdG8gc2VlIGlmIGFueSBvdGhlciBCUEYgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgYWxzbyBkZWZpbmVkIGluIHRoaXMgZmlsZS4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSBpZiB0aGUgZGVwZW5kZW5jaWVzIG1ha2Ugc2Vuc2Ugb3Igc2VlbSB1bnVzdWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTU0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6MzMuMDk0MzI1MjM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cXG4gIDI2OlxcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXFxuICAyNzpcXHRcXHRib29sXFxuICAyODpcXHRcXG4gIDI5OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMzM6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDM2OlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDM3OlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzODpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzk6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICA0MDpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgNDE6XFx0XFx0ZGVmYXVsdCBuXFxuICA0MjpcXHRcXHRoZWxwXFxuICA0MzpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQ0OlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBCUEZfSklUXFxuICA0NzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNTA6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDUxOlxcdFxcdGhlbHBcXG4gIDUyOlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNTM6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDU0OlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTU6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU4OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1OTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG4gIDYwOlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4gIDYzOlxcdFxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbiAgNjQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6MzMuMDk0NDM2ODE3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NjExNDM0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCBleGFjdGx5ICp3aGF0KiBoYXMgY2hhbmdlZCB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci4gSXQgbG9va3MgbGlrZSB0aGUgZm9jdXMgaXMgb24gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgc2NhbiBoaWdobGlnaHRzIGEgc2V0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBjZW50cmFsIHRvIHRoZSB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSSBzZWUgYGNoZWNrX2Z1bmNfY2FsbGAsIHdoaWNoIGlzIGtleSB0byBob3cgZnVuY3Rpb24gY2FsbHMgYXJlIGhhbmRsZWQsIGFuZCBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gY2FsbGVkIGBpbl9zbGVlcGFibGVfY29udGV4dGAsIGxpa2VseSByZWxhdGVkIHRvIGNvbnRleHQgY2hlY2tzLiBUaGVuIHRoZXJlJ3MgdGhlIGNvcmUgbG9naWM6IGBkb19jaGVja19jb21tb25gLCBgZG9fY2hlY2tfc3VicHJvZ3NgLCBhbmQgYGRvX2NoZWNrX21haW5gLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSB3b3JraG9yc2VzIG9mIHRoZSB2ZXJpZmllciwgZWFjaCBoYW5kbGluZyBhIHNwZWNpZmljIGFzcGVjdC4gQW5kIG9mIGNvdXJzZSwgdGhlIGVudHJ5IHBvaW50LCBgYnBmX2NoZWNrYCwgd2hpY2ggb3JjaGVzdHJhdGVzIGV2ZXJ5dGhpbmcgYnkgY2FsbGluZyBib3RoIGBkb19jaGVja19tYWluYCBhbmQgYGRvX2NoZWNrX3N1YnByb2dzYC5cblxuTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdGhvcm91Z2hseSByZXZpZXcgYGJwZl9jaGVja2AgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udHJvbCBmbG93IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgY2FsbCBoaWVyYXJjaHkuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgcGF0aHMgb2YgZXhlY3V0aW9uIHRocm91Z2ggdGhlIGRpZmZlcmVudCBgZG9fY2hlY2tfKmAgZnVuY3Rpb25zLCBjYXJlZnVsbHkgZXhhbWluaW5nIHRoZWlyIHJvbGVzIGFuZCBkYXRhIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2RpZmllZCB2ZXJpZmllcidzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc3MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjM1LjU1NTU4MzY5NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MzM0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fY2hlY2tfc3VicHJvZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTU2OD1zdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZywgYm9vbCBpbl9zbGVlcGFibGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTQtICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NzU1OnN0YXRpYyBpbnQgZG9fY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTYte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIxMzA2PWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDk3LVxcdHJldCA9IGRvX2NoZWNrX21haW4oZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE0OTg6XFx0cmV0ID0gcmV0ID86IGRvX2NoZWNrX3N1YnByb2dzKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNTozNS42MDMzMjY1ODNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODg1MTk1MjczMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHdhbnRlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQsIHNvIEkgdHJhY2VkIHRoZSBjYWxscyB0byBgYnBmX2NoZWNrYC4gSXQgbG9va3MgbGlrZSBpdCdzIHByaW1hcmlseSBjYWxsZWQgYnkgYGJwZl9wcm9nX2xvYWRgIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBJIHRoZW4gZXhwYW5kZWQgbXkgZm9jdXMgdG8gaW5jbHVkZSB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCB3ZXJlIGFsc28gbW9kaWZpZWQ6IGBjaGVja19mdW5jX2NhbGxgLCBgZG9fY2hlY2tfY29tbW9uYCwgYGRvX2NoZWNrX3N1YnByb2dzYCwgYW5kIGBkb19jaGVja19tYWluYC5cblxuQXJlIHRoZXNlIGdvb2QgdGFyZ2V0cyBmb3IgZm9jdXNlZCB0ZXN0aW5nPyBEZWZpbml0ZWx5LiBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIEJQRiB2ZXJpZmllci4gYGRvX2NoZWNrX3N1YnByb2dzYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcsIGdpdmVuIHRoZSBzaWduaWZpY2FudCBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gaXRlcmF0aW5nIG92ZXIgc2xlZXBhYmxlIHZlcnN1cyBub24tc2xlZXBhYmxlIGNvbnRleHRzIGFuZCB0aGUgdG9wb2xvZ2ljYWwgb3JkZXIgb2Ygc3VicHJvZ3JhbXMuIGBkb19jaGVja19jb21tb25gIHZlcmlmaWVzIHRoZSBzdWJwcm9ncmFtcyBhbmQgdGhlIG1haW4gcHJvZ3JhbSB1bmRlciBhIGdpdmVuIHNsZWVwYWJsZSBjb250ZXh0LCB3aGlsZSBgY2hlY2tfZnVuY19jYWxsYCBoYW5kbGVzIHRoZSBwc2V1ZG8tY2FsbHMgYW5kIG1hcmtzIHRoZSBjYWxsIGNvbnRleHQuIEFuZCBgZG9fY2hlY2tfbWFpbmAgaXMsIG5hdHVyYWxseSwgdGhlIG1haW4gcHJvZ3JhbSB2ZXJpZmllci5cblxuSXQncyBjbGVhciB0aGF0IHRoZXNlIGFyZSAqbm90KiB1YmlxdWl0b3VzIGhvdHBhdGhzLCB3aGljaCBpcyBnb29kLiBCUEYgdmVyaWZpY2F0aW9uIGlzIG9ubHkgdHJpZ2dlcmVkIGJ5IHRoZSBgYnBmKEJQRl9QUk9HX0xPQUQpYCBzeXNjYWxsLiBUaGlzIG5hcnJvd3MgdGhlIHNjb3BlIGFuZCBtYWtlcyB0aGVzZSBmdW5jdGlvbnMgZXZlbiBiZXR0ZXIgdGFyZ2V0cyBmb3IgZm9jdXNzZWQgYW5hbHlzaXMuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgbW9kaWZpZWQgZmlsZXMsIHdlIGhhdmUgYGluY2x1ZGUvbGludXgvYnBmLmhgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYW5kIGEgc2VsZi10ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jYC4gVGhlIGNvbmZpZyB3ZSBuZWVkIHRvIGVuYWJsZSBpcyBgQlBGX1NZU0NBTExgLlxuXG5Db25zaWRlcmluZyB0aGlzLCB0aGUgYW5hbHlzaXMgc2F5cyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIFRoZSBqdXN0aWZpY2F0aW9uIGlzIHNvbGlkOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIEJQRiB2ZXJpZmllciBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBoYW5kbGUgZ2xvYmFsIHN1YnByb2dyYW0gdmVyaWZpY2F0aW9uIGRpZmZlcmVudGx5IGJhc2VkIG9uIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cy4gVGhpcyBpbnZvbHZlcyBjaGFuZ2VzIHRvIGxvb3Agb3JkZXJzLCB0b3BvbG9naWNhbCBvcmRlcmluZywgYW5kIGNvbnRleHQgdHJhY2tpbmcuIEJlY2F1c2UgdGhpcyB0b3VjaGVzIGNvcmUgdmVyaWZpY2F0aW9uIGxvZ2ljIGFuZCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGBicGYoQlBGX1BST0dfTE9BRClgIHN5c3RlbSBjYWxsLCB0aGVyZSdzIGEgc3Ryb25nIHBvdGVudGlhbCBmb3Igc3RhdGUgdmFsaWRhdGlvbiBwcm9ibGVtcywgaW5maW5pdGUgbG9vcHMsIG9yIGV2ZW4gdmVyaWZpZXIgY3Jhc2hlcy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNoYW5nZSB3ZSB3YW50IHRvIHRhcmdldC5cblxuU28sIEknbSBnb2luZyB0byBzZXQgdGhlc2UgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzIsIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjQ0LjQ1NTI4MTkxNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNTc0MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiLFxuICAgIFwiZG9fY2hlY2tfc3VicHJvZ3NcIixcbiAgICBcImRvX2NoZWNrX2NvbW1vblwiLFxuICAgIFwiY2hlY2tfZnVuY19jYWxsXCIsXG4gICAgXCJkb19jaGVja19tYWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBhbmQgdmVyaWZ5IGdsb2JhbCBzdWJwcm9ncmFtcyBzZXBhcmF0ZWx5IGFjcm9zcyBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUgZXhlY3V0aW9uIGNvbnRleHRzLCBtb2RpZnlpbmcgc3VicHJvZ3JhbSB2ZXJpZmljYXRpb24gbG9vcHMsIHRvcG9sb2dpY2FsIHRyYXZlcnNhbCBvcmRlciwgYW5kIGNvbnRleHQgc3RhdGUgaGFuZGxpbmcgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FEKSBzeXNjYWxsIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJkb19jaGVja19zdWJwcm9nc1wiLFxuICAgIFwiZG9fY2hlY2tfY29tbW9uXCIsXG4gICAgXCJjaGVja19mdW5jX2NhbGxcIixcbiAgICBcImRvX2NoZWNrX21haW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHRyYWNrIGFuZCB2ZXJpZnkgZ2xvYmFsIHN1YnByb2dyYW1zIHNlcGFyYXRlbHkgYWNyb3NzIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBleGVjdXRpb24gY29udGV4dHMsIG1vZGlmeWluZyBzdWJwcm9ncmFtIHZlcmlmaWNhdGlvbiBsb29wcywgdG9wb2xvZ2ljYWwgdHJhdmVyc2FsIG9yZGVyLCBhbmQgY29udGV4dCBzdGF0ZSBoYW5kbGluZyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjQ0LjUzNzg2Mjc4NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkwOTIwNTY2OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNTo0NC41Mzg0MTY0ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozOTA5MTQ5ODQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBhbmQgdmVyaWZ5IGdsb2JhbCBzdWJwcm9ncmFtIGNhbGxzIHNlcGFyYXRlbHkgZm9yIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZS9SQ1UgY29udGV4dHMuIEl0IHJlcGxhY2VzIHRoZSBzaW5nbGUtYml0IGBjYWxsZWRgIGFuZCBgdmVyaWZpZWRgIGZsYWdzIGluIGBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXhgIHdpdGggdHdvLWVsZW1lbnQgYm9vbGVhbiBhcnJheXMgaW5kZXhlZCBieSBgaW5fc2xlZXBhYmxlYC5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suIFRoZSBgYnBmX2Z1bmNfaW5mb19hdXhgIHN0cnVjdHVyZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uICh2aWEgYGt6YWxsb2Nfb2Jqc2ApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGBkb19jaGVja19zdWJwcm9ncygpYCwgYGRvX2NoZWNrX2NvbW1vbigpYCwgYW5kIGBjaGVja19mdW5jX2NhbGwoKWAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGUgYXJyYXlzIGFyZSBpbmRleGVkIHVzaW5nIGJvb2xlYW4gdmFsdWVzICgwIG9yIDEpLCBtYXRjaGluZyB0aGUgYXJyYXkgZGltZW5zaW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IEFueSBtZW1vcnkgYWNjZXNzIGlzc3VlcyAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIGFjY2VzcywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgc3RhdGUgYWxsb2NhdGlvbiBpc3N1ZXMsIG9yIGxvZ2ljL3ZlcmlmaWVyIHRyYXZlcnNhbCBidWdzKSB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NmVmYTYwM2EwZDUyMmU2ZWVjNjMyMzBkMTlhNmUyNjBkZmVlM2Q4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxMDowNToxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCAzYTdlYjIxODVjMzU0Li42NmQwNDI0NGM3Mzc4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTE2NTAsOCArMTY1MCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV9zZXRfZmxhZ3Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIGZsYWdzXG4gc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4IHtcbiBcdHUxNiBsaW5rYWdlO1xuIFx0Ym9vbCB1bnJlbGlhYmxlO1xuLVx0Ym9vbCBjYWxsZWQgOiAxO1xuLVx0Ym9vbCB2ZXJpZmllZCA6IDE7XG4rXHQvKiBJbmRleGVkIGJ5IGluX3NsZWVwYWJsZS4gKi9cbitcdGJvb2wgY2FsbGVkWzJdO1xuK1x0Ym9vbCB2ZXJpZmllZFsyXTtcbiB9O1xuIFxuIGVudW0gYnBmX2ppdF9wb2tlX3JlYXNvbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA1YjUxZTdlZTFhM2Y5Li5mNzU5YTAyMGM4YTVhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC05OTU3LDYgKzk5NTcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRpZiAoZXJyID09IC1FRkFVTFQpXG4gXHRcdHJldHVybiBlcnI7XG4gXHRpZiAoYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGVudiwgc3VicHJvZykpIHtcbitcdFx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICpzdWJfYXV4ID0gc3VicHJvZ19hdXgoZW52LCBzdWJwcm9nKTtcbiBcdFx0Y29uc3QgY2hhciAqc3ViX25hbWUgPSBicGZfc3VicHJvZ19uYW1lKGVudiwgc3VicHJvZyk7XG4gXHRcdGNvbnN0IGNoYXIgKm9wZXJhdGlvbjtcbiBcdFx0Ym9vbCByZXR1cm5zX3ZvaWQ7XG5AQCAtOTk4OCwxMSArOTk4OSwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdGlmIChlbnYtXHUwMDNlbG9nLmxldmVsIFx1MDAyNiBCUEZfTE9HX0xFVkVMKVxuIFx0XHRcdHZlcmJvc2UoZW52LCBcIkZ1bmMjJWQgKCclcycpIGlzIGdsb2JhbCBhbmQgYXNzdW1lZCB2YWxpZC5cXG5cIixcbiBcdFx0XHRcdHN1YnByb2csIHN1Yl9uYW1lKTtcbitcdFx0c3ViX2F1eC1cdTAwM2VjYWxsZWRbaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KV0gPSB0cnVlO1xuIFx0XHRyZXR1cm5zX3ZvaWQgPSBzdWJwcm9nX3JldHVybnNfdm9pZChlbnYsIHN1YnByb2cpO1xuIFx0XHRpZiAoZW52LVx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5jaGFuZ2VzX3BrdF9kYXRhKVxuIFx0XHRcdGNsZWFyX2FsbF9wa3RfcG9pbnRlcnMoZW52KTtcbi1cdFx0LyogbWFyayBnbG9iYWwgc3VicHJvZyBmb3IgdmVyaWZ5aW5nIGFmdGVyIG1haW4gcHJvZyAqL1xuLVx0XHRzdWJwcm9nX2F1eChlbnYsIHN1YnByb2cpLVx1MDAzZWNhbGxlZCA9IHRydWU7XG4gXHRcdGlmIChyZXR1cm5zX3ZvaWQpXG4gXHRcdFx0YnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgXHUwMDI2Y2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18wXSwgQlBGX0RJQUdfTU9EX0NBTExFUl9TQVZFRCk7XG4gXHRcdGVsc2VcbkBAIC0xMDgwNCw3ICsxMDgwNCwxMiBAQCBpbnQgYnBmX2dldF9oZWxwZXJfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGZ1bmNfaWQsXG4gXHRyZXR1cm4gKnB0ciBcdTAwMjZcdTAwMjYgKCpwdHIpLVx1MDAzZWZ1bmMgPyAwIDogLUVJTlZBTDtcbiB9XG4gXG4tLyogQ2hlY2sgaWYgd2UncmUgaW4gYSBzbGVlcGFibGUgY29udGV4dC4gKi9cbisvKlxuKyAqIFRoaXMgcHJlZGljYXRlIGlzIHRoZSBpbnZlcnNlIG9mIGluX3JjdV9jcygpOiBub24tc2xlZXBhYmxlIHByb2dyYW1zIGFuZFxuKyAqIGV2ZXJ5IGNvbmRpdGlvbiB0aGF0IHByZXZlbnRzIHNsZWVwaW5nIGFsc28gcHJvdmlkZSBSQ1UgcHJvdGVjdGlvbi4gR2xvYmFsXG4rICogc3VicHJvZyB2ZXJpZmljYXRpb24gcmVsaWVzIG9uIHRoaXMgZXF1aXZhbGVuY2UgdG8gcmVwcmVzZW50IHRoZSBjYWxsZXInc1xuKyAqIGV4ZWN1dGlvbiBjb250ZXh0IHVzaW5nIG9ubHkgdGhlIGluX3NsZWVwYWJsZSBiaXQuXG4rICovXG4gc3RhdGljIGlubGluZSBib29sIGluX3NsZWVwYWJsZV9jb250ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0cmV0dXJuICFlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWFjdGl2ZV9yY3VfbG9ja3MgXHUwMDI2XHUwMDI2XG5AQCAtMTk1NjAsMTMgKzE5NTY1LDE0IEBAIHN0YXRpYyB2b2lkIGZyZWVfc3RhdGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxuK3N0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBib29sIGluX3NsZWVwYWJsZSlcbiB7XG4gXHRib29sIHBvcF9sb2cgPSAhKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwyKTtcbiBcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWIgPSBzdWJwcm9nX2luZm8oZW52LCBzdWJwcm9nKTtcbiBcdHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eDtcbiBcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXRlO1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3M7XG4rXHR1MzIgb2xkX2luc25zX3RvdGFsID0gc3ViLVx1MDAzZWluc25zX3RvdGFsO1xuIFx0dTMyIGluc25fcHJvY2Vzc2VkID0gZW52LVx1MDAzZWluc25fcHJvY2Vzc2VkO1xuIFx0aW50IHJldCwgaTtcbiBcbkBAIC0xOTU3OSw3ICsxOTU4NSw3IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxuIFx0c3RhdGUtXHUwMDNlY3VyZnJhbWUgPSAwO1xuIFx0c3RhdGUtXHUwMDNlc3BlY3VsYXRpdmUgPSBmYWxzZTtcbiBcdHN0YXRlLVx1MDAzZWJyYW5jaGVzID0gMTtcbi1cdHN0YXRlLVx1MDAzZWluX3NsZWVwYWJsZSA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZXNsZWVwYWJsZTtcbitcdHN0YXRlLVx1MDAzZWluX3NsZWVwYWJsZSA9IGluX3NsZWVwYWJsZTtcbiBcdHN0YXRlLVx1MDAzZWZyYW1lWzBdID0ga3phbGxvY19vYmooc3RydWN0IGJwZl9mdW5jX3N0YXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFzdGF0ZS1cdTAwM2VmcmFtZVswXSkge1xuIFx0XHRrZnJlZShzdGF0ZSk7XG5AQCAtMTk3MjEsNyArMTk3MjcsOCBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX2NvbW1vbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbiBcdCAqIEFjY3VtdWxhdGUgdGhlaXIgdG90YWwgY291bnRzIGFzIHRvdGFsIGNvdW50cyBvZiB0aGUgbWFpbiBvclxuIFx0ICogZ2xvYmFsIHN1YnByb2cgaG9zdGluZyB0aGUgYXN5bmMgY2FsbC5cbiBcdCAqL1xuLVx0ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5pbnNuc190b3RhbCA9IGVudi1cdTAwM2VpbnNuX3Byb2Nlc3NlZCAtIGluc25fcHJvY2Vzc2VkO1xuK1x0ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5pbnNuc190b3RhbCA9IG9sZF9pbnNuc190b3RhbCArXG4rXHRcdFx0XHRcdFx0KGVudi1cdTAwM2VpbnNuX3Byb2Nlc3NlZCAtIGluc25fcHJvY2Vzc2VkKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTE5NzQ5LDQ1ICsxOTc1Niw1NSBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4O1xuIFx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICpzdWJfYXV4O1xuLVx0aW50IGksIHJldCwgbmV3X2NudDtcbitcdGludCBjb250ZXh0LCBpLCBqLCByZXQsIG5ld19jbnQ7XG4gXG4gXHRpZiAoIWF1eC1cdTAwM2VmdW5jX2luZm8pXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogZXhjZXB0aW9uIGNhbGxiYWNrIGlzIHByZXN1bWVkIHRvIGJlIGFsd2F5cyBjYWxsZWQgKi9cbi1cdGlmIChlbnYtXHUwMDNlZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpXG4tXHRcdHN1YnByb2dfYXV4KGVudiwgZW52LVx1MDAzZWV4Y2VwdGlvbl9jYWxsYmFja19zdWJwcm9nKS1cdTAwM2VjYWxsZWQgPSB0cnVlO1xuK1x0aWYgKGVudi1cdTAwM2VleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZykge1xuK1x0XHRzdWJfYXV4ID0gc3VicHJvZ19hdXgoZW52LCBlbnYtXHUwMDNlZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpO1xuK1x0XHRzdWJfYXV4LVx1MDAzZWNhbGxlZFtlbnYtXHUwMDNlcHJvZy1cdTAwM2VzbGVlcGFibGVdID0gdHJ1ZTtcbitcdH1cbiBcbiBhZ2FpbjpcbiBcdG5ld19jbnQgPSAwO1xuLVx0Zm9yIChpID0gMTsgaSBcdTAwM2MgZW52LVx1MDAzZXN1YnByb2dfY250OyBpKyspIHtcbitcdC8qXG4rXHQgKiBXYWxrIGNhbGxlcnMgYmVmb3JlIGNhbGxlZXMgc28gZWFjaCBnbG9iYWwgc3VicHJvZyBub3JtYWxseSBzZWVzIGFsbFxuK1x0ICogb2YgaXRzIGNvbnRleHRzIGJlZm9yZSBpdCBpcyB2ZXJpZmllZC4gQXN5bmMgY2FsbGJhY2sgY3ljbGVzIGNhbiBhZGQgYVxuK1x0ICogY29udGV4dCB0byBhbiBlYXJsaWVyIHN1YnByb2csIHNvIHJlcGVhdCB1bnRpbCBldmVyeSBjYWxsZWQgY29udGV4dCBpc1xuK1x0ICogdmVyaWZpZWQuXG4rXHQgKi9cbitcdGZvciAoaiA9IGVudi1cdTAwM2VzdWJwcm9nX2NudCAtIDE7IGogXHUwMDNlPSAwOyBqLS0pIHtcbitcdFx0aSA9IGVudi1cdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJbal07XG4rXHRcdGlmICghaSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKCFicGZfc3VicHJvZ19pc19nbG9iYWwoZW52LCBpKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0c3ViX2F1eCA9IHN1YnByb2dfYXV4KGVudiwgaSk7XG4tXHRcdGlmICghc3ViX2F1eC1cdTAwM2VjYWxsZWQgfHwgc3ViX2F1eC1cdTAwM2V2ZXJpZmllZClcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0Zm9yIChjb250ZXh0ID0gMDsgY29udGV4dCBcdTAwM2MgQVJSQVlfU0laRShzdWJfYXV4LVx1MDAzZWNhbGxlZCk7IGNvbnRleHQrKykge1xuK1x0XHRcdGlmICghc3ViX2F1eC1cdTAwM2VjYWxsZWRbY29udGV4dF0gfHwgc3ViX2F1eC1cdTAwM2V2ZXJpZmllZFtjb250ZXh0XSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRlbnYtXHUwMDNlaW5zbl9pZHggPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0O1xuLVx0XHRXQVJOX09OX09OQ0UoZW52LVx1MDAzZWluc25faWR4ID09IDApO1xuLVx0XHRyZXQgPSBkb19jaGVja19jb21tb24oZW52LCBpKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdHJldHVybiByZXQ7XG4tXHRcdH0gZWxzZSBpZiAoZW52LVx1MDAzZWxvZy5sZXZlbCBcdTAwMjYgQlBGX0xPR19MRVZFTCkge1xuLVx0XHRcdHZlcmJvc2UoZW52LCBcIkZ1bmMjJWQgKCclcycpIGlzIHNhZmUgZm9yIGFueSBhcmdzIHRoYXQgbWF0Y2ggaXRzIHByb3RvdHlwZVxcblwiLFxuLVx0XHRcdFx0aSwgYnBmX3N1YnByb2dfbmFtZShlbnYsIGkpKTtcbi1cdFx0fVxuK1x0XHRcdGVudi1cdTAwM2VpbnNuX2lkeCA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm9baV0uc3RhcnQ7XG4rXHRcdFx0V0FSTl9PTl9PTkNFKGVudi1cdTAwM2VpbnNuX2lkeCA9PSAwKTtcbitcdFx0XHRyZXQgPSBkb19jaGVja19jb21tb24oZW52LCBpLCBjb250ZXh0KTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHRpZiAoZW52LVx1MDAzZWxvZy5sZXZlbCBcdTAwMjYgQlBGX0xPR19MRVZFTClcbitcdFx0XHRcdHZlcmJvc2UoZW52LCBcIkZ1bmMjJWQgKCclcycpIGlzIHNhZmUgZm9yIGFueSBhcmdzIFwiXG4rXHRcdFx0XHRcdFwidGhhdCBtYXRjaCBpdHMgcHJvdG90eXBlXFxuXCIsXG4rXHRcdFx0XHRcdGksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBpKSk7XG4gXG4tXHRcdC8qIFdlIHZlcmlmaWVkIG5ldyBnbG9iYWwgc3VicHJvZywgaXQgbWlnaHQgaGF2ZSBjYWxsZWQgc29tZVxuLVx0XHQgKiBtb3JlIGdsb2JhbCBzdWJwcm9ncyB0aGF0IHdlIGhhdmVuJ3QgdmVyaWZpZWQgeWV0LCBzbyB3ZVxuLVx0XHQgKiBuZWVkIHRvIGRvIGFub3RoZXIgcGFzcyBvdmVyIHN1YnByb2dzIHRvIHZlcmlmeSB0aG9zZS5cbi1cdFx0ICovXG4tXHRcdHN1Yl9hdXgtXHUwMDNldmVyaWZpZWQgPSB0cnVlO1xuLVx0XHRuZXdfY250Kys7XG4rXHRcdFx0c3ViX2F1eC1cdTAwM2V2ZXJpZmllZFtjb250ZXh0XSA9IHRydWU7XG4rXHRcdFx0bmV3X2NudCsrO1xuK1x0XHR9XG4gXHR9XG4gXG4tXHQvKiBXZSBjYW4ndCBsb29wIGZvcmV2ZXIgYXMgd2UgdmVyaWZ5IGF0IGxlYXN0IG9uZSBnbG9iYWwgc3VicHJvZyBvblxuLVx0ICogZWFjaCBwYXNzLlxuK1x0LypcbitcdCAqIFdlIGNhbid0IGxvb3AgZm9yZXZlciBhcyBlYWNoIHBhc3MgdmVyaWZpZXMgYXQgbGVhc3Qgb25lIG5ldyBjb250ZXh0LFxuK1x0ICogYW5kIHRoZXJlIGFyZSBvbmx5IHR3byBjb250ZXh0cyBwZXIgZ2xvYmFsIHN1YnByb2cuXG4gXHQgKi9cbiBcdGlmIChuZXdfY250KVxuIFx0XHRnb3RvIGFnYWluO1xuQEAgLTE5ODAwLDcgKzE5ODE3LDcgQEAgc3RhdGljIGludCBkb19jaGVja19tYWluKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRpbnQgcmV0O1xuIFxuIFx0ZW52LVx1MDAzZWluc25faWR4ID0gMDtcbi1cdHJldCA9IGRvX2NoZWNrX2NvbW1vbihlbnYsIDApO1xuK1x0cmV0ID0gZG9fY2hlY2tfY29tbW9uKGVudiwgMCwgZW52LVx1MDAzZXByb2ctXHUwMDNlc2xlZXBhYmxlKTtcbiBcdGlmICghcmV0KVxuIFx0XHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlc3RhY2tfZGVwdGggPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvWzBdLnN0YWNrX2RlcHRoO1xuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xuaW5kZXggNmJmOTU1NTBhMDI0OC4uOTg3Y2E5ZGVjNmI3ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcbkBAIC05LDYgKzksMTEgQEBcbiBcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4gXG4rc3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19hY3F1aXJlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xuK3ZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbit2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbit2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuK1xuIC8qIFRpbWVyIHRlc3RzICovXG4gXG4gc3RydWN0IHRpbWVyX2VsZW0ge1xuQEAgLTY2LDYgKzcxLDcgQEAgaW50IHRpbWVyX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcbiBcbiBzdHJ1Y3Qgd3FfZWxlbSB7XG4gXHRzdHJ1Y3QgYnBmX3dxIHc7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19rcHRyICp0YXNrO1xuIH07XG4gXG4gc3RydWN0IHtcbkBAIC0xMTksNiArMTI1LDEwNiBAQCBpbnQgd3Ffc2xlZXBhYmxlX3Byb2codm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK19fbm9pbmxpbmUgaW50IHdxX2dsb2JhbF9hY3F1aXJlKHZvaWQpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAqYWNxdWlyZWQ7XG4rXHRzdHJ1Y3Qgd3FfZWxlbSAqdmFsO1xuK1x0aW50IGtleSA9IDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndxX21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHRhc2sgPSB2YWwtXHUwMDNldGFzaztcbitcdGlmICghdGFzaylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRhY3F1aXJlZCA9IGJwZl90YXNrX2FjcXVpcmUodGFzayk7XG4rXHRpZiAoYWNxdWlyZWQpXG4rXHRcdGJwZl90YXNrX3JlbGVhc2UoYWNxdWlyZWQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3FfZ2xvYmFsX3JjdV9jYih2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcbit7XG4rXHR3cV9nbG9iYWxfYWNxdWlyZSgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcImZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiUjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyXCIpXG4raW50IHdxX2dsb2JhbF9yY3VfcHJvZyh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHdxX2VsZW0gKnZhbDtcbitcdGludCBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ3cV9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfd3FfaW5pdChcdTAwMjZ2YWwtXHUwMDNldywgXHUwMDI2d3FfbWFwLCAwKTtcbitcdGJwZl93cV9zZXRfY2FsbGJhY2soXHUwMDI2dmFsLVx1MDAzZXcsIHdxX2dsb2JhbF9yY3VfY2IsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3FfZ2xvYmFsX3JjdV9sb2NrX2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxuK3tcbitcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4rXHR3cV9nbG9iYWxfYWNxdWlyZSgpO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcImZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXCIpXG4rX19zdWNjZXNzXG4raW50IHdxX2dsb2JhbF9yY3VfbG9ja19wcm9nKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qgd3FfZWxlbSAqdmFsO1xuK1x0aW50IGtleSA9IDA7XG4rXG4rXHQvKiBWZXJpZnkgdGhlIHNhbWUgZ2xvYmFsIHN1YnByb2cgaW4gbm9uLXNsZWVwYWJsZSBhbmQgcHJvdGVjdGVkIGNvbnRleHRzLiAqL1xuK1x0d3FfZ2xvYmFsX2FjcXVpcmUoKTtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2d3FfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX3dxX2luaXQoXHUwMDI2dmFsLVx1MDAzZXcsIFx1MDAyNndxX21hcCwgMCk7XG4rXHRicGZfd3Ffc2V0X2NhbGxiYWNrKFx1MDAyNnZhbC1cdTAwM2V3LCB3cV9nbG9iYWxfcmN1X2xvY2tfY2IsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK19fbm9pbmxpbmUgaW50IHdxX2dsb2JhbF9ub19yY3Uodm9pZClcbit7XG4rXHRiYXJyaWVyKCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB3cV9nbG9iYWxfbm9fcmN1X2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxuK3tcbitcdHdxX2dsb2JhbF9ub19yY3UoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwiKVxuK19fc3VjY2Vzc1xuK2ludCB3cV9nbG9iYWxfbm9fcmN1X3Byb2codm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB3cV9lbGVtICp2YWw7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdC8qIFZlcmlmeSB0aGUgc2FtZSBnbG9iYWwgaW4gbm9uLXNsZWVwYWJsZSBhbmQgdW5wcm90ZWN0ZWQgY29udGV4dHMuICovXG4rXHR3cV9nbG9iYWxfbm9fcmN1KCk7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndxX21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl93cV9pbml0KFx1MDAyNnZhbC1cdTAwM2V3LCBcdTAwMjZ3cV9tYXAsIDApO1xuK1x0YnBmX3dxX3NldF9jYWxsYmFjayhcdTAwMjZ2YWwtXHUwMDNldywgd3FfZ2xvYmFsX25vX3JjdV9jYiwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogVGFzayB3b3JrIHRlc3RzICovXG4gXG4gc3RydWN0IHRhc2tfd29ya19lbGVtIHtcbkBAIC0xNzksMyArMjg1LDI5IEBAIGludCB0YXNrX3dvcmtfc2xlZXBhYmxlX3Byb2codm9pZCAqY3R4KVxuIFx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2dmFsLVx1MDAzZXR3LCBcdTAwMjZ0YXNrX3dvcmtfbWFwLCB0YXNrX3dvcmtfY2IpO1xuIFx0cmV0dXJuIDA7XG4gfVxuK1xuK3N0YXRpYyBpbnQgdGFza193b3JrX2dsb2JhbF9yY3VfY2Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSlcbit7XG4rXHRyZXR1cm4gd3FfZ2xvYmFsX2FjcXVpcmUoKTtcbit9XG4rXG4rU0VDKFwiZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcIilcbitfX2ZhaWx1cmUgX19tc2coXCJSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcIilcbitpbnQgdGFza193b3JrX2dsb2JhbF9yY3VfcHJvZyh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfd29ya19lbGVtICp2YWw7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGFza193b3JrX21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdGlmICghdGFzaylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSh0YXNrLCBcdTAwMjZ2YWwtXHUwMDNldHcsIFx1MDAyNnRhc2tfd29ya19tYXAsXG4rXHRcdFx0XHQgICAgICB0YXNrX3dvcmtfZ2xvYmFsX3JjdV9jYik7XG4rXHRyZXR1cm4gMDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNTo0NC41Mzg0MTc1NTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjIxNDYyMjAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoZSBOZWVkIGZvciBhIERlZGljYXRlZCBLTVNBTiBGdXp6aW5nIFNlc3Npb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIHNwaW5uaW5nIHVwIGEgc2VwYXJhdGUgS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgd2hhdCB3ZSdyZSBhbHJlYWR5IGRvaW5nIHdpdGggS0FTQU4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyB0aHJvdWdoIHRoZSBjaGFuZ2VzIG1ldGhvZGljYWxseSBhbmQgdGhlbiBtYWtlIHRoZSBjYWxsLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gSSdsbCBleGFtaW5lIHRoZSBjb2RlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhleSByZWxhdGUgdG8gcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2ggYmV0dGVyIHRoYW4gS0FTQU4uXG5cbkFscmlnaHQsIHRoZSBwYXRjaCB0b3VjaGVzIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGFuZCBpbmNsdWRlcyBhIHNlbGYtdGVzdC4gTGV04oCZcyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4gVGhleSd2ZSBtb2RpZmllZCBgc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4YC4gVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoZSBjaGFuZ2UgZnJvbSBzaW5nbGUgYGNhbGxlZGAgYW5kIGB2ZXJpZmllZGAgYm9vbHMgdG8gYXJyYXlzOiBgY2FsbGVkWzJdYCBhbmQgYHZlcmlmaWVkWzJdYC4gSW5kZXhlZCBieSBgaW5fc2xlZXBhYmxlX2NvbnRleHRgLiBUaGlzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgY29udGV4dC1zZW5zaXRpdmUgY2hhbmdlLCBsaWtlbHkgZGVhbGluZyB3aXRoIGhvdyBCUEYgZnVuY3Rpb25zIGJlaGF2ZSBpbiBzbGVlcGFibGUgdmVyc3VzIG5vbi1zbGVlcGFibGUgY29udGV4dHMuXG5cbk1vdmluZyBvbiB0byBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gIEkgc2VlIHRoZSBgY2hlY2tfZnVuY19jYWxsKClgIGZ1bmN0aW9uIGlzIHVwZGF0ZWQgdG8gc2V0IGBzdWJfYXV4LVx1MDAzZWNhbGxlZFtpbl9zbGVlcGFibGVfY29udGV4dChlbnYpXSA9IHRydWU7YC4gIFRoZSB2ZXJpZmllciBpcyBub3cgdHJhY2tpbmcgY2FsbHMgYmFzZWQgb24gd2hldGhlciB0aGV5IG9jY3VyIGluIGEgc2xlZXBhYmxlIGNvbnRleHQuICBBbHNvLCBgZG9fY2hlY2tfY29tbW9uYCBub3cgZXhwbGljaXRseSBwYXNzZXMgYGluX3NsZWVwYWJsZWAgdG8gYHN0YXRlLVx1MDAzZWluX3NsZWVwYWJsZWAuICBGaW5hbGx5LCBgZG9fY2hlY2tfc3VicHJvZ3MoKWAgaXRlcmF0ZXMgYW5kIHNldHMgYHN1Yl9hdXgtXHUwMDNldmVyaWZpZWRbY29udGV4dF0gPSB0cnVlO2AuIGBkb19jaGVja19tYWluKClgIGxvb2tzIGxpa2UgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIHNvIEknbGwgY2hlY2sgaWYgdGhlIGNoYW5nZSBpcyBsaW1pdGVkIHRvIGEgc2luZ2xlIGNvbnRleHQgKGUuZy4gYG1haW5gIG9ubHkpLlxuXG5UaGlzIGFsbCBwb2ludHMgdG8gY2hhbmdlcyBpbiBob3cgdGhlIEJQRiB2ZXJpZmllciBoYW5kbGVzIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cy4gVGhpcyBpcyBteSBpbnR1aXRpb24uIEl0J3MgbGlrZWx5IHRoYXQgdGhleSdyZSB0cnlpbmcgdG8gaW1wcm92ZSB2ZXJpZmljYXRpb24gb2YgQlBGIHByb2dyYW1zIHRoYXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGVzZSBzbGVlcGFibGUgY29udGV4dHMuXG5cbk5vdywgSSBuZWVkIHRvIGtub3cgbW9yZSBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eGAuICBJJ2xsIHVzZSBgZ3JlcHBlcmAgKG9yIHNpbWlsYXIgdG9vbHMpIHRvIGZpbmQgd2hlcmUgdGhpcyBzdHJ1Y3QgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpZiB0aGVyZSBhcmUgbmV3IHBvdGVudGlhbCBwYXRocyBvZiBtZW1vcnkgY29ycnVwdGlvbi4gQmFzZWQgb24gd2hlcmUgaXQncyBhbGxvY2F0ZWQgYW5kIGhvdyBpdCdzIHVzZWQsIEkgY2FuIGdldCBhIGJldHRlciBzZW5zZSBpZiB0aGlzIGlzIGEgS01TQU4gdHJpZ2dlciBvciBub3QuXG5cbkZyb20gdGhpcywgSSdsbCBhc3Nlc3Mgd2hldGhlciBhIHNlcGFyYXRlIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBsaWtlbHkgdG8gZXhwb3NlIG5ldyB2dWxuZXJhYmlsaXRpZXMgdGhhdCBhcmUgbWlzc2VkIGJ5IHRoZSBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLiBJZiB0aGUgYWxsb2NhdGlvbi91c2Ugb2YgdGhpcyBzdHJ1Y3QgaXMgaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBvciB1c2VzIGxvY2tpbmcgdGhhdCBpcyBub3QgS0FTQU4tdmVyaWZpZWQsIHRoZW4gSSB3aWxsIHN0cm9uZ2x5IGNvbnNpZGVyIEtNU0FOIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNTo1MC43NTMwNDMwOTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzE1MDQ1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnVuY19pbmZvX2F1eFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdD0xMjA9SXQgcHJvZHVjZXMgdGhlIG91dHB1dDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdC0xODItICAgICAgICAgICAgLmZ1bmNfaW5mbyA9IChzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyAqKTB4ZmZmZjg4OWZmNzk1ZDI0MCxcXG5Eb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdDoxODM6ICAgICAgICAgICAgLmZ1bmNfaW5mb19hdXggPSAoc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICopMHhmZmZmODg5ZmY3OTVkZTIwLFxcbkRvY3VtZW50YXRpb24vYnBmL2RyZ24ucnN0LTE4NC0gICAgICAgICAgICAubGluZm8gPSAoc3RydWN0IGJwZl9saW5lX2luZm8gKikweGZmZmY4ODhhNzA3YWZjMDAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE2NDc9c3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MpIHt9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE2NDktXFxuaW5jbHVkZS9saW51eC9icGYuaDoxNjUwOnN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCB7XFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjUxLVxcdHUxNiBsaW5rYWdlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0xNzQyPXN0cnVjdCBicGZfcHJvZ19hdXgge1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0xODI4LVxcdHN0cnVjdCBicGZfZnVuY19pbmZvICpmdW5jX2luZm87XFxuaW5jbHVkZS9saW51eC9icGYuaDoxODI5OlxcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqZnVuY19pbmZvX2F1eDtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE4MzAtXFx0LyogYnBmX2xpbmVfaW5mbyBsb2FkZWQgZnJvbSB1c2Vyc3BhY2UuICBsaW5mby1cXHUwMDNlaW5zbl9vZmZcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9OTE5PXN0cnVjdCBicGZfdmVyaWZpZXJfZW52IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTA1MC1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjEwNTE6c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXggKnN1YnByb2dfYXV4KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTA1Mi17XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMDUzOlxcdHJldHVybiBcXHUwMDI2ZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWZ1bmNfaW5mb19hdXhbc3VicHJvZ107XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMDU0LX1cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODAwNz1pbnQgYnRmX3ByZXBhcmVfZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy04MDQ3LVxcbmtlcm5lbC9icGYvYnRmLmM6ODA0ODpcXHRpZiAocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2ddLnVucmVsaWFibGUpIHtcXG5rZXJuZWwvYnBmL2J0Zi5jLTgwNDktXFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcInVucmVsaWFibGUgQlRGIGZvciBmdW5jdGlvbiAlcygpXFxcIiwgdG5hbWUpO1xcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYz0xMzM9c3RhdGljIGludCBjaGVja19idGZfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy0xMzktXFx0c3RydWN0IGJwZl9mdW5jX2luZm8gKmtyZWNvcmQ7XFxua2VybmVsL2JwZi9jaGVja19idGYuYzoxNDA6XFx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICppbmZvX2F1eCA9IE5VTEw7XFxua2VybmVsL2JwZi9jaGVja19idGYuYy0xNDEtXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy0yMDEtXFxua2VybmVsL2JwZi9jaGVja19idGYuYzoyMDI6XFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4ID0gaW5mb19hdXg7XFxua2VybmVsL2JwZi9jaGVja19idGYuYy0yMDMtXFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTQwMT1zdGF0aWMgaW50IGFkanVzdF9zdWJwcm9nX3N0YXJ0c19hZnRlcl9yZW1vdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNDM4LVxcdFxcdFxcdFxcdHNpemVvZigqYXV4LVxcdTAwM2VmdW5jX2luZm8pICogbW92ZSk7XFxua2VybmVsL2JwZi9maXh1cHMuYzo0Mzk6XFx0XFx0XFx0aWYgKGF1eC1cXHUwMDNlZnVuY19pbmZvX2F1eClcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjQ0MDpcXHRcXHRcXHRcXHRtZW1tb3ZlKGF1eC1cXHUwMDNlZnVuY19pbmZvX2F1eCArIGksXFxua2VybmVsL2JwZi9maXh1cHMuYzo0NDE6XFx0XFx0XFx0XFx0XFx0YXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4ICsgaixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjQ0MjpcXHRcXHRcXHRcXHRcXHRzaXplb2YoKmF1eC1cXHUwMDNlZnVuY19pbmZvX2F1eCkgKiBtb3ZlKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTQ0My1cXHRcXHRcXHRhdXgtXFx1MDAzZWZ1bmNfaW5mb19jbnQgLT0gaiAtIGk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yNDQwPXN0YXRpYyB2b2lkIF9fYnBmX3Byb2dfcHV0X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI0NDQtXFx0a3ZmcmVlKGF1eC1cXHUwMDNlZnVuY19pbmZvKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNDQ1OlxcdGtmcmVlKGF1eC1cXHUwMDNlZnVuY19pbmZvX2F1eCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjQ0Ni1cXHRmcmVlX3VpZChhdXgtXFx1MDAzZXVzZXIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM4Mj1ib29sIGJwZl9zdWJwcm9nX2lzX2dsb2JhbChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzgzLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzg0OlxcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqYXV4ID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWZ1bmNfaW5mb19hdXg7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM4NS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05ODM5PXN0YXRpYyBpbnQgYnRmX2NoZWNrX3N1YnByb2dfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05ODUzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5ODU0OlxcdGlmIChwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWZ1bmNfaW5mb19hdXhbc3VicHJvZ10udW5yZWxpYWJsZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTg1NS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05ODYyLVxcdGlmIChlcnIpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk4NjM6XFx0XFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4W3N1YnByb2ddLnVucmVsaWFibGUgPSB0cnVlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05ODY0LVxcdHJldHVybiBlcnI7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTkzOT1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk1OS1cXHRpZiAoYnBmX3N1YnByb2dfaXNfZ2xvYmFsKGVudiwgc3VicHJvZykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTk2MDpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXggKnN1Yl9hdXggPSBzdWJwcm9nX2F1eChlbnYsIHN1YnByb2cpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05OTYxLVxcdFxcdGNvbnN0IGNoYXIgKnN1Yl9uYW1lID0gYnBmX3N1YnByb2dfbmFtZShlbnYsIHN1YnByb2cpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MzAzPXN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM2My1cXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MzY0OlxcdFxcdGlmIChhdXgtXFx1MDAzZWZ1bmNfaW5mb19hdXhbc3VicHJvZ25vXS5saW5rYWdlICE9IEJURl9GVU5DX1NUQVRJQykge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM2NS1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxiYWNrIGZ1bmN0aW9uIG5vdCBzdGF0aWNcXFxcblxcXCIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTY4PXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBib29sIGluX3NsZWVwYWJsZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY4Ny1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2ODg6XFx0XFx0aWYgKGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4KSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Njg5LVxcdFxcdFxcdHJldCA9IGJ0Zl9wcmVwYXJlX2Z1bmNfYXJncyhlbnYsIDApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5MC1cXHRcXHRcXHRpZiAocmV0IHx8IHN1Yi1cXHUwMDNlYXJnX2NudCAhPSAxIHx8IHN1Yi1cXHUwMDNlYXJnc1swXS5hcmdfdHlwZSAhPSBBUkdfUFRSX1RPX0NUWCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY5MTpcXHRcXHRcXHRcXHRlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlZnVuY19pbmZvX2F1eFswXS51bnJlbGlhYmxlID0gdHJ1ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2OTItXFx0XFx0XFx0XFx0c3ViLVxcdTAwM2VhcmdfY250ID0gMTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTc1NT1zdGF0aWMgaW50IGRvX2NoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTctXFx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXg7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NzU4OlxcdHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eCAqc3ViX2F1eDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTktXFx0aW50IGNvbnRleHQsIGksIGosIHJldCwgbmV3X2NudDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDE5Mz1pbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDI2Ny1cXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjY4OlxcdFxcdGNvbnNlcnZhdGl2ZSA9IGF1eC1cXHUwMDNlZnVuY19pbmZvX2F1eFtzdWJwcm9nXS51bnJlbGlhYmxlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDI2OS1cXHRcXHRpZiAocHJvZ19leHRlbnNpb24pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDU6NTIuNjI0NTUyOTA2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1Njk0MTA5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gQlRGIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpbmZvX2F1eGAgc3RydWN0dXJlIGlzIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgQlRGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyIFR5cGUgRm9ybWF0KSBjaGVja2luZyBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIGFsbG9jYXRpb24gbG9naWMgaXMgbW9zdCBsaWtlbHkgd2l0aGluIHRoZSB2ZXJpZmljYXRpb24gZnVuY3Rpb24sIHNvIEknbGwgY2hlY2sgYGtlcm5lbC9icGYvY2hlY2tfYnRmLmNgLiBMaW5lIDEzMyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIHRoYXQgc291bmRzIGxpa2UgYSBsaWtlbHkgc3BvdCB0byBmaW5kIHRoZSBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBkZXRhaWxzLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhlcmUuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBpbiB0aGUgQlRGIHZhbGlkYXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjU0LjE5Mzk2NzUwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jaGVja19idGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDY1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0c3RydWN0IGJwZl9mdW5jX2luZm9fYXV4ICppbmZvX2F1eCA9IE5VTEw7XFxuIDE0MTpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuIDE0MjpcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmICpidGY7XFxuIDE0MzpcXHRcXHRicGZwdHJfdCB1cmVjb3JkO1xcbiAxNDQ6XFx0XFx0Ym9vbCBzY2FsYXJfcmV0dXJuO1xcbiAxNDU6XFx0XFx0aW50IHJldCA9IC1FTk9NRU07XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdFxcdG5mdW5jcyA9IGF0dHItXFx1MDAzZWZ1bmNfaW5mb19jbnQ7XFxuIDE0ODpcXHRcXHRpZiAoIW5mdW5jcykge1xcbiAxNDk6XFx0XFx0XFx0aWYgKGNoZWNrX2Fibm9ybWFsX3JldHVybihlbnYpKVxcbiAxNTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE1MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTUyOlxcdFxcdH1cXG4gMTUzOlxcdFxcdGlmIChuZnVuY3MgIT0gZW52LVxcdTAwM2VzdWJwcm9nX2NudCkge1xcbiAxNTQ6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJudW1iZXIgb2YgZnVuY3MgaW4gZnVuY19pbmZvIGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHN1YnByb2dzXFxcXG5cXFwiKTtcXG4gMTU1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxNTY6XFx0XFx0fVxcbiAxNTc6XFx0XFxuIDE1ODpcXHRcXHR1cmVjX3NpemUgPSBhdHRyLVxcdTAwM2VmdW5jX2luZm9fcmVjX3NpemU7XFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdHByb2cgPSBlbnYtXFx1MDAzZXByb2c7XFxuIDE2MTpcXHRcXHRidGYgPSBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWJ0ZjtcXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0dXJlY29yZCA9IG1ha2VfYnBmcHRyKGF0dHItXFx1MDAzZWZ1bmNfaW5mbywgdWF0dHIuaXNfa2VybmVsKTtcXG4gMTY0OlxcdFxcbiAxNjU6XFx0XFx0a3JlY29yZCA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlZnVuY19pbmZvO1xcbiAxNjY6XFx0XFx0aW5mb19hdXggPSBremFsbG9jX29ianMoKmluZm9fYXV4LCBuZnVuY3MsXFxuIDE2NzpcXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk4pO1xcbiAxNjg6XFx0XFx0aWYgKCFpbmZvX2F1eClcXG4gMTY5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmZ1bmNzOyBpKyspIHtcXG4gMTcyOlxcdFxcdFxcdC8qIGNoZWNrIGluc25fb2ZmICovXFxuIDE3MzpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHRcXHRpZiAoZW52LVxcdTAwM2VzdWJwcm9nX2luZm9baV0uc3RhcnQgIT0ga3JlY29yZFtpXS5pbnNuX29mZikge1xcbiAxNzY6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJmdW5jX2luZm8gQlRGIHNlY3Rpb24gZG9lc24ndCBtYXRjaCBzdWJwcm9nIGxheW91dCBpbiBCUEYgcHJvZ3JhbVxcXFxuXFxcIik7XFxuIDE3NzpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAxNzg6XFx0XFx0XFx0fVxcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHRcXHQvKiBBbHJlYWR5IGNoZWNrZWQgdHlwZV9pZCAqL1xcbiAxODE6XFx0XFx0XFx0dHlwZSA9IGJ0Zl90eXBlX2J5X2lkKGJ0Ziwga3JlY29yZFtpXS50eXBlX2lkKTtcXG4gMTgyOlxcdFxcdFxcdGluZm9fYXV4W2ldLmxpbmthZ2UgPSBCVEZfSU5GT19WTEVOKHR5cGUtXFx1MDAzZWluZm8pO1xcbiAxODM6XFx0XFx0XFx0LyogQWxyZWFkeSBjaGVja2VkIGZ1bmNfcHJvdG8gKi9cXG4gMTg0OlxcdFxcdFxcdGZ1bmNfcHJvdG8gPSBidGZfdHlwZV9ieV9pZChidGYsIHR5cGUtXFx1MDAzZXR5cGUpO1xcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRcXHRyZXRfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgZnVuY19wcm90by1cXHUwMDNldHlwZSwgTlVMTCk7XFxuIDE4NzpcXHRcXHRcXHRzY2FsYXJfcmV0dXJuID1cXG4gMTg4OlxcdFxcdFxcdFxcdGJ0Zl90eXBlX2lzX3NtYWxsX2ludChyZXRfdHlwZSkgfHwgYnRmX2lzX2FueV9lbnVtKHJldF90eXBlKTtcXG4gMTg5OlxcdFxcdFxcdGlmIChpIFxcdTAwMjZcXHUwMDI2ICFzY2FsYXJfcmV0dXJuIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldLmhhc19sZF9hYnMpIHtcXG4gMTkwOlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiTERfQUJTIGlzIG9ubHkgYWxsb3dlZCBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gJ2ludCcuXFxcXG5cXFwiKTtcXG4gMTkxOlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDE5MjpcXHRcXHRcXHR9XFxuIDE5MzpcXHRcXHRcXHRpZiAoaSBcXHUwMDI2XFx1MDAyNiAhc2NhbGFyX3JldHVybiBcXHUwMDI2XFx1MDAyNiBlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tpXS5oYXNfdGFpbF9jYWxsKSB7XFxuIDE5NDpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInRhaWxfY2FsbCBpcyBvbmx5IGFsbG93ZWQgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuICdpbnQnLlxcXFxuXFxcIik7XFxuIDE5NTpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAxOTY6XFx0XFx0XFx0fVxcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHRcXHRlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tpXS5uYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS1cXHUwMDNlbmFtZV9vZmYpO1xcbiAxOTk6XFx0XFx0XFx0YnBmcHRyX2FkZChcXHUwMDI2dXJlY29yZCwgdXJlY19zaXplKTtcXG4gMjAwOlxcdFxcdH1cXG4gMjAxOlxcdFxcbiAyMDI6XFx0XFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VmdW5jX2luZm9fYXV4ID0gaW5mb19hdXg7XFxuIDIwMzpcXHRcXHRyZXR1cm4gMDtcXG4gMjA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNTo1NC4xOTQwODAyMDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU3OTYzODI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiB2ZXJpZmllciBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgY2hhbmdlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBGaXJzdCwgdGhlIGBpbmZvX2F1eGAgc3RydWN0dXJlLCB3aGljaCBzZWVtcyB0byBiZSBjZW50cmFsIHRvIHRoaXMsIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpzYC4gVGhpcyBpcyBnb29kOyBpdCBndWFyYW50ZWVzIHRoZSBtZW1vcnkgaXMgemVyb2VkIG91dCBmcm9tIHRoZSBzdGFydCwgd2hpY2ggaXMgYSBnb29kIGJhc2VsaW5lIHRvIGF2b2lkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCByZXZvbHZlcyBhcm91bmQgaG93IHRoZSB2ZXJpZmllciB0cmFja3Mgc3VicHJvZ3JhbSBjYWxscyBhbmQgdmVyaWZpY2F0aW9uIHN0YXR1cyBpbiBib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cy4gUHJldmlvdXNseSwgd2UgaGFkIHRoZXNlIGFzIHNpbmdsZSBib29sZWFuIGZsYWdzOiBgY2FsbGVkYCBhbmQgYHZlcmlmaWVkYC4gTm93LCBpdCdzIGJlZW4gY2hhbmdlZCB0byBgYm9vbCBjYWxsZWRbMl07YCBhbmQgYGJvb2wgdmVyaWZpZWRbMl07YC4gVGhpcyBpcyBpbmRleGVkIGJ5IGBpbl9zbGVlcGFibGVgLCB3aGljaCBpcyBlaXRoZXIgMCBvciAxLCByZXByZXNlbnRpbmcgdGhlc2UgdHdvIGNvbnRleHRzLiBNYWtlcyBzZW5zZTsgdGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHdheSB0byBkaWZmZXJlbnRpYXRlIHRoZSBjYWxsL3ZlcmlmaWNhdGlvbiBzdGF0ZSBiZXR3ZWVuIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYGNoZWNrX2Z1bmNfY2FsbCgpYCwgdGhlIGBjYWxsZWRgIGZsYWcgaXMgYmVpbmcgc2V0OiBgc3ViX2F1eC1cdTAwM2VjYWxsZWRbaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KV0gPSB0cnVlO2AuIGBpbl9zbGVlcGFibGVfY29udGV4dChlbnYpYCByZXR1cm5zIGEgYm9vbCAtIHdoaWNoIEkgcXVpY2tseSB2ZXJpZmllZCBjYW4gb25seSByZXR1cm4gMCBvciAxLiBTbyB1c2luZyB0aGlzIGJvb2xlYW4gYXMgYW4gYXJyYXkgaW5kZXggaXMgc2FmZS5cblxuVGhlbiwgaW4gYGRvX2NoZWNrX3N1YnByb2dzKClgLCB3ZSBpdGVyYXRlIHRocm91Z2ggc3VicHJvZ3JhbXMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIsIGZvciBib3RoIGNvbnRleHRzICgwIGFuZCAxKS4gSWYgYSBzdWJwcm9ncmFtIGhhcyBiZWVuIGNhbGxlZCBpbiBhIHBhcnRpY3VsYXIgY29udGV4dCAqYnV0KiBub3QgeWV0IHZlcmlmaWVkIGZvciB0aGF0IGNvbnRleHQsIHdlIGNhbGwgYGRvX2NoZWNrX2NvbW1vbigpYCwgYW5kIHRoZW4gc2V0IGB2ZXJpZmllZFtjb250ZXh0XSA9IHRydWVgLlxuXG5JbiBgZG9fY2hlY2tfbWFpbigpYCwgYGRvX2NoZWNrX2NvbW1vbigpYCBpcyBjYWxsZWQgd2l0aCBgZW52LVx1MDAzZXByb2ctXHUwMDNlc2xlZXBhYmxlYCBhcyB0aGUgY29udGV4dC5cblxuSSBzZWUgYGRvX2NoZWNrX2NvbW1vbigpYCB1cGRhdGluZyBgc3RhdGUtXHUwMDNlaW5fc2xlZXBhYmxlYCwgYW5kIGFsc28gdGhlIGBpbnNuc190b3RhbGAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBhcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB3aXRoIHRoaXMgY2hhbmdlPyBJJ3ZlIGdvdCB0byBiZSBzdXJlLiBJJ3ZlIGJyb2tlbiBkb3duIG15IGNoZWNrOlxuXG4xLiAgYGluZm9fYXV4YCBpcyBga3phbGxvY19vYmpzYCwgd2hpY2ggbWVhbnMgdGhhdCBhbGwgb2YgYGNhbGxlZFswXWAsIGBjYWxsZWRbMV1gLCBgdmVyaWZpZWRbMF1gLCBhbmQgYHZlcmlmaWVkWzFdYCBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhhdCdzIGEgaHVnZSByZWxpZWYuXG4yLiAgSSBkaWQgYSBxdWljayBzY2FuIC0gTm8gZGlyZWN0IGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBldGMuKSB3aXRob3V0IGluaXRpYWxpemF0aW9uLlxuMy4gIE5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGRlcGVuZGluZyBvbiAqdW5pbml0aWFsaXplZCogZGF0YS5cbjQuICBObyBjaGFuZ2VzIGluIGJ1ZmZlciBzaXppbmcgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBsZWFrcy4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHJlYWRzLlxuNS4gIEFsbCB2YXJpYWJsZXMgdXNlZCB3aXRoaW4gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyAoYGNvbnRleHRgLCBgaWAsIGBqYCwgYHJldGAsIGBuZXdfY250YCwgYG9sZF9pbnNuc190b3RhbGApIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzYWdlLlxuXG5TbywgKmFzIGZhciBhcyBJIGNhbiBzZWUqLCB0aGVyZSBhcmUgbm8gb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaGVyZS4gVGhlIHBhdGNoIHNlZW1zIHNvbGlkIG9uIHRoYXQgZnJvbnQuXG5cbkknbGwgZG8gYSBxdWljayBgZ3JlcGAgZm9yIGBjYWxsZWRgIGFuZCBgdmVyaWZpZWRgIHdpdGhpbiBga2VybmVsL2JwZi9gIHRvIG1ha2UgZG91Ymx5IHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEl0J3MgdG9vIGltcG9ydGFudCB0byBiZSBjb21wbGFjZW50LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHNlYXJjaCByZXN1bHRzIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGVyZSBhcmUgbm8gb3RoZXIgcGxhY2VzIHRoZXNlIHZhcmlhYmxlcyBhcmUgdXNlZCwgYW5kIHRoYXQgdGhleSdyZSBiZWluZyB1c2VkIHNhZmVseSBhbmQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgyNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA1OjU5Ljc3MzcyMTczMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc1MzkyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGNhbGxlZHx2ZXJpZmllZClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDYzOSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTkzMj1zdGF0aWMgdm9pZCAqZmRfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MzYtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjkzNzovKiBvbmx5IGNhbGxlZCBmcm9tIHN5c2NhbGwgKi9cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTM4LWludCBicGZfZmRfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyICp2YWx1ZSlcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05NTYtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjk1NzovKiBvbmx5IGNhbGxlZCBmcm9tIHN5c2NhbGwgKi9cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTU4LWludCBicGZfZmRfYXJyYXlfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM9MjM3PXZvaWQgYnBmX2ZtdF9zdGFja19tYXNrKGNoYXIgKmJ1Ziwgc3NpemVfdCBidWZfc3osIHU2NCBzdGFja19tYXNrKVxcbi0tXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy0yNTUtXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYzoyNTY6LyogRm9yIGdpdmVuIHZlcmlmaWVyIHN0YXRlIGJhY2t0cmFja19pbnNuKCkgaXMgY2FsbGVkIGZyb20gdGhlIGxhc3QgaW5zbiB0b1xcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtMjU3LSAqIHRoZSBmaXJzdCBpbnNuLiBJdHMgcHVycG9zZSBpcyB0byBjb21wdXRlIGEgYml0bWFzayBvZiByZWdpc3RlcnMgYW5kXFxuLS1cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jPTY2OT12b2lkIGJwZl9tYXJrX2FsbF9zY2FsYXJzX3ByZWNpc2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNzI4LSAqIE9uZSBpbXBvcnRhbnQgYW5kIHN1YnRsZSBhc3BlY3QgaXMgdGhhdCBwcmVjaXNlIG1hcmtzICpkbyBub3QgbWF0dGVyKiBpblxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6NzI5OiAqIHRoZSBjdXJyZW50bHkgdmVyaWZpZWQgc3RhdGUgKGN1cnJlbnQgc3RhdGUpLiBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZFxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNzMwLSAqIHdoeSB0aGlzIGlzIHRoZSBjYXNlLlxcbi0tXFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jPTEyNT1CUEZfQ0FMTF80KGJwZl9pbm9kZV9zdG9yYWdlX2dldCwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCBzdHJ1Y3QgaW5vZGUgKiwgaW5vZGUsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbm9kZV9zdG9yYWdlLmMtMTQ1LVxcbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYzoxNDY6XFx0LyogVGhpcyBoZWxwZXIgbXVzdCBvbmx5IGNhbGxlZCBmcm9tIHdoZXJlIHRoZSBpbm9kZSBpcyBndWFyYW50ZWVkXFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jLTE0Ny1cXHQgKiB0byBoYXZlIGEgcmVmY291bnQgYW5kIGNhbm5vdCBiZSBmcmVlZC5cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYz0xNjA9QlBGX0NBTExfMihicGZfaW5vZGVfc3RvcmFnZV9kZWxldGUsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbm9kZV9zdG9yYWdlLmMtMTY2LVxcbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYzoxNjc6XFx0LyogVGhpcyBoZWxwZXIgbXVzdCBvbmx5IGNhbGxlZCBmcm9tIHdoZXJlIHRoZSBpbm9kZSBpcyBndWFyYW50ZWVkXFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jLTE2OC1cXHQgKiB0byBoYXZlIGEgcmVmY291bnQgYW5kIGNhbm5vdCBiZSBmcmVlZC5cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYz0yNTE9dm9pZCBicGZfaW5zbl9hcnJheV9hZGp1c3RfYWZ0ZXJfcmVtb3ZlKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBvZmYsIHUzMiBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtMjY4LS8qXFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jOjI2OTogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBKSVRzLiBUaGUgaW1hZ2UgaXMgdGhlIHJlYWwgcHJvZ3JhbVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0yNzAtICogaW1hZ2UsIHRoZSBvZmZzZXRzIGFycmF5IHNldCB1cCB0aGUgeGxhdGVkIC1cXHUwMDNlIGppdHRlZCBtYXBwaW5nLlxcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jPTkzPXN0YXRpYyBzc2l6ZV90IGJwZl9zZXFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMjA4LVxcdH1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6MjA5OlxcdC8qIGJwZiBwcm9ncmFtIGNhbGxlZCBpZiAhcCAqL1xcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0yMTAtXFx0c2VxLVxcdTAwM2VvcC1cXHUwMDNlc3RvcChzZXEsIHApO1xcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jPTcyNz1CUEZfQ0FMTF80KGJwZl9sb29wLCB1MzIsIG5yX2xvb3BzLCB2b2lkICosIGNhbGxiYWNrX2ZuLCB2b2lkICosIGNhbGxiYWNrX2N0eCxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03MzMtXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjczNDpcXHQvKiBOb3RlOiB0aGVzZSBzYWZldHkgY2hlY2tzIGFyZSBhbHNvIHZlcmlmaWVkIHdoZW4gYnBmX2xvb3BcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzM1LVxcdCAqIGlzIGlubGluZWQsIGJlIGNhcmVmdWwgdG8gbW9kaWZ5IHRoaXMgY29kZSBpbiBzeW5jLiBTZWVcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz0zMDA9aW50IGJwZl9zZWxlbV91bmxpbmsoc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTM0Ni0gKiBVbmxpbmsgYW4gc2VsZW0gZnJvbSBtYXAgYW5kIGxvY2FsIHN0b3JhZ2Ugd2l0aCBsb2NrbGVzcyBmYWxsYmFjayBpZiBjYWxsZXJzXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjM0NzogKiBhcmUgcmFjaW5nIG9yIHJxc3BpbmxvY2sgcmV0dXJucyBlcnJvci4gSXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5XFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTM0OC0gKiBicGZfbG9jYWxfc3RvcmFnZV9kZXN0cm95KCkgb3IgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2ZyZWUoKS5cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jPTIyOD1icGZfbHNtX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0yODctXFxua2VybmVsL2JwZi9icGZfbHNtLmM6Mjg4Oi8qIFRoZSBzZXQgb2YgaG9va3Mgd2hpY2ggYXJlIGNhbGxlZCB3aXRob3V0IHBhZ2VmYXVsdHMgZGlzYWJsZWQgYW5kIGFyZSBhbGxvd2VkXFxua2VybmVsL2JwZi9icGZfbHNtLmMtMjg5LSAqIHRvIFxcXCJzbGVlcFxcXCIgYW5kIHRodXMgY2FuIGJlIHVzZWQgZm9yIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NzI2PXN0YXRpYyBsb25nIGJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTQxLVxcdC8qIEVycm9yIGR1cmluZyBzdF9vcHMtXFx1MDAzZXJlZygpLiBDYW4gaGFwcGVuIGlmIHRoaXMgc3RydWN0X29wcyBuZWVkcyB0byBiZVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo5NDI6XFx0ICogdmVyaWZpZWQgYXMgYSB3aG9sZSwgYWZ0ZXIgYWxsIGluaXRfbWVtYmVyKCkgY2FsbHMuIENhbiBhbHNvIGhhcHBlbiBpZlxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05NDMtXFx0ICogdGhlcmUgd2FzIGEgcmFjZSBpbiByZWdpc3RlcmluZyB0aGUgc3RydWN0X29wcyAodW5kZXIgdGhlIHNhbWUgbmFtZSkgdG9cXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xMDI3PXN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA0Ni1cXHQgKiBzZXRzb2Nrb3B0KFRDUF9DT05HRVNUSU9OLCBcXFwidGNwX2NjX3lcXFwiKS5cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA0NzpcXHQgKiBEdXJpbmcgdGhlIHN3aXRjaCwgIGJwZl9zdHJ1Y3Rfb3BzX3B1dCh0Y3BfY2NfeCkgaXMgY2FsbGVkXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNDgtXFx0ICogYW5kIGl0cyByZWZjb3VudCBtYXkgcmVhY2ggMCB3aGljaCB0aGVuIGZyZWUgaXRzXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTUyMj12b2lkIGJwZl9wcm9nX2Rpc2Fzc29jX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1NDAtICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBzdHJ1Y3Rfb3BzIHN0cnVjdCAoaS5lLiwga2RhdGEpIGFzc29jaWF0ZWQgd2l0aCBhXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE1NDE6ICogcHJvZ3JhbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIEJQRiBwcm9ncmFtIGNvbnRleHQgKGUuZy4sIGluIGEga2Z1bmMpLlxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTQyLSAqXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYz0xOTM9QlBGX0NBTExfMihicGZfdGFza19zdG9yYWdlX2RlbGV0ZSwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKixcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3Rhc2tfc3RvcmFnZS5jLTE5OS1cXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYzoyMDA6XFx0LyogVGhpcyBoZWxwZXIgbXVzdCBvbmx5IGJlIGNhbGxlZCBmcm9tIHBsYWNlcyB3aGVyZSB0aGUgbGlmZXRpbWUgb2YgdGhlIHRhc2tcXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYy0yMDEtXFx0ICogaXMgZ3VhcmFudGVlZC4gRWl0aGVyIGJ5IGJlaW5nIHJlZmNvdW50ZWQgb3IgYnkgYmVpbmcgcHJvdGVjdGVkXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTE3ODI9c3RhdGljIHZvaWQgYnRmX2ZyZWVfaWQoc3RydWN0IGJ0ZiAqYnRmKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0xNzk5LVxcdFxcdCAqIENsZWFyIHRoZSBpZCBoZXJlIHRvIG1ha2UgdGhpcyBmdW5jdGlvbiBpZGVtcG90ZW50LCBzaW5jZSBpdCB3aWxsIGdldFxcbmtlcm5lbC9icGYvYnRmLmM6MTgwMDpcXHRcXHQgKiBjYWxsZWQgYSBjb3VwbGUgb2YgdGltZXMgZm9yIG1vZHVsZSBCVEZzOiBvbiBtb2R1bGUgdW5sb2FkLCBhbmQgdGhlblxcbmtlcm5lbC9icGYvYnRmLmMtMTgwMS1cXHRcXHQgKiB0aGUgZmluYWwgYnRmX3B1dCgpLiBidGZfYWxsb2NfaWQoKSBzdGFydHMgSURzIHdpdGggMSwgc28gd2UgY2FuIHVzZVxcbi0tXFxua2VybmVsL2JwZi9idGYuYz0zOTc1PXN0YXRpYyBpbnQgYnRmX3BhcnNlX2twdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnRmX2ZpZWxkICpmaWVsZCxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtMzk5My1cXHRpZiAoaWQgPT0gLUVOT0VOVCkge1xcbmtlcm5lbC9icGYvYnRmLmM6Mzk5NDpcXHRcXHQvKiBidGZfcGFyc2Vfa3B0ciBzaG91bGQgb25seSBiZSBjYWxsZWQgdy8gYnRmID0gcHJvZ3JhbSBCVEYgKi9cXG5rZXJuZWwvYnBmL2J0Zi5jLTM5OTUtXFx0XFx0V0FSTl9PTl9PTkNFKGJ0Zl9pc19rZXJuZWwoYnRmKSk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTQwNDAtXFxua2VybmVsL2JwZi9idGYuYzo0MDQxOlxcdFxcdC8qIFdlIGFscmVhZHkgdmVyaWZpZWQgZHRvcl9mdW5jIHRvIGJlIGJ0Zl90eXBlX2lzX2Z1bmNcXG5rZXJuZWwvYnBmL2J0Zi5jLTQwNDItXFx0XFx0ICogaW4gcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzLlxcbi0tXFxua2VybmVsL2JwZi9idGYuYz03OTU2PXN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNzk4Mi1cXHRcXHQgKiByZXR1cm5zIHRvIHRoZSBrZXJuZWwsIHdoaWNoIGhhcyBubyBhcmVuYSB0byBjYXN0IHRoZSBhZGRyZXNzXFxua2VybmVsL2JwZi9idGYuYzo3OTgzOlxcdFxcdCAqIGJhY2sgaW50by4gQSBsb2NhbCBmdW5jdGlvbiBpcyB2ZXJpZmllZCBpbmxpbmUsIHNvIGl0cyBjYWxsZXJcXG5rZXJuZWwvYnBmL2J0Zi5jLTc5ODQtXFx0XFx0ICogcmVjZWl2ZXMgdGhlIHJlYWwgcmVnaXN0ZXIgc3RhdGUgYW5kIGFueSBtZW1iZXIgaXMgZmluZS5cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODUyMD1zdGF0aWMgaW50IGJ0Zl9tb2R1bGVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgb3AsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTg2MTQtXFx0XFx0XFx0ICogYnRmX3RyeV9nZXRfbW9kdWxlKCkgb24gc3VjaCBCVEZzIHdpbGwgZmFpbC4gVGhpcyBtYXlcXG5rZXJuZWwvYnBmL2J0Zi5jOjg2MTU6XFx0XFx0XFx0ICogYmUgY2FsbGVkIGFnYWluIG9uIGJ0Zl9wdXQoKSwgYnV0IGl0J3Mgb2sgdG8gZG8gc28uXFxua2VybmVsL2JwZi9idGYuYy04NjE2LVxcdFxcdFxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz04OTE5PXN0YXRpYyBpbnQgYnRmX3BvcHVsYXRlX2tmdW5jX3NldChzdHJ1Y3QgYnRmICpidGYsIGVudW0gYnRmX2tmdW5jX2hvb2sgaG9vayxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODk2NS1cXHRzZXQgPSB0YWItXFx1MDAzZXNldHNbaG9va107XFxua2VybmVsL2JwZi9idGYuYzo4OTY2OlxcdC8qIFdhcm4gd2hlbiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0IGlzIGNhbGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgaG9va1xcbmtlcm5lbC9icGYvYnRmLmMtODk2Ny1cXHQgKiBmb3IgbW9kdWxlIHNldHMuXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jPTY4PXN0YXRpYyB2b2lkIG1hcmtfc3VicHJvZ19taWdodF90aHJvdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmKVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYy03Ny0gKiAndycgaXMgYSBjYWxsZWUgZW50cnkgcG9pbnQuXFxua2VybmVsL2JwZi9jZmcuYzo3ODogKiBFdmVudHVhbGx5IHRoaXMgZnVuY3Rpb24gd291bGQgYmUgY2FsbGVkIHdoZW4gZW52LVxcdTAwM2VjZmcuaW5zbl9zdGF0ZVt3XSA9PSBFWFBMT1JFRC5cXG5rZXJuZWwvYnBmL2NmZy5jLTc5LSAqIFJlbHkgb24gREZTIHRyYXZlcnNhbCBvcmRlciBhbmQgYWJzZW5jZSBvZiByZWN1cnNpdmUgY2FsbHMgdG8gZ3VhcmFudGVlIHRoYXRcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmM9NDUxPXN0YXRpYyBpbnQgdmlzaXRfaW5zbihpbnQgdCwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNDg1LVxcdFxcdC8qIEZvciBmdW5jdGlvbnMgdGhhdCBpbnZva2UgY2FsbGJhY2tzIGl0IGlzIG5vdCBrbm93biBob3cgbWFueSB0aW1lc1xcbmtlcm5lbC9icGYvY2ZnLmM6NDg2OlxcdFxcdCAqIGNhbGxiYWNrIHdvdWxkIGJlIGNhbGxlZC4gVmVyaWZpZXIgbW9kZWxzIGNhbGxiYWNrIGNhbGxpbmcgZnVuY3Rpb25zXFxua2VybmVsL2JwZi9jZmcuYy00ODctXFx0XFx0ICogYnkgcmVwZWF0ZWRseSB2aXNpdGluZyBjYWxsYmFjayBib2RpZXMgYW5kIHJldHVybmluZyB0byBvcmlnaW4gY2FsbFxcbi0tXFxua2VybmVsL2JwZi9jZmcuYy01MDMtXFx0XFx0XFx0cmV0ID0gYnBmX2dldF9oZWxwZXJfcHJvdG8oZW52LCBpbnNuLVxcdTAwM2VpbW0sIFxcdTAwMjZmcCk7XFxua2VybmVsL2JwZi9jZmcuYzo1MDQ6XFx0XFx0XFx0LyogSWYgY2FsbGVkIGluIGEgbm9uLXNsZWVwYWJsZSBjb250ZXh0IHByb2dyYW0gd2lsbCBiZVxcbmtlcm5lbC9icGYvY2ZnLmMtNTA1LVxcdFxcdFxcdCAqIHJlamVjdGVkIGFueXdheSwgc28gd2Ugc2hvdWxkIGVuZCB1cCB3aXRoIHByZWNpc2VcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNTM2LVxcdFxcdFxcdH1cXG5rZXJuZWwvYnBmL2NmZy5jOjUzNzpcXHRcXHRcXHQvKiBTYW1lIGFzIGhlbHBlcnMsIGlmIGNhbGxlZCBpbiBhIG5vbi1zbGVlcGFibGUgY29udGV4dFxcbmtlcm5lbC9icGYvY2ZnLmMtNTM4LVxcdFxcdFxcdCAqIHByb2dyYW0gd2lsbCBiZSByZWplY3RlZCBhbnl3YXksIHNvIHdlIHNob3VsZCBlbmQgdXBcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDMtICogRXhhY3RseSBvbmUgb2YgQHByb2cgb3IgQGxpbmsgY2FuIGJlIG5vbi1udWxsLlxcbmtlcm5lbC9icGYvY2dyb3VwLmM6ODA0OiAqIE11c3QgYmUgY2FsbGVkIHdpdGggY2dyb3VwX211dGV4IGhlbGQuXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwMjk9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNTAtICpcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNTE6ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC5cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNTItICovXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExNTY9c3RhdGljIHZvaWQgcHVyZ2VfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE5NC0gKiBBdCBtb3N0IG9uZSBvZiBAcHJvZyBvciBAbGluayBjYW4gYmUgbm9uLU5VTEwuXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTk1OiAqIE11c3QgYmUgY2FsbGVkIHdpdGggY2dyb3VwX211dGV4IGhlbGQuXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTk2LSAqL1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMjYwPXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9kZXRhY2goc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjcwLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTI3MTovKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNncm91cF9tdXRleCBoZWxkIHRvIGF2b2lkIHJhY2VzLiAqL1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI3Mi1zdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9xdWVyeShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MjIzND1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdF9rZXJuKHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMjU0LVxcdCAqIEhlcmUgd2UgYWx3YXlzIHBhc3MgdGhlIGRhdGEgYW5kIG1lbXNldCgpIHNob3VsZFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjI1NTpcXHQgKiBiZSBjYWxsZWQgaWYgdGhhdCBkYXRhIHNob3VsZG4ndCBiZSBcXFwiZXhwb3J0ZWRcXFwiLlxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjI1Ni1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0zMC0gKlxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzozMTogKiBOb3RlOiB0aGUgaXRlcl9wcm9nIGlzIGNhbGxlZCB3aXRoIGNncm91cF9tdXRleCBoZWxkLlxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0zMi0gKlxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYz0zMT1zdGF0aWMgaW50IHByZXBhcmVfYnRmX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMTE2LVxcdFxcdGlmICh1bmxpa2VseSghZnVuY19wcm90byB8fCAhYnRmX3R5cGVfaXNfZnVuY19wcm90byhmdW5jX3Byb3RvKSkpXFxua2VybmVsL2JwZi9jaGVja19idGYuYzoxMTc6XFx0XFx0XFx0LyogYnRmX2Z1bmNfY2hlY2soKSBhbHJlYWR5IHZlcmlmaWVkIGl0IGR1cmluZyBCVEYgbG9hZCAqL1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMTE4LVxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0xMjQzPWludCBicGZfaml0X2JpbmFyeV9wYWNrX2ZpbmFsaXplKHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqcm9faGVhZGVyLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTI1OC1cXG5rZXJuZWwvYnBmL2NvcmUuYzoxMjU5Oi8qIGJwZl9qaXRfYmluYXJ5X3BhY2tfZnJlZSBpcyBjYWxsZWQgaW4gdHdvIGRpZmZlcmVudCBzY2VuYXJpb3M6XFxua2VybmVsL2JwZi9jb3JlLmMtMTI2MC0gKiAgIDEpIHdoZW4gdGhlIHByb2dyYW0gaXMgZnJlZWQgYWZ0ZXI7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yOTk3PWludCBicGZfcHJvZ19hcnJheV9jb3B5X2luZm8oc3RydWN0IGJwZl9wcm9nX2FycmF5ICphcnJheSxcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTMwMTEtXFxua2VybmVsL2JwZi9jb3JlLmM6MzAxMjpcXHQvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB1bmRlciB0cmFjZS9icGZfdHJhY2UuYzogYnBmX2V2ZW50X211dGV4ICovXFxua2VybmVsL2JwZi9jb3JlLmMtMzAxMy1cXHRyZXR1cm4gYnBmX3Byb2dfYXJyYXlfY29weV9jb3JlKGFycmF5LCBwcm9nX2lkcywgcmVxdWVzdF9jbnQpID8gLUVOT1NQQ1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzEyMz1CUEZfQ0FMTF8wKGJwZl91c2VyX3JuZF91MzIpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMTI2LVxcdCAqIG9mIHRoZSByZWdpc3RlcnMgcGFzc2VkIGludG8gdGhpcyBmdW5jdGlvbiwgdGhlbiBub3RlIHRoYXRcXG5rZXJuZWwvYnBmL2NvcmUuYzozMTI3OlxcdCAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gbmF0aXZlIGVCUEYgYW5kIGNsYXNzaWMtdG8tZUJQRlxcbmtlcm5lbC9icGYvY29yZS5jLTMxMjgtXFx0ICogdHJhbnNmb3JtYXRpb25zLiBSZWdpc3RlciBhc3NpZ25tZW50cyBmcm9tIGJvdGggc2lkZXMgYXJlXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTM3OD1zdGF0aWMgdm9pZCBicV94bWl0X2FsbChzdHJ1Y3QgeGRwX2Rldl9idWxrX3F1ZXVlICpicSwgdTMyIGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYy00MjItXFxua2VybmVsL2JwZi9kZXZtYXAuYzo0MjM6LyogX19kZXZfZmx1c2ggaXMgY2FsbGVkIGZyb20geGRwX2RvX2ZsdXNoKCkgd2hpY2ggX211c3RfIGJlIHNpZ25hbGxlZCBmcm9tIHRoZVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtNDI0LSAqIGRyaXZlciBiZWZvcmUgcmV0dXJuaW5nIGZyb20gaXRzIG5hcGktXFx1MDAzZXBvbGwoKSByb3V0aW5lLiBTZWUgdGhlIGNvbW1lbnQgYWJvdmVcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9OTQ5PXN0YXRpYyBsb25nIF9fZGV2X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTk2My1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjk2NDpcXHQvKiBhbHJlYWR5IHZlcmlmaWVkIHZhbHVlX3NpemUgXFx1MDAzYz0gc2l6ZW9mIHZhbCAqL1xcbmtlcm5lbC9icGYvZGV2bWFwLmMtOTY1LVxcdG1lbWNweShcXHUwMDI2dmFsLCB2YWx1ZSwgbWFwLVxcdTAwM2V2YWx1ZV9zaXplKTtcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9OTk4PXN0YXRpYyBsb25nIF9fZGV2X21hcF9oYXNoX3VwZGF0ZV9lbGVtKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtMTAwNy1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjEwMDg6XFx0LyogYWxyZWFkeSB2ZXJpZmllZCB2YWx1ZV9zaXplIFxcdTAwM2M9IHNpemVvZiB2YWwgKi9cXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTEwMDktXFx0bWVtY3B5KFxcdTAwMjZ2YWwsIHZhbHVlLCBtYXAtXFx1MDAzZXZhbHVlX3NpemUpO1xcbi0tXFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmMtMTMtICogdGhlcmUgaXMgYXZhaWxhYmxlIHJvb20gaW4gdGhlIGRpc3BhdGNoZXIgYSBkaXJlY3QgY2FsbCB0byB0aGUgQlBGXFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM6MTQ6ICogcHJvZ3JhbSB3aWxsIGJlIGdlbmVyYXRlZC4gQWxsIGNhbGxzIHRvIHRoZSBCUEYgcHJvZ3JhbXMgY2FsbGVkIHZpYVxcbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jLTE1LSAqIHRoZSBkaXNwYXRjaGVyIHdpbGwgdGhlbiBiZSBhIGRpcmVjdCBjYWxsLCBpbnN0ZWFkIG9mIGFuXFxuLS1cXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmM9OT1zdHJ1Y3QgZG1hYnVmX2l0ZXJfcHJpdiB7XFxuLS1cXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmMtMTItXFx0ICogcHJldmVudCBkZXN0cnVjdGlvbiBiZXR3ZWVuIHN0b3Avc3RhcnQuIElmIHJlYWRpbmcgaXMgbm90IHJlc3VtZWQgYW5kXFxua2VybmVsL2JwZi9kbWFidWZfaXRlci5jOjEzOlxcdCAqIHN0YXJ0IGlzIG5ldmVyIGNhbGxlZCBhZ2FpbiwgdGhlbiBkbWFidWZfaXRlcl9zZXFfZmluaSBkcm9wcyB0aGVcXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmMtMTQtXFx0ICogcmVmZXJlbmNlIHdoZW4gdGhlIGl0ZXJhdG9yIGlzIHJlbGVhc2VkLlxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjczPXN0YXRpYyB2b2lkIGh0YWJfZnJlZV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTUtICogYnBmX2xydV9saXN0LmMgbG9naWMuIEZvciBleGFtcGxlLCBjZXJ0YWluIGNvZGUgcGF0aCBvZlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NjogKiBicGZfbHJ1X3BvcF9mcmVlKCksIHdoaWNoIGlzIGNhbGxlZCBieSBmdW5jdGlvbiBwcmVhbGxvY19scnVfcG9wKCksXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk3LSAqIHdpbGwgYWNxdWlyZSBscnVfbG9jayBmaXJzdCBmb2xsb3dlZCBieSBhY3F1aXJpbmcgYnVja2V0X2xvY2suXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz02ODk9c3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqc2VsZWN0X2J1Y2tldChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHUzMiBoYXNoKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNjkzLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjY5NDovKiB0aGlzIGxvb2t1cCBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQgd2l0aCBidWNrZXQgbG9jayB0YWtlbiAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTY5NS1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTcwNy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo3MDg6LyogY2FuIGJlIGNhbGxlZCB3aXRob3V0IGJ1Y2tldCBsb2NrLiBpdCB3aWxsIHJlcGVhdCB0aGUgbG9vcCBpblxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTcwOS0gKiB0aGUgdW5saWtlbHkgZXZlbnQgd2hlbiBlbGVtZW50cyBtb3ZlZCBmcm9tIG9uZSBidWNrZXQgaW50byBhbm90aGVyXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz04NDA9c3RhdGljIHZvaWQgY2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtODU4LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjg1OTovKiBJdCBpcyBjYWxsZWQgZnJvbSB0aGUgYnBmX2xydV9saXN0IHdoZW4gdGhlIExSVSBuZWVkcyB0byBkZWxldGVcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04NjAtICogb2xkZXIgZWxlbWVudHMgZnJvbSB0aGUgaHRhYi5cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTE1NzE9c3RhdGljIHZvaWQgZGVsZXRlX2FsbF9lbGVtZW50cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNTc0LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjE1NzU6XFx0LyogSXQncyBjYWxsZWQgZnJvbSBhIHdvcmtlciB0aHJlYWQgYW5kIG1pZ3JhdGlvbiBoYXMgYmVlbiBkaXNhYmxlZCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNTc2LVxcdCAqIHRoZXJlZm9yZSwgaXQgaXMgT0sgdG8gaW52b2tlIGJwZl9tZW1fY2FjaGVfZnJlZSgpIGRpcmVjdGx5Llxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MTYyNj1zdGF0aWMgdm9pZCBodGFiX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNjMwLVxcdC8qIGJwZl9mcmVlX3VzZWRfbWFwcygpIG9yIGNsb3NlKG1hcF9mZCkgd2lsbCB0cmlnZ2VyIHRoaXMgbWFwX2ZyZWUgY2FsbGJhY2suXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTYzMTpcXHQgKiBicGZfZnJlZV91c2VkX21hcHMoKSBpcyBjYWxsZWQgYWZ0ZXIgYnBmIHByb2cgaXMgbm8gbG9uZ2VyIGV4ZWN1dGluZy5cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNjMyLVxcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gc3luY2hyb25pemVfcmN1KCkgaGVyZSB0byBwcm90ZWN0IG1hcCBlbGVtZW50cy5cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI2MTA9c3RhdGljIHZvaWQgZmRfaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjYzMC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNjMxOi8qIG9ubHkgY2FsbGVkIGZyb20gc3lzY2FsbCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI2MzItaW50IGJwZl9mZF9odGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiAqdmFsdWUpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjUwLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI2NTE6LyogT25seSBjYWxsZWQgZnJvbSBzeXNjYWxsICovXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY1Mi1pbnQgYnBmX2ZkX2h0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTc5Nz12b2lkIGJwZl9icHJpbnRmX2NsZWFudXAoc3RydWN0IGJwZl9icHJpbnRmX2RhdGEgKmRhdGEpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy04MTUtICogSW4gYXJndW1lbnQgcHJlcGFyYXRpb24gbW9kZSwgaWYgMCBpcyByZXR1cm5lZCwgc2FmZSB0ZW1wb3JhcnkgYnVmZmVycyBhcmVcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo4MTY6ICogYWxsb2NhdGVkIGFuZCBicGZfYnByaW50Zl9jbGVhbnVwIHNob3VsZCBiZSBjYWxsZWQgdG8gZnJlZSB0aGVtIGFmdGVyIHVzZS5cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy04MTctICovXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xMzE3PXN0YXRpYyBpbnQgX19icGZfYXN5bmNfaW5pdChzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4gKmFzeW5jLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgZmxhZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xMzc3LVxcdCAqIHdoZW4gdGhlcmUgYXJlIGNvbmN1cnJlbnQgdXJlZiByZWxlYXNlIGFuZCBicGYgdGltZXIgaW5pdCwgZWl0aGVyXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MTM3ODpcXHQgKiBicGZfdGltZXJfY2FuY2VsX2FuZF9mcmVlKCkgY2FsbGVkIGJ5IHVyZWYgcmVsZWFzZSByZWFkcyBhIG5vLU5VTExcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xMzc5LVxcdCAqIHRpbWVyIG9yIGF0b21pYzY0X3JlYWQoKSBiZWxvdyByZXR1cm5zIGEgemVybyB1c2VyY250Llxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MTY4Mz1zdGF0aWMgdm9pZCBicGZfYXN5bmNfY2FuY2VsX2FuZF9mcmVlKHN0cnVjdCBicGZfYXN5bmNfa2VybiAqYXN5bmMpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzEzLS8qXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MTcxNDogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBtYXBfZGVsZXRlL3VwZGF0ZV9lbGVtIGZvciBpbmRpdmlkdWFsIGVsZW1lbnQgYW5kXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTcxNS0gKiBieSBvcHMtXFx1MDAzZW1hcF9yZWxlYXNlX3VyZWYgd2hlbiB0aGUgdXNlciBzcGFjZSByZWZlcmVuY2UgdG8gYSBtYXAgcmVhY2hlcyB6ZXJvLlxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MTcxNz12b2lkIGJwZl90aW1lcl9jYW5jZWxfYW5kX2ZyZWUodm9pZCAqdmFsKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTcyMi0vKlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjE3MjM6ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgbWFwX2RlbGV0ZS91cGRhdGVfZWxlbSBmb3IgaW5kaXZpZHVhbCBlbGVtZW50IGFuZFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTE3MjQtICogYnkgb3BzLVxcdTAwM2VtYXBfcmVsZWFzZV91cmVmIHdoZW4gdGhlIHVzZXIgc3BhY2UgcmVmZXJlbmNlIHRvIGEgbWFwIHJlYWNoZXMgemVyby5cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTIyNDc9dm9pZCBicGZfbGlzdF9oZWFkX2ZyZWUoY29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZmllbGQsIHZvaWQgKmxpc3RfaGVhZCxcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTIyNTctXFx0ICogdG9vIGxvbmcsIGFuZCBhbHNvIHByZXZlbnQgZGVhZGxvY2tzIGlmIHRyYWNpbmcgcHJvZ3JhbXMgZW5kIHVwXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjI1ODpcXHQgKiBleGVjdXRpbmcgb24gZW50cnkvZXhpdCBvZiBmdW5jdGlvbnMgY2FsbGVkIGluc2lkZSB0aGUgY3JpdGljYWxcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMjU5LVxcdCAqIHNlY3Rpb24sIGFuZCBlbmQgdXAgZG9pbmcgbWFwIG9wcyB0aGF0IGNhbGwgYnBmX2xpc3RfaGVhZF9mcmVlIGZvclxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjM4OD1fX2JwZl9rZnVuYyB2b2lkICpicGZfcGVyY3B1X29ial9uZXdfaW1wbCh1NjQgbG9jYWxfdHlwZV9pZF9faywgdm9pZCAqbWV0YV9faWduKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjM5Mi1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyMzkzOi8qIE11c3QgYmUgY2FsbGVkIHVuZGVyIG1pZ3JhdGVfZGlzYWJsZSgpLCBhcyByZXF1aXJlZCBieSBicGZfbWVtX2ZyZWUgKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMzk0LXZvaWQgX19icGZfb2JqX2Ryb3BfaW1wbCh2b2lkICpwLCBjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCBib29sIHBlcmNwdSlcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTI0ODY9c3RhdGljIGludCBfX2JwZl9saXN0X2FkZChzdHJ1Y3QgYnBmX2xpc3Rfbm9kZV9rZXJuICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ5NC1cXHQvKiBJZiBsaXN0X2hlYWQgd2FzIDAtaW5pdGlhbGl6ZWQgYnkgbWFwLCBicGZfb2JqX2luaXRfZmllbGQgd2Fzbid0XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ5NTpcXHQgKiBjYWxsZWQgb24gaXRzIGZpZWxkcywgc28gaW5pdCBoZXJlXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ5Ni1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI1MjEtZmFpbDpcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNTIyOlxcdC8qIE9ubHkgY2FsbGVkIGZyb20gQlBGIHByb2csIG5vIG5lZWQgdG8gbWlncmF0ZV9kaXNhYmxlICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjUyMy1cXHRfX2JwZl9vYmpfZHJvcF9pbXBsKCh2b2lkICopbiAtIG9mZiwgcmVjLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yNTk3PXN0YXRpYyBzdHJ1Y3QgYnBmX2xpc3Rfbm9kZSAqX19icGZfbGlzdF9kZWwoc3RydWN0IGJwZl9saXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNjAzLVxcdC8qIElmIGxpc3RfaGVhZCB3YXMgMC1pbml0aWFsaXplZCBieSBtYXAsIGJwZl9vYmpfaW5pdF9maWVsZCB3YXNuJ3RcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNjA0OlxcdCAqIGNhbGxlZCBvbiBpdHMgZmllbGRzLCBzbyBpbml0IGhlcmVcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNjA1LVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjY5MD1fX2JwZl9rZnVuYyBib29sIGJwZl9saXN0X2VtcHR5KHN0cnVjdCBicGZfbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjY5NC1cXHQvKiBJZiBsaXN0X2hlYWQgd2FzIDAtaW5pdGlhbGl6ZWQgYnkgbWFwLCBicGZfb2JqX2luaXRfZmllbGQgd2Fzbid0XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjY5NTpcXHQgKiBjYWxsZWQgb24gaXRzIGZpZWxkcywgc28gaW5pdCBoZXJlXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjY5Ni1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTI3MjU9c3RhdGljIGludCBfX2JwZl9yYnRyZWVfYWRkKHN0cnVjdCBicGZfcmJfcm9vdCAqcm9vdCxcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI3MzctXFx0aWYgKGNtcHhjaGcoXFx1MDAyNm5vZGUtXFx1MDAzZW93bmVyLCBOVUxMLCBCUEZfUFRSX1BPSVNPTikpIHtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNzM4OlxcdFxcdC8qIE9ubHkgY2FsbGVkIGZyb20gQlBGIHByb2csIG5vIG5lZWQgdG8gbWlncmF0ZV9kaXNhYmxlICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjczOS1cXHRcXHRfX2JwZl9vYmpfZHJvcF9pbXBsKCh2b2lkICopbiAtIG9mZiwgcmVjLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00MzE4PV9fYnBmX2tmdW5jIGludCBicGZfdmVyaWZ5X3BrY3M3X3NpZ25hdHVyZShjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZGF0YV9wLFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDMzNC1cXHRcXHQgKiBBIGNhbGwgdG8ga2V5X3Rhc2tfcGVybWlzc2lvbigpIGhlcmUgd291bGQgYmUgcmVkdW5kYW50LCBhc1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQzMzU6XFx0XFx0ICogaXQgaXMgYWxyZWFkeSBkb25lIGJ5IGtleXJpbmdfc2VhcmNoKCkgY2FsbGVkIGJ5XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDMzNi1cXHRcXHQgKiBmaW5kX2FzeW1tZXRyaWNfa2V5KCkuXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NjIwPXN0YXRpYyB2b2lkIGRyYWluX21lbV9jYWNoZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy02MjMtXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjYyNDpcXHQvKiBObyBwcm9ncyBhcmUgdXNpbmcgdGhpcyBicGZfbWVtX2NhY2hlLCBidXQgaHRhYl9tYXBfZnJlZSgpIGNhbGxlZFxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy02MjUtXFx0ICogYnBmX21lbV9jYWNoZV9mcmVlKCkgZm9yIGFsbCByZW1haW5pbmcgZWxlbWVudHMgYW5kIHRoZXkgY2FuIGJlIGluXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9Nzc2PXN0YXRpYyB2b2lkIG5vdHJhY2UgKnVuaXRfYWxsb2Moc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtODE2LSAqIGFkZCBpdCB0byB0aGUgZnJlZV9sbGlzdCBvZiB0aGUgY3VycmVudCBjcHUuXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjgxNzogKiBMZXQga2ZyZWUoKSBsb2dpYyBkZWFsIHdpdGggaXQgd2hlbiBpdCdzIGxhdGVyIGNhbGxlZCBmcm9tIGlycV93b3JrLlxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy04MTgtICovXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz00MT1zdGF0aWMgdm9pZCBuZXRuc19icGZfYXR0YWNoX3R5cGVfbmVlZChlbnVtIG5ldG5zX2JwZl9hdHRhY2hfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNTMtXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6NTQ6LyogTXVzdCBiZSBjYWxsZWQgd2l0aCBuZXRuc19icGZfbXV0ZXggaGVsZC4gKi9cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy01NS1zdGF0aWMgdm9pZCBuZXRuc19icGZfcnVuX2FycmF5X2RldGFjaChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yMzA9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX25ldG5zX2xpbmtfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjM4LVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjIzOTovKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG5ldG5zX2JwZl9tdXRleCBoZWxkLiAqL1xcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTI0MC1zdGF0aWMgaW50IF9fbmV0bnNfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yOTE9aW50IG5ldG5zX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMzU2LVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjM1NzovKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG5ldG5zX2JwZl9tdXRleCBoZWxkLiAqL1xcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTM1OC1zdGF0aWMgaW50IF9fbmV0bnNfYnBmX3Byb2dfZGV0YWNoKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTQ0LSAqIFRoZSBiYXNpYyBwcmluY2lwbGUgb2YgYSBxdWV1ZS1iYXNlZCBzcGlubG9jayBjYW4gYmVzdCBiZSB1bmRlcnN0b29kXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NDU6ICogYnkgc3R1ZHlpbmcgYSBjbGFzc2ljIHF1ZXVlLWJhc2VkIHNwaW5sb2NrIGltcGxlbWVudGF0aW9uIGNhbGxlZCB0aGVcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy00Ni0gKiBNQ1MgbG9jay4gQSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBNQ1MgbG9jayBwYXBlciAoXFxcIkFsZ29yaXRobXMgZm9yIFNjYWxhYmxlXFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz0yNjE9aW50IF9fbG9ja2Z1bmMgcmVzaWxpZW50X3Rhc19zcGluX2xvY2socnFzcGlubG9ja190ICpsb2NrKVxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMjY3LVxcdC8qXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6MjY4OlxcdCAqIFdlIGFyZSBlaXRoZXIgY2FsbGVkIGRpcmVjdGx5IGZyb20gcmVzX3NwaW5fbG9jayBhZnRlciBncmFiYmluZyB0aGVcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yNjktXFx0ICogZGVhZGxvY2sgZGV0ZWN0aW9uIGVudHJ5IHdoZW4gcXVldWVkIHNwaW5sb2NrcyBhcmUgZGlzYWJsZWQsIG9yIGZyb21cXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTg1PXN0YXRpYyBpbnQgbWF5YmVfZXhpdF9zY2Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE5Ny1cXHRcXHQgKiB0cmF2ZXJzYWwgc3RvcHMgd2hlbjpcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE5ODpcXHRcXHQgKiBhLiBWZXJpZmljYXRpb24gZXJyb3IgaXMgZm91bmQsIG1heWJlX2V4aXRfc2NjKCkgaXMgbm90IGNhbGxlZC5cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE5OS1cXHRcXHQgKiBiLiBUb3AgbGV2ZWwgQlBGX0VYSVQgaXMgcmVhY2hlZC4gVG9wIGxldmVsIEJQRl9FWElUIGlzIG5vdCBhIG1lbWJlclxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz04Njk9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTIzLSAqXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5MjQ6ICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB2ZXJpZmllciBleHBsb3JpbmcgZGlmZmVyZW50IGJyYW5jaGVzIG9mXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05MjUtICogZXhlY3V0aW9uIHBvcHBlZCBmcm9tIHRoZSBzdGF0ZSBzdGFjay4gSWYgaXQgc2VlcyBhbiBvbGQgc3RhdGUgdGhhdCBoYXNcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzOT1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDUwLVxcdFxcdFxcdCAqXFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDUxOlxcdFxcdFxcdCAqIC0gV2hlbiBhIHZlcmlmaWNhdGlvbiBwYXRoIHRlcm1pbmF0ZXMsIGBtYXliZV9leGl0X3NjYygpYCBpcyBjYWxsZWRcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NTItXFx0XFx0XFx0ICogICBmcm9tIGBicGZfdXBkYXRlX2JyYW5jaF9jb3VudHMoKWAuIEZvciBzdGF0ZXMgd2l0aCBgYnJhbmNoZXMgPT0gMGAsIGl0XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NTUtXFx0XFx0XFx0ICogICB0aGlzIFNDQyB2aXNpdCBoYXZlIGJlZW4gZXhwbG9yZWQuIGBwcm9wYWdhdGVfYmFja2VkZ2VzKClgIGlzIHRoZW5cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0NTY6XFx0XFx0XFx0ICogICBjYWxsZWQsIHdoaWNoIHByb3BhZ2F0ZXMgcmVhZCBhbmQgcHJlY2lzaW9uIG1hcmtzIHRocm91Z2ggdGhlXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDU3LVxcdFxcdFxcdCAqICAgYmFja2VkZ2VzIHVudGlsIGEgZml4ZWQgcG9pbnQgaXMgcmVhY2hlZC5cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTg4NT1zdGF0aWMgdm9pZCBicGZfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTkxNC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo5MTU6LyogY2FsbGVkIGZyb20gd29ya3F1ZXVlICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTE2LXN0YXRpYyB2b2lkIGJwZl9tYXBfZnJlZV9kZWZlcnJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz05NTE9dm9pZCBicGZfbWFwX3B1dChzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTUzLVxcdGlmIChhdG9taWM2NF9kZWNfYW5kX3Rlc3QoXFx1MDAyNm1hcC1cXHUwMDNlcmVmY250KSkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjk1NDpcXHRcXHQvKiBicGZfbWFwX2ZyZWVfaWQoKSBtdXN0IGJlIGNhbGxlZCBmaXJzdCAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTk1NS1cXHRcXHRicGZfbWFwX2ZyZWVfaWQobWFwKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEwNTI9c3RhdGljIHNzaXplX3QgYnBmX2R1bW15X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTA2MC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMDYxOi8qIGNhbGxlZCBmb3IgYW55IGV4dHJhIG1lbW9yeS1tYXBwZWQgcmVnaW9ucyAoZXhjZXB0IGluaXRpYWwpICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTA2Mi1zdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwNjktXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA3MDovKiBjYWxsZWQgZm9yIGFsbCB1bm1hcHBlZCBtZW1vcnkgcmVnaW9uIChpbmNsdWRpbmcgaW5pdGlhbCkgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDcxLXN0YXRpYyB2b2lkIGJwZl9tYXBfbW1hcF9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyNTU9c3RhdGljIGludCBtYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTM4MC0jZGVmaW5lIEJQRl9NQVBfQ1JFQVRFX0xBU1RfRklFTEQgZXhjbF9wcm9nX2hhc2hfc2l6ZVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzODE6LyogY2FsbGVkIHZpYSBzeXNjYWxsICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTM4Mi1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjU2Mj1zdGF0aWMgdm9pZCBicGZfcHJvZ19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjU3OC1cXHRcXHQgICBcXFwicmVjdXJzaW9uX21pc3NlczpcXFxcdCVsbHVcXFxcblxcXCJcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNTc5OlxcdFxcdCAgIFxcXCJ2ZXJpZmllZF9pbnNuczpcXFxcdCV1XFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI1ODAtXFx0XFx0ICAgcHJvZy1cXHUwMDNldHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI1ODctXFx0XFx0ICAgc3RhdHMubWlzc2VzLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI1ODg6XFx0XFx0ICAgcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2V2ZXJpZmllZF9pbnNucyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjU4OS19XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zMzExPXN0YXRpYyBib29sIGJwZl9saW5rX2lzX3RyYWNlcG9pbnQoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzMyMi1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMzIzOi8qIGJwZl9saW5rX2ZyZWUgaXMgZ3VhcmFudGVlZCB0byBiZSBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzI0LXN0YXRpYyB2b2lkIGJwZl9saW5rX2ZyZWUoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzM2MD1zdGF0aWMgdm9pZCBicGZfbGlua19wdXRfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzM2Ni1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMzY3Oi8qIGJwZl9saW5rX3B1dCBtaWdodCBiZSBjYWxsZWQgZnJvbSBhdG9taWMgY29udGV4dC4gSXQgbmVlZHMgdG8gYmUgY2FsbGVkXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzM2OC0gKiBmcm9tIHNsZWVwYWJsZSBjb250ZXh0IGluIG9yZGVyIHRvIGFjcXVpcmUgc2xlZXBpbmcgbG9ja3MgZHVyaW5nIHRoZSBwcm9jZXNzLlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzYzND1zdGF0aWMgaW50IGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3MjctXFx0ICpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzI4OlxcdCAqIC0gaWYgdGd0X3Byb2cgPT0gTlVMTCB3aGVuIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZCB1c2luZyB0aGUgb2xkXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzcyOS1cXHQgKiAgIHJhd190cmFjZXBvaW50X29wZW4gQVBJLCBhbmQgd2UgbmVlZCBhIHRhcmdldCBmcm9tIHByb2ctXFx1MDAzZWF1eFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTA5OT1zdGF0aWMgaW50IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTE1OC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1MTU5OlxcdGluZm8udmVyaWZpZWRfaW5zbnMgPSBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXZlcmlmaWVkX2luc25zO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxNjAtXFx0aWYgKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYnRmKVxcbi0tXFxua2VybmVsL2JwZi90bnVtLmM9MjY4PXN0cnVjdCB0bnVtIHRudW1fYnN3YXA2NChzdHJ1Y3QgdG51bSBhKVxcbi0tXFxua2VybmVsL2JwZi90bnVtLmMtMjgyLSAqXFxua2VybmVsL2JwZi90bnVtLmM6MjgzOiAqIE5vdGU6IGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggeiBcXHUwMDNlPSB0bWF4LCBpdCBqdXN0IHJldHVybnNcXG5rZXJuZWwvYnBmL3RudW0uYzoyODQ6ICogZWFybHkgd2l0aCB0bWF4OyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHogXFx1MDAzYyB0bWluLCB0aGVcXG5rZXJuZWwvYnBmL3RudW0uYy0yODUtICogYWxnb3JpdGhtIGFscmVhZHkgcmV0dXJucyB0bWluLlxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTg9c3RhdGljIGludCBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXAsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDgtXFx0aWYgKGNtZCA9PSBGVFJBQ0VfT1BTX0NNRF9FTkFCTEVfU0hBUkVfSVBNT0RJRllfU0VMRikge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwOTpcXHRcXHQvKiBUaGlzIGlzIGNhbGxlZCBpbnNpZGUgcmVnaXN0ZXJfZnRyYWNlX2RpcmVjdF9tdWx0aSgpLCBzb1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExMC1cXHRcXHQgKiB0cmFtcG9saW5lJ3MgbXV0ZXggaXMgYWxyZWFkeSBsb2NrZWQuXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMzMtXFx0ICpcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMzQ6XFx0ICogVGhlIGZvbGxvd2luZyB0d28gY29tbWFuZHMgYXJlIGNhbGxlZCBmcm9tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTM1LVxcdCAqXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjMzPXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM3LVxcdCAqIFdoZW4gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKCkgZmFpbHMgYmVmb3JlIG1vZGlmeV9mZW50cnlfbXVsdGkoKS9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjM4OlxcdCAqIHVucmVnaXN0ZXJfZmVudHJ5X211bHRpKCkgaXMgY2FsbGVkLCBjdXJfaW1hZ2UgaXMgdW5jaGFuZ2VkXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzOS1cXHQgKiAoY3VyX2ltYWdlID09IG9sZF9pbWFnZSkgYW5kIGZ0cmFjZSBzdGlsbCBwb2ludHMgdG8gaXQuIEZyZWVpbmdcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDc4PXN0YXRpYyB2b2lkIF9fdXBkYXRlX3JlZzY0X2JvdW5kcyhzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTYtXFx0XFx0LyogVGhlIHU2NCByYW5nZSBhbmQgdGhlIHRudW0gb25seSBvdmVybGFwIGluIHRoZSBtYXhpbXVtIHZhbHVlXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTc6XFx0XFx0ICogcmVwcmVzZW50ZWQgYnkgdGhlIHRudW0sIGNhbGxlZCB0bWF4Llxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk4LVxcdFxcdCAqIHU2NDogIC0tLVt4eHh4eHhdLS0tLS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00MTMwPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxNjEtXFx0ICogQUxVLiBTZWUgYWxzbyByZXRyaWV2ZV9wdHJfbGltaXQoKS4gVGhlIGNoZWNrIGluXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQxNjI6XFx0ICogY2hlY2tfc3RhY2tfYWNjZXNzX2Zvcl9wdHJfYXJpdGhtZXRpYygpIGNhbGxlZCBieVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MTYzLVxcdCAqIGFkanVzdF9wdHJfbWluX21heF92YWxzKCkgcHJldmVudHMgdXNlcnMgZnJvbSBjcmVhdGluZyBzdGFjayBwb2ludGVyc1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNTo1OS44MzEyNjYyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODExMTAzOTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkNoZWNraW5nIGZvciBJbml0aWFsaXphdGlvbiBvZiBgZW52LVx1MDAzZXN1YnByb2dfdG9wb19vcmRlcmAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdmVyaWZ5IGEgY3J1Y2lhbCBkZXRhaWwgcmVnYXJkaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgZW52LVx1MDAzZXN1YnByb2dfdG9wb19vcmRlcmAuIEl0J3MgZXNzZW50aWFsIHRoYXQgdGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBhbHdheXMgcHJvcGVybHkgc2V0IHVwIGJlZm9yZSBgZG9fY2hlY2tfc3VicHJvZ3NgIGlzIGludm9rZWQuIFRoaXMgaXMgYSBjb21tb24gcG9pbnQgb2YgZXJyb3IgaW4gY29tcGlsZXIgYmFja2VuZHMsIHNvIEkgbmVlZCB0byBiZSBzdXJlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gaW5pdGlhdGUgYSBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiBgc3VicHJvZ190b3BvX29yZGVyYCB0aHJvdWdob3V0IHRoZSByZWxldmFudCBjb2RlIGJhc2UuIEkgbmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgcHJlY2lzZSB0byBjb25maXJtIGl0cyBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYW5kIHVzZS4gVGhpcyBzaG91bGRuJ3QgdGFrZSB0b28gbG9uZywgYnV0IGl0IG5lZWRzIHRvIGJlIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDAyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDY6MDEuNjQyMzczMTg2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk0ODkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdWJwcm9nX3RvcG9fb3JkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTk4NT1pbnQgYnBmX2NvbXB1dGVfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjAxNC1cXHRmb3IgKGsgPSBlbnYtXFx1MDAzZXN1YnByb2dfY250IC0gMTsgayBcXHUwMDNlPSAwOyBrLS0pIHtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjAxNTpcXHRcXHRpbnQgc3ViID0gZW52LVxcdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJba107XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIwMTYtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzEzNT1zdGF0aWMgaW50IHNvcnRfc3VicHJvZ3NfdG9wbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMDQtXFx0XFx0XFx0XFx0Y29sb3JbY3VyXSA9IDI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyMDU6XFx0XFx0XFx0XFx0ZW52LVxcdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJbb3JkZXIrK10gPSBjdXI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMDYtXFx0XFx0XFx0XFx0dG9wLS07XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIxMy1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInRvcG9fb3JkZXJbJWRdID0gJXNcXFxcblxcXCIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyMTQ6XFx0XFx0XFx0XFx0aSwgYnBmX3N1YnByb2dfbmFtZShlbnYsIGVudi1cXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2ldKSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMTUtb3V0Olxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NzU1PXN0YXRpYyBpbnQgZG9fY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc3OC1cXHRmb3IgKGogPSBlbnYtXFx1MDAzZXN1YnByb2dfY250IC0gMTsgaiBcXHUwMDNlPSAwOyBqLS0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3Nzk6XFx0XFx0aSA9IGVudi1cXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2pdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc4MC1cXHRcXHRpZiAoIWkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA2OjAxLjY5MDMyNzg4NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTE3MzQ5NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHNvcnRfc3VicHJvZ3NfdG9wb2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYHNvcnRfc3VicHJvZ3NfdG9wb2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBicGZfdmVyaWZpZXJfZW52YCBjb250ZXh0LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgaXRzIHB1cnBvc2UuIEl0J3Mgb2J2aW91c2x5IGRlc2lnbmVkIGZvciB0b3BvbG9naWNhbCBzb3J0aW5nIG9mIHN1YnByb2dyYW1zIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyLiBUaGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKj8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgY2hhaW4gdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCB1bmRlcnN0YW5kIHdoeSBhbmQgd2hlbiB0aGUgdmVyaWZpZXIgZGVjaWRlcyB0byBpbnZva2UgdGhpcyBzb3J0aW5nIGZ1bmN0aW9uLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMga2V5IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbXBhY3QgYW5kIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBpc3N1ZXMuIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gdHJhY2UgdGhvc2UgY2FsbHM7IGZpbmRpbmcgdGhpcyBmdW5jdGlvbidzIGNhbGxlcnMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDY6MDMuODA3NjgwNzI3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMxNDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3J0X3N1YnByb2dzX3RvcG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzA2MT1zdGF0aWMgaW50IGNoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEzNC0gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzEzNTpzdGF0aWMgaW50IHNvcnRfc3VicHJvZ3NfdG9wbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTM2LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTMwNj1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTQ3NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE0NzY6XFx0cmV0ID0gc29ydF9zdWJwcm9nc190b3BvKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNDc3LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNjowMy44NTcwMDA1NzdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyOTc5NzYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBpc3N1ZSAqc2hvdWxkKiBiZSBzb21ld2hlcmUgYXJvdW5kIGxpbmUgMjE0NzUgb2YgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGxvZ2ljIHRoYXQncyBsZWFkaW5nIHRvIHRoZSB1bmV4cGVjdGVkIGJlaGF2aW9yIEknbSBzZWVpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGZsYXdzIGluIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcy4uLiB3ZWxsLCBpdCBjb3VsZCBiZSBhbnkgbnVtYmVyIG9mIHRoaW5ncy4gTWVtb3J5IGFjY2VzcyB0cmFja2luZz8gUmVnaXN0ZXIgc3RhdGUgbWFuYWdlbWVudD8gTG9vcCB1bnJvbGxpbmcgaW50ZXJhY3Rpb25zPyBQZXJoYXBzIHRoZXJlJ3MgYW4gaXNzdWUgd2l0aCBob3cgaXQgaW50ZXJwcmV0cyBpbnN0cnVjdGlvbiBzZW1hbnRpY3MsIG9yIGEgc3VidGxlIGJ1ZyBpbiB0aGUgY29uc3RyYWludHMgaXQgZW5mb3JjZXMuIEdpdmVuIHRoZSBuYXR1cmUgb2YgQlBGIHZlcmlmaWNhdGlvbiwgaXQncyBvZnRlbiBhIGNvbXBsZXggaW50ZXJwbGF5IG9mIGRpZmZlcmVudCBmYWN0b3JzLCBzbyBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyBpbiB0aGF0IGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTcxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDY6MDUuNzg2ODAxNzgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE0NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNDcwOlxcdFxcdFxcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xcbjIxNDcxOlxcdFxcbjIxNDcyOlxcdFxcdHJldCA9IGJwZl9wcnVuZV9kZWFkX2JyYW5jaGVzKGVudik7XFxuMjE0NzM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjE0NzQ6XFx0XFx0XFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XFxuMjE0NzU6XFx0XFxuMjE0NzY6XFx0XFx0cmV0ID0gc29ydF9zdWJwcm9nc190b3BvKGVudik7XFxuMjE0Nzc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjE0Nzg6XFx0XFx0XFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XFxuMjE0Nzk6XFx0XFxuMjE0ODA6XFx0XFx0cmV0ID0gYnBmX2NvbXB1dGVfc2NjKGVudik7XFxuMjE0ODE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjE0ODI6XFx0XFx0XFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XFxuMjE0ODM6XFx0XFxuMjE0ODQ6XFx0XFx0LyogbXVzdCBwcmVjZWRlIHRoZSBmaXJzdCBicGZfcmV0X3JlZ19wYWlyKCkgdXNlciBiZWxvdyAqL1xcbjIxNDg1OlxcdFxcdHJldCA9IGJwZl9jb21wdXRlX3N1YnByb2dfcmV0X3JlZ3MoZW52KTtcXG4yMTQ4NjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4yMTQ4NzpcXHRcXHRcXHRnb3RvIHNraXBfZnVsbF9jaGVjaztcXG4yMTQ4ODpcXHRcXG4yMTQ4OTpcXHRcXHRyZXQgPSBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhlbnYpO1xcbjIxNDkwOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIxNDkxOlxcdFxcdFxcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xcbjIxNDkyOlxcdFxcbjIxNDkzOlxcdFxcdHJldCA9IG1hcmtfZmFzdGNhbGxfcGF0dGVybnMoZW52KTtcXG4yMTQ5NDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4yMTQ5NTpcXHRcXHRcXHRnb3RvIHNraXBfZnVsbF9jaGVjaztcXG4yMTQ5NjpcXHRcXG4yMTQ5NzpcXHRcXHRyZXQgPSBkb19jaGVja19tYWluKGVudik7XFxuMjE0OTg6XFx0XFx0cmV0ID0gcmV0ID86IGRvX2NoZWNrX3N1YnByb2dzKGVudik7XFxuMjE0OTk6XFx0XFxuMjE1MDA6XFx0XFx0aWYgKHJldCA9PSAwIFxcdTAwMjZcXHUwMDI2IGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eCkpXFxuMjE1MDE6XFx0XFx0XFx0cmV0ID0gYnBmX3Byb2dfb2ZmbG9hZF9maW5hbGl6ZShlbnYpO1xcbjIxNTAyOlxcdFxcbjIxNTAzOlxcdHNraXBfZnVsbF9jaGVjazpcXG4yMTUwNDpcXHRcXHRrdmZyZWUoZW52LVxcdTAwM2VleHBsb3JlZF9zdGF0ZXMpO1xcbjIxNTA1OlxcdFxcbjIxNTA2OlxcdFxcdC8qIG1pZ2h0IGRlY3JlYXNlIHN0YWNrIGRlcHRoLCBrZWVwIGl0IGJlZm9yZSBwYXNzZXMgdGhhdFxcbjIxNTA3OlxcdFxcdCAqIGFsbG9jYXRlIGFkZGl0aW9uYWwgc2xvdHMuXFxuMjE1MDg6XFx0XFx0ICovXFxuMjE1MDk6XFx0XFx0aWYgKHJldCA9PSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNjowNS43ODc3NDAzNTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY1ODEwODQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgU3VicHJvZ3JhbSBPcmRlcmluZyoqXG5cbk9rYXksIHNvIGBzb3J0X3N1YnByb2dzX3RvcG9gIG5lZWRzIHRvIGV4ZWN1dGUgYmVmb3JlIGJvdGggYGRvX2NoZWNrX21haW5gIGFuZCBgZG9fY2hlY2tfc3VicHJvZ3NgLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSBuZWVkIHRoZSB0b3BvbG9naWNhbCBzb3J0IHBlcmZvcm1lZCBiZWZvcmUgd2Ugc3RhcnQgdmFsaWRhdGluZyBhbnl0aGluZyBhZ2FpbnN0IHRoZSByZXN1bHRpbmcgb3JkZXIuIFRoZSBjcml0aWNhbCBwYXJ0IEknbSBmb2N1c2luZyBvbiBub3cgaXMgaG93IGBzdWJwcm9nX3RvcG9fb3JkZXJgIGlzIGJlaW5nIGFsbG9jYXRlZC4gSSByZWNhbGwgdGhhdCB2YXJpYWJsZSwgYHN1YnByb2dfdG9wb19vcmRlcmAgaXMgYWxsb2NhdGVkIHdpdGhpbiBlaXRoZXIgYGJwZl9jaGVja2Agb3IgYGFsbG9jX2VudmAuIEkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBjb25maXJtIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGJlY2F1c2UgZGVwZW5kaW5nIG9uIHdoZW4gaXQgaXMgc2V0LCBpdCB3aWxsIGltcGFjdCB0aGUgZW50aXJlIGNvbnRyb2wgZmxvdyBhbmQgbWFrZSBzdXJlIGFsbCBjaGVja3MgaGF2ZSBhIHdlbGwgZGVmaW5lZCBzdGFydGluZyBwb2ludC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY2FsbGluZyBjb250ZXh0IG9mIHRob3NlIGZ1bmN0aW9ucyB0byBiZSBjZXJ0YWluIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA0OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDY6MDkuNDQ1ODUyNzEyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDk2MDgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdWJwcm9nX3RvcG9fb3JkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMTM1PXN0YXRpYyBpbnQgc29ydF9zdWJwcm9nc190b3BvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIwNC1cXHRcXHRcXHRcXHRjb2xvcltjdXJdID0gMjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIwNTpcXHRcXHRcXHRcXHRlbnYtXFx1MDAzZXN1YnByb2dfdG9wb19vcmRlcltvcmRlcisrXSA9IGN1cjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIwNi1cXHRcXHRcXHRcXHR0b3AtLTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjEzLVxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwidG9wb19vcmRlclslZF0gPSAlc1xcXFxuXFxcIixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIxNDpcXHRcXHRcXHRcXHRpLCBicGZfc3VicHJvZ19uYW1lKGVudiwgZW52LVxcdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJbaV0pKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIxNS1vdXQ6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk3NTU9c3RhdGljIGludCBkb19jaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzc4LVxcdGZvciAoaiA9IGVudi1cXHUwMDNlc3VicHJvZ19jbnQgLSAxOyBqIFxcdTAwM2U9IDA7IGotLSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTc3OTpcXHRcXHRpID0gZW52LVxcdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJbal07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzgwLVxcdFxcdGlmICghaSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDY6MDkuNTA2ODIxOTQxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MzkwMTAxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgc29ydF9zdWJwcm9nc190b3BvYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGVudi1cdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJgIHN0cnVjdHVyZSBpcyBwb3B1bGF0ZWQuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIGBzb3J0X3N1YnByb2dzX3RvcG9gIGZ1bmN0aW9uLiBUaGF0J3Mgd2hlcmUgdGhlIGFsbG9jYXRpb24gYW5kIG9yZGVyaW5nIGxvZ2ljIGxpa2VseSByZXNpZGUuIEkgbmVlZCB0byB0cmFjZSB0aGlzIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIHRoZSBzdWJwcm9ncmFtcyBmcm9tIGEgdG9wb2xvZ2ljYWwgcG9pbnQgb2Ygdmlldy4gTGV0J3Mgc2VlIGhvdyB0aGV5IGFyZSBzb3J0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjkxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDY6MTEuMTQ1ODQxNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY4NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTM1OlxcdHN0YXRpYyBpbnQgc29ydF9zdWJwcm9nc190b3BvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuMzEzNjpcXHR7XFxuMzEzNzpcXHRcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc2kgPSBlbnYtXFx1MDAzZXN1YnByb2dfaW5mbztcXG4zMTM4OlxcdFxcdGludCAqaW5zbl9wb3N0b3JkZXIgPSBlbnYtXFx1MDAzZWNmZy5pbnNuX3Bvc3RvcmRlcjtcXG4zMTM5OlxcdFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpO1xcbjMxNDA6XFx0XFx0aW50IGNudCA9IGVudi1cXHUwMDNlc3VicHJvZ19jbnQ7XFxuMzE0MTpcXHRcXHRpbnQgKmRmc19zdGFjayA9IE5VTEw7XFxuMzE0MjpcXHRcXHRpbnQgdG9wID0gMCwgb3JkZXIgPSAwO1xcbjMxNDM6XFx0XFx0aW50IGksIHJldCA9IDA7XFxuMzE0NDpcXHRcXHR1OCAqY29sb3IgPSBOVUxMO1xcbjMxNDU6XFx0XFxuMzE0NjpcXHRcXHRjb2xvciA9IGt2emFsbG9jX29ianMoKmNvbG9yLCBjbnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuMzE0NzpcXHRcXHRkZnNfc3RhY2sgPSBrdm1hbGxvY19vYmpzKCpkZnNfc3RhY2ssIGNudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4zMTQ4OlxcdFxcdGlmICghY29sb3IgfHwgIWRmc19zdGFjaykge1xcbjMxNDk6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4zMTUwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxNTE6XFx0XFx0fVxcbjMxNTI6XFx0XFxuMzE1MzpcXHRcXHQvKlxcbjMxNTQ6XFx0XFx0ICogREZTIHBvc3Qtb3JkZXIgdHJhdmVyc2FsLlxcbjMxNTU6XFx0XFx0ICogQ29sb3IgdmFsdWVzOiAwID0gdW52aXNpdGVkLCAxID0gb24gc3RhY2ssIDIgPSBkb25lLlxcbjMxNTY6XFx0XFx0ICovXFxuMzE1NzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4zMTU4OlxcdFxcdFxcdGlmIChjb2xvcltpXSlcXG4zMTU5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMxNjA6XFx0XFx0XFx0Y29sb3JbaV0gPSAxO1xcbjMxNjE6XFx0XFx0XFx0ZGZzX3N0YWNrW3RvcCsrXSA9IGk7XFxuMzE2MjpcXHRcXG4zMTYzOlxcdFxcdFxcdHdoaWxlICh0b3AgXFx1MDAzZSAwKSB7XFxuMzE2NDpcXHRcXHRcXHRcXHRpbnQgY3VyID0gZGZzX3N0YWNrW3RvcCAtIDFdO1xcbjMxNjU6XFx0XFx0XFx0XFx0aW50IHBvX3N0YXJ0ID0gc2lbY3VyXS5wb3N0b3JkZXJfc3RhcnQ7XFxuMzE2NjpcXHRcXHRcXHRcXHRpbnQgcG9fZW5kID0gc2lbY3VyICsgMV0ucG9zdG9yZGVyX3N0YXJ0O1xcbjMxNjc6XFx0XFx0XFx0XFx0Ym9vbCBwdXNoZWQgPSBmYWxzZTtcXG4zMTY4OlxcdFxcdFxcdFxcdGludCBqO1xcbjMxNjk6XFx0XFxuMzE3MDpcXHRcXHRcXHRcXHRmb3IgKGogPSBwb19zdGFydDsgaiBcXHUwMDNjIHBvX2VuZDsgaisrKSB7XFxuMzE3MTpcXHRcXHRcXHRcXHRcXHRpbnQgaWR4ID0gaW5zbl9wb3N0b3JkZXJbal07XFxuMzE3MjpcXHRcXHRcXHRcXHRcXHRpbnQgY2FsbGVlO1xcbjMxNzM6XFx0XFxuMzE3NDpcXHRcXHRcXHRcXHRcXHRpZiAoIWJwZl9wc2V1ZG9fY2FsbChcXHUwMDI2aW5zbltpZHhdKSBcXHUwMDI2XFx1MDAyNiAhYnBmX3BzZXVkb19mdW5jKFxcdTAwMjZpbnNuW2lkeF0pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNjoxMS4xNDcwMzcxMloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDc1NDE2ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOlxuXG4qKkZpbmRpbmcgdGhlIEFsbG9jYXRpb24gb2YgYGVudi1cdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYGVudi1cdTAwM2VzdWJwcm9nX3RvcG9fb3JkZXJgIGlzIGJlaW5nIGFsbG9jYXRlZC4gVGhpcyBmZWVscyBsaWtlIGEgY2xhc3NpYyBkZWJ1Z2dpbmcgZXhlcmNpc2UuIEknbSBnb2luZyB0byBuZWVkIHRvIHN0YXJ0IGJ5IGRvaW5nIGEgY29tcHJlaGVuc2l2ZSBzZWFyY2ggdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuIEkgZG9uJ3Qgd2FudCB0byBtaXNzIGFueXRoaW5nLCBzbyBJJ2xsIGdvIHdpZGUsIHNlYXJjaGluZyB0aGUgZW50aXJlIHByb2plY3QgdHJlZS4gTGV0J3Mgc2VlIHdoYXQgSSB0dXJuIHVwLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbnZvbHZlIGxvb2tpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUzMCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MDY6MTIuNjIyNDYyNTVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MDU3NTU3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3VicHJvZ190b3BvX29yZGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9OTE5PXN0cnVjdCBicGZfdmVyaWZpZXJfZW52IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtOTY0LVxcdC8qIHN1YnByb2cgaW5kaWNlcyBzb3J0ZWQgaW4gdG9wb2xvZ2ljYWwgb3JkZXI6IGxlYXZlcyBmaXJzdCwgY2FsbGVycyBsYXN0ICovXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDo5NjU6XFx0aW50IHN1YnByb2dfdG9wb19vcmRlcltCUEZfTUFYX1NVQlBST0dTICsgMl07XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC05NjYtXFx0dW5pb24ge1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE5ODU9aW50IGJwZl9jb21wdXRlX3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIwMTQtXFx0Zm9yIChrID0gZW52LVxcdTAwM2VzdWJwcm9nX2NudCAtIDE7IGsgXFx1MDAzZT0gMDsgay0tKSB7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjIwMTU6XFx0XFx0aW50IHN1YiA9IGVudi1cXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW2tdO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMDE2LVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTMxMzU9c3RhdGljIGludCBzb3J0X3N1YnByb2dzX3RvcG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjA0LVxcdFxcdFxcdFxcdGNvbG9yW2N1cl0gPSAyO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMjA1OlxcdFxcdFxcdFxcdGVudi1cXHUwMDNlc3VicHJvZ190b3BvX29yZGVyW29yZGVyKytdID0gY3VyO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjA2LVxcdFxcdFxcdFxcdHRvcC0tO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMTMtXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJ0b3BvX29yZGVyWyVkXSA9ICVzXFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMjE0OlxcdFxcdFxcdFxcdGksIGJwZl9zdWJwcm9nX25hbWUoZW52LCBlbnYtXFx1MDAzZXN1YnByb2dfdG9wb19vcmRlcltpXSkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjE1LW91dDpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTc1NT1zdGF0aWMgaW50IGRvX2NoZWNrX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NzgtXFx0Zm9yIChqID0gZW52LVxcdTAwM2VzdWJwcm9nX2NudCAtIDE7IGogXFx1MDAzZT0gMDsgai0tKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Nzc5OlxcdFxcdGkgPSBlbnYtXFx1MDAzZXN1YnByb2dfdG9wb19vcmRlcltqXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3ODAtXFx0XFx0aWYgKCFpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDowNjoxNi4yMjgyMzYxNTRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQwMTY1MjU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBgc3VicHJvZ190b3BvX29yZGVyYCBpcyBhbiBlbWJlZGRlZCBhcnJheSB3aXRoaW4gYHN0cnVjdCBicGZfdmVyaWZpZXJfZW52YCwgYW5kIGBlbnZgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC4gVGhpcyBpcyBrZXkuIE5vdywgcmVnYXJkaW5nIHRoZSBwYXRjaCBpdHNlbGYsIGhlcmUncyBteSBhc3Nlc3NtZW50OlxuXG4xLiAgKipgaW5jbHVkZS9saW51eC9icGYuaGA6KiogVGhlIGNoYW5nZSBpbiBgc3RydWN0IGJwZl9mdW5jX2luZm9fYXV4YCwgcmVwbGFjaW5nIHNpbmdsZS1iaXQgYml0ZmllbGRzIGBjYWxsZWRgIGFuZCBgdmVyaWZpZWRgIHdpdGggYGJvb2wgY2FsbGVkWzJdYCBhbmQgYGJvb2wgdmVyaWZpZWRbMl1gLCBpcyBkZWZpbml0ZWx5IGludGVyZXN0aW5nLiBUaGVzZSBhdXhpbGlhcnkgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGR1cmluZyBCVEYgcHJvY2Vzc2luZy4gVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoYXQgdGhleSBhcmUgZWl0aGVyIHplcm8taW5pdGlhbGl6ZWQgb3IgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpzYC4gVGhpcyBzZXRzIHRoZSBzdGFnZS5cblxuMi4gICoqYGtlcm5lbC9icGYvdmVyaWZpZXIuY2A6KiogVGhlIGNvcmUgbG9naWMgaGFzIGJlZW4gbW9kaWZpZWQuIEluIGBjaGVja19mdW5jX2NhbGwoKWAsIHdlJ3JlIG5vdyB0cmFja2luZyB0aGUgaW52b2NhdGlvbiBjb250ZXh0IGV4cGxpY2l0bHkgd2l0aCBgc3ViX2F1eC1cdTAwM2VjYWxsZWRbaW5fc2xlZXBhYmxlX2NvbnRleHQoZW52KV0gPSB0cnVlYCBpbnN0ZWFkIG9mIGEgc2ltcGxlIGJvb2xlYW4gYXNzaWdubWVudC4gVGhlIGludHJvZHVjdGlvbiBvZiBgaW5fc2xlZXBhYmxlYCBhcyBhIHBhcmFtZXRlciB0byBgZG9fY2hlY2tfY29tbW9uKClgIGFuZCB0aGUgZXhwbGljaXQgc2V0dGluZyBvZiBgc3RhdGUtXHUwMDNlaW5fc2xlZXBhYmxlYCBpcyBpbXBvcnRhbnQgZm9yIGhhbmRsaW5nIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cywgYW5kIGl0IHVwZGF0ZXMgaW5zbiBhY2N1bXVsYXRpb24uICBgZG9fY2hlY2tfc3VicHJvZ3MoKWAgaXRlcmF0ZXMgaW4gcmV2ZXJzZSB0b3BvbG9naWNhbCBvcmRlciwgY2hlY2tpbmcgYm90aCBjb250ZXh0cyBpZiBtYXJrZWQgYXMgY2FsbGVkLiAgRmluYWxseSwgYGRvX2NoZWNrX21haW4oKWAgY2FsbHMgYGRvX2NoZWNrX2NvbW1vbigpYC4gVGhlIHJldmVyc2UgdG9wb2xvZ2ljYWwgb3JkZXIgYW5kIGR1YWwtY29udGV4dCBjaGVja2luZyBpcyBhIGtleSBjaGFuZ2UuXG5cbjMuICAqKlNlbGZ0ZXN0czoqKiBUaGUgYWRkaXRpb24gb2YgdGVzdHMgZm9yIGdsb2JhbCBzdWJwcm9ncmFtcyBpbiBib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSBjb250ZXh0cyBpcyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIHdoYXQgdGhlIGRldmVsb3BlcnMgYXJlIHRyeWluZyB0byB2YWxpZGF0ZSwgZW5zdXJpbmcgdGhleSBoYXZlbid0IGludHJvZHVjZWQgYW55IHJlZ3Jlc3Npb24gb3IgbmV3IGlzc3VlcyB3aGVuIGhhbmRsaW5nIGRpZmZlcmVudCBjb250ZXh0cy5cblxuTm93LCBsZXQncyBldmFsdWF0ZSB0aGlzIGluIHRoZSBjb250ZXh0IG9mIEtNU0FOIHZzLiBLQVNBTjpcblxuKiAgICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZS4gVGhlIHBhdGNoIGlzIHdvcmtpbmcgb24gYHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eGAsIHdoaWNoIGlzIGVudGlyZWx5IGludGVybmFsIHZlcmlmaWVyIG1ldGFkYXRhLiBObyBkYXRhIGZyb20gdGhhdCBzdHJ1Y3QgaXMgZXZlciBleHBvc2VkIHRvIHVzZXJzcGFjZS5cbiogICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogTm8uICBGaWVsZHMgd2l0aGluIGBicGZfZnVuY19pbmZvX2F1eGAgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEFueSBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZXJlJ3Mgbm8gcmlzayBoZXJlLlxuKiAgICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uOioqIE5vLiAgWmVyby1hbGxvY2F0aW9uIHZpYSBga3phbGxvY19vYmpzYCBpcyB2ZXJ5IHN0cmFpZ2h0Zm9yd2FyZC5cbiogICAqKkJvdW5kcyBjaGVja3MgXHUwMDI2IGxvZ2ljIHRoYXQgY291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6KiogTm8uXG5cblBvdGVudGlhbCBidWdzLCBhcyBJIHNlZSBpdCwgd291bGQgYmUgcmVsYXRlZCB0bzpcblxuKiAgIFZlcmlmaWVyIGxvZ2ljIGJ1Z3MgKHJlamVjdGluZyB2YWxpZCBwcm9ncmFtcywgYWNjZXB0aW5nIGludmFsaWQgcHJvZ3JhbXMgd2l0aCBpbmNvcnJlY3QgY29udGV4dCB2ZXJpZmljYXRpb24pLlxuKiAgIEluZmluaXRlIGxvb3BzIG9yIG9yZGVyaW5nIGlzc3VlcyBkdXJpbmcgc3VicHJvZ3JhbSBpdGVyYXRpb24uXG4qICAgT3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb24gdGhlIGBjYWxsZWRgIG9yIGB2ZXJpZmllZGAgYXJyYXlzIGlmIGBpbl9zbGVlcGFibGVfY29udGV4dChlbnYpYCByZXR1cm5lZCBhbnl0aGluZyBvdGhlciB0aGFuIDAgb3IgMS4gSG93ZXZlciwgc2luY2UgaXQgcmV0dXJucyBhIGBib29sYCBhbmQgd2Uga25vdyB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgaXMgMiwgYW55IG91dC1vZi1ib3VuZHMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIC8gY29tcGlsZXIgYm91bmRzIGNoZWNrcy4gTm9uZSBvZiB0aGVzZSBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGVyZWZvcmUsICoqTmVlZHNLTVNBTiA9IGZhbHNlLioqXG5cbk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6XG5cbiogICAqKktBU0FOIC8gc3RhbmRhcmQgc2FuaXRpemVyczoqKiBXZSdyZSBwcm90ZWN0ZWQgYWdhaW5zdCB2ZXJpZmllciBsb2dpYyBidWdzLCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvbiB0aG9zZSBgY2FsbGVkYCAvIGB2ZXJpZmllZGAgYXJyYXlzLCBhbnkgcG90ZW50aWFsIHN0YXRlIGFsbG9jYXRpb24gZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIG9yIGluZmluaXRlIGxvb3BzIGJ5IEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy5cbiogICAqKktNU0FOOioqIFdlJ3JlICpub3QqIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIGhlYXAgb3Igc3RhY2sgdmFyaWFibGVzLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nIG9yIGZpZWxkcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdXNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBpbiBjb25kaXRpb25hbCBsb2dpYy4gIGBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXhgIGlzIGNvbnNpc3RlbnRseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBga3phbGxvY19vYmpzYC4gTm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBoZXJlLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyOTAsIk91dHB1dFRva2VucyI6Mjc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjA2OjIzLjYyOTg5Mjc1OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBhbmQgdmVyaWZ5IGdsb2JhbCBzdWJwcm9ncmFtIGNhbGxzIHNlcGFyYXRlbHkgZm9yIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZS9SQ1UgY29udGV4dHMuIEl0IHJlcGxhY2VzIHRoZSBzaW5nbGUtYml0IGBjYWxsZWRgIGFuZCBgdmVyaWZpZWRgIGZsYWdzIGluIGBzdHJ1Y3QgYnBmX2Z1bmNfaW5mb19hdXhgIHdpdGggdHdvLWVsZW1lbnQgYm9vbGVhbiBhcnJheXMgaW5kZXhlZCBieSBgaW5fc2xlZXBhYmxlYC5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suIFRoZSBgYnBmX2Z1bmNfaW5mb19hdXhgIHN0cnVjdHVyZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uICh2aWEgYGt6YWxsb2Nfb2Jqc2ApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGBkb19jaGVja19zdWJwcm9ncygpYCwgYGRvX2NoZWNrX2NvbW1vbigpYCwgYW5kIGBjaGVja19mdW5jX2NhbGwoKWAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGUgYXJyYXlzIGFyZSBpbmRleGVkIHVzaW5nIGJvb2xlYW4gdmFsdWVzICgwIG9yIDEpLCBtYXRjaGluZyB0aGUgYXJyYXkgZGltZW5zaW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IEFueSBtZW1vcnkgYWNjZXNzIGlzc3VlcyAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIGFjY2VzcywgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgc3RhdGUgYWxsb2NhdGlvbiBpc3N1ZXMsIG9yIGxvZ2ljL3ZlcmlmaWVyIHRyYXZlcnNhbCBidWdzKSB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHRyYWNrIGFuZCB2ZXJpZnkgZ2xvYmFsIHN1YnByb2dyYW0gY2FsbHMgc2VwYXJhdGVseSBmb3Igc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlL1JDVSBjb250ZXh0cy4gSXQgcmVwbGFjZXMgdGhlIHNpbmdsZS1iaXQgYGNhbGxlZGAgYW5kIGB2ZXJpZmllZGAgZmxhZ3MgaW4gYHN0cnVjdCBicGZfZnVuY19pbmZvX2F1eGAgd2l0aCB0d28tZWxlbWVudCBib29sZWFuIGFycmF5cyBpbmRleGVkIGJ5IGBpbl9zbGVlcGFibGVgLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4gVGhlIGBicGZfZnVuY19pbmZvX2F1eGAgc3RydWN0dXJlcyBhcmUgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gKHZpYSBga3phbGxvY19vYmpzYCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gYGRvX2NoZWNrX3N1YnByb2dzKClgLCBgZG9fY2hlY2tfY29tbW9uKClgLCBhbmQgYGNoZWNrX2Z1bmNfY2FsbCgpYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZSBhcnJheXMgYXJlIGluZGV4ZWQgdXNpbmcgYm9vbGVhbiB2YWx1ZXMgKDAgb3IgMSksIG1hdGNoaW5nIHRoZSBhcnJheSBkaW1lbnNpb24uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuLSBLQVNBTiAvIFN0YW5kYXJkIERldGVjdG9yczogQW55IG1lbW9yeSBhY2Nlc3MgaXNzdWVzIChzdWNoIGFzIGFycmF5IG91dC1vZi1ib3VuZHMgYWNjZXNzLCBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBzdGF0ZSBhbGxvY2F0aW9uIGlzc3Vlcywgb3IgbG9naWMvdmVyaWZpZXIgdHJhdmVyc2FsIGJ1Z3MpIHdvdWxkIGJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow2hn88[1] Phase: Succeeded StartedAt: 2026-09-06 10:06:34 +0000 UTC FinishedAt: 2026-09-06 10:06:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 10:06:34 +0000 UTC FinishedAt: 2026-09-06 10:06:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2] Phase: Succeeded StartedAt: 2026-09-06 10:06:34 +0000 UTC FinishedAt: 2026-09-06 13:48:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 10:06:34 +0000 UTC FinishedAt: 2026-09-06 13:48:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 10:06:34 +0000 UTC FinishedAt: 2026-09-06 10:06:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 10:06:34 +0000 UTC FinishedAt: 2026-09-06 10:06:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2hn88/series-workflow2hn88-convert-artifact-388840920/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 10:06:45 +0000 UTC FinishedAt: 2026-09-06 10:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 10:06:45 +0000 UTC FinishedAt: 2026-09-06 10:26:16 +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:*5ba255dd-923d-4bb2-80ae-35b9f9bec91d,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-workflow2hn88/series-workflow2hn88-convert-artifact-388840920/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": "ff029a34-f845-453e-a47a-f72feaf62512", "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-workflow2hn88/series-workflow2hn88-build-action-3608794638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 10:06:45 +0000 UTC FinishedAt: 2026-09-06 10:26:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5ba255dd-923d-4bb2-80ae-35b9f9bec91d,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-workflow2hn88/series-workflow2hn88-convert-artifact-388840920/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": "ff029a34-f845-453e-a47a-f72feaf62512", "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-workflow2hn88/series-workflow2hn88-build-action-3608794638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 10:26:16 +0000 UTC FinishedAt: 2026-09-06 10:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 10:26:16 +0000 UTC FinishedAt: 2026-09-06 10:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 10:26:16 +0000 UTC FinishedAt: 2026-09-06 10:26:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 10:26:16 +0000 UTC FinishedAt: 2026-09-06 10:26:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2hn88/series-workflow2hn88-convert-artifact-3574970943/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 10:26:26 +0000 UTC FinishedAt: 2026-09-06 10:28:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 10:26:26 +0000 UTC FinishedAt: 2026-09-06 10:28:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ff029a34-f845-453e-a47a-f72feaf62512,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-workflow2hn88/series-workflow2hn88-build-action-3608794638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 10:28:16 +0000 UTC FinishedAt: 2026-09-06 10:28:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 10:28:16 +0000 UTC FinishedAt: 2026-09-06 10:28:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 10:28:16 +0000 UTC FinishedAt: 2026-09-06 10:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 10:28:16 +0000 UTC FinishedAt: 2026-09-06 10:44:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5ba255dd-923d-4bb2-80ae-35b9f9bec91d,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-workflow2hn88/series-workflow2hn88-convert-artifact-3574970943/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": "59d3a7fb-bd2d-4ac9-afb2-0d7e17a299d8", "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-workflow2hn88/series-workflow2hn88-build-action-134987347/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 10:28:16 +0000 UTC FinishedAt: 2026-09-06 10:44:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5ba255dd-923d-4bb2-80ae-35b9f9bec91d,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-workflow2hn88/series-workflow2hn88-convert-artifact-3574970943/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": "59d3a7fb-bd2d-4ac9-afb2-0d7e17a299d8", "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-workflow2hn88/series-workflow2hn88-build-action-134987347/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 10:44:33 +0000 UTC FinishedAt: 2026-09-06 10:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 10:44:33 +0000 UTC FinishedAt: 2026-09-06 10:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 10:44:33 +0000 UTC FinishedAt: 2026-09-06 10:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 10:44:33 +0000 UTC FinishedAt: 2026-09-06 10:46:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*59d3a7fb-bd2d-4ac9-afb2-0d7e17a299d8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2hn88/series-workflow2hn88-build-action-134987347/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 10:46:24 +0000 UTC FinishedAt: 2026-09-06 13:48:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 10:46:24 +0000 UTC FinishedAt: 2026-09-06 13:48:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*ff029a34-f845-453e-a47a-f72feaf62512,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*59d3a7fb-bd2d-4ac9-afb2-0d7e17a299d8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2hn88/series-workflow2hn88-build-action-3608794638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2hn88/series-workflow2hn88-build-action-134987347/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 10:46:24 +0000 UTC FinishedAt: 2026-09-06 10:46:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 10:46:24 +0000 UTC FinishedAt: 2026-09-06 10:46:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2hn88/series-workflow2hn88-convert-artifact-3245513432/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 10:46:24 +0000 UTC FinishedAt: 2026-09-06 10:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 10:46:24 +0000 UTC FinishedAt: 2026-09-06 10:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 10:46:24 +0000 UTC FinishedAt: 2026-09-06 10:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 10:46:34 +0000 UTC FinishedAt: 2026-09-06 13:48:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2hn88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","do_check_subprogs","do_check_common","check_func_call","do_check_main"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"efa71e25-cbe2-4f6f-b01b-17ea81825a82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 10:46:34 +0000 UTC FinishedAt: 2026-09-06 13:47:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ff029a34-f845-453e-a47a-f72feaf62512,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*59d3a7fb-bd2d-4ac9-afb2-0d7e17a299d8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2hn88/series-workflow2hn88-build-action-3608794638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2hn88/series-workflow2hn88-build-action-134987347/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2hn88/series-workflow2hn88-convert-artifact-3245513432/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}