Name: series-workflowpqjc6 Phase: Succeeded StartedAt: 2026-09-01 01:12:28 +0000 UTC FinishedAt: 2026-09-01 05:11:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[0] Phase: Succeeded StartedAt: 2026-09-01 01:12:28 +0000 UTC FinishedAt: 2026-09-01 01:33:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 01:12:28 +0000 UTC FinishedAt: 2026-09-01 01:33:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_CONG_BBR", "BPF_SYSCALL", "BPF_JIT", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_CONG_BBR", "BPF_SYSCALL", "BPF_JIT", "INET" ], "series_id": "69e9a18d-4174-4f6e-975d-45c3f488c150" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcp_tso_autosize" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9DT05HX0JCUiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfdHNvX2F1dG9zaXplJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBpbnRlcmZhY2UgYnkgcmVwbGFjaW5nIHRoZSBgbWluX3Rzb19zZWdzYCBjYWxsYmFjayB3aXRoIGB0c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KWAsIHVwZGF0ZXMgQkJSIGFuZCBCUEYgY29uZ2VzdGlvbiBjb250cm9sIGhvb2tzLCBhbmQgZXhwb3J0cyBgdGNwX3Rzb19hdXRvc2l6ZWAgYXMgYSBCUEYga2Z1bmMuXG5cbkFsbCBtb2RpZmllZCBhbmQgYWRkZWQgZnVuY3Rpb25zIG9wZXJhdGUgb24gc2NhbGFyIGludGVnZXIgdmFsdWVzIHBhc3NlZCBieSB2YWx1ZSAoYHUzMmAsIGB1bnNpZ25lZCBpbnRgLCBwb2ludGVycyB0byBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgYHNvY2tgKS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyLXNwYWNlIChzdWNoIGFzIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIG9yIGlvY3RsIHJldHVybnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgaW50ZXJmYWNlIGJ5IHJlcGxhY2luZyB0aGUgbWluX3Rzb19zZWdzIGNhbGxiYWNrIHdpdGggYSB0c29fc2VncyBjYWxsYmFjaywgdXBkYXRpbmcgVENQIG91dHB1dCBsb2dpYyAodGNwX3Rzb19hdXRvc2l6ZSwgdGNwX3Rzb19zZWdzKSwgQkJSIGNvbmdlc3Rpb24gY29udHJvbCwgYW5kIEJQRiBUQ1AgQ0Egc3RydWN0X29wcy4gdGNwX3Rzb19hdXRvc2l6ZSBpcyBhbHNvIGV4cG9zZWQgYXMgYSBCUEYga2Z1bmMuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbHRlciB0aGUgVENQIHNlZ21lbnRhdGlvbiBhbmQgcGFja2V0IHNjaGVkdWxpbmcgcGF0aCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0N2ZlZWMyNGFlMjEwNDRjZjdjZGEyZjY2ZjZmYjM3NDU0YjU1MzdiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMTozMTo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oXG5pbmRleCA2NzBjMjA4NzZmMjY1Li43OWYyN2FjOWU5NjNhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcC5oXG5AQCAtODI0LDYgJiM0Mzs4MjQsOSBAQCB1bnNpZ25lZCBpbnQgdGNwX3N5bmNfbXNzKHN0cnVjdCBzb2NrICpzaywgdTMyIHBtdHUpO1xuIHVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKTtcbiB1MzIgdGNwX2NsYW1wX3Byb2JlMF90b191c2VyX3RpbWVvdXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1MzIgd2hlbik7XG4gXG4mIzQzO3UzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4mIzQzO1x0XHQgICAgIGludCBtaW5fdHNvX3NlZ3MpO1xuJiM0MztcbiAvKiBCb3VuZCBNU1MgLyBUU08gcGFja2V0IHNpemUgd2l0aCB0aGUgaGFsZiBvZiB0aGUgd2luZG93ICovXG4gc3RhdGljIGlubGluZSBpbnQgdGNwX2JvdW5kX3RvX2hhbGZfd25kKHN0cnVjdCB0Y3Bfc29jayAqdHAsIGludCBwa3RzaXplKVxuIHtcbkBAIC0xMzYxLDggJiM0MzsxMzY0LDE2IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMge1xuIFx0LyogaG9vayBmb3IgcGFja2V0IGFjayBhY2NvdW50aW5nIChvcHRpb25hbCkgKi9cbiBcdHZvaWQgKCpwa3RzX2Fja2VkKShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wbGUpO1xuIFxuLVx0Lyogb3ZlcnJpZGUgc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgKG9wdGlvbmFsKSAqL1xuLVx0dTMyICgqbWluX3Rzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2spO1xuJiM0MztcdC8qIE92ZXJyaWRlIHRjcF90c29fYXV0b3NpemUoKSAob3B0aW9uYWwpXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJZiBwcm92aWRlZCwgdGhpcyBjYWxsYmFjayBzdXBwbGllcyB0aGUgVFNPIHNlZ21lbnQgdGFyZ2V0IGNvdW50XG4mIzQzO1x0ICogaW5zdGVhZCBvZiB1c2luZyB0Y3BfdHNvX2F1dG9zaXplKCkuIFRoZSByZXR1cm5lZCB2YWx1ZSBpc1xuJiM0MztcdCAqIHN1YnNlcXVlbnRseSBjbGFtcGVkIHRvIFsxLCBzay1cdTAwM2Vza19nc29fbWF4X3NlZ3NdIGJ5IHRoZSBjYWxsZXIuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBGb3IgdGhlIGtlcm5lbCBjYWxsYmFjayBwYXRoLCBtc3Nfbm93IG9yaWdpbmF0ZXMgZnJvbVxuJiM0MztcdCAqIHRjcF9jdXJyZW50X21zcygpIGFuZCBzaG91bGQgbmV2ZXIgYmUgemVyby5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1MzIgKCp0c29fc2Vncykoc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdyk7XG4gXG4gXHQvKiBuZXcgdmFsdWUgb2YgY3duZCBhZnRlciBsb3NzIChyZXF1aXJlZCkgKi9cbiBcdHUzMiAgKCp1bmRvX2N3bmQpKHN0cnVjdCBzb2NrICpzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYnBmX3RjcF9jYS5jIGIvbmV0L2lwdjQvYnBmX3RjcF9jYS5jXG5pbmRleCA3OTFlMTUwNjMyMzdjLi45ZGVlZDIyNDRjMmRlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvYnBmX3RjcF9jYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9icGZfdGNwX2NhLmNcbkBAIC0xOTQsNiAmIzQzOzE5NCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfcmVub19jb25nX2F2b2lkKVxuIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfcmVub191bmRvX2N3bmQpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF9zbG93X3N0YXJ0KVxuIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfY29uZ19hdm9pZF9haSlcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF90c29fYXV0b3NpemUpXG4gQlRGX0tGVU5DU19FTkQoYnBmX3RjcF9jYV9jaGVja19rZnVuY19pZHMpXG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl90Y3BfY2Ffa2Z1bmNfc2V0ID0ge1xuQEAgLTI4NCw3ICYjNDM7Mjg1LDcgQEAgc3RhdGljIHZvaWQgYnBmX3RjcF9jYV9wa3RzX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBcbiB7XG4gfVxuIFxuLXN0YXRpYyB1MzIgYnBmX3RjcF9jYV9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKVxuJiM0MztzdGF0aWMgdTMyIGJwZl90Y3BfY2FfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzIwLDcgJiM0MzszMjEsNyBAQCBzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBfX2JwZl9vcHNfdGNwX2Nvbmdlc3Rpb25fb3BzID0ge1xuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnQgPSBicGZfdGNwX2NhX2N3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuaW5fYWNrX2V2ZW50ID0gYnBmX3RjcF9jYV9pbl9hY2tfZXZlbnQsXG4gXHQucGt0c19hY2tlZCA9IGJwZl90Y3BfY2FfcGt0c19hY2tlZCxcbi1cdC5taW5fdHNvX3NlZ3MgPSBicGZfdGNwX2NhX21pbl90c29fc2VncyxcbiYjNDM7XHQudHNvX3NlZ3MgPSBicGZfdGNwX2NhX3Rzb19zZWdzLFxuIFx0LmNvbmdfY29udHJvbCA9IGJwZl90Y3BfY2FfY29uZ19jb250cm9sLFxuIFx0LnVuZG9fY3duZCA9IGJwZl90Y3BfY2FfdW5kb19jd25kLFxuIFx0LnNuZGJ1Zl9leHBhbmQgPSBicGZfdGNwX2NhX3NuZGJ1Zl9leHBhbmQsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2Jici5jIGIvbmV0L2lwdjQvdGNwX2Jici5jXG5pbmRleCA4MjM3OGEyYmZkMWUxLi5lY2YxMWJlNDZmMzgyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2Jici5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYmJyLmNcbkBAIC0yOTcsMTEgJiM0MzsyOTcsMTggQEAgc3RhdGljIHZvaWQgYmJyX3NldF9wYWNpbmdfcmF0ZShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBidywgaW50IGdhaW4pXG4gfVxuIFxuIC8qIG92ZXJyaWRlIHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzICovXG4tX19icGZfa2Z1bmMgc3RhdGljIHUzMiBiYnJfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7c3RhdGljIHUzMiBiYnJfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3BhY2luZ19yYXRlKSBcdTAwM2MgKGJicl9taW5fdHNvX3JhdGUgXHUwMDNlXHUwMDNlIDMpID8gMSA6IDI7XG4gfVxuIFxuJiM0MztfX2JwZl9rZnVuYyBzdGF0aWMgdTMyIGJicl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFtc3Nfbm93KSlcbiYjNDM7XHRcdHJldHVybiBiYnJfbWluX3Rzb19zZWdzKHNrKTtcbiYjNDM7XHRyZXR1cm4gdGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdywgYmJyX21pbl90c29fc2VncyhzaykpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzX2dvYWwoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuQEAgLTExNTEsNyAmIzQzOzExNTgsNyBAQCBzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfYmJyX2Nvbmdfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4gXHQudW5kb19jd25kXHQ9IGJicl91bmRvX2N3bmQsXG4gXHQuY3duZF9ldmVudF90eF9zdGFydFx0PSBiYnJfY3duZF9ldmVudF90eF9zdGFydCxcbiBcdC5zc3RocmVzaFx0PSBiYnJfc3N0aHJlc2gsXG4tXHQubWluX3Rzb19zZWdzXHQ9IGJicl9taW5fdHNvX3NlZ3MsXG4mIzQzO1x0LnRzb19zZWdzXHQ9IGJicl90c29fc2VncyxcbiBcdC5nZXRfaW5mb1x0PSBiYnJfZ2V0X2luZm8sXG4gXHQuc2V0X3N0YXRlXHQ9IGJicl9zZXRfc3RhdGUsXG4gfTtcbkBAIC0xMTYzLDcgJiM0MzsxMTcwLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9zbmRidWZfZXhwYW5kKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfdW5kb19jd25kKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfY3duZF9ldmVudF90eF9zdGFydClcbiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NzdGhyZXNoKVxuLUJURl9JRF9GTEFHUyhmdW5jLCBiYnJfbWluX3Rzb19zZWdzKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYmJyX3Rzb19zZWdzKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfc2V0X3N0YXRlKVxuIEJURl9LRlVOQ1NfRU5EKHRjcF9iYnJfY2hlY2tfa2Z1bmNfaWRzKVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuaW5kZXggNmY0ZGNhNGE0ZGU5OC4uYjdmMmVlNWU3YTZiMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5AQCAtMjI1MiwxMyAmIzQzOzIyNTIsMjEgQEAgc3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcbiAgKiBpbiBiaWdnZXIgVFNPIGJ1cnN0cy4gV2Ugd2UgY3V0IHRoZSBSVFQtYmFzZWQgYWxsb3dhbmNlIGluIGhhbGZcbiAgKiBmb3IgZXZlcnkgMl45IHVzZWMgKGFrYSA1MTIgdXMpIG9mIFJUVCwgc28gdGhhdCB0aGUgUlRULWJhc2VkIGFsbG93YW5jZVxuICAqIGlzIGJlbG93IDE1MDAgYnl0ZXMgYWZ0ZXIgNiAqIH41MDAgdXNlYyA9IDNtcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIG1pbl90c29fc2VncyBpcyBmbG9vcmVkIHRvIDEgdG8gYXZvaWQgc3VycHJpc2luZyBjb252ZXJzaW9uLiBBbHNvLFxuJiM0MzsgKiBCUEYgY2FsbGVycyBtYXkgcGFzcyBtc3Nfbm93ID09IDAuIEluIHRoYXQgY2FzZSB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGVcbiYjNDM7ICogc2FuaXRpemVkIG1pbl90c29fc2VncyB2YWx1ZSBhbmQgc2tpcHMgYXV0b3NpemluZy5cbiAgKi9cbi1zdGF0aWMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcbi1cdFx0XHQgICAgaW50IG1pbl90c29fc2VncylcbiYjNDM7X19icGZfa2Z1bmMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcbiYjNDM7XHRcdFx0XHQgaW50IG1pbl90c29fc2VncylcbiB7XG4mIzQzO1x0dTMyIG1pbl90c28gPSBtYXgobWluX3Rzb19zZWdzLCAxKTtcbiBcdHVuc2lnbmVkIGxvbmcgYnl0ZXM7XG4gXHR1MzIgcjtcbiBcbiYjNDM7XHRpZiAodW5saWtlbHkoIW1zc19ub3cpKVxuJiM0MztcdFx0cmV0dXJuIG1pbl90c287XG4mIzQzO1xuIFx0Ynl0ZXMgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcGFjaW5nX3JhdGUpIFx1MDAzZVx1MDAzZSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcGFjaW5nX3NoaWZ0KTtcbiBcbiBcdHIgPSB0Y3BfbWluX3J0dCh0Y3Bfc2soc2spKSBcdTAwM2VcdTAwM2UgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfdHNvX3J0dF9sb2cpO1xuQEAgLTIyNjcsOCAmIzQzOzIyNzUsOSBAQCBzdGF0aWMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcbiBcbiBcdGJ5dGVzID0gbWluX3QodW5zaWduZWQgbG9uZywgYnl0ZXMsIHNrLVx1MDAzZXNrX2dzb19tYXhfc2l6ZSk7XG4gXG4tXHRyZXR1cm4gbWF4X3QodTMyLCBieXRlcyAvIG1zc19ub3csIG1pbl90c29fc2Vncyk7XG4mIzQzO1x0cmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvKTtcbiB9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHRjcF90c29fYXV0b3NpemUpO1xuIFxuIC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIHdlIHdhbnQgaW4gdGhlIHNrYiB3ZSBhcmUgdHJhbnNtaXR0aW5nLlxuICAqIFNlZSBpZiBjb25nZXN0aW9uIGNvbnRyb2wgbW9kdWxlIHdhbnRzIHRvIGRlY2lkZTsgb3RoZXJ3aXNlLCBhdXRvc2l6ZS5cbkBAIC0yMjc2LDE0ICYjNDM7MjI4NSwxMyBAQCBzdGF0aWMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcbiBzdGF0aWMgdTMyIHRjcF90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcyA9IGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2NhX29wcztcbi1cdHUzMiBtaW5fdHNvLCB0c29fc2Vncztcbi1cbi1cdG1pbl90c28gPSBjYV9vcHMtXHUwMDNlbWluX3Rzb19zZWdzID9cbi1cdFx0XHRjYV9vcHMtXHUwMDNlbWluX3Rzb19zZWdzKHNrKSA6XG4tXHRcdFx0UkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfbWluX3Rzb19zZWdzKTtcbiYjNDM7XHR1MzIgdHNvX3NlZ3M7XG4gXG4tXHR0c29fc2VncyA9IHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIG1pbl90c28pO1xuLVx0cmV0dXJuIG1pbl90KHUzMiwgdHNvX3NlZ3MsIHNrLVx1MDAzZXNrX2dzb19tYXhfc2Vncyk7XG4mIzQzO1x0dHNvX3NlZ3MgPSBjYV9vcHMtXHUwMDNldHNvX3NlZ3MgP1xuJiM0MztcdFx0XHRjYV9vcHMtXHUwMDNldHNvX3NlZ3Moc2ssIG1zc19ub3cpIDpcbiYjNDM7XHRcdFx0dGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdyxcbiYjNDM7XHRcdFx0XHRcdCBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MpKTtcbiYjNDM7XHRyZXR1cm4gY2xhbXBfdCh1MzIsIHRzb19zZWdzLCAxLCBzay1cdTAwM2Vza19nc29fbWF4X3NlZ3MpO1xuIH1cbiBcbiAvKiBSZXR1cm5zIHRoZSBwb3J0aW9uIG9mIHNrYiB3aGljaCBjYW4gYmUgc2VudCByaWdodCBhd2F5ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jXG5pbmRleCAwYTNlOWQzNWJmNmYwLi41ODI2MmU0OTAzMzY0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmNcbkBAIC0xMCw3ICYjNDM7MTAsNyBAQCBleHRlcm4gdTMyIGJicl9zbmRidWZfZXhwYW5kKHN0cnVjdCBzb2NrICpzaykgX19rc3ltO1xuIGV4dGVybiB1MzIgYmJyX3VuZG9fY3duZChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBiYnJfY3duZF9ldmVudF90eF9zdGFydChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbiBleHRlcm4gdTMyIGJicl9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbi1leHRlcm4gdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07XG4mIzQzO2V4dGVybiB1MzIgYmJyX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBiYnJfc2V0X3N0YXRlKHN0cnVjdCBzb2NrICpzaywgdTggbmV3X3N0YXRlKSBfX2tzeW07XG4gXG4gZXh0ZXJuIHZvaWQgZGN0Y3BfaW5pdChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbkBAIC05MCw5ICYjNDM7OTAsOSBAQCB1MzIgQlBGX1BST0coc3N0aHJlc2gsIHN0cnVjdCBzb2NrICpzaylcbiB9XG4gXG4gU0VDKFwmIzM0O3N0cnVjdF9vcHNcJiMzNDspXG4tdTMyIEJQRl9QUk9HKG1pbl90c29fc2Vncywgc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt1MzIgQlBGX1BST0codHNvX3NlZ3MsIHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXG4ge1xuLVx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xuJiM0MztcdHJldHVybiBiYnJfdHNvX3NlZ3Moc2ssIG1zc19ub3cpO1xuIH1cbiBcbiBTRUMoXCYjMzQ7c3RydWN0X29wc1wmIzM0OylcbkBAIC0xMjAsNyAmIzQzOzEyMCw3IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2NhX2tmdW5jID0ge1xuIFx0LmN3bmRfZXZlbnRcdD0gKHZvaWQgKiljd25kX2V2ZW50LFxuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnQgPSAodm9pZCAqKWN3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuc3N0aHJlc2hcdD0gKHZvaWQgKilzc3RocmVzaCxcbi1cdC5taW5fdHNvX3NlZ3NcdD0gKHZvaWQgKiltaW5fdHNvX3NlZ3MsXG4mIzQzO1x0LnRzb19zZWdzXHQ9ICh2b2lkICopdHNvX3NlZ3MsXG4gXHQuc2V0X3N0YXRlXHQ9ICh2b2lkICopc2V0X3N0YXRlLFxuIFx0LnBrdHNfYWNrZWQgICAgID0gKHZvaWQgKilwa3RzX2Fja2VkLFxuIFx0Lm5hbWVcdFx0PSBcJiMzNDt0Y3BfY2Ffa2Z1bmNcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VENQX0NPTkdfQkJSJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF90c29fYXV0b3NpemUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBpbnRlcmZhY2UgYnkgcmVwbGFjaW5nIHRoZSBtaW5fdHNvX3NlZ3MgY2FsbGJhY2sgd2l0aCBhIHRzb19zZWdzIGNhbGxiYWNrLCB1cGRhdGluZyBUQ1Agb3V0cHV0IGxvZ2ljICh0Y3BfdHNvX2F1dG9zaXplLCB0Y3BfdHNvX3NlZ3MpLCBCQlIgY29uZ2VzdGlvbiBjb250cm9sLCBhbmQgQlBGIFRDUCBDQSBzdHJ1Y3Rfb3BzLiB0Y3BfdHNvX2F1dG9zaXplIGlzIGFsc28gZXhwb3NlZCBhcyBhIEJQRiBrZnVuYy4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFsdGVyIHRoZSBUQ1Agc2VnbWVudGF0aW9uIGFuZCBwYWNrZXQgc2NoZWR1bGluZyBwYXRoIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ3ZmVlYzI0YWUyMTA0NGNmN2NkYTJmNjZmNmZiMzc0NTRiNTUzN2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDAxOjMxOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCA2NzBjMjA4NzZmMjY1Li43OWYyN2FjOWU5NjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtODI0LDYgJiM0Mzs4MjQsOSBAQCB1bnNpZ25lZCBpbnQgdGNwX3N5bmNfbXNzKHN0cnVjdCBzb2NrICpzaywgdTMyIHBtdHUpOwogdW5zaWduZWQgaW50IHRjcF9jdXJyZW50X21zcyhzdHJ1Y3Qgc29jayAqc2spOwogdTMyIHRjcF9jbGFtcF9wcm9iZTBfdG9fdXNlcl90aW1lb3V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdTMyIHdoZW4pOwogCiYjNDM7dTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdywKJiM0MzsJCSAgICAgaW50IG1pbl90c29fc2Vncyk7CiYjNDM7CiAvKiBCb3VuZCBNU1MgLyBUU08gcGFja2V0IHNpemUgd2l0aCB0aGUgaGFsZiBvZiB0aGUgd2luZG93ICovCiBzdGF0aWMgaW5saW5lIGludCB0Y3BfYm91bmRfdG9faGFsZl93bmQoc3RydWN0IHRjcF9zb2NrICp0cCwgaW50IHBrdHNpemUpCiB7CkBAIC0xMzYxLDggJiM0MzsxMzY0LDE2IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgewogCS8qIGhvb2sgZm9yIHBhY2tldCBhY2sgYWNjb3VudGluZyAob3B0aW9uYWwpICovCiAJdm9pZCAoKnBrdHNfYWNrZWQpKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBsZSk7CiAKLQkvKiBvdmVycmlkZSBzeXNjdGxfdGNwX21pbl90c29fc2VncyAob3B0aW9uYWwpICovCi0JdTMyICgqbWluX3Rzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2spOwomIzQzOwkvKiBPdmVycmlkZSB0Y3BfdHNvX2F1dG9zaXplKCkgKG9wdGlvbmFsKQomIzQzOwkgKgomIzQzOwkgKiBJZiBwcm92aWRlZCwgdGhpcyBjYWxsYmFjayBzdXBwbGllcyB0aGUgVFNPIHNlZ21lbnQgdGFyZ2V0IGNvdW50CiYjNDM7CSAqIGluc3RlYWQgb2YgdXNpbmcgdGNwX3Rzb19hdXRvc2l6ZSgpLiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMKJiM0MzsJICogc3Vic2VxdWVudGx5IGNsYW1wZWQgdG8gWzEsIHNrLSZndDtza19nc29fbWF4X3NlZ3NdIGJ5IHRoZSBjYWxsZXIuCiYjNDM7CSAqCiYjNDM7CSAqIEZvciB0aGUga2VybmVsIGNhbGxiYWNrIHBhdGgsIG1zc19ub3cgb3JpZ2luYXRlcyBmcm9tCiYjNDM7CSAqIHRjcF9jdXJyZW50X21zcygpIGFuZCBzaG91bGQgbmV2ZXIgYmUgemVyby4KJiM0MzsJICovCiYjNDM7CXUzMiAoKnRzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KTsKIAogCS8qIG5ldyB2YWx1ZSBvZiBjd25kIGFmdGVyIGxvc3MgKHJlcXVpcmVkKSAqLwogCXUzMiAgKCp1bmRvX2N3bmQpKHN0cnVjdCBzb2NrICpzayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9icGZfdGNwX2NhLmMgYi9uZXQvaXB2NC9icGZfdGNwX2NhLmMKaW5kZXggNzkxZTE1MDYzMjM3Yy4uOWRlZWQyMjQ0YzJkZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYnBmX3RjcF9jYS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2JwZl90Y3BfY2EuYwpAQCAtMTk0LDYgJiM0MzsxOTQsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Jlbm9fY29uZ19hdm9pZCkKIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfcmVub191bmRvX2N3bmQpCiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Nsb3dfc3RhcnQpCiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX2NvbmdfYXZvaWRfYWkpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF90c29fYXV0b3NpemUpCiBCVEZfS0ZVTkNTX0VORChicGZfdGNwX2NhX2NoZWNrX2tmdW5jX2lkcykKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl90Y3BfY2Ffa2Z1bmNfc2V0ID0gewpAQCAtMjg0LDcgJiM0MzsyODUsNyBAQCBzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3BrdHNfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcAogewogfQogCi1zdGF0aWMgdTMyIGJwZl90Y3BfY2FfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaykKJiM0MztzdGF0aWMgdTMyIGJwZl90Y3BfY2FfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdykKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTMyMCw3ICYjNDM7MzIxLDcgQEAgc3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgX19icGZfb3BzX3RjcF9jb25nZXN0aW9uX29wcyA9IHsKIAkuY3duZF9ldmVudF90eF9zdGFydCA9IGJwZl90Y3BfY2FfY3duZF9ldmVudF90eF9zdGFydCwKIAkuaW5fYWNrX2V2ZW50ID0gYnBmX3RjcF9jYV9pbl9hY2tfZXZlbnQsCiAJLnBrdHNfYWNrZWQgPSBicGZfdGNwX2NhX3BrdHNfYWNrZWQsCi0JLm1pbl90c29fc2VncyA9IGJwZl90Y3BfY2FfbWluX3Rzb19zZWdzLAomIzQzOwkudHNvX3NlZ3MgPSBicGZfdGNwX2NhX3Rzb19zZWdzLAogCS5jb25nX2NvbnRyb2wgPSBicGZfdGNwX2NhX2NvbmdfY29udHJvbCwKIAkudW5kb19jd25kID0gYnBmX3RjcF9jYV91bmRvX2N3bmQsCiAJLnNuZGJ1Zl9leHBhbmQgPSBicGZfdGNwX2NhX3NuZGJ1Zl9leHBhbmQsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYmJyLmMgYi9uZXQvaXB2NC90Y3BfYmJyLmMKaW5kZXggODIzNzhhMmJmZDFlMS4uZWNmMTFiZTQ2ZjM4MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2Jici5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9iYnIuYwpAQCAtMjk3LDExICYjNDM7Mjk3LDE4IEBAIHN0YXRpYyB2b2lkIGJicl9zZXRfcGFjaW5nX3JhdGUoc3RydWN0IHNvY2sgKnNrLCB1MzIgYncsIGludCBnYWluKQogfQogCiAvKiBvdmVycmlkZSBzeXNjdGxfdGNwX21pbl90c29fc2VncyAqLwotX19icGZfa2Z1bmMgc3RhdGljIHUzMiBiYnJfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaykKJiM0MztzdGF0aWMgdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKQogewogCXJldHVybiBSRUFEX09OQ0Uoc2stJmd0O3NrX3BhY2luZ19yYXRlKSAmbHQ7IChiYnJfbWluX3Rzb19yYXRlICZndDsmZ3Q7IDMpID8gMSA6IDI7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyBzdGF0aWMgdTMyIGJicl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KCFtc3Nfbm93KSkKJiM0MzsJCXJldHVybiBiYnJfbWluX3Rzb19zZWdzKHNrKTsKJiM0MzsJcmV0dXJuIHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIGJicl9taW5fdHNvX3NlZ3Moc2spKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdTMyIGJicl90c29fc2Vnc19nb2FsKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKQEAgLTExNTEsNyAmIzQzOzExNTgsNyBAQCBzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfYmJyX2Nvbmdfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CiAJLnVuZG9fY3duZAk9IGJicl91bmRvX2N3bmQsCiAJLmN3bmRfZXZlbnRfdHhfc3RhcnQJPSBiYnJfY3duZF9ldmVudF90eF9zdGFydCwKIAkuc3N0aHJlc2gJPSBiYnJfc3N0aHJlc2gsCi0JLm1pbl90c29fc2Vncwk9IGJicl9taW5fdHNvX3NlZ3MsCiYjNDM7CS50c29fc2Vncwk9IGJicl90c29fc2VncywKIAkuZ2V0X2luZm8JPSBiYnJfZ2V0X2luZm8sCiAJLnNldF9zdGF0ZQk9IGJicl9zZXRfc3RhdGUsCiB9OwpAQCAtMTE2Myw3ICYjNDM7MTE3MCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfc25kYnVmX2V4cGFuZCkKIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfdW5kb19jd25kKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9jd25kX2V2ZW50X3R4X3N0YXJ0KQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9zc3RocmVzaCkKLUJURl9JRF9GTEFHUyhmdW5jLCBiYnJfbWluX3Rzb19zZWdzKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBiYnJfdHNvX3NlZ3MpCiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NldF9zdGF0ZSkKIEJURl9LRlVOQ1NfRU5EKHRjcF9iYnJfY2hlY2tfa2Z1bmNfaWRzKQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggNmY0ZGNhNGE0ZGU5OC4uYjdmMmVlNWU3YTZiMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtMjI1MiwxMyAmIzQzOzIyNTIsMjEgQEAgc3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCwKICAqIGluIGJpZ2dlciBUU08gYnVyc3RzLiBXZSB3ZSBjdXQgdGhlIFJUVC1iYXNlZCBhbGxvd2FuY2UgaW4gaGFsZgogICogZm9yIGV2ZXJ5IDJeOSB1c2VjIChha2EgNTEyIHVzKSBvZiBSVFQsIHNvIHRoYXQgdGhlIFJUVC1iYXNlZCBhbGxvd2FuY2UKICAqIGlzIGJlbG93IDE1MDAgYnl0ZXMgYWZ0ZXIgNiAqIH41MDAgdXNlYyA9IDNtcy4KJiM0MzsgKgomIzQzOyAqIFRoZSBtaW5fdHNvX3NlZ3MgaXMgZmxvb3JlZCB0byAxIHRvIGF2b2lkIHN1cnByaXNpbmcgY29udmVyc2lvbi4gQWxzbywKJiM0MzsgKiBCUEYgY2FsbGVycyBtYXkgcGFzcyBtc3Nfbm93ID09IDAuIEluIHRoYXQgY2FzZSB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUKJiM0MzsgKiBzYW5pdGl6ZWQgbWluX3Rzb19zZWdzIHZhbHVlIGFuZCBza2lwcyBhdXRvc2l6aW5nLgogICovCi1zdGF0aWMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdywKLQkJCSAgICBpbnQgbWluX3Rzb19zZWdzKQomIzQzO19fYnBmX2tmdW5jIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csCiYjNDM7CQkJCSBpbnQgbWluX3Rzb19zZWdzKQogewomIzQzOwl1MzIgbWluX3RzbyA9IG1heChtaW5fdHNvX3NlZ3MsIDEpOwogCXVuc2lnbmVkIGxvbmcgYnl0ZXM7CiAJdTMyIHI7CiAKJiM0MzsJaWYgKHVubGlrZWx5KCFtc3Nfbm93KSkKJiM0MzsJCXJldHVybiBtaW5fdHNvOwomIzQzOwogCWJ5dGVzID0gUkVBRF9PTkNFKHNrLSZndDtza19wYWNpbmdfcmF0ZSkgJmd0OyZndDsgUkVBRF9PTkNFKHNrLSZndDtza19wYWNpbmdfc2hpZnQpOwogCiAJciA9IHRjcF9taW5fcnR0KHRjcF9zayhzaykpICZndDsmZ3Q7IFJFQURfT05DRShzb2NrX25ldChzayktJmd0O2lwdjQuc3lzY3RsX3RjcF90c29fcnR0X2xvZyk7CkBAIC0yMjY3LDggJiM0MzsyMjc1LDkgQEAgc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csCiAKIAlieXRlcyA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGJ5dGVzLCBzay0mZ3Q7c2tfZ3NvX21heF9zaXplKTsKIAotCXJldHVybiBtYXhfdCh1MzIsIGJ5dGVzIC8gbXNzX25vdywgbWluX3Rzb19zZWdzKTsKJiM0MzsJcmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvKTsKIH0KJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfdHNvX2F1dG9zaXplKTsKIAogLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMgd2Ugd2FudCBpbiB0aGUgc2tiIHdlIGFyZSB0cmFuc21pdHRpbmcuCiAgKiBTZWUgaWYgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZSB3YW50cyB0byBkZWNpZGU7IG90aGVyd2lzZSwgYXV0b3NpemUuCkBAIC0yMjc2LDE0ICYjNDM7MjI4NSwxMyBAQCBzdGF0aWMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdywKIHN0YXRpYyB1MzIgdGNwX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3cpCiB7CiAJY29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2Ffb3BzID0gaW5ldF9jc2soc2spLSZndDtpY3NrX2NhX29wczsKLQl1MzIgbWluX3RzbywgdHNvX3NlZ3M7Ci0KLQltaW5fdHNvID0gY2Ffb3BzLSZndDttaW5fdHNvX3NlZ3MgPwotCQkJY2Ffb3BzLSZndDttaW5fdHNvX3NlZ3Moc2spIDoKLQkJCVJFQURfT05DRShzb2NrX25ldChzayktJmd0O2lwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MpOwomIzQzOwl1MzIgdHNvX3NlZ3M7CiAKLQl0c29fc2VncyA9IHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIG1pbl90c28pOwotCXJldHVybiBtaW5fdCh1MzIsIHRzb19zZWdzLCBzay0mZ3Q7c2tfZ3NvX21heF9zZWdzKTsKJiM0MzsJdHNvX3NlZ3MgPSBjYV9vcHMtJmd0O3Rzb19zZWdzID8KJiM0MzsJCQljYV9vcHMtJmd0O3Rzb19zZWdzKHNrLCBtc3Nfbm93KSA6CiYjNDM7CQkJdGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdywKJiM0MzsJCQkJCSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLSZndDtpcHY0LnN5c2N0bF90Y3BfbWluX3Rzb19zZWdzKSk7CiYjNDM7CXJldHVybiBjbGFtcF90KHUzMiwgdHNvX3NlZ3MsIDEsIHNrLSZndDtza19nc29fbWF4X3NlZ3MpOwogfQogCiAvKiBSZXR1cm5zIHRoZSBwb3J0aW9uIG9mIHNrYiB3aGljaCBjYW4gYmUgc2VudCByaWdodCBhd2F5ICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmMKaW5kZXggMGEzZTlkMzViZjZmMC4uNTgyNjJlNDkwMzM2NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYwpAQCAtMTAsNyAmIzQzOzEwLDcgQEAgZXh0ZXJuIHUzMiBiYnJfc25kYnVmX2V4cGFuZChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTsKIGV4dGVybiB1MzIgYmJyX3VuZG9fY3duZChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTsKIGV4dGVybiB2b2lkIGJicl9jd25kX2V2ZW50X3R4X3N0YXJ0KHN0cnVjdCBzb2NrICpzaykgX19rc3ltOwogZXh0ZXJuIHUzMiBiYnJfc3N0aHJlc2goc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07Ci1leHRlcm4gdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07CiYjNDM7ZXh0ZXJuIHUzMiBiYnJfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdykgX19rc3ltOwogZXh0ZXJuIHZvaWQgYmJyX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIHU4IG5ld19zdGF0ZSkgX19rc3ltOwogCiBleHRlcm4gdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaykgX19rc3ltOwpAQCAtOTAsOSAmIzQzOzkwLDkgQEAgdTMyIEJQRl9QUk9HKHNzdGhyZXNoLCBzdHJ1Y3Qgc29jayAqc2spCiB9CiAKIFNFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKLXUzMiBCUEZfUFJPRyhtaW5fdHNvX3NlZ3MsIHN0cnVjdCBzb2NrICpzaykKJiM0Mzt1MzIgQlBGX1BST0codHNvX3NlZ3MsIHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpCiB7Ci0JcmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spOwomIzQzOwlyZXR1cm4gYmJyX3Rzb19zZWdzKHNrLCBtc3Nfbm93KTsKIH0KIAogU0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQpAQCAtMTIwLDcgJiM0MzsxMjAsNyBAQCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9jYV9rZnVuYyA9IHsKIAkuY3duZF9ldmVudAk9ICh2b2lkICopY3duZF9ldmVudCwKIAkuY3duZF9ldmVudF90eF9zdGFydCA9ICh2b2lkICopY3duZF9ldmVudF90eF9zdGFydCwKIAkuc3N0aHJlc2gJPSAodm9pZCAqKXNzdGhyZXNoLAotCS5taW5fdHNvX3NlZ3MJPSAodm9pZCAqKW1pbl90c29fc2VncywKJiM0MzsJLnRzb19zZWdzCT0gKHZvaWQgKil0c29fc2VncywKIAkuc2V0X3N0YXRlCT0gKHZvaWQgKilzZXRfc3RhdGUsCiAJLnBrdHNfYWNrZWQgICAgID0gKHZvaWQgKilwa3RzX2Fja2VkLAogCS5uYW1lCQk9ICYjMzQ7dGNwX2NhX2tmdW5jJiMzNDssCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUU08gU2VnbWVudCBDb3VudCBhbmQgQlBGIEludGVncmF0aW9uKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgcmV2YW1wZWQgaG93IHRoZSBUU08gc2VnbWVudCBjb3VudCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBzdHJ1Y3R1cmUuIEluc3RlYWQgb2YgYSBgbWluX3Rzb19zZWdzYCBjYWxsYmFjaywgd2Ugbm93IGhhdmUgYSBgdHNvX3NlZ3NgIGNhbGxiYWNrIHRoYXQgdGFrZXMgdGhlIHNvY2tldCAoYHNrYCkgYW5kIHRoZSBjdXJyZW50IE1heGltdW0gU2VnbWVudCBTaXplIChgbXNzX25vd2ApIGFzIGlucHV0IGFuZCBkaXJlY3RseSByZXR1cm5zIHRoZSBUU08gc2VnbWVudCBjb3VudC4gVGhhdCYjMzk7cyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCBpbiB0aGUgaW50ZXJmYWNlLCBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtcywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGFyZSBCUEYtYmFzZWQuCgpBbHNvLCBleHBvcnRpbmcgYHRjcF90c29fYXV0b3NpemVgIGFzIGJvdGggYSBCUEYga2Z1bmMgYW5kIGEgcmVndWxhciBzeW1ib2wgaXMgaW50ZXJlc3RpbmcuIFRoYXQgb3BlbnMgdXAgc29tZSBwb3NzaWJpbGl0aWVzIGZvciB1c2Vyc3BhY2UgY29udHJvbCBvciBkeW5hbWljIGFkanVzdG1lbnRzLCB3aGljaCBjb3VsZCBiZSB1c2VmdWwuIFRoZSB1cGRhdGVzIHRvIHRoZSBCUEYgVENQIGNvbmdlc3Rpb24gY29udHJvbCBgc3RydWN0X29wc2AgYW5kIHRoZSBCQlIgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBhcmUgZXhwZWN0ZWQsIHNpbmNlIHRoZXJlJiMzOTtzIGEgbmV3IGludGVyZmFjZS4gTm93IEkgaGF2ZSB0byBsb29rIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGF0LgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgY2hhbmdlcyBhcmUgZ29pbmcgdG8gYmUgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMuIFRoZSBpbmNsdWRlZCBmaWxlczogYGluY2x1ZGUvbmV0L3RjcC5oYCwgYG5ldC9pcHY0L2JwZl90Y3BfY2EuY2AsIGBuZXQvaXB2NC90Y3BfYmJyLmNgLCBgbmV0L2lwdjQvdGNwX291dHB1dC5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmNgLiBJIGhhdmUgdG8gZGlnIGludG8gdGhvc2UgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobXMgaGF2ZSBiZWVuIGNoYW5nZWQuCgpTbywgSeKAmWxsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGBuZXQvaXB2NC90Y3Bfb3V0cHV0LmNgIHRvIHNlZSBob3cgaXQgdXNlcyB0aGUgbmV3IGB0c29fc2VncygpYCBhbmQgdGhlbiBsb29rIGF0IHRoZSBjaGFuZ2VzIHRvIHRoZSBCQlIgYW5kIEJQRiBjb25nZXN0aW9uIGNvbnRyb2wgaW1wbGVtZW50YXRpb25zLiBJJiMzOTtsbCBwcm9iYWJseSB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLCBhcyB3ZWxsIGFzIHRvIGxvb2sgZm9yIGNvbmZpZ3MgYW5kIHRoZSBhZmZlY3RlZCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3Rzb19hdXRvc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2JwZl90Y3BfY2EuYz0xOTY9QlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF9jb25nX2F2b2lkX2FpKVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjE5NzpCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Rzb19hdXRvc2l6ZSlcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xOTgtQlRGX0tGVU5DU19FTkQoYnBmX3RjcF9jYV9jaGVja19rZnVuY19pZHMpXG4tLVxubmV0L2lwdjQvdGNwLmM9OTU3PXN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3htaXRfc2l6ZV9nb2FsKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3csXG4tLVxubmV0L2lwdjQvdGNwLmMtOTY1LVxubmV0L2lwdjQvdGNwLmM6OTY2Olx0LyogTm90ZSA6IHRjcF90c29fYXV0b3NpemUoKSB3aWxsIGV2ZW50dWFsbHkgc3BsaXQgdGhpcyBsYXRlciAqL1xubmV0L2lwdjQvdGNwLmMtOTY3LVx0bmV3X3NpemVfZ29hbCA9IHRjcF9ib3VuZF90b19oYWxmX3duZCh0cCwgc2stXHUwMDNlc2tfZ3NvX21heF9zaXplKTtcbi0tXG5uZXQvaXB2NC90Y3BfYmJyLmM9MzA1PV9fYnBmX2tmdW5jIHN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXG4tLVxubmV0L2lwdjQvdGNwX2Jici5jLTMwOC1cdFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xubmV0L2lwdjQvdGNwX2Jici5jOjMwOTpcdHJldHVybiB0Y3BfdHNvX2F1dG9zaXplKHNrLCBtc3Nfbm93LCBiYnJfbWluX3Rzb19zZWdzKHNrKSk7XG5uZXQvaXB2NC90Y3BfYmJyLmMtMzEwLX1cbi0tXG5uZXQvaXB2NC90Y3BfYmJyLmM9MzEyPXN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzX2dvYWwoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYy0zMTYtXG5uZXQvaXB2NC90Y3BfYmJyLmM6MzE3Olx0LyogU29ydCBvZiB0Y3BfdHNvX2F1dG9zaXplKCkgYnV0IGlnbm9yaW5nXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzE4LVx0ICogZHJpdmVyIHByb3ZpZGVkIHNrX2dzb19tYXhfc2l6ZS5cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjIzND1zdGF0aWMgYm9vbCB0Y3BfbmFnbGVfY2hlY2soYm9vbCBwYXJ0aWFsLCBjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjU5LSAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNjA6X19icGZfa2Z1bmMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjYxLVx0XHRcdFx0IGludCBtaW5fdHNvX3NlZ3MpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNzktfVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyODA6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3Rzb19hdXRvc2l6ZSk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI4MS1cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjI4NT1zdGF0aWMgdTMyIHRjcF90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93KVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjkxLVx0XHRcdGNhX29wcy1cdTAwM2V0c29fc2VncyhzaywgbXNzX25vdykgOlxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyOTI6XHRcdFx0dGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjkzLVx0XHRcdFx0XHQgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfbWluX3Rzb19zZWdzKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQlBGIGFuZCBUQ1AgQ29uZ2VzdGlvbiBDb250cm9sIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9mIGEgY291cGxlIG9mIEJQRiBhbmQgVENQIGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGVzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHNlZSB3aGF0IEtjb25maWcgb3B0aW9ucyBzcGVjaWZpY2FsbHkgcmVsYXRlIHRvIGBicGZfdGNwX2NhLmNgIGFuZCBgdGNwX2Jici5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZmVhdHVyZXMgdGhleSByZWx5IG9uLCBhbmQgd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkIHRvIGluY2x1ZGUgdGhlbSBpbiBhIGtlcm5lbCBidWlsZC4gVG8gZG8gdGhhdCwgSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHJlbGV2YW50IGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBtb2R1bGVzLiBIb3BlZnVsbHksIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFybHkgbGFpZCBvdXQgdGhlcmUuIFRpbWUgdG8gZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RDUF9DT05HX0JCUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NjQ5PWNvbmZpZyBUQ1BfQ09OR19DREdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTY2NS1cbm5ldC9pcHY0L0tjb25maWc6NjY2OmNvbmZpZyBUQ1BfQ09OR19CQlJcbm5ldC9pcHY0L0tjb25maWctNjY3LVx0dHJpc3RhdGUgXCYjMzQ7QkJSIFRDUFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9NjgxPWNob2ljZVxuLS1cbm5ldC9pcHY0L0tjb25maWctNzE1LVx0Y29uZmlnIERFRkFVTFRfQkJSXG5uZXQvaXB2NC9LY29uZmlnOjcxNjpcdFx0Ym9vbCBcJiMzNDtCQlJcJiMzNDsgaWYgVENQX0NPTkdfQkJSPXlcbm5ldC9pcHY0L0tjb25maWctNzE3LVxuLS1cbm5ldC9pcHY0L01ha2VmaWxlPTQ2PW9iai0kKENPTkZJR19JTkVUX1JBV19ESUFHKSAmIzQzOz0gcmF3X2RpYWcub1xubmV0L2lwdjQvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX1RDUF9DT05HX0JCUikgJiM0Mzs9IHRjcF9iYnIub1xubmV0L2lwdjQvTWFrZWZpbGUtNDgtb2JqLSQoQ09ORklHX1RDUF9DT05HX0JJQykgJiM0Mzs9IHRjcF9iaWMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MTEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFRDUCBDb25nZXN0aW9uIENvbnRyb2wgSW5zdHJ1bWVudGF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gd2hlcmUgdGhlIEJQRi1iYXNlZCBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIHByb2JlcyBhcmUgZGVmaW5lZCBhbmQgY29uZmlndXJlZC4gSSYjMzk7dmUgYWxyZWFkeSBnb3QgYSBnb29kIGdyYXNwLCBidXQgbGV0JiMzOTtzIGJlIHRob3JvdWdoLiBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4cGxpY2l0bHkgY2hlY2tpbmcgYG5ldC9pcHY0L2JwZl90Y3BfY2EuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBCUEYtYmFzZWQgY29uZ2VzdGlvbiBjb250cm9sIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gVGhlbiwgZm9yIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBjb21waWxlLXRpbWUgb3B0aW9ucywgaXQmIzM5O3MgZXNzZW50aWFsIHRvIGxvb2sgYXQgYG5ldC9pcHY0L01ha2VmaWxlYCBhbmQgYG5ldC9pcHY0L0tjb25maWdgLiBUaGVzZSB3aWxsIHJldmVhbCBob3cgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0gYW5kIHdoYXQgY29udHJvbHMgaXRzIGluY2x1c2lvbiBvciBleGNsdXNpb24gYmFzZWQgb24gdXNlciBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSwgaW5jbHVkaW5nIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXNwZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdGNwX2NhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9NzE9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcbm5ldC9pcHY0L01ha2VmaWxlOjcyOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl90Y3BfY2Eub1xubmV0L2lwdjQvTWFrZWZpbGUtNzMtZW5kaWZcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MTk9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdGNwX2Nvbmdlc3Rpb25fb3BzX3R5cGU7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjAtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjE6c3RhdGljIGludCBicGZfdGNwX2NhX2luaXQoc3RydWN0IGJ0ZiAqYnRmKVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyLXtcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtNDMtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6NDQ6c3RhdGljIGJvb2wgYnBmX3RjcF9jYV9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtNDUtXHRcdFx0XHQgICAgICAgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtNjAtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6NjE6c3RhdGljIGludCBicGZfdGNwX2NhX2J0Zl9zdHJ1Y3RfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtNjItXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTEyMT1CUEZfQ0FMTF8yKGJwZl90Y3Bfc2VuZF9hY2ssIHN0cnVjdCB0Y3Bfc29jayAqLCB0cCwgdTMyLCByY3Zfbnh0KVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTEyMi17XG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MTIzOlx0LyogYnBmX3RjcF9jYSBwcm9nIGNhbm5vdCBoYXZlIE5VTEwgdHAgKi9cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xMjQtXHRfX3RjcF9zZW5kX2Fjaygoc3RydWN0IHNvY2sgKil0cCwgcmN2X254dCwgMCk7XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTE1MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoxNTI6YnBmX3RjcF9jYV9nZXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMTUzLVx0XHRcdCAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xOTAtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MTkxOkJURl9LRlVOQ1NfU1RBUlQoYnBmX3RjcF9jYV9jaGVja19rZnVuY19pZHMpXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMTkyLUJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfcmVub19zc3RocmVzaClcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MTk3PUJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfdHNvX2F1dG9zaXplKVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjE5ODpCVEZfS0ZVTkNTX0VORChicGZfdGNwX2NhX2NoZWNrX2tmdW5jX2lkcylcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xOTktXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjAwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfdGNwX2NhX2tmdW5jX3NldCA9IHtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMDEtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMDI6XHQuc2V0ICAgPSBcdTAwMjZicGZfdGNwX2NhX2NoZWNrX2tmdW5jX2lkcyxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMDMtfTtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMDQtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjA1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfdGNwX2NhX3ZlcmlmaWVyX29wcyA9IHtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMDY6XHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBicGZfdGNwX2NhX2dldF9mdW5jX3Byb3RvLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIwNzpcdC5pc192YWxpZF9hY2Nlc3NcdD0gYnBmX3RjcF9jYV9pc192YWxpZF9hY2Nlc3MsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjA4Olx0LmJ0Zl9zdHJ1Y3RfYWNjZXNzXHQ9IGJwZl90Y3BfY2FfYnRmX3N0cnVjdF9hY2Nlc3MsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjA5LX07XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjEwLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIxMTpzdGF0aWMgaW50IGJwZl90Y3BfY2FfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIxMi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjM4LVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIzOTpzdGF0aWMgaW50IGJwZl90Y3BfY2FfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjQwLXtcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjQzLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI0NDpzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3VucmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjQ1LXtcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjQ4LVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI0OTpzdGF0aWMgaW50IGJwZl90Y3BfY2FfdXBkYXRlKHZvaWQgKmtkYXRhLCB2b2lkICpvbGRfa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaylcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNTAte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNTMtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjU0OnN0YXRpYyBpbnQgYnBmX3RjcF9jYV92YWxpZGF0ZSh2b2lkICprZGF0YSlcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNTUte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNTgtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjU5OnN0YXRpYyB1MzIgYnBmX3RjcF9jYV9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjYwLXtcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjYzLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI2NDpzdGF0aWMgdm9pZCBicGZfdGNwX2NhX2NvbmdfYXZvaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCB1MzIgYWNrZWQpXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjY1LXtcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjY3LVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI2ODpzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIHU4IG5ld19zdGF0ZSlcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNjkte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNzEtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjcyOnN0YXRpYyB2b2lkIGJwZl90Y3BfY2FfY3duZF9ldmVudChzdHJ1Y3Qgc29jayAqc2ssIGVudW0gdGNwX2NhX2V2ZW50IGV2KVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI3My17XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI3NS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyNzY6c3RhdGljIHZvaWQgYnBmX3RjcF9jYV9jd25kX2V2ZW50X3R4X3N0YXJ0KHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNzcte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNzktXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjgwOnN0YXRpYyB2b2lkIGJwZl90Y3BfY2FfaW5fYWNrX2V2ZW50KHN0cnVjdCBzb2NrICpzaywgdTMyIGZsYWdzKVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI4MS17XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI4My1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyODQ6c3RhdGljIHZvaWQgYnBmX3RjcF9jYV9wa3RzX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBsZSlcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yODUte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yODctXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6Mjg4OnN0YXRpYyB1MzIgYnBmX3RjcF9jYV90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI4OS17XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI5Mi1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyOTM6c3RhdGljIHZvaWQgYnBmX3RjcF9jYV9jb25nX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCBpbnQgZmxhZyxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yOTQtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHJhdGVfc2FtcGxlICpycylcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjk3LVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI5ODpzdGF0aWMgdTMyIGJwZl90Y3BfY2FfdW5kb19jd25kKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yOTkte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMDItXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzAzOnN0YXRpYyB1MzIgYnBmX3RjcF9jYV9zbmRidWZfZXhwYW5kKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMDQte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMDctXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzA4OnN0YXRpYyB2b2lkIF9fYnBmX3RjcF9jYV9pbml0KHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMDkte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMTEtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzEyOnN0YXRpYyB2b2lkIF9fYnBmX3RjcF9jYV9yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMTMte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYz0zMTY9c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgX19icGZfb3BzX3RjcF9jb25nZXN0aW9uX29wcyA9IHtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMTc6XHQuc3N0aHJlc2ggPSBicGZfdGNwX2NhX3NzdGhyZXNoLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMxODpcdC5jb25nX2F2b2lkID0gYnBmX3RjcF9jYV9jb25nX2F2b2lkLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMxOTpcdC5zZXRfc3RhdGUgPSBicGZfdGNwX2NhX3NldF9zdGF0ZSxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMjA6XHQuY3duZF9ldmVudCA9IGJwZl90Y3BfY2FfY3duZF9ldmVudCxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMjE6XHQuY3duZF9ldmVudF90eF9zdGFydCA9IGJwZl90Y3BfY2FfY3duZF9ldmVudF90eF9zdGFydCxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMjI6XHQuaW5fYWNrX2V2ZW50ID0gYnBmX3RjcF9jYV9pbl9hY2tfZXZlbnQsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzIzOlx0LnBrdHNfYWNrZWQgPSBicGZfdGNwX2NhX3BrdHNfYWNrZWQsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzI0Olx0LnRzb19zZWdzID0gYnBmX3RjcF9jYV90c29fc2Vncyxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMjU6XHQuY29uZ19jb250cm9sID0gYnBmX3RjcF9jYV9jb25nX2NvbnRyb2wsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzI2Olx0LnVuZG9fY3duZCA9IGJwZl90Y3BfY2FfdW5kb19jd25kLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMyNzpcdC5zbmRidWZfZXhwYW5kID0gYnBmX3RjcF9jYV9zbmRidWZfZXhwYW5kLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTMyOC1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMjk6XHQuaW5pdCA9IF9fYnBmX3RjcF9jYV9pbml0LFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMzMDpcdC5yZWxlYXNlID0gX19icGZfdGNwX2NhX3JlbGVhc2UsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzMxLX07XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTMzMz1zdGF0aWMgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIGJwZl90Y3BfY29uZ2VzdGlvbl9vcHMgPSB7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzM0Olx0LnZlcmlmaWVyX29wcyA9IFx1MDAyNmJwZl90Y3BfY2FfdmVyaWZpZXJfb3BzLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMzNTpcdC5yZWcgPSBicGZfdGNwX2NhX3JlZyxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMzY6XHQudW5yZWcgPSBicGZfdGNwX2NhX3VucmVnLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMzNzpcdC51cGRhdGUgPSBicGZfdGNwX2NhX3VwZGF0ZSxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMzg6XHQuaW5pdF9tZW1iZXIgPSBicGZfdGNwX2NhX2luaXRfbWVtYmVyLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMzOTpcdC5pbml0ID0gYnBmX3RjcF9jYV9pbml0LFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjM0MDpcdC52YWxpZGF0ZSA9IGJwZl90Y3BfY2FfdmFsaWRhdGUsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQxLVx0Lm5hbWUgPSBcJiMzNDt0Y3BfY29uZ2VzdGlvbl9vcHNcJiMzNDssXG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTM0NS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozNDY6c3RhdGljIGludCBfX2luaXQgYnBmX3RjcF9jYV9rZnVuY19pbml0KHZvaWQpXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQ3LXtcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQ5LVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjM1MDpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZicGZfdGNwX2NhX2tmdW5jX3NldCk7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzUxLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKFx1MDAyNmJwZl90Y3BfY29uZ2VzdGlvbl9vcHMsIHRjcF9jb25nZXN0aW9uX29wcyk7XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTM1NC19XG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzU1OmxhdGVfaW5pdGNhbGwoYnBmX3RjcF9jYV9rZnVuY19pbml0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY1NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFRDUCBUU08gU2VnbWVudCBTaXplIERldGVybWluYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgVENQIG91dHB1dCBwYXRoLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIGB0Y3BfdHNvX3NlZ3NgIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgdGNwX3Rzb19hdXRvc2l6ZWAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgd2hlcmUgYHRjcF90c29fYXV0b3NpemVgIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIGxhcmdlciBUQ1Agb3V0cHV0IHByb2Nlc3MuIFdoZXJlIGFyZSB0aGUgZGVjaXNpb25zIGJlaW5nIG1hZGUgYmFzZWQgb24gdGhpcyB2YWx1ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGluZmx1ZW5jZXMgdGhlIG51bWJlciBvZiBzZWdtZW50cyB3ZSBlbmQgdXAgd2l0aC4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgZGl2aW5nIGludG8gdGhlIFRTTyAoVENQIFNlZ21lbnRhdGlvbiBPZmZsb2FkKSBjb2RlLCB3aGljaCBjb3VsZCBtZWFuIGxvb2tpbmcgYXQgaG93IHRoZSBoYXJkd2FyZSBpbnRlcmZhY2VzIHdpdGggdGhlIHNvZnR3YXJlIHNlZ21lbnRhdGlvbiwgdG9vLiBJIHN1c3BlY3QgYHRjcF90c29fc2Vnc2AgcHJvYmFibHkgaG9sZHMgYSBjYWxjdWxhdGVkIHZhbHVlLCBwZXJoYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWdtZW50cyB0aGUgTklDIGNhbiBoYW5kbGUgZWZmaWNpZW50bHksIG9yIG1heWJlIGV2ZW4gdGhlICphY3R1YWwqIG51bWJlciBhZnRlciBjb25zaWRlcmF0aW9ucyBvZiBNVFUsIGhlYWRlciBzaXplcywgYW5kIE1TUy4gVWx0aW1hdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gb3B0aW1pemUgVENQIHBlcmZvcm1hbmNlLCBzbyBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGludGVyYWN0aW9uIGlzIGNydWNpYWwuIFRoaXMgd2lsbCBoZWxwIG1lIGRpYWdub3NlIHRocm91Z2hwdXQgYm90dGxlbmVja3MgYW5kIGZpbmUtdHVuZSBwYXJhbWV0ZXJzIGZvciBvcHRpbWFsIHRyYW5zZmVyIGNoYXJhY3RlcmlzdGljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3Rzb19zZWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX291dHB1dC5jPTIyODA9RVhQT1JUX1NZTUJPTF9HUEwodGNwX3Rzb19hdXRvc2l6ZSk7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyODQtICovXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI4NTpzdGF0aWMgdTMyIHRjcF90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93KVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyODYte1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yOTcyPXN0YXRpYyBib29sIHRjcF93cml0ZV94bWl0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csIGludCBub25hZ2xlLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yOTk5LVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjMwMDA6XHRtYXhfc2VncyA9IHRjcF90c29fc2VncyhzaywgbXNzX25vdyk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzAwMS1cdHdoaWxlICgoc2tiID0gdGNwX3NlbmRfaGVhZChzaykpKSB7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM3MzM9dm9pZCB0Y3BfeG1pdF9yZXRyYW5zbWl0X3F1ZXVlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzc0Ni1cdHNrYiA9IHRwLVx1MDAzZXJldHJhbnNtaXRfc2tiX2hpbnQgPzogcnR4X2hlYWQ7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6Mzc0NzpcdG1heF9zZWdzID0gdGNwX3Rzb19zZWdzKHNrLCB0Y3BfY3VycmVudF9tc3Moc2spKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zNzQ4LVx0c2tiX3JidHJlZV93YWxrX2Zyb20oc2tiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzY4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkV4cGxvcmluZyBDb25nZXN0aW9uIENvbnRyb2wgQWxnb3JpdGhtIFNwYWNlKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgcHJvYmxlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSBvZiBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtcyBiZXR0ZXIsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGlzIGBtaW5fdHNvX3NlZ3NgIHZhcmlhYmxlLiBJJiMzOTttIHdvbmRlcmluZyBpZiBhbnkgb2YgdGhlIG90aGVyIGFsZ29yaXRobXMgb3V0IHRoZXJlLCBiZXlvbmQgdGhlIG9uZXMgSSYjMzk7bSBpbW1lZGlhdGVseSBmYW1pbGlhciB3aXRoLCBleHBsaWNpdGx5IGRlYWx0IHdpdGggc29tZXRoaW5nIGxpa2UgdGhpcz8gRGlkIHRoZXkgaGF2ZSBhIHNpbWlsYXIgcGFyYW1ldGVyLCBvciB3ZXJlIHRoZXkgc3VidGx5IGFmZmVjdGVkIGJ5IHRoZSBudW1iZXIgb2Ygc2VnbWVudHMgdXNlZCBpbiBUU08gd2l0aG91dCBleHBsaWNpdGx5IG5hbWluZyBhIHR1bmluZyBwYXJhbWV0ZXI/IFRoYXQmIzM5O3MgdGhlIHJlYWwgcXVlc3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgcmVzZWFyY2ggc2F5cy4uLiBJIG5lZWQgYSBtb3JlIGNvbXByZWhlbnNpdmUgdmlldyBoZXJlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbGl0ZXJhdHVyZSBhbmQgc2VlIHdoYXQgZW1lcmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWluX3Rzb19zZWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM9NjI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XG4tLVxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtMTM5My1cdHtcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jOjEzOTQ6XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDt0Y3BfbWluX3Rzb19zZWdzXCYjMzQ7LFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTM5NTpcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5pcHY0LnN5c2N0bF90Y3BfbWluX3Rzb19zZWdzLFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtMTM5Ni1cdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1OCksXG4tLVxubmV0L2lwdjQvdGNwX2Jici5jPTI4Nz1zdGF0aWMgdm9pZCBiYnJfc2V0X3BhY2luZ19yYXRlKHN0cnVjdCBzb2NrICpzaywgdTMyIGJ3LCBpbnQgZ2Fpbilcbi0tXG5uZXQvaXB2NC90Y3BfYmJyLmMtMjk4LVxubmV0L2lwdjQvdGNwX2Jici5jOjI5OTovKiBvdmVycmlkZSBzeXNjdGxfdGNwX21pbl90c29fc2VncyAqL1xubmV0L2lwdjQvdGNwX2Jici5jOjMwMDpzdGF0aWMgdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2Jici5jLTMwMS17XG4tLVxubmV0L2lwdjQvdGNwX2Jici5jPTMwNT1fX2JwZl9rZnVuYyBzdGF0aWMgdTMyIGJicl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KVxuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYy0zMDctXHRpZiAodW5saWtlbHkoIW1zc19ub3cpKVxubmV0L2lwdjQvdGNwX2Jici5jOjMwODpcdFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xubmV0L2lwdjQvdGNwX2Jici5jOjMwOTpcdHJldHVybiB0Y3BfdHNvX2F1dG9zaXplKHNrLCBtc3Nfbm93LCBiYnJfbWluX3Rzb19zZWdzKHNrKSk7XG5uZXQvaXB2NC90Y3BfYmJyLmMtMzEwLX1cbi0tXG5uZXQvaXB2NC90Y3BfYmJyLmM9MzEyPXN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzX2dvYWwoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYy0zMjItXHRcdCAgICAgIEdTT19MRUdBQ1lfTUFYX1NJWkUgLSAxIC0gTUFYX1RDUF9IRUFERVIpO1xubmV0L2lwdjQvdGNwX2Jici5jOjMyMzpcdHNlZ3MgPSBtYXhfdCh1MzIsIGJ5dGVzIC8gdHAtXHUwMDNlbXNzX2NhY2hlLCBiYnJfbWluX3Rzb19zZWdzKHNrKSk7XG5uZXQvaXB2NC90Y3BfYmJyLmMtMzI0LVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzQzOD1zdGF0aWMgaW50IF9fbmV0X2luaXQgdGNwX3NrX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzQ5NS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzQ5NjpcdG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfbWluX3Rzb19zZWdzID0gMjtcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzQ5Ny1cdG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfdHNvX3J0dF9sb2cgPSA5OyAgLyogMl45ID0gNTEyIHVzZWMgKi9cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjIzND1zdGF0aWMgYm9vbCB0Y3BfbmFnbGVfY2hlY2soYm9vbCBwYXJ0aWFsLCBjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjU1LSAqXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI1NjogKiBUaGUgbWluX3Rzb19zZWdzIGlzIGZsb29yZWQgdG8gMSB0byBhdm9pZCBzdXJwcmlzaW5nIGNvbnZlcnNpb24uIEFsc28sXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI1Ny0gKiBCUEYgY2FsbGVycyBtYXkgcGFzcyBtc3Nfbm93ID09IDAuIEluIHRoYXQgY2FzZSB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGVcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjU4OiAqIHNhbml0aXplZCBtaW5fdHNvX3NlZ3MgdmFsdWUgYW5kIHNraXBzIGF1dG9zaXppbmcuXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI1OS0gKi9cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMjYwPV9fYnBmX2tmdW5jIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI2MTpcdFx0XHRcdCBpbnQgbWluX3Rzb19zZWdzKVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNjIte1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNjM6XHR1MzIgbWluX3RzbyA9IG1heChtaW5fdHNvX3NlZ3MsIDEpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNjQtXHR1bnNpZ25lZCBsb25nIGJ5dGVzO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMjg1PXN0YXRpYyB1MzIgdGNwX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3cpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyOTItXHRcdFx0dGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjkzOlx0XHRcdFx0XHQgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfbWluX3Rzb19zZWdzKSk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI5NC1cdHJldHVybiBjbGFtcF90KHUzMiwgdHNvX3NlZ3MsIDEsIHNrLVx1MDAzZXNrX2dzb19tYXhfc2Vncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXM6IFRTTyBTZWdtZW50IFRhcmdldCBDb3VudCBpbiBUQ1AgQ29uZ2VzdGlvbiBDb250cm9sKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgY2hhbmdlcyByZWxhdGVkIHRvIGhvdyBDb25nZXN0aW9uIENvbnRyb2wgKENBKSBhbGdvcml0aG1zLCBpbmNsdWRpbmcgQkJSIGFuZCB0aG9zZSB1c2luZyBCUEYgc3RydWN0X29wcywgc3BlY2lmeSB0aGUgdGFyZ2V0IGNvdW50IGZvciBUU08gc2VnbWVudHMgdmlhIGB0c29fc2Vnc2AgaW4gYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgLiBOb3RhYmx5LCBgdGNwX3Rzb19hdXRvc2l6ZWAgaGFzIGJlZW4gbW9kaWZpZWQgYW5kIGV4cG9ydGVkIGFzIGEga2Z1bmMgYW5kIEdQTCBzeW1ib2wuIFRoaXMgaGl0cyBUQ1Agb3V0cHV0IGxvZ2ljIGFuZCB0aGUgQlBGIFRDUCBDQSBtZWNoYW5pc20gYW5kIEJCUi4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmc/CgpMZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIGNoZWNrbGlzdDogTm8gY2hhbmdlcyB0byBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBvciBjb21tZW50cywgc28gaXQmIzM5O3MgYWN0dWFsIEMgY29kZS4gTm90IGEgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlLCBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwuIE5vIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3Jvcy4gSXQgKmlzKiByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgYmVjYXVzZSBpdCYjMzk7cyBjb3JlIG5ldHdvcmtpbmcsIFRDUCwgYW5kIEJQRi4gQW5kIGl0JiMzOTtzIG5vdCB2ZW5kb3Itc3BlY2lmaWMgb3IgZHJpdmVyIHRlYXJkb3duLiBTbywgV29ydGhGdXp6aW5nID0gVHJ1ZS4KCk5vdywgZm9yIGBGb2N1c1N5bWJvbHNgLiBXZSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBpbXBvcnRhbnQgZW50cnkgcG9pbnRzLiBgdGNwX3Rzb19hdXRvc2l6ZWAgaXMgYSBub24tc3RhdGljLCBleHBvcnRlZCBmdW5jdGlvbiAoa2Z1bmMpLiBgYmJyX3Rzb19zZWdzYCBpcyBzdGF0aWMgYnV0IHJlZ2lzdGVyZWQgYXMgYSBrZnVuYywgd2hpbGUgYGJwZl90Y3BfY2FfdHNvX3NlZ3NgIGlzIGFsc28gc3RhdGljLiBTcGVjaWZpY2FsbHksIGB0Y3BfdHNvX2F1dG9zaXplYCBsb29rcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGBfX2JwZl9rZnVuYyB1MzIgdGNwX3Rzb19hdXRvc2l6ZSguLi4pYCBhbmQgYEVYUE9SVF9TWU1CT0xfR1BMKHRjcF90c29fYXV0b3NpemUpYC4gVGhpcyBtYWtlcyBpdCBhIGdyZWF0IGNhbmRpZGF0ZS4gT3RoZXIgc3ltYm9scyBpbmNsdWRlOgotIGB0Y3BfdHNvX2F1dG9zaXplYAotIGBicGZfdGNwX2NhX3Rzb19zZWdzYCAoc3RhdGljKQotIGBiYnJfdHNvX3NlZ3NgIChzdGF0aWMsIGtmdW5jKQotIGB0Y3BfdHNvX3NlZ3NgIChzdGF0aWMpCgpCYXNlZCBvbiB0aGUgcnVsZXMsIGB0Y3BfdHNvX2F1dG9zaXplYCBpcyB0aGUgY2xlYXIgd2lubmVyIGZvciBgRm9jdXNTeW1ib2xzYCwgYXMgaXQmIzM5O3Mgbm9uLXN0YXRpYywgZXhwb3J0ZWQsIGFuZCBkZWZpbmVkIGluIGBuZXQvaXB2NC90Y3Bfb3V0cHV0LmNgLCBzbyBpdCYjMzk7cyB1bmxpa2VseSB0byBiZSBpbmxpbmVkLgoKRmluYWxseSwgZm9yIGBFbmFibGVDb25maWdzYCwgd2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIENsZWFybHksIGBJTkVUYCAob3IgYE5FVGApIGZvciBUQ1AvSVB2NCwgYFRDUF9DT05HX0JCUmAgZm9yIEJCUiBzdXBwb3J0LCBhbmQgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGZvciBCUEYgVENQIENBL3N0cnVjdF9vcHMgYXJlIGFsbCBlc3NlbnRpYWwuIFdlIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgYnBmX3RjcF9jYS5vYCBhbmQgYHRjcF9iYnIub2AganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHRjcF9icGYub1xubmV0L2lwdjQvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdWRwX2JwZi5vXG5uZXQvaXB2NC9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfTkVUTEFCRUwpICYjNDM7PSBjaXBzb19pcHY0Lm9cbi0tXG5uZXQvaXB2NC9NYWtlZmlsZT03MT1pZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxubmV0L2lwdjQvTWFrZWZpbGU6NzI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3RjcF9jYS5vXG5uZXQvaXB2NC9NYWtlZmlsZS03My1lbmRpZlxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz0xNzg9RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTgwOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3RjcF9icGYuYy0xODEtc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTc2OT12b2lkIHRjcF9icGZfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc3NS19XG5uZXQvaXB2NC90Y3BfYnBmLmM6Nzc2OiNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTI4NTU9c3RhdGljIGludCB0Y3A0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjg3OS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6Mjg4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTI4ODEtdW5pb24gYnBmX3RjcF9pdGVyX2JhdGNoX2l0ZW0ge1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzI5Mz1zdGF0aWMgdW5zaWduZWQgc2hvcnQgc2VxX2ZpbGVfZmFtaWx5KGNvbnN0IHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzI5Ni1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzI5NzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMyOTgtXHQvKiBJdGVyYXRlZCBmcm9tIGJwZl9pdGVyLiAgTGV0IHRoZSBicGYgcHJvZyB0byBmaWx0ZXIgaW5zdGVhZC4gKi9cbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDg9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3Mi1cdC5wdXRfcG9ydFx0XHQ9IGluZXRfcHV0X3BvcnQsXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzNzM6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzc0LVx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHRjcF9icGZfdXBkYXRlX3Byb3RvLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzU3MT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIF9fbmV0X2luaXRkYXRhIHRjcF9za19vcHMgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNTc2LVxubmV0L2lwdjQvdGNwX2lwdjQuYzozNTc3OiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM1NzgtREVGSU5FX0JQRl9JVEVSX0ZVTkModGNwLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTM2NTA9dm9pZCBfX2luaXQgdGNwX3Y0X2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM2NzQtXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjM2NzU6I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzY3Ni1cdGJwZl9pdGVyX3JlZ2lzdGVyKCk7XG4tLVxubmV0L2lwdjQvdWRwLmM9MzEzMj1zdHJ1Y3QgcHJvdG8gdWRwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdWRwLmMtMzE1Mi1cdC5wdXRfcG9ydFx0XHQ9IHVkcF9saWJfdW5oYXNoLFxubmV0L2lwdjQvdWRwLmM6MzE1MzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvaXB2NC91ZHAuYy0zMTU0LVx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHVkcF9icGZfdXBkYXRlX3Byb3RvLFxuLS1cbm5ldC9pcHY0L3VkcC5jPTMxNzE9c3RhdGljIGJvb2wgc2VxX3NrX21hdGNoKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdWRwLmMtMzE3OS1cbm5ldC9pcHY0L3VkcC5jOjMxODA6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2lwdjQvdWRwLmMtMzE4MS1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9pdGVyX3VkcF9zZXFfb3BzO1xuLS1cbm5ldC9pcHY0L3VkcC5jPTMyOTc9c3RhdGljIGludCB1ZHA0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY0L3VkcC5jLTMzMTItXG5uZXQvaXB2NC91ZHAuYzozMzEzOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3VkcC5jLTMzMTQtc3RydWN0IGJwZl9pdGVyX191ZHAge1xuLS1cbm5ldC9pcHY0L3VkcC5jPTM1ODY9c3RhdGljIHVuc2lnbmVkIHNob3J0IHNlcV9maWxlX2ZhbWlseShjb25zdCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbi0tXG5uZXQvaXB2NC91ZHAuYy0zNTg5LVxubmV0L2lwdjQvdWRwLmM6MzU5MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvaXB2NC91ZHAuYy0zNTkxLVx0LyogQlBGIGl0ZXJhdG9yOiBicGYgcHJvZ3JhbXMgdG8gZmlsdGVyIHNvY2tldHMuICovXG4tLVxubmV0L2lwdjQvdWRwLmM9MzgxND1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIF9fbmV0X2luaXRkYXRhIHVkcF9zeXNjdGxfb3BzID0ge1xuLS1cbm5ldC9pcHY0L3VkcC5jLTM4MTgtXG5uZXQvaXB2NC91ZHAuYzozODE5OiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG5uZXQvaXB2NC91ZHAuYy0zODIwLURFRklORV9CUEZfSVRFUl9GVU5DKHVkcCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4tLVxubmV0L2lwdjQvdWRwLmM9Mzg5Nz12b2lkIF9faW5pdCB1ZHBfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTM5MTAtXG5uZXQvaXB2NC91ZHAuYzozOTExOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG5uZXQvaXB2NC91ZHAuYy0zOTEyLVx0YnBmX2l0ZXJfcmVnaXN0ZXIoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5NTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOgoKKipEZWVwIERpdmUgb24gS2VybmVsIENvbmZpZ3VyYXRpb246IEJCUiBhbmQgQlBGKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGtlcm5lbCYjMzk7cyBjdXJyZW50IGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlIGJlZm9yZSBkaXZpbmcgaW50byBzcGVjaWZpYyBpc3N1ZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgZmV3IGNydWNpYWwgS2NvbmZpZyBvcHRpb25zOiBgVENQX0NPTkdfQkJSYCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuCgpgVENQX0NPTkdfQkJSYCwgdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBpbnRlcmVzdC4gSXMgQkJSIGVuYWJsZWQ/IElzIGl0IGV2ZW4gYXZhaWxhYmxlPyBUaGlzIGRpY3RhdGVzIGEgbG90IG9mIG15IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpZiBCQlIgaXMgaW4gdXNlIG9yIHBsYW5uZWQgZm9yLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdOKAmXMgc3VwcG9ydGVkIGFuZCBob3cgaXQmIzM5O3MgY3VycmVudGx5IGNvbmZpZ3VyZWQuIElmIGl0JiMzOTtzICpub3QqIGVuYWJsZWQsIHRoYXQmIzM5O3MgYSB3aG9sZSBvdGhlciB0aHJlYWQgb2YgaW5xdWlyeSB0byBleHBsb3JlIHRoZSByZWFzb25pbmcuIFBlcmhhcHMgaXQgd2FzIGludGVudGlvbmFsbHkgZGlzYWJsZWQgZHVlIHRvIGNvbXBhdGliaWxpdHksIHRlc3RpbmcsIG9yIHBlcmZvcm1hbmNlIGNvbmNlcm5zPyBPciBtYXliZSBpdCYjMzk7cyBqdXN0IHNpbXBseSBvdmVybG9va2VkLgoKTmV4dCB1cCBhcmUgdGhlIEJQRi1yZWxhdGVkIG9wdGlvbnMuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNhbiBvZmZlciBzb21lIG9mIHRoZSBtb3N0IGR5bmFtaWMgYW5kIHNvcGhpc3RpY2F0ZWQgbmV0d29yayBwZXJmb3JtYW5jZSBhbmFseXNpcyBhbmQgbWFuaXB1bGF0aW9uIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBrZWVuIHRvIGRldGVybWluZSB3aGV0aGVyIEJQRiBpcyBmdWxseSBpbnRlZ3JhdGVkIHdpdGggdGhlIHN5c3RlbS4gQ2hlY2tpbmcgb24gYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGVuc3VyZXMgdGhhdCB0aGUgdXNlci1zcGFjZSBwcm9ncmFtcyBjYW4gbGV2ZXJhZ2UgdGhlIEJQRiBmdW5jdGlvbmFsaXR5IGVmZmVjdGl2ZWx5LCBhbmQgdGhhdCBKdXN0LUluLVRpbWUgKEpJVCkgY29tcGlsYXRpb24gaXMgYWxzbyBhdmFpbGFibGUuIEFyZSB3ZSBnZXR0aW5nIHRoZSBmdWxsIHBvdGVudGlhbCBmcm9tIEJQRj8gT3IsIGlzIGl0IHJlc3RyaWN0ZWQgdG8gYSBzYWZlciwgbW9yZSBpbnRlcnByZXRpdmUgbW9kZT8gQW5kIGlmIGl0JiMzOTtzIGRpc2FibGVkLCB0aGF0IHNpZ25pZmljYW50bHkgbGltaXRzIHRoZSBwb3NzaWJpbGl0aWVzIGZvciBhZHZhbmNlZCB0cmFjaW5nLCBuZXR3b3JraW5nIHByb2dyYW1tYWJpbGl0eSwgYW5kIGVCUEYuCgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIHRha2UgYSBxdWljayBwdWxzZSBvZiB0aGUgc2l0dWF0aW9uLiBUaGlzIGluaXRpYWwgS2NvbmZpZyBjaGVjayBpcyBteSBjb21wYXNzLiBJdCBoZWxwcyBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLCBmb2N1c2luZyBvbiB0aG9zZSBmZWF0dXJlcyB0aGF0IHdpbGwgZWl0aGVyIGVuYWJsZSBvciBjb25zdHJhaW4gbXkgc3Vic2VxdWVudCBkaWFnbm9zdGljcyBhbmQgb3B0aW1pemF0aW9ucy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBkaWdnaW5nIGludG8gbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgYXBwbGljYXRpb24gYmVoYXZpb3IuIEl0JiMzOTtzIGEgcXVpY2sgdHJpYWdlIHN0ZXAgdGhhdCBoZWxwcyBtZSBwcmlvcml0aXplIG15IGRlZXBlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHRcbiA2NjE6XHRcdCAgRm9yIGZ1cnRoZXIgZGV0YWlscyBzZWU6XG4gNjYyOlx0XHQgICAgRC5BLiBIYXllcyBhbmQgRy4gQXJtaXRhZ2UuIFwmIzM0O1JldmlzaXRpbmcgVENQIGNvbmdlc3Rpb24gY29udHJvbCB1c2luZ1xuIDY2MzpcdFx0ICAgIGRlbGF5IGdyYWRpZW50cy5cJiMzNDsgSW4gTmV0d29ya2luZyAyMDExLiBQcmVwcmludDpcbiA2NjQ6XHRcdCAgICBodHRwOi8vY2FpYS5zd2luLmVkdS5hdS9jdi9kYWhheWVzL2NvbnRlbnQvbmV0d29ya2luZzIwMTEtY2RnLXByZXByaW50LnBkZlxuIDY2NTpcdFxuIDY2NjpcdGNvbmZpZyBUQ1BfQ09OR19CQlJcbiA2Njc6XHRcdHRyaXN0YXRlIFwmIzM0O0JCUiBUQ1BcJiMzNDtcbiA2Njg6XHRcdGRlZmF1bHQgblxuIDY2OTpcdFx0aGVscFxuIDY3MDpcdFxuIDY3MTpcdFx0ICBCQlIgKEJvdHRsZW5lY2sgQmFuZHdpZHRoIGFuZCBSVFQpIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgYWltcyB0b1xuIDY3MjpcdFx0ICBtYXhpbWl6ZSBuZXR3b3JrIHV0aWxpemF0aW9uIGFuZCBtaW5pbWl6ZSBxdWV1ZXMuIEl0IGJ1aWxkcyBhbiBleHBsaWNpdFxuIDY3MzpcdFx0ICBtb2RlbCBvZiB0aGUgYm90dGxlbmVjayBkZWxpdmVyeSByYXRlIGFuZCBwYXRoIHJvdW5kLXRyaXAgcHJvcGFnYXRpb25cbiA2NzQ6XHRcdCAgZGVsYXkuIEl0IHRvbGVyYXRlcyBwYWNrZXQgbG9zcyBhbmQgZGVsYXkgdW5yZWxhdGVkIHRvIGNvbmdlc3Rpb24uIEl0XG4gNjc1Olx0XHQgIGNhbiBvcGVyYXRlIG92ZXIgTEFOLCBXQU4sIGNlbGx1bGFyLCB3aWZpLCBvciBjYWJsZSBtb2RlbSBsaW5rcy4gSXQgY2FuXG4gNjc2Olx0XHQgIGNvZXhpc3Qgd2l0aCBmbG93cyB0aGF0IHVzZSBsb3NzLWJhc2VkIGNvbmdlc3Rpb24gY29udHJvbCwgYW5kIGNhblxuIDY3NzpcdFx0ICBvcGVyYXRlIHdpdGggc2hhbGxvdyBidWZmZXJzLCBkZWVwIGJ1ZmZlcnMsIGJ1ZmZlcmJsb2F0LCBwb2xpY2Vycywgb3JcbiA2Nzg6XHRcdCAgQVFNIHNjaGVtZXMgdGhhdCBkbyBub3QgcHJvdmlkZSBhIGRlbGF5IHNpZ25hbC4gSXQgcmVxdWlyZXMgdGhlIGZxXG4gNjc5Olx0XHQgIChcJiMzNDtGYWlyIFF1ZXVlXCYjMzQ7KSBwYWNpbmcgcGFja2V0IHNjaGVkdWxlci5cbiA2ODA6XHRcbiA2ODE6XHRjaG9pY2VcbiA2ODI6XHRcdHByb21wdCBcJiMzNDtEZWZhdWx0IFRDUCBjb25nZXN0aW9uIGNvbnRyb2xcJiMzNDtcbiA2ODM6XHRcdGRlZmF1bHQgREVGQVVMVF9DVUJJQ1xuIDY4NDpcdFx0aGVscFxuIDY4NTpcdFx0ICBTZWxlY3QgdGhlIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgdGhhdCB3aWxsIGJlIHVzZWQgYnkgZGVmYXVsdFxuIDY4NjpcdFx0ICBmb3IgYWxsIGNvbm5lY3Rpb25zLlxuIDY4NzpcdFxuIDY4ODpcdFx0Y29uZmlnIERFRkFVTFRfQklDXG4gNjg5Olx0XHRcdGJvb2wgXCYjMzQ7QmljXCYjMzQ7IGlmIFRDUF9DT05HX0JJQz15XG4gNjkwOlx0XG4gNjkxOlx0XHRjb25maWcgREVGQVVMVF9DVUJJQ1xuIDY5MjpcdFx0XHRib29sIFwmIzM0O0N1YmljXCYjMzQ7IGlmIFRDUF9DT05HX0NVQklDPXlcbiA2OTM6XHRcbiA2OTQ6XHRcdGNvbmZpZyBERUZBVUxUX0hUQ1BcbiA2OTU6XHRcdFx0Ym9vbCBcJiMzNDtIdGNwXCYjMzQ7IGlmIFRDUF9DT05HX0hUQ1A9eVxuIDY5NjpcdFxuIDY5NzpcdFx0Y29uZmlnIERFRkFVTFRfSFlCTEFcbiA2OTg6XHRcdFx0Ym9vbCBcJiMzNDtIeWJsYVwmIzM0OyBpZiBUQ1BfQ09OR19IWUJMQT15XG4gNjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTEwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQlBGIGFuZCBUQ1AgQ29uZ2VzdGlvbiBDb250cm9sIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBwdXp6bGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgdGhlIG5lY2Vzc2l0eSBhbmQgJiMzNDtzdGFuZGFyZC1uZXNzJiMzNDsgb2YgYENPTkZJR19JTkVUYC4gSSBzdXNwZWN0IGl0JiMzOTtzIGZ1bmRhbWVudGFsLCBidXQgbGV0JiMzOTtzIGNvbmZpcm0uIE5leHQsIEkgbmVlZCB0byB2ZXJpZnkgd2hpY2ggb2YgdGhlIHBvdGVudGlhbGx5IHJlbGF0ZWQgY29uZmlndXJhdGlvbnPigJRgSU5FVGAsIGBUQ1BfQ09OR19CQlJgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9KSVRg4oCUYXJlIGVpdGhlciByZXF1aXJlZCBvciBoaWdobHkgcmVjb21tZW5kZWQgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IEkmIzM5O20gYWZ0ZXIsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgQlBGLWJhc2VkIFRDUCBDb25nZXN0aW9uIEFsZ29yaXRobXMuIEkgc2hvdWxkIGFsc28gY2FzdCBhIHdpZGVyIG5ldDogYXJlIHRoZXJlICpvdGhlciogY3J1Y2lhbCBjb25maWdzIEkmIzM5O20gb3Zlcmxvb2tpbmcgZm9yIEJQRiYjMzk7cyBzdHJ1Y3Rfb3BzIG9yIGZvciBzdXBwb3J0aW5nIGBCUEZfVENQX0NBYD8KCkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSBhIHN0YWJsZSBhbmQgcGVyZm9ybWFudCBpbnRlZ3JhdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBLY29uZmlnIGFuZCBNYWtlZmlsZXMsIGZvciByZWZlcmVuY2VzIHRvIGJvdGggYGJwZl90Y3BfY2FgIGFuZCBgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTYC4gVGhpcyB3aWxsIGhlbHAgbWUgdHJhY2sgZG93biB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgaW1tZWRpYXRlIGFuc3dlcnMgcmVnYXJkaW5nIHRoZSBjb3JyZWN0IHNldHRpbmdzIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NzI2PXN0YXRpYyBsb25nIGJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTg0NS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo4NDY6XHRcdGlmIChwcm9nLVx1MDAzZXR5cGUgIT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTIHx8XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtODQ3LVx0XHQgICAgcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2J0Zl9pZCAhPSBzdF9vcHNfZGVzYy1cdTAwM2V0eXBlX2lkIHx8XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTE0OTI9aW50IGJwZl9wcm9nX2Fzc29jX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTAzLVx0aWYgKHN0X29wc19hc3NvYykge1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE1MDQ6XHRcdGlmIChwcm9nLVx1MDAzZXR5cGUgIT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1MDUtXHRcdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTUxMi1cdFx0ICovXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTUxMzpcdFx0aWYgKHByb2ctXHUwMDNldHlwZSAhPSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTUxNC1cdFx0XHRicGZfbWFwX2luYyhtYXApO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xNTIyPXZvaWQgYnBmX3Byb2dfZGlzYXNzb2Nfc3RydWN0X29wcyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1MzItXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTUzMzpcdGlmIChwcm9nLVx1MDAzZXR5cGUgIT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1MzQtXHRcdGJwZl9tYXBfcHV0KHN0X29wc19hc3NvYyk7XG4tLVxua2VybmVsL2JwZi9idGYuYz02MjE3PXN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3Byb2dfY3R4X3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjMwOS1cdGNhc2UgQlBGX1BST0dfVFlQRV9MU006XG5rZXJuZWwvYnBmL2J0Zi5jOjYzMTA6XHRjYXNlIEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUzpcbmtlcm5lbC9icGYvYnRmLmMtNjMxMS1cdFx0LyogYWxsb3cgdTY0KiBhcyBjdHggKi9cbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTY2MTY9c3RhdGljIGJvb2wgcHJvZ19hcmdzX3RydXN0ZWQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjYyNC1cdFx0cmV0dXJuIGJwZl9sc21faXNfdHJ1c3RlZChwcm9nKTtcbmtlcm5lbC9icGYvYnRmLmM6NjYyNTpcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOlxua2VybmVsL2JwZi9idGYuYy02NjI2LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTkwNTY9c3RhdGljIGludCBicGZfcHJvZ190eXBlX3RvX2tmdW5jX2hvb2soZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTkwNjQtXHRcdHJldHVybiBCVEZfS0ZVTkNfSE9PS19UQztcbmtlcm5lbC9icGYvYnRmLmM6OTA2NTpcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOlxua2VybmVsL2JwZi9idGYuYy05MDY2LVx0XHRyZXR1cm4gQlRGX0tGVU5DX0hPT0tfU1RSVUNUX09QUztcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNTA4PXN0YXRpYyBib29sIF9fYnBmX3Byb2dfbWFwX2NvbXBhdGlibGUoc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTYwLVx0XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9FWFQ6XG5rZXJuZWwvYnBmL2NvcmUuYzoyNTYxOlx0XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOlxua2VybmVsL2JwZi9jb3JlLmMtMjU2Mi1cdFx0XHRcdHJldCA9IGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvY3B1bWFzay5jPTUxNT1zdGF0aWMgaW50IF9faW5pdCBjcHVtYXNrX2tmdW5jX2luaXQodm9pZClcbi0tXG5rZXJuZWwvYnBmL2NwdW1hc2suYy01MjYtXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFx1MDAyNmNwdW1hc2tfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvY3B1bWFzay5jOjUyNzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2Y3B1bWFza19rZnVuY19zZXQpO1xua2VybmVsL2JwZi9jcHVtYXNrLmMtNTI4LVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcdTAwMjZjcHVtYXNrX2tmdW5jX3NldCk7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk4Mj1zdGF0aWMgaW50IF9faW5pdCBrZnVuY19pbml0KHZvaWQpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAwMC1cdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDAxOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDAyLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjcyOD1icGZfcHJvZ19sb2FkX2NoZWNrX2F0dGFjaChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI3NDMtXHRcdGNhc2UgQlBGX1BST0dfVFlQRV9MU006XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNzQ0Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUzpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI3NDUtXHRcdGNhc2UgQlBGX1BST0dfVFlQRV9FWFQ6XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjg3ND1zdGF0aWMgYm9vbCBpc19wZXJmbW9uX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4ODMtXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjg4NDpcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOiAvKiBoYXMgYWNjZXNzIHRvIHN0cnVjdCBzb2NrICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODg1LVx0Y2FzZSBCUEZfUFJPR19UWVBFX0VYVDogLyogZXh0ZW5kcyBhbnkgcHJvZyAqL1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYyNjI9c3RhdGljIGludCBwcm9nX2Fzc29jX3N0cnVjdF9vcHModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjI3Ny1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYyNzg6XHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUykge1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjI3OS1cdFx0cmV0ID0gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTIzNT1zdGF0aWMgZW51bSBwcml2X3N0YWNrX21vZGUgYnBmX2VuYWJsZV9wcml2X3N0YWNrKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTI1MS1cdGNhc2UgQlBGX1BST0dfVFlQRV9MU006XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTI1MjpcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTUyNTMtXHRcdGlmIChwcm9nLVx1MDAzZWF1eC1cdTAwM2Vwcml2X3N0YWNrX3JlcXVlc3RlZCB8fCBicGZfcHJvZ19jaGVja19yZWN1cihwcm9nKSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA0OTk9c3RhdGljIGludCBjaGVja19yZWZlcmVuY2VfbGVhayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sIGV4Y2VwdGlvbl9leGl0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDUxNS1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA1MTY6XHRcdGlmICh0eXBlID09IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyBcdTAwMjZcdTAwMjYgIWV4Y2VwdGlvbl9leGl0IFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNTE3LVx0XHQgICAgcmVnLVx1MDAzZWlkID09IHN0YXRlLVx1MDAzZXJlZnNbaV0uaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MjI4PXN0YXRpYyBib29sIHJldHVybl9yZXR2YWxfcmFuZ2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZXR2YWxfcmFuZ2UgKnJhbmdlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMyMi1cdFx0YnJlYWs7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczMjM6XHRjYXNlIEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUzpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMyNC1cdFx0KnJhbmdlID0gcmV0dmFsX3JhbmdlKDAsIDApO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzMzOT1zdGF0aWMgYm9vbCBwcm9ncmFtX3JldHVybnNfdm9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM1MC1cdFx0YnJlYWs7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczNTE6XHRjYXNlIEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUzpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM1Mi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfZnVuY19wcm90by1cdTAwM2V0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzM3MT1zdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3Mzg2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3Mzg3Olx0aWYgKHByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM4OC1cdFx0LyogQWxsb3cgYSBzdHJ1Y3Rfb3BzIHByb2dyYW0gdG8gcmV0dXJuIGEgcmVmZXJlbmNlZCBrcHRyIGlmIGl0XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NDIwLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NDIxOlx0aWYgKHByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMgXHUwMDI2XHUwMDI2ICFyZXRfdHlwZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzQyMi1cdFx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MjY3PXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQwMC1cdC8qIEFjcXVpcmUgcmVmZXJlbmNlcyBmb3Igc3RydWN0X29wcyBwcm9ncmFtIGFyZ3VtZW50cyB0YWdnZWQgd2l0aCBcJiMzNDtfX3JlZlwmIzM0OyAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NDAxOlx0aWYgKCFzdWJwcm9nIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUykge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDAyLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhdXgtXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMjc2PXN0YXRpYyBib29sIGNhbl9iZV9zbGVlcGFibGUoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDI5Ny1cdHJldHVybiBwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9LUFJPQkUgLyogb25seSBmb3IgdXByb2JlcyAqLyB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjk4Olx0ICAgICAgIHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDI5OS1cdCAgICAgICBwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVCB8fFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDMwMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMjUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMjY6XHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMyNy1cdFx0cmV0dXJuIGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKGVudik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDQzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJQRiBTdHJ1Y3QgT3BzIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGJwZl9zdHJ1Y3Rfb3BzLmNgIGdldHMgYnVpbHQuIFRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGNvbnNpZGVyaW5nIGl0JiMzOTtzIGtlcm5lbC1yZWxhdGVkIGFuZCBsaWtlbHkgaW52b2x2ZXMgQlBGLCBpcyB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgZm9yIGFueXRoaW5nIEJQRi1zcGVjaWZpYyB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGF0IHRoYXQgTWFrZWZpbGUgaGFzIHRvIHNheS4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBicGZfc3RydWN0X29wcy5jYC4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQsIGFuZCBJIGNhbiBxdWlja2x5IHRyYWNlIHRoZSByZWxldmFudCB0YXJnZXRzIGFuZCBzb3VyY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RydWN0X29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU4NiBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxua2VybmVsL2JwZi9NYWtlZmlsZT00Mz1pZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfc3RydWN0X29wcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQ1LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hc2sub1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNi1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNzpzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUge1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE4Olx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2NvbW1vbl92YWx1ZSBjb21tb247XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTktXHRjaGFyIGRhdGFbXSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0yMy1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoyNDpzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwIHtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0yNS1cdHN0cnVjdCBicGZfbWFwIG1hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoyNjpcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYztcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0yNy1cdC8qIHByb3RlY3QgbWFwX3VwZGF0ZSAqL1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy00OS1cdCAqL1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjUwOlx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICp1dmFsdWU7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTEtXHQvKiBrdmFsdWUuZGF0YSBzdG9yZXMgdGhlIGFjdHVhbCBrZXJuZWwmIzM5O3Mgc3RydWN0XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU0LVx0ICovXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTU6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUga3ZhbHVlO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU2LX07XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTctXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTg6c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmsge1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU5LVx0c3RydWN0IGJwZl9saW5rIGxpbms7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTY0PXN0YXRpYyBERUZJTkVfTVVURVgodXBkYXRlX211dGV4KTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2NjojZGVmaW5lIFZBTFVFX1BSRUZJWCBcJiMzNDticGZfc3RydWN0X29wc19cJiMzNDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02Ny0jZGVmaW5lIFZBTFVFX1BSRUZJWF9MRU4gKHNpemVvZihWQUxVRV9QUkVGSVgpIC0gMSlcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02OC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2OTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3RydWN0X29wc192ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzAtfTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3Mjpjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGJwZl9zdHJ1Y3Rfb3BzX3Byb2dfb3BzID0ge1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTczLSNpZmRlZiBDT05GSUdfTkVUXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzQ6XHQudGVzdF9ydW4gPSBicGZfc3RydWN0X29wc190ZXN0X3J1bixcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03NS0jZW5kaWZcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9Nzk9QlRGX0lEKHN0cnVjdCwgbW9kdWxlKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjgwOkJURl9JRChzdHJ1Y3QsIGJwZl9zdHJ1Y3Rfb3BzX2NvbW1vbl92YWx1ZSlcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy04MS1cbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9ODk9c3RhdGljIGJvb2wgaXNfdmFsaWRfdmFsdWVfdHlwZShzdHJ1Y3QgYnRmICpidGYsIHMzMiB2YWx1ZV9pZCxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA3LVx0aWYgKG10ICE9IGNvbW1vbl92YWx1ZV90eXBlKSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA4Olx0XHRwcl93YXJuKFwmIzM0O1RoZSBmaXJzdCBtZW1iZXIgb2YgJXMgc2hvdWxkIGJlIGJwZl9zdHJ1Y3Rfb3BzX2NvbW1vbl92YWx1ZVxcblwmIzM0Oyxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDktXHRcdFx0dmFsdWVfbmFtZSk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMi1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjM6c3RhdGljIHZvaWQgKmJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2FsbG9jKHZvaWQpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI0LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM5LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MDp2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2ZyZWUodm9pZCAqaW1hZ2UpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQxLXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTU1LSAqXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTU2OiAqIEluaXRpYWxpemUgYSBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gYWNjb3JkaW5nIHRvIHR5cGUgaW5mbyBvZlxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1Ny0gKiB0aGUgYXJndW1lbnRzIG9mIGEgc3R1YiBmdW5jdGlvbi4gKENoZWNrIGtDRkkgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXRcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTU5LSAqXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTYwOiAqIEVhY2ggbWVtYmVyIGluIHRoZSBzdHJ1Y3Rfb3BzIHR5cGUgaGFzIGEgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2FyZ19pbmZvXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTYxLSAqIHRvIHByb3ZpZGUgYW4gYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCwgd2hpY2ggaW4gdHVybiBwcm92aWRlc1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xNzM9c3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTc3LVx0XHRcdCAgICBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm1vZGVsLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE3ODpcdFx0XHQgICAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2FyZ19pbmZvICphcmdfaW5mbylcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNzkte1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zMjMtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MzI0Oi8qIENsZWFuIHVwIHRoZSBhcmdfaW5mbyBpbiBhIHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjLiAqL1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjMyNTp2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfcmVsZWFzZShzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzI2LXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzozMjc6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTMyOC1cdGludCBpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0zMzc9c3RhdGljIGJvb2wgaXNfbW9kdWxlX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBpZClcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzUwLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM1MTppbnQgYnBmX3N0cnVjdF9vcHNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzLCB1MzIgbW9mZilcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTIte1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTctXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MzU4OmludCBicGZfc3RydWN0X29wc19kZXNjX2luaXQoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTM1OS1cdFx0XHQgICAgIHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzYxLXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzozNjI6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcyA9IHN0X29wc19kZXNjLVx1MDAzZXN0X29wcztcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzozNjM6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTM2NC1cdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQzOS1cdFx0aWYgKCFzdF9vcHNfaWRzW0lEWF9NT0RVTEVfSURdIFx1MDAyNlx1MDAyNiBpc19tb2R1bGVfbWVtYmVyKGJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUpKSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NDQwOlx0XHRcdHByX3dhcm4oXCYjMzQ7JiMzOTtzdHJ1Y3QgbW9kdWxlJiMzOTsgYnRmIGlkIG5vdCBmb3VuZC4gSXMgQ09ORklHX01PRFVMRVMgZW5hYmxlZD8gYnBmX3N0cnVjdF9vcHMgJiMzOTslcyYjMzk7IG5lZWRzIG1vZHVsZSBzdXBwb3J0LlxcblwmIzM0Oyxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy00NDEtXHRcdFx0XHRzdF9vcHMtXHUwMDNlbmFtZSk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ1Mi1cdFx0ICovXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NDUzOlx0XHRpZiAoIWZ1bmNfcHJvdG8gfHwgYnBmX3N0cnVjdF9vcHNfc3VwcG9ydGVkKHN0X29wcywgbW9mZikpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNDU0LVx0XHRcdGNvbnRpbnVlO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy00OTYtXHRpZiAoc3Rfb3BzLVx1MDAzZWluaXQoYnRmKSkge1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjQ5NzpcdFx0cHJfd2FybihcJiMzNDtFcnJvciBpbiBpbml0IGJwZl9zdHJ1Y3Rfb3BzICVzXFxuXCYjMzQ7LFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ5OC1cdFx0XHRzdF9vcHMtXHUwMDNlbmFtZSk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTUwNS1lcnJvdXQ6XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTA2Olx0YnBmX3N0cnVjdF9vcHNfZGVzY19yZWxlYXNlKHN0X29wc19kZXNjKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MDctXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTUxMC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1MTE6c3RhdGljIGludCBicGZfc3RydWN0X29wc19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MTItXHRcdFx0XHRcdCAgIHZvaWQgKm5leHRfa2V5KVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MjAtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTIxOmludCBicGZfc3RydWN0X29wc19tYXBfc3lzX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MjItXHRcdFx0XHQgICAgICAgdm9pZCAqdmFsdWUpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTIzLXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1MjQ6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1MjU6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUgKnV2YWx1ZSwgKmt2YWx1ZTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1MjY6XHRlbnVtIGJwZl9zdHJ1Y3Rfb3BzX3N0YXRlIHN0YXRlO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTUyNy1cdHM2NCByZWZjbnQ7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU1Ny1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1NTg6c3RhdGljIHZvaWQgKmJwZl9zdHJ1Y3Rfb3BzX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTU5LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTYyLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjU2MzpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfcHV0X3Byb2dzKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01NjQte1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01NzQtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTc1OnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9kaXNzb2NfcHJvZ3Moc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU3Ni17XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU4NS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1ODY6c3RhdGljIHZvaWQgYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWVfaW1hZ2Uoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU4Ny17XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU5MC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0X21hcC1cdTAwM2VpbWFnZV9wYWdlc19jbnQ7IGkmIzQzOyYjNDM7KVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjU5MTpcdFx0YnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZShzdF9tYXAtXHUwMDNlaW1hZ2VfcGFnZXNbaV0pO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU5Mi1cdHN0X21hcC1cdTAwM2VpbWFnZV9wYWdlc19jbnQgPSAwO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz01OTU9c3RhdGljIGludCBjaGVja196ZXJvX2hvbGVzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MjAtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjIxOnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjIyLXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjI0LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjYyNTpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYyNi17XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYzMS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2MzI6Y29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfc3RydWN0X29wc19saW5rX2xvcHMgPSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjMzOlx0LnJlbGVhc2UgPSBicGZfc3RydWN0X29wc19saW5rX3JlbGVhc2UsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjM0Olx0LmRlYWxsb2MgPSBicGZfc3RydWN0X29wc19saW5rX2RlYWxsb2MsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjM1LX07XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjM2LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjYzNzppbnQgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcyxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MzgtXHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY2Mi1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2NjM6XHRcdGltYWdlID0gYnBmX3N0cnVjdF9vcHNfaW1hZ2VfYWxsb2MoKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NjQtXHRcdGlmIChJU19FUlIoaW1hZ2UpKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NzMtXHRcdGlmIChpbWFnZSAhPSAqX2ltYWdlKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjY3NDpcdFx0XHRicGZfc3RydWN0X29wc19pbWFnZV9mcmVlKGltYWdlKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NzUtXHRcdHJldHVybiBzaXplID8gOiAtRUZBVUxUO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02ODItXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjgzOnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2tzeW1faW5pdChjb25zdCBjaGFyICp0bmFtZSwgY29uc3QgY2hhciAqbW5hbWUsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjg0LVx0XHRcdFx0ICAgICB2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY5MS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2OTI6c3RhdGljIHZvaWQgYnBmX3N0cnVjdF9vcHNfbWFwX2FkZF9rc3ltcyhzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXApXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjkzLXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzAyLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjcwMzpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfZGVsX2tzeW1zKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MDQte1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MTMtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzE0OnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlX2tzeW1zKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MTUte1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MjUtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzI2OnN0YXRpYyBsb25nIGJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzI3LVx0XHRcdFx0XHQgICB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcyOC17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzI5Olx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzMwOlx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjID0gc3RfbWFwLVx1MDAzZXN0X29wc19kZXNjO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjczMTpcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzID0gc3Rfb3BzX2Rlc2MtXHUwMDNlc3Rfb3BzO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjczMjpcdHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqdXZhbHVlLCAqa3ZhbHVlO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTczMy1cdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbW9kdWxlX3R5cGU7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTc2Ni1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3Njc6XHR1dmFsdWUgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICopc3RfbWFwLVx1MDAzZXV2YWx1ZTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3Njg6XHRrdmFsdWUgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICopXHUwMDI2c3RfbWFwLVx1MDAzZWt2YWx1ZTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03NjktXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTg2MC1cdFx0YnBmX3RyYW1wX2xpbmtfaW5pdChsaW5rLCBCUEZfTElOS19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6ODYxOlx0XHRcdCAgICAgIFx1MDAyNmJwZl9zdHJ1Y3Rfb3BzX2xpbmtfbG9wcywgcHJvZywgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSwgMCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtODYyLVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy04NzUtXHRcdHRyYW1wb2xpbmVfc3RhcnQgPSBpbWFnZV9vZmY7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6ODc2Olx0XHRlcnIgPSBicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmUodG5vZGVzLCBcdTAwMjZsaW5rLVx1MDAzZW5vZGUsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtODc3LVx0XHRcdFx0XHRcdFx1MDAyNnN0X29wcy1cdTAwM2VmdW5jX21vZGVsc1tpXSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtODk1LVx0XHQvKiBpbml0IGtzeW0gZm9yIHRoaXMgdHJhbXBvbGluZSAqL1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjg5NjpcdFx0YnBmX3N0cnVjdF9vcHNfa3N5bV9pbml0KHRuYW1lLCBtbmFtZSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy04OTctXHRcdFx0XHRcdCBpbWFnZSAmIzQzOyB0cmFtcG9saW5lX3N0YXJ0LFxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05MjgtXHRcdCAqIG1hcCBtdXN0IGJlIHNldCB0byBJTklUIGF0IHRoaXMgbW9tZW50LCBhbmQgdGh1c1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjkyOTpcdFx0ICogYnBmX3N0cnVjdF9vcHNfbWFwX2RlbGV0ZV9lbGVtKCkgY2FuJiMzOTt0IHVucmVnaXN0ZXJcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05MzAtXHRcdCAqIG9yIHRyYW5zaXRpb24gaXQgdG8gVE9CRUZSRUUgY29uY3VycmVudGx5LlxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05NDctcmVzZXRfdW5sb2NrOlxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjk0ODpcdGJwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlX2tzeW1zKHN0X21hcCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTQ5Olx0YnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWVfaW1hZ2Uoc3RfbWFwKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo5NTA6XHRicGZfc3RydWN0X29wc19tYXBfZGlzc29jX3Byb2dzKHN0X21hcCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTUxOlx0YnBmX3N0cnVjdF9vcHNfbWFwX3B1dF9wcm9ncyhzdF9tYXApO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk1Mi1cdG1lbXNldCh1dmFsdWUsIDAsIG1hcC1cdTAwM2V2YWx1ZV9zaXplKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTU3LVx0aWYgKCFlcnIpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTU4Olx0XHRicGZfc3RydWN0X29wc19tYXBfYWRkX2tzeW1zKHN0X21hcCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTU5LVx0cmV0dXJuIGVycjtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTYxLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjk2MjpzdGF0aWMgbG9uZyBicGZfc3RydWN0X29wc19tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk2My17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTY0Olx0ZW51bSBicGZfc3RydWN0X29wc19zdGF0ZSBwcmV2X3N0YXRlO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjk2NTpcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05NjYtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTY3Olx0c3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTY4LVx0aWYgKHN0X21hcC1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9MSU5LKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05ODktXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTkwOnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05OTEtXHRcdFx0XHRcdCAgICAgc3RydWN0IHNlcV9maWxlICptKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk5Mi17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTkzOlx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTk0LVx0dm9pZCAqdmFsdWU7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwMDAtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTAwMTpcdGVyciA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9zeXNfbG9va3VwX2VsZW0obWFwLCBrZXksIHZhbHVlKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDAyLVx0aWYgKCFlcnIpIHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAxMS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDEyOnN0YXRpYyB2b2lkIF9fYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDEzLXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDE0Olx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAxNS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDE2LVx0aWYgKHN0X21hcC1cdTAwM2VsaW5rcylcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDE3Olx0XHRicGZfc3RydWN0X29wc19tYXBfcHV0X3Byb2dzKHN0X21hcCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAxOC1cdGlmIChzdF9tYXAtXHUwMDNla3N5bXMpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTAxOTpcdFx0YnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWVfa3N5bXMoc3RfbWFwKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDIwLVx0YnBmX21hcF9hcmVhX2ZyZWUoc3RfbWFwLVx1MDAzZWxpbmtzKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDIxLVx0YnBmX21hcF9hcmVhX2ZyZWUoc3RfbWFwLVx1MDAzZWtzeW1zKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDIyOlx0YnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWVfaW1hZ2Uoc3RfbWFwKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDIzLVx0YnBmX21hcF9hcmVhX2ZyZWUoc3RfbWFwLVx1MDAzZXV2YWx1ZSk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwMjYtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTAyNzpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwMjgte1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwMjk6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDMwLVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDM3LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwMzg6XHRicGZfc3RydWN0X29wc19tYXBfZGlzc29jX3Byb2dzKHN0X21hcCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAzOS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDQwOlx0YnBmX3N0cnVjdF9vcHNfbWFwX2RlbF9rc3ltcyhzdF9tYXApO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNDEtXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNDYtXHQgKiBzZXRzb2Nrb3B0KFRDUF9DT05HRVNUSU9OLCBcJiMzNDt0Y3BfY2NfeVwmIzM0OykuXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA0NzpcdCAqIER1cmluZyB0aGUgc3dpdGNoLCAgYnBmX3N0cnVjdF9vcHNfcHV0KHRjcF9jY194KSBpcyBjYWxsZWRcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDQ4LVx0ICogYW5kIGl0cyByZWZjb3VudCBtYXkgcmVhY2ggMCB3aGljaCB0aGVuIGZyZWUgaXRzXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNTgtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA1OTpcdF9fYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUobWFwKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDYwLX1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDYxLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwNjI6c3RhdGljIGludCBicGZfc3RydWN0X29wc19tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA2My17XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEwNzE9c3RhdGljIHUzMiBjb3VudF9mdW5jX3B0cnMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwODMtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA4NDpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmJwZl9zdHJ1Y3Rfb3BzX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDg1LXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDg2Olx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwODctXHRzaXplX3Qgc3RfbWFwX3NpemU7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA4ODpcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDg5LVx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqdnQ7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExMTktXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTEyMDpcdHN0X29wc19kZXNjID0gYnBmX3N0cnVjdF9vcHNfZmluZF92YWx1ZShidGYsIGF0dHItXHUwMDNlYnRmX3ZtbGludXhfdmFsdWVfdHlwZV9pZCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTEyMS1cdGlmICghc3Rfb3BzX2Rlc2MpIHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTEzNS1cdFx0Lyoga3ZhbHVlIHN0b3JlcyB0aGVcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTM2Olx0XHQgKiBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdGNwX2Nvbmdlc3Rpb25zX29wc1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExMzctXHRcdCAqL1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExMzg6XHRcdCh2dC1cdTAwM2VzaXplIC0gc2l6ZW9mKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSkpO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExMzktXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNjktZXJyb3V0X2ZyZWU6XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE3MDpcdF9fYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUobWFwKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTcxLWVycm91dDpcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE3Ni1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTc3OnN0YXRpYyB1NjQgYnBmX3N0cnVjdF9vcHNfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNzgte1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExNzk6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTgwOlx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjID0gc3RfbWFwLVx1MDAzZXN0X29wc19kZXNjO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExODEtXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZ0ID0gc3Rfb3BzX2Rlc2MtXHUwMDNldmFsdWVfdHlwZTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE4NC1cdHVzYWdlID0gc2l6ZW9mKCpzdF9tYXApICYjNDM7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE4NTpcdFx0XHR2dC1cdTAwM2VzaXplIC0gc2l6ZW9mKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE4Ni1cdHVzYWdlICYjNDM7PSB2dC1cdTAwM2VzaXplO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTkyLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTM6QlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9zdHJ1Y3Rfb3BzX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9zdHJ1Y3Rfb3BzX21hcClcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTk0OmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBicGZfc3RydWN0X29wc19tYXBfb3BzID0ge1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTU6XHQubWFwX2FsbG9jX2NoZWNrID0gYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jX2NoZWNrLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTY6XHQubWFwX2FsbG9jID0gYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTc6XHQubWFwX2ZyZWUgPSBicGZfc3RydWN0X29wc19tYXBfZnJlZSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTk4Olx0Lm1hcF9nZXRfbmV4dF9rZXkgPSBicGZfc3RydWN0X29wc19tYXBfZ2V0X25leHRfa2V5LFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTk6XHQubWFwX2xvb2t1cF9lbGVtID0gYnBmX3N0cnVjdF9vcHNfbWFwX2xvb2t1cF9lbGVtLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMDA6XHQubWFwX2RlbGV0ZV9lbGVtID0gYnBmX3N0cnVjdF9vcHNfbWFwX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMDE6XHQubWFwX3VwZGF0ZV9lbGVtID0gYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMDI6XHQubWFwX3NlcV9zaG93X2VsZW0gPSBicGZfc3RydWN0X29wc19tYXBfc2VxX3Nob3dfZWxlbSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjAzOlx0Lm1hcF9tZW1fdXNhZ2UgPSBicGZfc3RydWN0X29wc19tYXBfbWVtX3VzYWdlLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMDQ6XHQubWFwX2J0Zl9pZCA9IFx1MDAyNmJwZl9zdHJ1Y3Rfb3BzX21hcF9idGZfaWRzWzBdLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMDUtfTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIwOS0gKi9cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjEwOmJvb2wgYnBmX3N0cnVjdF9vcHNfZ2V0KGNvbnN0IHZvaWQgKmtkYXRhKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMTEte1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMTI6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUgKmt2YWx1ZTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjEzOlx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMTQtXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMTUtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIxNjpcdGt2YWx1ZSA9IGNvbnRhaW5lcl9vZihrZGF0YSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlLCBkYXRhKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjE3Olx0c3RfbWFwID0gY29udGFpbmVyX29mKGt2YWx1ZSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCwga3ZhbHVlKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjE4LVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjIxLX1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjIyOkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9zdHJ1Y3Rfb3BzX2dldCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIyMy1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjI0OnZvaWQgYnBmX3N0cnVjdF9vcHNfcHV0KGNvbnN0IHZvaWQgKmtkYXRhKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMjUte1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMjY6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUgKmt2YWx1ZTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjI3Olx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMjgtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIyOTpcdGt2YWx1ZSA9IGNvbnRhaW5lcl9vZihrZGF0YSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlLCBkYXRhKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjMwOlx0c3RfbWFwID0gY29udGFpbmVyX29mKGt2YWx1ZSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCwga3ZhbHVlKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjMxLVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjMzLX1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjM0OkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9zdHJ1Y3Rfb3BzX3B1dCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIzNS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjM2OnUzMiBicGZfc3RydWN0X29wc19pZChjb25zdCB2b2lkICprZGF0YSlcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjM3LXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjM4Olx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICprdmFsdWU7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIzOTpcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjQwLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyNDE6XHRrdmFsdWUgPSBjb250YWluZXJfb2Yoa2RhdGEsIHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSwgZGF0YSk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI0MjpcdHN0X21hcCA9IGNvbnRhaW5lcl9vZihrdmFsdWUsIHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAsIGt2YWx1ZSk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI0My1cbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI0NS19XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI0NjpFWFBPUlRfU1lNQk9MX0dQTChicGZfc3RydWN0X29wc19pZCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI0Ny1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjQ4LS8qKlxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyNDk6ICogYnBmX3N0cnVjdF9vcHNfZm9yX2VhY2hfcHJvZyAtIEludm9rZSBAY2IgZm9yIGVhY2ggbWVtYmVyIHByb2dcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjUwLSAqIEBrZGF0YToga2VybmVsLXNpZGUgc3RydWN0X29wcyB2bXRhYmxlICh0aGUgQGtkYXRhIGFyZyB0byAtXHUwMDNlcmVnLy1cdTAwM2V1cGRhdGUvLVx1MDAzZXVucmVnKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjYwLSAqL1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyNjE6aW50IGJwZl9zdHJ1Y3Rfb3BzX2Zvcl9lYWNoX3Byb2coY29uc3Qgdm9pZCAqa2RhdGEsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI2Mi1cdFx0XHRcdCBpbnQgKCpjYikoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpkYXRhKSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI2NC17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI2NTpcdHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqa3ZhbHVlO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyNjY6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXA7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI2Ny1cdHUzMiBpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjY5LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyNzA6XHRrdmFsdWUgPSBjb250YWluZXJfb2Yoa2RhdGEsIHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSwgZGF0YSk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI3MTpcdHN0X21hcCA9IGNvbnRhaW5lcl9vZihrdmFsdWUsIHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAsIGt2YWx1ZSk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI3Mi1cbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI4MS19XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI4MjpFWFBPUlRfU1lNQk9MX0dQTChicGZfc3RydWN0X29wc19mb3JfZWFjaF9wcm9nKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjgzLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyODQ6c3RhdGljIGJvb2wgYnBmX3N0cnVjdF9vcHNfdmFsaWRfdG9fcmVnKHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI4NS17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI4NjpcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcCA9IChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICopbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyODctXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyOTMtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI5NDpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjk1LXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjk2Olx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmsgKnN0X2xpbms7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI5NzpcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjk4LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyOTk6XHRzdF9saW5rID0gY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rLCBsaW5rKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzAwOlx0c3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKilcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzAxLVx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHN0X2xpbmstXHUwMDNlbWFwLCB0cnVlKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMwOC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzA5OnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzEwLVx0XHRcdFx0XHQgICAgc3RydWN0IHNlcV9maWxlICpzZXEpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMxMS17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMxMjpcdHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rICpzdF9saW5rO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMTMtXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMTQtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMxNTpcdHN0X2xpbmsgPSBjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmssIGxpbmspO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMTYtXHRyY3VfcmVhZF9sb2NrKCk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMjItXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMyMzpzdGF0aWMgaW50IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzI0LVx0XHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMyNS17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMyNjpcdHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rICpzdF9saW5rO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMjctXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMjgtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMyOTpcdHN0X2xpbmsgPSBjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmssIGxpbmspO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMzAtXHRyY3VfcmVhZF9sb2NrKCk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMzctXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMzODpzdGF0aWMgaW50IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfbWFwICpuZXdfbWFwLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMzktXHRcdFx0XHRcdCAgc3RydWN0IGJwZl9tYXAgKmV4cGVjdGVkX29sZF9tYXApXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM0MC17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM0MTpcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcCwgKm9sZF9zdF9tYXA7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM0Mi1cdHN0cnVjdCBicGZfbWFwICpvbGRfbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEzNDM6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbGluayAqc3RfbGluaztcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzQ0LVx0aW50IGVycjtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzQ1LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEzNDY6XHRzdF9saW5rID0gY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rLCBsaW5rKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzQ3Olx0c3RfbWFwID0gY29udGFpbmVyX29mKG5ld19tYXAsIHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAsIG1hcCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM0OC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzQ5Olx0aWYgKCFicGZfc3RydWN0X29wc192YWxpZF90b19yZWcobmV3X21hcCkpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM1MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzNjYtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM2NzpcdG9sZF9zdF9tYXAgPSBjb250YWluZXJfb2Yob2xkX21hcCwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCwgbWFwKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzY4LVx0LyogVGhlIG5ldyBhbmQgb2xkIHN0cnVjdF9vcHMgbXVzdCBiZSB0aGUgc2FtZSB0eXBlLiAqL1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzg3LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEzODg6c3RhdGljIGludCBicGZfc3RydWN0X29wc19tYXBfbGlua19kZXRhY2goc3RydWN0IGJwZl9saW5rICpsaW5rKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzODkte1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEzOTA6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbGluayAqc3RfbGluayA9IGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbGluaywgbGluayk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM5MTpcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzkyLVx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQwMC1cdH1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDAxOlx0c3RfbWFwID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCwgbWFwKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDAyLVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDA1LVx0UkNVX0lOSVRfUE9JTlRFUihzdF9saW5rLVx1MDAzZW1hcCwgTlVMTCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQwNjpcdC8qIFBhaXIgd2l0aCBicGZfbWFwX2dldCgpIGluIGJwZl9zdHJ1Y3Rfb3BzX2xpbmtfY3JlYXRlKCkgb3Jcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDA3Olx0ICogYnBmX21hcF9pbmMoKSBpbiBicGZfc3RydWN0X29wc19tYXBfbGlua191cGRhdGUoKS5cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDA4LVx0ICovXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MTctXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQxODpzdGF0aWMgX19wb2xsX3QgYnBmX3N0cnVjdF9vcHNfbWFwX2xpbmtfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDE5LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHRzKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MjAte1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MjE6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbGluayAqc3RfbGluayA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MjItXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MjctXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQyODpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfc3RydWN0X29wc19tYXBfbG9wcyA9IHtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDI5Olx0LmRlYWxsb2MgPSBicGZfc3RydWN0X29wc19tYXBfbGlua19kZWFsbG9jLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MzA6XHQuZGV0YWNoID0gYnBmX3N0cnVjdF9vcHNfbWFwX2xpbmtfZGV0YWNoLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MzE6XHQuc2hvd19mZGluZm8gPSBicGZfc3RydWN0X29wc19tYXBfbGlua19zaG93X2ZkaW5mbyxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDMyOlx0LmZpbGxfbGlua19pbmZvID0gYnBmX3N0cnVjdF9vcHNfbWFwX2xpbmtfZmlsbF9saW5rX2luZm8sXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzMzpcdC51cGRhdGVfbWFwID0gYnBmX3N0cnVjdF9vcHNfbWFwX2xpbmtfdXBkYXRlLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MzQ6XHQucG9sbCA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3BvbGwsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQzNS19O1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MzYtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzNzppbnQgYnBmX3N0cnVjdF9vcHNfbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQzOC17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzOTpcdHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rICpsaW5rID0gTlVMTDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDQwLVx0c3RydWN0IGJwZl9saW5rX3ByaW1lciBsaW5rX3ByaW1lcjtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDQxOlx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0NDItXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDQ4LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0NDk6XHRzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDUwLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0NTE6XHRpZiAoIWJwZl9zdHJ1Y3Rfb3BzX3ZhbGlkX3RvX3JlZyhtYXApKSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ1Mi1cdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ2MC1cdH1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDYxOlx0YnBmX2xpbmtfaW5pdChcdTAwMjZsaW5rLVx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2YnBmX3N0cnVjdF9vcHNfbWFwX2xvcHMsIE5VTEwsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ2Mi1cdFx0ICAgICAgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTE1NDk9dm9pZCAqYnBmX3Byb2dfZ2V0X2Fzc29jX3N0cnVjdF9vcHMoY29uc3Qgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1NTAte1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE1NTE6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXA7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NTEKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogMjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBtb2R1bGVzIGVuYWJsZWQuIEkgd2FudCB0byBjb25maXJtIHRoYXQgYFRDUF9DT05HX0JCUmAgaXMgZW5hYmxlZCwgYXMgaXQgcHJvdmlkZXMgdGhlIEJCUiBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZSwgd2hpY2ggaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGltcGxlbWVudHMgYHRzb19zZWdzYC4gVGhlbiwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoYXQgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGFyZSBhbHNvIGVuYWJsZWQ7IHRoZXNlIGFyZSBlc3NlbnRpYWwgYmVjYXVzZSB0aGV5JiMzOTtyZSBkaXJlY3RseSByZWxhdGVkIHRvIGBicGZfdGNwX2NhLmNgIGFuZCBCUEYgVENQIGNvbmdlc3Rpb24gb3BlcmF0aW9ucy4gT2YgY291cnNlLCBgTkVUYCBhbmQgYElORVRgIGFyZSBvdXIgYmFzZSBuZXR3b3JraW5nIHByZXJlcXVpc2l0ZXMsIHNvIEkgYXNzdW1lIHRob3NlIGFyZSBhbHJlYWR5IGluIHBsYWNlLCBidXQgSSB3aWxsIGNoZWNrIHRvIGJlIGNlcnRhaW4uCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIHN5bWJvbHMgb3IgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIFRoZSBrZXkgc3ltYm9sIEkmIzM5O20gZm9jdXNpbmcgb24gcmlnaHQgbm93IGlzIGB0Y3BfdHNvX2F1dG9zaXplYC4KCk5leHQsIEkgbmVlZCB0byB0aG9yb3VnaGx5IHJldmlldyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgcHJlY2lzZSBoZXJlLiBgV29ydGhGdXp6aW5nYCBtdXN0IGJlIHNldCB0byBgdHJ1ZWAsIGFzIHRoZSBwYXRjaCBpcyBnb2luZyB0byBtb2RpZnkgVENQIFRTTyBhdXRvc2l6aW5nIGxvZ2ljIGFuZCBjb25nZXN0aW9uIGNvbnRyb2wgb3BlcmF0aW9ucywgbm90YWJseSByZXBsYWNpbmcgYG1pbl90c29fc2Vnc2Agd2l0aCBgdHNvX3NlZ3NgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIEJCUiBhbmQgQlBGIFRDUCBDQSBjYWxsYmFja3MsIHdoaWNoIGlzIHNpZ25pZmljYW50LiBGdXJ0aGVybW9yZSwgdGhlIHBhdGNoIGV4cG9ydHMgYHRjcF90c29fYXV0b3NpemVgIGFzIGEgQlBGIGtmdW5jLiBBbGwgb2YgdGhpcyBkaXJlY3RseSBpbXBhY3RzIFRDUCBwYWNrZXQgc2VnbWVudGF0aW9uIGFuZCBob3cgdGhlc2UgcGFja2V0cyBhcmUgdHJhbnNtaXR0ZWQgd2l0aGluIGNvcmUgbmV0d29ya2luZy4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBtYWtlIHRoaXMgdmVyeSBjbGVhciwgc28gSSYjMzk7bGwgd3JpdGUgYSBkZXRhaWxlZCBleHBsYW5hdGlvbi4KCkZvciBgRm9jdXNTeW1ib2xzYCwgSSB3aWxsIHVzZSBgWyYjMzQ7dGNwX3Rzb19hdXRvc2l6ZSYjMzQ7XWAuIEFuZCBmb3IgYEVuYWJsZUNvbmZpZ3NgLCBJJiMzOTtsbCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6IGBbJiMzNDtUQ1BfQ09OR19CQlImIzM0OywgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LCAmIzM0O0JQRl9KSVQmIzM0OywgJiMzNDtJTkVUJiMzNDtdYC4KCkZpbmFsbHksIEkmIzM5O2xsIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9mIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuIFByZWNpc2lvbiBpcyBwYXJhbW91bnQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9DT05HX0JCUiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfdHNvX2F1dG9zaXplJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgaW50ZXJmYWNlIGJ5IHJlcGxhY2luZyB0aGUgbWluX3Rzb19zZWdzIGNhbGxiYWNrIHdpdGggYSB0c29fc2VncyBjYWxsYmFjaywgdXBkYXRpbmcgVENQIG91dHB1dCBsb2dpYyAodGNwX3Rzb19hdXRvc2l6ZSwgdGNwX3Rzb19zZWdzKSwgQkJSIGNvbmdlc3Rpb24gY29udHJvbCwgYW5kIEJQRiBUQ1AgQ0Egc3RydWN0X29wcy4gdGNwX3Rzb19hdXRvc2l6ZSBpcyBhbHNvIGV4cG9zZWQgYXMgYSBCUEYga2Z1bmMuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbHRlciB0aGUgVENQIHNlZ21lbnRhdGlvbiBhbmQgcGFja2V0IHNjaGVkdWxpbmcgcGF0aCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9DT05HX0JCUiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfdHNvX2F1dG9zaXplJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgaW50ZXJmYWNlIGJ5IHJlcGxhY2luZyB0aGUgbWluX3Rzb19zZWdzIGNhbGxiYWNrIHdpdGggYSB0c29fc2VncyBjYWxsYmFjaywgdXBkYXRpbmcgVENQIG91dHB1dCBsb2dpYyAodGNwX3Rzb19hdXRvc2l6ZSwgdGNwX3Rzb19zZWdzKSwgQkJSIGNvbmdlc3Rpb24gY29udHJvbCwgYW5kIEJQRiBUQ1AgQ0Egc3RydWN0X29wcy4gdGNwX3Rzb19hdXRvc2l6ZSBpcyBhbHNvIGV4cG9zZWQgYXMgYSBCUEYga2Z1bmMuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbHRlciB0aGUgVENQIHNlZ21lbnRhdGlvbiBhbmQgcGFja2V0IHNjaGVkdWxpbmcgcGF0aCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGludGVyZmFjZSBieSByZXBsYWNpbmcgdGhlIGBtaW5fdHNvX3NlZ3NgIGNhbGxiYWNrIHdpdGggYHRzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpYCwgdXBkYXRlcyBCQlIgYW5kIEJQRiBjb25nZXN0aW9uIGNvbnRyb2wgaG9va3MsIGFuZCBleHBvcnRzIGB0Y3BfdHNvX2F1dG9zaXplYCBhcyBhIEJQRiBrZnVuYy5cblxuQWxsIG1vZGlmaWVkIGFuZCBhZGRlZCBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBzY2FsYXIgaW50ZWdlciB2YWx1ZXMgcGFzc2VkIGJ5IHZhbHVlIChgdTMyYCwgYHVuc2lnbmVkIGludGAsIHBvaW50ZXJzIHRvIGZ1bGx5IGluaXRpYWxpemVkIHN0cnVjdCBgc29ja2ApLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIHN0cnVjdHVyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXItc3BhY2UgKHN1Y2ggYXMgYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgb3IgaW9jdGwgcmV0dXJucykgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDdmZWVjMjRhZTIxMDQ0Y2Y3Y2RhMmY2NmY2ZmIzNzQ1NGI1NTM3YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDE6MzE6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IDY3MGMyMDg3NmYyNjUuLjc5ZjI3YWM5ZTk2M2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC04MjQsNiAmIzQzOzgyNCw5IEBAIHVuc2lnbmVkIGludCB0Y3Bfc3luY19tc3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgcG10dSk7CiB1bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzayk7CiB1MzIgdGNwX2NsYW1wX3Byb2JlMF90b191c2VyX3RpbWVvdXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1MzIgd2hlbik7CiAKJiM0Mzt1MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LAomIzQzOwkJICAgICBpbnQgbWluX3Rzb19zZWdzKTsKJiM0MzsKIC8qIEJvdW5kIE1TUyAvIFRTTyBwYWNrZXQgc2l6ZSB3aXRoIHRoZSBoYWxmIG9mIHRoZSB3aW5kb3cgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHRjcF9ib3VuZF90b19oYWxmX3duZChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgcGt0c2l6ZSkKIHsKQEAgLTEzNjEsOCAmIzQzOzEzNjQsMTYgQEAgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB7CiAJLyogaG9vayBmb3IgcGFja2V0IGFjayBhY2NvdW50aW5nIChvcHRpb25hbCkgKi8KIAl2b2lkICgqcGt0c19hY2tlZCkoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcGxlKTsKIAotCS8qIG92ZXJyaWRlIHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzIChvcHRpb25hbCkgKi8KLQl1MzIgKCptaW5fdHNvX3NlZ3MpKHN0cnVjdCBzb2NrICpzayk7CiYjNDM7CS8qIE92ZXJyaWRlIHRjcF90c29fYXV0b3NpemUoKSAob3B0aW9uYWwpCiYjNDM7CSAqCiYjNDM7CSAqIElmIHByb3ZpZGVkLCB0aGlzIGNhbGxiYWNrIHN1cHBsaWVzIHRoZSBUU08gc2VnbWVudCB0YXJnZXQgY291bnQKJiM0MzsJICogaW5zdGVhZCBvZiB1c2luZyB0Y3BfdHNvX2F1dG9zaXplKCkuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcwomIzQzOwkgKiBzdWJzZXF1ZW50bHkgY2xhbXBlZCB0byBbMSwgc2stJmd0O3NrX2dzb19tYXhfc2Vnc10gYnkgdGhlIGNhbGxlci4KJiM0MzsJICoKJiM0MzsJICogRm9yIHRoZSBrZXJuZWwgY2FsbGJhY2sgcGF0aCwgbXNzX25vdyBvcmlnaW5hdGVzIGZyb20KJiM0MzsJICogdGNwX2N1cnJlbnRfbXNzKCkgYW5kIHNob3VsZCBuZXZlciBiZSB6ZXJvLgomIzQzOwkgKi8KJiM0MzsJdTMyICgqdHNvX3NlZ3MpKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpOwogCiAJLyogbmV3IHZhbHVlIG9mIGN3bmQgYWZ0ZXIgbG9zcyAocmVxdWlyZWQpICovCiAJdTMyICAoKnVuZG9fY3duZCkoc3RydWN0IHNvY2sgKnNrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2JwZl90Y3BfY2EuYyBiL25ldC9pcHY0L2JwZl90Y3BfY2EuYwppbmRleCA3OTFlMTUwNjMyMzdjLi45ZGVlZDIyNDRjMmRlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9icGZfdGNwX2NhLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvYnBmX3RjcF9jYS5jCkBAIC0xOTQsNiAmIzQzOzE5NCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfcmVub19jb25nX2F2b2lkKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF9yZW5vX3VuZG9fY3duZCkKIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3Bfc2xvd19zdGFydCkKIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfY29uZ19hdm9pZF9haSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Rzb19hdXRvc2l6ZSkKIEJURl9LRlVOQ1NfRU5EKGJwZl90Y3BfY2FfY2hlY2tfa2Z1bmNfaWRzKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3RjcF9jYV9rZnVuY19zZXQgPSB7CkBAIC0yODQsNyAmIzQzOzI4NSw3IEBAIHN0YXRpYyB2b2lkIGJwZl90Y3BfY2FfcGt0c19hY2tlZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wCiB7CiB9CiAKLXN0YXRpYyB1MzIgYnBmX3RjcF9jYV9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKQomIzQzO3N0YXRpYyB1MzIgYnBmX3RjcF9jYV90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KQogewogCXJldHVybiAwOwogfQpAQCAtMzIwLDcgJiM0MzszMjEsNyBAQCBzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBfX2JwZl9vcHNfdGNwX2Nvbmdlc3Rpb25fb3BzID0gewogCS5jd25kX2V2ZW50X3R4X3N0YXJ0ID0gYnBmX3RjcF9jYV9jd25kX2V2ZW50X3R4X3N0YXJ0LAogCS5pbl9hY2tfZXZlbnQgPSBicGZfdGNwX2NhX2luX2Fja19ldmVudCwKIAkucGt0c19hY2tlZCA9IGJwZl90Y3BfY2FfcGt0c19hY2tlZCwKLQkubWluX3Rzb19zZWdzID0gYnBmX3RjcF9jYV9taW5fdHNvX3NlZ3MsCiYjNDM7CS50c29fc2VncyA9IGJwZl90Y3BfY2FfdHNvX3NlZ3MsCiAJLmNvbmdfY29udHJvbCA9IGJwZl90Y3BfY2FfY29uZ19jb250cm9sLAogCS51bmRvX2N3bmQgPSBicGZfdGNwX2NhX3VuZG9fY3duZCwKIAkuc25kYnVmX2V4cGFuZCA9IGJwZl90Y3BfY2Ffc25kYnVmX2V4cGFuZCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9iYnIuYyBiL25ldC9pcHY0L3RjcF9iYnIuYwppbmRleCA4MjM3OGEyYmZkMWUxLi5lY2YxMWJlNDZmMzgyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfYmJyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2Jici5jCkBAIC0yOTcsMTEgJiM0MzsyOTcsMTggQEAgc3RhdGljIHZvaWQgYmJyX3NldF9wYWNpbmdfcmF0ZShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBidywgaW50IGdhaW4pCiB9CiAKIC8qIG92ZXJyaWRlIHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzICovCi1fX2JwZl9rZnVuYyBzdGF0aWMgdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKQomIzQzO3N0YXRpYyB1MzIgYmJyX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spCiB7CiAJcmV0dXJuIFJFQURfT05DRShzay0mZ3Q7c2tfcGFjaW5nX3JhdGUpICZsdDsgKGJicl9taW5fdHNvX3JhdGUgJmd0OyZndDsgMykgPyAxIDogMjsKIH0KIAomIzQzO19fYnBmX2tmdW5jIHN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpCiYjNDM7ewomIzQzOwlpZiAodW5saWtlbHkoIW1zc19ub3cpKQomIzQzOwkJcmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spOwomIzQzOwlyZXR1cm4gdGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdywgYmJyX21pbl90c29fc2VncyhzaykpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzX2dvYWwoc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwpAQCAtMTE1MSw3ICYjNDM7MTE1OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9iYnJfY29uZ19vcHMgX19yZWFkX21vc3RseSA9IHsKIAkudW5kb19jd25kCT0gYmJyX3VuZG9fY3duZCwKIAkuY3duZF9ldmVudF90eF9zdGFydAk9IGJicl9jd25kX2V2ZW50X3R4X3N0YXJ0LAogCS5zc3RocmVzaAk9IGJicl9zc3RocmVzaCwKLQkubWluX3Rzb19zZWdzCT0gYmJyX21pbl90c29fc2VncywKJiM0MzsJLnRzb19zZWdzCT0gYmJyX3Rzb19zZWdzLAogCS5nZXRfaW5mbwk9IGJicl9nZXRfaW5mbywKIAkuc2V0X3N0YXRlCT0gYmJyX3NldF9zdGF0ZSwKIH07CkBAIC0xMTYzLDcgJiM0MzsxMTcwLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9zbmRidWZfZXhwYW5kKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl91bmRvX2N3bmQpCiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX2N3bmRfZXZlbnRfdHhfc3RhcnQpCiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NzdGhyZXNoKQotQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9taW5fdHNvX3NlZ3MpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl90c29fc2VncykKIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfc2V0X3N0YXRlKQogQlRGX0tGVU5DU19FTkQodGNwX2Jicl9jaGVja19rZnVuY19pZHMpCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCA2ZjRkY2E0YTRkZTk4Li5iN2YyZWU1ZTdhNmIxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC0yMjUyLDEzICYjNDM7MjI1MiwyMSBAQCBzdGF0aWMgYm9vbCB0Y3BfbmFnbGVfY2hlY2soYm9vbCBwYXJ0aWFsLCBjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLAogICogaW4gYmlnZ2VyIFRTTyBidXJzdHMuIFdlIHdlIGN1dCB0aGUgUlRULWJhc2VkIGFsbG93YW5jZSBpbiBoYWxmCiAgKiBmb3IgZXZlcnkgMl45IHVzZWMgKGFrYSA1MTIgdXMpIG9mIFJUVCwgc28gdGhhdCB0aGUgUlRULWJhc2VkIGFsbG93YW5jZQogICogaXMgYmVsb3cgMTUwMCBieXRlcyBhZnRlciA2ICogfjUwMCB1c2VjID0gM21zLgomIzQzOyAqCiYjNDM7ICogVGhlIG1pbl90c29fc2VncyBpcyBmbG9vcmVkIHRvIDEgdG8gYXZvaWQgc3VycHJpc2luZyBjb252ZXJzaW9uLiBBbHNvLAomIzQzOyAqIEJQRiBjYWxsZXJzIG1heSBwYXNzIG1zc19ub3cgPT0gMC4gSW4gdGhhdCBjYXNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZQomIzQzOyAqIHNhbml0aXplZCBtaW5fdHNvX3NlZ3MgdmFsdWUgYW5kIHNraXBzIGF1dG9zaXppbmcuCiAgKi8KLXN0YXRpYyB1MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LAotCQkJICAgIGludCBtaW5fdHNvX3NlZ3MpCiYjNDM7X19icGZfa2Z1bmMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdywKJiM0MzsJCQkJIGludCBtaW5fdHNvX3NlZ3MpCiB7CiYjNDM7CXUzMiBtaW5fdHNvID0gbWF4KG1pbl90c29fc2VncywgMSk7CiAJdW5zaWduZWQgbG9uZyBieXRlczsKIAl1MzIgcjsKIAomIzQzOwlpZiAodW5saWtlbHkoIW1zc19ub3cpKQomIzQzOwkJcmV0dXJuIG1pbl90c287CiYjNDM7CiAJYnl0ZXMgPSBSRUFEX09OQ0Uoc2stJmd0O3NrX3BhY2luZ19yYXRlKSAmZ3Q7Jmd0OyBSRUFEX09OQ0Uoc2stJmd0O3NrX3BhY2luZ19zaGlmdCk7CiAKIAlyID0gdGNwX21pbl9ydHQodGNwX3NrKHNrKSkgJmd0OyZndDsgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS0mZ3Q7aXB2NC5zeXNjdGxfdGNwX3Rzb19ydHRfbG9nKTsKQEAgLTIyNjcsOCAmIzQzOzIyNzUsOSBAQCBzdGF0aWMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdywKIAogCWJ5dGVzID0gbWluX3QodW5zaWduZWQgbG9uZywgYnl0ZXMsIHNrLSZndDtza19nc29fbWF4X3NpemUpOwogCi0JcmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvX3NlZ3MpOwomIzQzOwlyZXR1cm4gbWF4X3QodTMyLCBieXRlcyAvIG1zc19ub3csIG1pbl90c28pOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHRjcF90c29fYXV0b3NpemUpOwogCiAvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBzZWdtZW50cyB3ZSB3YW50IGluIHRoZSBza2Igd2UgYXJlIHRyYW5zbWl0dGluZy4KICAqIFNlZSBpZiBjb25nZXN0aW9uIGNvbnRyb2wgbW9kdWxlIHdhbnRzIHRvIGRlY2lkZTsgb3RoZXJ3aXNlLCBhdXRvc2l6ZS4KQEAgLTIyNzYsMTQgJiM0MzsyMjg1LDEzIEBAIHN0YXRpYyB1MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LAogc3RhdGljIHUzMiB0Y3BfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdykKIHsKIAljb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYV9vcHMgPSBpbmV0X2NzayhzayktJmd0O2ljc2tfY2Ffb3BzOwotCXUzMiBtaW5fdHNvLCB0c29fc2VnczsKLQotCW1pbl90c28gPSBjYV9vcHMtJmd0O21pbl90c29fc2VncyA/Ci0JCQljYV9vcHMtJmd0O21pbl90c29fc2VncyhzaykgOgotCQkJUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS0mZ3Q7aXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2Vncyk7CiYjNDM7CXUzMiB0c29fc2VnczsKIAotCXRzb19zZWdzID0gdGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdywgbWluX3Rzbyk7Ci0JcmV0dXJuIG1pbl90KHUzMiwgdHNvX3NlZ3MsIHNrLSZndDtza19nc29fbWF4X3NlZ3MpOwomIzQzOwl0c29fc2VncyA9IGNhX29wcy0mZ3Q7dHNvX3NlZ3MgPwomIzQzOwkJCWNhX29wcy0mZ3Q7dHNvX3NlZ3Moc2ssIG1zc19ub3cpIDoKJiM0MzsJCQl0Y3BfdHNvX2F1dG9zaXplKHNrLCBtc3Nfbm93LAomIzQzOwkJCQkJIFJFQURfT05DRShzb2NrX25ldChzayktJmd0O2lwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MpKTsKJiM0MzsJcmV0dXJuIGNsYW1wX3QodTMyLCB0c29fc2VncywgMSwgc2stJmd0O3NrX2dzb19tYXhfc2Vncyk7CiB9CiAKIC8qIFJldHVybnMgdGhlIHBvcnRpb24gb2Ygc2tiIHdoaWNoIGNhbiBiZSBzZW50IHJpZ2h0IGF3YXkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYwppbmRleCAwYTNlOWQzNWJmNmYwLi41ODI2MmU0OTAzMzY0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jCkBAIC0xMCw3ICYjNDM7MTAsNyBAQCBleHRlcm4gdTMyIGJicl9zbmRidWZfZXhwYW5kKHN0cnVjdCBzb2NrICpzaykgX19rc3ltOwogZXh0ZXJuIHUzMiBiYnJfdW5kb19jd25kKHN0cnVjdCBzb2NrICpzaykgX19rc3ltOwogZXh0ZXJuIHZvaWQgYmJyX2N3bmRfZXZlbnRfdHhfc3RhcnQoc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07CiBleHRlcm4gdTMyIGJicl9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTsKLWV4dGVybiB1MzIgYmJyX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTsKJiM0MztleHRlcm4gdTMyIGJicl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KSBfX2tzeW07CiBleHRlcm4gdm9pZCBiYnJfc2V0X3N0YXRlKHN0cnVjdCBzb2NrICpzaywgdTggbmV3X3N0YXRlKSBfX2tzeW07CiAKIGV4dGVybiB2b2lkIGRjdGNwX2luaXQoc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07CkBAIC05MCw5ICYjNDM7OTAsOSBAQCB1MzIgQlBGX1BST0coc3N0aHJlc2gsIHN0cnVjdCBzb2NrICpzaykKIH0KIAogU0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQotdTMyIEJQRl9QUk9HKG1pbl90c29fc2Vncywgc3RydWN0IHNvY2sgKnNrKQomIzQzO3UzMiBCUEZfUFJPRyh0c29fc2Vncywgc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdykKIHsKLQlyZXR1cm4gYmJyX21pbl90c29fc2Vncyhzayk7CiYjNDM7CXJldHVybiBiYnJfdHNvX3NlZ3Moc2ssIG1zc19ub3cpOwogfQogCiBTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCkBAIC0xMjAsNyAmIzQzOzEyMCw3IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2NhX2tmdW5jID0gewogCS5jd25kX2V2ZW50CT0gKHZvaWQgKiljd25kX2V2ZW50LAogCS5jd25kX2V2ZW50X3R4X3N0YXJ0ID0gKHZvaWQgKiljd25kX2V2ZW50X3R4X3N0YXJ0LAogCS5zc3RocmVzaAk9ICh2b2lkICopc3N0aHJlc2gsCi0JLm1pbl90c29fc2Vncwk9ICh2b2lkICopbWluX3Rzb19zZWdzLAomIzQzOwkudHNvX3NlZ3MJPSAodm9pZCAqKXRzb19zZWdzLAogCS5zZXRfc3RhdGUJPSAodm9pZCAqKXNldF9zdGF0ZSwKIAkucGt0c19hY2tlZCAgICAgPSAodm9pZCAqKXBrdHNfYWNrZWQsCiAJLm5hbWUJCT0gJiMzNDt0Y3BfY2Ffa2Z1bmMmIzM0OywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHRocm93IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBhdCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgcHJvYmFibHkgb2theSwgYnV0IHdlIHNob3VsZCBhbHdheXMgYmUgdGhvcm91Z2guCgpGaXJzdCwgdGhlIHBhdGNoIGl0c2VsZiByZWZhY3RvcnMgdGhlIGBtaW5fdHNvX3NlZ3NgIGhvb2sgd2l0aGluIHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG9wcy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZyb20gYHUzMiAoKm1pbl90c29fc2Vncykoc3RydWN0IHNvY2sgKnNrKWAgdG8gYHUzMiAoKnRzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KWAuIEJhc2ljYWxseSwgdGhleSYjMzk7cmUgYWRkaW5nIGBtc3Nfbm93YCB0byB0aGUgcGFyYW1ldGVycy4gTG9va2luZyBhdCB0aGUgaW5jbHVkZWQgZmlsZXMsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdXBkYXRpbmcgdGhlIGRlZmluaXRpb25zLCB0aGUgQlBGIGtmdW5jIGNoZWNrcywgYW5kIHRoZSBzZWxmdGVzdCB0byBtYXRjaCB0aGlzIG5ldyBzaWduYXR1cmUuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBgYmJyX21pbl90c29fc2Vnc2AgaXMgZ2V0dGluZyB1cGRhdGVkIGFjY29yZGluZ2x5LiBXZSBhbHNvIGhhdmUgYHRjcF90c29fYXV0b3NpemVgLCB3aGljaCBhcHBlYXJzIHRvIGJlIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgaW4gdGhpcyB3aG9sZSBwcm9jZXNzLgoKTm93IGZvciB0aGUgS01TQU4gcmlza3MuLi4gTGV0JiMzOTtzIHNlZS4KCiogICAqKk1lbW9yeSBBbGxvY2F0aW9uczoqKiBUaGlzIGRvZXNuJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHdoaWNoIGlzIGdvb2QuCiogICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIEkmIzM5O20gbm90IHNlZWluZyBhbnkgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgdGhhdCBhcmVuJiMzOTt0IHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGUgYG1zc19ub3dgIGlzIHBhc3NlZCBhcyBhIHZhbHVlLCBzbyB0aGF0IHNob3VsZCBiZSBzYWZlLgoqICAgKipVc2Vyc3BhY2UgRXhwb3N1cmU6KiogVGhlIGB0Y3BfY29uZ2VzdGlvbl9vcHNgIHN0cnVjdCBpcyBrZXJuZWwtaW50ZXJuYWwgYW5kIGFsc28gYSBCUEYgc3RydWN0X29wcywgc28gdGhhdCYjMzk7cyBub3QgYSBjb25jZXJuLgoqICAgKipCdWZmZXIgT3BlcmF0aW9uczoqKiBObyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlcnMsIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIHNrYnMsIG9yIHNvY2tldCBvcHRpb25zLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4KKiAgICoqQm91bmRzIENoZWNraW5nL0RhdGEgTGVuZ3RoczoqKiBJdCYjMzk7cyBjYWxjdWxhdGluZyBUU08gc2VnbWVudCBjb3VudHMgZm9yIHBhY2tldCBzZWdtZW50YXRpb24uIFRoaXMgaXMgdXN1YWxseSB3aGVyZSB3ZSBmaW5kIGlzc3VlcywgYnV0IGl0IGFwcGVhcnMgc2FmZSBoZXJlLgoqICAgKipCcmFuY2hpbmc6KiogTm8gYnJhbmNoaW5nIHNlZW1zIHRvIGJlIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgoKU28gZmFyLCBpdCBsb29rcyBjbGVhbi4gQnV0IGp1c3QgdG8gYmUgZXh0cmEgc3VyZSwgSSYjMzk7bSBnb2luZyB0byBydW4gYGdyZXBwZXJgIGFuZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhbnkgdXNhZ2Ugb2YgdGhlc2UgaG9va3MgdGhhdCBjb3VsZCBiZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZSwgZXNwZWNpYWxseSB3aXRoIG90aGVyIGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGVzLiBJIHdhbnQgdG8gc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgdXNpbmcgZWl0aGVyIGBtaW5fdHNvX3NlZ3NgIG9yIGB0c29fc2Vnc2AsIGp1c3QgdG8gdmVyaWZ5IHRoYXQuIEFsbCBpbiBhbGwsIG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBpcyBhIHJlbGF0aXZlbHkgc2FmZSBwYXRjaCBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUsIGJ1dCB2ZXJpZnlpbmcgdGhpcyB3aXRoIHRoZSBncmVwcGVyIHNlYXJjaCBpcyB0aGUgY29ycmVjdCBmaW5hbCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fdHNvX3NlZ3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3Q9MTA4Nz10Y3BfdGltZXN0YW1wcyAtIElOVEVHRVJcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdC0xMDk2LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3Q6MTA5Nzp0Y3BfbWluX3Rzb19zZWdzIC0gSU5URUdFUlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QtMTA5OC1cdE1pbmltYWwgbnVtYmVyIG9mIHNlZ21lbnRzIHBlciBUU08gZnJhbWUuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldG5zX2lwdjRfc3lzY3RsLnJzdD0xMTQ9aW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjdGxfdGNwX21pbl9ydHRfd2xlbiAgICAgICAgICAgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2Fja191cGRhdGVfcnQuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRuc19pcHY0X3N5c2N0bC5yc3Q6MTE1OnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubGlrZWx5KGljc2tfY2FfLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0bnNfaXB2NF9zeXNjdGwucnN0LTExNi11OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2N0bF90Y3BfdHNvX3J0dF9sb2cgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfdHNvX2F1dG9zaXplXG4tLVxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oPTU1PXN0cnVjdCBuZXRuc19pcHY0IHtcbi0tXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgtMjI1LVx0aW50IHN5c2N0bF90Y3BfY2hhbGxlbmdlX2Fja19saW1pdDtcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaDoyMjY6XHR1OCBzeXNjdGxfdGNwX21pbl90c29fc2VncztcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yMjctXHR1OCBzeXNjdGxfdGNwX3JlZmxlY3RfdG9zO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTgyNz11MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LFxuaW5jbHVkZS9uZXQvdGNwLmg6ODI4Olx0XHQgICAgIGludCBtaW5fdHNvX3NlZ3MpO1xuaW5jbHVkZS9uZXQvdGNwLmgtODI5LVxuLS1cbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jPTYyNz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xuLS1cbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTEzOTMtXHR7XG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxMzk0Olx0XHQucHJvY25hbWVcdD0gXCYjMzQ7dGNwX21pbl90c29fc2Vnc1wmIzM0Oyxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jOjEzOTU6XHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQuaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2Vncyxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTEzOTYtXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YodTgpLFxuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYz0yODc9c3RhdGljIHZvaWQgYmJyX3NldF9wYWNpbmdfcmF0ZShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBidywgaW50IGdhaW4pXG4tLVxubmV0L2lwdjQvdGNwX2Jici5jLTI5OC1cbm5ldC9pcHY0L3RjcF9iYnIuYzoyOTk6Lyogb3ZlcnJpZGUgc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgKi9cbm5ldC9pcHY0L3RjcF9iYnIuYzozMDA6c3RhdGljIHUzMiBiYnJfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9iYnIuYy0zMDEte1xuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYz0zMDU9X19icGZfa2Z1bmMgc3RhdGljIHUzMiBiYnJfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdylcbi0tXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzA3LVx0aWYgKHVubGlrZWx5KCFtc3Nfbm93KSlcbm5ldC9pcHY0L3RjcF9iYnIuYzozMDg6XHRcdHJldHVybiBiYnJfbWluX3Rzb19zZWdzKHNrKTtcbm5ldC9pcHY0L3RjcF9iYnIuYzozMDk6XHRyZXR1cm4gdGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdywgYmJyX21pbl90c29fc2VncyhzaykpO1xubmV0L2lwdjQvdGNwX2Jici5jLTMxMC19XG4tLVxubmV0L2lwdjQvdGNwX2Jici5jPTMxMj1zdGF0aWMgdTMyIGJicl90c29fc2Vnc19nb2FsKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzIyLVx0XHQgICAgICBHU09fTEVHQUNZX01BWF9TSVpFIC0gMSAtIE1BWF9UQ1BfSEVBREVSKTtcbm5ldC9pcHY0L3RjcF9iYnIuYzozMjM6XHRzZWdzID0gbWF4X3QodTMyLCBieXRlcyAvIHRwLVx1MDAzZW1zc19jYWNoZSwgYmJyX21pbl90c29fc2VncyhzaykpO1xubmV0L2lwdjQvdGNwX2Jici5jLTMyNC1cbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTM0Mzg9c3RhdGljIGludCBfX25ldF9pbml0IHRjcF9za19pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM0OTUtXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjM0OTY6XHRuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2VncyA9IDI7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM0OTctXHRuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3Rzb19ydHRfbG9nID0gOTsgIC8qIDJeOSA9IDUxMiB1c2VjICovXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyMzQ9c3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI1NS0gKlxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNTY6ICogVGhlIG1pbl90c29fc2VncyBpcyBmbG9vcmVkIHRvIDEgdG8gYXZvaWQgc3VycHJpc2luZyBjb252ZXJzaW9uLiBBbHNvLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNTctICogQlBGIGNhbGxlcnMgbWF5IHBhc3MgbXNzX25vdyA9PSAwLiBJbiB0aGF0IGNhc2UgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI1ODogKiBzYW5pdGl6ZWQgbWluX3Rzb19zZWdzIHZhbHVlIGFuZCBza2lwcyBhdXRvc2l6aW5nLlxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNTktICovXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjI2MD1fX2JwZl9rZnVuYyB1MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNjE6XHRcdFx0XHQgaW50IG1pbl90c29fc2Vncylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjYyLXtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjYzOlx0dTMyIG1pbl90c28gPSBtYXgobWluX3Rzb19zZWdzLCAxKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjY0LVx0dW5zaWduZWQgbG9uZyBieXRlcztcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjI4NT1zdGF0aWMgdTMyIHRjcF90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93KVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjkyLVx0XHRcdHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI5MzpcdFx0XHRcdFx0IFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2VncykpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyOTQtXHRyZXR1cm4gY2xhbXBfdCh1MzIsIHRzb19zZWdzLCAxLCBzay1cdTAwM2Vza19nc29fbWF4X3NlZ3MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwX3R1bm5lbHMuc2g9MzI9c2V0dXAoKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaC01Mi1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwX3R1bm5lbHMuc2g6NTM6XHRERUZBVUxUX1RDUF9NSU5fVFNPX1NFR1M9JChpcCBuZXRucyBleGVjIFwmIzM0OyRDTElFTlRfTlNcJiMzNDsgc3lzY3RsIC1uIG5ldC5pcHY0LnRjcF9taW5fdHNvX3NlZ3MpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoLTU0LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoPTExMT1kb190ZXN0KCkge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwX3R1bm5lbHMuc2gtMTQwLVx0aWYgWyBcJiMzNDskM1wmIzM0OyAhPSAmIzM5O29uJiMzOTsgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskS1NGVF9NQUNISU5FX1NMT1dcJiMzNDsgPSB5ZXMgXTsgdGhlblxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaDoxNDE6XHRcdGVjaG8gJiMzOTtTbG93IGNvbmZpZ3VyYXRpb247IGluY3JlYXNpbmcgbmV0LmlwdjQudGNwX21pbl90c29fc2VncyBhbmQgaW5pdGN3bmQmIzM5O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaDoxNDI6XHRcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JENMSUVOVF9OU1wmIzM0OyBzeXNjdGwgLXcgbmV0LmlwdjQudGNwX21pbl90c29fc2Vncz01MlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaC0xNDMtXHRcdGlmIFsgXCYjMzQ7JDJcJiMzNDsgPSA0IF07IHRoZW5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoLTE1MS1cdFx0aXAgbmV0bnMgZXhlYyBcJiMzNDskQ0xJRU5UX05TXCYjMzQ7IFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoOjE1MjpcdFx0ICAgIHN5c2N0bCAtdyBuZXQuaXB2NC50Y3BfbWluX3Rzb19zZWdzPVwmIzM0OyRERUZBVUxUX1RDUF9NSU5fVFNPX1NFR1NcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwX3R1bm5lbHMuc2gtMTUzLVx0Zmlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Jsb2NraW5nX2Jsb2NraW5nLXdyaXRlLnBrdC01LWAuL2RlZmF1bHRzLnNoXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Jsb2NraW5nX2Jsb2NraW5nLXdyaXRlLnBrdDo2Oi4vc2V0X3N5c2N0bHMucHkgL3Byb2Mvc3lzL25ldC9pcHY0L3RjcF9taW5fdHNvX3NlZ3M9MTBcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYmxvY2tpbmdfYmxvY2tpbmctd3JpdGUucGt0LTctYFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3Bfc2xvd19zdGFydF9zbG93LXN0YXJ0LWFmdGVyLWlkbGUucGt0LTYtLi9zZXRfc3lzY3Rscy5weSAvcHJvYy9zeXMvbmV0L2lwdjQvdGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZT0xIFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1hZnRlci1pZGxlLnBrdDo3Olx0XHQgL3Byb2Mvc3lzL25ldC9pcHY0L3RjcF9taW5fdHNvX3NlZ3M9MTBgXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1hZnRlci1pZGxlLnBrdC04LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3Bfc2xvd19zdGFydF9zbG93LXN0YXJ0LWFmdGVyLXdpbi11cGRhdGUucGt0LTYtLi9zZXRfc3lzY3Rscy5weSAvcHJvYy9zeXMvbmV0L2lwdjQvdGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZT0xIFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1hZnRlci13aW4tdXBkYXRlLnBrdDo3Olx0XHQgL3Byb2Mvc3lzL25ldC9pcHY0L3RjcF9taW5fdHNvX3NlZ3M9MTBgXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1hZnRlci13aW4tdXBkYXRlLnBrdC04LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3Bfc2xvd19zdGFydF9zbG93LXN0YXJ0LWZxLWFjay1wZXItMnBrdC5wa3Q9MTE9c3lzY3RsIC1xIG5ldC9pcHY0L3RjcF9wYWNpbmdfc3NfcmF0aW89MjAwXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1mcS1hY2stcGVyLTJwa3QucGt0OjEyOnN5c2N0bCAtZSAtcSBuZXQuaXB2NC50Y3BfbWluX3Rzb19zZWdzPTJgXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1mcS1hY2stcGVyLTJwa3QucGt0LTEzLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfdGltZXN0YW1waW5nX3RjcF90eF90aW1lc3RhbXBfYnVnLnBrdC04LWAuL2RlZmF1bHRzLnNoXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3RpbWVzdGFtcGluZ190Y3BfdHhfdGltZXN0YW1wX2J1Zy5wa3Q6OTpzeXNjdGwgLXEgbmV0LmlwdjQudGNwX21pbl90c29fc2Vncz03MFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF90aW1lc3RhbXBpbmdfdGNwX3R4X3RpbWVzdGFtcF9idWcucGt0LTEwLWBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB0Y3BfdHNvX3NlZ3NgIGluIGB0Y3Bfb3V0cHV0LmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRvIGV4YW1pbmUgaG93IGB0Y3BfdHNvX3NlZ3NgIGlzIGNhbGxlZCBhbmQgdXRpbGl6ZWQgd2l0aGluIGBuZXQvaXB2NC90Y3Bfb3V0cHV0LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgVENQIG91dHB1dCBwYXRoLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBpcyBpdCBtYW5pcHVsYXRpbmc/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIG9wZXJhdGlvbiBvbiBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSB3aXRoIFRTTyBlbmFibGVkPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcG9pbnRzIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBhbmQgd2hhdCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBpcy4gSXMgaXQgcGFydCBvZiB0aGUgaW5pdGlhbCBzZWdtZW50IGNyZWF0aW9uLCBvciBpcyBpdCBpbnZvbHZlZCBpbiBzb21lIGtpbmQgb2YgcmV0cmFuc21pc3Npb24gb3IgYWRqdXN0bWVudD8gVW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgaW4gdGhlIG92ZXJhbGwgZmxvdyBpcyB0aGUga2V5IHRvIGFzc2Vzc2luZyBpdHMgZnVuY3Rpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yIHBlcmhhcHMgc3BvdHRpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3Rzb19zZWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMjgwPUVYUE9SVF9TWU1CT0xfR1BMKHRjcF90c29fYXV0b3NpemUpO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjg0LSAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyODU6c3RhdGljIHUzMiB0Y3BfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjg2LXtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9Mjk3Mj1zdGF0aWMgYm9vbCB0Y3Bfd3JpdGVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LCBpbnQgbm9uYWdsZSxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjk5OS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozMDAwOlx0bWF4X3NlZ3MgPSB0Y3BfdHNvX3NlZ3Moc2ssIG1zc19ub3cpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTMwMDEtXHR3aGlsZSAoKHNrYiA9IHRjcF9zZW5kX2hlYWQoc2spKSkge1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zNzMzPXZvaWQgdGNwX3htaXRfcmV0cmFuc21pdF9xdWV1ZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM3NDYtXHRza2IgPSB0cC1cdTAwM2VyZXRyYW5zbWl0X3NrYl9oaW50ID86IHJ0eF9oZWFkO1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjM3NDc6XHRtYXhfc2VncyA9IHRjcF90c29fc2VncyhzaywgdGNwX2N1cnJlbnRfbXNzKHNrKSk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzc0OC1cdHNrYl9yYnRyZWVfd2Fsa19mcm9tKHNrYikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU2MQoJCQkJCQkJb3V0cHV0OiAxOTkKCQkJCQkJCXRob3VnaHRzOiA0MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gQ29uY2VybnMgSGVyZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgb3ZlciB0aGVzZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgY2FsbGJhY2tzIGFuZCBJJiMzOTttIGZlZWxpbmcgcHJldHR5IGNvbmZpZGVudCBhYm91dCB0aGUgS01TQU4gc2l0dWF0aW9uLiBUaGUgY29yZSBvZiBpdCBpcyB0aGUgcmVmYWN0b3Jpbmcgb2YgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBvcHMuIFdlJiMzOTtyZSBtb3ZpbmcgZnJvbSBgbWluX3Rzb19zZWdzYCB0byBhIGB0c29fc2Vnc2AgY2FsbGJhY2suIFRoaXMgbWFrZXMgc2Vuc2U7IGl0IGxldHMgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZXMgbGlrZSBCQlIgYW5kIEJQRiBDQSBjYWxjdWxhdGUgdGhlIFRTTyBzZWdtZW50IGNvdW50IGJhc2VkIG9uIHRoZSBjdXJyZW50IE1TUywgd2hpY2ggZ2l2ZXMgdXMgbW9yZSBmbGV4aWJpbGl0eS4gV2UgYXJlIGFsc28gZXhwb3NpbmcgYHRjcF90c29fYXV0b3NpemVgIGFzIGEgQlBGIGtmdW5jIGFuZCBhZGRpbmcgc29tZSBjbGFtcGluZyBhbmQgc2FuaXRpemF0aW9uLgoKSGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIHdoeSB0aGlzICpzaG91bGRuJiMzOTt0KiB0cmlnZ2VyIGFueSBLTVNBTiBmbGFnczoKCiogICAqKk5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlczoqKiBUaGlzIHBhdGNoIGlzbiYjMzk7dCBjcmVhdGluZywgcmVhZGluZywgd3JpdGluZywgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCYjMzk7cyB0aGUga2V5LiBLTVNBTiBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIHRob3NlIHNjZW5hcmlvcyB3aGVyZSB0aGUgc3lzdGVtIG1pZ2h0IHVzZSBkYXRhIGJlZm9yZSBpdCYjMzk7cyBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGF0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBoYXBwZW5pbmcgaGVyZS4KKiAgICoqU2NhbGFyIERhdGEgT25seToqKiBUaGUgaW5wdXRzIGFuZCBvdXRwdXRzIGFyZSBqdXN0IGludGVnZXJzIC0gYHUzMmAsIGB1bnNpZ25lZCBpbnRgLiBUaGUgcG90ZW50aWFsIGZvciB3ZWlyZG5lc3Mgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBqdXN0IHZhbmlzaGluZ2x5IHNtYWxsLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzY2FsYXIgdmFsdWVzIHBhc3NlZCBieSB2YWx1ZS4KKiAgICoqU2FmZXR5IENoZWNrczoqKiBXZSYjMzk7dmUgZ290IGNsYW1waW5nIGFuZCBib3VuZHMgY2hlY2tzIGluIHBsYWNlLiBUaGF0IGFkZHMgYSBsYXllciBvZiBwcm90ZWN0aW9uIHRoYXQgdGhlIHZhbHVlIGlzIGFsd2F5cyBpbiBhIGtub3duIGdvb2Qgc3RhdGUuCgpLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBhIHNlcGFyYXRlIGlzc3VlLCBhbmQgdGhhdCYjMzk7cyB0aGUgbW9yZSBhcHByb3ByaWF0ZSB0b29sIGZvciB0aGUgc29ydHMgb2YgZXJyb3JzIHlvdSYjMzk7ZCBlbmNvdW50ZXIgaGVyZSBpZiB0aGVyZSB3ZXJlIGFueS4gVGhpbmdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWF0aC9sb2dpYyBidWdzLiBCdXQgdGhhdCYjMzk7cyBub3Qgd2hhdCBLTVNBTiBpcyBmb3IuCgpTbywgSSYjMzk7bSBjb21mb3J0YWJsZSBjYWxsaW5nIHRoaXMgYE5lZWRzS01TQU5gIGFzIGBmYWxzZWAuIFdlIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2AuIE5vIG5lZWQgdG8gYnVybiBhbnkgY3ljbGVzIG9uIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGlzIHBhdGNoIGxvb2tzIGNsZWFuIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgaW50ZXJmYWNlIGJ5IHJlcGxhY2luZyB0aGUgYG1pbl90c29fc2Vnc2AgY2FsbGJhY2sgd2l0aCBgdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdylgLCB1cGRhdGVzIEJCUiBhbmQgQlBGIGNvbmdlc3Rpb24gY29udHJvbCBob29rcywgYW5kIGV4cG9ydHMgYHRjcF90c29fYXV0b3NpemVgIGFzIGEgQlBGIGtmdW5jLlxuXG5BbGwgbW9kaWZpZWQgYW5kIGFkZGVkIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIHNjYWxhciBpbnRlZ2VyIHZhbHVlcyBwYXNzZWQgYnkgdmFsdWUgKGB1MzJgLCBgdW5zaWduZWQgaW50YCwgcG9pbnRlcnMgdG8gZnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0IGBzb2NrYCkuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlci1zcGFjZSAoc3VjaCBhcyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBvciBpb2N0bCByZXR1cm5zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBpbnRlcmZhY2UgYnkgcmVwbGFjaW5nIHRoZSBgbWluX3Rzb19zZWdzYCBjYWxsYmFjayB3aXRoIGB0c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KWAsIHVwZGF0ZXMgQkJSIGFuZCBCUEYgY29uZ2VzdGlvbiBjb250cm9sIGhvb2tzLCBhbmQgZXhwb3J0cyBgdGNwX3Rzb19hdXRvc2l6ZWAgYXMgYSBCUEYga2Z1bmMuXG5cbkFsbCBtb2RpZmllZCBhbmQgYWRkZWQgZnVuY3Rpb25zIG9wZXJhdGUgb24gc2NhbGFyIGludGVnZXIgdmFsdWVzIHBhc3NlZCBieSB2YWx1ZSAoYHUzMmAsIGB1bnNpZ25lZCBpbnRgLCBwb2ludGVycyB0byBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgYHNvY2tgKS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyLXNwYWNlIChzdWNoIGFzIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIG9yIGlvY3RsIHJldHVybnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMxOjQ1LjQxMjE0ODE3M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzM1OTQ3NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRDUF9DT05HX0JCUlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfdHNvX2F1dG9zaXplXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGludGVyZmFjZSBieSByZXBsYWNpbmcgdGhlIGBtaW5fdHNvX3NlZ3NgIGNhbGxiYWNrIHdpdGggYHRzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpYCwgdXBkYXRlcyBCQlIgYW5kIEJQRiBjb25nZXN0aW9uIGNvbnRyb2wgaG9va3MsIGFuZCBleHBvcnRzIGB0Y3BfdHNvX2F1dG9zaXplYCBhcyBhIEJQRiBrZnVuYy5cXG5cXG5BbGwgbW9kaWZpZWQgYW5kIGFkZGVkIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIHNjYWxhciBpbnRlZ2VyIHZhbHVlcyBwYXNzZWQgYnkgdmFsdWUgKGB1MzJgLCBgdW5zaWduZWQgaW50YCwgcG9pbnRlcnMgdG8gZnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0IGBzb2NrYCkuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlci1zcGFjZSAoc3VjaCBhcyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBvciBpb2N0bCByZXR1cm5zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgaW50ZXJmYWNlIGJ5IHJlcGxhY2luZyB0aGUgbWluX3Rzb19zZWdzIGNhbGxiYWNrIHdpdGggYSB0c29fc2VncyBjYWxsYmFjaywgdXBkYXRpbmcgVENQIG91dHB1dCBsb2dpYyAodGNwX3Rzb19hdXRvc2l6ZSwgdGNwX3Rzb19zZWdzKSwgQkJSIGNvbmdlc3Rpb24gY29udHJvbCwgYW5kIEJQRiBUQ1AgQ0Egc3RydWN0X29wcy4gdGNwX3Rzb19hdXRvc2l6ZSBpcyBhbHNvIGV4cG9zZWQgYXMgYSBCUEYga2Z1bmMuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbHRlciB0aGUgVENQIHNlZ21lbnRhdGlvbiBhbmQgcGFja2V0IHNjaGVkdWxpbmcgcGF0aCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMxOjQ1LjQxMjE1MzcwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMxNjQwMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDdmZWVjMjRhZTIxMDQ0Y2Y3Y2RhMmY2NmY2ZmIzNzQ1NGI1NTM3YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDAxOjMxOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmhcXG5pbmRleCA2NzBjMjA4NzZmMjY1Li43OWYyN2FjOWU5NjNhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXFxuKysrIGIvaW5jbHVkZS9uZXQvdGNwLmhcXG5AQCAtODI0LDYgKzgyNCw5IEBAIHVuc2lnbmVkIGludCB0Y3Bfc3luY19tc3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgcG10dSk7XFxuIHVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKTtcXG4gdTMyIHRjcF9jbGFtcF9wcm9iZTBfdG9fdXNlcl90aW1lb3V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdTMyIHdoZW4pO1xcbiBcXG4rdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcXG4rXFx0XFx0ICAgICBpbnQgbWluX3Rzb19zZWdzKTtcXG4rXFxuIC8qIEJvdW5kIE1TUyAvIFRTTyBwYWNrZXQgc2l6ZSB3aXRoIHRoZSBoYWxmIG9mIHRoZSB3aW5kb3cgKi9cXG4gc3RhdGljIGlubGluZSBpbnQgdGNwX2JvdW5kX3RvX2hhbGZfd25kKHN0cnVjdCB0Y3Bfc29jayAqdHAsIGludCBwa3RzaXplKVxcbiB7XFxuQEAgLTEzNjEsOCArMTM2NCwxNiBAQCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHtcXG4gXFx0LyogaG9vayBmb3IgcGFja2V0IGFjayBhY2NvdW50aW5nIChvcHRpb25hbCkgKi9cXG4gXFx0dm9pZCAoKnBrdHNfYWNrZWQpKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBsZSk7XFxuIFxcbi1cXHQvKiBvdmVycmlkZSBzeXNjdGxfdGNwX21pbl90c29fc2VncyAob3B0aW9uYWwpICovXFxuLVxcdHUzMiAoKm1pbl90c29fc2Vncykoc3RydWN0IHNvY2sgKnNrKTtcXG4rXFx0LyogT3ZlcnJpZGUgdGNwX3Rzb19hdXRvc2l6ZSgpIChvcHRpb25hbClcXG4rXFx0ICpcXG4rXFx0ICogSWYgcHJvdmlkZWQsIHRoaXMgY2FsbGJhY2sgc3VwcGxpZXMgdGhlIFRTTyBzZWdtZW50IHRhcmdldCBjb3VudFxcbitcXHQgKiBpbnN0ZWFkIG9mIHVzaW5nIHRjcF90c29fYXV0b3NpemUoKS4gVGhlIHJldHVybmVkIHZhbHVlIGlzXFxuK1xcdCAqIHN1YnNlcXVlbnRseSBjbGFtcGVkIHRvIFsxLCBzay1cXHUwMDNlc2tfZ3NvX21heF9zZWdzXSBieSB0aGUgY2FsbGVyLlxcbitcXHQgKlxcbitcXHQgKiBGb3IgdGhlIGtlcm5lbCBjYWxsYmFjayBwYXRoLCBtc3Nfbm93IG9yaWdpbmF0ZXMgZnJvbVxcbitcXHQgKiB0Y3BfY3VycmVudF9tc3MoKSBhbmQgc2hvdWxkIG5ldmVyIGJlIHplcm8uXFxuK1xcdCAqL1xcbitcXHR1MzIgKCp0c29fc2Vncykoc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdyk7XFxuIFxcbiBcXHQvKiBuZXcgdmFsdWUgb2YgY3duZCBhZnRlciBsb3NzIChyZXF1aXJlZCkgKi9cXG4gXFx0dTMyICAoKnVuZG9fY3duZCkoc3RydWN0IHNvY2sgKnNrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYnBmX3RjcF9jYS5jIGIvbmV0L2lwdjQvYnBmX3RjcF9jYS5jXFxuaW5kZXggNzkxZTE1MDYzMjM3Yy4uOWRlZWQyMjQ0YzJkZSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9icGZfdGNwX2NhLmNcXG4rKysgYi9uZXQvaXB2NC9icGZfdGNwX2NhLmNcXG5AQCAtMTk0LDYgKzE5NCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfcmVub19jb25nX2F2b2lkKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Jlbm9fdW5kb19jd25kKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Nsb3dfc3RhcnQpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfY29uZ19hdm9pZF9haSlcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF90c29fYXV0b3NpemUpXFxuIEJURl9LRlVOQ1NfRU5EKGJwZl90Y3BfY2FfY2hlY2tfa2Z1bmNfaWRzKVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl90Y3BfY2Ffa2Z1bmNfc2V0ID0ge1xcbkBAIC0yODQsNyArMjg1LDcgQEAgc3RhdGljIHZvaWQgYnBmX3RjcF9jYV9wa3RzX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBcXG4ge1xcbiB9XFxuIFxcbi1zdGF0aWMgdTMyIGJwZl90Y3BfY2FfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaylcXG4rc3RhdGljIHUzMiBicGZfdGNwX2NhX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMzIwLDcgKzMyMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIF9fYnBmX29wc190Y3BfY29uZ2VzdGlvbl9vcHMgPSB7XFxuIFxcdC5jd25kX2V2ZW50X3R4X3N0YXJ0ID0gYnBmX3RjcF9jYV9jd25kX2V2ZW50X3R4X3N0YXJ0LFxcbiBcXHQuaW5fYWNrX2V2ZW50ID0gYnBmX3RjcF9jYV9pbl9hY2tfZXZlbnQsXFxuIFxcdC5wa3RzX2Fja2VkID0gYnBmX3RjcF9jYV9wa3RzX2Fja2VkLFxcbi1cXHQubWluX3Rzb19zZWdzID0gYnBmX3RjcF9jYV9taW5fdHNvX3NlZ3MsXFxuK1xcdC50c29fc2VncyA9IGJwZl90Y3BfY2FfdHNvX3NlZ3MsXFxuIFxcdC5jb25nX2NvbnRyb2wgPSBicGZfdGNwX2NhX2NvbmdfY29udHJvbCxcXG4gXFx0LnVuZG9fY3duZCA9IGJwZl90Y3BfY2FfdW5kb19jd25kLFxcbiBcXHQuc25kYnVmX2V4cGFuZCA9IGJwZl90Y3BfY2Ffc25kYnVmX2V4cGFuZCxcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2Jici5jIGIvbmV0L2lwdjQvdGNwX2Jici5jXFxuaW5kZXggODIzNzhhMmJmZDFlMS4uZWNmMTFiZTQ2ZjM4MiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfYmJyLmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfYmJyLmNcXG5AQCAtMjk3LDExICsyOTcsMTggQEAgc3RhdGljIHZvaWQgYmJyX3NldF9wYWNpbmdfcmF0ZShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBidywgaW50IGdhaW4pXFxuIH1cXG4gXFxuIC8qIG92ZXJyaWRlIHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzICovXFxuLV9fYnBmX2tmdW5jIHN0YXRpYyB1MzIgYmJyX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spXFxuK3N0YXRpYyB1MzIgYmJyX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spXFxuIHtcXG4gXFx0cmV0dXJuIFJFQURfT05DRShzay1cXHUwMDNlc2tfcGFjaW5nX3JhdGUpIFxcdTAwM2MgKGJicl9taW5fdHNvX3JhdGUgXFx1MDAzZVxcdTAwM2UgMykgPyAxIDogMjtcXG4gfVxcbiBcXG4rX19icGZfa2Z1bmMgc3RhdGljIHUzMiBiYnJfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdylcXG4re1xcbitcXHRpZiAodW5saWtlbHkoIW1zc19ub3cpKVxcbitcXHRcXHRyZXR1cm4gYmJyX21pbl90c29fc2Vncyhzayk7XFxuK1xcdHJldHVybiB0Y3BfdHNvX2F1dG9zaXplKHNrLCBtc3Nfbm93LCBiYnJfbWluX3Rzb19zZWdzKHNrKSk7XFxuK31cXG4rXFxuIHN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzX2dvYWwoc3RydWN0IHNvY2sgKnNrKVxcbiB7XFxuIFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbkBAIC0xMTUxLDcgKzExNTgsNyBAQCBzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfYmJyX2Nvbmdfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuIFxcdC51bmRvX2N3bmRcXHQ9IGJicl91bmRvX2N3bmQsXFxuIFxcdC5jd25kX2V2ZW50X3R4X3N0YXJ0XFx0PSBiYnJfY3duZF9ldmVudF90eF9zdGFydCxcXG4gXFx0LnNzdGhyZXNoXFx0PSBiYnJfc3N0aHJlc2gsXFxuLVxcdC5taW5fdHNvX3NlZ3NcXHQ9IGJicl9taW5fdHNvX3NlZ3MsXFxuK1xcdC50c29fc2Vnc1xcdD0gYmJyX3Rzb19zZWdzLFxcbiBcXHQuZ2V0X2luZm9cXHQ9IGJicl9nZXRfaW5mbyxcXG4gXFx0LnNldF9zdGF0ZVxcdD0gYmJyX3NldF9zdGF0ZSxcXG4gfTtcXG5AQCAtMTE2Myw3ICsxMTcwLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9zbmRidWZfZXhwYW5kKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3VuZG9fY3duZClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9jd25kX2V2ZW50X3R4X3N0YXJ0KVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NzdGhyZXNoKVxcbi1CVEZfSURfRkxBR1MoZnVuYywgYmJyX21pbl90c29fc2VncylcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl90c29fc2VncylcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9zZXRfc3RhdGUpXFxuIEJURl9LRlVOQ1NfRU5EKHRjcF9iYnJfY2hlY2tfa2Z1bmNfaWRzKVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXFxuaW5kZXggNmY0ZGNhNGE0ZGU5OC4uYjdmMmVlNWU3YTZiMSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcXG4rKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcXG5AQCAtMjI1MiwxMyArMjI1MiwyMSBAQCBzdGF0aWMgYm9vbCB0Y3BfbmFnbGVfY2hlY2soYm9vbCBwYXJ0aWFsLCBjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbiAgKiBpbiBiaWdnZXIgVFNPIGJ1cnN0cy4gV2Ugd2UgY3V0IHRoZSBSVFQtYmFzZWQgYWxsb3dhbmNlIGluIGhhbGZcXG4gICogZm9yIGV2ZXJ5IDJeOSB1c2VjIChha2EgNTEyIHVzKSBvZiBSVFQsIHNvIHRoYXQgdGhlIFJUVC1iYXNlZCBhbGxvd2FuY2VcXG4gICogaXMgYmVsb3cgMTUwMCBieXRlcyBhZnRlciA2ICogfjUwMCB1c2VjID0gM21zLlxcbisgKlxcbisgKiBUaGUgbWluX3Rzb19zZWdzIGlzIGZsb29yZWQgdG8gMSB0byBhdm9pZCBzdXJwcmlzaW5nIGNvbnZlcnNpb24uIEFsc28sXFxuKyAqIEJQRiBjYWxsZXJzIG1heSBwYXNzIG1zc19ub3cgPT0gMC4gSW4gdGhhdCBjYXNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZVxcbisgKiBzYW5pdGl6ZWQgbWluX3Rzb19zZWdzIHZhbHVlIGFuZCBza2lwcyBhdXRvc2l6aW5nLlxcbiAgKi9cXG4tc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXFxuLVxcdFxcdFxcdCAgICBpbnQgbWluX3Rzb19zZWdzKVxcbitfX2JwZl9rZnVuYyB1MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LFxcbitcXHRcXHRcXHRcXHQgaW50IG1pbl90c29fc2VncylcXG4ge1xcbitcXHR1MzIgbWluX3RzbyA9IG1heChtaW5fdHNvX3NlZ3MsIDEpO1xcbiBcXHR1bnNpZ25lZCBsb25nIGJ5dGVzO1xcbiBcXHR1MzIgcjtcXG4gXFxuK1xcdGlmICh1bmxpa2VseSghbXNzX25vdykpXFxuK1xcdFxcdHJldHVybiBtaW5fdHNvO1xcbitcXG4gXFx0Ynl0ZXMgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3BhY2luZ19yYXRlKSBcXHUwMDNlXFx1MDAzZSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3BhY2luZ19zaGlmdCk7XFxuIFxcbiBcXHRyID0gdGNwX21pbl9ydHQodGNwX3NrKHNrKSkgXFx1MDAzZVxcdTAwM2UgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3Rzb19ydHRfbG9nKTtcXG5AQCAtMjI2Nyw4ICsyMjc1LDkgQEAgc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXFxuIFxcbiBcXHRieXRlcyA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGJ5dGVzLCBzay1cXHUwMDNlc2tfZ3NvX21heF9zaXplKTtcXG4gXFxuLVxcdHJldHVybiBtYXhfdCh1MzIsIGJ5dGVzIC8gbXNzX25vdywgbWluX3Rzb19zZWdzKTtcXG4rXFx0cmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvKTtcXG4gfVxcbitFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfdHNvX2F1dG9zaXplKTtcXG4gXFxuIC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIHdlIHdhbnQgaW4gdGhlIHNrYiB3ZSBhcmUgdHJhbnNtaXR0aW5nLlxcbiAgKiBTZWUgaWYgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZSB3YW50cyB0byBkZWNpZGU7IG90aGVyd2lzZSwgYXV0b3NpemUuXFxuQEAgLTIyNzYsMTQgKzIyODUsMTMgQEAgc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXFxuIHN0YXRpYyB1MzIgdGNwX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3cpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2Ffb3BzID0gaW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2NhX29wcztcXG4tXFx0dTMyIG1pbl90c28sIHRzb19zZWdzO1xcbi1cXG4tXFx0bWluX3RzbyA9IGNhX29wcy1cXHUwMDNlbWluX3Rzb19zZWdzID9cXG4tXFx0XFx0XFx0Y2Ffb3BzLVxcdTAwM2VtaW5fdHNvX3NlZ3Moc2spIDpcXG4tXFx0XFx0XFx0UkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2Vncyk7XFxuK1xcdHUzMiB0c29fc2VncztcXG4gXFxuLVxcdHRzb19zZWdzID0gdGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdywgbWluX3Rzbyk7XFxuLVxcdHJldHVybiBtaW5fdCh1MzIsIHRzb19zZWdzLCBzay1cXHUwMDNlc2tfZ3NvX21heF9zZWdzKTtcXG4rXFx0dHNvX3NlZ3MgPSBjYV9vcHMtXFx1MDAzZXRzb19zZWdzID9cXG4rXFx0XFx0XFx0Y2Ffb3BzLVxcdTAwM2V0c29fc2VncyhzaywgbXNzX25vdykgOlxcbitcXHRcXHRcXHR0Y3BfdHNvX2F1dG9zaXplKHNrLCBtc3Nfbm93LFxcbitcXHRcXHRcXHRcXHRcXHQgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2VncykpO1xcbitcXHRyZXR1cm4gY2xhbXBfdCh1MzIsIHRzb19zZWdzLCAxLCBzay1cXHUwMDNlc2tfZ3NvX21heF9zZWdzKTtcXG4gfVxcbiBcXG4gLyogUmV0dXJucyB0aGUgcG9ydGlvbiBvZiBza2Igd2hpY2ggY2FuIGJlIHNlbnQgcmlnaHQgYXdheSAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmNcXG5pbmRleCAwYTNlOWQzNWJmNmYwLi41ODI2MmU0OTAzMzY0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuY1xcbkBAIC0xMCw3ICsxMCw3IEBAIGV4dGVybiB1MzIgYmJyX3NuZGJ1Zl9leHBhbmQoc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07XFxuIGV4dGVybiB1MzIgYmJyX3VuZG9fY3duZChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcXG4gZXh0ZXJuIHZvaWQgYmJyX2N3bmRfZXZlbnRfdHhfc3RhcnQoc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07XFxuIGV4dGVybiB1MzIgYmJyX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzaykgX19rc3ltO1xcbi1leHRlcm4gdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07XFxuK2V4dGVybiB1MzIgYmJyX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpIF9fa3N5bTtcXG4gZXh0ZXJuIHZvaWQgYmJyX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIHU4IG5ld19zdGF0ZSkgX19rc3ltO1xcbiBcXG4gZXh0ZXJuIHZvaWQgZGN0Y3BfaW5pdChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcXG5AQCAtOTAsOSArOTAsOSBAQCB1MzIgQlBGX1BST0coc3N0aHJlc2gsIHN0cnVjdCBzb2NrICpzaylcXG4gfVxcbiBcXG4gU0VDKFxcXCJzdHJ1Y3Rfb3BzXFxcIilcXG4tdTMyIEJQRl9QUk9HKG1pbl90c29fc2Vncywgc3RydWN0IHNvY2sgKnNrKVxcbit1MzIgQlBGX1BST0codHNvX3NlZ3MsIHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXFxuIHtcXG4tXFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xcbitcXHRyZXR1cm4gYmJyX3Rzb19zZWdzKHNrLCBtc3Nfbm93KTtcXG4gfVxcbiBcXG4gU0VDKFxcXCJzdHJ1Y3Rfb3BzXFxcIilcXG5AQCAtMTIwLDcgKzEyMCw3IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2NhX2tmdW5jID0ge1xcbiBcXHQuY3duZF9ldmVudFxcdD0gKHZvaWQgKiljd25kX2V2ZW50LFxcbiBcXHQuY3duZF9ldmVudF90eF9zdGFydCA9ICh2b2lkICopY3duZF9ldmVudF90eF9zdGFydCxcXG4gXFx0LnNzdGhyZXNoXFx0PSAodm9pZCAqKXNzdGhyZXNoLFxcbi1cXHQubWluX3Rzb19zZWdzXFx0PSAodm9pZCAqKW1pbl90c29fc2VncyxcXG4rXFx0LnRzb19zZWdzXFx0PSAodm9pZCAqKXRzb19zZWdzLFxcbiBcXHQuc2V0X3N0YXRlXFx0PSAodm9pZCAqKXNldF9zdGF0ZSxcXG4gXFx0LnBrdHNfYWNrZWQgICAgID0gKHZvaWQgKilwa3RzX2Fja2VkLFxcbiBcXHQubmFtZVxcdFxcdD0gXFxcInRjcF9jYV9rZnVuY1xcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMxOjQ2LjA0NDUyNTM2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDMyMDg5ODE2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0NPTkdfQkJSXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF90c29fYXV0b3NpemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGludGVyZmFjZSBieSByZXBsYWNpbmcgdGhlIG1pbl90c29fc2VncyBjYWxsYmFjayB3aXRoIGEgdHNvX3NlZ3MgY2FsbGJhY2ssIHVwZGF0aW5nIFRDUCBvdXRwdXQgbG9naWMgKHRjcF90c29fYXV0b3NpemUsIHRjcF90c29fc2VncyksIEJCUiBjb25nZXN0aW9uIGNvbnRyb2wsIGFuZCBCUEYgVENQIENBIHN0cnVjdF9vcHMuIHRjcF90c29fYXV0b3NpemUgaXMgYWxzbyBleHBvc2VkIGFzIGEgQlBGIGtmdW5jLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWx0ZXIgdGhlIFRDUCBzZWdtZW50YXRpb24gYW5kIHBhY2tldCBzY2hlZHVsaW5nIHBhdGggaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0N2ZlZWMyNGFlMjEwNDRjZjdjZGEyZjY2ZjZmYjM3NDU0YjU1MzdiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMTozMTo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmhcbmluZGV4IDY3MGMyMDg3NmYyNjUuLjc5ZjI3YWM5ZTk2M2EgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxuKysrIGIvaW5jbHVkZS9uZXQvdGNwLmhcbkBAIC04MjQsNiArODI0LDkgQEAgdW5zaWduZWQgaW50IHRjcF9zeW5jX21zcyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwbXR1KTtcbiB1bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzayk7XG4gdTMyIHRjcF9jbGFtcF9wcm9iZTBfdG9fdXNlcl90aW1lb3V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdTMyIHdoZW4pO1xuIFxuK3UzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4rXHRcdCAgICAgaW50IG1pbl90c29fc2Vncyk7XG4rXG4gLyogQm91bmQgTVNTIC8gVFNPIHBhY2tldCBzaXplIHdpdGggdGhlIGhhbGYgb2YgdGhlIHdpbmRvdyAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHRjcF9ib3VuZF90b19oYWxmX3duZChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgcGt0c2l6ZSlcbiB7XG5AQCAtMTM2MSw4ICsxMzY0LDE2IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMge1xuIFx0LyogaG9vayBmb3IgcGFja2V0IGFjayBhY2NvdW50aW5nIChvcHRpb25hbCkgKi9cbiBcdHZvaWQgKCpwa3RzX2Fja2VkKShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wbGUpO1xuIFxuLVx0Lyogb3ZlcnJpZGUgc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgKG9wdGlvbmFsKSAqL1xuLVx0dTMyICgqbWluX3Rzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2spO1xuK1x0LyogT3ZlcnJpZGUgdGNwX3Rzb19hdXRvc2l6ZSgpIChvcHRpb25hbClcbitcdCAqXG4rXHQgKiBJZiBwcm92aWRlZCwgdGhpcyBjYWxsYmFjayBzdXBwbGllcyB0aGUgVFNPIHNlZ21lbnQgdGFyZ2V0IGNvdW50XG4rXHQgKiBpbnN0ZWFkIG9mIHVzaW5nIHRjcF90c29fYXV0b3NpemUoKS4gVGhlIHJldHVybmVkIHZhbHVlIGlzXG4rXHQgKiBzdWJzZXF1ZW50bHkgY2xhbXBlZCB0byBbMSwgc2stXHUwMDNlc2tfZ3NvX21heF9zZWdzXSBieSB0aGUgY2FsbGVyLlxuK1x0ICpcbitcdCAqIEZvciB0aGUga2VybmVsIGNhbGxiYWNrIHBhdGgsIG1zc19ub3cgb3JpZ2luYXRlcyBmcm9tXG4rXHQgKiB0Y3BfY3VycmVudF9tc3MoKSBhbmQgc2hvdWxkIG5ldmVyIGJlIHplcm8uXG4rXHQgKi9cbitcdHUzMiAoKnRzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KTtcbiBcbiBcdC8qIG5ldyB2YWx1ZSBvZiBjd25kIGFmdGVyIGxvc3MgKHJlcXVpcmVkKSAqL1xuIFx0dTMyICAoKnVuZG9fY3duZCkoc3RydWN0IHNvY2sgKnNrKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9icGZfdGNwX2NhLmMgYi9uZXQvaXB2NC9icGZfdGNwX2NhLmNcbmluZGV4IDc5MWUxNTA2MzIzN2MuLjlkZWVkMjI0NGMyZGUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9icGZfdGNwX2NhLmNcbisrKyBiL25ldC9pcHY0L2JwZl90Y3BfY2EuY1xuQEAgLTE5NCw2ICsxOTQsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Jlbm9fY29uZ19hdm9pZClcbiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Jlbm9fdW5kb19jd25kKVxuIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3Bfc2xvd19zdGFydClcbiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX2NvbmdfYXZvaWRfYWkpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF90c29fYXV0b3NpemUpXG4gQlRGX0tGVU5DU19FTkQoYnBmX3RjcF9jYV9jaGVja19rZnVuY19pZHMpXG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl90Y3BfY2Ffa2Z1bmNfc2V0ID0ge1xuQEAgLTI4NCw3ICsyODUsNyBAQCBzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3BrdHNfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcFxuIHtcbiB9XG4gXG4tc3RhdGljIHUzMiBicGZfdGNwX2NhX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spXG4rc3RhdGljIHUzMiBicGZfdGNwX2NhX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMyMCw3ICszMjEsNyBAQCBzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBfX2JwZl9vcHNfdGNwX2Nvbmdlc3Rpb25fb3BzID0ge1xuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnQgPSBicGZfdGNwX2NhX2N3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuaW5fYWNrX2V2ZW50ID0gYnBmX3RjcF9jYV9pbl9hY2tfZXZlbnQsXG4gXHQucGt0c19hY2tlZCA9IGJwZl90Y3BfY2FfcGt0c19hY2tlZCxcbi1cdC5taW5fdHNvX3NlZ3MgPSBicGZfdGNwX2NhX21pbl90c29fc2VncyxcbitcdC50c29fc2VncyA9IGJwZl90Y3BfY2FfdHNvX3NlZ3MsXG4gXHQuY29uZ19jb250cm9sID0gYnBmX3RjcF9jYV9jb25nX2NvbnRyb2wsXG4gXHQudW5kb19jd25kID0gYnBmX3RjcF9jYV91bmRvX2N3bmQsXG4gXHQuc25kYnVmX2V4cGFuZCA9IGJwZl90Y3BfY2Ffc25kYnVmX2V4cGFuZCxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYmJyLmMgYi9uZXQvaXB2NC90Y3BfYmJyLmNcbmluZGV4IDgyMzc4YTJiZmQxZTEuLmVjZjExYmU0NmYzODIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYmJyLmNcbisrKyBiL25ldC9pcHY0L3RjcF9iYnIuY1xuQEAgLTI5NywxMSArMjk3LDE4IEBAIHN0YXRpYyB2b2lkIGJicl9zZXRfcGFjaW5nX3JhdGUoc3RydWN0IHNvY2sgKnNrLCB1MzIgYncsIGludCBnYWluKVxuIH1cbiBcbiAvKiBvdmVycmlkZSBzeXNjdGxfdGNwX21pbl90c29fc2VncyAqL1xuLV9fYnBmX2tmdW5jIHN0YXRpYyB1MzIgYmJyX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spXG4rc3RhdGljIHUzMiBiYnJfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3BhY2luZ19yYXRlKSBcdTAwM2MgKGJicl9taW5fdHNvX3JhdGUgXHUwMDNlXHUwMDNlIDMpID8gMSA6IDI7XG4gfVxuIFxuK19fYnBmX2tmdW5jIHN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXG4re1xuK1x0aWYgKHVubGlrZWx5KCFtc3Nfbm93KSlcbitcdFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xuK1x0cmV0dXJuIHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIGJicl9taW5fdHNvX3NlZ3Moc2spKTtcbit9XG4rXG4gc3RhdGljIHUzMiBiYnJfdHNvX3NlZ3NfZ29hbChzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG5AQCAtMTE1MSw3ICsxMTU4LDcgQEAgc3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2Jicl9jb25nX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuIFx0LnVuZG9fY3duZFx0PSBiYnJfdW5kb19jd25kLFxuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnRcdD0gYmJyX2N3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuc3N0aHJlc2hcdD0gYmJyX3NzdGhyZXNoLFxuLVx0Lm1pbl90c29fc2Vnc1x0PSBiYnJfbWluX3Rzb19zZWdzLFxuK1x0LnRzb19zZWdzXHQ9IGJicl90c29fc2VncyxcbiBcdC5nZXRfaW5mb1x0PSBiYnJfZ2V0X2luZm8sXG4gXHQuc2V0X3N0YXRlXHQ9IGJicl9zZXRfc3RhdGUsXG4gfTtcbkBAIC0xMTYzLDcgKzExNzAsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NuZGJ1Zl9leHBhbmQpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl91bmRvX2N3bmQpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9jd25kX2V2ZW50X3R4X3N0YXJ0KVxuIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfc3N0aHJlc2gpXG4tQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9taW5fdHNvX3NlZ3MpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl90c29fc2VncylcbiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NldF9zdGF0ZSlcbiBCVEZfS0ZVTkNTX0VORCh0Y3BfYmJyX2NoZWNrX2tmdW5jX2lkcylcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbmluZGV4IDZmNGRjYTRhNGRlOTguLmI3ZjJlZTVlN2E2YjEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuQEAgLTIyNTIsMTMgKzIyNTIsMjEgQEAgc3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcbiAgKiBpbiBiaWdnZXIgVFNPIGJ1cnN0cy4gV2Ugd2UgY3V0IHRoZSBSVFQtYmFzZWQgYWxsb3dhbmNlIGluIGhhbGZcbiAgKiBmb3IgZXZlcnkgMl45IHVzZWMgKGFrYSA1MTIgdXMpIG9mIFJUVCwgc28gdGhhdCB0aGUgUlRULWJhc2VkIGFsbG93YW5jZVxuICAqIGlzIGJlbG93IDE1MDAgYnl0ZXMgYWZ0ZXIgNiAqIH41MDAgdXNlYyA9IDNtcy5cbisgKlxuKyAqIFRoZSBtaW5fdHNvX3NlZ3MgaXMgZmxvb3JlZCB0byAxIHRvIGF2b2lkIHN1cnByaXNpbmcgY29udmVyc2lvbi4gQWxzbyxcbisgKiBCUEYgY2FsbGVycyBtYXkgcGFzcyBtc3Nfbm93ID09IDAuIEluIHRoYXQgY2FzZSB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGVcbisgKiBzYW5pdGl6ZWQgbWluX3Rzb19zZWdzIHZhbHVlIGFuZCBza2lwcyBhdXRvc2l6aW5nLlxuICAqL1xuLXN0YXRpYyB1MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LFxuLVx0XHRcdCAgICBpbnQgbWluX3Rzb19zZWdzKVxuK19fYnBmX2tmdW5jIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4rXHRcdFx0XHQgaW50IG1pbl90c29fc2VncylcbiB7XG4rXHR1MzIgbWluX3RzbyA9IG1heChtaW5fdHNvX3NlZ3MsIDEpO1xuIFx0dW5zaWduZWQgbG9uZyBieXRlcztcbiBcdHUzMiByO1xuIFxuK1x0aWYgKHVubGlrZWx5KCFtc3Nfbm93KSlcbitcdFx0cmV0dXJuIG1pbl90c287XG4rXG4gXHRieXRlcyA9IFJFQURfT05DRShzay1cdTAwM2Vza19wYWNpbmdfcmF0ZSkgXHUwMDNlXHUwMDNlIFJFQURfT05DRShzay1cdTAwM2Vza19wYWNpbmdfc2hpZnQpO1xuIFxuIFx0ciA9IHRjcF9taW5fcnR0KHRjcF9zayhzaykpIFx1MDAzZVx1MDAzZSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF90c29fcnR0X2xvZyk7XG5AQCAtMjI2Nyw4ICsyMjc1LDkgQEAgc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4gXG4gXHRieXRlcyA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGJ5dGVzLCBzay1cdTAwM2Vza19nc29fbWF4X3NpemUpO1xuIFxuLVx0cmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvX3NlZ3MpO1xuK1x0cmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvKTtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwodGNwX3Rzb19hdXRvc2l6ZSk7XG4gXG4gLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMgd2Ugd2FudCBpbiB0aGUgc2tiIHdlIGFyZSB0cmFuc21pdHRpbmcuXG4gICogU2VlIGlmIGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGUgd2FudHMgdG8gZGVjaWRlOyBvdGhlcndpc2UsIGF1dG9zaXplLlxuQEAgLTIyNzYsMTQgKzIyODUsMTMgQEAgc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4gc3RhdGljIHUzMiB0Y3BfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYV9vcHMgPSBpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHM7XG4tXHR1MzIgbWluX3RzbywgdHNvX3NlZ3M7XG4tXG4tXHRtaW5fdHNvID0gY2Ffb3BzLVx1MDAzZW1pbl90c29fc2VncyA/XG4tXHRcdFx0Y2Ffb3BzLVx1MDAzZW1pbl90c29fc2VncyhzaykgOlxuLVx0XHRcdFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2Vncyk7XG4rXHR1MzIgdHNvX3NlZ3M7XG4gXG4tXHR0c29fc2VncyA9IHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIG1pbl90c28pO1xuLVx0cmV0dXJuIG1pbl90KHUzMiwgdHNvX3NlZ3MsIHNrLVx1MDAzZXNrX2dzb19tYXhfc2Vncyk7XG4rXHR0c29fc2VncyA9IGNhX29wcy1cdTAwM2V0c29fc2VncyA/XG4rXHRcdFx0Y2Ffb3BzLVx1MDAzZXRzb19zZWdzKHNrLCBtc3Nfbm93KSA6XG4rXHRcdFx0dGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdyxcbitcdFx0XHRcdFx0IFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2VncykpO1xuK1x0cmV0dXJuIGNsYW1wX3QodTMyLCB0c29fc2VncywgMSwgc2stXHUwMDNlc2tfZ3NvX21heF9zZWdzKTtcbiB9XG4gXG4gLyogUmV0dXJucyB0aGUgcG9ydGlvbiBvZiBza2Igd2hpY2ggY2FuIGJlIHNlbnQgcmlnaHQgYXdheSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuY1xuaW5kZXggMGEzZTlkMzViZjZmMC4uNTgyNjJlNDkwMzM2NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jXG5AQCAtMTAsNyArMTAsNyBAQCBleHRlcm4gdTMyIGJicl9zbmRidWZfZXhwYW5kKHN0cnVjdCBzb2NrICpzaykgX19rc3ltO1xuIGV4dGVybiB1MzIgYmJyX3VuZG9fY3duZChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBiYnJfY3duZF9ldmVudF90eF9zdGFydChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbiBleHRlcm4gdTMyIGJicl9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbi1leHRlcm4gdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07XG4rZXh0ZXJuIHUzMiBiYnJfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdykgX19rc3ltO1xuIGV4dGVybiB2b2lkIGJicl9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCB1OCBuZXdfc3RhdGUpIF9fa3N5bTtcbiBcbiBleHRlcm4gdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaykgX19rc3ltO1xuQEAgLTkwLDkgKzkwLDkgQEAgdTMyIEJQRl9QUk9HKHNzdGhyZXNoLCBzdHJ1Y3Qgc29jayAqc2spXG4gfVxuIFxuIFNFQyhcInN0cnVjdF9vcHNcIilcbi11MzIgQlBGX1BST0cobWluX3Rzb19zZWdzLCBzdHJ1Y3Qgc29jayAqc2spXG4rdTMyIEJQRl9QUk9HKHRzb19zZWdzLCBzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KVxuIHtcbi1cdHJldHVybiBiYnJfbWluX3Rzb19zZWdzKHNrKTtcbitcdHJldHVybiBiYnJfdHNvX3NlZ3Moc2ssIG1zc19ub3cpO1xuIH1cbiBcbiBTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG5AQCAtMTIwLDcgKzEyMCw3IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2NhX2tmdW5jID0ge1xuIFx0LmN3bmRfZXZlbnRcdD0gKHZvaWQgKiljd25kX2V2ZW50LFxuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnQgPSAodm9pZCAqKWN3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuc3N0aHJlc2hcdD0gKHZvaWQgKilzc3RocmVzaCxcbi1cdC5taW5fdHNvX3NlZ3NcdD0gKHZvaWQgKiltaW5fdHNvX3NlZ3MsXG4rXHQudHNvX3NlZ3NcdD0gKHZvaWQgKil0c29fc2VncyxcbiBcdC5zZXRfc3RhdGVcdD0gKHZvaWQgKilzZXRfc3RhdGUsXG4gXHQucGt0c19hY2tlZCAgICAgPSAodm9pZCAqKXBrdHNfYWNrZWQsXG4gXHQubmFtZVx0XHQ9IFwidGNwX2NhX2tmdW5jXCIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMTo0Ni4wNDQ1MjY3MjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTQwMDU5MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFNPIFNlZ21lbnQgQ291bnQgYW5kIEJQRiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSByZXZhbXBlZCBob3cgdGhlIFRTTyBzZWdtZW50IGNvdW50IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIHN0cnVjdHVyZS4gSW5zdGVhZCBvZiBhIGBtaW5fdHNvX3NlZ3NgIGNhbGxiYWNrLCB3ZSBub3cgaGF2ZSBhIGB0c29fc2Vnc2AgY2FsbGJhY2sgdGhhdCB0YWtlcyB0aGUgc29ja2V0IChgc2tgKSBhbmQgdGhlIGN1cnJlbnQgTWF4aW11bSBTZWdtZW50IFNpemUgKGBtc3Nfbm93YCkgYXMgaW5wdXQgYW5kIGRpcmVjdGx5IHJldHVybnMgdGhlIFRTTyBzZWdtZW50IGNvdW50LiBUaGF0J3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQgaW4gdGhlIGludGVyZmFjZSwgYW5kIGltbWVkaWF0ZWx5IEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtcywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGFyZSBCUEYtYmFzZWQuXG5cbkFsc28sIGV4cG9ydGluZyBgdGNwX3Rzb19hdXRvc2l6ZWAgYXMgYm90aCBhIEJQRiBrZnVuYyBhbmQgYSByZWd1bGFyIHN5bWJvbCBpcyBpbnRlcmVzdGluZy4gVGhhdCBvcGVucyB1cCBzb21lIHBvc3NpYmlsaXRpZXMgZm9yIHVzZXJzcGFjZSBjb250cm9sIG9yIGR5bmFtaWMgYWRqdXN0bWVudHMsIHdoaWNoIGNvdWxkIGJlIHVzZWZ1bC4gVGhlIHVwZGF0ZXMgdG8gdGhlIEJQRiBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIGBzdHJ1Y3Rfb3BzYCBhbmQgdGhlIEJCUiBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGFyZSBleHBlY3RlZCwgc2luY2UgdGhlcmUncyBhIG5ldyBpbnRlcmZhY2UuIE5vdyBJIGhhdmUgdG8gbG9vayBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhhdC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgY2hhbmdlcyBhcmUgZ29pbmcgdG8gYmUgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMuIFRoZSBpbmNsdWRlZCBmaWxlczogYGluY2x1ZGUvbmV0L3RjcC5oYCwgYG5ldC9pcHY0L2JwZl90Y3BfY2EuY2AsIGBuZXQvaXB2NC90Y3BfYmJyLmNgLCBgbmV0L2lwdjQvdGNwX291dHB1dC5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmNgLiBJIGhhdmUgdG8gZGlnIGludG8gdGhvc2UgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobXMgaGF2ZSBiZWVuIGNoYW5nZWQuXG5cblNvLCBJ4oCZbGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gYG5ldC9pcHY0L3RjcF9vdXRwdXQuY2AgdG8gc2VlIGhvdyBpdCB1c2VzIHRoZSBuZXcgYHRzb19zZWdzKClgIGFuZCB0aGVuIGxvb2sgYXQgdGhlIGNoYW5nZXMgdG8gdGhlIEJCUiBhbmQgQlBGIGNvbmdlc3Rpb24gY29udHJvbCBpbXBsZW1lbnRhdGlvbnMuIEknbGwgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB3aGF0J3MgYmVlbiBjaGFuZ2VkLCBhcyB3ZWxsIGFzIHRvIGxvb2sgZm9yIGNvbmZpZ3MgYW5kIHRoZSBhZmZlY3RlZCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMTo1My4xODQ1ODkzNjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzNjI4MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3Rzb19hdXRvc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9icGZfdGNwX2NhLmM9MTk2PUJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfY29uZ19hdm9pZF9haSlcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MTk3OkJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfdHNvX2F1dG9zaXplKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xOTgtQlRGX0tGVU5DU19FTkQoYnBmX3RjcF9jYV9jaGVja19rZnVuY19pZHMpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz05NTc9c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfeG1pdF9zaXplX2dvYWwoc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdyxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTk2NS1cXG5uZXQvaXB2NC90Y3AuYzo5NjY6XFx0LyogTm90ZSA6IHRjcF90c29fYXV0b3NpemUoKSB3aWxsIGV2ZW50dWFsbHkgc3BsaXQgdGhpcyBsYXRlciAqL1xcbm5ldC9pcHY0L3RjcC5jLTk2Ny1cXHRuZXdfc2l6ZV9nb2FsID0gdGNwX2JvdW5kX3RvX2hhbGZfd25kKHRwLCBzay1cXHUwMDNlc2tfZ3NvX21heF9zaXplKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYz0zMDU9X19icGZfa2Z1bmMgc3RhdGljIHUzMiBiYnJfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdylcXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYy0zMDgtXFx0XFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xcbm5ldC9pcHY0L3RjcF9iYnIuYzozMDk6XFx0cmV0dXJuIHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIGJicl9taW5fdHNvX3NlZ3Moc2spKTtcXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzEwLX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYz0zMTI9c3RhdGljIHUzMiBiYnJfdHNvX3NlZ3NfZ29hbChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzE2LVxcbm5ldC9pcHY0L3RjcF9iYnIuYzozMTc6XFx0LyogU29ydCBvZiB0Y3BfdHNvX2F1dG9zaXplKCkgYnV0IGlnbm9yaW5nXFxubmV0L2lwdjQvdGNwX2Jici5jLTMxOC1cXHQgKiBkcml2ZXIgcHJvdmlkZWQgc2tfZ3NvX21heF9zaXplLlxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyMzQ9c3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjU5LSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjYwOl9fYnBmX2tmdW5jIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNjEtXFx0XFx0XFx0XFx0IGludCBtaW5fdHNvX3NlZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI3OS19XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyODA6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3Rzb19hdXRvc2l6ZSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyODEtXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjI4NT1zdGF0aWMgdTMyIHRjcF90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93KVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyOTEtXFx0XFx0XFx0Y2Ffb3BzLVxcdTAwM2V0c29fc2VncyhzaywgbXNzX25vdykgOlxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjkyOlxcdFxcdFxcdHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyOTMtXFx0XFx0XFx0XFx0XFx0IFJFQURfT05DRShzb2NrX25ldChzayktXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzE6NTMuMjM3OTU5MDM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk2NDI5NDk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJQRiBhbmQgVENQIENvbmdlc3Rpb24gQ29udHJvbCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb2YgYSBjb3VwbGUgb2YgQlBGIGFuZCBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZXMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gc2VlIHdoYXQgS2NvbmZpZyBvcHRpb25zIHNwZWNpZmljYWxseSByZWxhdGUgdG8gYGJwZl90Y3BfY2EuY2AgYW5kIGB0Y3BfYmJyLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmZWF0dXJlcyB0aGV5IHJlbHkgb24sIGFuZCB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgdG8gaW5jbHVkZSB0aGVtIGluIGEga2VybmVsIGJ1aWxkLiBUbyBkbyB0aGF0LCBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSByZWxldmFudCBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBtb2R1bGVzLiBIb3BlZnVsbHksIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFybHkgbGFpZCBvdXQgdGhlcmUuIFRpbWUgdG8gZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTIyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzE6NTkuMjAyMjU2OTg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDQxNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRDUF9DT05HX0JCUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTY0OT1jb25maWcgVENQX0NPTkdfQ0RHXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTY2NS1cXG5uZXQvaXB2NC9LY29uZmlnOjY2Njpjb25maWcgVENQX0NPTkdfQkJSXFxubmV0L2lwdjQvS2NvbmZpZy02NjctXFx0dHJpc3RhdGUgXFxcIkJCUiBUQ1BcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTY4MT1jaG9pY2VcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNzE1LVxcdGNvbmZpZyBERUZBVUxUX0JCUlxcbm5ldC9pcHY0L0tjb25maWc6NzE2OlxcdFxcdGJvb2wgXFxcIkJCUlxcXCIgaWYgVENQX0NPTkdfQkJSPXlcXG5uZXQvaXB2NC9LY29uZmlnLTcxNy1cXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTQ2PW9iai0kKENPTkZJR19JTkVUX1JBV19ESUFHKSArPSByYXdfZGlhZy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX1RDUF9DT05HX0JCUikgKz0gdGNwX2Jici5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNDgtb2JqLSQoQ09ORklHX1RDUF9DT05HX0JJQykgKz0gdGNwX2JpYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMxOjU5LjI1MzcwMzg5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4NDc3MDY0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgVENQIENvbmdlc3Rpb24gQ29udHJvbCBJbnN0cnVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHdoZXJlIHRoZSBCUEYtYmFzZWQgVENQIGNvbmdlc3Rpb24gY29udHJvbCBwcm9iZXMgYXJlIGRlZmluZWQgYW5kIGNvbmZpZ3VyZWQuIEkndmUgYWxyZWFkeSBnb3QgYSBnb29kIGdyYXNwLCBidXQgbGV0J3MgYmUgdGhvcm91Z2guIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBleHBsaWNpdGx5IGNoZWNraW5nIGBuZXQvaXB2NC9icGZfdGNwX2NhLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgQlBGLWJhc2VkIGNvbmdlc3Rpb24gY29udHJvbCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIFRoZW4sIGZvciB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgYW55IGFzc29jaWF0ZWQgY29tcGlsZS10aW1lIG9wdGlvbnMsIGl0J3MgZXNzZW50aWFsIHRvIGxvb2sgYXQgYG5ldC9pcHY0L01ha2VmaWxlYCBhbmQgYG5ldC9pcHY0L0tjb25maWdgLiBUaGVzZSB3aWxsIHJldmVhbCBob3cgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSBhbmQgd2hhdCBjb250cm9scyBpdHMgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBiYXNlZCBvbiB1c2VyIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLCBpbmNsdWRpbmcgYW55IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhc3BlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjExLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6MDMuMTAxNDEyODY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Mjg4MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90Y3BfY2FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9NzE9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcXG5uZXQvaXB2NC9NYWtlZmlsZTo3MjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl90Y3BfY2Eub1xcbm5ldC9pcHY0L01ha2VmaWxlLTczLWVuZGlmXFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MTk9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdGNwX2Nvbmdlc3Rpb25fb3BzX3R5cGU7XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIwLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMTpzdGF0aWMgaW50IGJwZl90Y3BfY2FfaW5pdChzdHJ1Y3QgYnRmICpidGYpXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyLXtcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy00My1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6NDQ6c3RhdGljIGJvb2wgYnBmX3RjcF9jYV9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTQ1LVxcdFxcdFxcdFxcdCAgICAgICBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTYwLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzo2MTpzdGF0aWMgaW50IGJwZl90Y3BfY2FfYnRmX3N0cnVjdF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtNjItXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYz0xMjE9QlBGX0NBTExfMihicGZfdGNwX3NlbmRfYWNrLCBzdHJ1Y3QgdGNwX3NvY2sgKiwgdHAsIHUzMiwgcmN2X254dClcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMTIyLXtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MTIzOlxcdC8qIGJwZl90Y3BfY2EgcHJvZyBjYW5ub3QgaGF2ZSBOVUxMIHRwICovXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTEyNC1cXHRfX3RjcF9zZW5kX2Fjaygoc3RydWN0IHNvY2sgKil0cCwgcmN2X254dCwgMCk7XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MTUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoxNTI6YnBmX3RjcF9jYV9nZXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTE1My1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xOTAtXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjE5MTpCVEZfS0ZVTkNTX1NUQVJUKGJwZl90Y3BfY2FfY2hlY2tfa2Z1bmNfaWRzKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xOTItQlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF9yZW5vX3NzdGhyZXNoKVxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTE5Nz1CVEZfSURfRkxBR1MoZnVuYywgdGNwX3Rzb19hdXRvc2l6ZSlcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MTk4OkJURl9LRlVOQ1NfRU5EKGJwZl90Y3BfY2FfY2hlY2tfa2Z1bmNfaWRzKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xOTktXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIwMDpzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3RjcF9jYV9rZnVuY19zZXQgPSB7XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIwMS1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjAyOlxcdC5zZXQgICA9IFxcdTAwMjZicGZfdGNwX2NhX2NoZWNrX2tmdW5jX2lkcyxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjAzLX07XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIwNC1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjA1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfdGNwX2NhX3ZlcmlmaWVyX29wcyA9IHtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjA2OlxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gYnBmX3RjcF9jYV9nZXRfZnVuY19wcm90byxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjA3OlxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IGJwZl90Y3BfY2FfaXNfdmFsaWRfYWNjZXNzLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMDg6XFx0LmJ0Zl9zdHJ1Y3RfYWNjZXNzXFx0PSBicGZfdGNwX2NhX2J0Zl9zdHJ1Y3RfYWNjZXNzLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMDktfTtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjEwLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMTE6c3RhdGljIGludCBicGZfdGNwX2NhX2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjEyLVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMzgtXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIzOTpzdGF0aWMgaW50IGJwZl90Y3BfY2FfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI0MC17XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjQzLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyNDQ6c3RhdGljIHZvaWQgYnBmX3RjcF9jYV91bnJlZyh2b2lkICprZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNDUte1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI0OC1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjQ5OnN0YXRpYyBpbnQgYnBmX3RjcF9jYV91cGRhdGUodm9pZCAqa2RhdGEsIHZvaWQgKm9sZF9rZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNTAte1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI1My1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjU0OnN0YXRpYyBpbnQgYnBmX3RjcF9jYV92YWxpZGF0ZSh2b2lkICprZGF0YSlcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjU1LXtcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNTgtXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI1OTpzdGF0aWMgdTMyIGJwZl90Y3BfY2Ffc3N0aHJlc2goc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNjAte1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI2My1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjY0OnN0YXRpYyB2b2lkIGJwZl90Y3BfY2FfY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIHUzMiBhY2tlZClcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjY1LXtcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNjctXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI2ODpzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIHU4IG5ld19zdGF0ZSlcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjY5LXtcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNzEtXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI3MjpzdGF0aWMgdm9pZCBicGZfdGNwX2NhX2N3bmRfZXZlbnQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHRjcF9jYV9ldmVudCBldilcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjczLXtcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNzUtXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI3NjpzdGF0aWMgdm9pZCBicGZfdGNwX2NhX2N3bmRfZXZlbnRfdHhfc3RhcnQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNzcte1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI3OS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjgwOnN0YXRpYyB2b2lkIGJwZl90Y3BfY2FfaW5fYWNrX2V2ZW50KHN0cnVjdCBzb2NrICpzaywgdTMyIGZsYWdzKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yODEte1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI4My1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6Mjg0OnN0YXRpYyB2b2lkIGJwZl90Y3BfY2FfcGt0c19hY2tlZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wbGUpXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI4NS17XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjg3LVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyODg6c3RhdGljIHUzMiBicGZfdGNwX2NhX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI4OS17XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjkyLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyOTM6c3RhdGljIHZvaWQgYnBmX3RjcF9jYV9jb25nX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCBpbnQgZmxhZyxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjk0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcmF0ZV9zYW1wbGUgKnJzKVxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI5Ny1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6Mjk4OnN0YXRpYyB1MzIgYnBmX3RjcF9jYV91bmRvX2N3bmQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yOTkte1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTMwMi1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzAzOnN0YXRpYyB1MzIgYnBmX3RjcF9jYV9zbmRidWZfZXhwYW5kKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzA0LXtcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMDctXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMwODpzdGF0aWMgdm9pZCBfX2JwZl90Y3BfY2FfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTMwOS17XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzExLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMTI6c3RhdGljIHZvaWQgX19icGZfdGNwX2NhX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMTMte1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTMxNj1zdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBfX2JwZl9vcHNfdGNwX2Nvbmdlc3Rpb25fb3BzID0ge1xcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMTc6XFx0LnNzdGhyZXNoID0gYnBmX3RjcF9jYV9zc3RocmVzaCxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzE4OlxcdC5jb25nX2F2b2lkID0gYnBmX3RjcF9jYV9jb25nX2F2b2lkLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMTk6XFx0LnNldF9zdGF0ZSA9IGJwZl90Y3BfY2Ffc2V0X3N0YXRlLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMjA6XFx0LmN3bmRfZXZlbnQgPSBicGZfdGNwX2NhX2N3bmRfZXZlbnQsXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMyMTpcXHQuY3duZF9ldmVudF90eF9zdGFydCA9IGJwZl90Y3BfY2FfY3duZF9ldmVudF90eF9zdGFydCxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzIyOlxcdC5pbl9hY2tfZXZlbnQgPSBicGZfdGNwX2NhX2luX2Fja19ldmVudCxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzIzOlxcdC5wa3RzX2Fja2VkID0gYnBmX3RjcF9jYV9wa3RzX2Fja2VkLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMjQ6XFx0LnRzb19zZWdzID0gYnBmX3RjcF9jYV90c29fc2VncyxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzI1OlxcdC5jb25nX2NvbnRyb2wgPSBicGZfdGNwX2NhX2NvbmdfY29udHJvbCxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzI2OlxcdC51bmRvX2N3bmQgPSBicGZfdGNwX2NhX3VuZG9fY3duZCxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzI3OlxcdC5zbmRidWZfZXhwYW5kID0gYnBmX3RjcF9jYV9zbmRidWZfZXhwYW5kLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMjgtXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMyOTpcXHQuaW5pdCA9IF9fYnBmX3RjcF9jYV9pbml0LFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMzA6XFx0LnJlbGVhc2UgPSBfX2JwZl90Y3BfY2FfcmVsZWFzZSxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzMxLX07XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MzMzPXN0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX3RjcF9jb25nZXN0aW9uX29wcyA9IHtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzM0OlxcdC52ZXJpZmllcl9vcHMgPSBcXHUwMDI2YnBmX3RjcF9jYV92ZXJpZmllcl9vcHMsXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMzNTpcXHQucmVnID0gYnBmX3RjcF9jYV9yZWcsXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMzNjpcXHQudW5yZWcgPSBicGZfdGNwX2NhX3VucmVnLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMzc6XFx0LnVwZGF0ZSA9IGJwZl90Y3BfY2FfdXBkYXRlLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMzg6XFx0LmluaXRfbWVtYmVyID0gYnBmX3RjcF9jYV9pbml0X21lbWJlcixcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzM5OlxcdC5pbml0ID0gYnBmX3RjcF9jYV9pbml0LFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozNDA6XFx0LnZhbGlkYXRlID0gYnBmX3RjcF9jYV92YWxpZGF0ZSxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQxLVxcdC5uYW1lID0gXFxcInRjcF9jb25nZXN0aW9uX29wc1xcXCIsXFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQ1LVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozNDY6c3RhdGljIGludCBfX2luaXQgYnBmX3RjcF9jYV9rZnVuY19pbml0KHZvaWQpXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTM0Ny17XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQ5LVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozNTA6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZicGZfdGNwX2NhX2tmdW5jX3NldCk7XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTM1MS1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnBmX3N0cnVjdF9vcHMoXFx1MDAyNmJwZl90Y3BfY29uZ2VzdGlvbl9vcHMsIHRjcF9jb25nZXN0aW9uX29wcyk7XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzU0LX1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzU1OmxhdGVfaW5pdGNhbGwoYnBmX3RjcF9jYV9rZnVuY19pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6MDMuMTQ5NzA1ODMzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU4NzEyMjMzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBUQ1AgVFNPIFNlZ21lbnQgU2l6ZSBEZXRlcm1pbmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgVENQIG91dHB1dCBwYXRoLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIGB0Y3BfdHNvX3NlZ3NgIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgdGNwX3Rzb19hdXRvc2l6ZWAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgd2hlcmUgYHRjcF90c29fYXV0b3NpemVgIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIGxhcmdlciBUQ1Agb3V0cHV0IHByb2Nlc3MuIFdoZXJlIGFyZSB0aGUgZGVjaXNpb25zIGJlaW5nIG1hZGUgYmFzZWQgb24gdGhpcyB2YWx1ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGluZmx1ZW5jZXMgdGhlIG51bWJlciBvZiBzZWdtZW50cyB3ZSBlbmQgdXAgd2l0aC4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgZGl2aW5nIGludG8gdGhlIFRTTyAoVENQIFNlZ21lbnRhdGlvbiBPZmZsb2FkKSBjb2RlLCB3aGljaCBjb3VsZCBtZWFuIGxvb2tpbmcgYXQgaG93IHRoZSBoYXJkd2FyZSBpbnRlcmZhY2VzIHdpdGggdGhlIHNvZnR3YXJlIHNlZ21lbnRhdGlvbiwgdG9vLiBJIHN1c3BlY3QgYHRjcF90c29fc2Vnc2AgcHJvYmFibHkgaG9sZHMgYSBjYWxjdWxhdGVkIHZhbHVlLCBwZXJoYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWdtZW50cyB0aGUgTklDIGNhbiBoYW5kbGUgZWZmaWNpZW50bHksIG9yIG1heWJlIGV2ZW4gdGhlICphY3R1YWwqIG51bWJlciBhZnRlciBjb25zaWRlcmF0aW9ucyBvZiBNVFUsIGhlYWRlciBzaXplcywgYW5kIE1TUy4gVWx0aW1hdGVseSwgSSdtIHRyeWluZyB0byBvcHRpbWl6ZSBUQ1AgcGVyZm9ybWFuY2UsIHNvIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgaW50ZXJhY3Rpb24gaXMgY3J1Y2lhbC4gVGhpcyB3aWxsIGhlbHAgbWUgZGlhZ25vc2UgdGhyb3VnaHB1dCBib3R0bGVuZWNrcyBhbmQgZmluZS10dW5lIHBhcmFtZXRlcnMgZm9yIG9wdGltYWwgdHJhbnNmZXIgY2hhcmFjdGVyaXN0aWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY1NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMyOjA1LjczNjgzMDY4NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MTIxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3Rzb19zZWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMjgwPUVYUE9SVF9TWU1CT0xfR1BMKHRjcF90c29fYXV0b3NpemUpO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyODQtICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyODU6c3RhdGljIHUzMiB0Y3BfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI4Ni17XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9Mjk3Mj1zdGF0aWMgYm9vbCB0Y3Bfd3JpdGVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LCBpbnQgbm9uYWdsZSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yOTk5LVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozMDAwOlxcdG1heF9zZWdzID0gdGNwX3Rzb19zZWdzKHNrLCBtc3Nfbm93KTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzAwMS1cXHR3aGlsZSAoKHNrYiA9IHRjcF9zZW5kX2hlYWQoc2spKSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM3MzM9dm9pZCB0Y3BfeG1pdF9yZXRyYW5zbWl0X3F1ZXVlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zNzQ2LVxcdHNrYiA9IHRwLVxcdTAwM2VyZXRyYW5zbWl0X3NrYl9oaW50ID86IHJ0eF9oZWFkO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozNzQ3OlxcdG1heF9zZWdzID0gdGNwX3Rzb19zZWdzKHNrLCB0Y3BfY3VycmVudF9tc3Moc2spKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzc0OC1cXHRza2JfcmJ0cmVlX3dhbGtfZnJvbShza2IpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6MDUuNzg1NzQ5ODgyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MzY5ODMyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipFeHBsb3JpbmcgQ29uZ2VzdGlvbiBDb250cm9sIEFsZ29yaXRobSBTcGFjZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgcHJvYmxlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSBvZiBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtcyBiZXR0ZXIsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGlzIGBtaW5fdHNvX3NlZ3NgIHZhcmlhYmxlLiBJJ20gd29uZGVyaW5nIGlmIGFueSBvZiB0aGUgb3RoZXIgYWxnb3JpdGhtcyBvdXQgdGhlcmUsIGJleW9uZCB0aGUgb25lcyBJJ20gaW1tZWRpYXRlbHkgZmFtaWxpYXIgd2l0aCwgZXhwbGljaXRseSBkZWFsdCB3aXRoIHNvbWV0aGluZyBsaWtlIHRoaXM/IERpZCB0aGV5IGhhdmUgYSBzaW1pbGFyIHBhcmFtZXRlciwgb3Igd2VyZSB0aGV5IHN1YnRseSBhZmZlY3RlZCBieSB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIHVzZWQgaW4gVFNPIHdpdGhvdXQgZXhwbGljaXRseSBuYW1pbmcgYSB0dW5pbmcgcGFyYW1ldGVyPyBUaGF0J3MgdGhlIHJlYWwgcXVlc3Rpb24uIExldCdzIHNlZSB3aGF0IHRoZSByZXNlYXJjaCBzYXlzLi4uIEkgbmVlZCBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3IGhlcmUuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBsaXRlcmF0dXJlIGFuZCBzZWUgd2hhdCBlbWVyZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMyOjA4LjYyMjczNTUzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0ODQzOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWluX3Rzb19zZWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jPTYyNz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xcbi0tXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtMTM5My1cXHR7XFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTM5NDpcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJ0Y3BfbWluX3Rzb19zZWdzXFxcIixcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxMzk1OlxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQuaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2VncyxcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMzk2LVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZih1OCksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYmJyLmM9Mjg3PXN0YXRpYyB2b2lkIGJicl9zZXRfcGFjaW5nX3JhdGUoc3RydWN0IHNvY2sgKnNrLCB1MzIgYncsIGludCBnYWluKVxcbi0tXFxubmV0L2lwdjQvdGNwX2Jici5jLTI5OC1cXG5uZXQvaXB2NC90Y3BfYmJyLmM6Mjk5Oi8qIG92ZXJyaWRlIHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzICovXFxubmV0L2lwdjQvdGNwX2Jici5jOjMwMDpzdGF0aWMgdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9iYnIuYy0zMDEte1xcbi0tXFxubmV0L2lwdjQvdGNwX2Jici5jPTMwNT1fX2JwZl9rZnVuYyBzdGF0aWMgdTMyIGJicl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KVxcbi0tXFxubmV0L2lwdjQvdGNwX2Jici5jLTMwNy1cXHRpZiAodW5saWtlbHkoIW1zc19ub3cpKVxcbm5ldC9pcHY0L3RjcF9iYnIuYzozMDg6XFx0XFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xcbm5ldC9pcHY0L3RjcF9iYnIuYzozMDk6XFx0cmV0dXJuIHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIGJicl9taW5fdHNvX3NlZ3Moc2spKTtcXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzEwLX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYz0zMTI9c3RhdGljIHUzMiBiYnJfdHNvX3NlZ3NfZ29hbChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzIyLVxcdFxcdCAgICAgIEdTT19MRUdBQ1lfTUFYX1NJWkUgLSAxIC0gTUFYX1RDUF9IRUFERVIpO1xcbm5ldC9pcHY0L3RjcF9iYnIuYzozMjM6XFx0c2VncyA9IG1heF90KHUzMiwgYnl0ZXMgLyB0cC1cXHUwMDNlbXNzX2NhY2hlLCBiYnJfbWluX3Rzb19zZWdzKHNrKSk7XFxubmV0L2lwdjQvdGNwX2Jici5jLTMyNC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzQzOD1zdGF0aWMgaW50IF9fbmV0X2luaXQgdGNwX3NrX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDk1LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzQ5NjpcXHRuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgPSAyO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzQ5Ny1cXHRuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF90c29fcnR0X2xvZyA9IDk7ICAvKiAyXjkgPSA1MTIgdXNlYyAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyMzQ9c3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjU1LSAqXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNTY6ICogVGhlIG1pbl90c29fc2VncyBpcyBmbG9vcmVkIHRvIDEgdG8gYXZvaWQgc3VycHJpc2luZyBjb252ZXJzaW9uLiBBbHNvLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjU3LSAqIEJQRiBjYWxsZXJzIG1heSBwYXNzIG1zc19ub3cgPT0gMC4gSW4gdGhhdCBjYXNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjU4OiAqIHNhbml0aXplZCBtaW5fdHNvX3NlZ3MgdmFsdWUgYW5kIHNraXBzIGF1dG9zaXppbmcuXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNTktICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyNjA9X19icGZfa2Z1bmMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI2MTpcXHRcXHRcXHRcXHQgaW50IG1pbl90c29fc2VncylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI2Mi17XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNjM6XFx0dTMyIG1pbl90c28gPSBtYXgobWluX3Rzb19zZWdzLCAxKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI2NC1cXHR1bnNpZ25lZCBsb25nIGJ5dGVzO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyODU9c3RhdGljIHUzMiB0Y3BfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjkyLVxcdFxcdFxcdHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyOTM6XFx0XFx0XFx0XFx0XFx0IFJFQURfT05DRShzb2NrX25ldChzayktXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MpKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI5NC1cXHRyZXR1cm4gY2xhbXBfdCh1MzIsIHRzb19zZWdzLCAxLCBzay1cXHUwMDNlc2tfZ3NvX21heF9zZWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6MDguNjcyMjI2NzMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1MzczNzA5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogVFNPIFNlZ21lbnQgVGFyZ2V0IENvdW50IGluIFRDUCBDb25nZXN0aW9uIENvbnRyb2wqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBjaGFuZ2VzIHJlbGF0ZWQgdG8gaG93IENvbmdlc3Rpb24gQ29udHJvbCAoQ0EpIGFsZ29yaXRobXMsIGluY2x1ZGluZyBCQlIgYW5kIHRob3NlIHVzaW5nIEJQRiBzdHJ1Y3Rfb3BzLCBzcGVjaWZ5IHRoZSB0YXJnZXQgY291bnQgZm9yIFRTTyBzZWdtZW50cyB2aWEgYHRzb19zZWdzYCBpbiBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AuIE5vdGFibHksIGB0Y3BfdHNvX2F1dG9zaXplYCBoYXMgYmVlbiBtb2RpZmllZCBhbmQgZXhwb3J0ZWQgYXMgYSBrZnVuYyBhbmQgR1BMIHN5bWJvbC4gVGhpcyBoaXRzIFRDUCBvdXRwdXQgbG9naWMgYW5kIHRoZSBCUEYgVENQIENBIG1lY2hhbmlzbSBhbmQgQkJSLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZz9cblxuTGV0J3MgcnVuIHRocm91Z2ggdGhlIGNoZWNrbGlzdDogTm8gY2hhbmdlcyB0byBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBvciBjb21tZW50cywgc28gaXQncyBhY3R1YWwgQyBjb2RlLiBOb3QgYSBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2UsIGRlZmluaXRlbHkgZnVuY3Rpb25hbC4gTm8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zLiBJdCAqaXMqIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSBiZWNhdXNlIGl0J3MgY29yZSBuZXR3b3JraW5nLCBUQ1AsIGFuZCBCUEYuIEFuZCBpdCdzIG5vdCB2ZW5kb3Itc3BlY2lmaWMgb3IgZHJpdmVyIHRlYXJkb3duLiBTbywgV29ydGhGdXp6aW5nID0gVHJ1ZS5cblxuTm93LCBmb3IgYEZvY3VzU3ltYm9sc2AuIFdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGltcG9ydGFudCBlbnRyeSBwb2ludHMuIGB0Y3BfdHNvX2F1dG9zaXplYCBpcyBhIG5vbi1zdGF0aWMsIGV4cG9ydGVkIGZ1bmN0aW9uIChrZnVuYykuIGBiYnJfdHNvX3NlZ3NgIGlzIHN0YXRpYyBidXQgcmVnaXN0ZXJlZCBhcyBhIGtmdW5jLCB3aGlsZSBgYnBmX3RjcF9jYV90c29fc2Vnc2AgaXMgYWxzbyBzdGF0aWMuIFNwZWNpZmljYWxseSwgYHRjcF90c29fYXV0b3NpemVgIGxvb2tzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQncyBgX19icGZfa2Z1bmMgdTMyIHRjcF90c29fYXV0b3NpemUoLi4uKWAgYW5kIGBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfdHNvX2F1dG9zaXplKWAuIFRoaXMgbWFrZXMgaXQgYSBncmVhdCBjYW5kaWRhdGUuIE90aGVyIHN5bWJvbHMgaW5jbHVkZTpcbi0gYHRjcF90c29fYXV0b3NpemVgXG4tIGBicGZfdGNwX2NhX3Rzb19zZWdzYCAoc3RhdGljKVxuLSBgYmJyX3Rzb19zZWdzYCAoc3RhdGljLCBrZnVuYylcbi0gYHRjcF90c29fc2Vnc2AgKHN0YXRpYylcblxuQmFzZWQgb24gdGhlIHJ1bGVzLCBgdGNwX3Rzb19hdXRvc2l6ZWAgaXMgdGhlIGNsZWFyIHdpbm5lciBmb3IgYEZvY3VzU3ltYm9sc2AsIGFzIGl0J3Mgbm9uLXN0YXRpYywgZXhwb3J0ZWQsIGFuZCBkZWZpbmVkIGluIGBuZXQvaXB2NC90Y3Bfb3V0cHV0LmNgLCBzbyBpdCdzIHVubGlrZWx5IHRvIGJlIGlubGluZWQuXG5cbkZpbmFsbHksIGZvciBgRW5hYmxlQ29uZmlnc2AsIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBDbGVhcmx5LCBgSU5FVGAgKG9yIGBORVRgKSBmb3IgVENQL0lQdjQsIGBUQ1BfQ09OR19CQlJgIGZvciBCQlIgc3VwcG9ydCwgYW5kIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBmb3IgQlBGIFRDUCBDQS9zdHJ1Y3Rfb3BzIGFyZSBhbGwgZXNzZW50aWFsLiBXZSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgYGJwZl90Y3BfY2Eub2AgYW5kIGB0Y3BfYmJyLm9gIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkwMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjoxNC4yMDk2MDQwMjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODgxMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHRjcF9icGYub1xcbm5ldC9pcHY0L01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdWRwX2JwZi5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX05FVExBQkVMKSArPSBjaXBzb19pcHY0Lm9cXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTcxPWlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxubmV0L2lwdjQvTWFrZWZpbGU6NzI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfdGNwX2NhLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS03My1lbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTE3OD1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXFxubmV0L2lwdjQvdGNwX2JwZi5jOjE4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE4MS1zdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz03Njk9dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3NS19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjc3NjojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTI4NTU9c3RhdGljIGludCB0Y3A0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yODc5LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6Mjg4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yODgxLXVuaW9uIGJwZl90Y3BfaXRlcl9iYXRjaF9pdGVtIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzI5Mz1zdGF0aWMgdW5zaWduZWQgc2hvcnQgc2VxX2ZpbGVfZmFtaWx5KGNvbnN0IHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMjk2LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzI5NzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMjk4LVxcdC8qIEl0ZXJhdGVkIGZyb20gYnBmX2l0ZXIuICBMZXQgdGhlIGJwZiBwcm9nIHRvIGZpbHRlciBpbnN0ZWFkLiAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0zMzQ4PXN0cnVjdCBwcm90byB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3Mi1cXHQucHV0X3BvcnRcXHRcXHQ9IGluZXRfcHV0X3BvcnQsXFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzczOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzNzQtXFx0LnBzb2NrX3VwZGF0ZV9za19wcm90XFx0PSB0Y3BfYnBmX3VwZGF0ZV9wcm90byxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzU3MT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIF9fbmV0X2luaXRkYXRhIHRjcF9za19vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM1NzYtXFxubmV0L2lwdjQvdGNwX2lwdjQuYzozNTc3OiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM1NzgtREVGSU5FX0JQRl9JVEVSX0ZVTkModGNwLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzY1MD12b2lkIF9faW5pdCB0Y3BfdjRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjc0LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzY3NTojaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjc2LVxcdGJwZl9pdGVyX3JlZ2lzdGVyKCk7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zMTMyPXN0cnVjdCBwcm90byB1ZHBfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTMxNTItXFx0LnB1dF9wb3J0XFx0XFx0PSB1ZHBfbGliX3VuaGFzaCxcXG5uZXQvaXB2NC91ZHAuYzozMTUzOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvaXB2NC91ZHAuYy0zMTU0LVxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdWRwX2JwZl91cGRhdGVfcHJvdG8sXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zMTcxPXN0YXRpYyBib29sIHNlcV9za19tYXRjaChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMzE3OS1cXG5uZXQvaXB2NC91ZHAuYzozMTgwOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvaXB2NC91ZHAuYy0zMTgxLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX2l0ZXJfdWRwX3NlcV9vcHM7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zMjk3PXN0YXRpYyBpbnQgdWRwNF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTMzMTItXFxubmV0L2lwdjQvdWRwLmM6MzMxMzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdWRwLmMtMzMxNC1zdHJ1Y3QgYnBmX2l0ZXJfX3VkcCB7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zNTg2PXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzZXFfZmlsZV9mYW1pbHkoY29uc3Qgc3RydWN0IHNlcV9maWxlICpzZXEpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zNTg5LVxcbm5ldC9pcHY0L3VkcC5jOjM1OTA6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC9pcHY0L3VkcC5jLTM1OTEtXFx0LyogQlBGIGl0ZXJhdG9yOiBicGYgcHJvZ3JhbXMgdG8gZmlsdGVyIHNvY2tldHMuICovXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zODE0PXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgX19uZXRfaW5pdGRhdGEgdWRwX3N5c2N0bF9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zODE4LVxcbm5ldC9pcHY0L3VkcC5jOjM4MTk6I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxcbm5ldC9pcHY0L3VkcC5jLTM4MjAtREVGSU5FX0JQRl9JVEVSX0ZVTkModWRwLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTM4OTc9dm9pZCBfX2luaXQgdWRwX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTM5MTAtXFxubmV0L2lwdjQvdWRwLmM6MzkxMTojaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXFxubmV0L2lwdjQvdWRwLmMtMzkxMi1cXHRicGZfaXRlcl9yZWdpc3RlcigpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjoxNC4yNjA0OTAzMzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0NDc4NjUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6XG5cbioqRGVlcCBEaXZlIG9uIEtlcm5lbCBDb25maWd1cmF0aW9uOiBCQlIgYW5kIEJQRioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGtlcm5lbCdzIGN1cnJlbnQgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBsYW5kc2NhcGUgYmVmb3JlIGRpdmluZyBpbnRvIHNwZWNpZmljIGlzc3Vlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcgY3J1Y2lhbCBLY29uZmlnIG9wdGlvbnM6IGBUQ1BfQ09OR19CQlJgIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYC5cblxuYFRDUF9DT05HX0JCUmAsIHRoYXQncyB0aGUgcHJpbWFyeSBpbnRlcmVzdC4gSXMgQkJSIGVuYWJsZWQ/IElzIGl0IGV2ZW4gYXZhaWxhYmxlPyBUaGlzIGRpY3RhdGVzIGEgbG90IG9mIG15IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpZiBCQlIgaXMgaW4gdXNlIG9yIHBsYW5uZWQgZm9yLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdOKAmXMgc3VwcG9ydGVkIGFuZCBob3cgaXQncyBjdXJyZW50bHkgY29uZmlndXJlZC4gSWYgaXQncyAqbm90KiBlbmFibGVkLCB0aGF0J3MgYSB3aG9sZSBvdGhlciB0aHJlYWQgb2YgaW5xdWlyeSB0byBleHBsb3JlIHRoZSByZWFzb25pbmcuIFBlcmhhcHMgaXQgd2FzIGludGVudGlvbmFsbHkgZGlzYWJsZWQgZHVlIHRvIGNvbXBhdGliaWxpdHksIHRlc3RpbmcsIG9yIHBlcmZvcm1hbmNlIGNvbmNlcm5zPyBPciBtYXliZSBpdCdzIGp1c3Qgc2ltcGx5IG92ZXJsb29rZWQuXG5cbk5leHQgdXAgYXJlIHRoZSBCUEYtcmVsYXRlZCBvcHRpb25zLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjYW4gb2ZmZXIgc29tZSBvZiB0aGUgbW9zdCBkeW5hbWljIGFuZCBzb3BoaXN0aWNhdGVkIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5hbHlzaXMgYW5kIG1hbmlwdWxhdGlvbiBjYXBhYmlsaXRpZXMuIEknbSBrZWVuIHRvIGRldGVybWluZSB3aGV0aGVyIEJQRiBpcyBmdWxseSBpbnRlZ3JhdGVkIHdpdGggdGhlIHN5c3RlbS4gQ2hlY2tpbmcgb24gYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGVuc3VyZXMgdGhhdCB0aGUgdXNlci1zcGFjZSBwcm9ncmFtcyBjYW4gbGV2ZXJhZ2UgdGhlIEJQRiBmdW5jdGlvbmFsaXR5IGVmZmVjdGl2ZWx5LCBhbmQgdGhhdCBKdXN0LUluLVRpbWUgKEpJVCkgY29tcGlsYXRpb24gaXMgYWxzbyBhdmFpbGFibGUuIEFyZSB3ZSBnZXR0aW5nIHRoZSBmdWxsIHBvdGVudGlhbCBmcm9tIEJQRj8gT3IsIGlzIGl0IHJlc3RyaWN0ZWQgdG8gYSBzYWZlciwgbW9yZSBpbnRlcnByZXRpdmUgbW9kZT8gQW5kIGlmIGl0J3MgZGlzYWJsZWQsIHRoYXQgc2lnbmlmaWNhbnRseSBsaW1pdHMgdGhlIHBvc3NpYmlsaXRpZXMgZm9yIGFkdmFuY2VkIHRyYWNpbmcsIG5ldHdvcmtpbmcgcHJvZ3JhbW1hYmlsaXR5LCBhbmQgZUJQRi5cblxuRXNzZW50aWFsbHksIEkgd2FudCB0byB0YWtlIGEgcXVpY2sgcHVsc2Ugb2YgdGhlIHNpdHVhdGlvbi4gVGhpcyBpbml0aWFsIEtjb25maWcgY2hlY2sgaXMgbXkgY29tcGFzcy4gSXQgaGVscHMgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiwgZm9jdXNpbmcgb24gdGhvc2UgZmVhdHVyZXMgdGhhdCB3aWxsIGVpdGhlciBlbmFibGUgb3IgY29uc3RyYWluIG15IHN1YnNlcXVlbnQgZGlhZ25vc3RpY3MgYW5kIG9wdGltaXphdGlvbnMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgZGlnZ2luZyBpbnRvIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIGFwcGxpY2F0aW9uIGJlaGF2aW9yLiBJdCdzIGEgcXVpY2sgdHJpYWdlIHN0ZXAgdGhhdCBoZWxwcyBtZSBwcmlvcml0aXplIG15IGRlZXBlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjoxNy41MDUyNzkzMzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0XFxuIDY2MTpcXHRcXHQgIEZvciBmdXJ0aGVyIGRldGFpbHMgc2VlOlxcbiA2NjI6XFx0XFx0ICAgIEQuQS4gSGF5ZXMgYW5kIEcuIEFybWl0YWdlLiBcXFwiUmV2aXNpdGluZyBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIHVzaW5nXFxuIDY2MzpcXHRcXHQgICAgZGVsYXkgZ3JhZGllbnRzLlxcXCIgSW4gTmV0d29ya2luZyAyMDExLiBQcmVwcmludDpcXG4gNjY0OlxcdFxcdCAgICBodHRwOi8vY2FpYS5zd2luLmVkdS5hdS9jdi9kYWhheWVzL2NvbnRlbnQvbmV0d29ya2luZzIwMTEtY2RnLXByZXByaW50LnBkZlxcbiA2NjU6XFx0XFxuIDY2NjpcXHRjb25maWcgVENQX0NPTkdfQkJSXFxuIDY2NzpcXHRcXHR0cmlzdGF0ZSBcXFwiQkJSIFRDUFxcXCJcXG4gNjY4OlxcdFxcdGRlZmF1bHQgblxcbiA2Njk6XFx0XFx0aGVscFxcbiA2NzA6XFx0XFxuIDY3MTpcXHRcXHQgIEJCUiAoQm90dGxlbmVjayBCYW5kd2lkdGggYW5kIFJUVCkgVENQIGNvbmdlc3Rpb24gY29udHJvbCBhaW1zIHRvXFxuIDY3MjpcXHRcXHQgIG1heGltaXplIG5ldHdvcmsgdXRpbGl6YXRpb24gYW5kIG1pbmltaXplIHF1ZXVlcy4gSXQgYnVpbGRzIGFuIGV4cGxpY2l0XFxuIDY3MzpcXHRcXHQgIG1vZGVsIG9mIHRoZSBib3R0bGVuZWNrIGRlbGl2ZXJ5IHJhdGUgYW5kIHBhdGggcm91bmQtdHJpcCBwcm9wYWdhdGlvblxcbiA2NzQ6XFx0XFx0ICBkZWxheS4gSXQgdG9sZXJhdGVzIHBhY2tldCBsb3NzIGFuZCBkZWxheSB1bnJlbGF0ZWQgdG8gY29uZ2VzdGlvbi4gSXRcXG4gNjc1OlxcdFxcdCAgY2FuIG9wZXJhdGUgb3ZlciBMQU4sIFdBTiwgY2VsbHVsYXIsIHdpZmksIG9yIGNhYmxlIG1vZGVtIGxpbmtzLiBJdCBjYW5cXG4gNjc2OlxcdFxcdCAgY29leGlzdCB3aXRoIGZsb3dzIHRoYXQgdXNlIGxvc3MtYmFzZWQgY29uZ2VzdGlvbiBjb250cm9sLCBhbmQgY2FuXFxuIDY3NzpcXHRcXHQgIG9wZXJhdGUgd2l0aCBzaGFsbG93IGJ1ZmZlcnMsIGRlZXAgYnVmZmVycywgYnVmZmVyYmxvYXQsIHBvbGljZXJzLCBvclxcbiA2Nzg6XFx0XFx0ICBBUU0gc2NoZW1lcyB0aGF0IGRvIG5vdCBwcm92aWRlIGEgZGVsYXkgc2lnbmFsLiBJdCByZXF1aXJlcyB0aGUgZnFcXG4gNjc5OlxcdFxcdCAgKFxcXCJGYWlyIFF1ZXVlXFxcIikgcGFjaW5nIHBhY2tldCBzY2hlZHVsZXIuXFxuIDY4MDpcXHRcXG4gNjgxOlxcdGNob2ljZVxcbiA2ODI6XFx0XFx0cHJvbXB0IFxcXCJEZWZhdWx0IFRDUCBjb25nZXN0aW9uIGNvbnRyb2xcXFwiXFxuIDY4MzpcXHRcXHRkZWZhdWx0IERFRkFVTFRfQ1VCSUNcXG4gNjg0OlxcdFxcdGhlbHBcXG4gNjg1OlxcdFxcdCAgU2VsZWN0IHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHRcXG4gNjg2OlxcdFxcdCAgZm9yIGFsbCBjb25uZWN0aW9ucy5cXG4gNjg3OlxcdFxcbiA2ODg6XFx0XFx0Y29uZmlnIERFRkFVTFRfQklDXFxuIDY4OTpcXHRcXHRcXHRib29sIFxcXCJCaWNcXFwiIGlmIFRDUF9DT05HX0JJQz15XFxuIDY5MDpcXHRcXG4gNjkxOlxcdFxcdGNvbmZpZyBERUZBVUxUX0NVQklDXFxuIDY5MjpcXHRcXHRcXHRib29sIFxcXCJDdWJpY1xcXCIgaWYgVENQX0NPTkdfQ1VCSUM9eVxcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRjb25maWcgREVGQVVMVF9IVENQXFxuIDY5NTpcXHRcXHRcXHRib29sIFxcXCJIdGNwXFxcIiBpZiBUQ1BfQ09OR19IVENQPXlcXG4gNjk2OlxcdFxcbiA2OTc6XFx0XFx0Y29uZmlnIERFRkFVTFRfSFlCTEFcXG4gNjk4OlxcdFxcdFxcdGJvb2wgXFxcIkh5YmxhXFxcIiBpZiBUQ1BfQ09OR19IWUJMQT15XFxuIDY5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6MTcuNTA1Mzc0NTg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2Mzk4ODczOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBCUEYgYW5kIFRDUCBDb25nZXN0aW9uIENvbnRyb2wgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBwdXp6bGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgdGhlIG5lY2Vzc2l0eSBhbmQgXCJzdGFuZGFyZC1uZXNzXCIgb2YgYENPTkZJR19JTkVUYC4gSSBzdXNwZWN0IGl0J3MgZnVuZGFtZW50YWwsIGJ1dCBsZXQncyBjb25maXJtLiBOZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIG9mIHRoZSBwb3RlbnRpYWxseSByZWxhdGVkIGNvbmZpZ3VyYXRpb25z4oCUYElORVRgLCBgVENQX0NPTkdfQkJSYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBCUEZfSklUYOKAlGFyZSBlaXRoZXIgcmVxdWlyZWQgb3IgaGlnaGx5IHJlY29tbWVuZGVkIGZvciB0aGUgZnVuY3Rpb25hbGl0eSBJJ20gYWZ0ZXIsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgQlBGLWJhc2VkIFRDUCBDb25nZXN0aW9uIEFsZ29yaXRobXMuIEkgc2hvdWxkIGFsc28gY2FzdCBhIHdpZGVyIG5ldDogYXJlIHRoZXJlICpvdGhlciogY3J1Y2lhbCBjb25maWdzIEknbSBvdmVybG9va2luZyBmb3IgQlBGJ3Mgc3RydWN0X29wcyBvciBmb3Igc3VwcG9ydGluZyBgQlBGX1RDUF9DQWA/XG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSBhIHN0YWJsZSBhbmQgcGVyZm9ybWFudCBpbnRlZ3JhdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBLY29uZmlnIGFuZCBNYWtlZmlsZXMsIGZvciByZWZlcmVuY2VzIHRvIGJvdGggYGJwZl90Y3BfY2FgIGFuZCBgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTYC4gVGhpcyB3aWxsIGhlbHAgbWUgdHJhY2sgZG93biB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgaW1tZWRpYXRlIGFuc3dlcnMgcmVnYXJkaW5nIHRoZSBjb3JyZWN0IHNldHRpbmdzIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxMTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjoyMC4xNDUyNjQ2MjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzE4MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9QUk9HX1RZUEVfU1RSVUNUX09QU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz03MjY9c3RhdGljIGxvbmcgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy04NDUtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjg0NjpcXHRcXHRpZiAocHJvZy1cXHUwMDNldHlwZSAhPSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMgfHxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtODQ3LVxcdFxcdCAgICBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQgIT0gc3Rfb3BzX2Rlc2MtXFx1MDAzZXR5cGVfaWQgfHxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xNDkyPWludCBicGZfcHJvZ19hc3NvY19zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTAzLVxcdGlmIChzdF9vcHNfYXNzb2MpIHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTUwNDpcXHRcXHRpZiAocHJvZy1cXHUwMDNldHlwZSAhPSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1MDUtXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTEyLVxcdFxcdCAqL1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNTEzOlxcdFxcdGlmIChwcm9nLVxcdTAwM2V0eXBlICE9IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTUxNC1cXHRcXHRcXHRicGZfbWFwX2luYyhtYXApO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTE1MjI9dm9pZCBicGZfcHJvZ19kaXNhc3NvY19zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTMyLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNTMzOlxcdGlmIChwcm9nLVxcdTAwM2V0eXBlICE9IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTUzNC1cXHRcXHRicGZfbWFwX3B1dChzdF9vcHNfYXNzb2MpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz02MjE3PXN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3Byb2dfY3R4X3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02MzA5LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9MU006XFxua2VybmVsL2JwZi9idGYuYzo2MzEwOlxcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOlxcbmtlcm5lbC9icGYvYnRmLmMtNjMxMS1cXHRcXHQvKiBhbGxvdyB1NjQqIGFzIGN0eCAqL1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz02NjE2PXN0YXRpYyBib29sIHByb2dfYXJnc190cnVzdGVkKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNjYyNC1cXHRcXHRyZXR1cm4gYnBmX2xzbV9pc190cnVzdGVkKHByb2cpO1xcbmtlcm5lbC9icGYvYnRmLmM6NjYyNTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUzpcXG5rZXJuZWwvYnBmL2J0Zi5jLTY2MjYtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTkwNTY9c3RhdGljIGludCBicGZfcHJvZ190eXBlX3RvX2tmdW5jX2hvb2soZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtOTA2NC1cXHRcXHRyZXR1cm4gQlRGX0tGVU5DX0hPT0tfVEM7XFxua2VybmVsL2JwZi9idGYuYzo5MDY1OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOlxcbmtlcm5lbC9icGYvYnRmLmMtOTA2Ni1cXHRcXHRyZXR1cm4gQlRGX0tGVU5DX0hPT0tfU1RSVUNUX09QUztcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI1MDg9c3RhdGljIGJvb2wgX19icGZfcHJvZ19tYXBfY29tcGF0aWJsZShzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjU2MC1cXHRcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfRVhUOlxcbmtlcm5lbC9icGYvY29yZS5jOjI1NjE6XFx0XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFM6XFxua2VybmVsL2JwZi9jb3JlLmMtMjU2Mi1cXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFzay5jPTUxNT1zdGF0aWMgaW50IF9faW5pdCBjcHVtYXNrX2tmdW5jX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFzay5jLTUyNi1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZjcHVtYXNrX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9jcHVtYXNrLmM6NTI3OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXFx1MDAyNmNwdW1hc2tfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2NwdW1hc2suYy01MjgtXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2Y3B1bWFza19rZnVuY19zZXQpO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk4Mj1zdGF0aWMgaW50IF9faW5pdCBrZnVuY19pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDAwLVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcXHUwMDI2Z2VuZXJpY19rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDE6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2Z2VuZXJpY19rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMDItXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2Z2VuZXJpY19rZnVuY19zZXQpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjcyOD1icGZfcHJvZ19sb2FkX2NoZWNrX2F0dGFjaChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjc0My1cXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI3NDQ6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFM6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjc0NS1cXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfRVhUOlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjg3ND1zdGF0aWMgYm9vbCBpc19wZXJmbW9uX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg4My1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI4ODQ6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFM6IC8qIGhhcyBhY2Nlc3MgdG8gc3RydWN0IHNvY2sgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODg1LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9FWFQ6IC8qIGV4dGVuZHMgYW55IHByb2cgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYyNjI9c3RhdGljIGludCBwcm9nX2Fzc29jX3N0cnVjdF9vcHModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mjc3LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYyNzg6XFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjI3OS1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTUyMzU9c3RhdGljIGVudW0gcHJpdl9zdGFja19tb2RlIGJwZl9lbmFibGVfcHJpdl9zdGFjayhzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTI1MS1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MjUyOlxcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MjUzLVxcdFxcdGlmIChwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXByaXZfc3RhY2tfcmVxdWVzdGVkIHx8IGJwZl9wcm9nX2NoZWNrX3JlY3VyKHByb2cpKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwNDk5PXN0YXRpYyBpbnQgY2hlY2tfcmVmZXJlbmNlX2xlYWsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCBleGNlcHRpb25fZXhpdClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDUxNS1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA1MTY6XFx0XFx0aWYgKHR5cGUgPT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTIFxcdTAwMjZcXHUwMDI2ICFleGNlcHRpb25fZXhpdCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDUxNy1cXHRcXHQgICAgcmVnLVxcdTAwM2VpZCA9PSBzdGF0ZS1cXHUwMDNlcmVmc1tpXS5pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzIyOD1zdGF0aWMgYm9vbCByZXR1cm5fcmV0dmFsX3JhbmdlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlICpyYW5nZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMyMi1cXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczMjM6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFM6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzI0LVxcdFxcdCpyYW5nZSA9IHJldHZhbF9yYW5nZSgwLCAwKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzMzOT1zdGF0aWMgYm9vbCBwcm9ncmFtX3JldHVybnNfdm9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzUwLVxcdFxcdGJyZWFrO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzM1MTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUzpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczNTItXFx0XFx0aWYgKCFwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9mdW5jX3Byb3RvLVxcdTAwM2V0eXBlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MzcxPXN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM4Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczODc6XFx0aWYgKHByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczODgtXFx0XFx0LyogQWxsb3cgYSBzdHJ1Y3Rfb3BzIHByb2dyYW0gdG8gcmV0dXJuIGEgcmVmZXJlbmNlZCBrcHRyIGlmIGl0XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MjAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NDIxOlxcdGlmIChwcm9nX3R5cGUgPT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTIFxcdTAwMjZcXHUwMDI2ICFyZXRfdHlwZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MjItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkyNjc9c3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MDAtXFx0LyogQWNxdWlyZSByZWZlcmVuY2VzIGZvciBzdHJ1Y3Rfb3BzIHByb2dyYW0gYXJndW1lbnRzIHRhZ2dlZCB3aXRoIFxcXCJfX3JlZlxcXCIgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0MDE6XFx0aWYgKCFzdWJwcm9nIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MDItXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGF1eC1cXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkrKykge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMjc2PXN0YXRpYyBib29sIGNhbl9iZV9zbGVlcGFibGUoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjk3LVxcdHJldHVybiBwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfS1BST0JFIC8qIG9ubHkgZm9yIHVwcm9iZXMgKi8gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAyOTg6XFx0ICAgICAgIHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjk5LVxcdCAgICAgICBwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQgfHxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDMwMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMyNS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMjY6XFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMyNy1cXHRcXHRyZXR1cm4gY2hlY2tfc3RydWN0X29wc19idGZfaWQoZW52KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6MjAuMTk1NTg4Mzc2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MTA2MTIwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgU3RydWN0IE9wcyBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGJwZl9zdHJ1Y3Rfb3BzLmNgIGdldHMgYnVpbHQuIFRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGNvbnNpZGVyaW5nIGl0J3Mga2VybmVsLXJlbGF0ZWQgYW5kIGxpa2VseSBpbnZvbHZlcyBCUEYsIGlzIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgZm9yIGFueXRoaW5nIEJQRi1zcGVjaWZpYyB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3MgZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhhdCBNYWtlZmlsZSBoYXMgdG8gc2F5LiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgYGJwZl9zdHJ1Y3Rfb3BzLmNgLiBIb3BlZnVsbHksIGl0J3Mgc3RyYWlnaHRmb3J3YXJkLCBhbmQgSSBjYW4gcXVpY2tseSB0cmFjZSB0aGUgcmVsZXZhbnQgdGFyZ2V0cyBhbmQgc291cmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0NDMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjoyNS4xMDYyMDQyMzZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTcyNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJ1Y3Rfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1ODYgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NDM9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3N0cnVjdF9vcHMub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNDUtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXNrLm9cXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNi1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTc6c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlIHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTg6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2NvbW1vbl92YWx1ZSBjb21tb247XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE5LVxcdGNoYXIgZGF0YVtdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMjMtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjI0OnN0cnVjdCBicGZfc3RydWN0X29wc19tYXAge1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0yNS1cXHRzdHJ1Y3QgYnBmX21hcCBtYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjI2OlxcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYztcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMjctXFx0LyogcHJvdGVjdCBtYXBfdXBkYXRlICovXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNDktXFx0ICovXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjUwOlxcdHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqdXZhbHVlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MS1cXHQvKiBrdmFsdWUuZGF0YSBzdG9yZXMgdGhlIGFjdHVhbCBrZXJuZWwncyBzdHJ1Y3RcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01NC1cXHQgKi9cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTU6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlIGt2YWx1ZTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTYtfTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTctXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjU4OnN0cnVjdCBicGZfc3RydWN0X29wc19saW5rIHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTktXFx0c3RydWN0IGJwZl9saW5rIGxpbms7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjQ9c3RhdGljIERFRklORV9NVVRFWCh1cGRhdGVfbXV0ZXgpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjY6I2RlZmluZSBWQUxVRV9QUkVGSVggXFxcImJwZl9zdHJ1Y3Rfb3BzX1xcXCJcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjctI2RlZmluZSBWQUxVRV9QUkVGSVhfTEVOIChzaXplb2YoVkFMVUVfUFJFRklYKSAtIDEpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY4LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2OTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3RydWN0X29wc192ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcwLX07XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcxLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3Mjpjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGJwZl9zdHJ1Y3Rfb3BzX3Byb2dfb3BzID0ge1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03My0jaWZkZWYgQ09ORklHX05FVFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3NDpcXHQudGVzdF9ydW4gPSBicGZfc3RydWN0X29wc190ZXN0X3J1bixcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzUtI2VuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9Nzk9QlRGX0lEKHN0cnVjdCwgbW9kdWxlKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo4MDpCVEZfSUQoc3RydWN0LCBicGZfc3RydWN0X29wc19jb21tb25fdmFsdWUpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTgxLVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTg5PXN0YXRpYyBib29sIGlzX3ZhbGlkX3ZhbHVlX3R5cGUoc3RydWN0IGJ0ZiAqYnRmLCBzMzIgdmFsdWVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA3LVxcdGlmIChtdCAhPSBjb21tb25fdmFsdWVfdHlwZSkge1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDg6XFx0XFx0cHJfd2FybihcXFwiVGhlIGZpcnN0IG1lbWJlciBvZiAlcyBzaG91bGQgYmUgYnBmX3N0cnVjdF9vcHNfY29tbW9uX3ZhbHVlXFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDktXFx0XFx0XFx0dmFsdWVfbmFtZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIyLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjM6c3RhdGljIHZvaWQgKmJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2FsbG9jKHZvaWQpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyNC17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM5LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDA6dm9pZCBicGZfc3RydWN0X29wc19pbWFnZV9mcmVlKHZvaWQgKmltYWdlKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDEte1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1NS0gKlxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNTY6ICogSW5pdGlhbGl6ZSBhIHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyBhY2NvcmRpbmcgdG8gdHlwZSBpbmZvIG9mXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1Ny0gKiB0aGUgYXJndW1lbnRzIG9mIGEgc3R1YiBmdW5jdGlvbi4gKENoZWNrIGtDRkkgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXRcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTktICpcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTYwOiAqIEVhY2ggbWVtYmVyIGluIHRoZSBzdHJ1Y3Rfb3BzIHR5cGUgaGFzIGEgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2FyZ19pbmZvXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE2MS0gKiB0byBwcm92aWRlIGFuIGFycmF5IG9mIHN0cnVjdCBicGZfY3R4X2FyZ19hdXgsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXNcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xNzM9c3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNzctXFx0XFx0XFx0ICAgIHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbW9kZWwsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE3ODpcXHRcXHRcXHQgICAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2FyZ19pbmZvICphcmdfaW5mbylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTc5LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zMjMtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjMyNDovKiBDbGVhbiB1cCB0aGUgYXJnX2luZm8gaW4gYSBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYy4gKi9cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MzI1OnZvaWQgYnBmX3N0cnVjdF9vcHNfZGVzY19yZWxlYXNlKHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzI2LXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MzI3OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm87XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTMyOC1cXHRpbnQgaTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0zMzc9c3RhdGljIGJvb2wgaXNfbW9kdWxlX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBpZClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTAtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM1MTppbnQgYnBmX3N0cnVjdF9vcHNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzLCB1MzIgbW9mZilcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzUyLXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTctXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM1ODppbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzU5LVxcdFxcdFxcdCAgICAgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTM2MS17XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM2MjpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcyA9IHN0X29wc19kZXNjLVxcdTAwM2VzdF9vcHM7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM2MzpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNjQtXFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy00MzktXFx0XFx0aWYgKCFzdF9vcHNfaWRzW0lEWF9NT0RVTEVfSURdIFxcdTAwMjZcXHUwMDI2IGlzX21vZHVsZV9tZW1iZXIoYnRmLCBtZW1iZXItXFx1MDAzZXR5cGUpKSB7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjQ0MDpcXHRcXHRcXHRwcl93YXJuKFxcXCInc3RydWN0IG1vZHVsZScgYnRmIGlkIG5vdCBmb3VuZC4gSXMgQ09ORklHX01PRFVMRVMgZW5hYmxlZD8gYnBmX3N0cnVjdF9vcHMgJyVzJyBuZWVkcyBtb2R1bGUgc3VwcG9ydC5cXFxcblxcXCIsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ0MS1cXHRcXHRcXHRcXHRzdF9vcHMtXFx1MDAzZW5hbWUpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ1Mi1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NDUzOlxcdFxcdGlmICghZnVuY19wcm90byB8fCBicGZfc3RydWN0X29wc19zdXBwb3J0ZWQoc3Rfb3BzLCBtb2ZmKSlcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNDU0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ5Ni1cXHRpZiAoc3Rfb3BzLVxcdTAwM2Vpbml0KGJ0ZikpIHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NDk3OlxcdFxcdHByX3dhcm4oXFxcIkVycm9yIGluIGluaXQgYnBmX3N0cnVjdF9vcHMgJXNcXFxcblxcXCIsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ5OC1cXHRcXHRcXHRzdF9vcHMtXFx1MDAzZW5hbWUpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTUwNS1lcnJvdXQ6XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjUwNjpcXHRicGZfc3RydWN0X29wc19kZXNjX3JlbGVhc2Uoc3Rfb3BzX2Rlc2MpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MDctXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTEwLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1MTE6c3RhdGljIGludCBicGZfc3RydWN0X29wc19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTEyLVxcdFxcdFxcdFxcdFxcdCAgIHZvaWQgKm5leHRfa2V5KVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTUyMC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTIxOmludCBicGZfc3RydWN0X29wc19tYXBfc3lzX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTIyLVxcdFxcdFxcdFxcdCAgICAgICB2b2lkICp2YWx1ZSlcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTIzLXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTI0OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcCA9IChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICopbWFwO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1MjU6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICp1dmFsdWUsICprdmFsdWU7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjUyNjpcXHRlbnVtIGJwZl9zdHJ1Y3Rfb3BzX3N0YXRlIHN0YXRlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MjctXFx0czY0IHJlZmNudDtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01NTctXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjU1ODpzdGF0aWMgdm9pZCAqYnBmX3N0cnVjdF9vcHNfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTU5LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01NjItXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjU2MzpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfcHV0X3Byb2dzKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTY0LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01NzQtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjU3NTpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfZGlzc29jX3Byb2dzKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTc2LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01ODUtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjU4NjpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfZnJlZV9pbWFnZShzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXApXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU4Ny17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTkwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzdF9tYXAtXFx1MDAzZWltYWdlX3BhZ2VzX2NudDsgaSsrKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1OTE6XFx0XFx0YnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZShzdF9tYXAtXFx1MDAzZWltYWdlX3BhZ2VzW2ldKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTkyLVxcdHN0X21hcC1cXHUwMDNlaW1hZ2VfcGFnZXNfY250ID0gMDtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz01OTU9c3RhdGljIGludCBjaGVja196ZXJvX2hvbGVzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYyMC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjIxOnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYyMi17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjI0LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2MjU6c3RhdGljIHZvaWQgYnBmX3N0cnVjdF9vcHNfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjI2LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MzEtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjYzMjpjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9zdHJ1Y3Rfb3BzX2xpbmtfbG9wcyA9IHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjMzOlxcdC5yZWxlYXNlID0gYnBmX3N0cnVjdF9vcHNfbGlua19yZWxlYXNlLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2MzQ6XFx0LmRlYWxsb2MgPSBicGZfc3RydWN0X29wc19saW5rX2RlYWxsb2MsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYzNS19O1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MzYtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjYzNzppbnQgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcyxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjM4LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NjItXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjY2MzpcXHRcXHRpbWFnZSA9IGJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2FsbG9jKCk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY2NC1cXHRcXHRpZiAoSVNfRVJSKGltYWdlKSlcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NzMtXFx0XFx0aWYgKGltYWdlICE9ICpfaW1hZ2UpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjY3NDpcXHRcXHRcXHRicGZfc3RydWN0X29wc19pbWFnZV9mcmVlKGltYWdlKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjc1LVxcdFxcdHJldHVybiBzaXplID8gOiAtRUZBVUxUO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY4Mi1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjgzOnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2tzeW1faW5pdChjb25zdCBjaGFyICp0bmFtZSwgY29uc3QgY2hhciAqbW5hbWUsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY4NC1cXHRcXHRcXHRcXHQgICAgIHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02OTEtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjY5MjpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfYWRkX2tzeW1zKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjkzLXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MDItXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjcwMzpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfZGVsX2tzeW1zKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzA0LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MTMtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjcxNDpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfZnJlZV9rc3ltcyhzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXApXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcxNS17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzI1LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3MjY6c3RhdGljIGxvbmcgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzI3LVxcdFxcdFxcdFxcdFxcdCAgIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcyOC17XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjcyOTpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzMwOlxcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyA9IHN0X21hcC1cXHUwMDNlc3Rfb3BzX2Rlc2M7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjczMTpcXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcyA9IHN0X29wc19kZXNjLVxcdTAwM2VzdF9vcHM7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjczMjpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUgKnV2YWx1ZSwgKmt2YWx1ZTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzMzLVxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbW9kdWxlX3R5cGU7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzY2LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3Njc6XFx0dXZhbHVlID0gKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqKXN0X21hcC1cXHUwMDNldXZhbHVlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3Njg6XFx0a3ZhbHVlID0gKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqKVxcdTAwMjZzdF9tYXAtXFx1MDAzZWt2YWx1ZTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzY5LVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTg2MC1cXHRcXHRicGZfdHJhbXBfbGlua19pbml0KGxpbmssIEJQRl9MSU5LX1RZUEVfU1RSVUNUX09QUyxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6ODYxOlxcdFxcdFxcdCAgICAgIFxcdTAwMjZicGZfc3RydWN0X29wc19saW5rX2xvcHMsIHByb2csIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlLCAwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtODYyLVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTg3NS1cXHRcXHR0cmFtcG9saW5lX3N0YXJ0ID0gaW1hZ2Vfb2ZmO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo4NzY6XFx0XFx0ZXJyID0gYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lKHRub2RlcywgXFx1MDAyNmxpbmstXFx1MDAzZW5vZGUsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTg3Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2c3Rfb3BzLVxcdTAwM2VmdW5jX21vZGVsc1tpXSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy04OTUtXFx0XFx0LyogaW5pdCBrc3ltIGZvciB0aGlzIHRyYW1wb2xpbmUgKi9cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6ODk2OlxcdFxcdGJwZl9zdHJ1Y3Rfb3BzX2tzeW1faW5pdCh0bmFtZSwgbW5hbWUsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTg5Ny1cXHRcXHRcXHRcXHRcXHQgaW1hZ2UgKyB0cmFtcG9saW5lX3N0YXJ0LFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTkyOC1cXHRcXHQgKiBtYXAgbXVzdCBiZSBzZXQgdG8gSU5JVCBhdCB0aGlzIG1vbWVudCwgYW5kIHRodXNcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTI5OlxcdFxcdCAqIGJwZl9zdHJ1Y3Rfb3BzX21hcF9kZWxldGVfZWxlbSgpIGNhbid0IHVucmVnaXN0ZXJcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTMwLVxcdFxcdCAqIG9yIHRyYW5zaXRpb24gaXQgdG8gVE9CRUZSRUUgY29uY3VycmVudGx5Llxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk0Ny1yZXNldF91bmxvY2s6XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjk0ODpcXHRicGZfc3RydWN0X29wc19tYXBfZnJlZV9rc3ltcyhzdF9tYXApO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo5NDk6XFx0YnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWVfaW1hZ2Uoc3RfbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTUwOlxcdGJwZl9zdHJ1Y3Rfb3BzX21hcF9kaXNzb2NfcHJvZ3Moc3RfbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTUxOlxcdGJwZl9zdHJ1Y3Rfb3BzX21hcF9wdXRfcHJvZ3Moc3RfbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTUyLVxcdG1lbXNldCh1dmFsdWUsIDAsIG1hcC1cXHUwMDNldmFsdWVfc2l6ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTU3LVxcdGlmICghZXJyKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo5NTg6XFx0XFx0YnBmX3N0cnVjdF9vcHNfbWFwX2FkZF9rc3ltcyhzdF9tYXApO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05NTktXFx0cmV0dXJuIGVycjtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05NjEtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjk2MjpzdGF0aWMgbG9uZyBicGZfc3RydWN0X29wc19tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05NjMte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo5NjQ6XFx0ZW51bSBicGZfc3RydWN0X29wc19zdGF0ZSBwcmV2X3N0YXRlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo5NjU6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05NjYtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjk2NzpcXHRzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTY4LVxcdGlmIChzdF9tYXAtXFx1MDAzZW1hcC5tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9MSU5LKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk4OS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTkwOnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTkxLVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNlcV9maWxlICptKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05OTIte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo5OTM6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk5NC1cXHR2b2lkICp2YWx1ZTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDAwLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDAxOlxcdGVyciA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9zeXNfbG9va3VwX2VsZW0obWFwLCBrZXksIHZhbHVlKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAwMi1cXHRpZiAoIWVycikge1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwMTEtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwMTI6c3RhdGljIHZvaWQgX19icGZfc3RydWN0X29wc19tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDEzLXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTAxNDpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAxNS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAxNi1cXHRpZiAoc3RfbWFwLVxcdTAwM2VsaW5rcylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTAxNzpcXHRcXHRicGZfc3RydWN0X29wc19tYXBfcHV0X3Byb2dzKHN0X21hcCk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwMTgtXFx0aWYgKHN0X21hcC1cXHUwMDNla3N5bXMpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwMTk6XFx0XFx0YnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWVfa3N5bXMoc3RfbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAyMC1cXHRicGZfbWFwX2FyZWFfZnJlZShzdF9tYXAtXFx1MDAzZWxpbmtzKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAyMS1cXHRicGZfbWFwX2FyZWFfZnJlZShzdF9tYXAtXFx1MDAzZWtzeW1zKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTAyMjpcXHRicGZfc3RydWN0X29wc19tYXBfZnJlZV9pbWFnZShzdF9tYXApO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDIzLVxcdGJwZl9tYXBfYXJlYV9mcmVlKHN0X21hcC1cXHUwMDNldXZhbHVlKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDI2LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDI3OnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwMjgte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDI5OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcCA9IChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICopbWFwO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDMwLVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwMzctXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwMzg6XFx0YnBmX3N0cnVjdF9vcHNfbWFwX2Rpc3NvY19wcm9ncyhzdF9tYXApO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDM5LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDQwOlxcdGJwZl9zdHJ1Y3Rfb3BzX21hcF9kZWxfa3N5bXMoc3RfbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA0MS1cXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDQ2LVxcdCAqIHNldHNvY2tvcHQoVENQX0NPTkdFU1RJT04sIFxcXCJ0Y3BfY2NfeVxcXCIpLlxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDQ3OlxcdCAqIER1cmluZyB0aGUgc3dpdGNoLCAgYnBmX3N0cnVjdF9vcHNfcHV0KHRjcF9jY194KSBpcyBjYWxsZWRcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA0OC1cXHQgKiBhbmQgaXRzIHJlZmNvdW50IG1heSByZWFjaCAwIHdoaWNoIHRoZW4gZnJlZSBpdHNcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDU4LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDU5OlxcdF9fYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUobWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA2MC19XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNjEtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwNjI6c3RhdGljIGludCBicGZfc3RydWN0X29wc19tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNjMte1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEwNzE9c3RhdGljIHUzMiBjb3VudF9mdW5jX3B0cnMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA4My1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA4NDpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmJwZl9zdHJ1Y3Rfb3BzX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA4NS17XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwODY6XFx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDg3LVxcdHNpemVfdCBzdF9tYXBfc2l6ZTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA4ODpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwODktXFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqdnQ7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTExOS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTEyMDpcXHRzdF9vcHNfZGVzYyA9IGJwZl9zdHJ1Y3Rfb3BzX2ZpbmRfdmFsdWUoYnRmLCBhdHRyLVxcdTAwM2VidGZfdm1saW51eF92YWx1ZV90eXBlX2lkKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTEyMS1cXHRpZiAoIXN0X29wc19kZXNjKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTEzNS1cXHRcXHQvKiBrdmFsdWUgc3RvcmVzIHRoZVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTM2OlxcdFxcdCAqIHN0cnVjdCBicGZfc3RydWN0X29wc190Y3BfY29uZ2VzdGlvbnNfb3BzXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExMzctXFx0XFx0ICovXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExMzg6XFx0XFx0KHZ0LVxcdTAwM2VzaXplIC0gc2l6ZW9mKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSkpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTM5LVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNjktZXJyb3V0X2ZyZWU6XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExNzA6XFx0X19icGZfc3RydWN0X29wc19tYXBfZnJlZShtYXApO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTcxLWVycm91dDpcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTc2LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTc3OnN0YXRpYyB1NjQgYnBmX3N0cnVjdF9vcHNfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTc4LXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE3OTpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE4MDpcXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MgPSBzdF9tYXAtXFx1MDAzZXN0X29wc19kZXNjO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTgxLVxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdnQgPSBzdF9vcHNfZGVzYy1cXHUwMDNldmFsdWVfdHlwZTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTg0LVxcdHVzYWdlID0gc2l6ZW9mKCpzdF9tYXApICtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE4NTpcXHRcXHRcXHR2dC1cXHUwMDNlc2l6ZSAtIHNpemVvZihzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTg2LVxcdHVzYWdlICs9IHZ0LVxcdTAwM2VzaXplO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExOTItXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTM6QlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9zdHJ1Y3Rfb3BzX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9zdHJ1Y3Rfb3BzX21hcClcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE5NDpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYnBmX3N0cnVjdF9vcHNfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE5NTpcXHQubWFwX2FsbG9jX2NoZWNrID0gYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jX2NoZWNrLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTk2OlxcdC5tYXBfYWxsb2MgPSBicGZfc3RydWN0X29wc19tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTc6XFx0Lm1hcF9mcmVlID0gYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTg6XFx0Lm1hcF9nZXRfbmV4dF9rZXkgPSBicGZfc3RydWN0X29wc19tYXBfZ2V0X25leHRfa2V5LFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTk5OlxcdC5tYXBfbG9va3VwX2VsZW0gPSBicGZfc3RydWN0X29wc19tYXBfbG9va3VwX2VsZW0sXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMDA6XFx0Lm1hcF9kZWxldGVfZWxlbSA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIwMTpcXHQubWFwX3VwZGF0ZV9lbGVtID0gYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjAyOlxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9zZXFfc2hvd19lbGVtLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjAzOlxcdC5tYXBfbWVtX3VzYWdlID0gYnBmX3N0cnVjdF9vcHNfbWFwX21lbV91c2FnZSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIwNDpcXHQubWFwX2J0Zl9pZCA9IFxcdTAwMjZicGZfc3RydWN0X29wc19tYXBfYnRmX2lkc1swXSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIwNS19O1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMDktICovXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMTA6Ym9vbCBicGZfc3RydWN0X29wc19nZXQoY29uc3Qgdm9pZCAqa2RhdGEpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMTEte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjEyOlxcdHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqa3ZhbHVlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjEzOlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIxNC1cXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjE1LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjE2OlxcdGt2YWx1ZSA9IGNvbnRhaW5lcl9vZihrZGF0YSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlLCBkYXRhKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIxNzpcXHRzdF9tYXAgPSBjb250YWluZXJfb2Yoa3ZhbHVlLCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwLCBrdmFsdWUpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjE4LVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMjEtfVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjIyOkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9zdHJ1Y3Rfb3BzX2dldCk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMjMtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMjQ6dm9pZCBicGZfc3RydWN0X29wc19wdXQoY29uc3Qgdm9pZCAqa2RhdGEpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMjUte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjI2OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqa3ZhbHVlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjI3OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIyOC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIyOTpcXHRrdmFsdWUgPSBjb250YWluZXJfb2Yoa2RhdGEsIHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSwgZGF0YSk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMzA6XFx0c3RfbWFwID0gY29udGFpbmVyX29mKGt2YWx1ZSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCwga3ZhbHVlKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIzMS1cXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjMzLX1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIzNDpFWFBPUlRfU1lNQk9MX0dQTChicGZfc3RydWN0X29wc19wdXQpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjM1LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjM2OnUzMiBicGZfc3RydWN0X29wc19pZChjb25zdCB2b2lkICprZGF0YSlcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIzNy17XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMzg6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICprdmFsdWU7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMzk6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjQwLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjQxOlxcdGt2YWx1ZSA9IGNvbnRhaW5lcl9vZihrZGF0YSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlLCBkYXRhKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI0MjpcXHRzdF9tYXAgPSBjb250YWluZXJfb2Yoa3ZhbHVlLCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwLCBrdmFsdWUpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjQzLVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyNDUtfVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjQ2OkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9zdHJ1Y3Rfb3BzX2lkKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI0Ny1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI0OC0vKipcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI0OTogKiBicGZfc3RydWN0X29wc19mb3JfZWFjaF9wcm9nIC0gSW52b2tlIEBjYiBmb3IgZWFjaCBtZW1iZXIgcHJvZ1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjUwLSAqIEBrZGF0YToga2VybmVsLXNpZGUgc3RydWN0X29wcyB2bXRhYmxlICh0aGUgQGtkYXRhIGFyZyB0byAtXFx1MDAzZXJlZy8tXFx1MDAzZXVwZGF0ZS8tXFx1MDAzZXVucmVnKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyNjAtICovXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyNjE6aW50IGJwZl9zdHJ1Y3Rfb3BzX2Zvcl9lYWNoX3Byb2coY29uc3Qgdm9pZCAqa2RhdGEsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyNjItXFx0XFx0XFx0XFx0IGludCAoKmNiKShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHZvaWQgKmRhdGEpLFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyNjQte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjY1OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqa3ZhbHVlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjY2OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI2Ny1cXHR1MzIgaTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjY5LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjcwOlxcdGt2YWx1ZSA9IGNvbnRhaW5lcl9vZihrZGF0YSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlLCBkYXRhKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI3MTpcXHRzdF9tYXAgPSBjb250YWluZXJfb2Yoa3ZhbHVlLCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwLCBrdmFsdWUpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjcyLVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyODEtfVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjgyOkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9zdHJ1Y3Rfb3BzX2Zvcl9lYWNoX3Byb2cpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjgzLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjg0OnN0YXRpYyBib29sIGJwZl9zdHJ1Y3Rfb3BzX3ZhbGlkX3RvX3JlZyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjg1LXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI4NjpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI4Ny1cXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjkzLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjk0OnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjk1LXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI5NjpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbGluayAqc3RfbGluaztcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI5NzpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyOTgtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyOTk6XFx0c3RfbGluayA9IGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbGluaywgbGluayk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEzMDA6XFx0c3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKilcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMwMS1cXHRcXHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHN0X2xpbmstXFx1MDAzZW1hcCwgdHJ1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMwOC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMwOTpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfbGlua19zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMTAtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzExLXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMxMjpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbGluayAqc3RfbGluaztcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMxMy1cXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzE0LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzE1OlxcdHN0X2xpbmsgPSBjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmssIGxpbmspO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzE2LVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzIyLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzIzOnN0YXRpYyBpbnQgYnBmX3N0cnVjdF9vcHNfbWFwX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzI0LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMyNS17XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEzMjY6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmsgKnN0X2xpbms7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMjctXFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMyOC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMyOTpcXHRzdF9saW5rID0gY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rLCBsaW5rKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMzMC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMzNy1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMzODpzdGF0aWMgaW50IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfbWFwICpuZXdfbWFwLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzM5LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9tYXAgKmV4cGVjdGVkX29sZF9tYXApXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzNDAte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzQxOlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcCwgKm9sZF9zdF9tYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzNDItXFx0c3RydWN0IGJwZl9tYXAgKm9sZF9tYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEzNDM6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmsgKnN0X2xpbms7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzNDQtXFx0aW50IGVycjtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM0NS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM0NjpcXHRzdF9saW5rID0gY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rLCBsaW5rKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM0NzpcXHRzdF9tYXAgPSBjb250YWluZXJfb2YobmV3X21hcCwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCwgbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM0OC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM0OTpcXHRpZiAoIWJwZl9zdHJ1Y3Rfb3BzX3ZhbGlkX3RvX3JlZyhuZXdfbWFwKSlcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM1MC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzY2LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzY3OlxcdG9sZF9zdF9tYXAgPSBjb250YWluZXJfb2Yob2xkX21hcCwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCwgbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM2OC1cXHQvKiBUaGUgbmV3IGFuZCBvbGQgc3RydWN0X29wcyBtdXN0IGJlIHRoZSBzYW1lIHR5cGUuICovXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM4Ny1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM4ODpzdGF0aWMgaW50IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX2RldGFjaChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzODkte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzkwOlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rICpzdF9saW5rID0gY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rLCBsaW5rKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM5MTpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzOTItXFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDAwLVxcdH1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQwMTpcXHRzdF9tYXAgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwLCBtYXApO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDAyLVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MDUtXFx0UkNVX0lOSVRfUE9JTlRFUihzdF9saW5rLVxcdTAwM2VtYXAsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDA2OlxcdC8qIFBhaXIgd2l0aCBicGZfbWFwX2dldCgpIGluIGJwZl9zdHJ1Y3Rfb3BzX2xpbmtfY3JlYXRlKCkgb3JcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQwNzpcXHQgKiBicGZfbWFwX2luYygpIGluIGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3VwZGF0ZSgpLlxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDA4LVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MTctXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MTg6c3RhdGljIF9fcG9sbF90IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MTktXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0cylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQyMC17XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MjE6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmsgKnN0X2xpbmsgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MjItXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQyNy1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQyODpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfc3RydWN0X29wc19tYXBfbG9wcyA9IHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQyOTpcXHQuZGVhbGxvYyA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX2RlYWxsb2MsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MzA6XFx0LmRldGFjaCA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX2RldGFjaCxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzMTpcXHQuc2hvd19mZGluZm8gPSBicGZfc3RydWN0X29wc19tYXBfbGlua19zaG93X2ZkaW5mbyxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzMjpcXHQuZmlsbF9saW5rX2luZm8gPSBicGZfc3RydWN0X29wc19tYXBfbGlua19maWxsX2xpbmtfaW5mbyxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzMzpcXHQudXBkYXRlX21hcCA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3VwZGF0ZSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzNDpcXHQucG9sbCA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3BvbGwsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MzUtfTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQzNi1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzNzppbnQgYnBmX3N0cnVjdF9vcHNfbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0Mzgte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDM5OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rICpsaW5rID0gTlVMTDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ0MC1cXHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDQxOlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ0Mi1cXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0NDgtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0NDk6XFx0c3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0NTAtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0NTE6XFx0aWYgKCFicGZfc3RydWN0X29wc192YWxpZF90b19yZWcobWFwKSkge1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDUyLVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ2MC1cXHR9XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0NjE6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bGluay1cXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2YnBmX3N0cnVjdF9vcHNfbWFwX2xvcHMsIE5VTEwsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0NjItXFx0XFx0ICAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTE1NDk9dm9pZCAqYnBmX3Byb2dfZ2V0X2Fzc29jX3N0cnVjdF9vcHMoY29uc3Qgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTUwLXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTU1MTpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXA7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMyOjI1LjE1Mzc4MjI2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDE2MDQ1MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGhhdmUgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgbW9kdWxlcyBlbmFibGVkLiBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBUQ1BfQ09OR19CQlJgIGlzIGVuYWJsZWQsIGFzIGl0IHByb3ZpZGVzIHRoZSBCQlIgVENQIGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGUsIHdoaWNoIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBpbXBsZW1lbnRzIGB0c29fc2Vnc2AuIFRoZW4sIEknbGwgZG91YmxlLWNoZWNrIHRoYXQgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGFyZSBhbHNvIGVuYWJsZWQ7IHRoZXNlIGFyZSBlc3NlbnRpYWwgYmVjYXVzZSB0aGV5J3JlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gYGJwZl90Y3BfY2EuY2AgYW5kIEJQRiBUQ1AgY29uZ2VzdGlvbiBvcGVyYXRpb25zLiBPZiBjb3Vyc2UsIGBORVRgIGFuZCBgSU5FVGAgYXJlIG91ciBiYXNlIG5ldHdvcmtpbmcgcHJlcmVxdWlzaXRlcywgc28gSSBhc3N1bWUgdGhvc2UgYXJlIGFscmVhZHkgaW4gcGxhY2UsIGJ1dCBJIHdpbGwgY2hlY2sgdG8gYmUgY2VydGFpbi5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIHN5bWJvbHMgb3IgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIFRoZSBrZXkgc3ltYm9sIEknbSBmb2N1c2luZyBvbiByaWdodCBub3cgaXMgYHRjcF90c29fYXV0b3NpemVgLlxuXG5OZXh0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSByZXZpZXcgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbC4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHByZWNpc2UgaGVyZS4gYFdvcnRoRnV6emluZ2AgbXVzdCBiZSBzZXQgdG8gYHRydWVgLCBhcyB0aGUgcGF0Y2ggaXMgZ29pbmcgdG8gbW9kaWZ5IFRDUCBUU08gYXV0b3NpemluZyBsb2dpYyBhbmQgY29uZ2VzdGlvbiBjb250cm9sIG9wZXJhdGlvbnMsIG5vdGFibHkgcmVwbGFjaW5nIGBtaW5fdHNvX3NlZ3NgIHdpdGggYHRzb19zZWdzYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBCQlIgYW5kIEJQRiBUQ1AgQ0EgY2FsbGJhY2tzLCB3aGljaCBpcyBzaWduaWZpY2FudC4gRnVydGhlcm1vcmUsIHRoZSBwYXRjaCBleHBvcnRzIGB0Y3BfdHNvX2F1dG9zaXplYCBhcyBhIEJQRiBrZnVuYy4gQWxsIG9mIHRoaXMgZGlyZWN0bHkgaW1wYWN0cyBUQ1AgcGFja2V0IHNlZ21lbnRhdGlvbiBhbmQgaG93IHRoZXNlIHBhY2tldHMgYXJlIHRyYW5zbWl0dGVkIHdpdGhpbiBjb3JlIG5ldHdvcmtpbmcuIFRoZSBgUmVhc29uaW5nYCBzaG91bGQgbWFrZSB0aGlzIHZlcnkgY2xlYXIsIHNvIEknbGwgd3JpdGUgYSBkZXRhaWxlZCBleHBsYW5hdGlvbi5cblxuRm9yIGBGb2N1c1N5bWJvbHNgLCBJIHdpbGwgdXNlIGBbXCJ0Y3BfdHNvX2F1dG9zaXplXCJdYC4gQW5kIGZvciBgRW5hYmxlQ29uZmlnc2AsIEknbGwgaW5jbHVkZSB0aGUgZm9sbG93aW5nOiBgW1wiVENQX0NPTkdfQkJSXCIsIFwiQlBGX1NZU0NBTExcIiwgXCJCUEZfSklUXCIsIFwiSU5FVFwiXWAuXG5cbkZpbmFsbHksIEknbGwgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb2YgZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbC4gUHJlY2lzaW9uIGlzIHBhcmFtb3VudCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg1MSwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6MjkuMTY5ODMwMjMxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2NzI5MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRDUF9DT05HX0JCUlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfdHNvX2F1dG9zaXplXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBpbnRlcmZhY2UgYnkgcmVwbGFjaW5nIHRoZSBtaW5fdHNvX3NlZ3MgY2FsbGJhY2sgd2l0aCBhIHRzb19zZWdzIGNhbGxiYWNrLCB1cGRhdGluZyBUQ1Agb3V0cHV0IGxvZ2ljICh0Y3BfdHNvX2F1dG9zaXplLCB0Y3BfdHNvX3NlZ3MpLCBCQlIgY29uZ2VzdGlvbiBjb250cm9sLCBhbmQgQlBGIFRDUCBDQSBzdHJ1Y3Rfb3BzLiB0Y3BfdHNvX2F1dG9zaXplIGlzIGFsc28gZXhwb3NlZCBhcyBhIEJQRiBrZnVuYy4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFsdGVyIHRoZSBUQ1Agc2VnbWVudGF0aW9uIGFuZCBwYWNrZXQgc2NoZWR1bGluZyBwYXRoIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUQ1BfQ09OR19CQlJcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3Rzb19hdXRvc2l6ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgaW50ZXJmYWNlIGJ5IHJlcGxhY2luZyB0aGUgbWluX3Rzb19zZWdzIGNhbGxiYWNrIHdpdGggYSB0c29fc2VncyBjYWxsYmFjaywgdXBkYXRpbmcgVENQIG91dHB1dCBsb2dpYyAodGNwX3Rzb19hdXRvc2l6ZSwgdGNwX3Rzb19zZWdzKSwgQkJSIGNvbmdlc3Rpb24gY29udHJvbCwgYW5kIEJQRiBUQ1AgQ0Egc3RydWN0X29wcy4gdGNwX3Rzb19hdXRvc2l6ZSBpcyBhbHNvIGV4cG9zZWQgYXMgYSBCUEYga2Z1bmMuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbHRlciB0aGUgVENQIHNlZ21lbnRhdGlvbiBhbmQgcGFja2V0IHNjaGVkdWxpbmcgcGF0aCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMyOjI5LjI1MzUxMDg2NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk4OTQ1NzU0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjoyOS4yNTQwNzQ0ODRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyOTg5NDAwNzQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBpbnRlcmZhY2UgYnkgcmVwbGFjaW5nIHRoZSBgbWluX3Rzb19zZWdzYCBjYWxsYmFjayB3aXRoIGB0c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KWAsIHVwZGF0ZXMgQkJSIGFuZCBCUEYgY29uZ2VzdGlvbiBjb250cm9sIGhvb2tzLCBhbmQgZXhwb3J0cyBgdGNwX3Rzb19hdXRvc2l6ZWAgYXMgYSBCUEYga2Z1bmMuXFxuXFxuQWxsIG1vZGlmaWVkIGFuZCBhZGRlZCBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBzY2FsYXIgaW50ZWdlciB2YWx1ZXMgcGFzc2VkIGJ5IHZhbHVlIChgdTMyYCwgYHVuc2lnbmVkIGludGAsIHBvaW50ZXJzIHRvIGZ1bGx5IGluaXRpYWxpemVkIHN0cnVjdCBgc29ja2ApLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIHN0cnVjdHVyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXItc3BhY2UgKHN1Y2ggYXMgYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgb3IgaW9jdGwgcmV0dXJucykgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0N2ZlZWMyNGFlMjEwNDRjZjdjZGEyZjY2ZjZmYjM3NDU0YjU1MzdiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMTozMTo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmhcbmluZGV4IDY3MGMyMDg3NmYyNjUuLjc5ZjI3YWM5ZTk2M2EgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxuKysrIGIvaW5jbHVkZS9uZXQvdGNwLmhcbkBAIC04MjQsNiArODI0LDkgQEAgdW5zaWduZWQgaW50IHRjcF9zeW5jX21zcyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwbXR1KTtcbiB1bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzayk7XG4gdTMyIHRjcF9jbGFtcF9wcm9iZTBfdG9fdXNlcl90aW1lb3V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdTMyIHdoZW4pO1xuIFxuK3UzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4rXHRcdCAgICAgaW50IG1pbl90c29fc2Vncyk7XG4rXG4gLyogQm91bmQgTVNTIC8gVFNPIHBhY2tldCBzaXplIHdpdGggdGhlIGhhbGYgb2YgdGhlIHdpbmRvdyAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHRjcF9ib3VuZF90b19oYWxmX3duZChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgcGt0c2l6ZSlcbiB7XG5AQCAtMTM2MSw4ICsxMzY0LDE2IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMge1xuIFx0LyogaG9vayBmb3IgcGFja2V0IGFjayBhY2NvdW50aW5nIChvcHRpb25hbCkgKi9cbiBcdHZvaWQgKCpwa3RzX2Fja2VkKShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wbGUpO1xuIFxuLVx0Lyogb3ZlcnJpZGUgc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgKG9wdGlvbmFsKSAqL1xuLVx0dTMyICgqbWluX3Rzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2spO1xuK1x0LyogT3ZlcnJpZGUgdGNwX3Rzb19hdXRvc2l6ZSgpIChvcHRpb25hbClcbitcdCAqXG4rXHQgKiBJZiBwcm92aWRlZCwgdGhpcyBjYWxsYmFjayBzdXBwbGllcyB0aGUgVFNPIHNlZ21lbnQgdGFyZ2V0IGNvdW50XG4rXHQgKiBpbnN0ZWFkIG9mIHVzaW5nIHRjcF90c29fYXV0b3NpemUoKS4gVGhlIHJldHVybmVkIHZhbHVlIGlzXG4rXHQgKiBzdWJzZXF1ZW50bHkgY2xhbXBlZCB0byBbMSwgc2stXHUwMDNlc2tfZ3NvX21heF9zZWdzXSBieSB0aGUgY2FsbGVyLlxuK1x0ICpcbitcdCAqIEZvciB0aGUga2VybmVsIGNhbGxiYWNrIHBhdGgsIG1zc19ub3cgb3JpZ2luYXRlcyBmcm9tXG4rXHQgKiB0Y3BfY3VycmVudF9tc3MoKSBhbmQgc2hvdWxkIG5ldmVyIGJlIHplcm8uXG4rXHQgKi9cbitcdHUzMiAoKnRzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KTtcbiBcbiBcdC8qIG5ldyB2YWx1ZSBvZiBjd25kIGFmdGVyIGxvc3MgKHJlcXVpcmVkKSAqL1xuIFx0dTMyICAoKnVuZG9fY3duZCkoc3RydWN0IHNvY2sgKnNrKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9icGZfdGNwX2NhLmMgYi9uZXQvaXB2NC9icGZfdGNwX2NhLmNcbmluZGV4IDc5MWUxNTA2MzIzN2MuLjlkZWVkMjI0NGMyZGUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9icGZfdGNwX2NhLmNcbisrKyBiL25ldC9pcHY0L2JwZl90Y3BfY2EuY1xuQEAgLTE5NCw2ICsxOTQsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Jlbm9fY29uZ19hdm9pZClcbiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Jlbm9fdW5kb19jd25kKVxuIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3Bfc2xvd19zdGFydClcbiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX2NvbmdfYXZvaWRfYWkpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF90c29fYXV0b3NpemUpXG4gQlRGX0tGVU5DU19FTkQoYnBmX3RjcF9jYV9jaGVja19rZnVuY19pZHMpXG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl90Y3BfY2Ffa2Z1bmNfc2V0ID0ge1xuQEAgLTI4NCw3ICsyODUsNyBAQCBzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3BrdHNfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcFxuIHtcbiB9XG4gXG4tc3RhdGljIHUzMiBicGZfdGNwX2NhX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spXG4rc3RhdGljIHUzMiBicGZfdGNwX2NhX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMyMCw3ICszMjEsNyBAQCBzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBfX2JwZl9vcHNfdGNwX2Nvbmdlc3Rpb25fb3BzID0ge1xuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnQgPSBicGZfdGNwX2NhX2N3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuaW5fYWNrX2V2ZW50ID0gYnBmX3RjcF9jYV9pbl9hY2tfZXZlbnQsXG4gXHQucGt0c19hY2tlZCA9IGJwZl90Y3BfY2FfcGt0c19hY2tlZCxcbi1cdC5taW5fdHNvX3NlZ3MgPSBicGZfdGNwX2NhX21pbl90c29fc2VncyxcbitcdC50c29fc2VncyA9IGJwZl90Y3BfY2FfdHNvX3NlZ3MsXG4gXHQuY29uZ19jb250cm9sID0gYnBmX3RjcF9jYV9jb25nX2NvbnRyb2wsXG4gXHQudW5kb19jd25kID0gYnBmX3RjcF9jYV91bmRvX2N3bmQsXG4gXHQuc25kYnVmX2V4cGFuZCA9IGJwZl90Y3BfY2Ffc25kYnVmX2V4cGFuZCxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYmJyLmMgYi9uZXQvaXB2NC90Y3BfYmJyLmNcbmluZGV4IDgyMzc4YTJiZmQxZTEuLmVjZjExYmU0NmYzODIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYmJyLmNcbisrKyBiL25ldC9pcHY0L3RjcF9iYnIuY1xuQEAgLTI5NywxMSArMjk3LDE4IEBAIHN0YXRpYyB2b2lkIGJicl9zZXRfcGFjaW5nX3JhdGUoc3RydWN0IHNvY2sgKnNrLCB1MzIgYncsIGludCBnYWluKVxuIH1cbiBcbiAvKiBvdmVycmlkZSBzeXNjdGxfdGNwX21pbl90c29fc2VncyAqL1xuLV9fYnBmX2tmdW5jIHN0YXRpYyB1MzIgYmJyX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spXG4rc3RhdGljIHUzMiBiYnJfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3BhY2luZ19yYXRlKSBcdTAwM2MgKGJicl9taW5fdHNvX3JhdGUgXHUwMDNlXHUwMDNlIDMpID8gMSA6IDI7XG4gfVxuIFxuK19fYnBmX2tmdW5jIHN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXG4re1xuK1x0aWYgKHVubGlrZWx5KCFtc3Nfbm93KSlcbitcdFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xuK1x0cmV0dXJuIHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIGJicl9taW5fdHNvX3NlZ3Moc2spKTtcbit9XG4rXG4gc3RhdGljIHUzMiBiYnJfdHNvX3NlZ3NfZ29hbChzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG5AQCAtMTE1MSw3ICsxMTU4LDcgQEAgc3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2Jicl9jb25nX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuIFx0LnVuZG9fY3duZFx0PSBiYnJfdW5kb19jd25kLFxuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnRcdD0gYmJyX2N3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuc3N0aHJlc2hcdD0gYmJyX3NzdGhyZXNoLFxuLVx0Lm1pbl90c29fc2Vnc1x0PSBiYnJfbWluX3Rzb19zZWdzLFxuK1x0LnRzb19zZWdzXHQ9IGJicl90c29fc2VncyxcbiBcdC5nZXRfaW5mb1x0PSBiYnJfZ2V0X2luZm8sXG4gXHQuc2V0X3N0YXRlXHQ9IGJicl9zZXRfc3RhdGUsXG4gfTtcbkBAIC0xMTYzLDcgKzExNzAsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NuZGJ1Zl9leHBhbmQpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl91bmRvX2N3bmQpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9jd25kX2V2ZW50X3R4X3N0YXJ0KVxuIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfc3N0aHJlc2gpXG4tQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9taW5fdHNvX3NlZ3MpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl90c29fc2VncylcbiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NldF9zdGF0ZSlcbiBCVEZfS0ZVTkNTX0VORCh0Y3BfYmJyX2NoZWNrX2tmdW5jX2lkcylcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbmluZGV4IDZmNGRjYTRhNGRlOTguLmI3ZjJlZTVlN2E2YjEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuQEAgLTIyNTIsMTMgKzIyNTIsMjEgQEAgc3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcbiAgKiBpbiBiaWdnZXIgVFNPIGJ1cnN0cy4gV2Ugd2UgY3V0IHRoZSBSVFQtYmFzZWQgYWxsb3dhbmNlIGluIGhhbGZcbiAgKiBmb3IgZXZlcnkgMl45IHVzZWMgKGFrYSA1MTIgdXMpIG9mIFJUVCwgc28gdGhhdCB0aGUgUlRULWJhc2VkIGFsbG93YW5jZVxuICAqIGlzIGJlbG93IDE1MDAgYnl0ZXMgYWZ0ZXIgNiAqIH41MDAgdXNlYyA9IDNtcy5cbisgKlxuKyAqIFRoZSBtaW5fdHNvX3NlZ3MgaXMgZmxvb3JlZCB0byAxIHRvIGF2b2lkIHN1cnByaXNpbmcgY29udmVyc2lvbi4gQWxzbyxcbisgKiBCUEYgY2FsbGVycyBtYXkgcGFzcyBtc3Nfbm93ID09IDAuIEluIHRoYXQgY2FzZSB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGVcbisgKiBzYW5pdGl6ZWQgbWluX3Rzb19zZWdzIHZhbHVlIGFuZCBza2lwcyBhdXRvc2l6aW5nLlxuICAqL1xuLXN0YXRpYyB1MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LFxuLVx0XHRcdCAgICBpbnQgbWluX3Rzb19zZWdzKVxuK19fYnBmX2tmdW5jIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4rXHRcdFx0XHQgaW50IG1pbl90c29fc2VncylcbiB7XG4rXHR1MzIgbWluX3RzbyA9IG1heChtaW5fdHNvX3NlZ3MsIDEpO1xuIFx0dW5zaWduZWQgbG9uZyBieXRlcztcbiBcdHUzMiByO1xuIFxuK1x0aWYgKHVubGlrZWx5KCFtc3Nfbm93KSlcbitcdFx0cmV0dXJuIG1pbl90c287XG4rXG4gXHRieXRlcyA9IFJFQURfT05DRShzay1cdTAwM2Vza19wYWNpbmdfcmF0ZSkgXHUwMDNlXHUwMDNlIFJFQURfT05DRShzay1cdTAwM2Vza19wYWNpbmdfc2hpZnQpO1xuIFxuIFx0ciA9IHRjcF9taW5fcnR0KHRjcF9zayhzaykpIFx1MDAzZVx1MDAzZSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF90c29fcnR0X2xvZyk7XG5AQCAtMjI2Nyw4ICsyMjc1LDkgQEAgc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4gXG4gXHRieXRlcyA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGJ5dGVzLCBzay1cdTAwM2Vza19nc29fbWF4X3NpemUpO1xuIFxuLVx0cmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvX3NlZ3MpO1xuK1x0cmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvKTtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwodGNwX3Rzb19hdXRvc2l6ZSk7XG4gXG4gLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMgd2Ugd2FudCBpbiB0aGUgc2tiIHdlIGFyZSB0cmFuc21pdHRpbmcuXG4gICogU2VlIGlmIGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGUgd2FudHMgdG8gZGVjaWRlOyBvdGhlcndpc2UsIGF1dG9zaXplLlxuQEAgLTIyNzYsMTQgKzIyODUsMTMgQEAgc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4gc3RhdGljIHUzMiB0Y3BfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYV9vcHMgPSBpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHM7XG4tXHR1MzIgbWluX3RzbywgdHNvX3NlZ3M7XG4tXG4tXHRtaW5fdHNvID0gY2Ffb3BzLVx1MDAzZW1pbl90c29fc2VncyA/XG4tXHRcdFx0Y2Ffb3BzLVx1MDAzZW1pbl90c29fc2VncyhzaykgOlxuLVx0XHRcdFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2Vncyk7XG4rXHR1MzIgdHNvX3NlZ3M7XG4gXG4tXHR0c29fc2VncyA9IHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIG1pbl90c28pO1xuLVx0cmV0dXJuIG1pbl90KHUzMiwgdHNvX3NlZ3MsIHNrLVx1MDAzZXNrX2dzb19tYXhfc2Vncyk7XG4rXHR0c29fc2VncyA9IGNhX29wcy1cdTAwM2V0c29fc2VncyA/XG4rXHRcdFx0Y2Ffb3BzLVx1MDAzZXRzb19zZWdzKHNrLCBtc3Nfbm93KSA6XG4rXHRcdFx0dGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdyxcbitcdFx0XHRcdFx0IFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2VncykpO1xuK1x0cmV0dXJuIGNsYW1wX3QodTMyLCB0c29fc2VncywgMSwgc2stXHUwMDNlc2tfZ3NvX21heF9zZWdzKTtcbiB9XG4gXG4gLyogUmV0dXJucyB0aGUgcG9ydGlvbiBvZiBza2Igd2hpY2ggY2FuIGJlIHNlbnQgcmlnaHQgYXdheSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuY1xuaW5kZXggMGEzZTlkMzViZjZmMC4uNTgyNjJlNDkwMzM2NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jXG5AQCAtMTAsNyArMTAsNyBAQCBleHRlcm4gdTMyIGJicl9zbmRidWZfZXhwYW5kKHN0cnVjdCBzb2NrICpzaykgX19rc3ltO1xuIGV4dGVybiB1MzIgYmJyX3VuZG9fY3duZChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBiYnJfY3duZF9ldmVudF90eF9zdGFydChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbiBleHRlcm4gdTMyIGJicl9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbi1leHRlcm4gdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07XG4rZXh0ZXJuIHUzMiBiYnJfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdykgX19rc3ltO1xuIGV4dGVybiB2b2lkIGJicl9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCB1OCBuZXdfc3RhdGUpIF9fa3N5bTtcbiBcbiBleHRlcm4gdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaykgX19rc3ltO1xuQEAgLTkwLDkgKzkwLDkgQEAgdTMyIEJQRl9QUk9HKHNzdGhyZXNoLCBzdHJ1Y3Qgc29jayAqc2spXG4gfVxuIFxuIFNFQyhcInN0cnVjdF9vcHNcIilcbi11MzIgQlBGX1BST0cobWluX3Rzb19zZWdzLCBzdHJ1Y3Qgc29jayAqc2spXG4rdTMyIEJQRl9QUk9HKHRzb19zZWdzLCBzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KVxuIHtcbi1cdHJldHVybiBiYnJfbWluX3Rzb19zZWdzKHNrKTtcbitcdHJldHVybiBiYnJfdHNvX3NlZ3Moc2ssIG1zc19ub3cpO1xuIH1cbiBcbiBTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG5AQCAtMTIwLDcgKzEyMCw3IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2NhX2tmdW5jID0ge1xuIFx0LmN3bmRfZXZlbnRcdD0gKHZvaWQgKiljd25kX2V2ZW50LFxuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnQgPSAodm9pZCAqKWN3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuc3N0aHJlc2hcdD0gKHZvaWQgKilzc3RocmVzaCxcbi1cdC5taW5fdHNvX3NlZ3NcdD0gKHZvaWQgKiltaW5fdHNvX3NlZ3MsXG4rXHQudHNvX3NlZ3NcdD0gKHZvaWQgKil0c29fc2VncyxcbiBcdC5zZXRfc3RhdGVcdD0gKHZvaWQgKilzZXRfc3RhdGUsXG4gXHQucGt0c19hY2tlZCAgICAgPSAodm9pZCAqKXBrdHNfYWNrZWQsXG4gXHQubmFtZVx0XHQ9IFwidGNwX2NhX2tmdW5jXCIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjoyOS4yNTQwNzU0MzVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI4MDczOTU0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byB0aHJvdyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gYXQgaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgcHJvYmFibHkgb2theSwgYnV0IHdlIHNob3VsZCBhbHdheXMgYmUgdGhvcm91Z2guXG5cbkZpcnN0LCB0aGUgcGF0Y2ggaXRzZWxmIHJlZmFjdG9ycyB0aGUgYG1pbl90c29fc2Vnc2AgaG9vayB3aXRoaW4gdGhlIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgb3BzLiBTcGVjaWZpY2FsbHksIGl0J3MgY2hhbmdpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBmcm9tIGB1MzIgKCptaW5fdHNvX3NlZ3MpKHN0cnVjdCBzb2NrICpzaylgIHRvIGB1MzIgKCp0c29fc2Vncykoc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdylgLiBCYXNpY2FsbHksIHRoZXkncmUgYWRkaW5nIGBtc3Nfbm93YCB0byB0aGUgcGFyYW1ldGVycy4gTG9va2luZyBhdCB0aGUgaW5jbHVkZWQgZmlsZXMsIGl0IGxvb2tzIGxpa2UgdGhleSdyZSB1cGRhdGluZyB0aGUgZGVmaW5pdGlvbnMsIHRoZSBCUEYga2Z1bmMgY2hlY2tzLCBhbmQgdGhlIHNlbGZ0ZXN0IHRvIG1hdGNoIHRoaXMgbmV3IHNpZ25hdHVyZS4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGBiYnJfbWluX3Rzb19zZWdzYCBpcyBnZXR0aW5nIHVwZGF0ZWQgYWNjb3JkaW5nbHkuIFdlIGFsc28gaGF2ZSBgdGNwX3Rzb19hdXRvc2l6ZWAsIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBpbiB0aGlzIHdob2xlIHByb2Nlc3MuXG5cbk5vdyBmb3IgdGhlIEtNU0FOIHJpc2tzLi4uIExldCdzIHNlZS5cblxuKiAgICoqTWVtb3J5IEFsbG9jYXRpb25zOioqIFRoaXMgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB3aGljaCBpcyBnb29kLlxuKiAgICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogSSdtIG5vdCBzZWVpbmcgYW55IHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIHRoYXQgYXJlbid0IHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGUgYG1zc19ub3dgIGlzIHBhc3NlZCBhcyBhIHZhbHVlLCBzbyB0aGF0IHNob3VsZCBiZSBzYWZlLlxuKiAgICoqVXNlcnNwYWNlIEV4cG9zdXJlOioqIFRoZSBgdGNwX2Nvbmdlc3Rpb25fb3BzYCBzdHJ1Y3QgaXMga2VybmVsLWludGVybmFsIGFuZCBhbHNvIGEgQlBGIHN0cnVjdF9vcHMsIHNvIHRoYXQncyBub3QgYSBjb25jZXJuLlxuKiAgICoqQnVmZmVyIE9wZXJhdGlvbnM6KiogTm8gbW9kaWZpY2F0aW9ucyB0byBidWZmZXJzLCBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBza2JzLCBvciBzb2NrZXQgb3B0aW9ucywgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuXG4qICAgKipCb3VuZHMgQ2hlY2tpbmcvRGF0YSBMZW5ndGhzOioqIEl0J3MgY2FsY3VsYXRpbmcgVFNPIHNlZ21lbnQgY291bnRzIGZvciBwYWNrZXQgc2VnbWVudGF0aW9uLiBUaGlzIGlzIHVzdWFsbHkgd2hlcmUgd2UgZmluZCBpc3N1ZXMsIGJ1dCBpdCBhcHBlYXJzIHNhZmUgaGVyZS5cbiogICAqKkJyYW5jaGluZzoqKiBObyBicmFuY2hpbmcgc2VlbXMgdG8gYmUgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG5cblNvIGZhciwgaXQgbG9va3MgY2xlYW4uIEJ1dCBqdXN0IHRvIGJlIGV4dHJhIHN1cmUsIEknbSBnb2luZyB0byBydW4gYGdyZXBwZXJgIGFuZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGFueSB1c2FnZSBvZiB0aGVzZSBob29rcyB0aGF0IGNvdWxkIGJlIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlLCBlc3BlY2lhbGx5IHdpdGggb3RoZXIgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZXMuIEkgd2FudCB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBpcyB1c2luZyBlaXRoZXIgYG1pbl90c29fc2Vnc2Agb3IgYHRzb19zZWdzYCwganVzdCB0byB2ZXJpZnkgdGhhdC4gQWxsIGluIGFsbCwgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGlzIGEgcmVsYXRpdmVseSBzYWZlIHBhdGNoIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZSwgYnV0IHZlcmlmeWluZyB0aGlzIHdpdGggdGhlIGdyZXBwZXIgc2VhcmNoIGlzIHRoZSBjb3JyZWN0IGZpbmFsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjo0Mi4wNjE0NzM0NzRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzI3ODA4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWluX3Rzb19zZWdzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0PTEwODc9dGNwX3RpbWVzdGFtcHMgLSBJTlRFR0VSXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdC0xMDk2LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0OjEwOTc6dGNwX21pbl90c29fc2VncyAtIElOVEVHRVJcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdC0xMDk4LVxcdE1pbmltYWwgbnVtYmVyIG9mIHNlZ21lbnRzIHBlciBUU08gZnJhbWUuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0bnNfaXB2NF9zeXNjdGwucnN0PTExND1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2N0bF90Y3BfbWluX3J0dF93bGVuICAgICAgICAgICAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfYWNrX3VwZGF0ZV9ydC4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRuc19pcHY0X3N5c2N0bC5yc3Q6MTE1OnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubGlrZWx5KGljc2tfY2FfLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldG5zX2lwdjRfc3lzY3RsLnJzdC0xMTYtdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjdGxfdGNwX3Rzb19ydHRfbG9nICAgICAgICAgICAgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3Rzb19hdXRvc2l6ZVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oPTU1PXN0cnVjdCBuZXRuc19pcHY0IHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yMjUtXFx0aW50IHN5c2N0bF90Y3BfY2hhbGxlbmdlX2Fja19saW1pdDtcXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg6MjI2OlxcdHU4IHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzO1xcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yMjctXFx0dTggc3lzY3RsX3RjcF9yZWZsZWN0X3RvcztcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oPTgyNz11MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LFxcbmluY2x1ZGUvbmV0L3RjcC5oOjgyODpcXHRcXHQgICAgIGludCBtaW5fdHNvX3NlZ3MpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTgyOS1cXG4tLVxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jPTYyNz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xcbi0tXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtMTM5My1cXHR7XFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTM5NDpcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJ0Y3BfbWluX3Rzb19zZWdzXFxcIixcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxMzk1OlxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQuaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2VncyxcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMzk2LVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZih1OCksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYmJyLmM9Mjg3PXN0YXRpYyB2b2lkIGJicl9zZXRfcGFjaW5nX3JhdGUoc3RydWN0IHNvY2sgKnNrLCB1MzIgYncsIGludCBnYWluKVxcbi0tXFxubmV0L2lwdjQvdGNwX2Jici5jLTI5OC1cXG5uZXQvaXB2NC90Y3BfYmJyLmM6Mjk5Oi8qIG92ZXJyaWRlIHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzICovXFxubmV0L2lwdjQvdGNwX2Jici5jOjMwMDpzdGF0aWMgdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9iYnIuYy0zMDEte1xcbi0tXFxubmV0L2lwdjQvdGNwX2Jici5jPTMwNT1fX2JwZl9rZnVuYyBzdGF0aWMgdTMyIGJicl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KVxcbi0tXFxubmV0L2lwdjQvdGNwX2Jici5jLTMwNy1cXHRpZiAodW5saWtlbHkoIW1zc19ub3cpKVxcbm5ldC9pcHY0L3RjcF9iYnIuYzozMDg6XFx0XFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xcbm5ldC9pcHY0L3RjcF9iYnIuYzozMDk6XFx0cmV0dXJuIHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIGJicl9taW5fdHNvX3NlZ3Moc2spKTtcXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzEwLX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYz0zMTI9c3RhdGljIHUzMiBiYnJfdHNvX3NlZ3NfZ29hbChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzIyLVxcdFxcdCAgICAgIEdTT19MRUdBQ1lfTUFYX1NJWkUgLSAxIC0gTUFYX1RDUF9IRUFERVIpO1xcbm5ldC9pcHY0L3RjcF9iYnIuYzozMjM6XFx0c2VncyA9IG1heF90KHUzMiwgYnl0ZXMgLyB0cC1cXHUwMDNlbXNzX2NhY2hlLCBiYnJfbWluX3Rzb19zZWdzKHNrKSk7XFxubmV0L2lwdjQvdGNwX2Jici5jLTMyNC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzQzOD1zdGF0aWMgaW50IF9fbmV0X2luaXQgdGNwX3NrX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDk1LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzQ5NjpcXHRuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgPSAyO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzQ5Ny1cXHRuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF90c29fcnR0X2xvZyA9IDk7ICAvKiAyXjkgPSA1MTIgdXNlYyAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyMzQ9c3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjU1LSAqXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNTY6ICogVGhlIG1pbl90c29fc2VncyBpcyBmbG9vcmVkIHRvIDEgdG8gYXZvaWQgc3VycHJpc2luZyBjb252ZXJzaW9uLiBBbHNvLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjU3LSAqIEJQRiBjYWxsZXJzIG1heSBwYXNzIG1zc19ub3cgPT0gMC4gSW4gdGhhdCBjYXNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjU4OiAqIHNhbml0aXplZCBtaW5fdHNvX3NlZ3MgdmFsdWUgYW5kIHNraXBzIGF1dG9zaXppbmcuXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNTktICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyNjA9X19icGZfa2Z1bmMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI2MTpcXHRcXHRcXHRcXHQgaW50IG1pbl90c29fc2VncylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI2Mi17XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNjM6XFx0dTMyIG1pbl90c28gPSBtYXgobWluX3Rzb19zZWdzLCAxKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI2NC1cXHR1bnNpZ25lZCBsb25nIGJ5dGVzO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyODU9c3RhdGljIHUzMiB0Y3BfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjkyLVxcdFxcdFxcdHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyOTM6XFx0XFx0XFx0XFx0XFx0IFJFQURfT05DRShzb2NrX25ldChzayktXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MpKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI5NC1cXHRyZXR1cm4gY2xhbXBfdCh1MzIsIHRzb19zZWdzLCAxLCBzay1cXHUwMDNlc2tfZ3NvX21heF9zZWdzKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwX3R1bm5lbHMuc2g9MzI9c2V0dXAoKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoLTUyLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwX3R1bm5lbHMuc2g6NTM6XFx0REVGQVVMVF9UQ1BfTUlOX1RTT19TRUdTPSQoaXAgbmV0bnMgZXhlYyBcXFwiJENMSUVOVF9OU1xcXCIgc3lzY3RsIC1uIG5ldC5pcHY0LnRjcF9taW5fdHNvX3NlZ3MpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaC01NC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoPTExMT1kb190ZXN0KCkge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaC0xNDAtXFx0aWYgWyBcXFwiJDNcXFwiICE9ICdvbicgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkS1NGVF9NQUNISU5FX1NMT1dcXFwiID0geWVzIF07IHRoZW5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoOjE0MTpcXHRcXHRlY2hvICdTbG93IGNvbmZpZ3VyYXRpb247IGluY3JlYXNpbmcgbmV0LmlwdjQudGNwX21pbl90c29fc2VncyBhbmQgaW5pdGN3bmQnXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaDoxNDI6XFx0XFx0aXAgbmV0bnMgZXhlYyBcXFwiJENMSUVOVF9OU1xcXCIgc3lzY3RsIC13IG5ldC5pcHY0LnRjcF9taW5fdHNvX3NlZ3M9NTJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoLTE0My1cXHRcXHRpZiBbIFxcXCIkMlxcXCIgPSA0IF07IHRoZW5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwX3R1bm5lbHMuc2gtMTUxLVxcdFxcdGlwIG5ldG5zIGV4ZWMgXFxcIiRDTElFTlRfTlNcXFwiIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoOjE1MjpcXHRcXHQgICAgc3lzY3RsIC13IG5ldC5pcHY0LnRjcF9taW5fdHNvX3NlZ3M9XFxcIiRERUZBVUxUX1RDUF9NSU5fVFNPX1NFR1NcXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaC0xNTMtXFx0ZmlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYmxvY2tpbmdfYmxvY2tpbmctd3JpdGUucGt0LTUtYC4vZGVmYXVsdHMuc2hcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Jsb2NraW5nX2Jsb2NraW5nLXdyaXRlLnBrdDo2Oi4vc2V0X3N5c2N0bHMucHkgL3Byb2Mvc3lzL25ldC9pcHY0L3RjcF9taW5fdHNvX3NlZ3M9MTBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Jsb2NraW5nX2Jsb2NraW5nLXdyaXRlLnBrdC03LWBcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3Bfc2xvd19zdGFydF9zbG93LXN0YXJ0LWFmdGVyLWlkbGUucGt0LTYtLi9zZXRfc3lzY3Rscy5weSAvcHJvYy9zeXMvbmV0L2lwdjQvdGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZT0xIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1hZnRlci1pZGxlLnBrdDo3OlxcdFxcdCAvcHJvYy9zeXMvbmV0L2lwdjQvdGNwX21pbl90c29fc2Vncz0xMGBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1hZnRlci1pZGxlLnBrdC04LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9zbG93X3N0YXJ0X3Nsb3ctc3RhcnQtYWZ0ZXItd2luLXVwZGF0ZS5wa3QtNi0uL3NldF9zeXNjdGxzLnB5IC9wcm9jL3N5cy9uZXQvaXB2NC90Y3Bfc2xvd19zdGFydF9hZnRlcl9pZGxlPTEgXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3Bfc2xvd19zdGFydF9zbG93LXN0YXJ0LWFmdGVyLXdpbi11cGRhdGUucGt0Ojc6XFx0XFx0IC9wcm9jL3N5cy9uZXQvaXB2NC90Y3BfbWluX3Rzb19zZWdzPTEwYFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3Bfc2xvd19zdGFydF9zbG93LXN0YXJ0LWFmdGVyLXdpbi11cGRhdGUucGt0LTgtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1mcS1hY2stcGVyLTJwa3QucGt0PTExPXN5c2N0bCAtcSBuZXQvaXB2NC90Y3BfcGFjaW5nX3NzX3JhdGlvPTIwMFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3Bfc2xvd19zdGFydF9zbG93LXN0YXJ0LWZxLWFjay1wZXItMnBrdC5wa3Q6MTI6c3lzY3RsIC1lIC1xIG5ldC5pcHY0LnRjcF9taW5fdHNvX3NlZ3M9MmBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1mcS1hY2stcGVyLTJwa3QucGt0LTEzLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF90aW1lc3RhbXBpbmdfdGNwX3R4X3RpbWVzdGFtcF9idWcucGt0LTgtYC4vZGVmYXVsdHMuc2hcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3RpbWVzdGFtcGluZ190Y3BfdHhfdGltZXN0YW1wX2J1Zy5wa3Q6OTpzeXNjdGwgLXEgbmV0LmlwdjQudGNwX21pbl90c29fc2Vncz03MFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfdGltZXN0YW1waW5nX3RjcF90eF90aW1lc3RhbXBfYnVnLnBrdC0xMC1gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMyOjQzLjY5NDI1OTYyM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDY4NzE4OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHRjcF90c29fc2Vnc2AgaW4gYHRjcF9vdXRwdXQuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0byBleGFtaW5lIGhvdyBgdGNwX3Rzb19zZWdzYCBpcyBjYWxsZWQgYW5kIHV0aWxpemVkIHdpdGhpbiBgbmV0L2lwdjQvdGNwX291dHB1dC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIFRDUCBvdXRwdXQgcGF0aC4gV2hhdCBkYXRhIHN0cnVjdHVyZXMgaXMgaXQgbWFuaXB1bGF0aW5nPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBvcGVyYXRpb24gb24gcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgd2l0aCBUU08gZW5hYmxlZD8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHBvaW50cyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgYW5kIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaXMuIElzIGl0IHBhcnQgb2YgdGhlIGluaXRpYWwgc2VnbWVudCBjcmVhdGlvbiwgb3IgaXMgaXQgaW52b2x2ZWQgaW4gc29tZSBraW5kIG9mIHJldHJhbnNtaXNzaW9uIG9yIGFkanVzdG1lbnQ/IFVuZGVyc3RhbmRpbmcgaXRzIHBsYWNlIGluIHRoZSBvdmVyYWxsIGZsb3cgaXMgdGhlIGtleSB0byBhc3Nlc3NpbmcgaXRzIGZ1bmN0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yIHBlcmhhcHMgc3BvdHRpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODgxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6NTEuMTYyOTgxMzU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkyMzk3ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3Rzb19zZWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjI4MD1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfdHNvX2F1dG9zaXplKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjg0LSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjg1OnN0YXRpYyB1MzIgdGNwX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3cpXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyODYte1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTI5NzI9c3RhdGljIGJvb2wgdGNwX3dyaXRlX3htaXQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdywgaW50IG5vbmFnbGUsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjk5OS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzAwMDpcXHRtYXhfc2VncyA9IHRjcF90c29fc2VncyhzaywgbXNzX25vdyk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTMwMDEtXFx0d2hpbGUgKChza2IgPSB0Y3Bfc2VuZF9oZWFkKHNrKSkpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zNzMzPXZvaWQgdGNwX3htaXRfcmV0cmFuc21pdF9xdWV1ZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzc0Ni1cXHRza2IgPSB0cC1cXHUwMDNlcmV0cmFuc21pdF9za2JfaGludCA/OiBydHhfaGVhZDtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6Mzc0NzpcXHRtYXhfc2VncyA9IHRjcF90c29fc2VncyhzaywgdGNwX2N1cnJlbnRfbXNzKHNrKSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM3NDgtXFx0c2tiX3JidHJlZV93YWxrX2Zyb20oc2tiKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMyOjUxLjYyMjI0MjI4NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTI1ODE5MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIENvbmNlcm5zIEhlcmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBvdmVyIHRoZXNlIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBjYWxsYmFja3MgYW5kIEknbSBmZWVsaW5nIHByZXR0eSBjb25maWRlbnQgYWJvdXQgdGhlIEtNU0FOIHNpdHVhdGlvbi4gVGhlIGNvcmUgb2YgaXQgaXMgdGhlIHJlZmFjdG9yaW5nIG9mIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BzLiBXZSdyZSBtb3ZpbmcgZnJvbSBgbWluX3Rzb19zZWdzYCB0byBhIGB0c29fc2Vnc2AgY2FsbGJhY2suIFRoaXMgbWFrZXMgc2Vuc2U7IGl0IGxldHMgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZXMgbGlrZSBCQlIgYW5kIEJQRiBDQSBjYWxjdWxhdGUgdGhlIFRTTyBzZWdtZW50IGNvdW50IGJhc2VkIG9uIHRoZSBjdXJyZW50IE1TUywgd2hpY2ggZ2l2ZXMgdXMgbW9yZSBmbGV4aWJpbGl0eS4gV2UgYXJlIGFsc28gZXhwb3NpbmcgYHRjcF90c29fYXV0b3NpemVgIGFzIGEgQlBGIGtmdW5jIGFuZCBhZGRpbmcgc29tZSBjbGFtcGluZyBhbmQgc2FuaXRpemF0aW9uLlxuXG5IZXJlJ3MgdGhlIGJyZWFrZG93biBvZiB3aHkgdGhpcyAqc2hvdWxkbid0KiB0cmlnZ2VyIGFueSBLTVNBTiBmbGFnczpcblxuKiAgICoqTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzOioqIFRoaXMgcGF0Y2ggaXNuJ3QgY3JlYXRpbmcsIHJlYWRpbmcsIHdyaXRpbmcsIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoYXQncyB0aGUga2V5LiBLTVNBTiBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIHRob3NlIHNjZW5hcmlvcyB3aGVyZSB0aGUgc3lzdGVtIG1pZ2h0IHVzZSBkYXRhIGJlZm9yZSBpdCdzIGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoYXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgaGFwcGVuaW5nIGhlcmUuXG4qICAgKipTY2FsYXIgRGF0YSBPbmx5OioqIFRoZSBpbnB1dHMgYW5kIG91dHB1dHMgYXJlIGp1c3QgaW50ZWdlcnMgLSBgdTMyYCwgYHVuc2lnbmVkIGludGAuIFRoZSBwb3RlbnRpYWwgZm9yIHdlaXJkbmVzcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGp1c3QgdmFuaXNoaW5nbHkgc21hbGwuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgc2NhbGFyIHZhbHVlcyBwYXNzZWQgYnkgdmFsdWUuXG4qICAgKipTYWZldHkgQ2hlY2tzOioqIFdlJ3ZlIGdvdCBjbGFtcGluZyBhbmQgYm91bmRzIGNoZWNrcyBpbiBwbGFjZS4gVGhhdCBhZGRzIGEgbGF5ZXIgb2YgcHJvdGVjdGlvbiB0aGF0IHRoZSB2YWx1ZSBpcyBhbHdheXMgaW4gYSBrbm93biBnb29kIHN0YXRlLlxuXG5LQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBhIHNlcGFyYXRlIGlzc3VlLCBhbmQgdGhhdCdzIHRoZSBtb3JlIGFwcHJvcHJpYXRlIHRvb2wgZm9yIHRoZSBzb3J0cyBvZiBlcnJvcnMgeW91J2QgZW5jb3VudGVyIGhlcmUgaWYgdGhlcmUgd2VyZSBhbnkuIFRoaW5ncyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1hdGgvbG9naWMgYnVncy4gQnV0IHRoYXQncyBub3Qgd2hhdCBLTVNBTiBpcyBmb3IuXG5cblNvLCBJJ20gY29tZm9ydGFibGUgY2FsbGluZyB0aGlzIGBOZWVkc0tNU0FOYCBhcyBgZmFsc2VgLiBXZSBjYW4gY2FsbCBgc2V0LXJlc3VsdHNgLiBObyBuZWVkIHRvIGJ1cm4gYW55IGN5Y2xlcyBvbiBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhpcyBwYXRjaCBsb29rcyBjbGVhbiBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU2MSwiT3V0cHV0VG9rZW5zIjoxOTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6NTkuMTQ4MDYzODM0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGludGVyZmFjZSBieSByZXBsYWNpbmcgdGhlIGBtaW5fdHNvX3NlZ3NgIGNhbGxiYWNrIHdpdGggYHRzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpYCwgdXBkYXRlcyBCQlIgYW5kIEJQRiBjb25nZXN0aW9uIGNvbnRyb2wgaG9va3MsIGFuZCBleHBvcnRzIGB0Y3BfdHNvX2F1dG9zaXplYCBhcyBhIEJQRiBrZnVuYy5cXG5cXG5BbGwgbW9kaWZpZWQgYW5kIGFkZGVkIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIHNjYWxhciBpbnRlZ2VyIHZhbHVlcyBwYXNzZWQgYnkgdmFsdWUgKGB1MzJgLCBgdW5zaWduZWQgaW50YCwgcG9pbnRlcnMgdG8gZnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0IGBzb2NrYCkuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlci1zcGFjZSAoc3VjaCBhcyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBvciBpb2N0bCByZXR1cm5zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgaW50ZXJmYWNlIGJ5IHJlcGxhY2luZyB0aGUgYG1pbl90c29fc2Vnc2AgY2FsbGJhY2sgd2l0aCBgdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdylgLCB1cGRhdGVzIEJCUiBhbmQgQlBGIGNvbmdlc3Rpb24gY29udHJvbCBob29rcywgYW5kIGV4cG9ydHMgYHRjcF90c29fYXV0b3NpemVgIGFzIGEgQlBGIGtmdW5jLlxcblxcbkFsbCBtb2RpZmllZCBhbmQgYWRkZWQgZnVuY3Rpb25zIG9wZXJhdGUgb24gc2NhbGFyIGludGVnZXIgdmFsdWVzIHBhc3NlZCBieSB2YWx1ZSAoYHUzMmAsIGB1bnNpZ25lZCBpbnRgLCBwb2ludGVycyB0byBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgYHNvY2tgKS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyLXNwYWNlIChzdWNoIGFzIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIG9yIGlvY3RsIHJldHVybnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqjc6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 01:12:28 +0000 UTC FinishedAt: 2026-09-01 01:33:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_CONG_BBR", "BPF_SYSCALL", "BPF_JIT", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_CONG_BBR", "BPF_SYSCALL", "BPF_JIT", "INET" ], "series_id": "69e9a18d-4174-4f6e-975d-45c3f488c150" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcp_tso_autosize" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9DT05HX0JCUiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfdHNvX2F1dG9zaXplJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBpbnRlcmZhY2UgYnkgcmVwbGFjaW5nIHRoZSBgbWluX3Rzb19zZWdzYCBjYWxsYmFjayB3aXRoIGB0c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KWAsIHVwZGF0ZXMgQkJSIGFuZCBCUEYgY29uZ2VzdGlvbiBjb250cm9sIGhvb2tzLCBhbmQgZXhwb3J0cyBgdGNwX3Rzb19hdXRvc2l6ZWAgYXMgYSBCUEYga2Z1bmMuXG5cbkFsbCBtb2RpZmllZCBhbmQgYWRkZWQgZnVuY3Rpb25zIG9wZXJhdGUgb24gc2NhbGFyIGludGVnZXIgdmFsdWVzIHBhc3NlZCBieSB2YWx1ZSAoYHUzMmAsIGB1bnNpZ25lZCBpbnRgLCBwb2ludGVycyB0byBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgYHNvY2tgKS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyLXNwYWNlIChzdWNoIGFzIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIG9yIGlvY3RsIHJldHVybnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgaW50ZXJmYWNlIGJ5IHJlcGxhY2luZyB0aGUgbWluX3Rzb19zZWdzIGNhbGxiYWNrIHdpdGggYSB0c29fc2VncyBjYWxsYmFjaywgdXBkYXRpbmcgVENQIG91dHB1dCBsb2dpYyAodGNwX3Rzb19hdXRvc2l6ZSwgdGNwX3Rzb19zZWdzKSwgQkJSIGNvbmdlc3Rpb24gY29udHJvbCwgYW5kIEJQRiBUQ1AgQ0Egc3RydWN0X29wcy4gdGNwX3Rzb19hdXRvc2l6ZSBpcyBhbHNvIGV4cG9zZWQgYXMgYSBCUEYga2Z1bmMuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbHRlciB0aGUgVENQIHNlZ21lbnRhdGlvbiBhbmQgcGFja2V0IHNjaGVkdWxpbmcgcGF0aCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0N2ZlZWMyNGFlMjEwNDRjZjdjZGEyZjY2ZjZmYjM3NDU0YjU1MzdiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMTozMTo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oXG5pbmRleCA2NzBjMjA4NzZmMjY1Li43OWYyN2FjOWU5NjNhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcC5oXG5AQCAtODI0LDYgJiM0Mzs4MjQsOSBAQCB1bnNpZ25lZCBpbnQgdGNwX3N5bmNfbXNzKHN0cnVjdCBzb2NrICpzaywgdTMyIHBtdHUpO1xuIHVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKTtcbiB1MzIgdGNwX2NsYW1wX3Byb2JlMF90b191c2VyX3RpbWVvdXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1MzIgd2hlbik7XG4gXG4mIzQzO3UzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4mIzQzO1x0XHQgICAgIGludCBtaW5fdHNvX3NlZ3MpO1xuJiM0MztcbiAvKiBCb3VuZCBNU1MgLyBUU08gcGFja2V0IHNpemUgd2l0aCB0aGUgaGFsZiBvZiB0aGUgd2luZG93ICovXG4gc3RhdGljIGlubGluZSBpbnQgdGNwX2JvdW5kX3RvX2hhbGZfd25kKHN0cnVjdCB0Y3Bfc29jayAqdHAsIGludCBwa3RzaXplKVxuIHtcbkBAIC0xMzYxLDggJiM0MzsxMzY0LDE2IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMge1xuIFx0LyogaG9vayBmb3IgcGFja2V0IGFjayBhY2NvdW50aW5nIChvcHRpb25hbCkgKi9cbiBcdHZvaWQgKCpwa3RzX2Fja2VkKShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wbGUpO1xuIFxuLVx0Lyogb3ZlcnJpZGUgc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgKG9wdGlvbmFsKSAqL1xuLVx0dTMyICgqbWluX3Rzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2spO1xuJiM0MztcdC8qIE92ZXJyaWRlIHRjcF90c29fYXV0b3NpemUoKSAob3B0aW9uYWwpXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJZiBwcm92aWRlZCwgdGhpcyBjYWxsYmFjayBzdXBwbGllcyB0aGUgVFNPIHNlZ21lbnQgdGFyZ2V0IGNvdW50XG4mIzQzO1x0ICogaW5zdGVhZCBvZiB1c2luZyB0Y3BfdHNvX2F1dG9zaXplKCkuIFRoZSByZXR1cm5lZCB2YWx1ZSBpc1xuJiM0MztcdCAqIHN1YnNlcXVlbnRseSBjbGFtcGVkIHRvIFsxLCBzay1cdTAwM2Vza19nc29fbWF4X3NlZ3NdIGJ5IHRoZSBjYWxsZXIuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBGb3IgdGhlIGtlcm5lbCBjYWxsYmFjayBwYXRoLCBtc3Nfbm93IG9yaWdpbmF0ZXMgZnJvbVxuJiM0MztcdCAqIHRjcF9jdXJyZW50X21zcygpIGFuZCBzaG91bGQgbmV2ZXIgYmUgemVyby5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1MzIgKCp0c29fc2Vncykoc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdyk7XG4gXG4gXHQvKiBuZXcgdmFsdWUgb2YgY3duZCBhZnRlciBsb3NzIChyZXF1aXJlZCkgKi9cbiBcdHUzMiAgKCp1bmRvX2N3bmQpKHN0cnVjdCBzb2NrICpzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYnBmX3RjcF9jYS5jIGIvbmV0L2lwdjQvYnBmX3RjcF9jYS5jXG5pbmRleCA3OTFlMTUwNjMyMzdjLi45ZGVlZDIyNDRjMmRlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvYnBmX3RjcF9jYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9icGZfdGNwX2NhLmNcbkBAIC0xOTQsNiAmIzQzOzE5NCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfcmVub19jb25nX2F2b2lkKVxuIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfcmVub191bmRvX2N3bmQpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF9zbG93X3N0YXJ0KVxuIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfY29uZ19hdm9pZF9haSlcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF90c29fYXV0b3NpemUpXG4gQlRGX0tGVU5DU19FTkQoYnBmX3RjcF9jYV9jaGVja19rZnVuY19pZHMpXG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl90Y3BfY2Ffa2Z1bmNfc2V0ID0ge1xuQEAgLTI4NCw3ICYjNDM7Mjg1LDcgQEAgc3RhdGljIHZvaWQgYnBmX3RjcF9jYV9wa3RzX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBcbiB7XG4gfVxuIFxuLXN0YXRpYyB1MzIgYnBmX3RjcF9jYV9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKVxuJiM0MztzdGF0aWMgdTMyIGJwZl90Y3BfY2FfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzIwLDcgJiM0MzszMjEsNyBAQCBzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBfX2JwZl9vcHNfdGNwX2Nvbmdlc3Rpb25fb3BzID0ge1xuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnQgPSBicGZfdGNwX2NhX2N3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuaW5fYWNrX2V2ZW50ID0gYnBmX3RjcF9jYV9pbl9hY2tfZXZlbnQsXG4gXHQucGt0c19hY2tlZCA9IGJwZl90Y3BfY2FfcGt0c19hY2tlZCxcbi1cdC5taW5fdHNvX3NlZ3MgPSBicGZfdGNwX2NhX21pbl90c29fc2VncyxcbiYjNDM7XHQudHNvX3NlZ3MgPSBicGZfdGNwX2NhX3Rzb19zZWdzLFxuIFx0LmNvbmdfY29udHJvbCA9IGJwZl90Y3BfY2FfY29uZ19jb250cm9sLFxuIFx0LnVuZG9fY3duZCA9IGJwZl90Y3BfY2FfdW5kb19jd25kLFxuIFx0LnNuZGJ1Zl9leHBhbmQgPSBicGZfdGNwX2NhX3NuZGJ1Zl9leHBhbmQsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2Jici5jIGIvbmV0L2lwdjQvdGNwX2Jici5jXG5pbmRleCA4MjM3OGEyYmZkMWUxLi5lY2YxMWJlNDZmMzgyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2Jici5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYmJyLmNcbkBAIC0yOTcsMTEgJiM0MzsyOTcsMTggQEAgc3RhdGljIHZvaWQgYmJyX3NldF9wYWNpbmdfcmF0ZShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBidywgaW50IGdhaW4pXG4gfVxuIFxuIC8qIG92ZXJyaWRlIHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzICovXG4tX19icGZfa2Z1bmMgc3RhdGljIHUzMiBiYnJfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7c3RhdGljIHUzMiBiYnJfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3BhY2luZ19yYXRlKSBcdTAwM2MgKGJicl9taW5fdHNvX3JhdGUgXHUwMDNlXHUwMDNlIDMpID8gMSA6IDI7XG4gfVxuIFxuJiM0MztfX2JwZl9rZnVuYyBzdGF0aWMgdTMyIGJicl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFtc3Nfbm93KSlcbiYjNDM7XHRcdHJldHVybiBiYnJfbWluX3Rzb19zZWdzKHNrKTtcbiYjNDM7XHRyZXR1cm4gdGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdywgYmJyX21pbl90c29fc2VncyhzaykpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzX2dvYWwoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuQEAgLTExNTEsNyAmIzQzOzExNTgsNyBAQCBzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfYmJyX2Nvbmdfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4gXHQudW5kb19jd25kXHQ9IGJicl91bmRvX2N3bmQsXG4gXHQuY3duZF9ldmVudF90eF9zdGFydFx0PSBiYnJfY3duZF9ldmVudF90eF9zdGFydCxcbiBcdC5zc3RocmVzaFx0PSBiYnJfc3N0aHJlc2gsXG4tXHQubWluX3Rzb19zZWdzXHQ9IGJicl9taW5fdHNvX3NlZ3MsXG4mIzQzO1x0LnRzb19zZWdzXHQ9IGJicl90c29fc2VncyxcbiBcdC5nZXRfaW5mb1x0PSBiYnJfZ2V0X2luZm8sXG4gXHQuc2V0X3N0YXRlXHQ9IGJicl9zZXRfc3RhdGUsXG4gfTtcbkBAIC0xMTYzLDcgJiM0MzsxMTcwLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9zbmRidWZfZXhwYW5kKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfdW5kb19jd25kKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfY3duZF9ldmVudF90eF9zdGFydClcbiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NzdGhyZXNoKVxuLUJURl9JRF9GTEFHUyhmdW5jLCBiYnJfbWluX3Rzb19zZWdzKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYmJyX3Rzb19zZWdzKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfc2V0X3N0YXRlKVxuIEJURl9LRlVOQ1NfRU5EKHRjcF9iYnJfY2hlY2tfa2Z1bmNfaWRzKVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuaW5kZXggNmY0ZGNhNGE0ZGU5OC4uYjdmMmVlNWU3YTZiMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5AQCAtMjI1MiwxMyAmIzQzOzIyNTIsMjEgQEAgc3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcbiAgKiBpbiBiaWdnZXIgVFNPIGJ1cnN0cy4gV2Ugd2UgY3V0IHRoZSBSVFQtYmFzZWQgYWxsb3dhbmNlIGluIGhhbGZcbiAgKiBmb3IgZXZlcnkgMl45IHVzZWMgKGFrYSA1MTIgdXMpIG9mIFJUVCwgc28gdGhhdCB0aGUgUlRULWJhc2VkIGFsbG93YW5jZVxuICAqIGlzIGJlbG93IDE1MDAgYnl0ZXMgYWZ0ZXIgNiAqIH41MDAgdXNlYyA9IDNtcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIG1pbl90c29fc2VncyBpcyBmbG9vcmVkIHRvIDEgdG8gYXZvaWQgc3VycHJpc2luZyBjb252ZXJzaW9uLiBBbHNvLFxuJiM0MzsgKiBCUEYgY2FsbGVycyBtYXkgcGFzcyBtc3Nfbm93ID09IDAuIEluIHRoYXQgY2FzZSB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGVcbiYjNDM7ICogc2FuaXRpemVkIG1pbl90c29fc2VncyB2YWx1ZSBhbmQgc2tpcHMgYXV0b3NpemluZy5cbiAgKi9cbi1zdGF0aWMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcbi1cdFx0XHQgICAgaW50IG1pbl90c29fc2VncylcbiYjNDM7X19icGZfa2Z1bmMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcbiYjNDM7XHRcdFx0XHQgaW50IG1pbl90c29fc2VncylcbiB7XG4mIzQzO1x0dTMyIG1pbl90c28gPSBtYXgobWluX3Rzb19zZWdzLCAxKTtcbiBcdHVuc2lnbmVkIGxvbmcgYnl0ZXM7XG4gXHR1MzIgcjtcbiBcbiYjNDM7XHRpZiAodW5saWtlbHkoIW1zc19ub3cpKVxuJiM0MztcdFx0cmV0dXJuIG1pbl90c287XG4mIzQzO1xuIFx0Ynl0ZXMgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcGFjaW5nX3JhdGUpIFx1MDAzZVx1MDAzZSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcGFjaW5nX3NoaWZ0KTtcbiBcbiBcdHIgPSB0Y3BfbWluX3J0dCh0Y3Bfc2soc2spKSBcdTAwM2VcdTAwM2UgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfdHNvX3J0dF9sb2cpO1xuQEAgLTIyNjcsOCAmIzQzOzIyNzUsOSBAQCBzdGF0aWMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcbiBcbiBcdGJ5dGVzID0gbWluX3QodW5zaWduZWQgbG9uZywgYnl0ZXMsIHNrLVx1MDAzZXNrX2dzb19tYXhfc2l6ZSk7XG4gXG4tXHRyZXR1cm4gbWF4X3QodTMyLCBieXRlcyAvIG1zc19ub3csIG1pbl90c29fc2Vncyk7XG4mIzQzO1x0cmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvKTtcbiB9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHRjcF90c29fYXV0b3NpemUpO1xuIFxuIC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIHdlIHdhbnQgaW4gdGhlIHNrYiB3ZSBhcmUgdHJhbnNtaXR0aW5nLlxuICAqIFNlZSBpZiBjb25nZXN0aW9uIGNvbnRyb2wgbW9kdWxlIHdhbnRzIHRvIGRlY2lkZTsgb3RoZXJ3aXNlLCBhdXRvc2l6ZS5cbkBAIC0yMjc2LDE0ICYjNDM7MjI4NSwxMyBAQCBzdGF0aWMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcbiBzdGF0aWMgdTMyIHRjcF90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcyA9IGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2NhX29wcztcbi1cdHUzMiBtaW5fdHNvLCB0c29fc2Vncztcbi1cbi1cdG1pbl90c28gPSBjYV9vcHMtXHUwMDNlbWluX3Rzb19zZWdzID9cbi1cdFx0XHRjYV9vcHMtXHUwMDNlbWluX3Rzb19zZWdzKHNrKSA6XG4tXHRcdFx0UkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfbWluX3Rzb19zZWdzKTtcbiYjNDM7XHR1MzIgdHNvX3NlZ3M7XG4gXG4tXHR0c29fc2VncyA9IHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIG1pbl90c28pO1xuLVx0cmV0dXJuIG1pbl90KHUzMiwgdHNvX3NlZ3MsIHNrLVx1MDAzZXNrX2dzb19tYXhfc2Vncyk7XG4mIzQzO1x0dHNvX3NlZ3MgPSBjYV9vcHMtXHUwMDNldHNvX3NlZ3MgP1xuJiM0MztcdFx0XHRjYV9vcHMtXHUwMDNldHNvX3NlZ3Moc2ssIG1zc19ub3cpIDpcbiYjNDM7XHRcdFx0dGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdyxcbiYjNDM7XHRcdFx0XHRcdCBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MpKTtcbiYjNDM7XHRyZXR1cm4gY2xhbXBfdCh1MzIsIHRzb19zZWdzLCAxLCBzay1cdTAwM2Vza19nc29fbWF4X3NlZ3MpO1xuIH1cbiBcbiAvKiBSZXR1cm5zIHRoZSBwb3J0aW9uIG9mIHNrYiB3aGljaCBjYW4gYmUgc2VudCByaWdodCBhd2F5ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jXG5pbmRleCAwYTNlOWQzNWJmNmYwLi41ODI2MmU0OTAzMzY0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmNcbkBAIC0xMCw3ICYjNDM7MTAsNyBAQCBleHRlcm4gdTMyIGJicl9zbmRidWZfZXhwYW5kKHN0cnVjdCBzb2NrICpzaykgX19rc3ltO1xuIGV4dGVybiB1MzIgYmJyX3VuZG9fY3duZChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBiYnJfY3duZF9ldmVudF90eF9zdGFydChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbiBleHRlcm4gdTMyIGJicl9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbi1leHRlcm4gdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07XG4mIzQzO2V4dGVybiB1MzIgYmJyX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBiYnJfc2V0X3N0YXRlKHN0cnVjdCBzb2NrICpzaywgdTggbmV3X3N0YXRlKSBfX2tzeW07XG4gXG4gZXh0ZXJuIHZvaWQgZGN0Y3BfaW5pdChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbkBAIC05MCw5ICYjNDM7OTAsOSBAQCB1MzIgQlBGX1BST0coc3N0aHJlc2gsIHN0cnVjdCBzb2NrICpzaylcbiB9XG4gXG4gU0VDKFwmIzM0O3N0cnVjdF9vcHNcJiMzNDspXG4tdTMyIEJQRl9QUk9HKG1pbl90c29fc2Vncywgc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt1MzIgQlBGX1BST0codHNvX3NlZ3MsIHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXG4ge1xuLVx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xuJiM0MztcdHJldHVybiBiYnJfdHNvX3NlZ3Moc2ssIG1zc19ub3cpO1xuIH1cbiBcbiBTRUMoXCYjMzQ7c3RydWN0X29wc1wmIzM0OylcbkBAIC0xMjAsNyAmIzQzOzEyMCw3IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2NhX2tmdW5jID0ge1xuIFx0LmN3bmRfZXZlbnRcdD0gKHZvaWQgKiljd25kX2V2ZW50LFxuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnQgPSAodm9pZCAqKWN3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuc3N0aHJlc2hcdD0gKHZvaWQgKilzc3RocmVzaCxcbi1cdC5taW5fdHNvX3NlZ3NcdD0gKHZvaWQgKiltaW5fdHNvX3NlZ3MsXG4mIzQzO1x0LnRzb19zZWdzXHQ9ICh2b2lkICopdHNvX3NlZ3MsXG4gXHQuc2V0X3N0YXRlXHQ9ICh2b2lkICopc2V0X3N0YXRlLFxuIFx0LnBrdHNfYWNrZWQgICAgID0gKHZvaWQgKilwa3RzX2Fja2VkLFxuIFx0Lm5hbWVcdFx0PSBcJiMzNDt0Y3BfY2Ffa2Z1bmNcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VENQX0NPTkdfQkJSJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF90c29fYXV0b3NpemUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBpbnRlcmZhY2UgYnkgcmVwbGFjaW5nIHRoZSBtaW5fdHNvX3NlZ3MgY2FsbGJhY2sgd2l0aCBhIHRzb19zZWdzIGNhbGxiYWNrLCB1cGRhdGluZyBUQ1Agb3V0cHV0IGxvZ2ljICh0Y3BfdHNvX2F1dG9zaXplLCB0Y3BfdHNvX3NlZ3MpLCBCQlIgY29uZ2VzdGlvbiBjb250cm9sLCBhbmQgQlBGIFRDUCBDQSBzdHJ1Y3Rfb3BzLiB0Y3BfdHNvX2F1dG9zaXplIGlzIGFsc28gZXhwb3NlZCBhcyBhIEJQRiBrZnVuYy4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFsdGVyIHRoZSBUQ1Agc2VnbWVudGF0aW9uIGFuZCBwYWNrZXQgc2NoZWR1bGluZyBwYXRoIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ3ZmVlYzI0YWUyMTA0NGNmN2NkYTJmNjZmNmZiMzc0NTRiNTUzN2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDAxOjMxOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCA2NzBjMjA4NzZmMjY1Li43OWYyN2FjOWU5NjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtODI0LDYgJiM0Mzs4MjQsOSBAQCB1bnNpZ25lZCBpbnQgdGNwX3N5bmNfbXNzKHN0cnVjdCBzb2NrICpzaywgdTMyIHBtdHUpOwogdW5zaWduZWQgaW50IHRjcF9jdXJyZW50X21zcyhzdHJ1Y3Qgc29jayAqc2spOwogdTMyIHRjcF9jbGFtcF9wcm9iZTBfdG9fdXNlcl90aW1lb3V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdTMyIHdoZW4pOwogCiYjNDM7dTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdywKJiM0MzsJCSAgICAgaW50IG1pbl90c29fc2Vncyk7CiYjNDM7CiAvKiBCb3VuZCBNU1MgLyBUU08gcGFja2V0IHNpemUgd2l0aCB0aGUgaGFsZiBvZiB0aGUgd2luZG93ICovCiBzdGF0aWMgaW5saW5lIGludCB0Y3BfYm91bmRfdG9faGFsZl93bmQoc3RydWN0IHRjcF9zb2NrICp0cCwgaW50IHBrdHNpemUpCiB7CkBAIC0xMzYxLDggJiM0MzsxMzY0LDE2IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgewogCS8qIGhvb2sgZm9yIHBhY2tldCBhY2sgYWNjb3VudGluZyAob3B0aW9uYWwpICovCiAJdm9pZCAoKnBrdHNfYWNrZWQpKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBsZSk7CiAKLQkvKiBvdmVycmlkZSBzeXNjdGxfdGNwX21pbl90c29fc2VncyAob3B0aW9uYWwpICovCi0JdTMyICgqbWluX3Rzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2spOwomIzQzOwkvKiBPdmVycmlkZSB0Y3BfdHNvX2F1dG9zaXplKCkgKG9wdGlvbmFsKQomIzQzOwkgKgomIzQzOwkgKiBJZiBwcm92aWRlZCwgdGhpcyBjYWxsYmFjayBzdXBwbGllcyB0aGUgVFNPIHNlZ21lbnQgdGFyZ2V0IGNvdW50CiYjNDM7CSAqIGluc3RlYWQgb2YgdXNpbmcgdGNwX3Rzb19hdXRvc2l6ZSgpLiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMKJiM0MzsJICogc3Vic2VxdWVudGx5IGNsYW1wZWQgdG8gWzEsIHNrLSZndDtza19nc29fbWF4X3NlZ3NdIGJ5IHRoZSBjYWxsZXIuCiYjNDM7CSAqCiYjNDM7CSAqIEZvciB0aGUga2VybmVsIGNhbGxiYWNrIHBhdGgsIG1zc19ub3cgb3JpZ2luYXRlcyBmcm9tCiYjNDM7CSAqIHRjcF9jdXJyZW50X21zcygpIGFuZCBzaG91bGQgbmV2ZXIgYmUgemVyby4KJiM0MzsJICovCiYjNDM7CXUzMiAoKnRzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KTsKIAogCS8qIG5ldyB2YWx1ZSBvZiBjd25kIGFmdGVyIGxvc3MgKHJlcXVpcmVkKSAqLwogCXUzMiAgKCp1bmRvX2N3bmQpKHN0cnVjdCBzb2NrICpzayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9icGZfdGNwX2NhLmMgYi9uZXQvaXB2NC9icGZfdGNwX2NhLmMKaW5kZXggNzkxZTE1MDYzMjM3Yy4uOWRlZWQyMjQ0YzJkZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYnBmX3RjcF9jYS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2JwZl90Y3BfY2EuYwpAQCAtMTk0LDYgJiM0MzsxOTQsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Jlbm9fY29uZ19hdm9pZCkKIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfcmVub191bmRvX2N3bmQpCiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Nsb3dfc3RhcnQpCiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX2NvbmdfYXZvaWRfYWkpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF90c29fYXV0b3NpemUpCiBCVEZfS0ZVTkNTX0VORChicGZfdGNwX2NhX2NoZWNrX2tmdW5jX2lkcykKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl90Y3BfY2Ffa2Z1bmNfc2V0ID0gewpAQCAtMjg0LDcgJiM0MzsyODUsNyBAQCBzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3BrdHNfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcAogewogfQogCi1zdGF0aWMgdTMyIGJwZl90Y3BfY2FfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaykKJiM0MztzdGF0aWMgdTMyIGJwZl90Y3BfY2FfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdykKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTMyMCw3ICYjNDM7MzIxLDcgQEAgc3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgX19icGZfb3BzX3RjcF9jb25nZXN0aW9uX29wcyA9IHsKIAkuY3duZF9ldmVudF90eF9zdGFydCA9IGJwZl90Y3BfY2FfY3duZF9ldmVudF90eF9zdGFydCwKIAkuaW5fYWNrX2V2ZW50ID0gYnBmX3RjcF9jYV9pbl9hY2tfZXZlbnQsCiAJLnBrdHNfYWNrZWQgPSBicGZfdGNwX2NhX3BrdHNfYWNrZWQsCi0JLm1pbl90c29fc2VncyA9IGJwZl90Y3BfY2FfbWluX3Rzb19zZWdzLAomIzQzOwkudHNvX3NlZ3MgPSBicGZfdGNwX2NhX3Rzb19zZWdzLAogCS5jb25nX2NvbnRyb2wgPSBicGZfdGNwX2NhX2NvbmdfY29udHJvbCwKIAkudW5kb19jd25kID0gYnBmX3RjcF9jYV91bmRvX2N3bmQsCiAJLnNuZGJ1Zl9leHBhbmQgPSBicGZfdGNwX2NhX3NuZGJ1Zl9leHBhbmQsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYmJyLmMgYi9uZXQvaXB2NC90Y3BfYmJyLmMKaW5kZXggODIzNzhhMmJmZDFlMS4uZWNmMTFiZTQ2ZjM4MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2Jici5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9iYnIuYwpAQCAtMjk3LDExICYjNDM7Mjk3LDE4IEBAIHN0YXRpYyB2b2lkIGJicl9zZXRfcGFjaW5nX3JhdGUoc3RydWN0IHNvY2sgKnNrLCB1MzIgYncsIGludCBnYWluKQogfQogCiAvKiBvdmVycmlkZSBzeXNjdGxfdGNwX21pbl90c29fc2VncyAqLwotX19icGZfa2Z1bmMgc3RhdGljIHUzMiBiYnJfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaykKJiM0MztzdGF0aWMgdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKQogewogCXJldHVybiBSRUFEX09OQ0Uoc2stJmd0O3NrX3BhY2luZ19yYXRlKSAmbHQ7IChiYnJfbWluX3Rzb19yYXRlICZndDsmZ3Q7IDMpID8gMSA6IDI7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyBzdGF0aWMgdTMyIGJicl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KCFtc3Nfbm93KSkKJiM0MzsJCXJldHVybiBiYnJfbWluX3Rzb19zZWdzKHNrKTsKJiM0MzsJcmV0dXJuIHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIGJicl9taW5fdHNvX3NlZ3Moc2spKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdTMyIGJicl90c29fc2Vnc19nb2FsKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKQEAgLTExNTEsNyAmIzQzOzExNTgsNyBAQCBzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfYmJyX2Nvbmdfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CiAJLnVuZG9fY3duZAk9IGJicl91bmRvX2N3bmQsCiAJLmN3bmRfZXZlbnRfdHhfc3RhcnQJPSBiYnJfY3duZF9ldmVudF90eF9zdGFydCwKIAkuc3N0aHJlc2gJPSBiYnJfc3N0aHJlc2gsCi0JLm1pbl90c29fc2Vncwk9IGJicl9taW5fdHNvX3NlZ3MsCiYjNDM7CS50c29fc2Vncwk9IGJicl90c29fc2VncywKIAkuZ2V0X2luZm8JPSBiYnJfZ2V0X2luZm8sCiAJLnNldF9zdGF0ZQk9IGJicl9zZXRfc3RhdGUsCiB9OwpAQCAtMTE2Myw3ICYjNDM7MTE3MCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfc25kYnVmX2V4cGFuZCkKIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfdW5kb19jd25kKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9jd25kX2V2ZW50X3R4X3N0YXJ0KQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9zc3RocmVzaCkKLUJURl9JRF9GTEFHUyhmdW5jLCBiYnJfbWluX3Rzb19zZWdzKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBiYnJfdHNvX3NlZ3MpCiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NldF9zdGF0ZSkKIEJURl9LRlVOQ1NfRU5EKHRjcF9iYnJfY2hlY2tfa2Z1bmNfaWRzKQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggNmY0ZGNhNGE0ZGU5OC4uYjdmMmVlNWU3YTZiMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtMjI1MiwxMyAmIzQzOzIyNTIsMjEgQEAgc3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCwKICAqIGluIGJpZ2dlciBUU08gYnVyc3RzLiBXZSB3ZSBjdXQgdGhlIFJUVC1iYXNlZCBhbGxvd2FuY2UgaW4gaGFsZgogICogZm9yIGV2ZXJ5IDJeOSB1c2VjIChha2EgNTEyIHVzKSBvZiBSVFQsIHNvIHRoYXQgdGhlIFJUVC1iYXNlZCBhbGxvd2FuY2UKICAqIGlzIGJlbG93IDE1MDAgYnl0ZXMgYWZ0ZXIgNiAqIH41MDAgdXNlYyA9IDNtcy4KJiM0MzsgKgomIzQzOyAqIFRoZSBtaW5fdHNvX3NlZ3MgaXMgZmxvb3JlZCB0byAxIHRvIGF2b2lkIHN1cnByaXNpbmcgY29udmVyc2lvbi4gQWxzbywKJiM0MzsgKiBCUEYgY2FsbGVycyBtYXkgcGFzcyBtc3Nfbm93ID09IDAuIEluIHRoYXQgY2FzZSB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUKJiM0MzsgKiBzYW5pdGl6ZWQgbWluX3Rzb19zZWdzIHZhbHVlIGFuZCBza2lwcyBhdXRvc2l6aW5nLgogICovCi1zdGF0aWMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdywKLQkJCSAgICBpbnQgbWluX3Rzb19zZWdzKQomIzQzO19fYnBmX2tmdW5jIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csCiYjNDM7CQkJCSBpbnQgbWluX3Rzb19zZWdzKQogewomIzQzOwl1MzIgbWluX3RzbyA9IG1heChtaW5fdHNvX3NlZ3MsIDEpOwogCXVuc2lnbmVkIGxvbmcgYnl0ZXM7CiAJdTMyIHI7CiAKJiM0MzsJaWYgKHVubGlrZWx5KCFtc3Nfbm93KSkKJiM0MzsJCXJldHVybiBtaW5fdHNvOwomIzQzOwogCWJ5dGVzID0gUkVBRF9PTkNFKHNrLSZndDtza19wYWNpbmdfcmF0ZSkgJmd0OyZndDsgUkVBRF9PTkNFKHNrLSZndDtza19wYWNpbmdfc2hpZnQpOwogCiAJciA9IHRjcF9taW5fcnR0KHRjcF9zayhzaykpICZndDsmZ3Q7IFJFQURfT05DRShzb2NrX25ldChzayktJmd0O2lwdjQuc3lzY3RsX3RjcF90c29fcnR0X2xvZyk7CkBAIC0yMjY3LDggJiM0MzsyMjc1LDkgQEAgc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csCiAKIAlieXRlcyA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGJ5dGVzLCBzay0mZ3Q7c2tfZ3NvX21heF9zaXplKTsKIAotCXJldHVybiBtYXhfdCh1MzIsIGJ5dGVzIC8gbXNzX25vdywgbWluX3Rzb19zZWdzKTsKJiM0MzsJcmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvKTsKIH0KJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfdHNvX2F1dG9zaXplKTsKIAogLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMgd2Ugd2FudCBpbiB0aGUgc2tiIHdlIGFyZSB0cmFuc21pdHRpbmcuCiAgKiBTZWUgaWYgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZSB3YW50cyB0byBkZWNpZGU7IG90aGVyd2lzZSwgYXV0b3NpemUuCkBAIC0yMjc2LDE0ICYjNDM7MjI4NSwxMyBAQCBzdGF0aWMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdywKIHN0YXRpYyB1MzIgdGNwX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3cpCiB7CiAJY29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2Ffb3BzID0gaW5ldF9jc2soc2spLSZndDtpY3NrX2NhX29wczsKLQl1MzIgbWluX3RzbywgdHNvX3NlZ3M7Ci0KLQltaW5fdHNvID0gY2Ffb3BzLSZndDttaW5fdHNvX3NlZ3MgPwotCQkJY2Ffb3BzLSZndDttaW5fdHNvX3NlZ3Moc2spIDoKLQkJCVJFQURfT05DRShzb2NrX25ldChzayktJmd0O2lwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MpOwomIzQzOwl1MzIgdHNvX3NlZ3M7CiAKLQl0c29fc2VncyA9IHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIG1pbl90c28pOwotCXJldHVybiBtaW5fdCh1MzIsIHRzb19zZWdzLCBzay0mZ3Q7c2tfZ3NvX21heF9zZWdzKTsKJiM0MzsJdHNvX3NlZ3MgPSBjYV9vcHMtJmd0O3Rzb19zZWdzID8KJiM0MzsJCQljYV9vcHMtJmd0O3Rzb19zZWdzKHNrLCBtc3Nfbm93KSA6CiYjNDM7CQkJdGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdywKJiM0MzsJCQkJCSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLSZndDtpcHY0LnN5c2N0bF90Y3BfbWluX3Rzb19zZWdzKSk7CiYjNDM7CXJldHVybiBjbGFtcF90KHUzMiwgdHNvX3NlZ3MsIDEsIHNrLSZndDtza19nc29fbWF4X3NlZ3MpOwogfQogCiAvKiBSZXR1cm5zIHRoZSBwb3J0aW9uIG9mIHNrYiB3aGljaCBjYW4gYmUgc2VudCByaWdodCBhd2F5ICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmMKaW5kZXggMGEzZTlkMzViZjZmMC4uNTgyNjJlNDkwMzM2NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYwpAQCAtMTAsNyAmIzQzOzEwLDcgQEAgZXh0ZXJuIHUzMiBiYnJfc25kYnVmX2V4cGFuZChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTsKIGV4dGVybiB1MzIgYmJyX3VuZG9fY3duZChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTsKIGV4dGVybiB2b2lkIGJicl9jd25kX2V2ZW50X3R4X3N0YXJ0KHN0cnVjdCBzb2NrICpzaykgX19rc3ltOwogZXh0ZXJuIHUzMiBiYnJfc3N0aHJlc2goc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07Ci1leHRlcm4gdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07CiYjNDM7ZXh0ZXJuIHUzMiBiYnJfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdykgX19rc3ltOwogZXh0ZXJuIHZvaWQgYmJyX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIHU4IG5ld19zdGF0ZSkgX19rc3ltOwogCiBleHRlcm4gdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaykgX19rc3ltOwpAQCAtOTAsOSAmIzQzOzkwLDkgQEAgdTMyIEJQRl9QUk9HKHNzdGhyZXNoLCBzdHJ1Y3Qgc29jayAqc2spCiB9CiAKIFNFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKLXUzMiBCUEZfUFJPRyhtaW5fdHNvX3NlZ3MsIHN0cnVjdCBzb2NrICpzaykKJiM0Mzt1MzIgQlBGX1BST0codHNvX3NlZ3MsIHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpCiB7Ci0JcmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spOwomIzQzOwlyZXR1cm4gYmJyX3Rzb19zZWdzKHNrLCBtc3Nfbm93KTsKIH0KIAogU0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQpAQCAtMTIwLDcgJiM0MzsxMjAsNyBAQCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9jYV9rZnVuYyA9IHsKIAkuY3duZF9ldmVudAk9ICh2b2lkICopY3duZF9ldmVudCwKIAkuY3duZF9ldmVudF90eF9zdGFydCA9ICh2b2lkICopY3duZF9ldmVudF90eF9zdGFydCwKIAkuc3N0aHJlc2gJPSAodm9pZCAqKXNzdGhyZXNoLAotCS5taW5fdHNvX3NlZ3MJPSAodm9pZCAqKW1pbl90c29fc2VncywKJiM0MzsJLnRzb19zZWdzCT0gKHZvaWQgKil0c29fc2VncywKIAkuc2V0X3N0YXRlCT0gKHZvaWQgKilzZXRfc3RhdGUsCiAJLnBrdHNfYWNrZWQgICAgID0gKHZvaWQgKilwa3RzX2Fja2VkLAogCS5uYW1lCQk9ICYjMzQ7dGNwX2NhX2tmdW5jJiMzNDssCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUU08gU2VnbWVudCBDb3VudCBhbmQgQlBGIEludGVncmF0aW9uKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgcmV2YW1wZWQgaG93IHRoZSBUU08gc2VnbWVudCBjb3VudCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBzdHJ1Y3R1cmUuIEluc3RlYWQgb2YgYSBgbWluX3Rzb19zZWdzYCBjYWxsYmFjaywgd2Ugbm93IGhhdmUgYSBgdHNvX3NlZ3NgIGNhbGxiYWNrIHRoYXQgdGFrZXMgdGhlIHNvY2tldCAoYHNrYCkgYW5kIHRoZSBjdXJyZW50IE1heGltdW0gU2VnbWVudCBTaXplIChgbXNzX25vd2ApIGFzIGlucHV0IGFuZCBkaXJlY3RseSByZXR1cm5zIHRoZSBUU08gc2VnbWVudCBjb3VudC4gVGhhdCYjMzk7cyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCBpbiB0aGUgaW50ZXJmYWNlLCBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtcywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGFyZSBCUEYtYmFzZWQuCgpBbHNvLCBleHBvcnRpbmcgYHRjcF90c29fYXV0b3NpemVgIGFzIGJvdGggYSBCUEYga2Z1bmMgYW5kIGEgcmVndWxhciBzeW1ib2wgaXMgaW50ZXJlc3RpbmcuIFRoYXQgb3BlbnMgdXAgc29tZSBwb3NzaWJpbGl0aWVzIGZvciB1c2Vyc3BhY2UgY29udHJvbCBvciBkeW5hbWljIGFkanVzdG1lbnRzLCB3aGljaCBjb3VsZCBiZSB1c2VmdWwuIFRoZSB1cGRhdGVzIHRvIHRoZSBCUEYgVENQIGNvbmdlc3Rpb24gY29udHJvbCBgc3RydWN0X29wc2AgYW5kIHRoZSBCQlIgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBhcmUgZXhwZWN0ZWQsIHNpbmNlIHRoZXJlJiMzOTtzIGEgbmV3IGludGVyZmFjZS4gTm93IEkgaGF2ZSB0byBsb29rIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGF0LgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgY2hhbmdlcyBhcmUgZ29pbmcgdG8gYmUgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMuIFRoZSBpbmNsdWRlZCBmaWxlczogYGluY2x1ZGUvbmV0L3RjcC5oYCwgYG5ldC9pcHY0L2JwZl90Y3BfY2EuY2AsIGBuZXQvaXB2NC90Y3BfYmJyLmNgLCBgbmV0L2lwdjQvdGNwX291dHB1dC5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmNgLiBJIGhhdmUgdG8gZGlnIGludG8gdGhvc2UgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobXMgaGF2ZSBiZWVuIGNoYW5nZWQuCgpTbywgSeKAmWxsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGBuZXQvaXB2NC90Y3Bfb3V0cHV0LmNgIHRvIHNlZSBob3cgaXQgdXNlcyB0aGUgbmV3IGB0c29fc2VncygpYCBhbmQgdGhlbiBsb29rIGF0IHRoZSBjaGFuZ2VzIHRvIHRoZSBCQlIgYW5kIEJQRiBjb25nZXN0aW9uIGNvbnRyb2wgaW1wbGVtZW50YXRpb25zLiBJJiMzOTtsbCBwcm9iYWJseSB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLCBhcyB3ZWxsIGFzIHRvIGxvb2sgZm9yIGNvbmZpZ3MgYW5kIHRoZSBhZmZlY3RlZCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3Rzb19hdXRvc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2JwZl90Y3BfY2EuYz0xOTY9QlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF9jb25nX2F2b2lkX2FpKVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjE5NzpCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Rzb19hdXRvc2l6ZSlcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xOTgtQlRGX0tGVU5DU19FTkQoYnBmX3RjcF9jYV9jaGVja19rZnVuY19pZHMpXG4tLVxubmV0L2lwdjQvdGNwLmM9OTU3PXN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3htaXRfc2l6ZV9nb2FsKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3csXG4tLVxubmV0L2lwdjQvdGNwLmMtOTY1LVxubmV0L2lwdjQvdGNwLmM6OTY2Olx0LyogTm90ZSA6IHRjcF90c29fYXV0b3NpemUoKSB3aWxsIGV2ZW50dWFsbHkgc3BsaXQgdGhpcyBsYXRlciAqL1xubmV0L2lwdjQvdGNwLmMtOTY3LVx0bmV3X3NpemVfZ29hbCA9IHRjcF9ib3VuZF90b19oYWxmX3duZCh0cCwgc2stXHUwMDNlc2tfZ3NvX21heF9zaXplKTtcbi0tXG5uZXQvaXB2NC90Y3BfYmJyLmM9MzA1PV9fYnBmX2tmdW5jIHN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXG4tLVxubmV0L2lwdjQvdGNwX2Jici5jLTMwOC1cdFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xubmV0L2lwdjQvdGNwX2Jici5jOjMwOTpcdHJldHVybiB0Y3BfdHNvX2F1dG9zaXplKHNrLCBtc3Nfbm93LCBiYnJfbWluX3Rzb19zZWdzKHNrKSk7XG5uZXQvaXB2NC90Y3BfYmJyLmMtMzEwLX1cbi0tXG5uZXQvaXB2NC90Y3BfYmJyLmM9MzEyPXN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzX2dvYWwoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYy0zMTYtXG5uZXQvaXB2NC90Y3BfYmJyLmM6MzE3Olx0LyogU29ydCBvZiB0Y3BfdHNvX2F1dG9zaXplKCkgYnV0IGlnbm9yaW5nXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzE4LVx0ICogZHJpdmVyIHByb3ZpZGVkIHNrX2dzb19tYXhfc2l6ZS5cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjIzND1zdGF0aWMgYm9vbCB0Y3BfbmFnbGVfY2hlY2soYm9vbCBwYXJ0aWFsLCBjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjU5LSAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNjA6X19icGZfa2Z1bmMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjYxLVx0XHRcdFx0IGludCBtaW5fdHNvX3NlZ3MpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNzktfVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyODA6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3Rzb19hdXRvc2l6ZSk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI4MS1cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjI4NT1zdGF0aWMgdTMyIHRjcF90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93KVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjkxLVx0XHRcdGNhX29wcy1cdTAwM2V0c29fc2VncyhzaywgbXNzX25vdykgOlxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyOTI6XHRcdFx0dGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjkzLVx0XHRcdFx0XHQgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfbWluX3Rzb19zZWdzKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQlBGIGFuZCBUQ1AgQ29uZ2VzdGlvbiBDb250cm9sIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9mIGEgY291cGxlIG9mIEJQRiBhbmQgVENQIGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGVzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHNlZSB3aGF0IEtjb25maWcgb3B0aW9ucyBzcGVjaWZpY2FsbHkgcmVsYXRlIHRvIGBicGZfdGNwX2NhLmNgIGFuZCBgdGNwX2Jici5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZmVhdHVyZXMgdGhleSByZWx5IG9uLCBhbmQgd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkIHRvIGluY2x1ZGUgdGhlbSBpbiBhIGtlcm5lbCBidWlsZC4gVG8gZG8gdGhhdCwgSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHJlbGV2YW50IGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBtb2R1bGVzLiBIb3BlZnVsbHksIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFybHkgbGFpZCBvdXQgdGhlcmUuIFRpbWUgdG8gZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RDUF9DT05HX0JCUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NjQ5PWNvbmZpZyBUQ1BfQ09OR19DREdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTY2NS1cbm5ldC9pcHY0L0tjb25maWc6NjY2OmNvbmZpZyBUQ1BfQ09OR19CQlJcbm5ldC9pcHY0L0tjb25maWctNjY3LVx0dHJpc3RhdGUgXCYjMzQ7QkJSIFRDUFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9NjgxPWNob2ljZVxuLS1cbm5ldC9pcHY0L0tjb25maWctNzE1LVx0Y29uZmlnIERFRkFVTFRfQkJSXG5uZXQvaXB2NC9LY29uZmlnOjcxNjpcdFx0Ym9vbCBcJiMzNDtCQlJcJiMzNDsgaWYgVENQX0NPTkdfQkJSPXlcbm5ldC9pcHY0L0tjb25maWctNzE3LVxuLS1cbm5ldC9pcHY0L01ha2VmaWxlPTQ2PW9iai0kKENPTkZJR19JTkVUX1JBV19ESUFHKSAmIzQzOz0gcmF3X2RpYWcub1xubmV0L2lwdjQvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX1RDUF9DT05HX0JCUikgJiM0Mzs9IHRjcF9iYnIub1xubmV0L2lwdjQvTWFrZWZpbGUtNDgtb2JqLSQoQ09ORklHX1RDUF9DT05HX0JJQykgJiM0Mzs9IHRjcF9iaWMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MTEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFRDUCBDb25nZXN0aW9uIENvbnRyb2wgSW5zdHJ1bWVudGF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gd2hlcmUgdGhlIEJQRi1iYXNlZCBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIHByb2JlcyBhcmUgZGVmaW5lZCBhbmQgY29uZmlndXJlZC4gSSYjMzk7dmUgYWxyZWFkeSBnb3QgYSBnb29kIGdyYXNwLCBidXQgbGV0JiMzOTtzIGJlIHRob3JvdWdoLiBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4cGxpY2l0bHkgY2hlY2tpbmcgYG5ldC9pcHY0L2JwZl90Y3BfY2EuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBCUEYtYmFzZWQgY29uZ2VzdGlvbiBjb250cm9sIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gVGhlbiwgZm9yIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBjb21waWxlLXRpbWUgb3B0aW9ucywgaXQmIzM5O3MgZXNzZW50aWFsIHRvIGxvb2sgYXQgYG5ldC9pcHY0L01ha2VmaWxlYCBhbmQgYG5ldC9pcHY0L0tjb25maWdgLiBUaGVzZSB3aWxsIHJldmVhbCBob3cgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0gYW5kIHdoYXQgY29udHJvbHMgaXRzIGluY2x1c2lvbiBvciBleGNsdXNpb24gYmFzZWQgb24gdXNlciBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSwgaW5jbHVkaW5nIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXNwZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdGNwX2NhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9NzE9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcbm5ldC9pcHY0L01ha2VmaWxlOjcyOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl90Y3BfY2Eub1xubmV0L2lwdjQvTWFrZWZpbGUtNzMtZW5kaWZcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MTk9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdGNwX2Nvbmdlc3Rpb25fb3BzX3R5cGU7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjAtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjE6c3RhdGljIGludCBicGZfdGNwX2NhX2luaXQoc3RydWN0IGJ0ZiAqYnRmKVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyLXtcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtNDMtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6NDQ6c3RhdGljIGJvb2wgYnBmX3RjcF9jYV9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtNDUtXHRcdFx0XHQgICAgICAgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtNjAtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6NjE6c3RhdGljIGludCBicGZfdGNwX2NhX2J0Zl9zdHJ1Y3RfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtNjItXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTEyMT1CUEZfQ0FMTF8yKGJwZl90Y3Bfc2VuZF9hY2ssIHN0cnVjdCB0Y3Bfc29jayAqLCB0cCwgdTMyLCByY3Zfbnh0KVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTEyMi17XG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MTIzOlx0LyogYnBmX3RjcF9jYSBwcm9nIGNhbm5vdCBoYXZlIE5VTEwgdHAgKi9cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xMjQtXHRfX3RjcF9zZW5kX2Fjaygoc3RydWN0IHNvY2sgKil0cCwgcmN2X254dCwgMCk7XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTE1MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoxNTI6YnBmX3RjcF9jYV9nZXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMTUzLVx0XHRcdCAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xOTAtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MTkxOkJURl9LRlVOQ1NfU1RBUlQoYnBmX3RjcF9jYV9jaGVja19rZnVuY19pZHMpXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMTkyLUJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfcmVub19zc3RocmVzaClcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MTk3PUJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfdHNvX2F1dG9zaXplKVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjE5ODpCVEZfS0ZVTkNTX0VORChicGZfdGNwX2NhX2NoZWNrX2tmdW5jX2lkcylcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xOTktXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjAwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfdGNwX2NhX2tmdW5jX3NldCA9IHtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMDEtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMDI6XHQuc2V0ICAgPSBcdTAwMjZicGZfdGNwX2NhX2NoZWNrX2tmdW5jX2lkcyxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMDMtfTtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMDQtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjA1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfdGNwX2NhX3ZlcmlmaWVyX29wcyA9IHtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMDY6XHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBicGZfdGNwX2NhX2dldF9mdW5jX3Byb3RvLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIwNzpcdC5pc192YWxpZF9hY2Nlc3NcdD0gYnBmX3RjcF9jYV9pc192YWxpZF9hY2Nlc3MsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjA4Olx0LmJ0Zl9zdHJ1Y3RfYWNjZXNzXHQ9IGJwZl90Y3BfY2FfYnRmX3N0cnVjdF9hY2Nlc3MsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjA5LX07XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjEwLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIxMTpzdGF0aWMgaW50IGJwZl90Y3BfY2FfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIxMi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjM4LVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIzOTpzdGF0aWMgaW50IGJwZl90Y3BfY2FfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjQwLXtcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjQzLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI0NDpzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3VucmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjQ1LXtcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjQ4LVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI0OTpzdGF0aWMgaW50IGJwZl90Y3BfY2FfdXBkYXRlKHZvaWQgKmtkYXRhLCB2b2lkICpvbGRfa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaylcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNTAte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNTMtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjU0OnN0YXRpYyBpbnQgYnBmX3RjcF9jYV92YWxpZGF0ZSh2b2lkICprZGF0YSlcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNTUte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNTgtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjU5OnN0YXRpYyB1MzIgYnBmX3RjcF9jYV9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjYwLXtcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjYzLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI2NDpzdGF0aWMgdm9pZCBicGZfdGNwX2NhX2NvbmdfYXZvaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCB1MzIgYWNrZWQpXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjY1LXtcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjY3LVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI2ODpzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIHU4IG5ld19zdGF0ZSlcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNjkte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNzEtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjcyOnN0YXRpYyB2b2lkIGJwZl90Y3BfY2FfY3duZF9ldmVudChzdHJ1Y3Qgc29jayAqc2ssIGVudW0gdGNwX2NhX2V2ZW50IGV2KVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI3My17XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI3NS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyNzY6c3RhdGljIHZvaWQgYnBmX3RjcF9jYV9jd25kX2V2ZW50X3R4X3N0YXJ0KHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNzcte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNzktXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjgwOnN0YXRpYyB2b2lkIGJwZl90Y3BfY2FfaW5fYWNrX2V2ZW50KHN0cnVjdCBzb2NrICpzaywgdTMyIGZsYWdzKVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI4MS17XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI4My1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyODQ6c3RhdGljIHZvaWQgYnBmX3RjcF9jYV9wa3RzX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBsZSlcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yODUte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yODctXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6Mjg4OnN0YXRpYyB1MzIgYnBmX3RjcF9jYV90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI4OS17XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI5Mi1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyOTM6c3RhdGljIHZvaWQgYnBmX3RjcF9jYV9jb25nX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCBpbnQgZmxhZyxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yOTQtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHJhdGVfc2FtcGxlICpycylcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjk3LVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI5ODpzdGF0aWMgdTMyIGJwZl90Y3BfY2FfdW5kb19jd25kKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yOTkte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMDItXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzAzOnN0YXRpYyB1MzIgYnBmX3RjcF9jYV9zbmRidWZfZXhwYW5kKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMDQte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMDctXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzA4OnN0YXRpYyB2b2lkIF9fYnBmX3RjcF9jYV9pbml0KHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMDkte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMTEtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzEyOnN0YXRpYyB2b2lkIF9fYnBmX3RjcF9jYV9yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMTMte1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYz0zMTY9c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgX19icGZfb3BzX3RjcF9jb25nZXN0aW9uX29wcyA9IHtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMTc6XHQuc3N0aHJlc2ggPSBicGZfdGNwX2NhX3NzdGhyZXNoLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMxODpcdC5jb25nX2F2b2lkID0gYnBmX3RjcF9jYV9jb25nX2F2b2lkLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMxOTpcdC5zZXRfc3RhdGUgPSBicGZfdGNwX2NhX3NldF9zdGF0ZSxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMjA6XHQuY3duZF9ldmVudCA9IGJwZl90Y3BfY2FfY3duZF9ldmVudCxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMjE6XHQuY3duZF9ldmVudF90eF9zdGFydCA9IGJwZl90Y3BfY2FfY3duZF9ldmVudF90eF9zdGFydCxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMjI6XHQuaW5fYWNrX2V2ZW50ID0gYnBmX3RjcF9jYV9pbl9hY2tfZXZlbnQsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzIzOlx0LnBrdHNfYWNrZWQgPSBicGZfdGNwX2NhX3BrdHNfYWNrZWQsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzI0Olx0LnRzb19zZWdzID0gYnBmX3RjcF9jYV90c29fc2Vncyxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMjU6XHQuY29uZ19jb250cm9sID0gYnBmX3RjcF9jYV9jb25nX2NvbnRyb2wsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzI2Olx0LnVuZG9fY3duZCA9IGJwZl90Y3BfY2FfdW5kb19jd25kLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMyNzpcdC5zbmRidWZfZXhwYW5kID0gYnBmX3RjcF9jYV9zbmRidWZfZXhwYW5kLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTMyOC1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMjk6XHQuaW5pdCA9IF9fYnBmX3RjcF9jYV9pbml0LFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMzMDpcdC5yZWxlYXNlID0gX19icGZfdGNwX2NhX3JlbGVhc2UsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzMxLX07XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTMzMz1zdGF0aWMgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIGJwZl90Y3BfY29uZ2VzdGlvbl9vcHMgPSB7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzM0Olx0LnZlcmlmaWVyX29wcyA9IFx1MDAyNmJwZl90Y3BfY2FfdmVyaWZpZXJfb3BzLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMzNTpcdC5yZWcgPSBicGZfdGNwX2NhX3JlZyxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMzY6XHQudW5yZWcgPSBicGZfdGNwX2NhX3VucmVnLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMzNzpcdC51cGRhdGUgPSBicGZfdGNwX2NhX3VwZGF0ZSxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMzg6XHQuaW5pdF9tZW1iZXIgPSBicGZfdGNwX2NhX2luaXRfbWVtYmVyLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMzOTpcdC5pbml0ID0gYnBmX3RjcF9jYV9pbml0LFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjM0MDpcdC52YWxpZGF0ZSA9IGJwZl90Y3BfY2FfdmFsaWRhdGUsXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQxLVx0Lm5hbWUgPSBcJiMzNDt0Y3BfY29uZ2VzdGlvbl9vcHNcJiMzNDssXG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTM0NS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozNDY6c3RhdGljIGludCBfX2luaXQgYnBmX3RjcF9jYV9rZnVuY19pbml0KHZvaWQpXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQ3LXtcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQ5LVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjM1MDpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZicGZfdGNwX2NhX2tmdW5jX3NldCk7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzUxLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKFx1MDAyNmJwZl90Y3BfY29uZ2VzdGlvbl9vcHMsIHRjcF9jb25nZXN0aW9uX29wcyk7XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTM1NC19XG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzU1OmxhdGVfaW5pdGNhbGwoYnBmX3RjcF9jYV9rZnVuY19pbml0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY1NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFRDUCBUU08gU2VnbWVudCBTaXplIERldGVybWluYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgVENQIG91dHB1dCBwYXRoLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIGB0Y3BfdHNvX3NlZ3NgIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgdGNwX3Rzb19hdXRvc2l6ZWAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgd2hlcmUgYHRjcF90c29fYXV0b3NpemVgIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIGxhcmdlciBUQ1Agb3V0cHV0IHByb2Nlc3MuIFdoZXJlIGFyZSB0aGUgZGVjaXNpb25zIGJlaW5nIG1hZGUgYmFzZWQgb24gdGhpcyB2YWx1ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGluZmx1ZW5jZXMgdGhlIG51bWJlciBvZiBzZWdtZW50cyB3ZSBlbmQgdXAgd2l0aC4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgZGl2aW5nIGludG8gdGhlIFRTTyAoVENQIFNlZ21lbnRhdGlvbiBPZmZsb2FkKSBjb2RlLCB3aGljaCBjb3VsZCBtZWFuIGxvb2tpbmcgYXQgaG93IHRoZSBoYXJkd2FyZSBpbnRlcmZhY2VzIHdpdGggdGhlIHNvZnR3YXJlIHNlZ21lbnRhdGlvbiwgdG9vLiBJIHN1c3BlY3QgYHRjcF90c29fc2Vnc2AgcHJvYmFibHkgaG9sZHMgYSBjYWxjdWxhdGVkIHZhbHVlLCBwZXJoYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWdtZW50cyB0aGUgTklDIGNhbiBoYW5kbGUgZWZmaWNpZW50bHksIG9yIG1heWJlIGV2ZW4gdGhlICphY3R1YWwqIG51bWJlciBhZnRlciBjb25zaWRlcmF0aW9ucyBvZiBNVFUsIGhlYWRlciBzaXplcywgYW5kIE1TUy4gVWx0aW1hdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gb3B0aW1pemUgVENQIHBlcmZvcm1hbmNlLCBzbyBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGludGVyYWN0aW9uIGlzIGNydWNpYWwuIFRoaXMgd2lsbCBoZWxwIG1lIGRpYWdub3NlIHRocm91Z2hwdXQgYm90dGxlbmVja3MgYW5kIGZpbmUtdHVuZSBwYXJhbWV0ZXJzIGZvciBvcHRpbWFsIHRyYW5zZmVyIGNoYXJhY3RlcmlzdGljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3Rzb19zZWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX291dHB1dC5jPTIyODA9RVhQT1JUX1NZTUJPTF9HUEwodGNwX3Rzb19hdXRvc2l6ZSk7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyODQtICovXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI4NTpzdGF0aWMgdTMyIHRjcF90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93KVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyODYte1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yOTcyPXN0YXRpYyBib29sIHRjcF93cml0ZV94bWl0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csIGludCBub25hZ2xlLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yOTk5LVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjMwMDA6XHRtYXhfc2VncyA9IHRjcF90c29fc2VncyhzaywgbXNzX25vdyk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzAwMS1cdHdoaWxlICgoc2tiID0gdGNwX3NlbmRfaGVhZChzaykpKSB7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM3MzM9dm9pZCB0Y3BfeG1pdF9yZXRyYW5zbWl0X3F1ZXVlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzc0Ni1cdHNrYiA9IHRwLVx1MDAzZXJldHJhbnNtaXRfc2tiX2hpbnQgPzogcnR4X2hlYWQ7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6Mzc0NzpcdG1heF9zZWdzID0gdGNwX3Rzb19zZWdzKHNrLCB0Y3BfY3VycmVudF9tc3Moc2spKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zNzQ4LVx0c2tiX3JidHJlZV93YWxrX2Zyb20oc2tiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzY4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkV4cGxvcmluZyBDb25nZXN0aW9uIENvbnRyb2wgQWxnb3JpdGhtIFNwYWNlKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgcHJvYmxlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSBvZiBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtcyBiZXR0ZXIsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGlzIGBtaW5fdHNvX3NlZ3NgIHZhcmlhYmxlLiBJJiMzOTttIHdvbmRlcmluZyBpZiBhbnkgb2YgdGhlIG90aGVyIGFsZ29yaXRobXMgb3V0IHRoZXJlLCBiZXlvbmQgdGhlIG9uZXMgSSYjMzk7bSBpbW1lZGlhdGVseSBmYW1pbGlhciB3aXRoLCBleHBsaWNpdGx5IGRlYWx0IHdpdGggc29tZXRoaW5nIGxpa2UgdGhpcz8gRGlkIHRoZXkgaGF2ZSBhIHNpbWlsYXIgcGFyYW1ldGVyLCBvciB3ZXJlIHRoZXkgc3VidGx5IGFmZmVjdGVkIGJ5IHRoZSBudW1iZXIgb2Ygc2VnbWVudHMgdXNlZCBpbiBUU08gd2l0aG91dCBleHBsaWNpdGx5IG5hbWluZyBhIHR1bmluZyBwYXJhbWV0ZXI/IFRoYXQmIzM5O3MgdGhlIHJlYWwgcXVlc3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgcmVzZWFyY2ggc2F5cy4uLiBJIG5lZWQgYSBtb3JlIGNvbXByZWhlbnNpdmUgdmlldyBoZXJlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbGl0ZXJhdHVyZSBhbmQgc2VlIHdoYXQgZW1lcmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWluX3Rzb19zZWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM9NjI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XG4tLVxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtMTM5My1cdHtcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jOjEzOTQ6XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDt0Y3BfbWluX3Rzb19zZWdzXCYjMzQ7LFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTM5NTpcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5pcHY0LnN5c2N0bF90Y3BfbWluX3Rzb19zZWdzLFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtMTM5Ni1cdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1OCksXG4tLVxubmV0L2lwdjQvdGNwX2Jici5jPTI4Nz1zdGF0aWMgdm9pZCBiYnJfc2V0X3BhY2luZ19yYXRlKHN0cnVjdCBzb2NrICpzaywgdTMyIGJ3LCBpbnQgZ2Fpbilcbi0tXG5uZXQvaXB2NC90Y3BfYmJyLmMtMjk4LVxubmV0L2lwdjQvdGNwX2Jici5jOjI5OTovKiBvdmVycmlkZSBzeXNjdGxfdGNwX21pbl90c29fc2VncyAqL1xubmV0L2lwdjQvdGNwX2Jici5jOjMwMDpzdGF0aWMgdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2Jici5jLTMwMS17XG4tLVxubmV0L2lwdjQvdGNwX2Jici5jPTMwNT1fX2JwZl9rZnVuYyBzdGF0aWMgdTMyIGJicl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KVxuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYy0zMDctXHRpZiAodW5saWtlbHkoIW1zc19ub3cpKVxubmV0L2lwdjQvdGNwX2Jici5jOjMwODpcdFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xubmV0L2lwdjQvdGNwX2Jici5jOjMwOTpcdHJldHVybiB0Y3BfdHNvX2F1dG9zaXplKHNrLCBtc3Nfbm93LCBiYnJfbWluX3Rzb19zZWdzKHNrKSk7XG5uZXQvaXB2NC90Y3BfYmJyLmMtMzEwLX1cbi0tXG5uZXQvaXB2NC90Y3BfYmJyLmM9MzEyPXN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzX2dvYWwoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYy0zMjItXHRcdCAgICAgIEdTT19MRUdBQ1lfTUFYX1NJWkUgLSAxIC0gTUFYX1RDUF9IRUFERVIpO1xubmV0L2lwdjQvdGNwX2Jici5jOjMyMzpcdHNlZ3MgPSBtYXhfdCh1MzIsIGJ5dGVzIC8gdHAtXHUwMDNlbXNzX2NhY2hlLCBiYnJfbWluX3Rzb19zZWdzKHNrKSk7XG5uZXQvaXB2NC90Y3BfYmJyLmMtMzI0LVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzQzOD1zdGF0aWMgaW50IF9fbmV0X2luaXQgdGNwX3NrX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzQ5NS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzQ5NjpcdG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfbWluX3Rzb19zZWdzID0gMjtcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzQ5Ny1cdG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfdHNvX3J0dF9sb2cgPSA5OyAgLyogMl45ID0gNTEyIHVzZWMgKi9cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjIzND1zdGF0aWMgYm9vbCB0Y3BfbmFnbGVfY2hlY2soYm9vbCBwYXJ0aWFsLCBjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjU1LSAqXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI1NjogKiBUaGUgbWluX3Rzb19zZWdzIGlzIGZsb29yZWQgdG8gMSB0byBhdm9pZCBzdXJwcmlzaW5nIGNvbnZlcnNpb24uIEFsc28sXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI1Ny0gKiBCUEYgY2FsbGVycyBtYXkgcGFzcyBtc3Nfbm93ID09IDAuIEluIHRoYXQgY2FzZSB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGVcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjU4OiAqIHNhbml0aXplZCBtaW5fdHNvX3NlZ3MgdmFsdWUgYW5kIHNraXBzIGF1dG9zaXppbmcuXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI1OS0gKi9cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMjYwPV9fYnBmX2tmdW5jIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI2MTpcdFx0XHRcdCBpbnQgbWluX3Rzb19zZWdzKVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNjIte1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNjM6XHR1MzIgbWluX3RzbyA9IG1heChtaW5fdHNvX3NlZ3MsIDEpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNjQtXHR1bnNpZ25lZCBsb25nIGJ5dGVzO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMjg1PXN0YXRpYyB1MzIgdGNwX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3cpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyOTItXHRcdFx0dGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjkzOlx0XHRcdFx0XHQgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfbWluX3Rzb19zZWdzKSk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI5NC1cdHJldHVybiBjbGFtcF90KHUzMiwgdHNvX3NlZ3MsIDEsIHNrLVx1MDAzZXNrX2dzb19tYXhfc2Vncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXM6IFRTTyBTZWdtZW50IFRhcmdldCBDb3VudCBpbiBUQ1AgQ29uZ2VzdGlvbiBDb250cm9sKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgY2hhbmdlcyByZWxhdGVkIHRvIGhvdyBDb25nZXN0aW9uIENvbnRyb2wgKENBKSBhbGdvcml0aG1zLCBpbmNsdWRpbmcgQkJSIGFuZCB0aG9zZSB1c2luZyBCUEYgc3RydWN0X29wcywgc3BlY2lmeSB0aGUgdGFyZ2V0IGNvdW50IGZvciBUU08gc2VnbWVudHMgdmlhIGB0c29fc2Vnc2AgaW4gYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgLiBOb3RhYmx5LCBgdGNwX3Rzb19hdXRvc2l6ZWAgaGFzIGJlZW4gbW9kaWZpZWQgYW5kIGV4cG9ydGVkIGFzIGEga2Z1bmMgYW5kIEdQTCBzeW1ib2wuIFRoaXMgaGl0cyBUQ1Agb3V0cHV0IGxvZ2ljIGFuZCB0aGUgQlBGIFRDUCBDQSBtZWNoYW5pc20gYW5kIEJCUi4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmc/CgpMZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIGNoZWNrbGlzdDogTm8gY2hhbmdlcyB0byBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBvciBjb21tZW50cywgc28gaXQmIzM5O3MgYWN0dWFsIEMgY29kZS4gTm90IGEgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlLCBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwuIE5vIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3Jvcy4gSXQgKmlzKiByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgYmVjYXVzZSBpdCYjMzk7cyBjb3JlIG5ldHdvcmtpbmcsIFRDUCwgYW5kIEJQRi4gQW5kIGl0JiMzOTtzIG5vdCB2ZW5kb3Itc3BlY2lmaWMgb3IgZHJpdmVyIHRlYXJkb3duLiBTbywgV29ydGhGdXp6aW5nID0gVHJ1ZS4KCk5vdywgZm9yIGBGb2N1c1N5bWJvbHNgLiBXZSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBpbXBvcnRhbnQgZW50cnkgcG9pbnRzLiBgdGNwX3Rzb19hdXRvc2l6ZWAgaXMgYSBub24tc3RhdGljLCBleHBvcnRlZCBmdW5jdGlvbiAoa2Z1bmMpLiBgYmJyX3Rzb19zZWdzYCBpcyBzdGF0aWMgYnV0IHJlZ2lzdGVyZWQgYXMgYSBrZnVuYywgd2hpbGUgYGJwZl90Y3BfY2FfdHNvX3NlZ3NgIGlzIGFsc28gc3RhdGljLiBTcGVjaWZpY2FsbHksIGB0Y3BfdHNvX2F1dG9zaXplYCBsb29rcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGBfX2JwZl9rZnVuYyB1MzIgdGNwX3Rzb19hdXRvc2l6ZSguLi4pYCBhbmQgYEVYUE9SVF9TWU1CT0xfR1BMKHRjcF90c29fYXV0b3NpemUpYC4gVGhpcyBtYWtlcyBpdCBhIGdyZWF0IGNhbmRpZGF0ZS4gT3RoZXIgc3ltYm9scyBpbmNsdWRlOgotIGB0Y3BfdHNvX2F1dG9zaXplYAotIGBicGZfdGNwX2NhX3Rzb19zZWdzYCAoc3RhdGljKQotIGBiYnJfdHNvX3NlZ3NgIChzdGF0aWMsIGtmdW5jKQotIGB0Y3BfdHNvX3NlZ3NgIChzdGF0aWMpCgpCYXNlZCBvbiB0aGUgcnVsZXMsIGB0Y3BfdHNvX2F1dG9zaXplYCBpcyB0aGUgY2xlYXIgd2lubmVyIGZvciBgRm9jdXNTeW1ib2xzYCwgYXMgaXQmIzM5O3Mgbm9uLXN0YXRpYywgZXhwb3J0ZWQsIGFuZCBkZWZpbmVkIGluIGBuZXQvaXB2NC90Y3Bfb3V0cHV0LmNgLCBzbyBpdCYjMzk7cyB1bmxpa2VseSB0byBiZSBpbmxpbmVkLgoKRmluYWxseSwgZm9yIGBFbmFibGVDb25maWdzYCwgd2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIENsZWFybHksIGBJTkVUYCAob3IgYE5FVGApIGZvciBUQ1AvSVB2NCwgYFRDUF9DT05HX0JCUmAgZm9yIEJCUiBzdXBwb3J0LCBhbmQgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGZvciBCUEYgVENQIENBL3N0cnVjdF9vcHMgYXJlIGFsbCBlc3NlbnRpYWwuIFdlIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgYnBmX3RjcF9jYS5vYCBhbmQgYHRjcF9iYnIub2AganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHRjcF9icGYub1xubmV0L2lwdjQvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdWRwX2JwZi5vXG5uZXQvaXB2NC9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfTkVUTEFCRUwpICYjNDM7PSBjaXBzb19pcHY0Lm9cbi0tXG5uZXQvaXB2NC9NYWtlZmlsZT03MT1pZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxubmV0L2lwdjQvTWFrZWZpbGU6NzI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3RjcF9jYS5vXG5uZXQvaXB2NC9NYWtlZmlsZS03My1lbmRpZlxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz0xNzg9RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTgwOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3RjcF9icGYuYy0xODEtc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTc2OT12b2lkIHRjcF9icGZfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc3NS19XG5uZXQvaXB2NC90Y3BfYnBmLmM6Nzc2OiNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTI4NTU9c3RhdGljIGludCB0Y3A0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjg3OS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6Mjg4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTI4ODEtdW5pb24gYnBmX3RjcF9pdGVyX2JhdGNoX2l0ZW0ge1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzI5Mz1zdGF0aWMgdW5zaWduZWQgc2hvcnQgc2VxX2ZpbGVfZmFtaWx5KGNvbnN0IHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzI5Ni1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzI5NzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMyOTgtXHQvKiBJdGVyYXRlZCBmcm9tIGJwZl9pdGVyLiAgTGV0IHRoZSBicGYgcHJvZyB0byBmaWx0ZXIgaW5zdGVhZC4gKi9cbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDg9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3Mi1cdC5wdXRfcG9ydFx0XHQ9IGluZXRfcHV0X3BvcnQsXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzNzM6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzc0LVx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHRjcF9icGZfdXBkYXRlX3Byb3RvLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzU3MT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIF9fbmV0X2luaXRkYXRhIHRjcF9za19vcHMgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNTc2LVxubmV0L2lwdjQvdGNwX2lwdjQuYzozNTc3OiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM1NzgtREVGSU5FX0JQRl9JVEVSX0ZVTkModGNwLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTM2NTA9dm9pZCBfX2luaXQgdGNwX3Y0X2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM2NzQtXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjM2NzU6I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzY3Ni1cdGJwZl9pdGVyX3JlZ2lzdGVyKCk7XG4tLVxubmV0L2lwdjQvdWRwLmM9MzEzMj1zdHJ1Y3QgcHJvdG8gdWRwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdWRwLmMtMzE1Mi1cdC5wdXRfcG9ydFx0XHQ9IHVkcF9saWJfdW5oYXNoLFxubmV0L2lwdjQvdWRwLmM6MzE1MzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvaXB2NC91ZHAuYy0zMTU0LVx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHVkcF9icGZfdXBkYXRlX3Byb3RvLFxuLS1cbm5ldC9pcHY0L3VkcC5jPTMxNzE9c3RhdGljIGJvb2wgc2VxX3NrX21hdGNoKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdWRwLmMtMzE3OS1cbm5ldC9pcHY0L3VkcC5jOjMxODA6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2lwdjQvdWRwLmMtMzE4MS1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9pdGVyX3VkcF9zZXFfb3BzO1xuLS1cbm5ldC9pcHY0L3VkcC5jPTMyOTc9c3RhdGljIGludCB1ZHA0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY0L3VkcC5jLTMzMTItXG5uZXQvaXB2NC91ZHAuYzozMzEzOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3VkcC5jLTMzMTQtc3RydWN0IGJwZl9pdGVyX191ZHAge1xuLS1cbm5ldC9pcHY0L3VkcC5jPTM1ODY9c3RhdGljIHVuc2lnbmVkIHNob3J0IHNlcV9maWxlX2ZhbWlseShjb25zdCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbi0tXG5uZXQvaXB2NC91ZHAuYy0zNTg5LVxubmV0L2lwdjQvdWRwLmM6MzU5MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvaXB2NC91ZHAuYy0zNTkxLVx0LyogQlBGIGl0ZXJhdG9yOiBicGYgcHJvZ3JhbXMgdG8gZmlsdGVyIHNvY2tldHMuICovXG4tLVxubmV0L2lwdjQvdWRwLmM9MzgxND1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIF9fbmV0X2luaXRkYXRhIHVkcF9zeXNjdGxfb3BzID0ge1xuLS1cbm5ldC9pcHY0L3VkcC5jLTM4MTgtXG5uZXQvaXB2NC91ZHAuYzozODE5OiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG5uZXQvaXB2NC91ZHAuYy0zODIwLURFRklORV9CUEZfSVRFUl9GVU5DKHVkcCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4tLVxubmV0L2lwdjQvdWRwLmM9Mzg5Nz12b2lkIF9faW5pdCB1ZHBfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTM5MTAtXG5uZXQvaXB2NC91ZHAuYzozOTExOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG5uZXQvaXB2NC91ZHAuYy0zOTEyLVx0YnBmX2l0ZXJfcmVnaXN0ZXIoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5NTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOgoKKipEZWVwIERpdmUgb24gS2VybmVsIENvbmZpZ3VyYXRpb246IEJCUiBhbmQgQlBGKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGtlcm5lbCYjMzk7cyBjdXJyZW50IGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlIGJlZm9yZSBkaXZpbmcgaW50byBzcGVjaWZpYyBpc3N1ZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgZmV3IGNydWNpYWwgS2NvbmZpZyBvcHRpb25zOiBgVENQX0NPTkdfQkJSYCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuCgpgVENQX0NPTkdfQkJSYCwgdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBpbnRlcmVzdC4gSXMgQkJSIGVuYWJsZWQ/IElzIGl0IGV2ZW4gYXZhaWxhYmxlPyBUaGlzIGRpY3RhdGVzIGEgbG90IG9mIG15IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpZiBCQlIgaXMgaW4gdXNlIG9yIHBsYW5uZWQgZm9yLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdOKAmXMgc3VwcG9ydGVkIGFuZCBob3cgaXQmIzM5O3MgY3VycmVudGx5IGNvbmZpZ3VyZWQuIElmIGl0JiMzOTtzICpub3QqIGVuYWJsZWQsIHRoYXQmIzM5O3MgYSB3aG9sZSBvdGhlciB0aHJlYWQgb2YgaW5xdWlyeSB0byBleHBsb3JlIHRoZSByZWFzb25pbmcuIFBlcmhhcHMgaXQgd2FzIGludGVudGlvbmFsbHkgZGlzYWJsZWQgZHVlIHRvIGNvbXBhdGliaWxpdHksIHRlc3RpbmcsIG9yIHBlcmZvcm1hbmNlIGNvbmNlcm5zPyBPciBtYXliZSBpdCYjMzk7cyBqdXN0IHNpbXBseSBvdmVybG9va2VkLgoKTmV4dCB1cCBhcmUgdGhlIEJQRi1yZWxhdGVkIG9wdGlvbnMuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNhbiBvZmZlciBzb21lIG9mIHRoZSBtb3N0IGR5bmFtaWMgYW5kIHNvcGhpc3RpY2F0ZWQgbmV0d29yayBwZXJmb3JtYW5jZSBhbmFseXNpcyBhbmQgbWFuaXB1bGF0aW9uIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBrZWVuIHRvIGRldGVybWluZSB3aGV0aGVyIEJQRiBpcyBmdWxseSBpbnRlZ3JhdGVkIHdpdGggdGhlIHN5c3RlbS4gQ2hlY2tpbmcgb24gYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGVuc3VyZXMgdGhhdCB0aGUgdXNlci1zcGFjZSBwcm9ncmFtcyBjYW4gbGV2ZXJhZ2UgdGhlIEJQRiBmdW5jdGlvbmFsaXR5IGVmZmVjdGl2ZWx5LCBhbmQgdGhhdCBKdXN0LUluLVRpbWUgKEpJVCkgY29tcGlsYXRpb24gaXMgYWxzbyBhdmFpbGFibGUuIEFyZSB3ZSBnZXR0aW5nIHRoZSBmdWxsIHBvdGVudGlhbCBmcm9tIEJQRj8gT3IsIGlzIGl0IHJlc3RyaWN0ZWQgdG8gYSBzYWZlciwgbW9yZSBpbnRlcnByZXRpdmUgbW9kZT8gQW5kIGlmIGl0JiMzOTtzIGRpc2FibGVkLCB0aGF0IHNpZ25pZmljYW50bHkgbGltaXRzIHRoZSBwb3NzaWJpbGl0aWVzIGZvciBhZHZhbmNlZCB0cmFjaW5nLCBuZXR3b3JraW5nIHByb2dyYW1tYWJpbGl0eSwgYW5kIGVCUEYuCgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIHRha2UgYSBxdWljayBwdWxzZSBvZiB0aGUgc2l0dWF0aW9uLiBUaGlzIGluaXRpYWwgS2NvbmZpZyBjaGVjayBpcyBteSBjb21wYXNzLiBJdCBoZWxwcyBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLCBmb2N1c2luZyBvbiB0aG9zZSBmZWF0dXJlcyB0aGF0IHdpbGwgZWl0aGVyIGVuYWJsZSBvciBjb25zdHJhaW4gbXkgc3Vic2VxdWVudCBkaWFnbm9zdGljcyBhbmQgb3B0aW1pemF0aW9ucy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBkaWdnaW5nIGludG8gbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgYXBwbGljYXRpb24gYmVoYXZpb3IuIEl0JiMzOTtzIGEgcXVpY2sgdHJpYWdlIHN0ZXAgdGhhdCBoZWxwcyBtZSBwcmlvcml0aXplIG15IGRlZXBlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHRcbiA2NjE6XHRcdCAgRm9yIGZ1cnRoZXIgZGV0YWlscyBzZWU6XG4gNjYyOlx0XHQgICAgRC5BLiBIYXllcyBhbmQgRy4gQXJtaXRhZ2UuIFwmIzM0O1JldmlzaXRpbmcgVENQIGNvbmdlc3Rpb24gY29udHJvbCB1c2luZ1xuIDY2MzpcdFx0ICAgIGRlbGF5IGdyYWRpZW50cy5cJiMzNDsgSW4gTmV0d29ya2luZyAyMDExLiBQcmVwcmludDpcbiA2NjQ6XHRcdCAgICBodHRwOi8vY2FpYS5zd2luLmVkdS5hdS9jdi9kYWhheWVzL2NvbnRlbnQvbmV0d29ya2luZzIwMTEtY2RnLXByZXByaW50LnBkZlxuIDY2NTpcdFxuIDY2NjpcdGNvbmZpZyBUQ1BfQ09OR19CQlJcbiA2Njc6XHRcdHRyaXN0YXRlIFwmIzM0O0JCUiBUQ1BcJiMzNDtcbiA2Njg6XHRcdGRlZmF1bHQgblxuIDY2OTpcdFx0aGVscFxuIDY3MDpcdFxuIDY3MTpcdFx0ICBCQlIgKEJvdHRsZW5lY2sgQmFuZHdpZHRoIGFuZCBSVFQpIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgYWltcyB0b1xuIDY3MjpcdFx0ICBtYXhpbWl6ZSBuZXR3b3JrIHV0aWxpemF0aW9uIGFuZCBtaW5pbWl6ZSBxdWV1ZXMuIEl0IGJ1aWxkcyBhbiBleHBsaWNpdFxuIDY3MzpcdFx0ICBtb2RlbCBvZiB0aGUgYm90dGxlbmVjayBkZWxpdmVyeSByYXRlIGFuZCBwYXRoIHJvdW5kLXRyaXAgcHJvcGFnYXRpb25cbiA2NzQ6XHRcdCAgZGVsYXkuIEl0IHRvbGVyYXRlcyBwYWNrZXQgbG9zcyBhbmQgZGVsYXkgdW5yZWxhdGVkIHRvIGNvbmdlc3Rpb24uIEl0XG4gNjc1Olx0XHQgIGNhbiBvcGVyYXRlIG92ZXIgTEFOLCBXQU4sIGNlbGx1bGFyLCB3aWZpLCBvciBjYWJsZSBtb2RlbSBsaW5rcy4gSXQgY2FuXG4gNjc2Olx0XHQgIGNvZXhpc3Qgd2l0aCBmbG93cyB0aGF0IHVzZSBsb3NzLWJhc2VkIGNvbmdlc3Rpb24gY29udHJvbCwgYW5kIGNhblxuIDY3NzpcdFx0ICBvcGVyYXRlIHdpdGggc2hhbGxvdyBidWZmZXJzLCBkZWVwIGJ1ZmZlcnMsIGJ1ZmZlcmJsb2F0LCBwb2xpY2Vycywgb3JcbiA2Nzg6XHRcdCAgQVFNIHNjaGVtZXMgdGhhdCBkbyBub3QgcHJvdmlkZSBhIGRlbGF5IHNpZ25hbC4gSXQgcmVxdWlyZXMgdGhlIGZxXG4gNjc5Olx0XHQgIChcJiMzNDtGYWlyIFF1ZXVlXCYjMzQ7KSBwYWNpbmcgcGFja2V0IHNjaGVkdWxlci5cbiA2ODA6XHRcbiA2ODE6XHRjaG9pY2VcbiA2ODI6XHRcdHByb21wdCBcJiMzNDtEZWZhdWx0IFRDUCBjb25nZXN0aW9uIGNvbnRyb2xcJiMzNDtcbiA2ODM6XHRcdGRlZmF1bHQgREVGQVVMVF9DVUJJQ1xuIDY4NDpcdFx0aGVscFxuIDY4NTpcdFx0ICBTZWxlY3QgdGhlIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgdGhhdCB3aWxsIGJlIHVzZWQgYnkgZGVmYXVsdFxuIDY4NjpcdFx0ICBmb3IgYWxsIGNvbm5lY3Rpb25zLlxuIDY4NzpcdFxuIDY4ODpcdFx0Y29uZmlnIERFRkFVTFRfQklDXG4gNjg5Olx0XHRcdGJvb2wgXCYjMzQ7QmljXCYjMzQ7IGlmIFRDUF9DT05HX0JJQz15XG4gNjkwOlx0XG4gNjkxOlx0XHRjb25maWcgREVGQVVMVF9DVUJJQ1xuIDY5MjpcdFx0XHRib29sIFwmIzM0O0N1YmljXCYjMzQ7IGlmIFRDUF9DT05HX0NVQklDPXlcbiA2OTM6XHRcbiA2OTQ6XHRcdGNvbmZpZyBERUZBVUxUX0hUQ1BcbiA2OTU6XHRcdFx0Ym9vbCBcJiMzNDtIdGNwXCYjMzQ7IGlmIFRDUF9DT05HX0hUQ1A9eVxuIDY5NjpcdFxuIDY5NzpcdFx0Y29uZmlnIERFRkFVTFRfSFlCTEFcbiA2OTg6XHRcdFx0Ym9vbCBcJiMzNDtIeWJsYVwmIzM0OyBpZiBUQ1BfQ09OR19IWUJMQT15XG4gNjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTEwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQlBGIGFuZCBUQ1AgQ29uZ2VzdGlvbiBDb250cm9sIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBwdXp6bGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgdGhlIG5lY2Vzc2l0eSBhbmQgJiMzNDtzdGFuZGFyZC1uZXNzJiMzNDsgb2YgYENPTkZJR19JTkVUYC4gSSBzdXNwZWN0IGl0JiMzOTtzIGZ1bmRhbWVudGFsLCBidXQgbGV0JiMzOTtzIGNvbmZpcm0uIE5leHQsIEkgbmVlZCB0byB2ZXJpZnkgd2hpY2ggb2YgdGhlIHBvdGVudGlhbGx5IHJlbGF0ZWQgY29uZmlndXJhdGlvbnPigJRgSU5FVGAsIGBUQ1BfQ09OR19CQlJgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9KSVRg4oCUYXJlIGVpdGhlciByZXF1aXJlZCBvciBoaWdobHkgcmVjb21tZW5kZWQgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IEkmIzM5O20gYWZ0ZXIsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgQlBGLWJhc2VkIFRDUCBDb25nZXN0aW9uIEFsZ29yaXRobXMuIEkgc2hvdWxkIGFsc28gY2FzdCBhIHdpZGVyIG5ldDogYXJlIHRoZXJlICpvdGhlciogY3J1Y2lhbCBjb25maWdzIEkmIzM5O20gb3Zlcmxvb2tpbmcgZm9yIEJQRiYjMzk7cyBzdHJ1Y3Rfb3BzIG9yIGZvciBzdXBwb3J0aW5nIGBCUEZfVENQX0NBYD8KCkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSBhIHN0YWJsZSBhbmQgcGVyZm9ybWFudCBpbnRlZ3JhdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBLY29uZmlnIGFuZCBNYWtlZmlsZXMsIGZvciByZWZlcmVuY2VzIHRvIGJvdGggYGJwZl90Y3BfY2FgIGFuZCBgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTYC4gVGhpcyB3aWxsIGhlbHAgbWUgdHJhY2sgZG93biB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgaW1tZWRpYXRlIGFuc3dlcnMgcmVnYXJkaW5nIHRoZSBjb3JyZWN0IHNldHRpbmdzIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NzI2PXN0YXRpYyBsb25nIGJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTg0NS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo4NDY6XHRcdGlmIChwcm9nLVx1MDAzZXR5cGUgIT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTIHx8XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtODQ3LVx0XHQgICAgcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2J0Zl9pZCAhPSBzdF9vcHNfZGVzYy1cdTAwM2V0eXBlX2lkIHx8XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTE0OTI9aW50IGJwZl9wcm9nX2Fzc29jX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTAzLVx0aWYgKHN0X29wc19hc3NvYykge1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE1MDQ6XHRcdGlmIChwcm9nLVx1MDAzZXR5cGUgIT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1MDUtXHRcdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTUxMi1cdFx0ICovXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTUxMzpcdFx0aWYgKHByb2ctXHUwMDNldHlwZSAhPSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTUxNC1cdFx0XHRicGZfbWFwX2luYyhtYXApO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xNTIyPXZvaWQgYnBmX3Byb2dfZGlzYXNzb2Nfc3RydWN0X29wcyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1MzItXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTUzMzpcdGlmIChwcm9nLVx1MDAzZXR5cGUgIT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1MzQtXHRcdGJwZl9tYXBfcHV0KHN0X29wc19hc3NvYyk7XG4tLVxua2VybmVsL2JwZi9idGYuYz02MjE3PXN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3Byb2dfY3R4X3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjMwOS1cdGNhc2UgQlBGX1BST0dfVFlQRV9MU006XG5rZXJuZWwvYnBmL2J0Zi5jOjYzMTA6XHRjYXNlIEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUzpcbmtlcm5lbC9icGYvYnRmLmMtNjMxMS1cdFx0LyogYWxsb3cgdTY0KiBhcyBjdHggKi9cbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTY2MTY9c3RhdGljIGJvb2wgcHJvZ19hcmdzX3RydXN0ZWQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjYyNC1cdFx0cmV0dXJuIGJwZl9sc21faXNfdHJ1c3RlZChwcm9nKTtcbmtlcm5lbC9icGYvYnRmLmM6NjYyNTpcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOlxua2VybmVsL2JwZi9idGYuYy02NjI2LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTkwNTY9c3RhdGljIGludCBicGZfcHJvZ190eXBlX3RvX2tmdW5jX2hvb2soZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTkwNjQtXHRcdHJldHVybiBCVEZfS0ZVTkNfSE9PS19UQztcbmtlcm5lbC9icGYvYnRmLmM6OTA2NTpcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOlxua2VybmVsL2JwZi9idGYuYy05MDY2LVx0XHRyZXR1cm4gQlRGX0tGVU5DX0hPT0tfU1RSVUNUX09QUztcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNTA4PXN0YXRpYyBib29sIF9fYnBmX3Byb2dfbWFwX2NvbXBhdGlibGUoc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTYwLVx0XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9FWFQ6XG5rZXJuZWwvYnBmL2NvcmUuYzoyNTYxOlx0XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOlxua2VybmVsL2JwZi9jb3JlLmMtMjU2Mi1cdFx0XHRcdHJldCA9IGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvY3B1bWFzay5jPTUxNT1zdGF0aWMgaW50IF9faW5pdCBjcHVtYXNrX2tmdW5jX2luaXQodm9pZClcbi0tXG5rZXJuZWwvYnBmL2NwdW1hc2suYy01MjYtXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFx1MDAyNmNwdW1hc2tfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvY3B1bWFzay5jOjUyNzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2Y3B1bWFza19rZnVuY19zZXQpO1xua2VybmVsL2JwZi9jcHVtYXNrLmMtNTI4LVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcdTAwMjZjcHVtYXNrX2tmdW5jX3NldCk7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk4Mj1zdGF0aWMgaW50IF9faW5pdCBrZnVuY19pbml0KHZvaWQpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAwMC1cdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDAxOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDAyLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjcyOD1icGZfcHJvZ19sb2FkX2NoZWNrX2F0dGFjaChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI3NDMtXHRcdGNhc2UgQlBGX1BST0dfVFlQRV9MU006XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNzQ0Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUzpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI3NDUtXHRcdGNhc2UgQlBGX1BST0dfVFlQRV9FWFQ6XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjg3ND1zdGF0aWMgYm9vbCBpc19wZXJmbW9uX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4ODMtXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjg4NDpcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOiAvKiBoYXMgYWNjZXNzIHRvIHN0cnVjdCBzb2NrICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODg1LVx0Y2FzZSBCUEZfUFJPR19UWVBFX0VYVDogLyogZXh0ZW5kcyBhbnkgcHJvZyAqL1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYyNjI9c3RhdGljIGludCBwcm9nX2Fzc29jX3N0cnVjdF9vcHModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjI3Ny1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYyNzg6XHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUykge1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjI3OS1cdFx0cmV0ID0gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTIzNT1zdGF0aWMgZW51bSBwcml2X3N0YWNrX21vZGUgYnBmX2VuYWJsZV9wcml2X3N0YWNrKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTI1MS1cdGNhc2UgQlBGX1BST0dfVFlQRV9MU006XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTI1MjpcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTUyNTMtXHRcdGlmIChwcm9nLVx1MDAzZWF1eC1cdTAwM2Vwcml2X3N0YWNrX3JlcXVlc3RlZCB8fCBicGZfcHJvZ19jaGVja19yZWN1cihwcm9nKSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA0OTk9c3RhdGljIGludCBjaGVja19yZWZlcmVuY2VfbGVhayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sIGV4Y2VwdGlvbl9leGl0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDUxNS1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA1MTY6XHRcdGlmICh0eXBlID09IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyBcdTAwMjZcdTAwMjYgIWV4Y2VwdGlvbl9leGl0IFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNTE3LVx0XHQgICAgcmVnLVx1MDAzZWlkID09IHN0YXRlLVx1MDAzZXJlZnNbaV0uaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MjI4PXN0YXRpYyBib29sIHJldHVybl9yZXR2YWxfcmFuZ2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZXR2YWxfcmFuZ2UgKnJhbmdlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMyMi1cdFx0YnJlYWs7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczMjM6XHRjYXNlIEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUzpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMyNC1cdFx0KnJhbmdlID0gcmV0dmFsX3JhbmdlKDAsIDApO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzMzOT1zdGF0aWMgYm9vbCBwcm9ncmFtX3JldHVybnNfdm9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM1MC1cdFx0YnJlYWs7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczNTE6XHRjYXNlIEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUzpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM1Mi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfZnVuY19wcm90by1cdTAwM2V0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzM3MT1zdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3Mzg2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3Mzg3Olx0aWYgKHByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM4OC1cdFx0LyogQWxsb3cgYSBzdHJ1Y3Rfb3BzIHByb2dyYW0gdG8gcmV0dXJuIGEgcmVmZXJlbmNlZCBrcHRyIGlmIGl0XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NDIwLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NDIxOlx0aWYgKHByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMgXHUwMDI2XHUwMDI2ICFyZXRfdHlwZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzQyMi1cdFx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MjY3PXN0YXRpYyBpbnQgZG9fY2hlY2tfY29tbW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQwMC1cdC8qIEFjcXVpcmUgcmVmZXJlbmNlcyBmb3Igc3RydWN0X29wcyBwcm9ncmFtIGFyZ3VtZW50cyB0YWdnZWQgd2l0aCBcJiMzNDtfX3JlZlwmIzM0OyAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NDAxOlx0aWYgKCFzdWJwcm9nIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUykge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDAyLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhdXgtXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMjc2PXN0YXRpYyBib29sIGNhbl9iZV9zbGVlcGFibGUoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDI5Ny1cdHJldHVybiBwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9LUFJPQkUgLyogb25seSBmb3IgdXByb2JlcyAqLyB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjk4Olx0ICAgICAgIHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDI5OS1cdCAgICAgICBwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVCB8fFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDMwMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMjUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMjY6XHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMyNy1cdFx0cmV0dXJuIGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKGVudik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDQzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJQRiBTdHJ1Y3QgT3BzIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGJwZl9zdHJ1Y3Rfb3BzLmNgIGdldHMgYnVpbHQuIFRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGNvbnNpZGVyaW5nIGl0JiMzOTtzIGtlcm5lbC1yZWxhdGVkIGFuZCBsaWtlbHkgaW52b2x2ZXMgQlBGLCBpcyB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgZm9yIGFueXRoaW5nIEJQRi1zcGVjaWZpYyB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGF0IHRoYXQgTWFrZWZpbGUgaGFzIHRvIHNheS4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBicGZfc3RydWN0X29wcy5jYC4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQsIGFuZCBJIGNhbiBxdWlja2x5IHRyYWNlIHRoZSByZWxldmFudCB0YXJnZXRzIGFuZCBzb3VyY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RydWN0X29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU4NiBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxua2VybmVsL2JwZi9NYWtlZmlsZT00Mz1pZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfc3RydWN0X29wcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQ1LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hc2sub1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNi1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNzpzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUge1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE4Olx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2NvbW1vbl92YWx1ZSBjb21tb247XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTktXHRjaGFyIGRhdGFbXSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0yMy1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoyNDpzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwIHtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0yNS1cdHN0cnVjdCBicGZfbWFwIG1hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoyNjpcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYztcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0yNy1cdC8qIHByb3RlY3QgbWFwX3VwZGF0ZSAqL1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy00OS1cdCAqL1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjUwOlx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICp1dmFsdWU7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTEtXHQvKiBrdmFsdWUuZGF0YSBzdG9yZXMgdGhlIGFjdHVhbCBrZXJuZWwmIzM5O3Mgc3RydWN0XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU0LVx0ICovXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTU6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUga3ZhbHVlO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU2LX07XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTctXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTg6c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmsge1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU5LVx0c3RydWN0IGJwZl9saW5rIGxpbms7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTY0PXN0YXRpYyBERUZJTkVfTVVURVgodXBkYXRlX211dGV4KTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2NjojZGVmaW5lIFZBTFVFX1BSRUZJWCBcJiMzNDticGZfc3RydWN0X29wc19cJiMzNDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02Ny0jZGVmaW5lIFZBTFVFX1BSRUZJWF9MRU4gKHNpemVvZihWQUxVRV9QUkVGSVgpIC0gMSlcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02OC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2OTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3RydWN0X29wc192ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzAtfTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3Mjpjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGJwZl9zdHJ1Y3Rfb3BzX3Byb2dfb3BzID0ge1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTczLSNpZmRlZiBDT05GSUdfTkVUXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzQ6XHQudGVzdF9ydW4gPSBicGZfc3RydWN0X29wc190ZXN0X3J1bixcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03NS0jZW5kaWZcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9Nzk9QlRGX0lEKHN0cnVjdCwgbW9kdWxlKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjgwOkJURl9JRChzdHJ1Y3QsIGJwZl9zdHJ1Y3Rfb3BzX2NvbW1vbl92YWx1ZSlcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy04MS1cbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9ODk9c3RhdGljIGJvb2wgaXNfdmFsaWRfdmFsdWVfdHlwZShzdHJ1Y3QgYnRmICpidGYsIHMzMiB2YWx1ZV9pZCxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA3LVx0aWYgKG10ICE9IGNvbW1vbl92YWx1ZV90eXBlKSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA4Olx0XHRwcl93YXJuKFwmIzM0O1RoZSBmaXJzdCBtZW1iZXIgb2YgJXMgc2hvdWxkIGJlIGJwZl9zdHJ1Y3Rfb3BzX2NvbW1vbl92YWx1ZVxcblwmIzM0Oyxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDktXHRcdFx0dmFsdWVfbmFtZSk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMi1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjM6c3RhdGljIHZvaWQgKmJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2FsbG9jKHZvaWQpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI0LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM5LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MDp2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2ZyZWUodm9pZCAqaW1hZ2UpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQxLXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTU1LSAqXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTU2OiAqIEluaXRpYWxpemUgYSBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gYWNjb3JkaW5nIHRvIHR5cGUgaW5mbyBvZlxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1Ny0gKiB0aGUgYXJndW1lbnRzIG9mIGEgc3R1YiBmdW5jdGlvbi4gKENoZWNrIGtDRkkgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXRcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTU5LSAqXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTYwOiAqIEVhY2ggbWVtYmVyIGluIHRoZSBzdHJ1Y3Rfb3BzIHR5cGUgaGFzIGEgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2FyZ19pbmZvXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTYxLSAqIHRvIHByb3ZpZGUgYW4gYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCwgd2hpY2ggaW4gdHVybiBwcm92aWRlc1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xNzM9c3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTc3LVx0XHRcdCAgICBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm1vZGVsLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE3ODpcdFx0XHQgICAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2FyZ19pbmZvICphcmdfaW5mbylcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNzkte1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zMjMtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MzI0Oi8qIENsZWFuIHVwIHRoZSBhcmdfaW5mbyBpbiBhIHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjLiAqL1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjMyNTp2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfcmVsZWFzZShzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzI2LXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzozMjc6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTMyOC1cdGludCBpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0zMzc9c3RhdGljIGJvb2wgaXNfbW9kdWxlX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBpZClcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzUwLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM1MTppbnQgYnBmX3N0cnVjdF9vcHNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzLCB1MzIgbW9mZilcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTIte1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTctXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MzU4OmludCBicGZfc3RydWN0X29wc19kZXNjX2luaXQoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTM1OS1cdFx0XHQgICAgIHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzYxLXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzozNjI6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcyA9IHN0X29wc19kZXNjLVx1MDAzZXN0X29wcztcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzozNjM6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTM2NC1cdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQzOS1cdFx0aWYgKCFzdF9vcHNfaWRzW0lEWF9NT0RVTEVfSURdIFx1MDAyNlx1MDAyNiBpc19tb2R1bGVfbWVtYmVyKGJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUpKSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NDQwOlx0XHRcdHByX3dhcm4oXCYjMzQ7JiMzOTtzdHJ1Y3QgbW9kdWxlJiMzOTsgYnRmIGlkIG5vdCBmb3VuZC4gSXMgQ09ORklHX01PRFVMRVMgZW5hYmxlZD8gYnBmX3N0cnVjdF9vcHMgJiMzOTslcyYjMzk7IG5lZWRzIG1vZHVsZSBzdXBwb3J0LlxcblwmIzM0Oyxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy00NDEtXHRcdFx0XHRzdF9vcHMtXHUwMDNlbmFtZSk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ1Mi1cdFx0ICovXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NDUzOlx0XHRpZiAoIWZ1bmNfcHJvdG8gfHwgYnBmX3N0cnVjdF9vcHNfc3VwcG9ydGVkKHN0X29wcywgbW9mZikpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNDU0LVx0XHRcdGNvbnRpbnVlO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy00OTYtXHRpZiAoc3Rfb3BzLVx1MDAzZWluaXQoYnRmKSkge1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjQ5NzpcdFx0cHJfd2FybihcJiMzNDtFcnJvciBpbiBpbml0IGJwZl9zdHJ1Y3Rfb3BzICVzXFxuXCYjMzQ7LFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ5OC1cdFx0XHRzdF9vcHMtXHUwMDNlbmFtZSk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTUwNS1lcnJvdXQ6XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTA2Olx0YnBmX3N0cnVjdF9vcHNfZGVzY19yZWxlYXNlKHN0X29wc19kZXNjKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MDctXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTUxMC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1MTE6c3RhdGljIGludCBicGZfc3RydWN0X29wc19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MTItXHRcdFx0XHRcdCAgIHZvaWQgKm5leHRfa2V5KVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MjAtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTIxOmludCBicGZfc3RydWN0X29wc19tYXBfc3lzX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MjItXHRcdFx0XHQgICAgICAgdm9pZCAqdmFsdWUpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTIzLXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1MjQ6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1MjU6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUgKnV2YWx1ZSwgKmt2YWx1ZTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1MjY6XHRlbnVtIGJwZl9zdHJ1Y3Rfb3BzX3N0YXRlIHN0YXRlO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTUyNy1cdHM2NCByZWZjbnQ7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU1Ny1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1NTg6c3RhdGljIHZvaWQgKmJwZl9zdHJ1Y3Rfb3BzX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTU5LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTYyLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjU2MzpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfcHV0X3Byb2dzKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01NjQte1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01NzQtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTc1OnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9kaXNzb2NfcHJvZ3Moc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU3Ni17XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU4NS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1ODY6c3RhdGljIHZvaWQgYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWVfaW1hZ2Uoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU4Ny17XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU5MC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0X21hcC1cdTAwM2VpbWFnZV9wYWdlc19jbnQ7IGkmIzQzOyYjNDM7KVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjU5MTpcdFx0YnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZShzdF9tYXAtXHUwMDNlaW1hZ2VfcGFnZXNbaV0pO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU5Mi1cdHN0X21hcC1cdTAwM2VpbWFnZV9wYWdlc19jbnQgPSAwO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz01OTU9c3RhdGljIGludCBjaGVja196ZXJvX2hvbGVzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MjAtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjIxOnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjIyLXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjI0LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjYyNTpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYyNi17XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYzMS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2MzI6Y29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfc3RydWN0X29wc19saW5rX2xvcHMgPSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjMzOlx0LnJlbGVhc2UgPSBicGZfc3RydWN0X29wc19saW5rX3JlbGVhc2UsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjM0Olx0LmRlYWxsb2MgPSBicGZfc3RydWN0X29wc19saW5rX2RlYWxsb2MsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjM1LX07XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjM2LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjYzNzppbnQgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcyxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MzgtXHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY2Mi1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2NjM6XHRcdGltYWdlID0gYnBmX3N0cnVjdF9vcHNfaW1hZ2VfYWxsb2MoKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NjQtXHRcdGlmIChJU19FUlIoaW1hZ2UpKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NzMtXHRcdGlmIChpbWFnZSAhPSAqX2ltYWdlKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjY3NDpcdFx0XHRicGZfc3RydWN0X29wc19pbWFnZV9mcmVlKGltYWdlKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NzUtXHRcdHJldHVybiBzaXplID8gOiAtRUZBVUxUO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02ODItXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjgzOnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2tzeW1faW5pdChjb25zdCBjaGFyICp0bmFtZSwgY29uc3QgY2hhciAqbW5hbWUsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjg0LVx0XHRcdFx0ICAgICB2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY5MS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2OTI6c3RhdGljIHZvaWQgYnBmX3N0cnVjdF9vcHNfbWFwX2FkZF9rc3ltcyhzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXApXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjkzLXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzAyLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjcwMzpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfZGVsX2tzeW1zKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MDQte1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MTMtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzE0OnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlX2tzeW1zKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MTUte1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MjUtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzI2OnN0YXRpYyBsb25nIGJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzI3LVx0XHRcdFx0XHQgICB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcyOC17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzI5Olx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzMwOlx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjID0gc3RfbWFwLVx1MDAzZXN0X29wc19kZXNjO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjczMTpcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzID0gc3Rfb3BzX2Rlc2MtXHUwMDNlc3Rfb3BzO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjczMjpcdHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqdXZhbHVlLCAqa3ZhbHVlO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTczMy1cdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbW9kdWxlX3R5cGU7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTc2Ni1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3Njc6XHR1dmFsdWUgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICopc3RfbWFwLVx1MDAzZXV2YWx1ZTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3Njg6XHRrdmFsdWUgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICopXHUwMDI2c3RfbWFwLVx1MDAzZWt2YWx1ZTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03NjktXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTg2MC1cdFx0YnBmX3RyYW1wX2xpbmtfaW5pdChsaW5rLCBCUEZfTElOS19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6ODYxOlx0XHRcdCAgICAgIFx1MDAyNmJwZl9zdHJ1Y3Rfb3BzX2xpbmtfbG9wcywgcHJvZywgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSwgMCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtODYyLVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy04NzUtXHRcdHRyYW1wb2xpbmVfc3RhcnQgPSBpbWFnZV9vZmY7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6ODc2Olx0XHRlcnIgPSBicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmUodG5vZGVzLCBcdTAwMjZsaW5rLVx1MDAzZW5vZGUsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtODc3LVx0XHRcdFx0XHRcdFx1MDAyNnN0X29wcy1cdTAwM2VmdW5jX21vZGVsc1tpXSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtODk1LVx0XHQvKiBpbml0IGtzeW0gZm9yIHRoaXMgdHJhbXBvbGluZSAqL1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjg5NjpcdFx0YnBmX3N0cnVjdF9vcHNfa3N5bV9pbml0KHRuYW1lLCBtbmFtZSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy04OTctXHRcdFx0XHRcdCBpbWFnZSAmIzQzOyB0cmFtcG9saW5lX3N0YXJ0LFxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05MjgtXHRcdCAqIG1hcCBtdXN0IGJlIHNldCB0byBJTklUIGF0IHRoaXMgbW9tZW50LCBhbmQgdGh1c1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjkyOTpcdFx0ICogYnBmX3N0cnVjdF9vcHNfbWFwX2RlbGV0ZV9lbGVtKCkgY2FuJiMzOTt0IHVucmVnaXN0ZXJcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05MzAtXHRcdCAqIG9yIHRyYW5zaXRpb24gaXQgdG8gVE9CRUZSRUUgY29uY3VycmVudGx5LlxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05NDctcmVzZXRfdW5sb2NrOlxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjk0ODpcdGJwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlX2tzeW1zKHN0X21hcCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTQ5Olx0YnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWVfaW1hZ2Uoc3RfbWFwKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo5NTA6XHRicGZfc3RydWN0X29wc19tYXBfZGlzc29jX3Byb2dzKHN0X21hcCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTUxOlx0YnBmX3N0cnVjdF9vcHNfbWFwX3B1dF9wcm9ncyhzdF9tYXApO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk1Mi1cdG1lbXNldCh1dmFsdWUsIDAsIG1hcC1cdTAwM2V2YWx1ZV9zaXplKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTU3LVx0aWYgKCFlcnIpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTU4Olx0XHRicGZfc3RydWN0X29wc19tYXBfYWRkX2tzeW1zKHN0X21hcCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTU5LVx0cmV0dXJuIGVycjtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTYxLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjk2MjpzdGF0aWMgbG9uZyBicGZfc3RydWN0X29wc19tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk2My17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTY0Olx0ZW51bSBicGZfc3RydWN0X29wc19zdGF0ZSBwcmV2X3N0YXRlO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjk2NTpcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05NjYtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTY3Olx0c3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTY4LVx0aWYgKHN0X21hcC1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9MSU5LKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05ODktXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTkwOnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05OTEtXHRcdFx0XHRcdCAgICAgc3RydWN0IHNlcV9maWxlICptKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk5Mi17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTkzOlx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTk0LVx0dm9pZCAqdmFsdWU7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwMDAtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTAwMTpcdGVyciA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9zeXNfbG9va3VwX2VsZW0obWFwLCBrZXksIHZhbHVlKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDAyLVx0aWYgKCFlcnIpIHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAxMS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDEyOnN0YXRpYyB2b2lkIF9fYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDEzLXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDE0Olx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAxNS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDE2LVx0aWYgKHN0X21hcC1cdTAwM2VsaW5rcylcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDE3Olx0XHRicGZfc3RydWN0X29wc19tYXBfcHV0X3Byb2dzKHN0X21hcCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAxOC1cdGlmIChzdF9tYXAtXHUwMDNla3N5bXMpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTAxOTpcdFx0YnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWVfa3N5bXMoc3RfbWFwKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDIwLVx0YnBmX21hcF9hcmVhX2ZyZWUoc3RfbWFwLVx1MDAzZWxpbmtzKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDIxLVx0YnBmX21hcF9hcmVhX2ZyZWUoc3RfbWFwLVx1MDAzZWtzeW1zKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDIyOlx0YnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWVfaW1hZ2Uoc3RfbWFwKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDIzLVx0YnBmX21hcF9hcmVhX2ZyZWUoc3RfbWFwLVx1MDAzZXV2YWx1ZSk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwMjYtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTAyNzpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwMjgte1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwMjk6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDMwLVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDM3LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwMzg6XHRicGZfc3RydWN0X29wc19tYXBfZGlzc29jX3Byb2dzKHN0X21hcCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAzOS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDQwOlx0YnBmX3N0cnVjdF9vcHNfbWFwX2RlbF9rc3ltcyhzdF9tYXApO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNDEtXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNDYtXHQgKiBzZXRzb2Nrb3B0KFRDUF9DT05HRVNUSU9OLCBcJiMzNDt0Y3BfY2NfeVwmIzM0OykuXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA0NzpcdCAqIER1cmluZyB0aGUgc3dpdGNoLCAgYnBmX3N0cnVjdF9vcHNfcHV0KHRjcF9jY194KSBpcyBjYWxsZWRcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDQ4LVx0ICogYW5kIGl0cyByZWZjb3VudCBtYXkgcmVhY2ggMCB3aGljaCB0aGVuIGZyZWUgaXRzXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNTgtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA1OTpcdF9fYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUobWFwKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDYwLX1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDYxLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwNjI6c3RhdGljIGludCBicGZfc3RydWN0X29wc19tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA2My17XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEwNzE9c3RhdGljIHUzMiBjb3VudF9mdW5jX3B0cnMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwODMtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA4NDpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmJwZl9zdHJ1Y3Rfb3BzX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDg1LXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDg2Olx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwODctXHRzaXplX3Qgc3RfbWFwX3NpemU7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA4ODpcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDg5LVx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqdnQ7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExMTktXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTEyMDpcdHN0X29wc19kZXNjID0gYnBmX3N0cnVjdF9vcHNfZmluZF92YWx1ZShidGYsIGF0dHItXHUwMDNlYnRmX3ZtbGludXhfdmFsdWVfdHlwZV9pZCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTEyMS1cdGlmICghc3Rfb3BzX2Rlc2MpIHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTEzNS1cdFx0Lyoga3ZhbHVlIHN0b3JlcyB0aGVcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTM2Olx0XHQgKiBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdGNwX2Nvbmdlc3Rpb25zX29wc1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExMzctXHRcdCAqL1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExMzg6XHRcdCh2dC1cdTAwM2VzaXplIC0gc2l6ZW9mKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSkpO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExMzktXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNjktZXJyb3V0X2ZyZWU6XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE3MDpcdF9fYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUobWFwKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTcxLWVycm91dDpcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE3Ni1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTc3OnN0YXRpYyB1NjQgYnBmX3N0cnVjdF9vcHNfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNzgte1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExNzk6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTgwOlx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjID0gc3RfbWFwLVx1MDAzZXN0X29wc19kZXNjO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExODEtXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZ0ID0gc3Rfb3BzX2Rlc2MtXHUwMDNldmFsdWVfdHlwZTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE4NC1cdHVzYWdlID0gc2l6ZW9mKCpzdF9tYXApICYjNDM7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE4NTpcdFx0XHR2dC1cdTAwM2VzaXplIC0gc2l6ZW9mKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE4Ni1cdHVzYWdlICYjNDM7PSB2dC1cdTAwM2VzaXplO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTkyLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTM6QlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9zdHJ1Y3Rfb3BzX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9zdHJ1Y3Rfb3BzX21hcClcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTk0OmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBicGZfc3RydWN0X29wc19tYXBfb3BzID0ge1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTU6XHQubWFwX2FsbG9jX2NoZWNrID0gYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jX2NoZWNrLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTY6XHQubWFwX2FsbG9jID0gYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTc6XHQubWFwX2ZyZWUgPSBicGZfc3RydWN0X29wc19tYXBfZnJlZSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTk4Olx0Lm1hcF9nZXRfbmV4dF9rZXkgPSBicGZfc3RydWN0X29wc19tYXBfZ2V0X25leHRfa2V5LFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTk6XHQubWFwX2xvb2t1cF9lbGVtID0gYnBmX3N0cnVjdF9vcHNfbWFwX2xvb2t1cF9lbGVtLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMDA6XHQubWFwX2RlbGV0ZV9lbGVtID0gYnBmX3N0cnVjdF9vcHNfbWFwX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMDE6XHQubWFwX3VwZGF0ZV9lbGVtID0gYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMDI6XHQubWFwX3NlcV9zaG93X2VsZW0gPSBicGZfc3RydWN0X29wc19tYXBfc2VxX3Nob3dfZWxlbSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjAzOlx0Lm1hcF9tZW1fdXNhZ2UgPSBicGZfc3RydWN0X29wc19tYXBfbWVtX3VzYWdlLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMDQ6XHQubWFwX2J0Zl9pZCA9IFx1MDAyNmJwZl9zdHJ1Y3Rfb3BzX21hcF9idGZfaWRzWzBdLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMDUtfTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIwOS0gKi9cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjEwOmJvb2wgYnBmX3N0cnVjdF9vcHNfZ2V0KGNvbnN0IHZvaWQgKmtkYXRhKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMTEte1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMTI6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUgKmt2YWx1ZTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjEzOlx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMTQtXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMTUtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIxNjpcdGt2YWx1ZSA9IGNvbnRhaW5lcl9vZihrZGF0YSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlLCBkYXRhKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjE3Olx0c3RfbWFwID0gY29udGFpbmVyX29mKGt2YWx1ZSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCwga3ZhbHVlKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjE4LVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjIxLX1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjIyOkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9zdHJ1Y3Rfb3BzX2dldCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIyMy1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjI0OnZvaWQgYnBmX3N0cnVjdF9vcHNfcHV0KGNvbnN0IHZvaWQgKmtkYXRhKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMjUte1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMjY6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUgKmt2YWx1ZTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjI3Olx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMjgtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIyOTpcdGt2YWx1ZSA9IGNvbnRhaW5lcl9vZihrZGF0YSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlLCBkYXRhKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjMwOlx0c3RfbWFwID0gY29udGFpbmVyX29mKGt2YWx1ZSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCwga3ZhbHVlKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjMxLVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjMzLX1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjM0OkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9zdHJ1Y3Rfb3BzX3B1dCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIzNS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjM2OnUzMiBicGZfc3RydWN0X29wc19pZChjb25zdCB2b2lkICprZGF0YSlcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjM3LXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjM4Olx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICprdmFsdWU7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIzOTpcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjQwLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyNDE6XHRrdmFsdWUgPSBjb250YWluZXJfb2Yoa2RhdGEsIHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSwgZGF0YSk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI0MjpcdHN0X21hcCA9IGNvbnRhaW5lcl9vZihrdmFsdWUsIHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAsIGt2YWx1ZSk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI0My1cbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI0NS19XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI0NjpFWFBPUlRfU1lNQk9MX0dQTChicGZfc3RydWN0X29wc19pZCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI0Ny1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjQ4LS8qKlxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyNDk6ICogYnBmX3N0cnVjdF9vcHNfZm9yX2VhY2hfcHJvZyAtIEludm9rZSBAY2IgZm9yIGVhY2ggbWVtYmVyIHByb2dcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjUwLSAqIEBrZGF0YToga2VybmVsLXNpZGUgc3RydWN0X29wcyB2bXRhYmxlICh0aGUgQGtkYXRhIGFyZyB0byAtXHUwMDNlcmVnLy1cdTAwM2V1cGRhdGUvLVx1MDAzZXVucmVnKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjYwLSAqL1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyNjE6aW50IGJwZl9zdHJ1Y3Rfb3BzX2Zvcl9lYWNoX3Byb2coY29uc3Qgdm9pZCAqa2RhdGEsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI2Mi1cdFx0XHRcdCBpbnQgKCpjYikoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpkYXRhKSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI2NC17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI2NTpcdHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqa3ZhbHVlO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyNjY6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXA7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI2Ny1cdHUzMiBpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjY5LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyNzA6XHRrdmFsdWUgPSBjb250YWluZXJfb2Yoa2RhdGEsIHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSwgZGF0YSk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI3MTpcdHN0X21hcCA9IGNvbnRhaW5lcl9vZihrdmFsdWUsIHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAsIGt2YWx1ZSk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI3Mi1cbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI4MS19XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI4MjpFWFBPUlRfU1lNQk9MX0dQTChicGZfc3RydWN0X29wc19mb3JfZWFjaF9wcm9nKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjgzLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyODQ6c3RhdGljIGJvb2wgYnBmX3N0cnVjdF9vcHNfdmFsaWRfdG9fcmVnKHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI4NS17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI4NjpcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcCA9IChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICopbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyODctXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyOTMtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI5NDpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjk1LXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjk2Olx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmsgKnN0X2xpbms7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI5NzpcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjk4LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyOTk6XHRzdF9saW5rID0gY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rLCBsaW5rKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzAwOlx0c3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKilcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzAxLVx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHN0X2xpbmstXHUwMDNlbWFwLCB0cnVlKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMwOC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzA5OnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzEwLVx0XHRcdFx0XHQgICAgc3RydWN0IHNlcV9maWxlICpzZXEpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMxMS17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMxMjpcdHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rICpzdF9saW5rO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMTMtXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMTQtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMxNTpcdHN0X2xpbmsgPSBjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmssIGxpbmspO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMTYtXHRyY3VfcmVhZF9sb2NrKCk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMjItXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMyMzpzdGF0aWMgaW50IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzI0LVx0XHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMyNS17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMyNjpcdHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rICpzdF9saW5rO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMjctXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMjgtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMyOTpcdHN0X2xpbmsgPSBjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmssIGxpbmspO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMzAtXHRyY3VfcmVhZF9sb2NrKCk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMzctXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMzODpzdGF0aWMgaW50IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfbWFwICpuZXdfbWFwLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMzktXHRcdFx0XHRcdCAgc3RydWN0IGJwZl9tYXAgKmV4cGVjdGVkX29sZF9tYXApXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM0MC17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM0MTpcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcCwgKm9sZF9zdF9tYXA7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM0Mi1cdHN0cnVjdCBicGZfbWFwICpvbGRfbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEzNDM6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbGluayAqc3RfbGluaztcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzQ0LVx0aW50IGVycjtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzQ1LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEzNDY6XHRzdF9saW5rID0gY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rLCBsaW5rKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzQ3Olx0c3RfbWFwID0gY29udGFpbmVyX29mKG5ld19tYXAsIHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAsIG1hcCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM0OC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzQ5Olx0aWYgKCFicGZfc3RydWN0X29wc192YWxpZF90b19yZWcobmV3X21hcCkpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM1MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzNjYtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM2NzpcdG9sZF9zdF9tYXAgPSBjb250YWluZXJfb2Yob2xkX21hcCwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCwgbWFwKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzY4LVx0LyogVGhlIG5ldyBhbmQgb2xkIHN0cnVjdF9vcHMgbXVzdCBiZSB0aGUgc2FtZSB0eXBlLiAqL1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzg3LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEzODg6c3RhdGljIGludCBicGZfc3RydWN0X29wc19tYXBfbGlua19kZXRhY2goc3RydWN0IGJwZl9saW5rICpsaW5rKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzODkte1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEzOTA6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbGluayAqc3RfbGluayA9IGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbGluaywgbGluayk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM5MTpcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzkyLVx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQwMC1cdH1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDAxOlx0c3RfbWFwID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCwgbWFwKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDAyLVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDA1LVx0UkNVX0lOSVRfUE9JTlRFUihzdF9saW5rLVx1MDAzZW1hcCwgTlVMTCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQwNjpcdC8qIFBhaXIgd2l0aCBicGZfbWFwX2dldCgpIGluIGJwZl9zdHJ1Y3Rfb3BzX2xpbmtfY3JlYXRlKCkgb3Jcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDA3Olx0ICogYnBmX21hcF9pbmMoKSBpbiBicGZfc3RydWN0X29wc19tYXBfbGlua191cGRhdGUoKS5cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDA4LVx0ICovXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MTctXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQxODpzdGF0aWMgX19wb2xsX3QgYnBmX3N0cnVjdF9vcHNfbWFwX2xpbmtfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDE5LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHRzKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MjAte1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MjE6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbGluayAqc3RfbGluayA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MjItXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MjctXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQyODpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfc3RydWN0X29wc19tYXBfbG9wcyA9IHtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDI5Olx0LmRlYWxsb2MgPSBicGZfc3RydWN0X29wc19tYXBfbGlua19kZWFsbG9jLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MzA6XHQuZGV0YWNoID0gYnBmX3N0cnVjdF9vcHNfbWFwX2xpbmtfZGV0YWNoLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MzE6XHQuc2hvd19mZGluZm8gPSBicGZfc3RydWN0X29wc19tYXBfbGlua19zaG93X2ZkaW5mbyxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDMyOlx0LmZpbGxfbGlua19pbmZvID0gYnBmX3N0cnVjdF9vcHNfbWFwX2xpbmtfZmlsbF9saW5rX2luZm8sXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzMzpcdC51cGRhdGVfbWFwID0gYnBmX3N0cnVjdF9vcHNfbWFwX2xpbmtfdXBkYXRlLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MzQ6XHQucG9sbCA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3BvbGwsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQzNS19O1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MzYtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzNzppbnQgYnBmX3N0cnVjdF9vcHNfbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQzOC17XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzOTpcdHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rICpsaW5rID0gTlVMTDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDQwLVx0c3RydWN0IGJwZl9saW5rX3ByaW1lciBsaW5rX3ByaW1lcjtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDQxOlx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0NDItXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDQ4LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0NDk6XHRzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDUwLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0NTE6XHRpZiAoIWJwZl9zdHJ1Y3Rfb3BzX3ZhbGlkX3RvX3JlZyhtYXApKSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ1Mi1cdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ2MC1cdH1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDYxOlx0YnBmX2xpbmtfaW5pdChcdTAwMjZsaW5rLVx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2YnBmX3N0cnVjdF9vcHNfbWFwX2xvcHMsIE5VTEwsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ2Mi1cdFx0ICAgICAgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTE1NDk9dm9pZCAqYnBmX3Byb2dfZ2V0X2Fzc29jX3N0cnVjdF9vcHMoY29uc3Qgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1NTAte1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE1NTE6XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXA7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NTEKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogMjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBtb2R1bGVzIGVuYWJsZWQuIEkgd2FudCB0byBjb25maXJtIHRoYXQgYFRDUF9DT05HX0JCUmAgaXMgZW5hYmxlZCwgYXMgaXQgcHJvdmlkZXMgdGhlIEJCUiBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZSwgd2hpY2ggaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGltcGxlbWVudHMgYHRzb19zZWdzYC4gVGhlbiwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoYXQgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGFyZSBhbHNvIGVuYWJsZWQ7IHRoZXNlIGFyZSBlc3NlbnRpYWwgYmVjYXVzZSB0aGV5JiMzOTtyZSBkaXJlY3RseSByZWxhdGVkIHRvIGBicGZfdGNwX2NhLmNgIGFuZCBCUEYgVENQIGNvbmdlc3Rpb24gb3BlcmF0aW9ucy4gT2YgY291cnNlLCBgTkVUYCBhbmQgYElORVRgIGFyZSBvdXIgYmFzZSBuZXR3b3JraW5nIHByZXJlcXVpc2l0ZXMsIHNvIEkgYXNzdW1lIHRob3NlIGFyZSBhbHJlYWR5IGluIHBsYWNlLCBidXQgSSB3aWxsIGNoZWNrIHRvIGJlIGNlcnRhaW4uCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIHN5bWJvbHMgb3IgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIFRoZSBrZXkgc3ltYm9sIEkmIzM5O20gZm9jdXNpbmcgb24gcmlnaHQgbm93IGlzIGB0Y3BfdHNvX2F1dG9zaXplYC4KCk5leHQsIEkgbmVlZCB0byB0aG9yb3VnaGx5IHJldmlldyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgcHJlY2lzZSBoZXJlLiBgV29ydGhGdXp6aW5nYCBtdXN0IGJlIHNldCB0byBgdHJ1ZWAsIGFzIHRoZSBwYXRjaCBpcyBnb2luZyB0byBtb2RpZnkgVENQIFRTTyBhdXRvc2l6aW5nIGxvZ2ljIGFuZCBjb25nZXN0aW9uIGNvbnRyb2wgb3BlcmF0aW9ucywgbm90YWJseSByZXBsYWNpbmcgYG1pbl90c29fc2Vnc2Agd2l0aCBgdHNvX3NlZ3NgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIEJCUiBhbmQgQlBGIFRDUCBDQSBjYWxsYmFja3MsIHdoaWNoIGlzIHNpZ25pZmljYW50LiBGdXJ0aGVybW9yZSwgdGhlIHBhdGNoIGV4cG9ydHMgYHRjcF90c29fYXV0b3NpemVgIGFzIGEgQlBGIGtmdW5jLiBBbGwgb2YgdGhpcyBkaXJlY3RseSBpbXBhY3RzIFRDUCBwYWNrZXQgc2VnbWVudGF0aW9uIGFuZCBob3cgdGhlc2UgcGFja2V0cyBhcmUgdHJhbnNtaXR0ZWQgd2l0aGluIGNvcmUgbmV0d29ya2luZy4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBtYWtlIHRoaXMgdmVyeSBjbGVhciwgc28gSSYjMzk7bGwgd3JpdGUgYSBkZXRhaWxlZCBleHBsYW5hdGlvbi4KCkZvciBgRm9jdXNTeW1ib2xzYCwgSSB3aWxsIHVzZSBgWyYjMzQ7dGNwX3Rzb19hdXRvc2l6ZSYjMzQ7XWAuIEFuZCBmb3IgYEVuYWJsZUNvbmZpZ3NgLCBJJiMzOTtsbCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6IGBbJiMzNDtUQ1BfQ09OR19CQlImIzM0OywgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LCAmIzM0O0JQRl9KSVQmIzM0OywgJiMzNDtJTkVUJiMzNDtdYC4KCkZpbmFsbHksIEkmIzM5O2xsIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9mIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuIFByZWNpc2lvbiBpcyBwYXJhbW91bnQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9DT05HX0JCUiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfdHNvX2F1dG9zaXplJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgaW50ZXJmYWNlIGJ5IHJlcGxhY2luZyB0aGUgbWluX3Rzb19zZWdzIGNhbGxiYWNrIHdpdGggYSB0c29fc2VncyBjYWxsYmFjaywgdXBkYXRpbmcgVENQIG91dHB1dCBsb2dpYyAodGNwX3Rzb19hdXRvc2l6ZSwgdGNwX3Rzb19zZWdzKSwgQkJSIGNvbmdlc3Rpb24gY29udHJvbCwgYW5kIEJQRiBUQ1AgQ0Egc3RydWN0X29wcy4gdGNwX3Rzb19hdXRvc2l6ZSBpcyBhbHNvIGV4cG9zZWQgYXMgYSBCUEYga2Z1bmMuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbHRlciB0aGUgVENQIHNlZ21lbnRhdGlvbiBhbmQgcGFja2V0IHNjaGVkdWxpbmcgcGF0aCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9DT05HX0JCUiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfdHNvX2F1dG9zaXplJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgaW50ZXJmYWNlIGJ5IHJlcGxhY2luZyB0aGUgbWluX3Rzb19zZWdzIGNhbGxiYWNrIHdpdGggYSB0c29fc2VncyBjYWxsYmFjaywgdXBkYXRpbmcgVENQIG91dHB1dCBsb2dpYyAodGNwX3Rzb19hdXRvc2l6ZSwgdGNwX3Rzb19zZWdzKSwgQkJSIGNvbmdlc3Rpb24gY29udHJvbCwgYW5kIEJQRiBUQ1AgQ0Egc3RydWN0X29wcy4gdGNwX3Rzb19hdXRvc2l6ZSBpcyBhbHNvIGV4cG9zZWQgYXMgYSBCUEYga2Z1bmMuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbHRlciB0aGUgVENQIHNlZ21lbnRhdGlvbiBhbmQgcGFja2V0IHNjaGVkdWxpbmcgcGF0aCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGludGVyZmFjZSBieSByZXBsYWNpbmcgdGhlIGBtaW5fdHNvX3NlZ3NgIGNhbGxiYWNrIHdpdGggYHRzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpYCwgdXBkYXRlcyBCQlIgYW5kIEJQRiBjb25nZXN0aW9uIGNvbnRyb2wgaG9va3MsIGFuZCBleHBvcnRzIGB0Y3BfdHNvX2F1dG9zaXplYCBhcyBhIEJQRiBrZnVuYy5cblxuQWxsIG1vZGlmaWVkIGFuZCBhZGRlZCBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBzY2FsYXIgaW50ZWdlciB2YWx1ZXMgcGFzc2VkIGJ5IHZhbHVlIChgdTMyYCwgYHVuc2lnbmVkIGludGAsIHBvaW50ZXJzIHRvIGZ1bGx5IGluaXRpYWxpemVkIHN0cnVjdCBgc29ja2ApLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIHN0cnVjdHVyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXItc3BhY2UgKHN1Y2ggYXMgYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgb3IgaW9jdGwgcmV0dXJucykgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDdmZWVjMjRhZTIxMDQ0Y2Y3Y2RhMmY2NmY2ZmIzNzQ1NGI1NTM3YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDE6MzE6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IDY3MGMyMDg3NmYyNjUuLjc5ZjI3YWM5ZTk2M2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC04MjQsNiAmIzQzOzgyNCw5IEBAIHVuc2lnbmVkIGludCB0Y3Bfc3luY19tc3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgcG10dSk7CiB1bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzayk7CiB1MzIgdGNwX2NsYW1wX3Byb2JlMF90b191c2VyX3RpbWVvdXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1MzIgd2hlbik7CiAKJiM0Mzt1MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LAomIzQzOwkJICAgICBpbnQgbWluX3Rzb19zZWdzKTsKJiM0MzsKIC8qIEJvdW5kIE1TUyAvIFRTTyBwYWNrZXQgc2l6ZSB3aXRoIHRoZSBoYWxmIG9mIHRoZSB3aW5kb3cgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHRjcF9ib3VuZF90b19oYWxmX3duZChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgcGt0c2l6ZSkKIHsKQEAgLTEzNjEsOCAmIzQzOzEzNjQsMTYgQEAgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB7CiAJLyogaG9vayBmb3IgcGFja2V0IGFjayBhY2NvdW50aW5nIChvcHRpb25hbCkgKi8KIAl2b2lkICgqcGt0c19hY2tlZCkoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcGxlKTsKIAotCS8qIG92ZXJyaWRlIHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzIChvcHRpb25hbCkgKi8KLQl1MzIgKCptaW5fdHNvX3NlZ3MpKHN0cnVjdCBzb2NrICpzayk7CiYjNDM7CS8qIE92ZXJyaWRlIHRjcF90c29fYXV0b3NpemUoKSAob3B0aW9uYWwpCiYjNDM7CSAqCiYjNDM7CSAqIElmIHByb3ZpZGVkLCB0aGlzIGNhbGxiYWNrIHN1cHBsaWVzIHRoZSBUU08gc2VnbWVudCB0YXJnZXQgY291bnQKJiM0MzsJICogaW5zdGVhZCBvZiB1c2luZyB0Y3BfdHNvX2F1dG9zaXplKCkuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcwomIzQzOwkgKiBzdWJzZXF1ZW50bHkgY2xhbXBlZCB0byBbMSwgc2stJmd0O3NrX2dzb19tYXhfc2Vnc10gYnkgdGhlIGNhbGxlci4KJiM0MzsJICoKJiM0MzsJICogRm9yIHRoZSBrZXJuZWwgY2FsbGJhY2sgcGF0aCwgbXNzX25vdyBvcmlnaW5hdGVzIGZyb20KJiM0MzsJICogdGNwX2N1cnJlbnRfbXNzKCkgYW5kIHNob3VsZCBuZXZlciBiZSB6ZXJvLgomIzQzOwkgKi8KJiM0MzsJdTMyICgqdHNvX3NlZ3MpKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpOwogCiAJLyogbmV3IHZhbHVlIG9mIGN3bmQgYWZ0ZXIgbG9zcyAocmVxdWlyZWQpICovCiAJdTMyICAoKnVuZG9fY3duZCkoc3RydWN0IHNvY2sgKnNrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2JwZl90Y3BfY2EuYyBiL25ldC9pcHY0L2JwZl90Y3BfY2EuYwppbmRleCA3OTFlMTUwNjMyMzdjLi45ZGVlZDIyNDRjMmRlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9icGZfdGNwX2NhLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvYnBmX3RjcF9jYS5jCkBAIC0xOTQsNiAmIzQzOzE5NCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfcmVub19jb25nX2F2b2lkKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF9yZW5vX3VuZG9fY3duZCkKIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3Bfc2xvd19zdGFydCkKIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfY29uZ19hdm9pZF9haSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Rzb19hdXRvc2l6ZSkKIEJURl9LRlVOQ1NfRU5EKGJwZl90Y3BfY2FfY2hlY2tfa2Z1bmNfaWRzKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3RjcF9jYV9rZnVuY19zZXQgPSB7CkBAIC0yODQsNyAmIzQzOzI4NSw3IEBAIHN0YXRpYyB2b2lkIGJwZl90Y3BfY2FfcGt0c19hY2tlZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wCiB7CiB9CiAKLXN0YXRpYyB1MzIgYnBmX3RjcF9jYV9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKQomIzQzO3N0YXRpYyB1MzIgYnBmX3RjcF9jYV90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KQogewogCXJldHVybiAwOwogfQpAQCAtMzIwLDcgJiM0MzszMjEsNyBAQCBzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBfX2JwZl9vcHNfdGNwX2Nvbmdlc3Rpb25fb3BzID0gewogCS5jd25kX2V2ZW50X3R4X3N0YXJ0ID0gYnBmX3RjcF9jYV9jd25kX2V2ZW50X3R4X3N0YXJ0LAogCS5pbl9hY2tfZXZlbnQgPSBicGZfdGNwX2NhX2luX2Fja19ldmVudCwKIAkucGt0c19hY2tlZCA9IGJwZl90Y3BfY2FfcGt0c19hY2tlZCwKLQkubWluX3Rzb19zZWdzID0gYnBmX3RjcF9jYV9taW5fdHNvX3NlZ3MsCiYjNDM7CS50c29fc2VncyA9IGJwZl90Y3BfY2FfdHNvX3NlZ3MsCiAJLmNvbmdfY29udHJvbCA9IGJwZl90Y3BfY2FfY29uZ19jb250cm9sLAogCS51bmRvX2N3bmQgPSBicGZfdGNwX2NhX3VuZG9fY3duZCwKIAkuc25kYnVmX2V4cGFuZCA9IGJwZl90Y3BfY2Ffc25kYnVmX2V4cGFuZCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9iYnIuYyBiL25ldC9pcHY0L3RjcF9iYnIuYwppbmRleCA4MjM3OGEyYmZkMWUxLi5lY2YxMWJlNDZmMzgyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfYmJyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2Jici5jCkBAIC0yOTcsMTEgJiM0MzsyOTcsMTggQEAgc3RhdGljIHZvaWQgYmJyX3NldF9wYWNpbmdfcmF0ZShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBidywgaW50IGdhaW4pCiB9CiAKIC8qIG92ZXJyaWRlIHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzICovCi1fX2JwZl9rZnVuYyBzdGF0aWMgdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKQomIzQzO3N0YXRpYyB1MzIgYmJyX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spCiB7CiAJcmV0dXJuIFJFQURfT05DRShzay0mZ3Q7c2tfcGFjaW5nX3JhdGUpICZsdDsgKGJicl9taW5fdHNvX3JhdGUgJmd0OyZndDsgMykgPyAxIDogMjsKIH0KIAomIzQzO19fYnBmX2tmdW5jIHN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpCiYjNDM7ewomIzQzOwlpZiAodW5saWtlbHkoIW1zc19ub3cpKQomIzQzOwkJcmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spOwomIzQzOwlyZXR1cm4gdGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdywgYmJyX21pbl90c29fc2VncyhzaykpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzX2dvYWwoc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwpAQCAtMTE1MSw3ICYjNDM7MTE1OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9iYnJfY29uZ19vcHMgX19yZWFkX21vc3RseSA9IHsKIAkudW5kb19jd25kCT0gYmJyX3VuZG9fY3duZCwKIAkuY3duZF9ldmVudF90eF9zdGFydAk9IGJicl9jd25kX2V2ZW50X3R4X3N0YXJ0LAogCS5zc3RocmVzaAk9IGJicl9zc3RocmVzaCwKLQkubWluX3Rzb19zZWdzCT0gYmJyX21pbl90c29fc2VncywKJiM0MzsJLnRzb19zZWdzCT0gYmJyX3Rzb19zZWdzLAogCS5nZXRfaW5mbwk9IGJicl9nZXRfaW5mbywKIAkuc2V0X3N0YXRlCT0gYmJyX3NldF9zdGF0ZSwKIH07CkBAIC0xMTYzLDcgJiM0MzsxMTcwLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9zbmRidWZfZXhwYW5kKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl91bmRvX2N3bmQpCiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX2N3bmRfZXZlbnRfdHhfc3RhcnQpCiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NzdGhyZXNoKQotQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9taW5fdHNvX3NlZ3MpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl90c29fc2VncykKIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfc2V0X3N0YXRlKQogQlRGX0tGVU5DU19FTkQodGNwX2Jicl9jaGVja19rZnVuY19pZHMpCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCA2ZjRkY2E0YTRkZTk4Li5iN2YyZWU1ZTdhNmIxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC0yMjUyLDEzICYjNDM7MjI1MiwyMSBAQCBzdGF0aWMgYm9vbCB0Y3BfbmFnbGVfY2hlY2soYm9vbCBwYXJ0aWFsLCBjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLAogICogaW4gYmlnZ2VyIFRTTyBidXJzdHMuIFdlIHdlIGN1dCB0aGUgUlRULWJhc2VkIGFsbG93YW5jZSBpbiBoYWxmCiAgKiBmb3IgZXZlcnkgMl45IHVzZWMgKGFrYSA1MTIgdXMpIG9mIFJUVCwgc28gdGhhdCB0aGUgUlRULWJhc2VkIGFsbG93YW5jZQogICogaXMgYmVsb3cgMTUwMCBieXRlcyBhZnRlciA2ICogfjUwMCB1c2VjID0gM21zLgomIzQzOyAqCiYjNDM7ICogVGhlIG1pbl90c29fc2VncyBpcyBmbG9vcmVkIHRvIDEgdG8gYXZvaWQgc3VycHJpc2luZyBjb252ZXJzaW9uLiBBbHNvLAomIzQzOyAqIEJQRiBjYWxsZXJzIG1heSBwYXNzIG1zc19ub3cgPT0gMC4gSW4gdGhhdCBjYXNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZQomIzQzOyAqIHNhbml0aXplZCBtaW5fdHNvX3NlZ3MgdmFsdWUgYW5kIHNraXBzIGF1dG9zaXppbmcuCiAgKi8KLXN0YXRpYyB1MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LAotCQkJICAgIGludCBtaW5fdHNvX3NlZ3MpCiYjNDM7X19icGZfa2Z1bmMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdywKJiM0MzsJCQkJIGludCBtaW5fdHNvX3NlZ3MpCiB7CiYjNDM7CXUzMiBtaW5fdHNvID0gbWF4KG1pbl90c29fc2VncywgMSk7CiAJdW5zaWduZWQgbG9uZyBieXRlczsKIAl1MzIgcjsKIAomIzQzOwlpZiAodW5saWtlbHkoIW1zc19ub3cpKQomIzQzOwkJcmV0dXJuIG1pbl90c287CiYjNDM7CiAJYnl0ZXMgPSBSRUFEX09OQ0Uoc2stJmd0O3NrX3BhY2luZ19yYXRlKSAmZ3Q7Jmd0OyBSRUFEX09OQ0Uoc2stJmd0O3NrX3BhY2luZ19zaGlmdCk7CiAKIAlyID0gdGNwX21pbl9ydHQodGNwX3NrKHNrKSkgJmd0OyZndDsgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS0mZ3Q7aXB2NC5zeXNjdGxfdGNwX3Rzb19ydHRfbG9nKTsKQEAgLTIyNjcsOCAmIzQzOzIyNzUsOSBAQCBzdGF0aWMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdywKIAogCWJ5dGVzID0gbWluX3QodW5zaWduZWQgbG9uZywgYnl0ZXMsIHNrLSZndDtza19nc29fbWF4X3NpemUpOwogCi0JcmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvX3NlZ3MpOwomIzQzOwlyZXR1cm4gbWF4X3QodTMyLCBieXRlcyAvIG1zc19ub3csIG1pbl90c28pOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHRjcF90c29fYXV0b3NpemUpOwogCiAvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBzZWdtZW50cyB3ZSB3YW50IGluIHRoZSBza2Igd2UgYXJlIHRyYW5zbWl0dGluZy4KICAqIFNlZSBpZiBjb25nZXN0aW9uIGNvbnRyb2wgbW9kdWxlIHdhbnRzIHRvIGRlY2lkZTsgb3RoZXJ3aXNlLCBhdXRvc2l6ZS4KQEAgLTIyNzYsMTQgJiM0MzsyMjg1LDEzIEBAIHN0YXRpYyB1MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LAogc3RhdGljIHUzMiB0Y3BfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdykKIHsKIAljb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYV9vcHMgPSBpbmV0X2NzayhzayktJmd0O2ljc2tfY2Ffb3BzOwotCXUzMiBtaW5fdHNvLCB0c29fc2VnczsKLQotCW1pbl90c28gPSBjYV9vcHMtJmd0O21pbl90c29fc2VncyA/Ci0JCQljYV9vcHMtJmd0O21pbl90c29fc2VncyhzaykgOgotCQkJUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS0mZ3Q7aXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2Vncyk7CiYjNDM7CXUzMiB0c29fc2VnczsKIAotCXRzb19zZWdzID0gdGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdywgbWluX3Rzbyk7Ci0JcmV0dXJuIG1pbl90KHUzMiwgdHNvX3NlZ3MsIHNrLSZndDtza19nc29fbWF4X3NlZ3MpOwomIzQzOwl0c29fc2VncyA9IGNhX29wcy0mZ3Q7dHNvX3NlZ3MgPwomIzQzOwkJCWNhX29wcy0mZ3Q7dHNvX3NlZ3Moc2ssIG1zc19ub3cpIDoKJiM0MzsJCQl0Y3BfdHNvX2F1dG9zaXplKHNrLCBtc3Nfbm93LAomIzQzOwkJCQkJIFJFQURfT05DRShzb2NrX25ldChzayktJmd0O2lwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MpKTsKJiM0MzsJcmV0dXJuIGNsYW1wX3QodTMyLCB0c29fc2VncywgMSwgc2stJmd0O3NrX2dzb19tYXhfc2Vncyk7CiB9CiAKIC8qIFJldHVybnMgdGhlIHBvcnRpb24gb2Ygc2tiIHdoaWNoIGNhbiBiZSBzZW50IHJpZ2h0IGF3YXkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYwppbmRleCAwYTNlOWQzNWJmNmYwLi41ODI2MmU0OTAzMzY0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jCkBAIC0xMCw3ICYjNDM7MTAsNyBAQCBleHRlcm4gdTMyIGJicl9zbmRidWZfZXhwYW5kKHN0cnVjdCBzb2NrICpzaykgX19rc3ltOwogZXh0ZXJuIHUzMiBiYnJfdW5kb19jd25kKHN0cnVjdCBzb2NrICpzaykgX19rc3ltOwogZXh0ZXJuIHZvaWQgYmJyX2N3bmRfZXZlbnRfdHhfc3RhcnQoc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07CiBleHRlcm4gdTMyIGJicl9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTsKLWV4dGVybiB1MzIgYmJyX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTsKJiM0MztleHRlcm4gdTMyIGJicl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KSBfX2tzeW07CiBleHRlcm4gdm9pZCBiYnJfc2V0X3N0YXRlKHN0cnVjdCBzb2NrICpzaywgdTggbmV3X3N0YXRlKSBfX2tzeW07CiAKIGV4dGVybiB2b2lkIGRjdGNwX2luaXQoc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07CkBAIC05MCw5ICYjNDM7OTAsOSBAQCB1MzIgQlBGX1BST0coc3N0aHJlc2gsIHN0cnVjdCBzb2NrICpzaykKIH0KIAogU0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQotdTMyIEJQRl9QUk9HKG1pbl90c29fc2Vncywgc3RydWN0IHNvY2sgKnNrKQomIzQzO3UzMiBCUEZfUFJPRyh0c29fc2Vncywgc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdykKIHsKLQlyZXR1cm4gYmJyX21pbl90c29fc2Vncyhzayk7CiYjNDM7CXJldHVybiBiYnJfdHNvX3NlZ3Moc2ssIG1zc19ub3cpOwogfQogCiBTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCkBAIC0xMjAsNyAmIzQzOzEyMCw3IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2NhX2tmdW5jID0gewogCS5jd25kX2V2ZW50CT0gKHZvaWQgKiljd25kX2V2ZW50LAogCS5jd25kX2V2ZW50X3R4X3N0YXJ0ID0gKHZvaWQgKiljd25kX2V2ZW50X3R4X3N0YXJ0LAogCS5zc3RocmVzaAk9ICh2b2lkICopc3N0aHJlc2gsCi0JLm1pbl90c29fc2Vncwk9ICh2b2lkICopbWluX3Rzb19zZWdzLAomIzQzOwkudHNvX3NlZ3MJPSAodm9pZCAqKXRzb19zZWdzLAogCS5zZXRfc3RhdGUJPSAodm9pZCAqKXNldF9zdGF0ZSwKIAkucGt0c19hY2tlZCAgICAgPSAodm9pZCAqKXBrdHNfYWNrZWQsCiAJLm5hbWUJCT0gJiMzNDt0Y3BfY2Ffa2Z1bmMmIzM0OywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHRocm93IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBhdCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgcHJvYmFibHkgb2theSwgYnV0IHdlIHNob3VsZCBhbHdheXMgYmUgdGhvcm91Z2guCgpGaXJzdCwgdGhlIHBhdGNoIGl0c2VsZiByZWZhY3RvcnMgdGhlIGBtaW5fdHNvX3NlZ3NgIGhvb2sgd2l0aGluIHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG9wcy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZyb20gYHUzMiAoKm1pbl90c29fc2Vncykoc3RydWN0IHNvY2sgKnNrKWAgdG8gYHUzMiAoKnRzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KWAuIEJhc2ljYWxseSwgdGhleSYjMzk7cmUgYWRkaW5nIGBtc3Nfbm93YCB0byB0aGUgcGFyYW1ldGVycy4gTG9va2luZyBhdCB0aGUgaW5jbHVkZWQgZmlsZXMsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdXBkYXRpbmcgdGhlIGRlZmluaXRpb25zLCB0aGUgQlBGIGtmdW5jIGNoZWNrcywgYW5kIHRoZSBzZWxmdGVzdCB0byBtYXRjaCB0aGlzIG5ldyBzaWduYXR1cmUuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBgYmJyX21pbl90c29fc2Vnc2AgaXMgZ2V0dGluZyB1cGRhdGVkIGFjY29yZGluZ2x5LiBXZSBhbHNvIGhhdmUgYHRjcF90c29fYXV0b3NpemVgLCB3aGljaCBhcHBlYXJzIHRvIGJlIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgaW4gdGhpcyB3aG9sZSBwcm9jZXNzLgoKTm93IGZvciB0aGUgS01TQU4gcmlza3MuLi4gTGV0JiMzOTtzIHNlZS4KCiogICAqKk1lbW9yeSBBbGxvY2F0aW9uczoqKiBUaGlzIGRvZXNuJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHdoaWNoIGlzIGdvb2QuCiogICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIEkmIzM5O20gbm90IHNlZWluZyBhbnkgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgdGhhdCBhcmVuJiMzOTt0IHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGUgYG1zc19ub3dgIGlzIHBhc3NlZCBhcyBhIHZhbHVlLCBzbyB0aGF0IHNob3VsZCBiZSBzYWZlLgoqICAgKipVc2Vyc3BhY2UgRXhwb3N1cmU6KiogVGhlIGB0Y3BfY29uZ2VzdGlvbl9vcHNgIHN0cnVjdCBpcyBrZXJuZWwtaW50ZXJuYWwgYW5kIGFsc28gYSBCUEYgc3RydWN0X29wcywgc28gdGhhdCYjMzk7cyBub3QgYSBjb25jZXJuLgoqICAgKipCdWZmZXIgT3BlcmF0aW9uczoqKiBObyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlcnMsIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIHNrYnMsIG9yIHNvY2tldCBvcHRpb25zLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4KKiAgICoqQm91bmRzIENoZWNraW5nL0RhdGEgTGVuZ3RoczoqKiBJdCYjMzk7cyBjYWxjdWxhdGluZyBUU08gc2VnbWVudCBjb3VudHMgZm9yIHBhY2tldCBzZWdtZW50YXRpb24uIFRoaXMgaXMgdXN1YWxseSB3aGVyZSB3ZSBmaW5kIGlzc3VlcywgYnV0IGl0IGFwcGVhcnMgc2FmZSBoZXJlLgoqICAgKipCcmFuY2hpbmc6KiogTm8gYnJhbmNoaW5nIHNlZW1zIHRvIGJlIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgoKU28gZmFyLCBpdCBsb29rcyBjbGVhbi4gQnV0IGp1c3QgdG8gYmUgZXh0cmEgc3VyZSwgSSYjMzk7bSBnb2luZyB0byBydW4gYGdyZXBwZXJgIGFuZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhbnkgdXNhZ2Ugb2YgdGhlc2UgaG9va3MgdGhhdCBjb3VsZCBiZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZSwgZXNwZWNpYWxseSB3aXRoIG90aGVyIGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGVzLiBJIHdhbnQgdG8gc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgdXNpbmcgZWl0aGVyIGBtaW5fdHNvX3NlZ3NgIG9yIGB0c29fc2Vnc2AsIGp1c3QgdG8gdmVyaWZ5IHRoYXQuIEFsbCBpbiBhbGwsIG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBpcyBhIHJlbGF0aXZlbHkgc2FmZSBwYXRjaCBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUsIGJ1dCB2ZXJpZnlpbmcgdGhpcyB3aXRoIHRoZSBncmVwcGVyIHNlYXJjaCBpcyB0aGUgY29ycmVjdCBmaW5hbCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fdHNvX3NlZ3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3Q9MTA4Nz10Y3BfdGltZXN0YW1wcyAtIElOVEVHRVJcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdC0xMDk2LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3Q6MTA5Nzp0Y3BfbWluX3Rzb19zZWdzIC0gSU5URUdFUlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QtMTA5OC1cdE1pbmltYWwgbnVtYmVyIG9mIHNlZ21lbnRzIHBlciBUU08gZnJhbWUuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldG5zX2lwdjRfc3lzY3RsLnJzdD0xMTQ9aW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjdGxfdGNwX21pbl9ydHRfd2xlbiAgICAgICAgICAgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2Fja191cGRhdGVfcnQuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRuc19pcHY0X3N5c2N0bC5yc3Q6MTE1OnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubGlrZWx5KGljc2tfY2FfLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0bnNfaXB2NF9zeXNjdGwucnN0LTExNi11OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2N0bF90Y3BfdHNvX3J0dF9sb2cgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfdHNvX2F1dG9zaXplXG4tLVxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oPTU1PXN0cnVjdCBuZXRuc19pcHY0IHtcbi0tXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgtMjI1LVx0aW50IHN5c2N0bF90Y3BfY2hhbGxlbmdlX2Fja19saW1pdDtcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaDoyMjY6XHR1OCBzeXNjdGxfdGNwX21pbl90c29fc2VncztcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yMjctXHR1OCBzeXNjdGxfdGNwX3JlZmxlY3RfdG9zO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTgyNz11MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LFxuaW5jbHVkZS9uZXQvdGNwLmg6ODI4Olx0XHQgICAgIGludCBtaW5fdHNvX3NlZ3MpO1xuaW5jbHVkZS9uZXQvdGNwLmgtODI5LVxuLS1cbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jPTYyNz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xuLS1cbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTEzOTMtXHR7XG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxMzk0Olx0XHQucHJvY25hbWVcdD0gXCYjMzQ7dGNwX21pbl90c29fc2Vnc1wmIzM0Oyxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jOjEzOTU6XHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQuaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2Vncyxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTEzOTYtXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YodTgpLFxuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYz0yODc9c3RhdGljIHZvaWQgYmJyX3NldF9wYWNpbmdfcmF0ZShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBidywgaW50IGdhaW4pXG4tLVxubmV0L2lwdjQvdGNwX2Jici5jLTI5OC1cbm5ldC9pcHY0L3RjcF9iYnIuYzoyOTk6Lyogb3ZlcnJpZGUgc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgKi9cbm5ldC9pcHY0L3RjcF9iYnIuYzozMDA6c3RhdGljIHUzMiBiYnJfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9iYnIuYy0zMDEte1xuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYz0zMDU9X19icGZfa2Z1bmMgc3RhdGljIHUzMiBiYnJfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdylcbi0tXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzA3LVx0aWYgKHVubGlrZWx5KCFtc3Nfbm93KSlcbm5ldC9pcHY0L3RjcF9iYnIuYzozMDg6XHRcdHJldHVybiBiYnJfbWluX3Rzb19zZWdzKHNrKTtcbm5ldC9pcHY0L3RjcF9iYnIuYzozMDk6XHRyZXR1cm4gdGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdywgYmJyX21pbl90c29fc2VncyhzaykpO1xubmV0L2lwdjQvdGNwX2Jici5jLTMxMC19XG4tLVxubmV0L2lwdjQvdGNwX2Jici5jPTMxMj1zdGF0aWMgdTMyIGJicl90c29fc2Vnc19nb2FsKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzIyLVx0XHQgICAgICBHU09fTEVHQUNZX01BWF9TSVpFIC0gMSAtIE1BWF9UQ1BfSEVBREVSKTtcbm5ldC9pcHY0L3RjcF9iYnIuYzozMjM6XHRzZWdzID0gbWF4X3QodTMyLCBieXRlcyAvIHRwLVx1MDAzZW1zc19jYWNoZSwgYmJyX21pbl90c29fc2VncyhzaykpO1xubmV0L2lwdjQvdGNwX2Jici5jLTMyNC1cbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTM0Mzg9c3RhdGljIGludCBfX25ldF9pbml0IHRjcF9za19pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM0OTUtXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjM0OTY6XHRuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2VncyA9IDI7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM0OTctXHRuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3Rzb19ydHRfbG9nID0gOTsgIC8qIDJeOSA9IDUxMiB1c2VjICovXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyMzQ9c3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI1NS0gKlxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNTY6ICogVGhlIG1pbl90c29fc2VncyBpcyBmbG9vcmVkIHRvIDEgdG8gYXZvaWQgc3VycHJpc2luZyBjb252ZXJzaW9uLiBBbHNvLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNTctICogQlBGIGNhbGxlcnMgbWF5IHBhc3MgbXNzX25vdyA9PSAwLiBJbiB0aGF0IGNhc2UgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI1ODogKiBzYW5pdGl6ZWQgbWluX3Rzb19zZWdzIHZhbHVlIGFuZCBza2lwcyBhdXRvc2l6aW5nLlxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNTktICovXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjI2MD1fX2JwZl9rZnVuYyB1MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNjE6XHRcdFx0XHQgaW50IG1pbl90c29fc2Vncylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjYyLXtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjYzOlx0dTMyIG1pbl90c28gPSBtYXgobWluX3Rzb19zZWdzLCAxKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjY0LVx0dW5zaWduZWQgbG9uZyBieXRlcztcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjI4NT1zdGF0aWMgdTMyIHRjcF90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93KVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjkyLVx0XHRcdHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI5MzpcdFx0XHRcdFx0IFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2VncykpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyOTQtXHRyZXR1cm4gY2xhbXBfdCh1MzIsIHRzb19zZWdzLCAxLCBzay1cdTAwM2Vza19nc29fbWF4X3NlZ3MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwX3R1bm5lbHMuc2g9MzI9c2V0dXAoKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaC01Mi1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwX3R1bm5lbHMuc2g6NTM6XHRERUZBVUxUX1RDUF9NSU5fVFNPX1NFR1M9JChpcCBuZXRucyBleGVjIFwmIzM0OyRDTElFTlRfTlNcJiMzNDsgc3lzY3RsIC1uIG5ldC5pcHY0LnRjcF9taW5fdHNvX3NlZ3MpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoLTU0LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoPTExMT1kb190ZXN0KCkge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwX3R1bm5lbHMuc2gtMTQwLVx0aWYgWyBcJiMzNDskM1wmIzM0OyAhPSAmIzM5O29uJiMzOTsgXSBcdTAwMjZcdTAwMjYgWyBcJiMzNDskS1NGVF9NQUNISU5FX1NMT1dcJiMzNDsgPSB5ZXMgXTsgdGhlblxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaDoxNDE6XHRcdGVjaG8gJiMzOTtTbG93IGNvbmZpZ3VyYXRpb247IGluY3JlYXNpbmcgbmV0LmlwdjQudGNwX21pbl90c29fc2VncyBhbmQgaW5pdGN3bmQmIzM5O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaDoxNDI6XHRcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JENMSUVOVF9OU1wmIzM0OyBzeXNjdGwgLXcgbmV0LmlwdjQudGNwX21pbl90c29fc2Vncz01MlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaC0xNDMtXHRcdGlmIFsgXCYjMzQ7JDJcJiMzNDsgPSA0IF07IHRoZW5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoLTE1MS1cdFx0aXAgbmV0bnMgZXhlYyBcJiMzNDskQ0xJRU5UX05TXCYjMzQ7IFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoOjE1MjpcdFx0ICAgIHN5c2N0bCAtdyBuZXQuaXB2NC50Y3BfbWluX3Rzb19zZWdzPVwmIzM0OyRERUZBVUxUX1RDUF9NSU5fVFNPX1NFR1NcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwX3R1bm5lbHMuc2gtMTUzLVx0Zmlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Jsb2NraW5nX2Jsb2NraW5nLXdyaXRlLnBrdC01LWAuL2RlZmF1bHRzLnNoXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Jsb2NraW5nX2Jsb2NraW5nLXdyaXRlLnBrdDo2Oi4vc2V0X3N5c2N0bHMucHkgL3Byb2Mvc3lzL25ldC9pcHY0L3RjcF9taW5fdHNvX3NlZ3M9MTBcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYmxvY2tpbmdfYmxvY2tpbmctd3JpdGUucGt0LTctYFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3Bfc2xvd19zdGFydF9zbG93LXN0YXJ0LWFmdGVyLWlkbGUucGt0LTYtLi9zZXRfc3lzY3Rscy5weSAvcHJvYy9zeXMvbmV0L2lwdjQvdGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZT0xIFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1hZnRlci1pZGxlLnBrdDo3Olx0XHQgL3Byb2Mvc3lzL25ldC9pcHY0L3RjcF9taW5fdHNvX3NlZ3M9MTBgXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1hZnRlci1pZGxlLnBrdC04LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3Bfc2xvd19zdGFydF9zbG93LXN0YXJ0LWFmdGVyLXdpbi11cGRhdGUucGt0LTYtLi9zZXRfc3lzY3Rscy5weSAvcHJvYy9zeXMvbmV0L2lwdjQvdGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZT0xIFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1hZnRlci13aW4tdXBkYXRlLnBrdDo3Olx0XHQgL3Byb2Mvc3lzL25ldC9pcHY0L3RjcF9taW5fdHNvX3NlZ3M9MTBgXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1hZnRlci13aW4tdXBkYXRlLnBrdC04LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3Bfc2xvd19zdGFydF9zbG93LXN0YXJ0LWZxLWFjay1wZXItMnBrdC5wa3Q9MTE9c3lzY3RsIC1xIG5ldC9pcHY0L3RjcF9wYWNpbmdfc3NfcmF0aW89MjAwXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1mcS1hY2stcGVyLTJwa3QucGt0OjEyOnN5c2N0bCAtZSAtcSBuZXQuaXB2NC50Y3BfbWluX3Rzb19zZWdzPTJgXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1mcS1hY2stcGVyLTJwa3QucGt0LTEzLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfdGltZXN0YW1waW5nX3RjcF90eF90aW1lc3RhbXBfYnVnLnBrdC04LWAuL2RlZmF1bHRzLnNoXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3RpbWVzdGFtcGluZ190Y3BfdHhfdGltZXN0YW1wX2J1Zy5wa3Q6OTpzeXNjdGwgLXEgbmV0LmlwdjQudGNwX21pbl90c29fc2Vncz03MFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF90aW1lc3RhbXBpbmdfdGNwX3R4X3RpbWVzdGFtcF9idWcucGt0LTEwLWBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB0Y3BfdHNvX3NlZ3NgIGluIGB0Y3Bfb3V0cHV0LmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRvIGV4YW1pbmUgaG93IGB0Y3BfdHNvX3NlZ3NgIGlzIGNhbGxlZCBhbmQgdXRpbGl6ZWQgd2l0aGluIGBuZXQvaXB2NC90Y3Bfb3V0cHV0LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgVENQIG91dHB1dCBwYXRoLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBpcyBpdCBtYW5pcHVsYXRpbmc/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIG9wZXJhdGlvbiBvbiBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSB3aXRoIFRTTyBlbmFibGVkPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcG9pbnRzIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBhbmQgd2hhdCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBpcy4gSXMgaXQgcGFydCBvZiB0aGUgaW5pdGlhbCBzZWdtZW50IGNyZWF0aW9uLCBvciBpcyBpdCBpbnZvbHZlZCBpbiBzb21lIGtpbmQgb2YgcmV0cmFuc21pc3Npb24gb3IgYWRqdXN0bWVudD8gVW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgaW4gdGhlIG92ZXJhbGwgZmxvdyBpcyB0aGUga2V5IHRvIGFzc2Vzc2luZyBpdHMgZnVuY3Rpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yIHBlcmhhcHMgc3BvdHRpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3Rzb19zZWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMjgwPUVYUE9SVF9TWU1CT0xfR1BMKHRjcF90c29fYXV0b3NpemUpO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjg0LSAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyODU6c3RhdGljIHUzMiB0Y3BfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjg2LXtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9Mjk3Mj1zdGF0aWMgYm9vbCB0Y3Bfd3JpdGVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LCBpbnQgbm9uYWdsZSxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjk5OS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozMDAwOlx0bWF4X3NlZ3MgPSB0Y3BfdHNvX3NlZ3Moc2ssIG1zc19ub3cpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTMwMDEtXHR3aGlsZSAoKHNrYiA9IHRjcF9zZW5kX2hlYWQoc2spKSkge1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zNzMzPXZvaWQgdGNwX3htaXRfcmV0cmFuc21pdF9xdWV1ZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM3NDYtXHRza2IgPSB0cC1cdTAwM2VyZXRyYW5zbWl0X3NrYl9oaW50ID86IHJ0eF9oZWFkO1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjM3NDc6XHRtYXhfc2VncyA9IHRjcF90c29fc2VncyhzaywgdGNwX2N1cnJlbnRfbXNzKHNrKSk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzc0OC1cdHNrYl9yYnRyZWVfd2Fsa19mcm9tKHNrYikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU2MQoJCQkJCQkJb3V0cHV0OiAxOTkKCQkJCQkJCXRob3VnaHRzOiA0MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gQ29uY2VybnMgSGVyZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgb3ZlciB0aGVzZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgY2FsbGJhY2tzIGFuZCBJJiMzOTttIGZlZWxpbmcgcHJldHR5IGNvbmZpZGVudCBhYm91dCB0aGUgS01TQU4gc2l0dWF0aW9uLiBUaGUgY29yZSBvZiBpdCBpcyB0aGUgcmVmYWN0b3Jpbmcgb2YgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBvcHMuIFdlJiMzOTtyZSBtb3ZpbmcgZnJvbSBgbWluX3Rzb19zZWdzYCB0byBhIGB0c29fc2Vnc2AgY2FsbGJhY2suIFRoaXMgbWFrZXMgc2Vuc2U7IGl0IGxldHMgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZXMgbGlrZSBCQlIgYW5kIEJQRiBDQSBjYWxjdWxhdGUgdGhlIFRTTyBzZWdtZW50IGNvdW50IGJhc2VkIG9uIHRoZSBjdXJyZW50IE1TUywgd2hpY2ggZ2l2ZXMgdXMgbW9yZSBmbGV4aWJpbGl0eS4gV2UgYXJlIGFsc28gZXhwb3NpbmcgYHRjcF90c29fYXV0b3NpemVgIGFzIGEgQlBGIGtmdW5jIGFuZCBhZGRpbmcgc29tZSBjbGFtcGluZyBhbmQgc2FuaXRpemF0aW9uLgoKSGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIHdoeSB0aGlzICpzaG91bGRuJiMzOTt0KiB0cmlnZ2VyIGFueSBLTVNBTiBmbGFnczoKCiogICAqKk5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlczoqKiBUaGlzIHBhdGNoIGlzbiYjMzk7dCBjcmVhdGluZywgcmVhZGluZywgd3JpdGluZywgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCYjMzk7cyB0aGUga2V5LiBLTVNBTiBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIHRob3NlIHNjZW5hcmlvcyB3aGVyZSB0aGUgc3lzdGVtIG1pZ2h0IHVzZSBkYXRhIGJlZm9yZSBpdCYjMzk7cyBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGF0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBoYXBwZW5pbmcgaGVyZS4KKiAgICoqU2NhbGFyIERhdGEgT25seToqKiBUaGUgaW5wdXRzIGFuZCBvdXRwdXRzIGFyZSBqdXN0IGludGVnZXJzIC0gYHUzMmAsIGB1bnNpZ25lZCBpbnRgLiBUaGUgcG90ZW50aWFsIGZvciB3ZWlyZG5lc3Mgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBqdXN0IHZhbmlzaGluZ2x5IHNtYWxsLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzY2FsYXIgdmFsdWVzIHBhc3NlZCBieSB2YWx1ZS4KKiAgICoqU2FmZXR5IENoZWNrczoqKiBXZSYjMzk7dmUgZ290IGNsYW1waW5nIGFuZCBib3VuZHMgY2hlY2tzIGluIHBsYWNlLiBUaGF0IGFkZHMgYSBsYXllciBvZiBwcm90ZWN0aW9uIHRoYXQgdGhlIHZhbHVlIGlzIGFsd2F5cyBpbiBhIGtub3duIGdvb2Qgc3RhdGUuCgpLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBhIHNlcGFyYXRlIGlzc3VlLCBhbmQgdGhhdCYjMzk7cyB0aGUgbW9yZSBhcHByb3ByaWF0ZSB0b29sIGZvciB0aGUgc29ydHMgb2YgZXJyb3JzIHlvdSYjMzk7ZCBlbmNvdW50ZXIgaGVyZSBpZiB0aGVyZSB3ZXJlIGFueS4gVGhpbmdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWF0aC9sb2dpYyBidWdzLiBCdXQgdGhhdCYjMzk7cyBub3Qgd2hhdCBLTVNBTiBpcyBmb3IuCgpTbywgSSYjMzk7bSBjb21mb3J0YWJsZSBjYWxsaW5nIHRoaXMgYE5lZWRzS01TQU5gIGFzIGBmYWxzZWAuIFdlIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2AuIE5vIG5lZWQgdG8gYnVybiBhbnkgY3ljbGVzIG9uIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGlzIHBhdGNoIGxvb2tzIGNsZWFuIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAxOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgaW50ZXJmYWNlIGJ5IHJlcGxhY2luZyB0aGUgYG1pbl90c29fc2Vnc2AgY2FsbGJhY2sgd2l0aCBgdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdylgLCB1cGRhdGVzIEJCUiBhbmQgQlBGIGNvbmdlc3Rpb24gY29udHJvbCBob29rcywgYW5kIGV4cG9ydHMgYHRjcF90c29fYXV0b3NpemVgIGFzIGEgQlBGIGtmdW5jLlxuXG5BbGwgbW9kaWZpZWQgYW5kIGFkZGVkIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIHNjYWxhciBpbnRlZ2VyIHZhbHVlcyBwYXNzZWQgYnkgdmFsdWUgKGB1MzJgLCBgdW5zaWduZWQgaW50YCwgcG9pbnRlcnMgdG8gZnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0IGBzb2NrYCkuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlci1zcGFjZSAoc3VjaCBhcyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBvciBpb2N0bCByZXR1cm5zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBpbnRlcmZhY2UgYnkgcmVwbGFjaW5nIHRoZSBgbWluX3Rzb19zZWdzYCBjYWxsYmFjayB3aXRoIGB0c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KWAsIHVwZGF0ZXMgQkJSIGFuZCBCUEYgY29uZ2VzdGlvbiBjb250cm9sIGhvb2tzLCBhbmQgZXhwb3J0cyBgdGNwX3Rzb19hdXRvc2l6ZWAgYXMgYSBCUEYga2Z1bmMuXG5cbkFsbCBtb2RpZmllZCBhbmQgYWRkZWQgZnVuY3Rpb25zIG9wZXJhdGUgb24gc2NhbGFyIGludGVnZXIgdmFsdWVzIHBhc3NlZCBieSB2YWx1ZSAoYHUzMmAsIGB1bnNpZ25lZCBpbnRgLCBwb2ludGVycyB0byBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgYHNvY2tgKS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyLXNwYWNlIChzdWNoIGFzIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIG9yIGlvY3RsIHJldHVybnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMxOjQ1LjQxMjE0ODE3M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzM1OTQ3NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRDUF9DT05HX0JCUlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfdHNvX2F1dG9zaXplXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGludGVyZmFjZSBieSByZXBsYWNpbmcgdGhlIGBtaW5fdHNvX3NlZ3NgIGNhbGxiYWNrIHdpdGggYHRzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpYCwgdXBkYXRlcyBCQlIgYW5kIEJQRiBjb25nZXN0aW9uIGNvbnRyb2wgaG9va3MsIGFuZCBleHBvcnRzIGB0Y3BfdHNvX2F1dG9zaXplYCBhcyBhIEJQRiBrZnVuYy5cXG5cXG5BbGwgbW9kaWZpZWQgYW5kIGFkZGVkIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIHNjYWxhciBpbnRlZ2VyIHZhbHVlcyBwYXNzZWQgYnkgdmFsdWUgKGB1MzJgLCBgdW5zaWduZWQgaW50YCwgcG9pbnRlcnMgdG8gZnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0IGBzb2NrYCkuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlci1zcGFjZSAoc3VjaCBhcyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBvciBpb2N0bCByZXR1cm5zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgaW50ZXJmYWNlIGJ5IHJlcGxhY2luZyB0aGUgbWluX3Rzb19zZWdzIGNhbGxiYWNrIHdpdGggYSB0c29fc2VncyBjYWxsYmFjaywgdXBkYXRpbmcgVENQIG91dHB1dCBsb2dpYyAodGNwX3Rzb19hdXRvc2l6ZSwgdGNwX3Rzb19zZWdzKSwgQkJSIGNvbmdlc3Rpb24gY29udHJvbCwgYW5kIEJQRiBUQ1AgQ0Egc3RydWN0X29wcy4gdGNwX3Rzb19hdXRvc2l6ZSBpcyBhbHNvIGV4cG9zZWQgYXMgYSBCUEYga2Z1bmMuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbHRlciB0aGUgVENQIHNlZ21lbnRhdGlvbiBhbmQgcGFja2V0IHNjaGVkdWxpbmcgcGF0aCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMxOjQ1LjQxMjE1MzcwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMxNjQwMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDdmZWVjMjRhZTIxMDQ0Y2Y3Y2RhMmY2NmY2ZmIzNzQ1NGI1NTM3YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDAxOjMxOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmhcXG5pbmRleCA2NzBjMjA4NzZmMjY1Li43OWYyN2FjOWU5NjNhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXFxuKysrIGIvaW5jbHVkZS9uZXQvdGNwLmhcXG5AQCAtODI0LDYgKzgyNCw5IEBAIHVuc2lnbmVkIGludCB0Y3Bfc3luY19tc3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgcG10dSk7XFxuIHVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKTtcXG4gdTMyIHRjcF9jbGFtcF9wcm9iZTBfdG9fdXNlcl90aW1lb3V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdTMyIHdoZW4pO1xcbiBcXG4rdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcXG4rXFx0XFx0ICAgICBpbnQgbWluX3Rzb19zZWdzKTtcXG4rXFxuIC8qIEJvdW5kIE1TUyAvIFRTTyBwYWNrZXQgc2l6ZSB3aXRoIHRoZSBoYWxmIG9mIHRoZSB3aW5kb3cgKi9cXG4gc3RhdGljIGlubGluZSBpbnQgdGNwX2JvdW5kX3RvX2hhbGZfd25kKHN0cnVjdCB0Y3Bfc29jayAqdHAsIGludCBwa3RzaXplKVxcbiB7XFxuQEAgLTEzNjEsOCArMTM2NCwxNiBAQCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHtcXG4gXFx0LyogaG9vayBmb3IgcGFja2V0IGFjayBhY2NvdW50aW5nIChvcHRpb25hbCkgKi9cXG4gXFx0dm9pZCAoKnBrdHNfYWNrZWQpKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBsZSk7XFxuIFxcbi1cXHQvKiBvdmVycmlkZSBzeXNjdGxfdGNwX21pbl90c29fc2VncyAob3B0aW9uYWwpICovXFxuLVxcdHUzMiAoKm1pbl90c29fc2Vncykoc3RydWN0IHNvY2sgKnNrKTtcXG4rXFx0LyogT3ZlcnJpZGUgdGNwX3Rzb19hdXRvc2l6ZSgpIChvcHRpb25hbClcXG4rXFx0ICpcXG4rXFx0ICogSWYgcHJvdmlkZWQsIHRoaXMgY2FsbGJhY2sgc3VwcGxpZXMgdGhlIFRTTyBzZWdtZW50IHRhcmdldCBjb3VudFxcbitcXHQgKiBpbnN0ZWFkIG9mIHVzaW5nIHRjcF90c29fYXV0b3NpemUoKS4gVGhlIHJldHVybmVkIHZhbHVlIGlzXFxuK1xcdCAqIHN1YnNlcXVlbnRseSBjbGFtcGVkIHRvIFsxLCBzay1cXHUwMDNlc2tfZ3NvX21heF9zZWdzXSBieSB0aGUgY2FsbGVyLlxcbitcXHQgKlxcbitcXHQgKiBGb3IgdGhlIGtlcm5lbCBjYWxsYmFjayBwYXRoLCBtc3Nfbm93IG9yaWdpbmF0ZXMgZnJvbVxcbitcXHQgKiB0Y3BfY3VycmVudF9tc3MoKSBhbmQgc2hvdWxkIG5ldmVyIGJlIHplcm8uXFxuK1xcdCAqL1xcbitcXHR1MzIgKCp0c29fc2Vncykoc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdyk7XFxuIFxcbiBcXHQvKiBuZXcgdmFsdWUgb2YgY3duZCBhZnRlciBsb3NzIChyZXF1aXJlZCkgKi9cXG4gXFx0dTMyICAoKnVuZG9fY3duZCkoc3RydWN0IHNvY2sgKnNrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYnBmX3RjcF9jYS5jIGIvbmV0L2lwdjQvYnBmX3RjcF9jYS5jXFxuaW5kZXggNzkxZTE1MDYzMjM3Yy4uOWRlZWQyMjQ0YzJkZSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9icGZfdGNwX2NhLmNcXG4rKysgYi9uZXQvaXB2NC9icGZfdGNwX2NhLmNcXG5AQCAtMTk0LDYgKzE5NCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfcmVub19jb25nX2F2b2lkKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Jlbm9fdW5kb19jd25kKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Nsb3dfc3RhcnQpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfY29uZ19hdm9pZF9haSlcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF90c29fYXV0b3NpemUpXFxuIEJURl9LRlVOQ1NfRU5EKGJwZl90Y3BfY2FfY2hlY2tfa2Z1bmNfaWRzKVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl90Y3BfY2Ffa2Z1bmNfc2V0ID0ge1xcbkBAIC0yODQsNyArMjg1LDcgQEAgc3RhdGljIHZvaWQgYnBmX3RjcF9jYV9wa3RzX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBcXG4ge1xcbiB9XFxuIFxcbi1zdGF0aWMgdTMyIGJwZl90Y3BfY2FfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaylcXG4rc3RhdGljIHUzMiBicGZfdGNwX2NhX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMzIwLDcgKzMyMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIF9fYnBmX29wc190Y3BfY29uZ2VzdGlvbl9vcHMgPSB7XFxuIFxcdC5jd25kX2V2ZW50X3R4X3N0YXJ0ID0gYnBmX3RjcF9jYV9jd25kX2V2ZW50X3R4X3N0YXJ0LFxcbiBcXHQuaW5fYWNrX2V2ZW50ID0gYnBmX3RjcF9jYV9pbl9hY2tfZXZlbnQsXFxuIFxcdC5wa3RzX2Fja2VkID0gYnBmX3RjcF9jYV9wa3RzX2Fja2VkLFxcbi1cXHQubWluX3Rzb19zZWdzID0gYnBmX3RjcF9jYV9taW5fdHNvX3NlZ3MsXFxuK1xcdC50c29fc2VncyA9IGJwZl90Y3BfY2FfdHNvX3NlZ3MsXFxuIFxcdC5jb25nX2NvbnRyb2wgPSBicGZfdGNwX2NhX2NvbmdfY29udHJvbCxcXG4gXFx0LnVuZG9fY3duZCA9IGJwZl90Y3BfY2FfdW5kb19jd25kLFxcbiBcXHQuc25kYnVmX2V4cGFuZCA9IGJwZl90Y3BfY2Ffc25kYnVmX2V4cGFuZCxcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2Jici5jIGIvbmV0L2lwdjQvdGNwX2Jici5jXFxuaW5kZXggODIzNzhhMmJmZDFlMS4uZWNmMTFiZTQ2ZjM4MiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfYmJyLmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfYmJyLmNcXG5AQCAtMjk3LDExICsyOTcsMTggQEAgc3RhdGljIHZvaWQgYmJyX3NldF9wYWNpbmdfcmF0ZShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBidywgaW50IGdhaW4pXFxuIH1cXG4gXFxuIC8qIG92ZXJyaWRlIHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzICovXFxuLV9fYnBmX2tmdW5jIHN0YXRpYyB1MzIgYmJyX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spXFxuK3N0YXRpYyB1MzIgYmJyX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spXFxuIHtcXG4gXFx0cmV0dXJuIFJFQURfT05DRShzay1cXHUwMDNlc2tfcGFjaW5nX3JhdGUpIFxcdTAwM2MgKGJicl9taW5fdHNvX3JhdGUgXFx1MDAzZVxcdTAwM2UgMykgPyAxIDogMjtcXG4gfVxcbiBcXG4rX19icGZfa2Z1bmMgc3RhdGljIHUzMiBiYnJfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdylcXG4re1xcbitcXHRpZiAodW5saWtlbHkoIW1zc19ub3cpKVxcbitcXHRcXHRyZXR1cm4gYmJyX21pbl90c29fc2Vncyhzayk7XFxuK1xcdHJldHVybiB0Y3BfdHNvX2F1dG9zaXplKHNrLCBtc3Nfbm93LCBiYnJfbWluX3Rzb19zZWdzKHNrKSk7XFxuK31cXG4rXFxuIHN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzX2dvYWwoc3RydWN0IHNvY2sgKnNrKVxcbiB7XFxuIFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbkBAIC0xMTUxLDcgKzExNTgsNyBAQCBzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfYmJyX2Nvbmdfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuIFxcdC51bmRvX2N3bmRcXHQ9IGJicl91bmRvX2N3bmQsXFxuIFxcdC5jd25kX2V2ZW50X3R4X3N0YXJ0XFx0PSBiYnJfY3duZF9ldmVudF90eF9zdGFydCxcXG4gXFx0LnNzdGhyZXNoXFx0PSBiYnJfc3N0aHJlc2gsXFxuLVxcdC5taW5fdHNvX3NlZ3NcXHQ9IGJicl9taW5fdHNvX3NlZ3MsXFxuK1xcdC50c29fc2Vnc1xcdD0gYmJyX3Rzb19zZWdzLFxcbiBcXHQuZ2V0X2luZm9cXHQ9IGJicl9nZXRfaW5mbyxcXG4gXFx0LnNldF9zdGF0ZVxcdD0gYmJyX3NldF9zdGF0ZSxcXG4gfTtcXG5AQCAtMTE2Myw3ICsxMTcwLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9zbmRidWZfZXhwYW5kKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3VuZG9fY3duZClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9jd25kX2V2ZW50X3R4X3N0YXJ0KVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NzdGhyZXNoKVxcbi1CVEZfSURfRkxBR1MoZnVuYywgYmJyX21pbl90c29fc2VncylcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl90c29fc2VncylcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9zZXRfc3RhdGUpXFxuIEJURl9LRlVOQ1NfRU5EKHRjcF9iYnJfY2hlY2tfa2Z1bmNfaWRzKVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXFxuaW5kZXggNmY0ZGNhNGE0ZGU5OC4uYjdmMmVlNWU3YTZiMSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcXG4rKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcXG5AQCAtMjI1MiwxMyArMjI1MiwyMSBAQCBzdGF0aWMgYm9vbCB0Y3BfbmFnbGVfY2hlY2soYm9vbCBwYXJ0aWFsLCBjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbiAgKiBpbiBiaWdnZXIgVFNPIGJ1cnN0cy4gV2Ugd2UgY3V0IHRoZSBSVFQtYmFzZWQgYWxsb3dhbmNlIGluIGhhbGZcXG4gICogZm9yIGV2ZXJ5IDJeOSB1c2VjIChha2EgNTEyIHVzKSBvZiBSVFQsIHNvIHRoYXQgdGhlIFJUVC1iYXNlZCBhbGxvd2FuY2VcXG4gICogaXMgYmVsb3cgMTUwMCBieXRlcyBhZnRlciA2ICogfjUwMCB1c2VjID0gM21zLlxcbisgKlxcbisgKiBUaGUgbWluX3Rzb19zZWdzIGlzIGZsb29yZWQgdG8gMSB0byBhdm9pZCBzdXJwcmlzaW5nIGNvbnZlcnNpb24uIEFsc28sXFxuKyAqIEJQRiBjYWxsZXJzIG1heSBwYXNzIG1zc19ub3cgPT0gMC4gSW4gdGhhdCBjYXNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZVxcbisgKiBzYW5pdGl6ZWQgbWluX3Rzb19zZWdzIHZhbHVlIGFuZCBza2lwcyBhdXRvc2l6aW5nLlxcbiAgKi9cXG4tc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXFxuLVxcdFxcdFxcdCAgICBpbnQgbWluX3Rzb19zZWdzKVxcbitfX2JwZl9rZnVuYyB1MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LFxcbitcXHRcXHRcXHRcXHQgaW50IG1pbl90c29fc2VncylcXG4ge1xcbitcXHR1MzIgbWluX3RzbyA9IG1heChtaW5fdHNvX3NlZ3MsIDEpO1xcbiBcXHR1bnNpZ25lZCBsb25nIGJ5dGVzO1xcbiBcXHR1MzIgcjtcXG4gXFxuK1xcdGlmICh1bmxpa2VseSghbXNzX25vdykpXFxuK1xcdFxcdHJldHVybiBtaW5fdHNvO1xcbitcXG4gXFx0Ynl0ZXMgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3BhY2luZ19yYXRlKSBcXHUwMDNlXFx1MDAzZSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3BhY2luZ19zaGlmdCk7XFxuIFxcbiBcXHRyID0gdGNwX21pbl9ydHQodGNwX3NrKHNrKSkgXFx1MDAzZVxcdTAwM2UgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3Rzb19ydHRfbG9nKTtcXG5AQCAtMjI2Nyw4ICsyMjc1LDkgQEAgc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXFxuIFxcbiBcXHRieXRlcyA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGJ5dGVzLCBzay1cXHUwMDNlc2tfZ3NvX21heF9zaXplKTtcXG4gXFxuLVxcdHJldHVybiBtYXhfdCh1MzIsIGJ5dGVzIC8gbXNzX25vdywgbWluX3Rzb19zZWdzKTtcXG4rXFx0cmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvKTtcXG4gfVxcbitFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfdHNvX2F1dG9zaXplKTtcXG4gXFxuIC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIHdlIHdhbnQgaW4gdGhlIHNrYiB3ZSBhcmUgdHJhbnNtaXR0aW5nLlxcbiAgKiBTZWUgaWYgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZSB3YW50cyB0byBkZWNpZGU7IG90aGVyd2lzZSwgYXV0b3NpemUuXFxuQEAgLTIyNzYsMTQgKzIyODUsMTMgQEAgc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXFxuIHN0YXRpYyB1MzIgdGNwX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3cpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2Ffb3BzID0gaW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2NhX29wcztcXG4tXFx0dTMyIG1pbl90c28sIHRzb19zZWdzO1xcbi1cXG4tXFx0bWluX3RzbyA9IGNhX29wcy1cXHUwMDNlbWluX3Rzb19zZWdzID9cXG4tXFx0XFx0XFx0Y2Ffb3BzLVxcdTAwM2VtaW5fdHNvX3NlZ3Moc2spIDpcXG4tXFx0XFx0XFx0UkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2Vncyk7XFxuK1xcdHUzMiB0c29fc2VncztcXG4gXFxuLVxcdHRzb19zZWdzID0gdGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdywgbWluX3Rzbyk7XFxuLVxcdHJldHVybiBtaW5fdCh1MzIsIHRzb19zZWdzLCBzay1cXHUwMDNlc2tfZ3NvX21heF9zZWdzKTtcXG4rXFx0dHNvX3NlZ3MgPSBjYV9vcHMtXFx1MDAzZXRzb19zZWdzID9cXG4rXFx0XFx0XFx0Y2Ffb3BzLVxcdTAwM2V0c29fc2VncyhzaywgbXNzX25vdykgOlxcbitcXHRcXHRcXHR0Y3BfdHNvX2F1dG9zaXplKHNrLCBtc3Nfbm93LFxcbitcXHRcXHRcXHRcXHRcXHQgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2VncykpO1xcbitcXHRyZXR1cm4gY2xhbXBfdCh1MzIsIHRzb19zZWdzLCAxLCBzay1cXHUwMDNlc2tfZ3NvX21heF9zZWdzKTtcXG4gfVxcbiBcXG4gLyogUmV0dXJucyB0aGUgcG9ydGlvbiBvZiBza2Igd2hpY2ggY2FuIGJlIHNlbnQgcmlnaHQgYXdheSAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmNcXG5pbmRleCAwYTNlOWQzNWJmNmYwLi41ODI2MmU0OTAzMzY0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuY1xcbkBAIC0xMCw3ICsxMCw3IEBAIGV4dGVybiB1MzIgYmJyX3NuZGJ1Zl9leHBhbmQoc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07XFxuIGV4dGVybiB1MzIgYmJyX3VuZG9fY3duZChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcXG4gZXh0ZXJuIHZvaWQgYmJyX2N3bmRfZXZlbnRfdHhfc3RhcnQoc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07XFxuIGV4dGVybiB1MzIgYmJyX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzaykgX19rc3ltO1xcbi1leHRlcm4gdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07XFxuK2V4dGVybiB1MzIgYmJyX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpIF9fa3N5bTtcXG4gZXh0ZXJuIHZvaWQgYmJyX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIHU4IG5ld19zdGF0ZSkgX19rc3ltO1xcbiBcXG4gZXh0ZXJuIHZvaWQgZGN0Y3BfaW5pdChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcXG5AQCAtOTAsOSArOTAsOSBAQCB1MzIgQlBGX1BST0coc3N0aHJlc2gsIHN0cnVjdCBzb2NrICpzaylcXG4gfVxcbiBcXG4gU0VDKFxcXCJzdHJ1Y3Rfb3BzXFxcIilcXG4tdTMyIEJQRl9QUk9HKG1pbl90c29fc2Vncywgc3RydWN0IHNvY2sgKnNrKVxcbit1MzIgQlBGX1BST0codHNvX3NlZ3MsIHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXFxuIHtcXG4tXFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xcbitcXHRyZXR1cm4gYmJyX3Rzb19zZWdzKHNrLCBtc3Nfbm93KTtcXG4gfVxcbiBcXG4gU0VDKFxcXCJzdHJ1Y3Rfb3BzXFxcIilcXG5AQCAtMTIwLDcgKzEyMCw3IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2NhX2tmdW5jID0ge1xcbiBcXHQuY3duZF9ldmVudFxcdD0gKHZvaWQgKiljd25kX2V2ZW50LFxcbiBcXHQuY3duZF9ldmVudF90eF9zdGFydCA9ICh2b2lkICopY3duZF9ldmVudF90eF9zdGFydCxcXG4gXFx0LnNzdGhyZXNoXFx0PSAodm9pZCAqKXNzdGhyZXNoLFxcbi1cXHQubWluX3Rzb19zZWdzXFx0PSAodm9pZCAqKW1pbl90c29fc2VncyxcXG4rXFx0LnRzb19zZWdzXFx0PSAodm9pZCAqKXRzb19zZWdzLFxcbiBcXHQuc2V0X3N0YXRlXFx0PSAodm9pZCAqKXNldF9zdGF0ZSxcXG4gXFx0LnBrdHNfYWNrZWQgICAgID0gKHZvaWQgKilwa3RzX2Fja2VkLFxcbiBcXHQubmFtZVxcdFxcdD0gXFxcInRjcF9jYV9rZnVuY1xcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMxOjQ2LjA0NDUyNTM2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDMyMDg5ODE2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0NPTkdfQkJSXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF90c29fYXV0b3NpemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGludGVyZmFjZSBieSByZXBsYWNpbmcgdGhlIG1pbl90c29fc2VncyBjYWxsYmFjayB3aXRoIGEgdHNvX3NlZ3MgY2FsbGJhY2ssIHVwZGF0aW5nIFRDUCBvdXRwdXQgbG9naWMgKHRjcF90c29fYXV0b3NpemUsIHRjcF90c29fc2VncyksIEJCUiBjb25nZXN0aW9uIGNvbnRyb2wsIGFuZCBCUEYgVENQIENBIHN0cnVjdF9vcHMuIHRjcF90c29fYXV0b3NpemUgaXMgYWxzbyBleHBvc2VkIGFzIGEgQlBGIGtmdW5jLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWx0ZXIgdGhlIFRDUCBzZWdtZW50YXRpb24gYW5kIHBhY2tldCBzY2hlZHVsaW5nIHBhdGggaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0N2ZlZWMyNGFlMjEwNDRjZjdjZGEyZjY2ZjZmYjM3NDU0YjU1MzdiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMTozMTo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmhcbmluZGV4IDY3MGMyMDg3NmYyNjUuLjc5ZjI3YWM5ZTk2M2EgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxuKysrIGIvaW5jbHVkZS9uZXQvdGNwLmhcbkBAIC04MjQsNiArODI0LDkgQEAgdW5zaWduZWQgaW50IHRjcF9zeW5jX21zcyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwbXR1KTtcbiB1bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzayk7XG4gdTMyIHRjcF9jbGFtcF9wcm9iZTBfdG9fdXNlcl90aW1lb3V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdTMyIHdoZW4pO1xuIFxuK3UzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4rXHRcdCAgICAgaW50IG1pbl90c29fc2Vncyk7XG4rXG4gLyogQm91bmQgTVNTIC8gVFNPIHBhY2tldCBzaXplIHdpdGggdGhlIGhhbGYgb2YgdGhlIHdpbmRvdyAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHRjcF9ib3VuZF90b19oYWxmX3duZChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgcGt0c2l6ZSlcbiB7XG5AQCAtMTM2MSw4ICsxMzY0LDE2IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMge1xuIFx0LyogaG9vayBmb3IgcGFja2V0IGFjayBhY2NvdW50aW5nIChvcHRpb25hbCkgKi9cbiBcdHZvaWQgKCpwa3RzX2Fja2VkKShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wbGUpO1xuIFxuLVx0Lyogb3ZlcnJpZGUgc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgKG9wdGlvbmFsKSAqL1xuLVx0dTMyICgqbWluX3Rzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2spO1xuK1x0LyogT3ZlcnJpZGUgdGNwX3Rzb19hdXRvc2l6ZSgpIChvcHRpb25hbClcbitcdCAqXG4rXHQgKiBJZiBwcm92aWRlZCwgdGhpcyBjYWxsYmFjayBzdXBwbGllcyB0aGUgVFNPIHNlZ21lbnQgdGFyZ2V0IGNvdW50XG4rXHQgKiBpbnN0ZWFkIG9mIHVzaW5nIHRjcF90c29fYXV0b3NpemUoKS4gVGhlIHJldHVybmVkIHZhbHVlIGlzXG4rXHQgKiBzdWJzZXF1ZW50bHkgY2xhbXBlZCB0byBbMSwgc2stXHUwMDNlc2tfZ3NvX21heF9zZWdzXSBieSB0aGUgY2FsbGVyLlxuK1x0ICpcbitcdCAqIEZvciB0aGUga2VybmVsIGNhbGxiYWNrIHBhdGgsIG1zc19ub3cgb3JpZ2luYXRlcyBmcm9tXG4rXHQgKiB0Y3BfY3VycmVudF9tc3MoKSBhbmQgc2hvdWxkIG5ldmVyIGJlIHplcm8uXG4rXHQgKi9cbitcdHUzMiAoKnRzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KTtcbiBcbiBcdC8qIG5ldyB2YWx1ZSBvZiBjd25kIGFmdGVyIGxvc3MgKHJlcXVpcmVkKSAqL1xuIFx0dTMyICAoKnVuZG9fY3duZCkoc3RydWN0IHNvY2sgKnNrKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9icGZfdGNwX2NhLmMgYi9uZXQvaXB2NC9icGZfdGNwX2NhLmNcbmluZGV4IDc5MWUxNTA2MzIzN2MuLjlkZWVkMjI0NGMyZGUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9icGZfdGNwX2NhLmNcbisrKyBiL25ldC9pcHY0L2JwZl90Y3BfY2EuY1xuQEAgLTE5NCw2ICsxOTQsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Jlbm9fY29uZ19hdm9pZClcbiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Jlbm9fdW5kb19jd25kKVxuIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3Bfc2xvd19zdGFydClcbiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX2NvbmdfYXZvaWRfYWkpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF90c29fYXV0b3NpemUpXG4gQlRGX0tGVU5DU19FTkQoYnBmX3RjcF9jYV9jaGVja19rZnVuY19pZHMpXG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl90Y3BfY2Ffa2Z1bmNfc2V0ID0ge1xuQEAgLTI4NCw3ICsyODUsNyBAQCBzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3BrdHNfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcFxuIHtcbiB9XG4gXG4tc3RhdGljIHUzMiBicGZfdGNwX2NhX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spXG4rc3RhdGljIHUzMiBicGZfdGNwX2NhX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMyMCw3ICszMjEsNyBAQCBzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBfX2JwZl9vcHNfdGNwX2Nvbmdlc3Rpb25fb3BzID0ge1xuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnQgPSBicGZfdGNwX2NhX2N3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuaW5fYWNrX2V2ZW50ID0gYnBmX3RjcF9jYV9pbl9hY2tfZXZlbnQsXG4gXHQucGt0c19hY2tlZCA9IGJwZl90Y3BfY2FfcGt0c19hY2tlZCxcbi1cdC5taW5fdHNvX3NlZ3MgPSBicGZfdGNwX2NhX21pbl90c29fc2VncyxcbitcdC50c29fc2VncyA9IGJwZl90Y3BfY2FfdHNvX3NlZ3MsXG4gXHQuY29uZ19jb250cm9sID0gYnBmX3RjcF9jYV9jb25nX2NvbnRyb2wsXG4gXHQudW5kb19jd25kID0gYnBmX3RjcF9jYV91bmRvX2N3bmQsXG4gXHQuc25kYnVmX2V4cGFuZCA9IGJwZl90Y3BfY2Ffc25kYnVmX2V4cGFuZCxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYmJyLmMgYi9uZXQvaXB2NC90Y3BfYmJyLmNcbmluZGV4IDgyMzc4YTJiZmQxZTEuLmVjZjExYmU0NmYzODIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYmJyLmNcbisrKyBiL25ldC9pcHY0L3RjcF9iYnIuY1xuQEAgLTI5NywxMSArMjk3LDE4IEBAIHN0YXRpYyB2b2lkIGJicl9zZXRfcGFjaW5nX3JhdGUoc3RydWN0IHNvY2sgKnNrLCB1MzIgYncsIGludCBnYWluKVxuIH1cbiBcbiAvKiBvdmVycmlkZSBzeXNjdGxfdGNwX21pbl90c29fc2VncyAqL1xuLV9fYnBmX2tmdW5jIHN0YXRpYyB1MzIgYmJyX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spXG4rc3RhdGljIHUzMiBiYnJfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3BhY2luZ19yYXRlKSBcdTAwM2MgKGJicl9taW5fdHNvX3JhdGUgXHUwMDNlXHUwMDNlIDMpID8gMSA6IDI7XG4gfVxuIFxuK19fYnBmX2tmdW5jIHN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXG4re1xuK1x0aWYgKHVubGlrZWx5KCFtc3Nfbm93KSlcbitcdFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xuK1x0cmV0dXJuIHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIGJicl9taW5fdHNvX3NlZ3Moc2spKTtcbit9XG4rXG4gc3RhdGljIHUzMiBiYnJfdHNvX3NlZ3NfZ29hbChzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG5AQCAtMTE1MSw3ICsxMTU4LDcgQEAgc3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2Jicl9jb25nX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuIFx0LnVuZG9fY3duZFx0PSBiYnJfdW5kb19jd25kLFxuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnRcdD0gYmJyX2N3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuc3N0aHJlc2hcdD0gYmJyX3NzdGhyZXNoLFxuLVx0Lm1pbl90c29fc2Vnc1x0PSBiYnJfbWluX3Rzb19zZWdzLFxuK1x0LnRzb19zZWdzXHQ9IGJicl90c29fc2VncyxcbiBcdC5nZXRfaW5mb1x0PSBiYnJfZ2V0X2luZm8sXG4gXHQuc2V0X3N0YXRlXHQ9IGJicl9zZXRfc3RhdGUsXG4gfTtcbkBAIC0xMTYzLDcgKzExNzAsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NuZGJ1Zl9leHBhbmQpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl91bmRvX2N3bmQpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9jd25kX2V2ZW50X3R4X3N0YXJ0KVxuIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfc3N0aHJlc2gpXG4tQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9taW5fdHNvX3NlZ3MpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl90c29fc2VncylcbiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NldF9zdGF0ZSlcbiBCVEZfS0ZVTkNTX0VORCh0Y3BfYmJyX2NoZWNrX2tmdW5jX2lkcylcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbmluZGV4IDZmNGRjYTRhNGRlOTguLmI3ZjJlZTVlN2E2YjEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuQEAgLTIyNTIsMTMgKzIyNTIsMjEgQEAgc3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcbiAgKiBpbiBiaWdnZXIgVFNPIGJ1cnN0cy4gV2Ugd2UgY3V0IHRoZSBSVFQtYmFzZWQgYWxsb3dhbmNlIGluIGhhbGZcbiAgKiBmb3IgZXZlcnkgMl45IHVzZWMgKGFrYSA1MTIgdXMpIG9mIFJUVCwgc28gdGhhdCB0aGUgUlRULWJhc2VkIGFsbG93YW5jZVxuICAqIGlzIGJlbG93IDE1MDAgYnl0ZXMgYWZ0ZXIgNiAqIH41MDAgdXNlYyA9IDNtcy5cbisgKlxuKyAqIFRoZSBtaW5fdHNvX3NlZ3MgaXMgZmxvb3JlZCB0byAxIHRvIGF2b2lkIHN1cnByaXNpbmcgY29udmVyc2lvbi4gQWxzbyxcbisgKiBCUEYgY2FsbGVycyBtYXkgcGFzcyBtc3Nfbm93ID09IDAuIEluIHRoYXQgY2FzZSB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGVcbisgKiBzYW5pdGl6ZWQgbWluX3Rzb19zZWdzIHZhbHVlIGFuZCBza2lwcyBhdXRvc2l6aW5nLlxuICAqL1xuLXN0YXRpYyB1MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LFxuLVx0XHRcdCAgICBpbnQgbWluX3Rzb19zZWdzKVxuK19fYnBmX2tmdW5jIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4rXHRcdFx0XHQgaW50IG1pbl90c29fc2VncylcbiB7XG4rXHR1MzIgbWluX3RzbyA9IG1heChtaW5fdHNvX3NlZ3MsIDEpO1xuIFx0dW5zaWduZWQgbG9uZyBieXRlcztcbiBcdHUzMiByO1xuIFxuK1x0aWYgKHVubGlrZWx5KCFtc3Nfbm93KSlcbitcdFx0cmV0dXJuIG1pbl90c287XG4rXG4gXHRieXRlcyA9IFJFQURfT05DRShzay1cdTAwM2Vza19wYWNpbmdfcmF0ZSkgXHUwMDNlXHUwMDNlIFJFQURfT05DRShzay1cdTAwM2Vza19wYWNpbmdfc2hpZnQpO1xuIFxuIFx0ciA9IHRjcF9taW5fcnR0KHRjcF9zayhzaykpIFx1MDAzZVx1MDAzZSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF90c29fcnR0X2xvZyk7XG5AQCAtMjI2Nyw4ICsyMjc1LDkgQEAgc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4gXG4gXHRieXRlcyA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGJ5dGVzLCBzay1cdTAwM2Vza19nc29fbWF4X3NpemUpO1xuIFxuLVx0cmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvX3NlZ3MpO1xuK1x0cmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvKTtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwodGNwX3Rzb19hdXRvc2l6ZSk7XG4gXG4gLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMgd2Ugd2FudCBpbiB0aGUgc2tiIHdlIGFyZSB0cmFuc21pdHRpbmcuXG4gICogU2VlIGlmIGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGUgd2FudHMgdG8gZGVjaWRlOyBvdGhlcndpc2UsIGF1dG9zaXplLlxuQEAgLTIyNzYsMTQgKzIyODUsMTMgQEAgc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4gc3RhdGljIHUzMiB0Y3BfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYV9vcHMgPSBpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHM7XG4tXHR1MzIgbWluX3RzbywgdHNvX3NlZ3M7XG4tXG4tXHRtaW5fdHNvID0gY2Ffb3BzLVx1MDAzZW1pbl90c29fc2VncyA/XG4tXHRcdFx0Y2Ffb3BzLVx1MDAzZW1pbl90c29fc2VncyhzaykgOlxuLVx0XHRcdFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2Vncyk7XG4rXHR1MzIgdHNvX3NlZ3M7XG4gXG4tXHR0c29fc2VncyA9IHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIG1pbl90c28pO1xuLVx0cmV0dXJuIG1pbl90KHUzMiwgdHNvX3NlZ3MsIHNrLVx1MDAzZXNrX2dzb19tYXhfc2Vncyk7XG4rXHR0c29fc2VncyA9IGNhX29wcy1cdTAwM2V0c29fc2VncyA/XG4rXHRcdFx0Y2Ffb3BzLVx1MDAzZXRzb19zZWdzKHNrLCBtc3Nfbm93KSA6XG4rXHRcdFx0dGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdyxcbitcdFx0XHRcdFx0IFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2VncykpO1xuK1x0cmV0dXJuIGNsYW1wX3QodTMyLCB0c29fc2VncywgMSwgc2stXHUwMDNlc2tfZ3NvX21heF9zZWdzKTtcbiB9XG4gXG4gLyogUmV0dXJucyB0aGUgcG9ydGlvbiBvZiBza2Igd2hpY2ggY2FuIGJlIHNlbnQgcmlnaHQgYXdheSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuY1xuaW5kZXggMGEzZTlkMzViZjZmMC4uNTgyNjJlNDkwMzM2NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jXG5AQCAtMTAsNyArMTAsNyBAQCBleHRlcm4gdTMyIGJicl9zbmRidWZfZXhwYW5kKHN0cnVjdCBzb2NrICpzaykgX19rc3ltO1xuIGV4dGVybiB1MzIgYmJyX3VuZG9fY3duZChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBiYnJfY3duZF9ldmVudF90eF9zdGFydChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbiBleHRlcm4gdTMyIGJicl9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbi1leHRlcm4gdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07XG4rZXh0ZXJuIHUzMiBiYnJfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdykgX19rc3ltO1xuIGV4dGVybiB2b2lkIGJicl9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCB1OCBuZXdfc3RhdGUpIF9fa3N5bTtcbiBcbiBleHRlcm4gdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaykgX19rc3ltO1xuQEAgLTkwLDkgKzkwLDkgQEAgdTMyIEJQRl9QUk9HKHNzdGhyZXNoLCBzdHJ1Y3Qgc29jayAqc2spXG4gfVxuIFxuIFNFQyhcInN0cnVjdF9vcHNcIilcbi11MzIgQlBGX1BST0cobWluX3Rzb19zZWdzLCBzdHJ1Y3Qgc29jayAqc2spXG4rdTMyIEJQRl9QUk9HKHRzb19zZWdzLCBzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KVxuIHtcbi1cdHJldHVybiBiYnJfbWluX3Rzb19zZWdzKHNrKTtcbitcdHJldHVybiBiYnJfdHNvX3NlZ3Moc2ssIG1zc19ub3cpO1xuIH1cbiBcbiBTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG5AQCAtMTIwLDcgKzEyMCw3IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2NhX2tmdW5jID0ge1xuIFx0LmN3bmRfZXZlbnRcdD0gKHZvaWQgKiljd25kX2V2ZW50LFxuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnQgPSAodm9pZCAqKWN3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuc3N0aHJlc2hcdD0gKHZvaWQgKilzc3RocmVzaCxcbi1cdC5taW5fdHNvX3NlZ3NcdD0gKHZvaWQgKiltaW5fdHNvX3NlZ3MsXG4rXHQudHNvX3NlZ3NcdD0gKHZvaWQgKil0c29fc2VncyxcbiBcdC5zZXRfc3RhdGVcdD0gKHZvaWQgKilzZXRfc3RhdGUsXG4gXHQucGt0c19hY2tlZCAgICAgPSAodm9pZCAqKXBrdHNfYWNrZWQsXG4gXHQubmFtZVx0XHQ9IFwidGNwX2NhX2tmdW5jXCIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMTo0Ni4wNDQ1MjY3MjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTQwMDU5MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFNPIFNlZ21lbnQgQ291bnQgYW5kIEJQRiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSByZXZhbXBlZCBob3cgdGhlIFRTTyBzZWdtZW50IGNvdW50IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIHN0cnVjdHVyZS4gSW5zdGVhZCBvZiBhIGBtaW5fdHNvX3NlZ3NgIGNhbGxiYWNrLCB3ZSBub3cgaGF2ZSBhIGB0c29fc2Vnc2AgY2FsbGJhY2sgdGhhdCB0YWtlcyB0aGUgc29ja2V0IChgc2tgKSBhbmQgdGhlIGN1cnJlbnQgTWF4aW11bSBTZWdtZW50IFNpemUgKGBtc3Nfbm93YCkgYXMgaW5wdXQgYW5kIGRpcmVjdGx5IHJldHVybnMgdGhlIFRTTyBzZWdtZW50IGNvdW50LiBUaGF0J3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQgaW4gdGhlIGludGVyZmFjZSwgYW5kIGltbWVkaWF0ZWx5IEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtcywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGFyZSBCUEYtYmFzZWQuXG5cbkFsc28sIGV4cG9ydGluZyBgdGNwX3Rzb19hdXRvc2l6ZWAgYXMgYm90aCBhIEJQRiBrZnVuYyBhbmQgYSByZWd1bGFyIHN5bWJvbCBpcyBpbnRlcmVzdGluZy4gVGhhdCBvcGVucyB1cCBzb21lIHBvc3NpYmlsaXRpZXMgZm9yIHVzZXJzcGFjZSBjb250cm9sIG9yIGR5bmFtaWMgYWRqdXN0bWVudHMsIHdoaWNoIGNvdWxkIGJlIHVzZWZ1bC4gVGhlIHVwZGF0ZXMgdG8gdGhlIEJQRiBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIGBzdHJ1Y3Rfb3BzYCBhbmQgdGhlIEJCUiBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGFyZSBleHBlY3RlZCwgc2luY2UgdGhlcmUncyBhIG5ldyBpbnRlcmZhY2UuIE5vdyBJIGhhdmUgdG8gbG9vayBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhhdC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgY2hhbmdlcyBhcmUgZ29pbmcgdG8gYmUgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMuIFRoZSBpbmNsdWRlZCBmaWxlczogYGluY2x1ZGUvbmV0L3RjcC5oYCwgYG5ldC9pcHY0L2JwZl90Y3BfY2EuY2AsIGBuZXQvaXB2NC90Y3BfYmJyLmNgLCBgbmV0L2lwdjQvdGNwX291dHB1dC5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmNgLiBJIGhhdmUgdG8gZGlnIGludG8gdGhvc2UgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobXMgaGF2ZSBiZWVuIGNoYW5nZWQuXG5cblNvLCBJ4oCZbGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gYG5ldC9pcHY0L3RjcF9vdXRwdXQuY2AgdG8gc2VlIGhvdyBpdCB1c2VzIHRoZSBuZXcgYHRzb19zZWdzKClgIGFuZCB0aGVuIGxvb2sgYXQgdGhlIGNoYW5nZXMgdG8gdGhlIEJCUiBhbmQgQlBGIGNvbmdlc3Rpb24gY29udHJvbCBpbXBsZW1lbnRhdGlvbnMuIEknbGwgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB3aGF0J3MgYmVlbiBjaGFuZ2VkLCBhcyB3ZWxsIGFzIHRvIGxvb2sgZm9yIGNvbmZpZ3MgYW5kIHRoZSBhZmZlY3RlZCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMTo1My4xODQ1ODkzNjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzNjI4MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3Rzb19hdXRvc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9icGZfdGNwX2NhLmM9MTk2PUJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfY29uZ19hdm9pZF9haSlcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MTk3OkJURl9JRF9GTEFHUyhmdW5jLCB0Y3BfdHNvX2F1dG9zaXplKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xOTgtQlRGX0tGVU5DU19FTkQoYnBmX3RjcF9jYV9jaGVja19rZnVuY19pZHMpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz05NTc9c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfeG1pdF9zaXplX2dvYWwoc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdyxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTk2NS1cXG5uZXQvaXB2NC90Y3AuYzo5NjY6XFx0LyogTm90ZSA6IHRjcF90c29fYXV0b3NpemUoKSB3aWxsIGV2ZW50dWFsbHkgc3BsaXQgdGhpcyBsYXRlciAqL1xcbm5ldC9pcHY0L3RjcC5jLTk2Ny1cXHRuZXdfc2l6ZV9nb2FsID0gdGNwX2JvdW5kX3RvX2hhbGZfd25kKHRwLCBzay1cXHUwMDNlc2tfZ3NvX21heF9zaXplKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYz0zMDU9X19icGZfa2Z1bmMgc3RhdGljIHUzMiBiYnJfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdylcXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYy0zMDgtXFx0XFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xcbm5ldC9pcHY0L3RjcF9iYnIuYzozMDk6XFx0cmV0dXJuIHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIGJicl9taW5fdHNvX3NlZ3Moc2spKTtcXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzEwLX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYz0zMTI9c3RhdGljIHUzMiBiYnJfdHNvX3NlZ3NfZ29hbChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzE2LVxcbm5ldC9pcHY0L3RjcF9iYnIuYzozMTc6XFx0LyogU29ydCBvZiB0Y3BfdHNvX2F1dG9zaXplKCkgYnV0IGlnbm9yaW5nXFxubmV0L2lwdjQvdGNwX2Jici5jLTMxOC1cXHQgKiBkcml2ZXIgcHJvdmlkZWQgc2tfZ3NvX21heF9zaXplLlxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyMzQ9c3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjU5LSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjYwOl9fYnBmX2tmdW5jIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNjEtXFx0XFx0XFx0XFx0IGludCBtaW5fdHNvX3NlZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI3OS19XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyODA6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3Rzb19hdXRvc2l6ZSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyODEtXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjI4NT1zdGF0aWMgdTMyIHRjcF90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93KVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyOTEtXFx0XFx0XFx0Y2Ffb3BzLVxcdTAwM2V0c29fc2VncyhzaywgbXNzX25vdykgOlxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjkyOlxcdFxcdFxcdHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyOTMtXFx0XFx0XFx0XFx0XFx0IFJFQURfT05DRShzb2NrX25ldChzayktXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzE6NTMuMjM3OTU5MDM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk2NDI5NDk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJQRiBhbmQgVENQIENvbmdlc3Rpb24gQ29udHJvbCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb2YgYSBjb3VwbGUgb2YgQlBGIGFuZCBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZXMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gc2VlIHdoYXQgS2NvbmZpZyBvcHRpb25zIHNwZWNpZmljYWxseSByZWxhdGUgdG8gYGJwZl90Y3BfY2EuY2AgYW5kIGB0Y3BfYmJyLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmZWF0dXJlcyB0aGV5IHJlbHkgb24sIGFuZCB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgdG8gaW5jbHVkZSB0aGVtIGluIGEga2VybmVsIGJ1aWxkLiBUbyBkbyB0aGF0LCBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSByZWxldmFudCBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBtb2R1bGVzLiBIb3BlZnVsbHksIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFybHkgbGFpZCBvdXQgdGhlcmUuIFRpbWUgdG8gZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTIyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzE6NTkuMjAyMjU2OTg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDQxNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRDUF9DT05HX0JCUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTY0OT1jb25maWcgVENQX0NPTkdfQ0RHXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTY2NS1cXG5uZXQvaXB2NC9LY29uZmlnOjY2Njpjb25maWcgVENQX0NPTkdfQkJSXFxubmV0L2lwdjQvS2NvbmZpZy02NjctXFx0dHJpc3RhdGUgXFxcIkJCUiBUQ1BcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTY4MT1jaG9pY2VcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNzE1LVxcdGNvbmZpZyBERUZBVUxUX0JCUlxcbm5ldC9pcHY0L0tjb25maWc6NzE2OlxcdFxcdGJvb2wgXFxcIkJCUlxcXCIgaWYgVENQX0NPTkdfQkJSPXlcXG5uZXQvaXB2NC9LY29uZmlnLTcxNy1cXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTQ2PW9iai0kKENPTkZJR19JTkVUX1JBV19ESUFHKSArPSByYXdfZGlhZy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX1RDUF9DT05HX0JCUikgKz0gdGNwX2Jici5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNDgtb2JqLSQoQ09ORklHX1RDUF9DT05HX0JJQykgKz0gdGNwX2JpYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMxOjU5LjI1MzcwMzg5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4NDc3MDY0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgVENQIENvbmdlc3Rpb24gQ29udHJvbCBJbnN0cnVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHdoZXJlIHRoZSBCUEYtYmFzZWQgVENQIGNvbmdlc3Rpb24gY29udHJvbCBwcm9iZXMgYXJlIGRlZmluZWQgYW5kIGNvbmZpZ3VyZWQuIEkndmUgYWxyZWFkeSBnb3QgYSBnb29kIGdyYXNwLCBidXQgbGV0J3MgYmUgdGhvcm91Z2guIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBleHBsaWNpdGx5IGNoZWNraW5nIGBuZXQvaXB2NC9icGZfdGNwX2NhLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgQlBGLWJhc2VkIGNvbmdlc3Rpb24gY29udHJvbCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIFRoZW4sIGZvciB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgYW55IGFzc29jaWF0ZWQgY29tcGlsZS10aW1lIG9wdGlvbnMsIGl0J3MgZXNzZW50aWFsIHRvIGxvb2sgYXQgYG5ldC9pcHY0L01ha2VmaWxlYCBhbmQgYG5ldC9pcHY0L0tjb25maWdgLiBUaGVzZSB3aWxsIHJldmVhbCBob3cgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSBhbmQgd2hhdCBjb250cm9scyBpdHMgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBiYXNlZCBvbiB1c2VyIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLCBpbmNsdWRpbmcgYW55IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhc3BlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjExLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6MDMuMTAxNDEyODY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Mjg4MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90Y3BfY2FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9NzE9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcXG5uZXQvaXB2NC9NYWtlZmlsZTo3MjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl90Y3BfY2Eub1xcbm5ldC9pcHY0L01ha2VmaWxlLTczLWVuZGlmXFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MTk9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdGNwX2Nvbmdlc3Rpb25fb3BzX3R5cGU7XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIwLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMTpzdGF0aWMgaW50IGJwZl90Y3BfY2FfaW5pdChzdHJ1Y3QgYnRmICpidGYpXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyLXtcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy00My1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6NDQ6c3RhdGljIGJvb2wgYnBmX3RjcF9jYV9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTQ1LVxcdFxcdFxcdFxcdCAgICAgICBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTYwLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzo2MTpzdGF0aWMgaW50IGJwZl90Y3BfY2FfYnRmX3N0cnVjdF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtNjItXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYz0xMjE9QlBGX0NBTExfMihicGZfdGNwX3NlbmRfYWNrLCBzdHJ1Y3QgdGNwX3NvY2sgKiwgdHAsIHUzMiwgcmN2X254dClcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMTIyLXtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MTIzOlxcdC8qIGJwZl90Y3BfY2EgcHJvZyBjYW5ub3QgaGF2ZSBOVUxMIHRwICovXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTEyNC1cXHRfX3RjcF9zZW5kX2Fjaygoc3RydWN0IHNvY2sgKil0cCwgcmN2X254dCwgMCk7XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MTUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoxNTI6YnBmX3RjcF9jYV9nZXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTE1My1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xOTAtXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjE5MTpCVEZfS0ZVTkNTX1NUQVJUKGJwZl90Y3BfY2FfY2hlY2tfa2Z1bmNfaWRzKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xOTItQlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF9yZW5vX3NzdGhyZXNoKVxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTE5Nz1CVEZfSURfRkxBR1MoZnVuYywgdGNwX3Rzb19hdXRvc2l6ZSlcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MTk4OkJURl9LRlVOQ1NfRU5EKGJwZl90Y3BfY2FfY2hlY2tfa2Z1bmNfaWRzKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xOTktXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIwMDpzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3RjcF9jYV9rZnVuY19zZXQgPSB7XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIwMS1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjAyOlxcdC5zZXQgICA9IFxcdTAwMjZicGZfdGNwX2NhX2NoZWNrX2tmdW5jX2lkcyxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjAzLX07XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIwNC1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjA1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfdGNwX2NhX3ZlcmlmaWVyX29wcyA9IHtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjA2OlxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gYnBmX3RjcF9jYV9nZXRfZnVuY19wcm90byxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjA3OlxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IGJwZl90Y3BfY2FfaXNfdmFsaWRfYWNjZXNzLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMDg6XFx0LmJ0Zl9zdHJ1Y3RfYWNjZXNzXFx0PSBicGZfdGNwX2NhX2J0Zl9zdHJ1Y3RfYWNjZXNzLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMDktfTtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjEwLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMTE6c3RhdGljIGludCBicGZfdGNwX2NhX2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjEyLVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMzgtXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIzOTpzdGF0aWMgaW50IGJwZl90Y3BfY2FfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI0MC17XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjQzLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyNDQ6c3RhdGljIHZvaWQgYnBmX3RjcF9jYV91bnJlZyh2b2lkICprZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNDUte1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI0OC1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjQ5OnN0YXRpYyBpbnQgYnBmX3RjcF9jYV91cGRhdGUodm9pZCAqa2RhdGEsIHZvaWQgKm9sZF9rZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNTAte1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI1My1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjU0OnN0YXRpYyBpbnQgYnBmX3RjcF9jYV92YWxpZGF0ZSh2b2lkICprZGF0YSlcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjU1LXtcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNTgtXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI1OTpzdGF0aWMgdTMyIGJwZl90Y3BfY2Ffc3N0aHJlc2goc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNjAte1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI2My1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjY0OnN0YXRpYyB2b2lkIGJwZl90Y3BfY2FfY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIHUzMiBhY2tlZClcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjY1LXtcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNjctXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI2ODpzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIHU4IG5ld19zdGF0ZSlcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjY5LXtcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNzEtXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI3MjpzdGF0aWMgdm9pZCBicGZfdGNwX2NhX2N3bmRfZXZlbnQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHRjcF9jYV9ldmVudCBldilcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjczLXtcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNzUtXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjI3NjpzdGF0aWMgdm9pZCBicGZfdGNwX2NhX2N3bmRfZXZlbnRfdHhfc3RhcnQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yNzcte1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI3OS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjgwOnN0YXRpYyB2b2lkIGJwZl90Y3BfY2FfaW5fYWNrX2V2ZW50KHN0cnVjdCBzb2NrICpzaywgdTMyIGZsYWdzKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yODEte1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI4My1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6Mjg0OnN0YXRpYyB2b2lkIGJwZl90Y3BfY2FfcGt0c19hY2tlZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wbGUpXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI4NS17XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjg3LVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyODg6c3RhdGljIHUzMiBicGZfdGNwX2NhX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI4OS17XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjkyLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyOTM6c3RhdGljIHZvaWQgYnBmX3RjcF9jYV9jb25nX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCBpbnQgZmxhZyxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjk0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcmF0ZV9zYW1wbGUgKnJzKVxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTI5Ny1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6Mjk4OnN0YXRpYyB1MzIgYnBmX3RjcF9jYV91bmRvX2N3bmQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yOTkte1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTMwMi1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzAzOnN0YXRpYyB1MzIgYnBmX3RjcF9jYV9zbmRidWZfZXhwYW5kKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzA0LXtcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMDctXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMwODpzdGF0aWMgdm9pZCBfX2JwZl90Y3BfY2FfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTMwOS17XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzExLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMTI6c3RhdGljIHZvaWQgX19icGZfdGNwX2NhX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMTMte1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTMxNj1zdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBfX2JwZl9vcHNfdGNwX2Nvbmdlc3Rpb25fb3BzID0ge1xcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMTc6XFx0LnNzdGhyZXNoID0gYnBmX3RjcF9jYV9zc3RocmVzaCxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzE4OlxcdC5jb25nX2F2b2lkID0gYnBmX3RjcF9jYV9jb25nX2F2b2lkLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMTk6XFx0LnNldF9zdGF0ZSA9IGJwZl90Y3BfY2Ffc2V0X3N0YXRlLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMjA6XFx0LmN3bmRfZXZlbnQgPSBicGZfdGNwX2NhX2N3bmRfZXZlbnQsXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMyMTpcXHQuY3duZF9ldmVudF90eF9zdGFydCA9IGJwZl90Y3BfY2FfY3duZF9ldmVudF90eF9zdGFydCxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzIyOlxcdC5pbl9hY2tfZXZlbnQgPSBicGZfdGNwX2NhX2luX2Fja19ldmVudCxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzIzOlxcdC5wa3RzX2Fja2VkID0gYnBmX3RjcF9jYV9wa3RzX2Fja2VkLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMjQ6XFx0LnRzb19zZWdzID0gYnBmX3RjcF9jYV90c29fc2VncyxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzI1OlxcdC5jb25nX2NvbnRyb2wgPSBicGZfdGNwX2NhX2NvbmdfY29udHJvbCxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzI2OlxcdC51bmRvX2N3bmQgPSBicGZfdGNwX2NhX3VuZG9fY3duZCxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzI3OlxcdC5zbmRidWZfZXhwYW5kID0gYnBmX3RjcF9jYV9zbmRidWZfZXhwYW5kLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMjgtXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMyOTpcXHQuaW5pdCA9IF9fYnBmX3RjcF9jYV9pbml0LFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMzA6XFx0LnJlbGVhc2UgPSBfX2JwZl90Y3BfY2FfcmVsZWFzZSxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzMxLX07XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MzMzPXN0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX3RjcF9jb25nZXN0aW9uX29wcyA9IHtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzM0OlxcdC52ZXJpZmllcl9vcHMgPSBcXHUwMDI2YnBmX3RjcF9jYV92ZXJpZmllcl9vcHMsXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMzNTpcXHQucmVnID0gYnBmX3RjcF9jYV9yZWcsXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjMzNjpcXHQudW5yZWcgPSBicGZfdGNwX2NhX3VucmVnLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMzc6XFx0LnVwZGF0ZSA9IGJwZl90Y3BfY2FfdXBkYXRlLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMzg6XFx0LmluaXRfbWVtYmVyID0gYnBmX3RjcF9jYV9pbml0X21lbWJlcixcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzM5OlxcdC5pbml0ID0gYnBmX3RjcF9jYV9pbml0LFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozNDA6XFx0LnZhbGlkYXRlID0gYnBmX3RjcF9jYV92YWxpZGF0ZSxcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQxLVxcdC5uYW1lID0gXFxcInRjcF9jb25nZXN0aW9uX29wc1xcXCIsXFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQ1LVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozNDY6c3RhdGljIGludCBfX2luaXQgYnBmX3RjcF9jYV9rZnVuY19pbml0KHZvaWQpXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTM0Ny17XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQ5LVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozNTA6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZicGZfdGNwX2NhX2tmdW5jX3NldCk7XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTM1MS1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnBmX3N0cnVjdF9vcHMoXFx1MDAyNmJwZl90Y3BfY29uZ2VzdGlvbl9vcHMsIHRjcF9jb25nZXN0aW9uX29wcyk7XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzU0LX1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzU1OmxhdGVfaW5pdGNhbGwoYnBmX3RjcF9jYV9rZnVuY19pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6MDMuMTQ5NzA1ODMzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU4NzEyMjMzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBUQ1AgVFNPIFNlZ21lbnQgU2l6ZSBEZXRlcm1pbmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgVENQIG91dHB1dCBwYXRoLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIGB0Y3BfdHNvX3NlZ3NgIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgdGNwX3Rzb19hdXRvc2l6ZWAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgd2hlcmUgYHRjcF90c29fYXV0b3NpemVgIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIGxhcmdlciBUQ1Agb3V0cHV0IHByb2Nlc3MuIFdoZXJlIGFyZSB0aGUgZGVjaXNpb25zIGJlaW5nIG1hZGUgYmFzZWQgb24gdGhpcyB2YWx1ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGluZmx1ZW5jZXMgdGhlIG51bWJlciBvZiBzZWdtZW50cyB3ZSBlbmQgdXAgd2l0aC4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgZGl2aW5nIGludG8gdGhlIFRTTyAoVENQIFNlZ21lbnRhdGlvbiBPZmZsb2FkKSBjb2RlLCB3aGljaCBjb3VsZCBtZWFuIGxvb2tpbmcgYXQgaG93IHRoZSBoYXJkd2FyZSBpbnRlcmZhY2VzIHdpdGggdGhlIHNvZnR3YXJlIHNlZ21lbnRhdGlvbiwgdG9vLiBJIHN1c3BlY3QgYHRjcF90c29fc2Vnc2AgcHJvYmFibHkgaG9sZHMgYSBjYWxjdWxhdGVkIHZhbHVlLCBwZXJoYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWdtZW50cyB0aGUgTklDIGNhbiBoYW5kbGUgZWZmaWNpZW50bHksIG9yIG1heWJlIGV2ZW4gdGhlICphY3R1YWwqIG51bWJlciBhZnRlciBjb25zaWRlcmF0aW9ucyBvZiBNVFUsIGhlYWRlciBzaXplcywgYW5kIE1TUy4gVWx0aW1hdGVseSwgSSdtIHRyeWluZyB0byBvcHRpbWl6ZSBUQ1AgcGVyZm9ybWFuY2UsIHNvIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgaW50ZXJhY3Rpb24gaXMgY3J1Y2lhbC4gVGhpcyB3aWxsIGhlbHAgbWUgZGlhZ25vc2UgdGhyb3VnaHB1dCBib3R0bGVuZWNrcyBhbmQgZmluZS10dW5lIHBhcmFtZXRlcnMgZm9yIG9wdGltYWwgdHJhbnNmZXIgY2hhcmFjdGVyaXN0aWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY1NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMyOjA1LjczNjgzMDY4NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MTIxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3Rzb19zZWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMjgwPUVYUE9SVF9TWU1CT0xfR1BMKHRjcF90c29fYXV0b3NpemUpO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyODQtICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyODU6c3RhdGljIHUzMiB0Y3BfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI4Ni17XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9Mjk3Mj1zdGF0aWMgYm9vbCB0Y3Bfd3JpdGVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LCBpbnQgbm9uYWdsZSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yOTk5LVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozMDAwOlxcdG1heF9zZWdzID0gdGNwX3Rzb19zZWdzKHNrLCBtc3Nfbm93KTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzAwMS1cXHR3aGlsZSAoKHNrYiA9IHRjcF9zZW5kX2hlYWQoc2spKSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM3MzM9dm9pZCB0Y3BfeG1pdF9yZXRyYW5zbWl0X3F1ZXVlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zNzQ2LVxcdHNrYiA9IHRwLVxcdTAwM2VyZXRyYW5zbWl0X3NrYl9oaW50ID86IHJ0eF9oZWFkO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozNzQ3OlxcdG1heF9zZWdzID0gdGNwX3Rzb19zZWdzKHNrLCB0Y3BfY3VycmVudF9tc3Moc2spKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzc0OC1cXHRza2JfcmJ0cmVlX3dhbGtfZnJvbShza2IpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6MDUuNzg1NzQ5ODgyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MzY5ODMyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipFeHBsb3JpbmcgQ29uZ2VzdGlvbiBDb250cm9sIEFsZ29yaXRobSBTcGFjZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgcHJvYmxlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSBvZiBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtcyBiZXR0ZXIsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGlzIGBtaW5fdHNvX3NlZ3NgIHZhcmlhYmxlLiBJJ20gd29uZGVyaW5nIGlmIGFueSBvZiB0aGUgb3RoZXIgYWxnb3JpdGhtcyBvdXQgdGhlcmUsIGJleW9uZCB0aGUgb25lcyBJJ20gaW1tZWRpYXRlbHkgZmFtaWxpYXIgd2l0aCwgZXhwbGljaXRseSBkZWFsdCB3aXRoIHNvbWV0aGluZyBsaWtlIHRoaXM/IERpZCB0aGV5IGhhdmUgYSBzaW1pbGFyIHBhcmFtZXRlciwgb3Igd2VyZSB0aGV5IHN1YnRseSBhZmZlY3RlZCBieSB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIHVzZWQgaW4gVFNPIHdpdGhvdXQgZXhwbGljaXRseSBuYW1pbmcgYSB0dW5pbmcgcGFyYW1ldGVyPyBUaGF0J3MgdGhlIHJlYWwgcXVlc3Rpb24uIExldCdzIHNlZSB3aGF0IHRoZSByZXNlYXJjaCBzYXlzLi4uIEkgbmVlZCBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3IGhlcmUuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBsaXRlcmF0dXJlIGFuZCBzZWUgd2hhdCBlbWVyZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMyOjA4LjYyMjczNTUzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0ODQzOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWluX3Rzb19zZWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jPTYyNz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xcbi0tXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtMTM5My1cXHR7XFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTM5NDpcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJ0Y3BfbWluX3Rzb19zZWdzXFxcIixcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxMzk1OlxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQuaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2VncyxcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMzk2LVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZih1OCksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYmJyLmM9Mjg3PXN0YXRpYyB2b2lkIGJicl9zZXRfcGFjaW5nX3JhdGUoc3RydWN0IHNvY2sgKnNrLCB1MzIgYncsIGludCBnYWluKVxcbi0tXFxubmV0L2lwdjQvdGNwX2Jici5jLTI5OC1cXG5uZXQvaXB2NC90Y3BfYmJyLmM6Mjk5Oi8qIG92ZXJyaWRlIHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzICovXFxubmV0L2lwdjQvdGNwX2Jici5jOjMwMDpzdGF0aWMgdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9iYnIuYy0zMDEte1xcbi0tXFxubmV0L2lwdjQvdGNwX2Jici5jPTMwNT1fX2JwZl9rZnVuYyBzdGF0aWMgdTMyIGJicl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KVxcbi0tXFxubmV0L2lwdjQvdGNwX2Jici5jLTMwNy1cXHRpZiAodW5saWtlbHkoIW1zc19ub3cpKVxcbm5ldC9pcHY0L3RjcF9iYnIuYzozMDg6XFx0XFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xcbm5ldC9pcHY0L3RjcF9iYnIuYzozMDk6XFx0cmV0dXJuIHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIGJicl9taW5fdHNvX3NlZ3Moc2spKTtcXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzEwLX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYz0zMTI9c3RhdGljIHUzMiBiYnJfdHNvX3NlZ3NfZ29hbChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzIyLVxcdFxcdCAgICAgIEdTT19MRUdBQ1lfTUFYX1NJWkUgLSAxIC0gTUFYX1RDUF9IRUFERVIpO1xcbm5ldC9pcHY0L3RjcF9iYnIuYzozMjM6XFx0c2VncyA9IG1heF90KHUzMiwgYnl0ZXMgLyB0cC1cXHUwMDNlbXNzX2NhY2hlLCBiYnJfbWluX3Rzb19zZWdzKHNrKSk7XFxubmV0L2lwdjQvdGNwX2Jici5jLTMyNC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzQzOD1zdGF0aWMgaW50IF9fbmV0X2luaXQgdGNwX3NrX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDk1LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzQ5NjpcXHRuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgPSAyO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzQ5Ny1cXHRuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF90c29fcnR0X2xvZyA9IDk7ICAvKiAyXjkgPSA1MTIgdXNlYyAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyMzQ9c3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjU1LSAqXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNTY6ICogVGhlIG1pbl90c29fc2VncyBpcyBmbG9vcmVkIHRvIDEgdG8gYXZvaWQgc3VycHJpc2luZyBjb252ZXJzaW9uLiBBbHNvLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjU3LSAqIEJQRiBjYWxsZXJzIG1heSBwYXNzIG1zc19ub3cgPT0gMC4gSW4gdGhhdCBjYXNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjU4OiAqIHNhbml0aXplZCBtaW5fdHNvX3NlZ3MgdmFsdWUgYW5kIHNraXBzIGF1dG9zaXppbmcuXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNTktICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyNjA9X19icGZfa2Z1bmMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI2MTpcXHRcXHRcXHRcXHQgaW50IG1pbl90c29fc2VncylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI2Mi17XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNjM6XFx0dTMyIG1pbl90c28gPSBtYXgobWluX3Rzb19zZWdzLCAxKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI2NC1cXHR1bnNpZ25lZCBsb25nIGJ5dGVzO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyODU9c3RhdGljIHUzMiB0Y3BfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjkyLVxcdFxcdFxcdHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyOTM6XFx0XFx0XFx0XFx0XFx0IFJFQURfT05DRShzb2NrX25ldChzayktXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MpKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI5NC1cXHRyZXR1cm4gY2xhbXBfdCh1MzIsIHRzb19zZWdzLCAxLCBzay1cXHUwMDNlc2tfZ3NvX21heF9zZWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6MDguNjcyMjI2NzMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1MzczNzA5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogVFNPIFNlZ21lbnQgVGFyZ2V0IENvdW50IGluIFRDUCBDb25nZXN0aW9uIENvbnRyb2wqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBjaGFuZ2VzIHJlbGF0ZWQgdG8gaG93IENvbmdlc3Rpb24gQ29udHJvbCAoQ0EpIGFsZ29yaXRobXMsIGluY2x1ZGluZyBCQlIgYW5kIHRob3NlIHVzaW5nIEJQRiBzdHJ1Y3Rfb3BzLCBzcGVjaWZ5IHRoZSB0YXJnZXQgY291bnQgZm9yIFRTTyBzZWdtZW50cyB2aWEgYHRzb19zZWdzYCBpbiBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AuIE5vdGFibHksIGB0Y3BfdHNvX2F1dG9zaXplYCBoYXMgYmVlbiBtb2RpZmllZCBhbmQgZXhwb3J0ZWQgYXMgYSBrZnVuYyBhbmQgR1BMIHN5bWJvbC4gVGhpcyBoaXRzIFRDUCBvdXRwdXQgbG9naWMgYW5kIHRoZSBCUEYgVENQIENBIG1lY2hhbmlzbSBhbmQgQkJSLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZz9cblxuTGV0J3MgcnVuIHRocm91Z2ggdGhlIGNoZWNrbGlzdDogTm8gY2hhbmdlcyB0byBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBvciBjb21tZW50cywgc28gaXQncyBhY3R1YWwgQyBjb2RlLiBOb3QgYSBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2UsIGRlZmluaXRlbHkgZnVuY3Rpb25hbC4gTm8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zLiBJdCAqaXMqIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSBiZWNhdXNlIGl0J3MgY29yZSBuZXR3b3JraW5nLCBUQ1AsIGFuZCBCUEYuIEFuZCBpdCdzIG5vdCB2ZW5kb3Itc3BlY2lmaWMgb3IgZHJpdmVyIHRlYXJkb3duLiBTbywgV29ydGhGdXp6aW5nID0gVHJ1ZS5cblxuTm93LCBmb3IgYEZvY3VzU3ltYm9sc2AuIFdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGltcG9ydGFudCBlbnRyeSBwb2ludHMuIGB0Y3BfdHNvX2F1dG9zaXplYCBpcyBhIG5vbi1zdGF0aWMsIGV4cG9ydGVkIGZ1bmN0aW9uIChrZnVuYykuIGBiYnJfdHNvX3NlZ3NgIGlzIHN0YXRpYyBidXQgcmVnaXN0ZXJlZCBhcyBhIGtmdW5jLCB3aGlsZSBgYnBmX3RjcF9jYV90c29fc2Vnc2AgaXMgYWxzbyBzdGF0aWMuIFNwZWNpZmljYWxseSwgYHRjcF90c29fYXV0b3NpemVgIGxvb2tzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQncyBgX19icGZfa2Z1bmMgdTMyIHRjcF90c29fYXV0b3NpemUoLi4uKWAgYW5kIGBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfdHNvX2F1dG9zaXplKWAuIFRoaXMgbWFrZXMgaXQgYSBncmVhdCBjYW5kaWRhdGUuIE90aGVyIHN5bWJvbHMgaW5jbHVkZTpcbi0gYHRjcF90c29fYXV0b3NpemVgXG4tIGBicGZfdGNwX2NhX3Rzb19zZWdzYCAoc3RhdGljKVxuLSBgYmJyX3Rzb19zZWdzYCAoc3RhdGljLCBrZnVuYylcbi0gYHRjcF90c29fc2Vnc2AgKHN0YXRpYylcblxuQmFzZWQgb24gdGhlIHJ1bGVzLCBgdGNwX3Rzb19hdXRvc2l6ZWAgaXMgdGhlIGNsZWFyIHdpbm5lciBmb3IgYEZvY3VzU3ltYm9sc2AsIGFzIGl0J3Mgbm9uLXN0YXRpYywgZXhwb3J0ZWQsIGFuZCBkZWZpbmVkIGluIGBuZXQvaXB2NC90Y3Bfb3V0cHV0LmNgLCBzbyBpdCdzIHVubGlrZWx5IHRvIGJlIGlubGluZWQuXG5cbkZpbmFsbHksIGZvciBgRW5hYmxlQ29uZmlnc2AsIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBDbGVhcmx5LCBgSU5FVGAgKG9yIGBORVRgKSBmb3IgVENQL0lQdjQsIGBUQ1BfQ09OR19CQlJgIGZvciBCQlIgc3VwcG9ydCwgYW5kIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBmb3IgQlBGIFRDUCBDQS9zdHJ1Y3Rfb3BzIGFyZSBhbGwgZXNzZW50aWFsLiBXZSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgYGJwZl90Y3BfY2Eub2AgYW5kIGB0Y3BfYmJyLm9gIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkwMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjoxNC4yMDk2MDQwMjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODgxMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHRjcF9icGYub1xcbm5ldC9pcHY0L01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdWRwX2JwZi5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX05FVExBQkVMKSArPSBjaXBzb19pcHY0Lm9cXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTcxPWlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxubmV0L2lwdjQvTWFrZWZpbGU6NzI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfdGNwX2NhLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS03My1lbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTE3OD1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXFxubmV0L2lwdjQvdGNwX2JwZi5jOjE4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE4MS1zdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz03Njk9dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3NS19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjc3NjojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTI4NTU9c3RhdGljIGludCB0Y3A0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yODc5LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6Mjg4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yODgxLXVuaW9uIGJwZl90Y3BfaXRlcl9iYXRjaF9pdGVtIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzI5Mz1zdGF0aWMgdW5zaWduZWQgc2hvcnQgc2VxX2ZpbGVfZmFtaWx5KGNvbnN0IHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMjk2LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzI5NzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMjk4LVxcdC8qIEl0ZXJhdGVkIGZyb20gYnBmX2l0ZXIuICBMZXQgdGhlIGJwZiBwcm9nIHRvIGZpbHRlciBpbnN0ZWFkLiAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0zMzQ4PXN0cnVjdCBwcm90byB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3Mi1cXHQucHV0X3BvcnRcXHRcXHQ9IGluZXRfcHV0X3BvcnQsXFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzczOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzNzQtXFx0LnBzb2NrX3VwZGF0ZV9za19wcm90XFx0PSB0Y3BfYnBmX3VwZGF0ZV9wcm90byxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzU3MT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIF9fbmV0X2luaXRkYXRhIHRjcF9za19vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM1NzYtXFxubmV0L2lwdjQvdGNwX2lwdjQuYzozNTc3OiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM1NzgtREVGSU5FX0JQRl9JVEVSX0ZVTkModGNwLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzY1MD12b2lkIF9faW5pdCB0Y3BfdjRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjc0LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzY3NTojaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjc2LVxcdGJwZl9pdGVyX3JlZ2lzdGVyKCk7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zMTMyPXN0cnVjdCBwcm90byB1ZHBfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTMxNTItXFx0LnB1dF9wb3J0XFx0XFx0PSB1ZHBfbGliX3VuaGFzaCxcXG5uZXQvaXB2NC91ZHAuYzozMTUzOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvaXB2NC91ZHAuYy0zMTU0LVxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdWRwX2JwZl91cGRhdGVfcHJvdG8sXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zMTcxPXN0YXRpYyBib29sIHNlcV9za19tYXRjaChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMzE3OS1cXG5uZXQvaXB2NC91ZHAuYzozMTgwOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvaXB2NC91ZHAuYy0zMTgxLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX2l0ZXJfdWRwX3NlcV9vcHM7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zMjk3PXN0YXRpYyBpbnQgdWRwNF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTMzMTItXFxubmV0L2lwdjQvdWRwLmM6MzMxMzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdWRwLmMtMzMxNC1zdHJ1Y3QgYnBmX2l0ZXJfX3VkcCB7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zNTg2PXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzZXFfZmlsZV9mYW1pbHkoY29uc3Qgc3RydWN0IHNlcV9maWxlICpzZXEpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zNTg5LVxcbm5ldC9pcHY0L3VkcC5jOjM1OTA6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC9pcHY0L3VkcC5jLTM1OTEtXFx0LyogQlBGIGl0ZXJhdG9yOiBicGYgcHJvZ3JhbXMgdG8gZmlsdGVyIHNvY2tldHMuICovXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zODE0PXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgX19uZXRfaW5pdGRhdGEgdWRwX3N5c2N0bF9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zODE4LVxcbm5ldC9pcHY0L3VkcC5jOjM4MTk6I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxcbm5ldC9pcHY0L3VkcC5jLTM4MjAtREVGSU5FX0JQRl9JVEVSX0ZVTkModWRwLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTM4OTc9dm9pZCBfX2luaXQgdWRwX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTM5MTAtXFxubmV0L2lwdjQvdWRwLmM6MzkxMTojaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXFxubmV0L2lwdjQvdWRwLmMtMzkxMi1cXHRicGZfaXRlcl9yZWdpc3RlcigpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjoxNC4yNjA0OTAzMzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0NDc4NjUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6XG5cbioqRGVlcCBEaXZlIG9uIEtlcm5lbCBDb25maWd1cmF0aW9uOiBCQlIgYW5kIEJQRioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGtlcm5lbCdzIGN1cnJlbnQgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBsYW5kc2NhcGUgYmVmb3JlIGRpdmluZyBpbnRvIHNwZWNpZmljIGlzc3Vlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcgY3J1Y2lhbCBLY29uZmlnIG9wdGlvbnM6IGBUQ1BfQ09OR19CQlJgIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYC5cblxuYFRDUF9DT05HX0JCUmAsIHRoYXQncyB0aGUgcHJpbWFyeSBpbnRlcmVzdC4gSXMgQkJSIGVuYWJsZWQ/IElzIGl0IGV2ZW4gYXZhaWxhYmxlPyBUaGlzIGRpY3RhdGVzIGEgbG90IG9mIG15IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpZiBCQlIgaXMgaW4gdXNlIG9yIHBsYW5uZWQgZm9yLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdOKAmXMgc3VwcG9ydGVkIGFuZCBob3cgaXQncyBjdXJyZW50bHkgY29uZmlndXJlZC4gSWYgaXQncyAqbm90KiBlbmFibGVkLCB0aGF0J3MgYSB3aG9sZSBvdGhlciB0aHJlYWQgb2YgaW5xdWlyeSB0byBleHBsb3JlIHRoZSByZWFzb25pbmcuIFBlcmhhcHMgaXQgd2FzIGludGVudGlvbmFsbHkgZGlzYWJsZWQgZHVlIHRvIGNvbXBhdGliaWxpdHksIHRlc3RpbmcsIG9yIHBlcmZvcm1hbmNlIGNvbmNlcm5zPyBPciBtYXliZSBpdCdzIGp1c3Qgc2ltcGx5IG92ZXJsb29rZWQuXG5cbk5leHQgdXAgYXJlIHRoZSBCUEYtcmVsYXRlZCBvcHRpb25zLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjYW4gb2ZmZXIgc29tZSBvZiB0aGUgbW9zdCBkeW5hbWljIGFuZCBzb3BoaXN0aWNhdGVkIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5hbHlzaXMgYW5kIG1hbmlwdWxhdGlvbiBjYXBhYmlsaXRpZXMuIEknbSBrZWVuIHRvIGRldGVybWluZSB3aGV0aGVyIEJQRiBpcyBmdWxseSBpbnRlZ3JhdGVkIHdpdGggdGhlIHN5c3RlbS4gQ2hlY2tpbmcgb24gYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGVuc3VyZXMgdGhhdCB0aGUgdXNlci1zcGFjZSBwcm9ncmFtcyBjYW4gbGV2ZXJhZ2UgdGhlIEJQRiBmdW5jdGlvbmFsaXR5IGVmZmVjdGl2ZWx5LCBhbmQgdGhhdCBKdXN0LUluLVRpbWUgKEpJVCkgY29tcGlsYXRpb24gaXMgYWxzbyBhdmFpbGFibGUuIEFyZSB3ZSBnZXR0aW5nIHRoZSBmdWxsIHBvdGVudGlhbCBmcm9tIEJQRj8gT3IsIGlzIGl0IHJlc3RyaWN0ZWQgdG8gYSBzYWZlciwgbW9yZSBpbnRlcnByZXRpdmUgbW9kZT8gQW5kIGlmIGl0J3MgZGlzYWJsZWQsIHRoYXQgc2lnbmlmaWNhbnRseSBsaW1pdHMgdGhlIHBvc3NpYmlsaXRpZXMgZm9yIGFkdmFuY2VkIHRyYWNpbmcsIG5ldHdvcmtpbmcgcHJvZ3JhbW1hYmlsaXR5LCBhbmQgZUJQRi5cblxuRXNzZW50aWFsbHksIEkgd2FudCB0byB0YWtlIGEgcXVpY2sgcHVsc2Ugb2YgdGhlIHNpdHVhdGlvbi4gVGhpcyBpbml0aWFsIEtjb25maWcgY2hlY2sgaXMgbXkgY29tcGFzcy4gSXQgaGVscHMgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiwgZm9jdXNpbmcgb24gdGhvc2UgZmVhdHVyZXMgdGhhdCB3aWxsIGVpdGhlciBlbmFibGUgb3IgY29uc3RyYWluIG15IHN1YnNlcXVlbnQgZGlhZ25vc3RpY3MgYW5kIG9wdGltaXphdGlvbnMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgZGlnZ2luZyBpbnRvIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIGFwcGxpY2F0aW9uIGJlaGF2aW9yLiBJdCdzIGEgcXVpY2sgdHJpYWdlIHN0ZXAgdGhhdCBoZWxwcyBtZSBwcmlvcml0aXplIG15IGRlZXBlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjoxNy41MDUyNzkzMzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0XFxuIDY2MTpcXHRcXHQgIEZvciBmdXJ0aGVyIGRldGFpbHMgc2VlOlxcbiA2NjI6XFx0XFx0ICAgIEQuQS4gSGF5ZXMgYW5kIEcuIEFybWl0YWdlLiBcXFwiUmV2aXNpdGluZyBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIHVzaW5nXFxuIDY2MzpcXHRcXHQgICAgZGVsYXkgZ3JhZGllbnRzLlxcXCIgSW4gTmV0d29ya2luZyAyMDExLiBQcmVwcmludDpcXG4gNjY0OlxcdFxcdCAgICBodHRwOi8vY2FpYS5zd2luLmVkdS5hdS9jdi9kYWhheWVzL2NvbnRlbnQvbmV0d29ya2luZzIwMTEtY2RnLXByZXByaW50LnBkZlxcbiA2NjU6XFx0XFxuIDY2NjpcXHRjb25maWcgVENQX0NPTkdfQkJSXFxuIDY2NzpcXHRcXHR0cmlzdGF0ZSBcXFwiQkJSIFRDUFxcXCJcXG4gNjY4OlxcdFxcdGRlZmF1bHQgblxcbiA2Njk6XFx0XFx0aGVscFxcbiA2NzA6XFx0XFxuIDY3MTpcXHRcXHQgIEJCUiAoQm90dGxlbmVjayBCYW5kd2lkdGggYW5kIFJUVCkgVENQIGNvbmdlc3Rpb24gY29udHJvbCBhaW1zIHRvXFxuIDY3MjpcXHRcXHQgIG1heGltaXplIG5ldHdvcmsgdXRpbGl6YXRpb24gYW5kIG1pbmltaXplIHF1ZXVlcy4gSXQgYnVpbGRzIGFuIGV4cGxpY2l0XFxuIDY3MzpcXHRcXHQgIG1vZGVsIG9mIHRoZSBib3R0bGVuZWNrIGRlbGl2ZXJ5IHJhdGUgYW5kIHBhdGggcm91bmQtdHJpcCBwcm9wYWdhdGlvblxcbiA2NzQ6XFx0XFx0ICBkZWxheS4gSXQgdG9sZXJhdGVzIHBhY2tldCBsb3NzIGFuZCBkZWxheSB1bnJlbGF0ZWQgdG8gY29uZ2VzdGlvbi4gSXRcXG4gNjc1OlxcdFxcdCAgY2FuIG9wZXJhdGUgb3ZlciBMQU4sIFdBTiwgY2VsbHVsYXIsIHdpZmksIG9yIGNhYmxlIG1vZGVtIGxpbmtzLiBJdCBjYW5cXG4gNjc2OlxcdFxcdCAgY29leGlzdCB3aXRoIGZsb3dzIHRoYXQgdXNlIGxvc3MtYmFzZWQgY29uZ2VzdGlvbiBjb250cm9sLCBhbmQgY2FuXFxuIDY3NzpcXHRcXHQgIG9wZXJhdGUgd2l0aCBzaGFsbG93IGJ1ZmZlcnMsIGRlZXAgYnVmZmVycywgYnVmZmVyYmxvYXQsIHBvbGljZXJzLCBvclxcbiA2Nzg6XFx0XFx0ICBBUU0gc2NoZW1lcyB0aGF0IGRvIG5vdCBwcm92aWRlIGEgZGVsYXkgc2lnbmFsLiBJdCByZXF1aXJlcyB0aGUgZnFcXG4gNjc5OlxcdFxcdCAgKFxcXCJGYWlyIFF1ZXVlXFxcIikgcGFjaW5nIHBhY2tldCBzY2hlZHVsZXIuXFxuIDY4MDpcXHRcXG4gNjgxOlxcdGNob2ljZVxcbiA2ODI6XFx0XFx0cHJvbXB0IFxcXCJEZWZhdWx0IFRDUCBjb25nZXN0aW9uIGNvbnRyb2xcXFwiXFxuIDY4MzpcXHRcXHRkZWZhdWx0IERFRkFVTFRfQ1VCSUNcXG4gNjg0OlxcdFxcdGhlbHBcXG4gNjg1OlxcdFxcdCAgU2VsZWN0IHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHRcXG4gNjg2OlxcdFxcdCAgZm9yIGFsbCBjb25uZWN0aW9ucy5cXG4gNjg3OlxcdFxcbiA2ODg6XFx0XFx0Y29uZmlnIERFRkFVTFRfQklDXFxuIDY4OTpcXHRcXHRcXHRib29sIFxcXCJCaWNcXFwiIGlmIFRDUF9DT05HX0JJQz15XFxuIDY5MDpcXHRcXG4gNjkxOlxcdFxcdGNvbmZpZyBERUZBVUxUX0NVQklDXFxuIDY5MjpcXHRcXHRcXHRib29sIFxcXCJDdWJpY1xcXCIgaWYgVENQX0NPTkdfQ1VCSUM9eVxcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRjb25maWcgREVGQVVMVF9IVENQXFxuIDY5NTpcXHRcXHRcXHRib29sIFxcXCJIdGNwXFxcIiBpZiBUQ1BfQ09OR19IVENQPXlcXG4gNjk2OlxcdFxcbiA2OTc6XFx0XFx0Y29uZmlnIERFRkFVTFRfSFlCTEFcXG4gNjk4OlxcdFxcdFxcdGJvb2wgXFxcIkh5YmxhXFxcIiBpZiBUQ1BfQ09OR19IWUJMQT15XFxuIDY5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6MTcuNTA1Mzc0NTg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2Mzk4ODczOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBCUEYgYW5kIFRDUCBDb25nZXN0aW9uIENvbnRyb2wgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBwdXp6bGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgdGhlIG5lY2Vzc2l0eSBhbmQgXCJzdGFuZGFyZC1uZXNzXCIgb2YgYENPTkZJR19JTkVUYC4gSSBzdXNwZWN0IGl0J3MgZnVuZGFtZW50YWwsIGJ1dCBsZXQncyBjb25maXJtLiBOZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIG9mIHRoZSBwb3RlbnRpYWxseSByZWxhdGVkIGNvbmZpZ3VyYXRpb25z4oCUYElORVRgLCBgVENQX0NPTkdfQkJSYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBCUEZfSklUYOKAlGFyZSBlaXRoZXIgcmVxdWlyZWQgb3IgaGlnaGx5IHJlY29tbWVuZGVkIGZvciB0aGUgZnVuY3Rpb25hbGl0eSBJJ20gYWZ0ZXIsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgQlBGLWJhc2VkIFRDUCBDb25nZXN0aW9uIEFsZ29yaXRobXMuIEkgc2hvdWxkIGFsc28gY2FzdCBhIHdpZGVyIG5ldDogYXJlIHRoZXJlICpvdGhlciogY3J1Y2lhbCBjb25maWdzIEknbSBvdmVybG9va2luZyBmb3IgQlBGJ3Mgc3RydWN0X29wcyBvciBmb3Igc3VwcG9ydGluZyBgQlBGX1RDUF9DQWA/XG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSBhIHN0YWJsZSBhbmQgcGVyZm9ybWFudCBpbnRlZ3JhdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBLY29uZmlnIGFuZCBNYWtlZmlsZXMsIGZvciByZWZlcmVuY2VzIHRvIGJvdGggYGJwZl90Y3BfY2FgIGFuZCBgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTYC4gVGhpcyB3aWxsIGhlbHAgbWUgdHJhY2sgZG93biB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgaW1tZWRpYXRlIGFuc3dlcnMgcmVnYXJkaW5nIHRoZSBjb3JyZWN0IHNldHRpbmdzIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxMTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjoyMC4xNDUyNjQ2MjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzE4MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9QUk9HX1RZUEVfU1RSVUNUX09QU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz03MjY9c3RhdGljIGxvbmcgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy04NDUtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjg0NjpcXHRcXHRpZiAocHJvZy1cXHUwMDNldHlwZSAhPSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMgfHxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtODQ3LVxcdFxcdCAgICBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQgIT0gc3Rfb3BzX2Rlc2MtXFx1MDAzZXR5cGVfaWQgfHxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xNDkyPWludCBicGZfcHJvZ19hc3NvY19zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTAzLVxcdGlmIChzdF9vcHNfYXNzb2MpIHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTUwNDpcXHRcXHRpZiAocHJvZy1cXHUwMDNldHlwZSAhPSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1MDUtXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTEyLVxcdFxcdCAqL1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNTEzOlxcdFxcdGlmIChwcm9nLVxcdTAwM2V0eXBlICE9IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTUxNC1cXHRcXHRcXHRicGZfbWFwX2luYyhtYXApO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTE1MjI9dm9pZCBicGZfcHJvZ19kaXNhc3NvY19zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTMyLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNTMzOlxcdGlmIChwcm9nLVxcdTAwM2V0eXBlICE9IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTUzNC1cXHRcXHRicGZfbWFwX3B1dChzdF9vcHNfYXNzb2MpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz02MjE3PXN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3Byb2dfY3R4X3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02MzA5LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9MU006XFxua2VybmVsL2JwZi9idGYuYzo2MzEwOlxcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOlxcbmtlcm5lbC9icGYvYnRmLmMtNjMxMS1cXHRcXHQvKiBhbGxvdyB1NjQqIGFzIGN0eCAqL1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz02NjE2PXN0YXRpYyBib29sIHByb2dfYXJnc190cnVzdGVkKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNjYyNC1cXHRcXHRyZXR1cm4gYnBmX2xzbV9pc190cnVzdGVkKHByb2cpO1xcbmtlcm5lbC9icGYvYnRmLmM6NjYyNTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUzpcXG5rZXJuZWwvYnBmL2J0Zi5jLTY2MjYtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTkwNTY9c3RhdGljIGludCBicGZfcHJvZ190eXBlX3RvX2tmdW5jX2hvb2soZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtOTA2NC1cXHRcXHRyZXR1cm4gQlRGX0tGVU5DX0hPT0tfVEM7XFxua2VybmVsL2JwZi9idGYuYzo5MDY1OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOlxcbmtlcm5lbC9icGYvYnRmLmMtOTA2Ni1cXHRcXHRyZXR1cm4gQlRGX0tGVU5DX0hPT0tfU1RSVUNUX09QUztcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI1MDg9c3RhdGljIGJvb2wgX19icGZfcHJvZ19tYXBfY29tcGF0aWJsZShzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjU2MC1cXHRcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfRVhUOlxcbmtlcm5lbC9icGYvY29yZS5jOjI1NjE6XFx0XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFM6XFxua2VybmVsL2JwZi9jb3JlLmMtMjU2Mi1cXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFzay5jPTUxNT1zdGF0aWMgaW50IF9faW5pdCBjcHVtYXNrX2tmdW5jX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFzay5jLTUyNi1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZjcHVtYXNrX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9jcHVtYXNrLmM6NTI3OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXFx1MDAyNmNwdW1hc2tfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2NwdW1hc2suYy01MjgtXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2Y3B1bWFza19rZnVuY19zZXQpO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk4Mj1zdGF0aWMgaW50IF9faW5pdCBrZnVuY19pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDAwLVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcXHUwMDI2Z2VuZXJpY19rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDE6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2Z2VuZXJpY19rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMDItXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2Z2VuZXJpY19rZnVuY19zZXQpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjcyOD1icGZfcHJvZ19sb2FkX2NoZWNrX2F0dGFjaChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjc0My1cXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI3NDQ6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFM6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjc0NS1cXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfRVhUOlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjg3ND1zdGF0aWMgYm9vbCBpc19wZXJmbW9uX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg4My1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI4ODQ6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFM6IC8qIGhhcyBhY2Nlc3MgdG8gc3RydWN0IHNvY2sgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODg1LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9FWFQ6IC8qIGV4dGVuZHMgYW55IHByb2cgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYyNjI9c3RhdGljIGludCBwcm9nX2Fzc29jX3N0cnVjdF9vcHModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mjc3LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYyNzg6XFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjI3OS1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTUyMzU9c3RhdGljIGVudW0gcHJpdl9zdGFja19tb2RlIGJwZl9lbmFibGVfcHJpdl9zdGFjayhzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTI1MS1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MjUyOlxcdGNhc2UgQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MjUzLVxcdFxcdGlmIChwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXByaXZfc3RhY2tfcmVxdWVzdGVkIHx8IGJwZl9wcm9nX2NoZWNrX3JlY3VyKHByb2cpKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwNDk5PXN0YXRpYyBpbnQgY2hlY2tfcmVmZXJlbmNlX2xlYWsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCBleGNlcHRpb25fZXhpdClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDUxNS1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA1MTY6XFx0XFx0aWYgKHR5cGUgPT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTIFxcdTAwMjZcXHUwMDI2ICFleGNlcHRpb25fZXhpdCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDUxNy1cXHRcXHQgICAgcmVnLVxcdTAwM2VpZCA9PSBzdGF0ZS1cXHUwMDNlcmVmc1tpXS5pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzIyOD1zdGF0aWMgYm9vbCByZXR1cm5fcmV0dmFsX3JhbmdlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlICpyYW5nZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMyMi1cXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczMjM6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFM6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzI0LVxcdFxcdCpyYW5nZSA9IHJldHZhbF9yYW5nZSgwLCAwKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzMzOT1zdGF0aWMgYm9vbCBwcm9ncmFtX3JldHVybnNfdm9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzUwLVxcdFxcdGJyZWFrO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzM1MTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUzpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczNTItXFx0XFx0aWYgKCFwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9mdW5jX3Byb3RvLVxcdTAwM2V0eXBlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MzcxPXN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM4Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczODc6XFx0aWYgKHByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczODgtXFx0XFx0LyogQWxsb3cgYSBzdHJ1Y3Rfb3BzIHByb2dyYW0gdG8gcmV0dXJuIGEgcmVmZXJlbmNlZCBrcHRyIGlmIGl0XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MjAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NDIxOlxcdGlmIChwcm9nX3R5cGUgPT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTIFxcdTAwMjZcXHUwMDI2ICFyZXRfdHlwZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MjItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkyNjc9c3RhdGljIGludCBkb19jaGVja19jb21tb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MDAtXFx0LyogQWNxdWlyZSByZWZlcmVuY2VzIGZvciBzdHJ1Y3Rfb3BzIHByb2dyYW0gYXJndW1lbnRzIHRhZ2dlZCB3aXRoIFxcXCJfX3JlZlxcXCIgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0MDE6XFx0aWYgKCFzdWJwcm9nIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MDItXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGF1eC1cXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkrKykge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMjc2PXN0YXRpYyBib29sIGNhbl9iZV9zbGVlcGFibGUoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjk3LVxcdHJldHVybiBwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfS1BST0JFIC8qIG9ubHkgZm9yIHVwcm9iZXMgKi8gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAyOTg6XFx0ICAgICAgIHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjk5LVxcdCAgICAgICBwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQgfHxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDMwMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMyNS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMjY6XFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMyNy1cXHRcXHRyZXR1cm4gY2hlY2tfc3RydWN0X29wc19idGZfaWQoZW52KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6MjAuMTk1NTg4Mzc2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MTA2MTIwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgU3RydWN0IE9wcyBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGJwZl9zdHJ1Y3Rfb3BzLmNgIGdldHMgYnVpbHQuIFRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGNvbnNpZGVyaW5nIGl0J3Mga2VybmVsLXJlbGF0ZWQgYW5kIGxpa2VseSBpbnZvbHZlcyBCUEYsIGlzIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgZm9yIGFueXRoaW5nIEJQRi1zcGVjaWZpYyB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3MgZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhhdCBNYWtlZmlsZSBoYXMgdG8gc2F5LiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgYGJwZl9zdHJ1Y3Rfb3BzLmNgLiBIb3BlZnVsbHksIGl0J3Mgc3RyYWlnaHRmb3J3YXJkLCBhbmQgSSBjYW4gcXVpY2tseSB0cmFjZSB0aGUgcmVsZXZhbnQgdGFyZ2V0cyBhbmQgc291cmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0NDMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjoyNS4xMDYyMDQyMzZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTcyNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJ1Y3Rfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1ODYgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NDM9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3N0cnVjdF9vcHMub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNDUtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXNrLm9cXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNi1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTc6c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlIHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTg6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2NvbW1vbl92YWx1ZSBjb21tb247XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE5LVxcdGNoYXIgZGF0YVtdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMjMtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjI0OnN0cnVjdCBicGZfc3RydWN0X29wc19tYXAge1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0yNS1cXHRzdHJ1Y3QgYnBmX21hcCBtYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjI2OlxcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYztcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMjctXFx0LyogcHJvdGVjdCBtYXBfdXBkYXRlICovXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNDktXFx0ICovXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjUwOlxcdHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqdXZhbHVlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MS1cXHQvKiBrdmFsdWUuZGF0YSBzdG9yZXMgdGhlIGFjdHVhbCBrZXJuZWwncyBzdHJ1Y3RcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01NC1cXHQgKi9cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTU6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlIGt2YWx1ZTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTYtfTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTctXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjU4OnN0cnVjdCBicGZfc3RydWN0X29wc19saW5rIHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTktXFx0c3RydWN0IGJwZl9saW5rIGxpbms7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjQ9c3RhdGljIERFRklORV9NVVRFWCh1cGRhdGVfbXV0ZXgpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjY6I2RlZmluZSBWQUxVRV9QUkVGSVggXFxcImJwZl9zdHJ1Y3Rfb3BzX1xcXCJcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjctI2RlZmluZSBWQUxVRV9QUkVGSVhfTEVOIChzaXplb2YoVkFMVUVfUFJFRklYKSAtIDEpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY4LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2OTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3RydWN0X29wc192ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcwLX07XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcxLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3Mjpjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGJwZl9zdHJ1Y3Rfb3BzX3Byb2dfb3BzID0ge1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03My0jaWZkZWYgQ09ORklHX05FVFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3NDpcXHQudGVzdF9ydW4gPSBicGZfc3RydWN0X29wc190ZXN0X3J1bixcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzUtI2VuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9Nzk9QlRGX0lEKHN0cnVjdCwgbW9kdWxlKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo4MDpCVEZfSUQoc3RydWN0LCBicGZfc3RydWN0X29wc19jb21tb25fdmFsdWUpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTgxLVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTg5PXN0YXRpYyBib29sIGlzX3ZhbGlkX3ZhbHVlX3R5cGUoc3RydWN0IGJ0ZiAqYnRmLCBzMzIgdmFsdWVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA3LVxcdGlmIChtdCAhPSBjb21tb25fdmFsdWVfdHlwZSkge1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDg6XFx0XFx0cHJfd2FybihcXFwiVGhlIGZpcnN0IG1lbWJlciBvZiAlcyBzaG91bGQgYmUgYnBmX3N0cnVjdF9vcHNfY29tbW9uX3ZhbHVlXFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDktXFx0XFx0XFx0dmFsdWVfbmFtZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIyLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjM6c3RhdGljIHZvaWQgKmJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2FsbG9jKHZvaWQpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyNC17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM5LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDA6dm9pZCBicGZfc3RydWN0X29wc19pbWFnZV9mcmVlKHZvaWQgKmltYWdlKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDEte1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1NS0gKlxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNTY6ICogSW5pdGlhbGl6ZSBhIHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyBhY2NvcmRpbmcgdG8gdHlwZSBpbmZvIG9mXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE1Ny0gKiB0aGUgYXJndW1lbnRzIG9mIGEgc3R1YiBmdW5jdGlvbi4gKENoZWNrIGtDRkkgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXRcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTktICpcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTYwOiAqIEVhY2ggbWVtYmVyIGluIHRoZSBzdHJ1Y3Rfb3BzIHR5cGUgaGFzIGEgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2FyZ19pbmZvXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE2MS0gKiB0byBwcm92aWRlIGFuIGFycmF5IG9mIHN0cnVjdCBicGZfY3R4X2FyZ19hdXgsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXNcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xNzM9c3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNzctXFx0XFx0XFx0ICAgIHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbW9kZWwsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE3ODpcXHRcXHRcXHQgICAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2FyZ19pbmZvICphcmdfaW5mbylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTc5LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zMjMtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjMyNDovKiBDbGVhbiB1cCB0aGUgYXJnX2luZm8gaW4gYSBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYy4gKi9cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MzI1OnZvaWQgYnBmX3N0cnVjdF9vcHNfZGVzY19yZWxlYXNlKHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzI2LXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MzI3OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm87XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTMyOC1cXHRpbnQgaTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0zMzc9c3RhdGljIGJvb2wgaXNfbW9kdWxlX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBpZClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTAtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM1MTppbnQgYnBmX3N0cnVjdF9vcHNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzLCB1MzIgbW9mZilcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzUyLXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTctXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM1ODppbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzU5LVxcdFxcdFxcdCAgICAgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTM2MS17XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM2MjpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcyA9IHN0X29wc19kZXNjLVxcdTAwM2VzdF9vcHM7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM2MzpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNjQtXFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy00MzktXFx0XFx0aWYgKCFzdF9vcHNfaWRzW0lEWF9NT0RVTEVfSURdIFxcdTAwMjZcXHUwMDI2IGlzX21vZHVsZV9tZW1iZXIoYnRmLCBtZW1iZXItXFx1MDAzZXR5cGUpKSB7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjQ0MDpcXHRcXHRcXHRwcl93YXJuKFxcXCInc3RydWN0IG1vZHVsZScgYnRmIGlkIG5vdCBmb3VuZC4gSXMgQ09ORklHX01PRFVMRVMgZW5hYmxlZD8gYnBmX3N0cnVjdF9vcHMgJyVzJyBuZWVkcyBtb2R1bGUgc3VwcG9ydC5cXFxcblxcXCIsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ0MS1cXHRcXHRcXHRcXHRzdF9vcHMtXFx1MDAzZW5hbWUpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ1Mi1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NDUzOlxcdFxcdGlmICghZnVuY19wcm90byB8fCBicGZfc3RydWN0X29wc19zdXBwb3J0ZWQoc3Rfb3BzLCBtb2ZmKSlcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNDU0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ5Ni1cXHRpZiAoc3Rfb3BzLVxcdTAwM2Vpbml0KGJ0ZikpIHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NDk3OlxcdFxcdHByX3dhcm4oXFxcIkVycm9yIGluIGluaXQgYnBmX3N0cnVjdF9vcHMgJXNcXFxcblxcXCIsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ5OC1cXHRcXHRcXHRzdF9vcHMtXFx1MDAzZW5hbWUpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTUwNS1lcnJvdXQ6XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjUwNjpcXHRicGZfc3RydWN0X29wc19kZXNjX3JlbGVhc2Uoc3Rfb3BzX2Rlc2MpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MDctXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTEwLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1MTE6c3RhdGljIGludCBicGZfc3RydWN0X29wc19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTEyLVxcdFxcdFxcdFxcdFxcdCAgIHZvaWQgKm5leHRfa2V5KVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTUyMC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTIxOmludCBicGZfc3RydWN0X29wc19tYXBfc3lzX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTIyLVxcdFxcdFxcdFxcdCAgICAgICB2b2lkICp2YWx1ZSlcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTIzLXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTI0OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcCA9IChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICopbWFwO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1MjU6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICp1dmFsdWUsICprdmFsdWU7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjUyNjpcXHRlbnVtIGJwZl9zdHJ1Y3Rfb3BzX3N0YXRlIHN0YXRlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MjctXFx0czY0IHJlZmNudDtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01NTctXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjU1ODpzdGF0aWMgdm9pZCAqYnBmX3N0cnVjdF9vcHNfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTU5LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01NjItXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjU2MzpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfcHV0X3Byb2dzKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTY0LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01NzQtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjU3NTpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfZGlzc29jX3Byb2dzKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTc2LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01ODUtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjU4NjpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfZnJlZV9pbWFnZShzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXApXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTU4Ny17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTkwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzdF9tYXAtXFx1MDAzZWltYWdlX3BhZ2VzX2NudDsgaSsrKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo1OTE6XFx0XFx0YnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZShzdF9tYXAtXFx1MDAzZWltYWdlX3BhZ2VzW2ldKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTkyLVxcdHN0X21hcC1cXHUwMDNlaW1hZ2VfcGFnZXNfY250ID0gMDtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz01OTU9c3RhdGljIGludCBjaGVja196ZXJvX2hvbGVzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYyMC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjIxOnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYyMi17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjI0LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2MjU6c3RhdGljIHZvaWQgYnBmX3N0cnVjdF9vcHNfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjI2LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MzEtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjYzMjpjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9zdHJ1Y3Rfb3BzX2xpbmtfbG9wcyA9IHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjMzOlxcdC5yZWxlYXNlID0gYnBmX3N0cnVjdF9vcHNfbGlua19yZWxlYXNlLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2MzQ6XFx0LmRlYWxsb2MgPSBicGZfc3RydWN0X29wc19saW5rX2RlYWxsb2MsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYzNS19O1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MzYtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjYzNzppbnQgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcyxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjM4LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NjItXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjY2MzpcXHRcXHRpbWFnZSA9IGJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2FsbG9jKCk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY2NC1cXHRcXHRpZiAoSVNfRVJSKGltYWdlKSlcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NzMtXFx0XFx0aWYgKGltYWdlICE9ICpfaW1hZ2UpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjY3NDpcXHRcXHRcXHRicGZfc3RydWN0X29wc19pbWFnZV9mcmVlKGltYWdlKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjc1LVxcdFxcdHJldHVybiBzaXplID8gOiAtRUZBVUxUO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY4Mi1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjgzOnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2tzeW1faW5pdChjb25zdCBjaGFyICp0bmFtZSwgY29uc3QgY2hhciAqbW5hbWUsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY4NC1cXHRcXHRcXHRcXHQgICAgIHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02OTEtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjY5MjpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfYWRkX2tzeW1zKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjkzLXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MDItXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjcwMzpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfZGVsX2tzeW1zKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzA0LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MTMtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjcxNDpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfZnJlZV9rc3ltcyhzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXApXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcxNS17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzI1LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3MjY6c3RhdGljIGxvbmcgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzI3LVxcdFxcdFxcdFxcdFxcdCAgIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcyOC17XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjcyOTpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzMwOlxcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyA9IHN0X21hcC1cXHUwMDNlc3Rfb3BzX2Rlc2M7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjczMTpcXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcyA9IHN0X29wc19kZXNjLVxcdTAwM2VzdF9vcHM7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjczMjpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUgKnV2YWx1ZSwgKmt2YWx1ZTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzMzLVxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbW9kdWxlX3R5cGU7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzY2LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3Njc6XFx0dXZhbHVlID0gKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqKXN0X21hcC1cXHUwMDNldXZhbHVlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo3Njg6XFx0a3ZhbHVlID0gKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqKVxcdTAwMjZzdF9tYXAtXFx1MDAzZWt2YWx1ZTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzY5LVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTg2MC1cXHRcXHRicGZfdHJhbXBfbGlua19pbml0KGxpbmssIEJQRl9MSU5LX1RZUEVfU1RSVUNUX09QUyxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6ODYxOlxcdFxcdFxcdCAgICAgIFxcdTAwMjZicGZfc3RydWN0X29wc19saW5rX2xvcHMsIHByb2csIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlLCAwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtODYyLVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTg3NS1cXHRcXHR0cmFtcG9saW5lX3N0YXJ0ID0gaW1hZ2Vfb2ZmO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo4NzY6XFx0XFx0ZXJyID0gYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lKHRub2RlcywgXFx1MDAyNmxpbmstXFx1MDAzZW5vZGUsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTg3Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2c3Rfb3BzLVxcdTAwM2VmdW5jX21vZGVsc1tpXSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy04OTUtXFx0XFx0LyogaW5pdCBrc3ltIGZvciB0aGlzIHRyYW1wb2xpbmUgKi9cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6ODk2OlxcdFxcdGJwZl9zdHJ1Y3Rfb3BzX2tzeW1faW5pdCh0bmFtZSwgbW5hbWUsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTg5Ny1cXHRcXHRcXHRcXHRcXHQgaW1hZ2UgKyB0cmFtcG9saW5lX3N0YXJ0LFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTkyOC1cXHRcXHQgKiBtYXAgbXVzdCBiZSBzZXQgdG8gSU5JVCBhdCB0aGlzIG1vbWVudCwgYW5kIHRodXNcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTI5OlxcdFxcdCAqIGJwZl9zdHJ1Y3Rfb3BzX21hcF9kZWxldGVfZWxlbSgpIGNhbid0IHVucmVnaXN0ZXJcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTMwLVxcdFxcdCAqIG9yIHRyYW5zaXRpb24gaXQgdG8gVE9CRUZSRUUgY29uY3VycmVudGx5Llxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk0Ny1yZXNldF91bmxvY2s6XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjk0ODpcXHRicGZfc3RydWN0X29wc19tYXBfZnJlZV9rc3ltcyhzdF9tYXApO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo5NDk6XFx0YnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWVfaW1hZ2Uoc3RfbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTUwOlxcdGJwZl9zdHJ1Y3Rfb3BzX21hcF9kaXNzb2NfcHJvZ3Moc3RfbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTUxOlxcdGJwZl9zdHJ1Y3Rfb3BzX21hcF9wdXRfcHJvZ3Moc3RfbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTUyLVxcdG1lbXNldCh1dmFsdWUsIDAsIG1hcC1cXHUwMDNldmFsdWVfc2l6ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTU3LVxcdGlmICghZXJyKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo5NTg6XFx0XFx0YnBmX3N0cnVjdF9vcHNfbWFwX2FkZF9rc3ltcyhzdF9tYXApO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05NTktXFx0cmV0dXJuIGVycjtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05NjEtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjk2MjpzdGF0aWMgbG9uZyBicGZfc3RydWN0X29wc19tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05NjMte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo5NjQ6XFx0ZW51bSBicGZfc3RydWN0X29wc19zdGF0ZSBwcmV2X3N0YXRlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo5NjU6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05NjYtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjk2NzpcXHRzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTY4LVxcdGlmIChzdF9tYXAtXFx1MDAzZW1hcC5tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9MSU5LKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk4OS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6OTkwOnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtOTkxLVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNlcV9maWxlICptKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy05OTIte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo5OTM6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTk5NC1cXHR2b2lkICp2YWx1ZTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDAwLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDAxOlxcdGVyciA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9zeXNfbG9va3VwX2VsZW0obWFwLCBrZXksIHZhbHVlKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAwMi1cXHRpZiAoIWVycikge1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwMTEtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwMTI6c3RhdGljIHZvaWQgX19icGZfc3RydWN0X29wc19tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDEzLXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTAxNDpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAxNS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAxNi1cXHRpZiAoc3RfbWFwLVxcdTAwM2VsaW5rcylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTAxNzpcXHRcXHRicGZfc3RydWN0X29wc19tYXBfcHV0X3Byb2dzKHN0X21hcCk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwMTgtXFx0aWYgKHN0X21hcC1cXHUwMDNla3N5bXMpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwMTk6XFx0XFx0YnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWVfa3N5bXMoc3RfbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAyMC1cXHRicGZfbWFwX2FyZWFfZnJlZShzdF9tYXAtXFx1MDAzZWxpbmtzKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTAyMS1cXHRicGZfbWFwX2FyZWFfZnJlZShzdF9tYXAtXFx1MDAzZWtzeW1zKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTAyMjpcXHRicGZfc3RydWN0X29wc19tYXBfZnJlZV9pbWFnZShzdF9tYXApO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDIzLVxcdGJwZl9tYXBfYXJlYV9mcmVlKHN0X21hcC1cXHUwMDNldXZhbHVlKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDI2LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDI3OnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwMjgte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDI5OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcCA9IChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICopbWFwO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDMwLVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwMzctXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwMzg6XFx0YnBmX3N0cnVjdF9vcHNfbWFwX2Rpc3NvY19wcm9ncyhzdF9tYXApO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDM5LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDQwOlxcdGJwZl9zdHJ1Y3Rfb3BzX21hcF9kZWxfa3N5bXMoc3RfbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA0MS1cXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDQ2LVxcdCAqIHNldHNvY2tvcHQoVENQX0NPTkdFU1RJT04sIFxcXCJ0Y3BfY2NfeVxcXCIpLlxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDQ3OlxcdCAqIER1cmluZyB0aGUgc3dpdGNoLCAgYnBmX3N0cnVjdF9vcHNfcHV0KHRjcF9jY194KSBpcyBjYWxsZWRcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA0OC1cXHQgKiBhbmQgaXRzIHJlZmNvdW50IG1heSByZWFjaCAwIHdoaWNoIHRoZW4gZnJlZSBpdHNcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDU4LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDU5OlxcdF9fYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUobWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA2MC19XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNjEtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwNjI6c3RhdGljIGludCBicGZfc3RydWN0X29wc19tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNjMte1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEwNzE9c3RhdGljIHUzMiBjb3VudF9mdW5jX3B0cnMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA4My1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA4NDpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmJwZl9zdHJ1Y3Rfb3BzX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA4NS17XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwODY6XFx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDg3LVxcdHNpemVfdCBzdF9tYXBfc2l6ZTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA4ODpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwODktXFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqdnQ7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTExOS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTEyMDpcXHRzdF9vcHNfZGVzYyA9IGJwZl9zdHJ1Y3Rfb3BzX2ZpbmRfdmFsdWUoYnRmLCBhdHRyLVxcdTAwM2VidGZfdm1saW51eF92YWx1ZV90eXBlX2lkKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTEyMS1cXHRpZiAoIXN0X29wc19kZXNjKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTEzNS1cXHRcXHQvKiBrdmFsdWUgc3RvcmVzIHRoZVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTM2OlxcdFxcdCAqIHN0cnVjdCBicGZfc3RydWN0X29wc190Y3BfY29uZ2VzdGlvbnNfb3BzXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExMzctXFx0XFx0ICovXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExMzg6XFx0XFx0KHZ0LVxcdTAwM2VzaXplIC0gc2l6ZW9mKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSkpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTM5LVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNjktZXJyb3V0X2ZyZWU6XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExNzA6XFx0X19icGZfc3RydWN0X29wc19tYXBfZnJlZShtYXApO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTcxLWVycm91dDpcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTc2LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTc3OnN0YXRpYyB1NjQgYnBmX3N0cnVjdF9vcHNfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTc4LXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE3OTpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE4MDpcXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MgPSBzdF9tYXAtXFx1MDAzZXN0X29wc19kZXNjO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTgxLVxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdnQgPSBzdF9vcHNfZGVzYy1cXHUwMDNldmFsdWVfdHlwZTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTg0LVxcdHVzYWdlID0gc2l6ZW9mKCpzdF9tYXApICtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE4NTpcXHRcXHRcXHR2dC1cXHUwMDNlc2l6ZSAtIHNpemVvZihzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTg2LVxcdHVzYWdlICs9IHZ0LVxcdTAwM2VzaXplO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExOTItXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTM6QlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9zdHJ1Y3Rfb3BzX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9zdHJ1Y3Rfb3BzX21hcClcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE5NDpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYnBmX3N0cnVjdF9vcHNfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE5NTpcXHQubWFwX2FsbG9jX2NoZWNrID0gYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jX2NoZWNrLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTk2OlxcdC5tYXBfYWxsb2MgPSBicGZfc3RydWN0X29wc19tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTc6XFx0Lm1hcF9mcmVlID0gYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExOTg6XFx0Lm1hcF9nZXRfbmV4dF9rZXkgPSBicGZfc3RydWN0X29wc19tYXBfZ2V0X25leHRfa2V5LFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTk5OlxcdC5tYXBfbG9va3VwX2VsZW0gPSBicGZfc3RydWN0X29wc19tYXBfbG9va3VwX2VsZW0sXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMDA6XFx0Lm1hcF9kZWxldGVfZWxlbSA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIwMTpcXHQubWFwX3VwZGF0ZV9lbGVtID0gYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjAyOlxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9zZXFfc2hvd19lbGVtLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjAzOlxcdC5tYXBfbWVtX3VzYWdlID0gYnBmX3N0cnVjdF9vcHNfbWFwX21lbV91c2FnZSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIwNDpcXHQubWFwX2J0Zl9pZCA9IFxcdTAwMjZicGZfc3RydWN0X29wc19tYXBfYnRmX2lkc1swXSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIwNS19O1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMDktICovXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMTA6Ym9vbCBicGZfc3RydWN0X29wc19nZXQoY29uc3Qgdm9pZCAqa2RhdGEpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMTEte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjEyOlxcdHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqa3ZhbHVlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjEzOlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIxNC1cXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjE1LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjE2OlxcdGt2YWx1ZSA9IGNvbnRhaW5lcl9vZihrZGF0YSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlLCBkYXRhKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIxNzpcXHRzdF9tYXAgPSBjb250YWluZXJfb2Yoa3ZhbHVlLCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwLCBrdmFsdWUpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjE4LVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMjEtfVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjIyOkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9zdHJ1Y3Rfb3BzX2dldCk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMjMtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMjQ6dm9pZCBicGZfc3RydWN0X29wc19wdXQoY29uc3Qgdm9pZCAqa2RhdGEpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMjUte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjI2OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqa3ZhbHVlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjI3OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIyOC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIyOTpcXHRrdmFsdWUgPSBjb250YWluZXJfb2Yoa2RhdGEsIHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSwgZGF0YSk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMzA6XFx0c3RfbWFwID0gY29udGFpbmVyX29mKGt2YWx1ZSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCwga3ZhbHVlKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIzMS1cXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjMzLX1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIzNDpFWFBPUlRfU1lNQk9MX0dQTChicGZfc3RydWN0X29wc19wdXQpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjM1LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjM2OnUzMiBicGZfc3RydWN0X29wc19pZChjb25zdCB2b2lkICprZGF0YSlcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIzNy17XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMzg6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICprdmFsdWU7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMzk6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjQwLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjQxOlxcdGt2YWx1ZSA9IGNvbnRhaW5lcl9vZihrZGF0YSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlLCBkYXRhKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI0MjpcXHRzdF9tYXAgPSBjb250YWluZXJfb2Yoa3ZhbHVlLCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwLCBrdmFsdWUpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjQzLVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyNDUtfVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjQ2OkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9zdHJ1Y3Rfb3BzX2lkKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI0Ny1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI0OC0vKipcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI0OTogKiBicGZfc3RydWN0X29wc19mb3JfZWFjaF9wcm9nIC0gSW52b2tlIEBjYiBmb3IgZWFjaCBtZW1iZXIgcHJvZ1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjUwLSAqIEBrZGF0YToga2VybmVsLXNpZGUgc3RydWN0X29wcyB2bXRhYmxlICh0aGUgQGtkYXRhIGFyZyB0byAtXFx1MDAzZXJlZy8tXFx1MDAzZXVwZGF0ZS8tXFx1MDAzZXVucmVnKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyNjAtICovXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyNjE6aW50IGJwZl9zdHJ1Y3Rfb3BzX2Zvcl9lYWNoX3Byb2coY29uc3Qgdm9pZCAqa2RhdGEsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyNjItXFx0XFx0XFx0XFx0IGludCAoKmNiKShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHZvaWQgKmRhdGEpLFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyNjQte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjY1OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqa3ZhbHVlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjY2OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI2Ny1cXHR1MzIgaTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjY5LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjcwOlxcdGt2YWx1ZSA9IGNvbnRhaW5lcl9vZihrZGF0YSwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlLCBkYXRhKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI3MTpcXHRzdF9tYXAgPSBjb250YWluZXJfb2Yoa3ZhbHVlLCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwLCBrdmFsdWUpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjcyLVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyODEtfVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjgyOkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9zdHJ1Y3Rfb3BzX2Zvcl9lYWNoX3Byb2cpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjgzLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjg0OnN0YXRpYyBib29sIGJwZl9zdHJ1Y3Rfb3BzX3ZhbGlkX3RvX3JlZyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjg1LXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI4NjpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXAgPSAoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqKW1hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI4Ny1cXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjkzLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMjk0OnN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjk1LXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI5NjpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbGluayAqc3RfbGluaztcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI5NzpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyOTgtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyOTk6XFx0c3RfbGluayA9IGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbGluaywgbGluayk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEzMDA6XFx0c3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKilcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMwMS1cXHRcXHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHN0X2xpbmstXFx1MDAzZW1hcCwgdHJ1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMwOC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMwOTpzdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfbGlua19zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMTAtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzExLXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMxMjpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbGluayAqc3RfbGluaztcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMxMy1cXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzE0LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzE1OlxcdHN0X2xpbmsgPSBjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmssIGxpbmspO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzE2LVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzIyLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzIzOnN0YXRpYyBpbnQgYnBmX3N0cnVjdF9vcHNfbWFwX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzI0LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMyNS17XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEzMjY6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmsgKnN0X2xpbms7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzMjctXFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMyOC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMyOTpcXHRzdF9saW5rID0gY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rLCBsaW5rKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMzMC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTMzNy1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTMzODpzdGF0aWMgaW50IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfbWFwICpuZXdfbWFwLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzM5LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9tYXAgKmV4cGVjdGVkX29sZF9tYXApXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzNDAte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzQxOlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcCwgKm9sZF9zdF9tYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzNDItXFx0c3RydWN0IGJwZl9tYXAgKm9sZF9tYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEzNDM6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmsgKnN0X2xpbms7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzNDQtXFx0aW50IGVycjtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM0NS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM0NjpcXHRzdF9saW5rID0gY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rLCBsaW5rKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM0NzpcXHRzdF9tYXAgPSBjb250YWluZXJfb2YobmV3X21hcCwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCwgbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM0OC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM0OTpcXHRpZiAoIWJwZl9zdHJ1Y3Rfb3BzX3ZhbGlkX3RvX3JlZyhuZXdfbWFwKSlcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM1MC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMzY2LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzY3OlxcdG9sZF9zdF9tYXAgPSBjb250YWluZXJfb2Yob2xkX21hcCwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCwgbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM2OC1cXHQvKiBUaGUgbmV3IGFuZCBvbGQgc3RydWN0X29wcyBtdXN0IGJlIHRoZSBzYW1lIHR5cGUuICovXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTM4Ny1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM4ODpzdGF0aWMgaW50IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX2RldGFjaChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzODkte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMzkwOlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rICpzdF9saW5rID0gY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rLCBsaW5rKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTM5MTpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEzOTItXFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDAwLVxcdH1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQwMTpcXHRzdF9tYXAgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwLCBtYXApO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDAyLVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MDUtXFx0UkNVX0lOSVRfUE9JTlRFUihzdF9saW5rLVxcdTAwM2VtYXAsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDA2OlxcdC8qIFBhaXIgd2l0aCBicGZfbWFwX2dldCgpIGluIGJwZl9zdHJ1Y3Rfb3BzX2xpbmtfY3JlYXRlKCkgb3JcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQwNzpcXHQgKiBicGZfbWFwX2luYygpIGluIGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3VwZGF0ZSgpLlxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDA4LVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MTctXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MTg6c3RhdGljIF9fcG9sbF90IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MTktXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0cylcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQyMC17XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MjE6XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2xpbmsgKnN0X2xpbmsgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MjItXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQyNy1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQyODpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfc3RydWN0X29wc19tYXBfbG9wcyA9IHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQyOTpcXHQuZGVhbGxvYyA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX2RlYWxsb2MsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0MzA6XFx0LmRldGFjaCA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX2RldGFjaCxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzMTpcXHQuc2hvd19mZGluZm8gPSBicGZfc3RydWN0X29wc19tYXBfbGlua19zaG93X2ZkaW5mbyxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzMjpcXHQuZmlsbF9saW5rX2luZm8gPSBicGZfc3RydWN0X29wc19tYXBfbGlua19maWxsX2xpbmtfaW5mbyxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzMzpcXHQudXBkYXRlX21hcCA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3VwZGF0ZSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzNDpcXHQucG9sbCA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9saW5rX3BvbGwsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0MzUtfTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQzNi1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQzNzppbnQgYnBmX3N0cnVjdF9vcHNfbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0Mzgte1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDM5OlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19saW5rICpsaW5rID0gTlVMTDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ0MC1cXHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDQxOlxcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ0Mi1cXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0NDgtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0NDk6XFx0c3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0NTAtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0NTE6XFx0aWYgKCFicGZfc3RydWN0X29wc192YWxpZF90b19yZWcobWFwKSkge1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDUyLVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ2MC1cXHR9XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0NjE6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bGluay1cXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2YnBmX3N0cnVjdF9vcHNfbWFwX2xvcHMsIE5VTEwsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0NjItXFx0XFx0ICAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTE1NDk9dm9pZCAqYnBmX3Byb2dfZ2V0X2Fzc29jX3N0cnVjdF9vcHMoY29uc3Qgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNTUwLXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTU1MTpcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXA7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMyOjI1LjE1Mzc4MjI2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDE2MDQ1MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGhhdmUgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgbW9kdWxlcyBlbmFibGVkLiBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBUQ1BfQ09OR19CQlJgIGlzIGVuYWJsZWQsIGFzIGl0IHByb3ZpZGVzIHRoZSBCQlIgVENQIGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGUsIHdoaWNoIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBpbXBsZW1lbnRzIGB0c29fc2Vnc2AuIFRoZW4sIEknbGwgZG91YmxlLWNoZWNrIHRoYXQgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGFyZSBhbHNvIGVuYWJsZWQ7IHRoZXNlIGFyZSBlc3NlbnRpYWwgYmVjYXVzZSB0aGV5J3JlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gYGJwZl90Y3BfY2EuY2AgYW5kIEJQRiBUQ1AgY29uZ2VzdGlvbiBvcGVyYXRpb25zLiBPZiBjb3Vyc2UsIGBORVRgIGFuZCBgSU5FVGAgYXJlIG91ciBiYXNlIG5ldHdvcmtpbmcgcHJlcmVxdWlzaXRlcywgc28gSSBhc3N1bWUgdGhvc2UgYXJlIGFscmVhZHkgaW4gcGxhY2UsIGJ1dCBJIHdpbGwgY2hlY2sgdG8gYmUgY2VydGFpbi5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIHN5bWJvbHMgb3IgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIFRoZSBrZXkgc3ltYm9sIEknbSBmb2N1c2luZyBvbiByaWdodCBub3cgaXMgYHRjcF90c29fYXV0b3NpemVgLlxuXG5OZXh0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSByZXZpZXcgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbC4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHByZWNpc2UgaGVyZS4gYFdvcnRoRnV6emluZ2AgbXVzdCBiZSBzZXQgdG8gYHRydWVgLCBhcyB0aGUgcGF0Y2ggaXMgZ29pbmcgdG8gbW9kaWZ5IFRDUCBUU08gYXV0b3NpemluZyBsb2dpYyBhbmQgY29uZ2VzdGlvbiBjb250cm9sIG9wZXJhdGlvbnMsIG5vdGFibHkgcmVwbGFjaW5nIGBtaW5fdHNvX3NlZ3NgIHdpdGggYHRzb19zZWdzYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBCQlIgYW5kIEJQRiBUQ1AgQ0EgY2FsbGJhY2tzLCB3aGljaCBpcyBzaWduaWZpY2FudC4gRnVydGhlcm1vcmUsIHRoZSBwYXRjaCBleHBvcnRzIGB0Y3BfdHNvX2F1dG9zaXplYCBhcyBhIEJQRiBrZnVuYy4gQWxsIG9mIHRoaXMgZGlyZWN0bHkgaW1wYWN0cyBUQ1AgcGFja2V0IHNlZ21lbnRhdGlvbiBhbmQgaG93IHRoZXNlIHBhY2tldHMgYXJlIHRyYW5zbWl0dGVkIHdpdGhpbiBjb3JlIG5ldHdvcmtpbmcuIFRoZSBgUmVhc29uaW5nYCBzaG91bGQgbWFrZSB0aGlzIHZlcnkgY2xlYXIsIHNvIEknbGwgd3JpdGUgYSBkZXRhaWxlZCBleHBsYW5hdGlvbi5cblxuRm9yIGBGb2N1c1N5bWJvbHNgLCBJIHdpbGwgdXNlIGBbXCJ0Y3BfdHNvX2F1dG9zaXplXCJdYC4gQW5kIGZvciBgRW5hYmxlQ29uZmlnc2AsIEknbGwgaW5jbHVkZSB0aGUgZm9sbG93aW5nOiBgW1wiVENQX0NPTkdfQkJSXCIsIFwiQlBGX1NZU0NBTExcIiwgXCJCUEZfSklUXCIsIFwiSU5FVFwiXWAuXG5cbkZpbmFsbHksIEknbGwgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb2YgZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbC4gUHJlY2lzaW9uIGlzIHBhcmFtb3VudCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg1MSwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6MjkuMTY5ODMwMjMxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2NzI5MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRDUF9DT05HX0JCUlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfdHNvX2F1dG9zaXplXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBpbnRlcmZhY2UgYnkgcmVwbGFjaW5nIHRoZSBtaW5fdHNvX3NlZ3MgY2FsbGJhY2sgd2l0aCBhIHRzb19zZWdzIGNhbGxiYWNrLCB1cGRhdGluZyBUQ1Agb3V0cHV0IGxvZ2ljICh0Y3BfdHNvX2F1dG9zaXplLCB0Y3BfdHNvX3NlZ3MpLCBCQlIgY29uZ2VzdGlvbiBjb250cm9sLCBhbmQgQlBGIFRDUCBDQSBzdHJ1Y3Rfb3BzLiB0Y3BfdHNvX2F1dG9zaXplIGlzIGFsc28gZXhwb3NlZCBhcyBhIEJQRiBrZnVuYy4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFsdGVyIHRoZSBUQ1Agc2VnbWVudGF0aW9uIGFuZCBwYWNrZXQgc2NoZWR1bGluZyBwYXRoIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUQ1BfQ09OR19CQlJcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3Rzb19hdXRvc2l6ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgaW50ZXJmYWNlIGJ5IHJlcGxhY2luZyB0aGUgbWluX3Rzb19zZWdzIGNhbGxiYWNrIHdpdGggYSB0c29fc2VncyBjYWxsYmFjaywgdXBkYXRpbmcgVENQIG91dHB1dCBsb2dpYyAodGNwX3Rzb19hdXRvc2l6ZSwgdGNwX3Rzb19zZWdzKSwgQkJSIGNvbmdlc3Rpb24gY29udHJvbCwgYW5kIEJQRiBUQ1AgQ0Egc3RydWN0X29wcy4gdGNwX3Rzb19hdXRvc2l6ZSBpcyBhbHNvIGV4cG9zZWQgYXMgYSBCUEYga2Z1bmMuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbHRlciB0aGUgVENQIHNlZ21lbnRhdGlvbiBhbmQgcGFja2V0IHNjaGVkdWxpbmcgcGF0aCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMyOjI5LjI1MzUxMDg2NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk4OTQ1NzU0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjoyOS4yNTQwNzQ0ODRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyOTg5NDAwNzQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBpbnRlcmZhY2UgYnkgcmVwbGFjaW5nIHRoZSBgbWluX3Rzb19zZWdzYCBjYWxsYmFjayB3aXRoIGB0c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KWAsIHVwZGF0ZXMgQkJSIGFuZCBCUEYgY29uZ2VzdGlvbiBjb250cm9sIGhvb2tzLCBhbmQgZXhwb3J0cyBgdGNwX3Rzb19hdXRvc2l6ZWAgYXMgYSBCUEYga2Z1bmMuXFxuXFxuQWxsIG1vZGlmaWVkIGFuZCBhZGRlZCBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBzY2FsYXIgaW50ZWdlciB2YWx1ZXMgcGFzc2VkIGJ5IHZhbHVlIChgdTMyYCwgYHVuc2lnbmVkIGludGAsIHBvaW50ZXJzIHRvIGZ1bGx5IGluaXRpYWxpemVkIHN0cnVjdCBgc29ja2ApLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIHN0cnVjdHVyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXItc3BhY2UgKHN1Y2ggYXMgYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgb3IgaW9jdGwgcmV0dXJucykgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0N2ZlZWMyNGFlMjEwNDRjZjdjZGEyZjY2ZjZmYjM3NDU0YjU1MzdiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMTozMTo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmhcbmluZGV4IDY3MGMyMDg3NmYyNjUuLjc5ZjI3YWM5ZTk2M2EgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxuKysrIGIvaW5jbHVkZS9uZXQvdGNwLmhcbkBAIC04MjQsNiArODI0LDkgQEAgdW5zaWduZWQgaW50IHRjcF9zeW5jX21zcyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwbXR1KTtcbiB1bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzayk7XG4gdTMyIHRjcF9jbGFtcF9wcm9iZTBfdG9fdXNlcl90aW1lb3V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdTMyIHdoZW4pO1xuIFxuK3UzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4rXHRcdCAgICAgaW50IG1pbl90c29fc2Vncyk7XG4rXG4gLyogQm91bmQgTVNTIC8gVFNPIHBhY2tldCBzaXplIHdpdGggdGhlIGhhbGYgb2YgdGhlIHdpbmRvdyAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHRjcF9ib3VuZF90b19oYWxmX3duZChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgcGt0c2l6ZSlcbiB7XG5AQCAtMTM2MSw4ICsxMzY0LDE2IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMge1xuIFx0LyogaG9vayBmb3IgcGFja2V0IGFjayBhY2NvdW50aW5nIChvcHRpb25hbCkgKi9cbiBcdHZvaWQgKCpwa3RzX2Fja2VkKShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wbGUpO1xuIFxuLVx0Lyogb3ZlcnJpZGUgc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgKG9wdGlvbmFsKSAqL1xuLVx0dTMyICgqbWluX3Rzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2spO1xuK1x0LyogT3ZlcnJpZGUgdGNwX3Rzb19hdXRvc2l6ZSgpIChvcHRpb25hbClcbitcdCAqXG4rXHQgKiBJZiBwcm92aWRlZCwgdGhpcyBjYWxsYmFjayBzdXBwbGllcyB0aGUgVFNPIHNlZ21lbnQgdGFyZ2V0IGNvdW50XG4rXHQgKiBpbnN0ZWFkIG9mIHVzaW5nIHRjcF90c29fYXV0b3NpemUoKS4gVGhlIHJldHVybmVkIHZhbHVlIGlzXG4rXHQgKiBzdWJzZXF1ZW50bHkgY2xhbXBlZCB0byBbMSwgc2stXHUwMDNlc2tfZ3NvX21heF9zZWdzXSBieSB0aGUgY2FsbGVyLlxuK1x0ICpcbitcdCAqIEZvciB0aGUga2VybmVsIGNhbGxiYWNrIHBhdGgsIG1zc19ub3cgb3JpZ2luYXRlcyBmcm9tXG4rXHQgKiB0Y3BfY3VycmVudF9tc3MoKSBhbmQgc2hvdWxkIG5ldmVyIGJlIHplcm8uXG4rXHQgKi9cbitcdHUzMiAoKnRzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KTtcbiBcbiBcdC8qIG5ldyB2YWx1ZSBvZiBjd25kIGFmdGVyIGxvc3MgKHJlcXVpcmVkKSAqL1xuIFx0dTMyICAoKnVuZG9fY3duZCkoc3RydWN0IHNvY2sgKnNrKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9icGZfdGNwX2NhLmMgYi9uZXQvaXB2NC9icGZfdGNwX2NhLmNcbmluZGV4IDc5MWUxNTA2MzIzN2MuLjlkZWVkMjI0NGMyZGUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9icGZfdGNwX2NhLmNcbisrKyBiL25ldC9pcHY0L2JwZl90Y3BfY2EuY1xuQEAgLTE5NCw2ICsxOTQsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Jlbm9fY29uZ19hdm9pZClcbiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX3Jlbm9fdW5kb19jd25kKVxuIEJURl9JRF9GTEFHUyhmdW5jLCB0Y3Bfc2xvd19zdGFydClcbiBCVEZfSURfRkxBR1MoZnVuYywgdGNwX2NvbmdfYXZvaWRfYWkpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIHRjcF90c29fYXV0b3NpemUpXG4gQlRGX0tGVU5DU19FTkQoYnBmX3RjcF9jYV9jaGVja19rZnVuY19pZHMpXG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl90Y3BfY2Ffa2Z1bmNfc2V0ID0ge1xuQEAgLTI4NCw3ICsyODUsNyBAQCBzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3BrdHNfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcFxuIHtcbiB9XG4gXG4tc3RhdGljIHUzMiBicGZfdGNwX2NhX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spXG4rc3RhdGljIHUzMiBicGZfdGNwX2NhX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMyMCw3ICszMjEsNyBAQCBzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBfX2JwZl9vcHNfdGNwX2Nvbmdlc3Rpb25fb3BzID0ge1xuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnQgPSBicGZfdGNwX2NhX2N3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuaW5fYWNrX2V2ZW50ID0gYnBmX3RjcF9jYV9pbl9hY2tfZXZlbnQsXG4gXHQucGt0c19hY2tlZCA9IGJwZl90Y3BfY2FfcGt0c19hY2tlZCxcbi1cdC5taW5fdHNvX3NlZ3MgPSBicGZfdGNwX2NhX21pbl90c29fc2VncyxcbitcdC50c29fc2VncyA9IGJwZl90Y3BfY2FfdHNvX3NlZ3MsXG4gXHQuY29uZ19jb250cm9sID0gYnBmX3RjcF9jYV9jb25nX2NvbnRyb2wsXG4gXHQudW5kb19jd25kID0gYnBmX3RjcF9jYV91bmRvX2N3bmQsXG4gXHQuc25kYnVmX2V4cGFuZCA9IGJwZl90Y3BfY2Ffc25kYnVmX2V4cGFuZCxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYmJyLmMgYi9uZXQvaXB2NC90Y3BfYmJyLmNcbmluZGV4IDgyMzc4YTJiZmQxZTEuLmVjZjExYmU0NmYzODIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYmJyLmNcbisrKyBiL25ldC9pcHY0L3RjcF9iYnIuY1xuQEAgLTI5NywxMSArMjk3LDE4IEBAIHN0YXRpYyB2b2lkIGJicl9zZXRfcGFjaW5nX3JhdGUoc3RydWN0IHNvY2sgKnNrLCB1MzIgYncsIGludCBnYWluKVxuIH1cbiBcbiAvKiBvdmVycmlkZSBzeXNjdGxfdGNwX21pbl90c29fc2VncyAqL1xuLV9fYnBmX2tmdW5jIHN0YXRpYyB1MzIgYmJyX21pbl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2spXG4rc3RhdGljIHUzMiBiYnJfbWluX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3BhY2luZ19yYXRlKSBcdTAwM2MgKGJicl9taW5fdHNvX3JhdGUgXHUwMDNlXHUwMDNlIDMpID8gMSA6IDI7XG4gfVxuIFxuK19fYnBmX2tmdW5jIHN0YXRpYyB1MzIgYmJyX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpXG4re1xuK1x0aWYgKHVubGlrZWx5KCFtc3Nfbm93KSlcbitcdFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xuK1x0cmV0dXJuIHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIGJicl9taW5fdHNvX3NlZ3Moc2spKTtcbit9XG4rXG4gc3RhdGljIHUzMiBiYnJfdHNvX3NlZ3NfZ29hbChzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG5AQCAtMTE1MSw3ICsxMTU4LDcgQEAgc3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2Jicl9jb25nX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuIFx0LnVuZG9fY3duZFx0PSBiYnJfdW5kb19jd25kLFxuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnRcdD0gYmJyX2N3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuc3N0aHJlc2hcdD0gYmJyX3NzdGhyZXNoLFxuLVx0Lm1pbl90c29fc2Vnc1x0PSBiYnJfbWluX3Rzb19zZWdzLFxuK1x0LnRzb19zZWdzXHQ9IGJicl90c29fc2VncyxcbiBcdC5nZXRfaW5mb1x0PSBiYnJfZ2V0X2luZm8sXG4gXHQuc2V0X3N0YXRlXHQ9IGJicl9zZXRfc3RhdGUsXG4gfTtcbkBAIC0xMTYzLDcgKzExNzAsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NuZGJ1Zl9leHBhbmQpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl91bmRvX2N3bmQpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9jd25kX2V2ZW50X3R4X3N0YXJ0KVxuIEJURl9JRF9GTEFHUyhmdW5jLCBiYnJfc3N0aHJlc2gpXG4tQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl9taW5fdHNvX3NlZ3MpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJicl90c29fc2VncylcbiBCVEZfSURfRkxBR1MoZnVuYywgYmJyX3NldF9zdGF0ZSlcbiBCVEZfS0ZVTkNTX0VORCh0Y3BfYmJyX2NoZWNrX2tmdW5jX2lkcylcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbmluZGV4IDZmNGRjYTRhNGRlOTguLmI3ZjJlZTVlN2E2YjEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuQEAgLTIyNTIsMTMgKzIyNTIsMjEgQEAgc3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcbiAgKiBpbiBiaWdnZXIgVFNPIGJ1cnN0cy4gV2Ugd2UgY3V0IHRoZSBSVFQtYmFzZWQgYWxsb3dhbmNlIGluIGhhbGZcbiAgKiBmb3IgZXZlcnkgMl45IHVzZWMgKGFrYSA1MTIgdXMpIG9mIFJUVCwgc28gdGhhdCB0aGUgUlRULWJhc2VkIGFsbG93YW5jZVxuICAqIGlzIGJlbG93IDE1MDAgYnl0ZXMgYWZ0ZXIgNiAqIH41MDAgdXNlYyA9IDNtcy5cbisgKlxuKyAqIFRoZSBtaW5fdHNvX3NlZ3MgaXMgZmxvb3JlZCB0byAxIHRvIGF2b2lkIHN1cnByaXNpbmcgY29udmVyc2lvbi4gQWxzbyxcbisgKiBCUEYgY2FsbGVycyBtYXkgcGFzcyBtc3Nfbm93ID09IDAuIEluIHRoYXQgY2FzZSB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGVcbisgKiBzYW5pdGl6ZWQgbWluX3Rzb19zZWdzIHZhbHVlIGFuZCBza2lwcyBhdXRvc2l6aW5nLlxuICAqL1xuLXN0YXRpYyB1MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LFxuLVx0XHRcdCAgICBpbnQgbWluX3Rzb19zZWdzKVxuK19fYnBmX2tmdW5jIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4rXHRcdFx0XHQgaW50IG1pbl90c29fc2VncylcbiB7XG4rXHR1MzIgbWluX3RzbyA9IG1heChtaW5fdHNvX3NlZ3MsIDEpO1xuIFx0dW5zaWduZWQgbG9uZyBieXRlcztcbiBcdHUzMiByO1xuIFxuK1x0aWYgKHVubGlrZWx5KCFtc3Nfbm93KSlcbitcdFx0cmV0dXJuIG1pbl90c287XG4rXG4gXHRieXRlcyA9IFJFQURfT05DRShzay1cdTAwM2Vza19wYWNpbmdfcmF0ZSkgXHUwMDNlXHUwMDNlIFJFQURfT05DRShzay1cdTAwM2Vza19wYWNpbmdfc2hpZnQpO1xuIFxuIFx0ciA9IHRjcF9taW5fcnR0KHRjcF9zayhzaykpIFx1MDAzZVx1MDAzZSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF90c29fcnR0X2xvZyk7XG5AQCAtMjI2Nyw4ICsyMjc1LDkgQEAgc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4gXG4gXHRieXRlcyA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGJ5dGVzLCBzay1cdTAwM2Vza19nc29fbWF4X3NpemUpO1xuIFxuLVx0cmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvX3NlZ3MpO1xuK1x0cmV0dXJuIG1heF90KHUzMiwgYnl0ZXMgLyBtc3Nfbm93LCBtaW5fdHNvKTtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwodGNwX3Rzb19hdXRvc2l6ZSk7XG4gXG4gLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMgd2Ugd2FudCBpbiB0aGUgc2tiIHdlIGFyZSB0cmFuc21pdHRpbmcuXG4gICogU2VlIGlmIGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGUgd2FudHMgdG8gZGVjaWRlOyBvdGhlcndpc2UsIGF1dG9zaXplLlxuQEAgLTIyNzYsMTQgKzIyODUsMTMgQEAgc3RhdGljIHUzMiB0Y3BfdHNvX2F1dG9zaXplKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3csXG4gc3RhdGljIHUzMiB0Y3BfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYV9vcHMgPSBpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHM7XG4tXHR1MzIgbWluX3RzbywgdHNvX3NlZ3M7XG4tXG4tXHRtaW5fdHNvID0gY2Ffb3BzLVx1MDAzZW1pbl90c29fc2VncyA/XG4tXHRcdFx0Y2Ffb3BzLVx1MDAzZW1pbl90c29fc2VncyhzaykgOlxuLVx0XHRcdFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2Vncyk7XG4rXHR1MzIgdHNvX3NlZ3M7XG4gXG4tXHR0c29fc2VncyA9IHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIG1pbl90c28pO1xuLVx0cmV0dXJuIG1pbl90KHUzMiwgdHNvX3NlZ3MsIHNrLVx1MDAzZXNrX2dzb19tYXhfc2Vncyk7XG4rXHR0c29fc2VncyA9IGNhX29wcy1cdTAwM2V0c29fc2VncyA/XG4rXHRcdFx0Y2Ffb3BzLVx1MDAzZXRzb19zZWdzKHNrLCBtc3Nfbm93KSA6XG4rXHRcdFx0dGNwX3Rzb19hdXRvc2l6ZShzaywgbXNzX25vdyxcbitcdFx0XHRcdFx0IFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2VncykpO1xuK1x0cmV0dXJuIGNsYW1wX3QodTMyLCB0c29fc2VncywgMSwgc2stXHUwMDNlc2tfZ3NvX21heF9zZWdzKTtcbiB9XG4gXG4gLyogUmV0dXJucyB0aGUgcG9ydGlvbiBvZiBza2Igd2hpY2ggY2FuIGJlIHNlbnQgcmlnaHQgYXdheSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuY1xuaW5kZXggMGEzZTlkMzViZjZmMC4uNTgyNjJlNDkwMzM2NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jXG5AQCAtMTAsNyArMTAsNyBAQCBleHRlcm4gdTMyIGJicl9zbmRidWZfZXhwYW5kKHN0cnVjdCBzb2NrICpzaykgX19rc3ltO1xuIGV4dGVybiB1MzIgYmJyX3VuZG9fY3duZChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBiYnJfY3duZF9ldmVudF90eF9zdGFydChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbiBleHRlcm4gdTMyIGJicl9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spIF9fa3N5bTtcbi1leHRlcm4gdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKSBfX2tzeW07XG4rZXh0ZXJuIHUzMiBiYnJfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdykgX19rc3ltO1xuIGV4dGVybiB2b2lkIGJicl9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCB1OCBuZXdfc3RhdGUpIF9fa3N5bTtcbiBcbiBleHRlcm4gdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaykgX19rc3ltO1xuQEAgLTkwLDkgKzkwLDkgQEAgdTMyIEJQRl9QUk9HKHNzdGhyZXNoLCBzdHJ1Y3Qgc29jayAqc2spXG4gfVxuIFxuIFNFQyhcInN0cnVjdF9vcHNcIilcbi11MzIgQlBGX1BST0cobWluX3Rzb19zZWdzLCBzdHJ1Y3Qgc29jayAqc2spXG4rdTMyIEJQRl9QUk9HKHRzb19zZWdzLCBzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KVxuIHtcbi1cdHJldHVybiBiYnJfbWluX3Rzb19zZWdzKHNrKTtcbitcdHJldHVybiBiYnJfdHNvX3NlZ3Moc2ssIG1zc19ub3cpO1xuIH1cbiBcbiBTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG5AQCAtMTIwLDcgKzEyMCw3IEBAIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2NhX2tmdW5jID0ge1xuIFx0LmN3bmRfZXZlbnRcdD0gKHZvaWQgKiljd25kX2V2ZW50LFxuIFx0LmN3bmRfZXZlbnRfdHhfc3RhcnQgPSAodm9pZCAqKWN3bmRfZXZlbnRfdHhfc3RhcnQsXG4gXHQuc3N0aHJlc2hcdD0gKHZvaWQgKilzc3RocmVzaCxcbi1cdC5taW5fdHNvX3NlZ3NcdD0gKHZvaWQgKiltaW5fdHNvX3NlZ3MsXG4rXHQudHNvX3NlZ3NcdD0gKHZvaWQgKil0c29fc2VncyxcbiBcdC5zZXRfc3RhdGVcdD0gKHZvaWQgKilzZXRfc3RhdGUsXG4gXHQucGt0c19hY2tlZCAgICAgPSAodm9pZCAqKXBrdHNfYWNrZWQsXG4gXHQubmFtZVx0XHQ9IFwidGNwX2NhX2tmdW5jXCIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjoyOS4yNTQwNzU0MzVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI4MDczOTU0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byB0aHJvdyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gYXQgaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgcHJvYmFibHkgb2theSwgYnV0IHdlIHNob3VsZCBhbHdheXMgYmUgdGhvcm91Z2guXG5cbkZpcnN0LCB0aGUgcGF0Y2ggaXRzZWxmIHJlZmFjdG9ycyB0aGUgYG1pbl90c29fc2Vnc2AgaG9vayB3aXRoaW4gdGhlIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgb3BzLiBTcGVjaWZpY2FsbHksIGl0J3MgY2hhbmdpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBmcm9tIGB1MzIgKCptaW5fdHNvX3NlZ3MpKHN0cnVjdCBzb2NrICpzaylgIHRvIGB1MzIgKCp0c29fc2Vncykoc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdylgLiBCYXNpY2FsbHksIHRoZXkncmUgYWRkaW5nIGBtc3Nfbm93YCB0byB0aGUgcGFyYW1ldGVycy4gTG9va2luZyBhdCB0aGUgaW5jbHVkZWQgZmlsZXMsIGl0IGxvb2tzIGxpa2UgdGhleSdyZSB1cGRhdGluZyB0aGUgZGVmaW5pdGlvbnMsIHRoZSBCUEYga2Z1bmMgY2hlY2tzLCBhbmQgdGhlIHNlbGZ0ZXN0IHRvIG1hdGNoIHRoaXMgbmV3IHNpZ25hdHVyZS4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGBiYnJfbWluX3Rzb19zZWdzYCBpcyBnZXR0aW5nIHVwZGF0ZWQgYWNjb3JkaW5nbHkuIFdlIGFsc28gaGF2ZSBgdGNwX3Rzb19hdXRvc2l6ZWAsIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBpbiB0aGlzIHdob2xlIHByb2Nlc3MuXG5cbk5vdyBmb3IgdGhlIEtNU0FOIHJpc2tzLi4uIExldCdzIHNlZS5cblxuKiAgICoqTWVtb3J5IEFsbG9jYXRpb25zOioqIFRoaXMgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB3aGljaCBpcyBnb29kLlxuKiAgICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogSSdtIG5vdCBzZWVpbmcgYW55IHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIHRoYXQgYXJlbid0IHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGUgYG1zc19ub3dgIGlzIHBhc3NlZCBhcyBhIHZhbHVlLCBzbyB0aGF0IHNob3VsZCBiZSBzYWZlLlxuKiAgICoqVXNlcnNwYWNlIEV4cG9zdXJlOioqIFRoZSBgdGNwX2Nvbmdlc3Rpb25fb3BzYCBzdHJ1Y3QgaXMga2VybmVsLWludGVybmFsIGFuZCBhbHNvIGEgQlBGIHN0cnVjdF9vcHMsIHNvIHRoYXQncyBub3QgYSBjb25jZXJuLlxuKiAgICoqQnVmZmVyIE9wZXJhdGlvbnM6KiogTm8gbW9kaWZpY2F0aW9ucyB0byBidWZmZXJzLCBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBza2JzLCBvciBzb2NrZXQgb3B0aW9ucywgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuXG4qICAgKipCb3VuZHMgQ2hlY2tpbmcvRGF0YSBMZW5ndGhzOioqIEl0J3MgY2FsY3VsYXRpbmcgVFNPIHNlZ21lbnQgY291bnRzIGZvciBwYWNrZXQgc2VnbWVudGF0aW9uLiBUaGlzIGlzIHVzdWFsbHkgd2hlcmUgd2UgZmluZCBpc3N1ZXMsIGJ1dCBpdCBhcHBlYXJzIHNhZmUgaGVyZS5cbiogICAqKkJyYW5jaGluZzoqKiBObyBicmFuY2hpbmcgc2VlbXMgdG8gYmUgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG5cblNvIGZhciwgaXQgbG9va3MgY2xlYW4uIEJ1dCBqdXN0IHRvIGJlIGV4dHJhIHN1cmUsIEknbSBnb2luZyB0byBydW4gYGdyZXBwZXJgIGFuZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGFueSB1c2FnZSBvZiB0aGVzZSBob29rcyB0aGF0IGNvdWxkIGJlIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlLCBlc3BlY2lhbGx5IHdpdGggb3RoZXIgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZXMuIEkgd2FudCB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBpcyB1c2luZyBlaXRoZXIgYG1pbl90c29fc2Vnc2Agb3IgYHRzb19zZWdzYCwganVzdCB0byB2ZXJpZnkgdGhhdC4gQWxsIGluIGFsbCwgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGlzIGEgcmVsYXRpdmVseSBzYWZlIHBhdGNoIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZSwgYnV0IHZlcmlmeWluZyB0aGlzIHdpdGggdGhlIGdyZXBwZXIgc2VhcmNoIGlzIHRoZSBjb3JyZWN0IGZpbmFsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMTozMjo0Mi4wNjE0NzM0NzRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzI3ODA4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWluX3Rzb19zZWdzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0PTEwODc9dGNwX3RpbWVzdGFtcHMgLSBJTlRFR0VSXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdC0xMDk2LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0OjEwOTc6dGNwX21pbl90c29fc2VncyAtIElOVEVHRVJcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdC0xMDk4LVxcdE1pbmltYWwgbnVtYmVyIG9mIHNlZ21lbnRzIHBlciBUU08gZnJhbWUuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0bnNfaXB2NF9zeXNjdGwucnN0PTExND1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2N0bF90Y3BfbWluX3J0dF93bGVuICAgICAgICAgICAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfYWNrX3VwZGF0ZV9ydC4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRuc19pcHY0X3N5c2N0bC5yc3Q6MTE1OnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubGlrZWx5KGljc2tfY2FfLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldG5zX2lwdjRfc3lzY3RsLnJzdC0xMTYtdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjdGxfdGNwX3Rzb19ydHRfbG9nICAgICAgICAgICAgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3Rzb19hdXRvc2l6ZVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oPTU1PXN0cnVjdCBuZXRuc19pcHY0IHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yMjUtXFx0aW50IHN5c2N0bF90Y3BfY2hhbGxlbmdlX2Fja19saW1pdDtcXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg6MjI2OlxcdHU4IHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzO1xcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yMjctXFx0dTggc3lzY3RsX3RjcF9yZWZsZWN0X3RvcztcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oPTgyNz11MzIgdGNwX3Rzb19hdXRvc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LFxcbmluY2x1ZGUvbmV0L3RjcC5oOjgyODpcXHRcXHQgICAgIGludCBtaW5fdHNvX3NlZ3MpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTgyOS1cXG4tLVxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jPTYyNz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xcbi0tXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtMTM5My1cXHR7XFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTM5NDpcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJ0Y3BfbWluX3Rzb19zZWdzXFxcIixcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxMzk1OlxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQuaXB2NC5zeXNjdGxfdGNwX21pbl90c29fc2VncyxcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMzk2LVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZih1OCksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYmJyLmM9Mjg3PXN0YXRpYyB2b2lkIGJicl9zZXRfcGFjaW5nX3JhdGUoc3RydWN0IHNvY2sgKnNrLCB1MzIgYncsIGludCBnYWluKVxcbi0tXFxubmV0L2lwdjQvdGNwX2Jici5jLTI5OC1cXG5uZXQvaXB2NC90Y3BfYmJyLmM6Mjk5Oi8qIG92ZXJyaWRlIHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzICovXFxubmV0L2lwdjQvdGNwX2Jici5jOjMwMDpzdGF0aWMgdTMyIGJicl9taW5fdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9iYnIuYy0zMDEte1xcbi0tXFxubmV0L2lwdjQvdGNwX2Jici5jPTMwNT1fX2JwZl9rZnVuYyBzdGF0aWMgdTMyIGJicl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93KVxcbi0tXFxubmV0L2lwdjQvdGNwX2Jici5jLTMwNy1cXHRpZiAodW5saWtlbHkoIW1zc19ub3cpKVxcbm5ldC9pcHY0L3RjcF9iYnIuYzozMDg6XFx0XFx0cmV0dXJuIGJicl9taW5fdHNvX3NlZ3Moc2spO1xcbm5ldC9pcHY0L3RjcF9iYnIuYzozMDk6XFx0cmV0dXJuIHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csIGJicl9taW5fdHNvX3NlZ3Moc2spKTtcXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzEwLX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYz0zMTI9c3RhdGljIHUzMiBiYnJfdHNvX3NlZ3NfZ29hbChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfYmJyLmMtMzIyLVxcdFxcdCAgICAgIEdTT19MRUdBQ1lfTUFYX1NJWkUgLSAxIC0gTUFYX1RDUF9IRUFERVIpO1xcbm5ldC9pcHY0L3RjcF9iYnIuYzozMjM6XFx0c2VncyA9IG1heF90KHUzMiwgYnl0ZXMgLyB0cC1cXHUwMDNlbXNzX2NhY2hlLCBiYnJfbWluX3Rzb19zZWdzKHNrKSk7XFxubmV0L2lwdjQvdGNwX2Jici5jLTMyNC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzQzOD1zdGF0aWMgaW50IF9fbmV0X2luaXQgdGNwX3NrX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDk1LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzQ5NjpcXHRuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgPSAyO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzQ5Ny1cXHRuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF90c29fcnR0X2xvZyA9IDk7ICAvKiAyXjkgPSA1MTIgdXNlYyAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyMzQ9c3RhdGljIGJvb2wgdGNwX25hZ2xlX2NoZWNrKGJvb2wgcGFydGlhbCwgY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjU1LSAqXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNTY6ICogVGhlIG1pbl90c29fc2VncyBpcyBmbG9vcmVkIHRvIDEgdG8gYXZvaWQgc3VycHJpc2luZyBjb252ZXJzaW9uLiBBbHNvLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjU3LSAqIEJQRiBjYWxsZXJzIG1heSBwYXNzIG1zc19ub3cgPT0gMC4gSW4gdGhhdCBjYXNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjU4OiAqIHNhbml0aXplZCBtaW5fdHNvX3NlZ3MgdmFsdWUgYW5kIHNraXBzIGF1dG9zaXppbmcuXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNTktICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyNjA9X19icGZfa2Z1bmMgdTMyIHRjcF90c29fYXV0b3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI2MTpcXHRcXHRcXHRcXHQgaW50IG1pbl90c29fc2VncylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI2Mi17XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyNjM6XFx0dTMyIG1pbl90c28gPSBtYXgobWluX3Rzb19zZWdzLCAxKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI2NC1cXHR1bnNpZ25lZCBsb25nIGJ5dGVzO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIyODU9c3RhdGljIHUzMiB0Y3BfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjkyLVxcdFxcdFxcdHRjcF90c29fYXV0b3NpemUoc2ssIG1zc19ub3csXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIyOTM6XFx0XFx0XFx0XFx0XFx0IFJFQURfT05DRShzb2NrX25ldChzayktXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MpKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI5NC1cXHRyZXR1cm4gY2xhbXBfdCh1MzIsIHRzb19zZWdzLCAxLCBzay1cXHUwMDNlc2tfZ3NvX21heF9zZWdzKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwX3R1bm5lbHMuc2g9MzI9c2V0dXAoKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoLTUyLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwX3R1bm5lbHMuc2g6NTM6XFx0REVGQVVMVF9UQ1BfTUlOX1RTT19TRUdTPSQoaXAgbmV0bnMgZXhlYyBcXFwiJENMSUVOVF9OU1xcXCIgc3lzY3RsIC1uIG5ldC5pcHY0LnRjcF9taW5fdHNvX3NlZ3MpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaC01NC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoPTExMT1kb190ZXN0KCkge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaC0xNDAtXFx0aWYgWyBcXFwiJDNcXFwiICE9ICdvbicgXSBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkS1NGVF9NQUNISU5FX1NMT1dcXFwiID0geWVzIF07IHRoZW5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoOjE0MTpcXHRcXHRlY2hvICdTbG93IGNvbmZpZ3VyYXRpb247IGluY3JlYXNpbmcgbmV0LmlwdjQudGNwX21pbl90c29fc2VncyBhbmQgaW5pdGN3bmQnXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaDoxNDI6XFx0XFx0aXAgbmV0bnMgZXhlYyBcXFwiJENMSUVOVF9OU1xcXCIgc3lzY3RsIC13IG5ldC5pcHY0LnRjcF9taW5fdHNvX3NlZ3M9NTJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoLTE0My1cXHRcXHRpZiBbIFxcXCIkMlxcXCIgPSA0IF07IHRoZW5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwX3R1bm5lbHMuc2gtMTUxLVxcdFxcdGlwIG5ldG5zIGV4ZWMgXFxcIiRDTElFTlRfTlNcXFwiIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcF90dW5uZWxzLnNoOjE1MjpcXHRcXHQgICAgc3lzY3RsIC13IG5ldC5pcHY0LnRjcF9taW5fdHNvX3NlZ3M9XFxcIiRERUZBVUxUX1RDUF9NSU5fVFNPX1NFR1NcXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3BfdHVubmVscy5zaC0xNTMtXFx0ZmlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYmxvY2tpbmdfYmxvY2tpbmctd3JpdGUucGt0LTUtYC4vZGVmYXVsdHMuc2hcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Jsb2NraW5nX2Jsb2NraW5nLXdyaXRlLnBrdDo2Oi4vc2V0X3N5c2N0bHMucHkgL3Byb2Mvc3lzL25ldC9pcHY0L3RjcF9taW5fdHNvX3NlZ3M9MTBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Jsb2NraW5nX2Jsb2NraW5nLXdyaXRlLnBrdC03LWBcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3Bfc2xvd19zdGFydF9zbG93LXN0YXJ0LWFmdGVyLWlkbGUucGt0LTYtLi9zZXRfc3lzY3Rscy5weSAvcHJvYy9zeXMvbmV0L2lwdjQvdGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZT0xIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1hZnRlci1pZGxlLnBrdDo3OlxcdFxcdCAvcHJvYy9zeXMvbmV0L2lwdjQvdGNwX21pbl90c29fc2Vncz0xMGBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1hZnRlci1pZGxlLnBrdC04LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9zbG93X3N0YXJ0X3Nsb3ctc3RhcnQtYWZ0ZXItd2luLXVwZGF0ZS5wa3QtNi0uL3NldF9zeXNjdGxzLnB5IC9wcm9jL3N5cy9uZXQvaXB2NC90Y3Bfc2xvd19zdGFydF9hZnRlcl9pZGxlPTEgXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3Bfc2xvd19zdGFydF9zbG93LXN0YXJ0LWFmdGVyLXdpbi11cGRhdGUucGt0Ojc6XFx0XFx0IC9wcm9jL3N5cy9uZXQvaXB2NC90Y3BfbWluX3Rzb19zZWdzPTEwYFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3Bfc2xvd19zdGFydF9zbG93LXN0YXJ0LWFmdGVyLXdpbi11cGRhdGUucGt0LTgtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1mcS1hY2stcGVyLTJwa3QucGt0PTExPXN5c2N0bCAtcSBuZXQvaXB2NC90Y3BfcGFjaW5nX3NzX3JhdGlvPTIwMFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3Bfc2xvd19zdGFydF9zbG93LXN0YXJ0LWZxLWFjay1wZXItMnBrdC5wa3Q6MTI6c3lzY3RsIC1lIC1xIG5ldC5pcHY0LnRjcF9taW5fdHNvX3NlZ3M9MmBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3Nsb3dfc3RhcnRfc2xvdy1zdGFydC1mcS1hY2stcGVyLTJwa3QucGt0LTEzLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF90aW1lc3RhbXBpbmdfdGNwX3R4X3RpbWVzdGFtcF9idWcucGt0LTgtYC4vZGVmYXVsdHMuc2hcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3RpbWVzdGFtcGluZ190Y3BfdHhfdGltZXN0YW1wX2J1Zy5wa3Q6OTpzeXNjdGwgLXEgbmV0LmlwdjQudGNwX21pbl90c29fc2Vncz03MFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfdGltZXN0YW1waW5nX3RjcF90eF90aW1lc3RhbXBfYnVnLnBrdC0xMC1gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMyOjQzLjY5NDI1OTYyM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDY4NzE4OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHRjcF90c29fc2Vnc2AgaW4gYHRjcF9vdXRwdXQuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0byBleGFtaW5lIGhvdyBgdGNwX3Rzb19zZWdzYCBpcyBjYWxsZWQgYW5kIHV0aWxpemVkIHdpdGhpbiBgbmV0L2lwdjQvdGNwX291dHB1dC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIFRDUCBvdXRwdXQgcGF0aC4gV2hhdCBkYXRhIHN0cnVjdHVyZXMgaXMgaXQgbWFuaXB1bGF0aW5nPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBvcGVyYXRpb24gb24gcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgd2l0aCBUU08gZW5hYmxlZD8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHBvaW50cyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgYW5kIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaXMuIElzIGl0IHBhcnQgb2YgdGhlIGluaXRpYWwgc2VnbWVudCBjcmVhdGlvbiwgb3IgaXMgaXQgaW52b2x2ZWQgaW4gc29tZSBraW5kIG9mIHJldHJhbnNtaXNzaW9uIG9yIGFkanVzdG1lbnQ/IFVuZGVyc3RhbmRpbmcgaXRzIHBsYWNlIGluIHRoZSBvdmVyYWxsIGZsb3cgaXMgdGhlIGtleSB0byBhc3Nlc3NpbmcgaXRzIGZ1bmN0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yIHBlcmhhcHMgc3BvdHRpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODgxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6NTEuMTYyOTgxMzU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkyMzk3ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3Rzb19zZWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjI4MD1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfdHNvX2F1dG9zaXplKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjg0LSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjg1OnN0YXRpYyB1MzIgdGNwX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3cpXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyODYte1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTI5NzI9c3RhdGljIGJvb2wgdGNwX3dyaXRlX3htaXQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbXNzX25vdywgaW50IG5vbmFnbGUsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjk5OS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzAwMDpcXHRtYXhfc2VncyA9IHRjcF90c29fc2VncyhzaywgbXNzX25vdyk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTMwMDEtXFx0d2hpbGUgKChza2IgPSB0Y3Bfc2VuZF9oZWFkKHNrKSkpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zNzMzPXZvaWQgdGNwX3htaXRfcmV0cmFuc21pdF9xdWV1ZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzc0Ni1cXHRza2IgPSB0cC1cXHUwMDNlcmV0cmFuc21pdF9za2JfaGludCA/OiBydHhfaGVhZDtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6Mzc0NzpcXHRtYXhfc2VncyA9IHRjcF90c29fc2VncyhzaywgdGNwX2N1cnJlbnRfbXNzKHNrKSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM3NDgtXFx0c2tiX3JidHJlZV93YWxrX2Zyb20oc2tiKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAxOjMyOjUxLjYyMjI0MjI4NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTI1ODE5MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIENvbmNlcm5zIEhlcmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBvdmVyIHRoZXNlIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBjYWxsYmFja3MgYW5kIEknbSBmZWVsaW5nIHByZXR0eSBjb25maWRlbnQgYWJvdXQgdGhlIEtNU0FOIHNpdHVhdGlvbi4gVGhlIGNvcmUgb2YgaXQgaXMgdGhlIHJlZmFjdG9yaW5nIG9mIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BzLiBXZSdyZSBtb3ZpbmcgZnJvbSBgbWluX3Rzb19zZWdzYCB0byBhIGB0c29fc2Vnc2AgY2FsbGJhY2suIFRoaXMgbWFrZXMgc2Vuc2U7IGl0IGxldHMgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZXMgbGlrZSBCQlIgYW5kIEJQRiBDQSBjYWxjdWxhdGUgdGhlIFRTTyBzZWdtZW50IGNvdW50IGJhc2VkIG9uIHRoZSBjdXJyZW50IE1TUywgd2hpY2ggZ2l2ZXMgdXMgbW9yZSBmbGV4aWJpbGl0eS4gV2UgYXJlIGFsc28gZXhwb3NpbmcgYHRjcF90c29fYXV0b3NpemVgIGFzIGEgQlBGIGtmdW5jIGFuZCBhZGRpbmcgc29tZSBjbGFtcGluZyBhbmQgc2FuaXRpemF0aW9uLlxuXG5IZXJlJ3MgdGhlIGJyZWFrZG93biBvZiB3aHkgdGhpcyAqc2hvdWxkbid0KiB0cmlnZ2VyIGFueSBLTVNBTiBmbGFnczpcblxuKiAgICoqTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzOioqIFRoaXMgcGF0Y2ggaXNuJ3QgY3JlYXRpbmcsIHJlYWRpbmcsIHdyaXRpbmcsIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoYXQncyB0aGUga2V5LiBLTVNBTiBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIHRob3NlIHNjZW5hcmlvcyB3aGVyZSB0aGUgc3lzdGVtIG1pZ2h0IHVzZSBkYXRhIGJlZm9yZSBpdCdzIGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoYXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgaGFwcGVuaW5nIGhlcmUuXG4qICAgKipTY2FsYXIgRGF0YSBPbmx5OioqIFRoZSBpbnB1dHMgYW5kIG91dHB1dHMgYXJlIGp1c3QgaW50ZWdlcnMgLSBgdTMyYCwgYHVuc2lnbmVkIGludGAuIFRoZSBwb3RlbnRpYWwgZm9yIHdlaXJkbmVzcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGp1c3QgdmFuaXNoaW5nbHkgc21hbGwuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgc2NhbGFyIHZhbHVlcyBwYXNzZWQgYnkgdmFsdWUuXG4qICAgKipTYWZldHkgQ2hlY2tzOioqIFdlJ3ZlIGdvdCBjbGFtcGluZyBhbmQgYm91bmRzIGNoZWNrcyBpbiBwbGFjZS4gVGhhdCBhZGRzIGEgbGF5ZXIgb2YgcHJvdGVjdGlvbiB0aGF0IHRoZSB2YWx1ZSBpcyBhbHdheXMgaW4gYSBrbm93biBnb29kIHN0YXRlLlxuXG5LQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBhIHNlcGFyYXRlIGlzc3VlLCBhbmQgdGhhdCdzIHRoZSBtb3JlIGFwcHJvcHJpYXRlIHRvb2wgZm9yIHRoZSBzb3J0cyBvZiBlcnJvcnMgeW91J2QgZW5jb3VudGVyIGhlcmUgaWYgdGhlcmUgd2VyZSBhbnkuIFRoaW5ncyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1hdGgvbG9naWMgYnVncy4gQnV0IHRoYXQncyBub3Qgd2hhdCBLTVNBTiBpcyBmb3IuXG5cblNvLCBJJ20gY29tZm9ydGFibGUgY2FsbGluZyB0aGlzIGBOZWVkc0tNU0FOYCBhcyBgZmFsc2VgLiBXZSBjYW4gY2FsbCBgc2V0LXJlc3VsdHNgLiBObyBuZWVkIHRvIGJ1cm4gYW55IGN5Y2xlcyBvbiBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhpcyBwYXRjaCBsb29rcyBjbGVhbiBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU2MSwiT3V0cHV0VG9rZW5zIjoxOTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDE6MzI6NTkuMTQ4MDYzODM0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGludGVyZmFjZSBieSByZXBsYWNpbmcgdGhlIGBtaW5fdHNvX3NlZ3NgIGNhbGxiYWNrIHdpdGggYHRzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdTMyIG1zc19ub3cpYCwgdXBkYXRlcyBCQlIgYW5kIEJQRiBjb25nZXN0aW9uIGNvbnRyb2wgaG9va3MsIGFuZCBleHBvcnRzIGB0Y3BfdHNvX2F1dG9zaXplYCBhcyBhIEJQRiBrZnVuYy5cXG5cXG5BbGwgbW9kaWZpZWQgYW5kIGFkZGVkIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIHNjYWxhciBpbnRlZ2VyIHZhbHVlcyBwYXNzZWQgYnkgdmFsdWUgKGB1MzJgLCBgdW5zaWduZWQgaW50YCwgcG9pbnRlcnMgdG8gZnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0IGBzb2NrYCkuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlci1zcGFjZSAoc3VjaCBhcyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBvciBpb2N0bCByZXR1cm5zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVENQIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgaW50ZXJmYWNlIGJ5IHJlcGxhY2luZyB0aGUgYG1pbl90c29fc2Vnc2AgY2FsbGJhY2sgd2l0aCBgdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdylgLCB1cGRhdGVzIEJCUiBhbmQgQlBGIGNvbmdlc3Rpb24gY29udHJvbCBob29rcywgYW5kIGV4cG9ydHMgYHRjcF90c29fYXV0b3NpemVgIGFzIGEgQlBGIGtmdW5jLlxcblxcbkFsbCBtb2RpZmllZCBhbmQgYWRkZWQgZnVuY3Rpb25zIG9wZXJhdGUgb24gc2NhbGFyIGludGVnZXIgdmFsdWVzIHBhc3NlZCBieSB2YWx1ZSAoYHUzMmAsIGB1bnNpZ25lZCBpbnRgLCBwb2ludGVycyB0byBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgYHNvY2tgKS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyLXNwYWNlIChzdWNoIGFzIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIG9yIGlvY3RsIHJldHVybnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqjc6[1] Phase: Succeeded StartedAt: 2026-09-01 01:33:11 +0000 UTC FinishedAt: 2026-09-01 01:33:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-01 01:33:11 +0000 UTC FinishedAt: 2026-09-01 01:33:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2] Phase: Succeeded StartedAt: 2026-09-01 01:33:11 +0000 UTC FinishedAt: 2026-09-01 05:11:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-01 01:33:11 +0000 UTC FinishedAt: 2026-09-01 05:11:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-01 01:33:11 +0000 UTC FinishedAt: 2026-09-01 01:33:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-01 01:33:11 +0000 UTC FinishedAt: 2026-09-01 01:33:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowpqjc6/series-workflowpqjc6-convert-artifact-1479620973/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-01 01:33:21 +0000 UTC FinishedAt: 2026-09-01 01:49:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-01 01:33:21 +0000 UTC FinishedAt: 2026-09-01 01:49:34 +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:*71dc6539-e319-4dc5-8dde-a163c1582262,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-workflowpqjc6/series-workflowpqjc6-convert-artifact-1479620973/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": "31955e78-164d-4a3b-bedc-1be6ca00c585", "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-workflowpqjc6/series-workflowpqjc6-build-action-3468010339/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-01 01:33:21 +0000 UTC FinishedAt: 2026-09-01 01:49:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*71dc6539-e319-4dc5-8dde-a163c1582262,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-workflowpqjc6/series-workflowpqjc6-convert-artifact-1479620973/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": "31955e78-164d-4a3b-bedc-1be6ca00c585", "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-workflowpqjc6/series-workflowpqjc6-build-action-3468010339/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-01 01:49:34 +0000 UTC FinishedAt: 2026-09-01 01:49:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-01 01:49:34 +0000 UTC FinishedAt: 2026-09-01 01:49:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-01 01:49:34 +0000 UTC FinishedAt: 2026-09-01 01:49:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-01 01:49:34 +0000 UTC FinishedAt: 2026-09-01 01:49:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowpqjc6/series-workflowpqjc6-convert-artifact-485027272/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-01 01:49:44 +0000 UTC FinishedAt: 2026-09-01 01:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-01 01:49:44 +0000 UTC FinishedAt: 2026-09-01 01:51:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*31955e78-164d-4a3b-bedc-1be6ca00c585,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-workflowpqjc6/series-workflowpqjc6-build-action-3468010339/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-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-01 01:51:30 +0000 UTC FinishedAt: 2026-09-01 01:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-01 01:51:30 +0000 UTC FinishedAt: 2026-09-01 01:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-01 01:51:30 +0000 UTC FinishedAt: 2026-09-01 02:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-01 01:51:30 +0000 UTC FinishedAt: 2026-09-01 02:08:10 +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:*71dc6539-e319-4dc5-8dde-a163c1582262,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-workflowpqjc6/series-workflowpqjc6-convert-artifact-485027272/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": "fcf11de7-e7f6-41ee-a2aa-c82025bd3733", "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-workflowpqjc6/series-workflowpqjc6-build-action-2698125940/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-01 01:51:30 +0000 UTC FinishedAt: 2026-09-01 02:08:00 +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:*71dc6539-e319-4dc5-8dde-a163c1582262,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-workflowpqjc6/series-workflowpqjc6-convert-artifact-485027272/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": "fcf11de7-e7f6-41ee-a2aa-c82025bd3733", "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-workflowpqjc6/series-workflowpqjc6-build-action-2698125940/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-01 02:08:10 +0000 UTC FinishedAt: 2026-09-01 02:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-01 02:08:10 +0000 UTC FinishedAt: 2026-09-01 02:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-01 02:08:10 +0000 UTC FinishedAt: 2026-09-01 02:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-01 02:08:10 +0000 UTC FinishedAt: 2026-09-01 02:09:49 +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:*fcf11de7-e7f6-41ee-a2aa-c82025bd3733,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-workflowpqjc6/series-workflowpqjc6-build-action-2698125940/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-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-01 02:09:59 +0000 UTC FinishedAt: 2026-09-01 05:11:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-01 02:09:59 +0000 UTC FinishedAt: 2026-09-01 05:11:20 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"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:*31955e78-164d-4a3b-bedc-1be6ca00c585,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fcf11de7-e7f6-41ee-a2aa-c82025bd3733,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-workflowpqjc6/series-workflowpqjc6-build-action-3468010339/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-workflowpqjc6/series-workflowpqjc6-build-action-2698125940/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-01 02:09:59 +0000 UTC FinishedAt: 2026-09-01 02:10:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-01 02:09:59 +0000 UTC FinishedAt: 2026-09-01 02:10:04 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"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-workflowpqjc6/series-workflowpqjc6-convert-artifact-2352798081/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-01 02:09:59 +0000 UTC FinishedAt: 2026-09-01 02:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-01 02:09:59 +0000 UTC FinishedAt: 2026-09-01 02:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-01 02:09:59 +0000 UTC FinishedAt: 2026-09-01 02:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-01 02:10:09 +0000 UTC FinishedAt: 2026-09-01 05:11:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqjc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_tso_autosize"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_BBR","BPF_SYSCALL","BPF_JIT","INET"],"series_id":"69e9a18d-4174-4f6e-975d-45c3f488c150","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-01 02:10:09 +0000 UTC FinishedAt: 2026-09-01 05:11:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*31955e78-164d-4a3b-bedc-1be6ca00c585,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fcf11de7-e7f6-41ee-a2aa-c82025bd3733,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-workflowpqjc6/series-workflowpqjc6-build-action-3468010339/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-workflowpqjc6/series-workflowpqjc6-build-action-2698125940/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-workflowpqjc6/series-workflowpqjc6-convert-artifact-2352798081/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,}