Name: series-workflow7bflf Phase: Succeeded StartedAt: 2026-09-03 04:23:37 +0000 UTC FinishedAt: 2026-09-03 08:30:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[0] Phase: Succeeded StartedAt: 2026-09-03 04:23:37 +0000 UTC FinishedAt: 2026-09-03 04:47:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 04:23:37 +0000 UTC FinishedAt: 2026-09-03 04:47:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "5e8eeeda633de825e8c4062664bbc5a906a54dfe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "CGROUPS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "5e8eeeda633de825e8c4062664bbc5a906a54dfe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "CGROUPS" ], "series_id": "69e0e629-ef5b-4d51-bfdf-95ffd8537b59" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__list_lru_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2xpc3RfbHJ1X2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGFsb25nc2lkZSBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHNvIHRoYXQgYG1lbWNnX2F3YXJlYCBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQgYXQgYm9vdC4gVGhpcyBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgY29uZmlndXJhdGlvbiBjaGVjayBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBzdHJ1Y3QgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IG9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBfX2xpc3RfbHJ1X2luaXQoKSB0byBlbnN1cmUgbWVtY2dfYXdhcmUgaXMgc2V0IHRvIGZhbHNlIHdoZW4gbWVtX2Nncm91cF9kaXNhYmxlZCgpIGlzIHRydWUsIHByZXZlbnRpbmcgaW5hcHByb3ByaWF0ZSBpbml0aWFsaXphdGlvbiBvZiBwZXItbWVtY2cgbGlzdCBMUlVzIHdoZW4gbWVtb3J5IGNncm91cHMgYXJlIGRpc2FibGVkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvZGUgaW4ga2VybmVsIGxpc3RfbHJ1IGluaXRpYWxpemF0aW9uIChlLmcuLCBkdXJpbmcgZmlsZXN5c3RlbSBtb3VudCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNjJkOTI2ZDg2YmIyZTY2ZDRhODA4NjA3YTA2MGQ0MjZhZjBiNTRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwNDo0NjowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuY1xuaW5kZXggMzY2NjJkMDJmZjk2My4uYTQ1MjJjYTkzZWJjYiAxMDA2NDRcbi0tLSBhL21tL2xpc3RfbHJ1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2xpc3RfbHJ1LmNcbkBAIC02NzEsNyAmIzQzOzY3MSw3IEBAIGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyXG4gXHRlbHNlXG4gXHRcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuIFxuLVx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuJiM0MztcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4gXHRcdG1lbWNnX2F3YXJlID0gZmFsc2U7XG4gI2VuZGlmXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbGlzdF9scnVfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIF9fbGlzdF9scnVfaW5pdCgpIHRvIGVuc3VyZSBtZW1jZ19hd2FyZSBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgaXMgdHJ1ZSwgcHJldmVudGluZyBpbmFwcHJvcHJpYXRlIGluaXRpYWxpemF0aW9uIG9mIHBlci1tZW1jZyBsaXN0IExSVXMgd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29kZSBpbiBrZXJuZWwgbGlzdF9scnUgaW5pdGlhbGl6YXRpb24gKGUuZy4sIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE2MmQ5MjZkODZiYjJlNjZkNGE4MDg2MDdhMDYwZDQyNmFmMGI1NGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDA0OjQ2OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmMKaW5kZXggMzY2NjJkMDJmZjk2My4uYTQ1MjJjYTkzZWJjYiAxMDA2NDQKLS0tIGEvbW0vbGlzdF9scnUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9saXN0X2xydS5jCkBAIC02NzEsNyAmIzQzOzY3MSw3IEBAIGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyCiAJZWxzZQogCQlscnUtJmd0O3Nocmlua2VyX2lkID0gLTE7CiAKLQlpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpCiYjNDM7CWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpCiAJCW1lbWNnX2F3YXJlID0gZmFsc2U7CiAjZW5kaWYKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGxpc3RfbHJ1LmNgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgc2VlbXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBtb2RpZmljYXRpb24gd2l0aGluIGBtbS9saXN0X2xydS5jYC4gVGhlIGRpZmYgaGlnaGxpZ2h0cyBhIGNoYW5nZSBhcm91bmQgbGluZSA2NzEuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBjb25kaXRpb25hbCB0aGF0IGRldGVybWluZXMgdGhlIGBtZW1jZ19hd2FyZWAgZmxhZyBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSwgc28gSSYjMzk7bGwgcmVhZCB0aGUgY29kZSBhcm91bmQgdGhlIGhpZ2hsaWdodGVkIGxpbmVzIHRvIGdldCB0aGUgZnVsbCBjb250ZXh0LiBGcm9tIGEgZmlyc3QgZ2xhbmNlLCB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gZXh0ZW5kIHRoZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggYG1lbWNnX2F3YXJlYCBpcyBzZXQgdG8gYGZhbHNlYCwgYWRkaW5nIGFub3RoZXIgY2hlY2sgZm9yIGEgZGlzYWJsZWQgbWVtb3J5IGNncm91cC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgdG8gc2VlIGlmIHRoaXMgaXMgcmVsYXRlZCB0byBhIG5ldyBmZWF0dXJlLCBhIGJ1ZyBmaXgsIG9yIGEgZ2VuZXJhbCBvcHRpbWl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIGhvdyBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpbnRlcmFjdHMgd2l0aCBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBmb3IgZGVwZW5kZW5jaWVzIG9uIHRoZXNlIG1lbW9yeSBjZ3JvdXAgY2hlY2tzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGNoYW5nZSBtYWtlcyBzZW5zZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NTA6XHRcdHJlcyA9IF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcbiA2NTE6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiA2NTI6XHRcdHJldHVybiByZXM7XG4gNjUzOlx0fVxuIDY1NDpcdCNlbHNlXG4gNjU1Olx0c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXG4gNjU2Olx0e1xuIDY1NzpcdH1cbiA2NTg6XHRcbiA2NTk6XHRzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuIDY2MDpcdHtcbiA2NjE6XHR9XG4gNjYyOlx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIDY2MzpcdFxuIDY2NDpcdGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4gNjY1Olx0e1xuIDY2NjpcdFx0aW50IGk7XG4gNjY3Olx0XG4gNjY4Olx0I2lmZGVmIENPTkZJR19NRU1DR1xuIDY2OTpcdFx0aWYgKHNocmlua2VyKVxuIDY3MDpcdFx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cdTAwM2VpZDtcbiA2NzE6XHRcdGVsc2VcbiA2NzI6XHRcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gLTE7XG4gNjczOlx0XG4gNjc0Olx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuIDY3NTpcdFx0XHRtZW1jZ19hd2FyZSA9IGZhbHNlO1xuIDY3NjpcdCNlbmRpZlxuIDY3NzpcdFxuIDY3ODpcdFx0bHJ1LVx1MDAzZW5vZGUgPSBremFsbG9jX29ianMoKmxydS1cdTAwM2Vub2RlLCBucl9ub2RlX2lkcyk7XG4gNjc5Olx0XHRpZiAoIWxydS1cdTAwM2Vub2RlKVxuIDY4MDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA2ODE6XHRcbiA2ODI6XHRcdGZvcl9lYWNoX25vZGUoaSlcbiA2ODM6XHRcdFx0aW5pdF9vbmVfbHJ1KGxydSwgXHUwMDI2bHJ1LVx1MDAzZW5vZGVbaV0ubHJ1KTtcbiA2ODQ6XHRcbiA2ODU6XHRcdG1lbWNnX2luaXRfbGlzdF9scnUobHJ1LCBtZW1jZ19hd2FyZSk7XG4gNjg2Olx0XHRsaXN0X2xydV9yZWdpc3RlcihscnUpO1xuIDY4NzpcdFxuIDY4ODpcdFx0cmV0dXJuIDA7XG4gNjg5Olx0fVxuIDY5MDpcdEVYUE9SVF9TWU1CT0xfR1BMKF9fbGlzdF9scnVfaW5pdCk7XG4gNjkxOlx0XG4gNjkyOlx0dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuIDY5MzpcdHtcbiA2OTQ6XHRcdC8qIEFscmVhZHkgZGVzdHJveWVkIG9yIG5vdCB5ZXQgaW5pdGlhbGl6ZWQ/ICovXG4gNjk1Olx0XHRpZiAoIWxydS1cdTAwM2Vub2RlKVxuIDY5NjpcdFx0XHRyZXR1cm47XG4gNjk3Olx0XG4gNjk4Olx0XHRsaXN0X2xydV91bnJlZ2lzdGVyKGxydSk7XG4gNjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbml0aWFsIEV4YW1pbmF0aW9uIG9mIGBfX2xpc3RfbHJ1X2luaXRgIGFuZCBNZW1vcnkgQ2dyb3VwcyoqCgpBbHJpZ2h0LCBzbyBJIHNlZSBgX19saXN0X2xydV9pbml0YCBiZWluZyBjYWxsZWQsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciBpbml0aWFsaXppbmcgYGxpc3RfbHJ1c2Ag4oCTIG1ha2VzIHNlbnNlLiBUaGV5JiMzOTtyZSB1c2VkIGFsbCBvdmVyIHRoZSBwbGFjZTogc3VwZXJibG9ja3MsIGRjYWNoZSwgb3RoZXIgc3Vic3lzdGVtcy4gSXQmIzM5O3MgdGhlIGV4cGVjdGVkIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZSBmb3IgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzLiBOb3csIEkgaGF2ZSBhIHF1aWNrIHF1ZXN0aW9uLiBXaGF0JiMzOTtzIHRoZSBwcmFjdGljYWwgZGlmZmVyZW5jZSBiZXR3ZWVuIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGFuZCBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgPyBBcmUgdGhleSBjaGVja2luZyBmb3IgZGlmZmVyZW50IGFzcGVjdHMgb2YgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXR5IGJlaW5nIHR1cm5lZCBvZmY/IEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRob3NlIHR3byBmb3IgY29udGV4dC4gT2theSwgdGltZSB0byBkbyBhIHF1aWNrIGBncmVwYCBzZWFyY2guIFRoYXQmIzM5O2xsIGdpdmUgbWUgdGhlIHVzYWdlIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0IGZvciBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucy4gSSYjMzk7bGwgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIHNwZWNpZmljIHJvbGVzIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGBsaXN0X2xydWAgaW5pdGlhbGl6YXRpb24uIFRoYXQgc2hvdWxkIGRvIHRoZSB0cmljay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcxMD1zdGF0aWMgaW5saW5lIGludCBzaHJpbmtlcl9pZChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MTYtI2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTcxNzpib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MTgtaW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4MDI9c3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODA3LSNlbHNlXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxODA4OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQodm9pZClcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4MDkte1xuLS1cbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02NzMtXG5tbS9saXN0X2xydS5jOjY3NDpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG5tbS9saXN0X2xydS5jLTY3NS1cdFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTMyPXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob2JqY2dfbG9jayk7XG5tbS9tZW1jb250cm9sLmMtMTMzLVxubW0vbWVtY29udHJvbC5jOjEzNDpib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKVxubW0vbWVtY29udHJvbC5jLTEzNS17XG4tLVxubW0vbWVtY29udHJvbC5jPTM3OTA9c3RhdGljIHZvaWQgbWVtY2dfb25saW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC5jLTM3OTEte1xubW0vbWVtY29udHJvbC5jOjM3OTI6XHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtMzc5My1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0zODAzPXN0YXRpYyB2b2lkIG1lbWNnX29mZmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTM4MDYtXG5tbS9tZW1jb250cm9sLmM6MzgwNzpcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wuYy0zODA4LVx0XHRyZXR1cm47XG4tLVxubW0vcGVyY3B1LWludGVybmFsLmg9OTA9c3RhdGljIGlubGluZSBib29sIG5lZWRfcGNwdW9ial9leHQodm9pZClcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC05My1cdFx0cmV0dXJuIHRydWU7XG5tbS9wZXJjcHUtaW50ZXJuYWwuaDo5NDpcdGlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC05NS1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vcGVyY3B1LWludGVybmFsLmg9MTUzPXN0YXRpYyBpbmxpbmUgc2l6ZV90IHBjcHVfb2JqX2Z1bGxfc2l6ZShzaXplX3Qgc2l6ZSlcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0xNTctI2lmZGVmIENPTkZJR19NRU1DR1xubW0vcGVyY3B1LWludGVybmFsLmg6MTU4Olx0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTE1OS1cdFx0ZXh0cmFfc2l6ZSAmIzQzOz0gc2l6ZSAvIFBDUFVfTUlOX0FMTE9DX1NJWkUgKiBzaXplb2Yoc3RydWN0IG9ial9jZ3JvdXAgKik7XG4tLVxubW0vc2hyaW5rZXIuYz0yMjY9c3RhdGljIGludCBzaHJpbmtlcl9tZW1jZ19hbGxvYyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxuLS1cbm1tL3Nocmlua2VyLmMtMjMxLVx0XHRyZXR1cm4gLUVOT1NZUztcbm1tL3Nocmlua2VyLmM6MjMyOlx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSlcbm1tL3Nocmlua2VyLmMtMjMzLVx0XHRyZXR1cm4gLUVOT1NZUztcbi0tXG5tbS9zbGFiLmg9NTg4PXN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXG4tLVxubW0vc2xhYi5oLTU5Mi1cbm1tL3NsYWIuaDo1OTM6XHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNlxubW0vc2xhYi5oLTU5NC1cdFx0XHQoS01BTExPQ19OT1JNQUwgPT0gS01BTExPQ19SRUNMQUlNKSlcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTMxOD1zdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubW0vc2xhYl9jb21tb24uYy0zNjUtXHQgKi9cbm1tL3NsYWJfY29tbW9uLmM6MzY2Olx0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbm1tL3NsYWJfY29tbW9uLmMtMzY3LVx0XHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9OTYzPW5ld19rbWFsbG9jX2NhY2hlKGludCBpZHgsIGVudW0ga21hbGxvY19jYWNoZV90eXBlIHR5cGUpXG4tLVxubW0vc2xhYl9jb21tb24uYy05NzItXHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSBcdTAwMjZcdTAwMjYgKHR5cGUgPT0gS01BTExPQ19DR1JPVVApKSB7XG5tbS9zbGFiX2NvbW1vbi5jOjk3MzpcdFx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7XG5tbS9zbGFiX2NvbW1vbi5jLTk3NC1cdFx0XHRrbWFsbG9jX2NhY2hlc1t0eXBlXVtpZHhdID0ga21hbGxvY19jYWNoZXNbS01BTExPQ19OT1JNQUxdW2lkeF07XG4tLVxubW0vc2xhYl9jb21tb24uYy0xMDAxLVx0ICovXG5tbS9zbGFiX2NvbW1vbi5jOjEwMDI6XHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7XG5tbS9zbGFiX2NvbW1vbi5jLTEwMDMtXHRcdGlmICh0eXBlID09IEtNQUxMT0NfTk9STUFMIFx1MDAyNlx1MDAyNiBLTUFMTE9DX1JFQ0xBSU0gIT0gS01BTExPQ19OT1JNQUwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6CgoqKkRpZ2dpbmcgaW50byB0aGUgTWVtb3J5IENvbnRyb2wgTG9naWMqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBjaGFuZ2UsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzIGdldHRpbmcgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBoaXN0b3J5LiBJIHdhbnQgdG8gc2VlIHRoZSBgZ2l0IGxvZ2Agb3IgY29tbWl0IGhpc3RvcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2hhbmdlLiBTZWVpbmcgdGhlIGV2b2x1dGlvbiBvZiB0aGUgY29kZSwgdGhlIHJlYXNvbmluZyBiZWhpbmQgcHJldmlvdXMgbW9kaWZpY2F0aW9ucywgYW5kIGFueSBkaXNjdXNzaW9ucyB0aGF0IGhhcHBlbmVkIGFyb3VuZCB0aGlzIHNwZWNpZmljIHBhcnQgb2YgdGhlIGNvZGViYXNlIGlzIGludmFsdWFibGUgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuIEZhaWxpbmcgYSBzdHJhaWdodGZvcndhcmQgZ2l0IGhpc3RvcnkgZGl2ZSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBmcm9tIGEgc291cmNlIGNvZGUgbGV2ZWwgaW52ZXN0aWdhdGlvbi4KCk15IG1pbmQgaW1tZWRpYXRlbHkgemVyb2VzIGluIG9uIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgbWVtb3J5IGNncm91cCBtYWdpYyBoYXBwZW5zLCBhbmQgc3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIGBtZW1fY2dyb3VwX2Rpc2FibGVkYCBhbmQgYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZGAuIFVuZGVyc3RhbmRpbmcgdGhlaXIgcm9sZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IGlzIGNydWNpYWwuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIGZsYWdzIGltcGFjdCBtZW1vcnkgYWNjb3VudGluZywgcmVzb3VyY2UgbGltaXRpbmcsIGFuZCBwb3RlbnRpYWxseSwgdGhlIGJlaGF2aW9yIG9mIHRoaXMgY2hhbmdlLiBBcmUgd2UgdG9nZ2xpbmcgdGhlbT8gQWZmZWN0aW5nIHRoZW0/IFRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGFyb3VuZCB0aG9zZSB2YXJpYWJsZXMgd2lsbCBiZSB0aGUga2V5IHRvIGl0LiBJdCYjMzk7cyB0aW1lIHRvIHJlYWQgc29tZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjU6XHRcdHJldHVybiBjb250YWluZXJfb2Yodm1wciwgc3RydWN0IG1lbV9jZ3JvdXAsIHZtcHJlc3N1cmUpO1xuIDEyNjpcdH1cbiAxMjc6XHRcbiAxMjg6XHQjZGVmaW5lIFNFUV9CVUZfU0laRSBTWl80S1xuIDEyOTpcdCNkZWZpbmUgQ1VSUkVOVF9PQkpDR19VUERBVEVfQklUIDBcbiAxMzA6XHQjZGVmaW5lIENVUlJFTlRfT0JKQ0dfVVBEQVRFX0ZMQUcgKDFVTCBcdTAwM2NcdTAwM2MgQ1VSUkVOVF9PQkpDR19VUERBVEVfQklUKVxuIDEzMTpcdFxuIDEzMjpcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob2JqY2dfbG9jayk7XG4gMTMzOlx0XG4gMTM0Olx0Ym9vbCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQodm9pZClcbiAxMzU6XHR7XG4gMTM2Olx0XHRyZXR1cm4gY2dyb3VwX21lbW9yeV9ub2ttZW07XG4gMTM3Olx0fVxuIDEzODpcdFxuIDEzOTpcdHN0YXRpYyB2b2lkIG1lbWNnX3VuY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcbiAxNDA6XHRcbiAxNDE6XHRzdGF0aWMgdm9pZCBtZW1jZ191bmNoYXJnZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuIDE0MjpcdHtcbiAxNDM6XHRcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfS01FTSwgLW5yX3BhZ2VzKTtcbiAxNDQ6XHRcdG1lbWNnMV9hY2NvdW50X2ttZW0obWVtY2csIC1ucl9wYWdlcyk7XG4gMTQ1Olx0XHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXG4gMTQ2Olx0XHRcdG1lbWNnX3VuY2hhcmdlKG1lbWNnLCBucl9wYWdlcyk7XG4gMTQ3Olx0fVxuIDE0ODpcdFxuIDE0OTpcdHN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuIDE1MDpcdHtcbiAxNTE6XHRcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBvYmpfY2dyb3VwLCByZWZjbnQpO1xuIDE1MjpcdFx0dW5zaWduZWQgaW50IG5yX2J5dGVzO1xuIDE1MzpcdFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzO1xuIDE1NDpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAxNTU6XHRcbiAxNTY6XHRcdC8qXG4gMTU3Olx0XHQgKiBBdCB0aGlzIHBvaW50IGFsbCBhbGxvY2F0ZWQgb2JqZWN0cyBhcmUgZnJlZWQsIGFuZFxuIDE1ODpcdFx0ICogb2JqY2ctXHUwMDNlbnJfY2hhcmdlZF9ieXRlcyBjYW4mIzM5O3QgaGF2ZSBhbiBhcmJpdHJhcnkgYnl0ZSB2YWx1ZS5cbiAxNTk6XHRcdCAqIEhvd2V2ZXIsIGl0IGNhbiBiZSBQQUdFX1NJWkUgb3IgKHggKiBQQUdFX1NJWkUpLlxuIDE2MDpcdFx0ICpcbiAxNjE6XHRcdCAqIFRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgY2FuIGxlYWQgdG8gaXQ6XG4gMTYyOlx0XHQgKiAxKSBDUFUwOiBvYmpjZyBjYWNoZWQgaW4gb25lIG9mIHN0b2NrLVx1MDAzZWNhY2hlZFtpXVxuIDE2MzpcdFx0ICogMikgQ1BVMTogd2UgZG8gYSBzbWFsbCBhbGxvY2F0aW9uIChlLmcuIDkyIGJ5dGVzKSxcbiAxNjQ6XHRcdCAqICAgICAgICAgIFBBR0VfU0laRSBieXRlcyBhcmUgY2hhcmdlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5ODkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBmdW5jdGlvbi4gSSBrbm93IHRoZSBjb3JlIGNvbmNlcHQgb2YgbWVtb3J5IGNncm91cHMsIG9mIGNvdXJzZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyB0aGlzIGEgY2hlY2sgZm9yIGEgZnVuZGFtZW50YWwgc3lzdGVtIHNldHRpbmcsIG9yIGlzIGl0IGEgbW9yZSBkeW5hbWljIHJ1bnRpbWUgY29uZmlndXJhdGlvbj8gSSYjMzk7bSBiZXR0aW5nIGl0JiMzOTtzIHRoZSBmb3JtZXIg4oCTIHRoaXMgZmVlbHMgbGlrZSBpdCBkZXRlcm1pbmVzIG92ZXJhbGwgY2dyb3VwIGJlaGF2aW9yIHJhdGhlciB0aGFuIGEgcGVyLXByb2Nlc3MgcG9saWN5LiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyB1c2VkLiBLbm93aW5nIHdoZXJlIGl0IGlzIGNhbGxlZCB3aWxsIGluZGljYXRlIHRoZSBpbXBvcnRhbmNlIG9mIHRoZSBmdW5jdGlvbi4KCkkgaW1tZWRpYXRlbHkgd2FudCB0byBrbm93OiBXaGF0JiMzOTtzIHRoZSAqcmVhc29uKiBmb3IgdGhpcyBzdGF0ZT8gSXMgaXQgYmVjYXVzZSB0aGUga2VybmVsIHdhcyBidWlsdCB3aXRob3V0IG1lbW9yeSBjZ3JvdXAgc3VwcG9ydCwgb3IgaXMgdGhlcmUgc29tZSBydW50aW1lIGNvbmZpZ3VyYXRpb24gZGlzYWJsaW5nIGl0IGZvciBzcGVjaWZpYyBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucywgZm9yIGV4YW1wbGU/IFRoZSBjb21tZW50IGJsb2NrcyBzaG91bGQgY29udGFpbiB0aGF0IGluZm9ybWF0aW9uLCBpZiB3cml0dGVuIHByb3Blcmx5LgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZTogV2hhdCBvdGhlciBjb2RlIHBhdGhzIGFyZSBza2lwcGVkIG9yIGVuYWJsZWQgYmFzZWQgb24gdGhpcz8gSG93IGRvZXMgaXQgYWZmZWN0IHRoZSBpbml0aWFsaXphdGlvbiBvZiBtZW1vcnkgYWNjb3VudGluZyBvciB0aGUgYmVoYXZpb3Igb2YgcmVsYXRlZCBzdWJzeXN0ZW1zIGxpa2UgT09NIGhhbmRsaW5nIG9yIHJlc291cmNlIGxpbWl0YXRpb25zPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZmFsbGJhY2sgYmVoYXZpb3IuIEnigJltIHRoaW5raW5nIGluIHBhcnRpY3VsYXIgYWJvdXQgdGhlIHJhbWlmaWNhdGlvbnMgdG8gdGhlIGFjY291bnRpbmcgc3Vic3lzdGVtLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGZvcm0gYSBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgYWZmZWN0cyB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBmaXRzIGluIHdpdGggdGhlIGJyb2FkZXIgY2dyb3VwIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9kaXNhYmxlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD01MzA9c3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNTM0LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NTM1OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2Rpc2FibGVkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC01MzYte1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTU0MD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTU0Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjU0ODpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC01NDktXHRcdHJldHVybjtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD01OTU9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfdW5wcm90ZWN0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02MDItXHQgKi9cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjYwMzpcdHJldHVybiBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSB8fFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjA0LVx0XHRtZW1jZyA9PSB0YXJnZXQ7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjQzPXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY0NS17XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NDY6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjQ3LVx0XHRyZXR1cm4gMDtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02NjQ9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2NS17XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjY6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY3LVx0XHRyZXR1cm47XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjcyPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY3My17XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NzQ6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjc1LVx0XHRyZXR1cm47XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjkxPXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY5Ni1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY5NzpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY5OC1cdFx0bHJ1dmVjID0gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NzMyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNzM1LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NzM2Olx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFtZW1jZyBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSwgZm9saW8pO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNzM3LVx0cmV0dXJuIG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBmb2xpb19wZ2RhdChmb2xpbykpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTgwOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MTAte1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODExOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgxMi1cdFx0cmV0dXJuIDA7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODMwPXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODMzLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODM0Olx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgzNS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODc3PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04Nzgte1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODc5Olx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTg4MC1cdFx0cmV0dXJuIHRydWU7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9OTIwPXN0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MjQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5MjU6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTI2LVx0XHRyZXR1cm47XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9OTY4PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19ldmVudHNfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTcyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTczOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk3NC1cdFx0cmV0dXJuO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTk5OD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfbWVtb3J5X2V2ZW50X21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDItXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMDAzOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDQtXHRcdHJldHVybjtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMDE3PXN0YXRpYyBpbmxpbmUgdTY0IGNncm91cF9pZF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMjEtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMDIyOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMjMtXHRcdHJldHVybiAwO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEwOTM9c3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTA5Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEwOTg6c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfZGlzYWJsZWQodm9pZClcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwOTkte1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE1NzY9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE1ODAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNTgxOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE1ODItXHRcdHJldHVybjtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD00ODI9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQ4My17XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo0ODQ6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDg1LVx0XHRyZXR1cm47XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9NDk2PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00OTcte1xuaW5jbHVkZS9saW51eC9zd2FwLmg6NDk4Olx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQ5OS1cdFx0cmV0dXJuIDA7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9NTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbmluY2x1ZGUvbGludXgvc3dhcC5oLTUwNS17XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDY6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA3LVx0XHRyZXR1cm47XG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYz0yMz1fX2JwZl9rZnVuYyBzdHJ1Y3QgbWVtX2Nncm91cCAqYnBmX2dldF9yb290X21lbV9jZ3JvdXAodm9pZClcbm1tL2JwZl9tZW1jb250cm9sLmMtMjQte1xubW0vYnBmX21lbWNvbnRyb2wuYzoyNTpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9icGZfbWVtY29udHJvbC5jLTI2LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5tbS9icGZfbWVtY29udHJvbC5jPTQ1PWJwZl9nZXRfbWVtX2Nncm91cChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL2JwZl9tZW1jb250cm9sLmMtNDktXG5tbS9icGZfbWVtY29udHJvbC5jOjUwOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhcm9vdF9tZW1fY2dyb3VwKVxubW0vYnBmX21lbWNvbnRyb2wuYy01MS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMDU3PWludCBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy0xMDU4LXtcbm1tL2h1Z2VfbWVtb3J5LmM6MTA1OTpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9odWdlX21lbW9yeS5jLTEwNjAtXHRcdHJldHVybiAwO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDUwMj1ib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUxMC1cdFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxMTpcdFdBUk5fT05fT05DRSghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpO1xubW0vaHVnZV9tZW1vcnkuYy00NTEyLVxuLS1cbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02NzMtXG5tbS9saXN0X2xydS5jOjY3NDpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG5tbS9saXN0X2xydS5jLTY3NS1cdFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjY5PXZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yNzktXG5tbS9tZW1jb250cm9sLXYxLmM6MjgwOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wtdjEuYy0yODEtXHRcdHJldHVybjtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDkyPXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtNDk3LVxubW0vbWVtY29udHJvbC5jOjQ5ODpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtNDk5LVx0XHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MzM9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MzgtXG5tbS9tZW1jb250cm9sLmM6NTM5Olx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wuYy01NDAtXHRcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NTA9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU1Ni1cbm1tL21lbWNvbnRyb2wuYzo1NTc6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTU1OC1cdFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9Nzc0PXZvaWQgbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNzc1LXtcbm1tL21lbWNvbnRyb2wuYzo3NzY6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTc3Ny1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz05MTY9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTkyMC1cbm1tL21lbWNvbnRyb2wuYzo5MjE6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTkyMi1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xMDEwPXZvaWQgbW9kX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMDE2LVx0LyogVXBkYXRlIG1lbWNnIGFuZCBscnV2ZWMgKi9cbm1tL21lbWNvbnRyb2wuYzoxMDE3Olx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtMTAxOC1cdFx0bW9kX21lbWNnX2xydXZlY19zdGF0ZShscnV2ZWMsIGlkeCwgdmFsKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTA3Mz12b2lkIGNvdW50X21lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTEwNzgtXG5tbS9tZW1jb250cm9sLmM6MTA3OTpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtMTA4MC1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xMTU3PXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMTYwLVxubW0vbWVtY29udHJvbC5jOjExNjE6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTExNjItXHRcdHJldHVybiBOVUxMO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xMTk5PXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTIwMi1cbm1tL21lbWNvbnRyb2wuYzoxMjAzOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wuYy0xMjA0LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTIyMz1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMjI2LVxubW0vbWVtY29udHJvbC5jOjEyMjc6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTEyMjgtXHRcdHJldHVybiBOVUxMO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xMjU4PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2l0ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4tLVxubW0vbWVtY29udHJvbC5jLTEyNjYtXG5tbS9tZW1jb250cm9sLmM6MTI2NzpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtMTI2OC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vbWVtY29udHJvbC5jPTE1Mjg9dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTM0LVxubW0vbWVtY29udHJvbC5jOjE1MzU6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTE1MzYtXHRcdHJldHVybjtcbi0tXG5tbS9tZW1jb250cm9sLmM9MzAwMj1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcbi0tXG5tbS9tZW1jb250cm9sLmMtMzAwNS1cbm1tL21lbWNvbnRyb2wuYzozMDA2Olx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wuYy0zMDA3LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5tbS9tZW1jb250cm9sLmM9MzIxND1zdGF0aWMgc3RydWN0IG9ial9jZ3JvdXAgKnBhZ2Vfb2JqY2coY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtY29udHJvbC5jLTMyMTctXG5tbS9tZW1jb250cm9sLmM6MzIxODpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2RhdGEpXG5tbS9tZW1jb250cm9sLmMtMzIxOS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vbWVtY29udHJvbC5jPTM3Nzg9dm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcbi0tXG5tbS9tZW1jb250cm9sLmMtMzc4Mi1cbm1tL21lbWNvbnRyb2wuYzozNzgzOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpXG5tbS9tZW1jb250cm9sLmMtMzc4NC1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00MzEyPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzNDEtXG5tbS9tZW1jb250cm9sLmM6NDM0MjpcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wuYy00MzQzLVx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2c3RhdHNfZmx1c2hfZHdvcmssXG4tLVxubW0vbWVtY29udHJvbC5jPTUyMjg9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjMzLVxubW0vbWVtY29udHJvbC5jOjUyMzQ6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTUyMzUtXHRcdHJldHVybjtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTI4Nz1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyOTYtXHQgKi9cbm1tL21lbWNvbnRyb2wuYzo1Mjk3Olx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfaHVnZXRsYigpIHx8XG5tbS9tZW1jb250cm9sLmMtNTI5OC1cdFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MzIxPWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4tLVxubW0vbWVtY29udHJvbC5jLTUzMjYtXG5tbS9tZW1jb250cm9sLmM6NTMyNzpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtNTMyOC1cdFx0cmV0dXJuIDA7XG4tLVxubW0vbWVtY29udHJvbC5jPTU0OTY9dm9pZCBtZW1fY2dyb3VwX3JlcGxhY2VfZm9saW8oc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NTA2LVxubW0vbWVtY29udHJvbC5jOjU1MDc6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTU1MDgtXHRcdHJldHVybjtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTU1Mz12b2lkIG1lbV9jZ3JvdXBfbWlncmF0ZShzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpXG4tLVxubW0vbWVtY29udHJvbC5jLTU1NjItXG5tbS9tZW1jb250cm9sLmM6NTU2MzpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtNTU2NC1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01ODQxPWxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTU4NDQtXG5tbS9tZW1jb250cm9sLmM6NTg0NTpcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZG9fbWVtc3dfYWNjb3VudCgpKVxubW0vbWVtY29udHJvbC5jLTU4NDYtXHRcdG5yX3N3YXBfcGFnZXMgPSBtaW4obnJfc3dhcF9wYWdlcywgcGFnZV9jb3VudGVyX21hcmdpbihcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTU4NTc9bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODYxLVxubW0vbWVtY29udHJvbC5jOjU4NjI6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fFxubW0vbWVtY29udHJvbC5jLTU4NjMtXHQgICAgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKVxuLS1cbm1tL21lbWNvbnRyb2wuYz02MjMzPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXG5tbS9tZW1jb250cm9sLmMtNjIzNC17XG5tbS9tZW1jb250cm9sLmM6NjIzNTpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtNjIzNi1cdFx0cmV0dXJuIDA7XG4tLVxubW0vbWVtY29udHJvbC5jPTYyNjg9dm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNjI2OS17XG5tbS9tZW1jb250cm9sLmM6NjI3MDpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtNjI3MS1cdFx0cmV0dXJuO1xuLS1cbm1tL3Nocmlua2VyLmM9MjI2PXN0YXRpYyBpbnQgc2hyaW5rZXJfbWVtY2dfYWxsb2Moc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9zaHJpbmtlci5jLTIyOS1cbm1tL3Nocmlua2VyLmM6MjMwOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL3Nocmlua2VyLmMtMjMxLVx0XHRyZXR1cm4gLUVOT1NZUztcbi0tXG5tbS9zaHJpbmtlci5jPTYyND11bnNpZ25lZCBsb25nIHNocmlua19zbGFiKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vc2hyaW5rZXIuYy02MzYtXHQgKi9cbm1tL3Nocmlua2VyLmM6NjM3Olx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxubW0vc2hyaW5rZXIuYy02MzgtXHRcdHJldHVybiBzaHJpbmtfc2xhYl9tZW1jZyhnZnBfbWFzaywgbmlkLCBtZW1jZywgcHJpb3JpdHkpO1xuLS1cbm1tL3N3YXAuaD04NT1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3N3YXAuaC04OC1cdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSBcdTAwMjZcdTAwMjZcbm1tL3N3YXAuaDo4OTpcdCAgICAhbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbm1tL3N3YXAuaC05MC1cdFx0cmV0dXJuIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTQ0OT1zdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXG4tLVxubW0vc3dhcGZpbGUuYy00NzEtI2lmZGVmIENPTkZJR19NRU1DR1xubW0vc3dhcGZpbGUuYzo0NzI6XHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xubW0vc3dhcGZpbGUuYy00NzMtXHRcdFZNX1dBUk5fT05fT05DRShjaS1cdTAwM2VtZW1jZ190YWJsZSk7XG4tLVxubW0vdm1wcmVzc3VyZS5jPTEwNj12b2lkIHZtcHJlc3N1cmUoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCB0cmVlLFxuLS1cbm1tL3ZtcHJlc3N1cmUuYy0xMTAtXG5tbS92bXByZXNzdXJlLmM6MTExOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL3ZtcHJlc3N1cmUuYy0xMTItXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYz0zOTQ9dW5zaWduZWQgbG9uZyBscnV2ZWNfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTQwMC1cdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBscnV2ZWNfcGdkYXQobHJ1dmVjKSwgemlkLCB6b25lX2lkeCkge1xubW0vdm1zY2FuLmM6NDAxOlx0XHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL3Ztc2Nhbi5jLTQwMi1cdFx0XHRzaXplICYjNDM7PSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGxydXZlYywgbHJ1LCB6aWQpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI3NDk9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLS1cbm1tL3Ztc2Nhbi5jLTI3NjMtI2VuZGlmXG5tbS92bXNjYW4uYzoyNzY0Olx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xubW0vdm1zY2FuLmMtMjc2NS1cbi0tXG5tbS92bXNjYW4uYz0yOTA3PXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjkxNy0jZW5kaWZcbm1tL3Ztc2Nhbi5jOjI5MTg6XHRWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7XG5tbS92bXNjYW4uYy0yOTE5LVxuLS1cbm1tL3Ztc2Nhbi5jPTMwMTQ9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMzAyMi1cdC8qIGZvciBtbV91cGRhdGVfbmV4dF9vd25lcigpICovXG5tbS92bXNjYW4uYzozMDIzOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL3Ztc2Nhbi5jLTMwMjQtXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYz01MjM4PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTI2My1cbm1tL3Ztc2Nhbi5jOjUyNjQ6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vdm1zY2FuLmMtNTI2NS1cdFx0c2hyaW5rX29uZShcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYywgc2MpO1xuLS1cbm1tL3Ztc2Nhbi5jPTU3MzI9c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTU3NDEtXG5tbS92bXNjYW4uYzo1NzQyOlx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbm1tL3Ztc2Nhbi5jLTU3NDMtXHRcdG1lbWNnID0gbWVtX2Nncm91cF9nZXRfZnJvbV9pZChtZW1jZ19pZCk7XG4tLVxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTQ3Ni1cbm1tL3dvcmtpbmdzZXQuYzo0Nzc6XHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWV2aWN0aW9uX21lbWNnKVxubW0vd29ya2luZ3NldC5jLTQ3OC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3dvcmtpbmdzZXQuYz01OTc9dm9pZCB3b3JraW5nc2V0X2FjdGl2YXRpb24oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS93b3JraW5nc2V0LmMtNjAyLVx0ICovXG5tbS93b3JraW5nc2V0LmM6NjAzOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBmb2xpb19tZW1jZ19jaGFyZ2VkKGZvbGlvKSkge1xubW0vd29ya2luZ3NldC5jLTYwNC1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLS1cbm1tL3pzd2FwLmM9MTE3OT1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuLS1cbm1tL3pzd2FwLmMtMTIwNy1cdCAqL1xubW0venN3YXAuYzoxMjA4Olx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbm1tL3pzd2FwLmMtMTIwOS1cdFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChtZW1jZyk7XG4tLVxubW0venN3YXAuYz0xMzA0PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbm1tL3pzd2FwLmMtMTM2MS1cdFx0ICovXG5tbS96c3dhcC5jOjEzNjI6XHRcdGlmICghbWVtY2cgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbm1tL3pzd2FwLmMtMTM2My1cdFx0XHRpZiAoIWF0dGVtcHRzIFx1MDAyNlx1MDAyNiAmIzQzOyYjNDM7ZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW1tZWRpYXRlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYC4gVGhlIHZlcnkgbmFtZSBzdWdnZXN0cyBpdCBoYXMgdG8gZG8gd2l0aCBtZW1vcnkgY2dyb3VwcyBiZWluZyBkaXNhYmxlZC4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IGl0JiMzOTtzIGRlc2lnbmVkIHRvIGRldGVybWluZSBpZiBtZW1vcnkgcmVzb3VyY2UgY29udHJvbCB2aWEgY2dyb3VwcyBpcyBpbnRlbnRpb25hbGx5IHR1cm5lZCBvZmYuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGZpbmRpbmcgaXQgd2l0aGluIHRoZSBrZXJuZWwgaGVhZGVycywgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGV4cGxpY2l0IGRldGFpbHMgb2YgaXRzIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgdW5kZXJseWluZyBsb2dpYy4gT25jZSBJIGhhdmUgdGhlIGNvZGUsIEkgY2FuIGFjY3VyYXRlbHkgZXhwbGFpbiB3aGF0IGlzIGJlaW5nIGRpc2FibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MzA6XHRzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2Nncm91cF9pc19yb290KGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiA1MzE6XHR7XG4gNTMyOlx0XHRyZXR1cm4gb2JqY2ctXHUwMDNlaXNfcm9vdDtcbiA1MzM6XHR9XG4gNTM0Olx0XG4gNTM1Olx0c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfZGlzYWJsZWQodm9pZClcbiA1MzY6XHR7XG4gNTM3Olx0XHRyZXR1cm4gIWNncm91cF9zdWJzeXNfZW5hYmxlZChtZW1vcnlfY2dycF9zdWJzeXMpO1xuIDUzODpcdH1cbiA1Mzk6XHRcbiA1NDA6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuIDU0MTpcdFx0XHRcdFx0XHQgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIDU0MjpcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqbWluLFxuIDU0MzpcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqbG93LFxuIDU0NDpcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqdXNhZ2UpXG4gNTQ1Olx0e1xuIDU0NjpcdFx0Km1pbiA9ICpsb3cgPSAqdXNhZ2UgPSAwO1xuIDU0NzpcdFxuIDU0ODpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiA1NDk6XHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUzOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBNZW1vcnkgTWFuYWdlbWVudCBCdWcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYm9vdC10aW1lIHBhcmFtZXRlciBpbnRlcmFjdGlvbiBhbmQgSSYjMzk7bSBzZWVpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgaW5jb25zaXN0ZW5jeSBpbiBob3cgbWVtb3J5IGNncm91cHMgYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgd2hlbiBgY2dyb3VwX2Rpc2FibGU9bWVtb3J5YCBpcyBzcGVjaWZpZWQsIEkgKmV4cGVjdCogdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtIHRvIGJlIGNvbXBsZXRlbHkgZGVhY3RpdmF0ZWQuIGBjZ3JvdXBfc3Vic3lzX2VuYWJsZWQobWVtb3J5X2NncnBfc3Vic3lzKWAgY29ycmVjdGx5IHJlZmxlY3RzIHRoaXMsIGFuZCBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCB3aWxsIHJldHVybiB0cnVlLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBiaXQsIGFsbCBnb29kLgoKSG93ZXZlciwgdGhlIGxvZ2ljIGxhdGVyIG9uLCBwYXJ0aWN1bGFybHkgaW4gYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYCwgc2VlbXMgdG8gY2hlY2sgYGNncm91cF9tZW1vcnlfbm9rbWVtYCBpbnN0ZWFkLiBUaGlzIHZhbHVlIGlzIHRpZWQgdG8gdGhlIGBjZ3JvdXAubWVtb3J5PW5va21lbWAgYm9vdCBwYXJhbWV0ZXIuIEhlcmUmIzM5O3Mgd2hlcmUgdGhlIHByb2JsZW0gYXJpc2VzOiBldmVuIHdoZW4gYGNncm91cF9kaXNhYmxlPW1lbW9yeWAgaXMgc2V0LCBgY2dyb3VwX21lbW9yeV9ub2ttZW1gICptaWdodCogc3RpbGwgYmUgZmFsc2UhIFRoaXMgc3VidGxlIGRpZmZlcmVuY2UgbWVhbnMgdGhhdCBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIGNvdWxkIGV2YWx1YXRlIHRvIGZhbHNlLCBldmVuIHdoZW4gdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtIGlzIHN1cHBvc2VkIHRvIGJlIGRpc2FibGVkIGdsb2JhbGx5LgoKVGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZSBpZiBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHJldHVybnMgZmFsc2UsIHRoZSBgX19saXN0X2xydV9pbml0YCBmdW5jdGlvbiB3aWxsIGluY29ycmVjdGx5IHRyZWF0IHRoZSBgbWVtY2dfYXdhcmVgIGZsYWcgYXMgdHJ1ZS4gVGhpcywgaW4gdHVybiwgbGVhZHMgdG8gYSBjYWxsIHRvIGBtZW1jZ19pbml0X2xpc3RfbHJ1YCwgd2hpY2ggdGhlbiBhdHRlbXB0cyB0byBpbml0aWFsaXplIHBlci1tZW1jZyBMUlUgdGFibGVzLiBCdXQgKndoeSogYXJlIHdlIHRyeWluZyB0byBpbml0aWFsaXplIHBlci1tZW1jZyBzdHJ1Y3R1cmVzIGlmIHRoZSBlbnRpcmUgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXR5IGlzIHN1cHBvc2VkbHkgZGlzYWJsZWQ/IEl0JiMzOTtzIGEgY2xlYXIgdmlvbGF0aW9uIG9mIGV4cGVjdGF0aW9ucywgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiB1bmV4cGVjdGVkIGJlaGF2aW91ciwgbWVtb3J5IGxlYWtzLCBvciBldmVuIGNyYXNoZXMuCgpJJiMzOTttIG5vdyBnb2luZyB0byBkaXZlIGludG8gdGhlIGBtZW1jZ19pbml0X2xpc3RfbHJ1YCBmdW5jdGlvbiBpdHNlbGYsIGZvdW5kIGluIGBtbS9saXN0X2xydS5jYCwgdG8gcGlucG9pbnQgdGhlIGV4YWN0IG1lY2hhbmlzbSBieSB3aGljaCB0aGlzIGluY29ycmVjdCBpbml0aWFsaXphdGlvbiBvY2N1cnMgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBmYWxsb3V0IGNvdWxkIGJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0XHRcdGlmICghbWxydSkge1xuIDYwMTpcdFx0XHRcdG1scnUgPSBtZW1jZ19pbml0X2xpc3RfbHJ1X29uZShscnUsIGdmcCk7XG4gNjAyOlx0XHRcdFx0aWYgKCFtbHJ1KVxuIDYwMzpcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNjA0Olx0XHRcdH1cbiA2MDU6XHRcdFx0eGFzX3NldChcdTAwMjZ4YXMsIHBvcy1cdTAwM2VrbWVtY2dfaWQpO1xuIDYwNjpcdFx0XHRkbyB7XG4gNjA3Olx0XHRcdFx0eGFzX2xvY2tfaXJxc2F2ZShcdTAwMjZ4YXMsIGZsYWdzKTtcbiA2MDg6XHRcdFx0XHRpZiAoIXhhc19sb2FkKFx1MDAyNnhhcykgXHUwMDI2XHUwMDI2ICFjc3NfaXNfZHlpbmcoXHUwMDI2cG9zLVx1MDAzZWNzcykpIHtcbiA2MDk6XHRcdFx0XHRcdHhhc19zdG9yZShcdTAwMjZ4YXMsIG1scnUpO1xuIDYxMDpcdFx0XHRcdFx0aWYgKCF4YXNfZXJyb3IoXHUwMDI2eGFzKSlcbiA2MTE6XHRcdFx0XHRcdFx0bWxydSA9IE5VTEw7XG4gNjEyOlx0XHRcdFx0fVxuIDYxMzpcdFx0XHRcdHhhc191bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ4YXMsIGZsYWdzKTtcbiA2MTQ6XHRcdFx0fSB3aGlsZSAoeGFzX25vbWVtKFx1MDAyNnhhcywgZ2ZwKSk7XG4gNjE1Olx0XHR9IHdoaWxlIChwb3MgIT0gbWVtY2cgXHUwMDI2XHUwMDI2ICFjc3NfaXNfZHlpbmcoXHUwMDI2cG9zLVx1MDAzZWNzcykpO1xuIDYxNjpcdFxuIDYxNzpcdFx0aWYgKHVubGlrZWx5KG1scnUpKVxuIDYxODpcdFx0XHRrZnJlZShtbHJ1KTtcbiA2MTk6XHRcbiA2MjA6XHRcdHJldHVybiB4YXNfZXJyb3IoXHUwMDI2eGFzKTtcbiA2MjE6XHR9XG4gNjIyOlx0XG4gNjIzOlx0aW50IG1lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4gNjI0Olx0XHRcdFx0IGdmcF90IGdmcClcbiA2MjU6XHR7XG4gNjI2Olx0XHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgfHwgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKG1lbWNnLCBscnUpKVxuIDYyNzpcdFx0XHRyZXR1cm4gMDtcbiA2Mjg6XHRcdHJldHVybiBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBscnUsIGdmcCk7XG4gNjI5Olx0fVxuIDYzMDpcdFxuIDYzMTpcdGludCBmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiA2MzI6XHRcdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwKVxuIDYzMzpcdHtcbiA2MzQ6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiA2MzU6XHRcdGludCByZXM7XG4gNjM2Olx0XG4gNjM3Olx0XHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpXG4gNjM4Olx0XHRcdHJldHVybiAwO1xuIDYzOTpcdFxuIDY0MDpcdFx0LyogRmFzdCBwYXRoIHdoZW4gbGlzdF9scnUgaGVhZHMgYWxyZWFkeSBleGlzdCAqL1xuIDY0MTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDY0MjpcdFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4gNjQzOlx0XHRyZXMgPSBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQobWVtY2csIGxydSk7XG4gNjQ0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA2NDU6XHRcdGlmIChsaWtlbHkocmVzKSlcbiA2NDY6XHRcdFx0cmV0dXJuIDA7XG4gNjQ3Olx0XG4gNjQ4Olx0XHQvKiBBbGxvY2F0aW9uIG1heSBibG9jaywgcGluIHRoZSBtZW1jZyAqL1xuIDY0OTpcdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiA2NTA6XHRcdHJlcyA9IF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcbiA2NTE6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiA2NTI6XHRcdHJldHVybiByZXM7XG4gNjUzOlx0fVxuIDY1NDpcdCNlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDg2CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogODIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIElzIHRoaXMgY2hhbmdlLCBmaXhpbmcgYF9fbGlzdF9scnVfaW5pdGAgd2hlbiBgY2dyb3VwX2Rpc2FibGU9bWVtb3J5YCBpcyBzZXQsIHdvcnRoIGZ1enppbmc/IEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKm5hdHVyZSogb2YgdGhlIGNoYW5nZS4gSXMgdGhpcyBqdXN0IGEgYm9vdC10aW1lIHRoaW5nLCBvciBpcyBgX19saXN0X2xydV9pbml0YCBjYWxsZWQgZHVyaW5nIHJ1bnRpbWU/IEFoLCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnRpbmcsIHdvcmtpbmcgc2V0IGluaXRpYWxpemF0aW9uLCBhbmQgc2hyaW5rZXIgaW5pdGlhbGl6YXRpb24gLSBzbywgcG90ZW50aWFsbHkgKnJ1bnRpbWUqLiBBbmQgaWYgYGNncm91cF9kaXNhYmxlPW1lbW9yeWAgaXMgc2V0LCBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCB3aWxsIGJlIHRydWUgZm9yIHRoZSBzeXN0ZW0mIzM5O3MgKmVudGlyZSogbGlmZXRpbWUuCgpOb3csIGRvIEkgbmVlZCB0byBmdXp6IGl0LCBvciBpcyB0aGlzIGEgc2ltcGxlIGJ1ZyBmaXg/IExldCYjMzk7cyBjaGVjayB0aGUgY3JpdGVyaWEuIE9rYXksIGl0ICppc24mIzM5O3QqIGEgRG9jdW1lbnRhdGlvbi9LY29uZmlnIGNoYW5nZSwgZGVjb3JhdGl2ZSBsb2dnaW5nLCBvciBjaGFuZ2VzIHRvIG5vbi1mdW5jdGlvbmFsIGNvbnN0YW50cy4gSXQgKmRvZXMqIHRvdWNoIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgbW0vbGlzdF9scnUuY2AuIFRoaXMgKmlzKiByZWFjaGFibGUgaW4gUUVNVSwgc28gaXQgcGFzc2VzIHRoYXQgY2hlY2suCgpTbywgKmRvZXMqIGl0IG1ha2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nPyBOb3cgaXQmIzM5O3MgYWJvdXQgY2hlY2tpbmcgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIFdoYXQgc3ltYm9scyBhcmUgaW52b2x2ZWQgaGVyZT8gYF9fbGlzdF9scnVfaW5pdGAsIGBtZW1jZ19saXN0X2xydV9hbGxvY2AsIGFuZCBgZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2NgIHNlZW0gcmVsZXZhbnQuIEkgbmVlZCB0byBmb2N1cyBvbiAqc3BlY2lmaWMqIGtlcm5lbCBmdW5jdGlvbnMsIHByZWZlcmFibHkgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF04oCZcyB0aGUga2V5LgoKQW5kIHdoYXQgYWJvdXQgYEVuYWJsZUNvbmZpZ3NgPyBUaW1lIHRvIGNoZWNrIGBtbS9LY29uZmlnYCBvciBgaW5pdC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBDT05GSUcgb3B0aW9ucyBpbnZvbHZlZCwgZXNwZWNpYWxseSBhcm91bmQgYENPTkZJR19NRU1DR2AuIEdvdHRhIGJlIHN1cmUgdG8gaW5jbHVkZSBhbnkgbmVlZGVkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncy4gQWxyaWdodCwgdGltZSB0byBnbyBkaWdnaW5nIGluIHRoZSBLY29uZmlnIGZpbGVzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA4Ni1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwMC1cbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTExMDItXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDctXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTA5LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTU1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgZm91bmRhdGlvbmFsIGBpbml0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTA4NS4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQg4oCTIEkmIzM5O20gYmV0dGluZyB0aGF0JiMzOTtzIHdoZXJlIHNvbWUgb2YgdGhlIGNvcmUgZGVmYXVsdHMgb3IgcmVsYXRpb25zaGlwcyBmb3IgdGhpcyBmZWF0dXJlIGFyZSBsaWtlbHkgZGVmaW5lZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucywgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcywgYW5kIGRlZmluaXRlbHkgYW55IGBzZWxlY3RgIG9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB0aGUgYmVoYXZpb3IgSSYjMzk7bSBzZWVpbmcuIFRoaXMgaXMgcHJvYmFibHkgYSBnb29kIHNwb3QgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IGltbWVkaWF0ZWx5LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIHByZXR0eSB3ZWxsLXN0cnVjdHVyZWQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9uLCBwb3NzaWJseSB1c2luZyBuZXN0ZWQgYGlmYCBzdGF0ZW1lbnRzIG9yIHNvbWUgbW9yZSBjb21wbGV4IGxvZ2ljLiBUaW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODA6XHRcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXG4xMDgxOlx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDgyOlx0XG4xMDgzOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwODQ6XHRcbjEwODU6XHRjb25maWcgTUVNQ0dcbjEwODY6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODc6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODg6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDg5Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDkwOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwOTE6XHRcdGhlbHBcbjEwOTI6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDk1Olx0XHRib29sXG4xMDk2Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDk3Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDk4Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4xMTAwOlx0XG4xMTAxOlx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4xMTAyOlx0XHRib29sXG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTU1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgQ09ORklHX01FTUNHYCBpcyBuZXN0ZWQgd2l0aGluIHRoZSBgQ0dST1VQU2AgY29uZGl0aW9uYWwuIFRoYXQgZmVlbHMgcmlnaHQsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiBUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byBjb25zdWx0IHRoZSBkZWZpbml0aXZlIHNvdXJjZTogYGluaXQvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgbGluZXMgMTAwMCB0aHJvdWdoIDEwODUgc2hvdWxkIGhvbGQgdGhlIGtleSBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgdGhlcmUgdG8gc2VlIGlmIEkmIzM5O20gY29ycmVjdCBhbmQgdW5kZXJzdGFuZCB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA0MDpcdFx0ICB0aGUgc2FtZSBwcm9jZXNzIG9udG8gYSBzaW5nbGUgTGFzdCBMZXZlbCBDYWNoZSAoTExDKSBkb21haW4gd2hlblxuMTA0MTpcdFx0ICBwb3NzaWJsZS4gVGhpcyBpbXByb3ZlcyBjYWNoZSBsb2NhbGl0eSBieSBrZWVwaW5nIHRhc2tzIHRoYXQgc2hhcmVcbjEwNDI6XHRcdCAgcmVzb3VyY2VzIHdpdGhpbiB0aGUgc2FtZSBjYWNoZSBkb21haW4sIHJlZHVjaW5nIGNhY2hlIG1pc3NlcyBhbmRcbjEwNDM6XHRcdCAgbG93ZXJpbmcgZGF0YSBhY2Nlc3MgbGF0ZW5jeS5cbjEwNDQ6XHRcbjEwNDU6XHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG4xMDQ2Olx0XHRib29sIFwmIzM0O0F1dG9tYXRpY2FsbHkgZW5hYmxlIE5VTUEgYXdhcmUgbWVtb3J5L3Rhc2sgcGxhY2VtZW50XCYjMzQ7XG4xMDQ3Olx0XHRkZWZhdWx0IHlcbjEwNDg6XHRcdGRlcGVuZHMgb24gTlVNQV9CQUxBTkNJTkdcbjEwNDk6XHRcdGhlbHBcbjEwNTA6XHRcdCAgSWYgc2V0LCBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgd2lsbCBiZSBlbmFibGVkIGlmIHJ1bm5pbmcgb24gYSBOVU1BXG4xMDUxOlx0XHQgIG1hY2hpbmUuXG4xMDUyOlx0XG4xMDUzOlx0Y29uZmlnIFNMQUJfT0JKX0VYVFxuMTA1NDpcdFx0Ym9vbFxuMTA1NTpcdFxuMTA1NjpcdG1lbnVjb25maWcgQ0dST1VQU1xuMTA1NzpcdFx0Ym9vbCBcJiMzNDtDb250cm9sIEdyb3VwIHN1cHBvcnRcJiMzNDtcbjEwNTg6XHRcdHNlbGVjdCBLRVJORlNcbjEwNTk6XHRcdGhlbHBcbjEwNjA6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBncm91cGluZyBzZXRzIG9mIHByb2Nlc3NlcyB0b2dldGhlciwgZm9yXG4xMDYxOlx0XHQgIHVzZSB3aXRoIHByb2Nlc3MgY29udHJvbCBzdWJzeXN0ZW1zIHN1Y2ggYXMgQ3B1c2V0cywgQ0ZTLCBtZW1vcnlcbjEwNjI6XHRcdCAgY29udHJvbHMgb3IgZGV2aWNlIGlzb2xhdGlvbi5cbjEwNjM6XHRcdCAgU2VlXG4xMDY0Olx0XHRcdC0gRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy5yc3RcdChDRlMpXG4xMDY1Olx0XHRcdC0gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvIChmZWF0dXJlcyBmb3IgZ3JvdXBpbmcsIGlzb2xhdGlvblxuMTA2NjpcdFx0XHRcdFx0XHQgIGFuZCByZXNvdXJjZSBjb250cm9sKVxuMTA2NzpcdFxuMTA2ODpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDY5Olx0XG4xMDcwOlx0aWYgQ0dST1VQU1xuMTA3MTpcdFxuMTA3MjpcdGNvbmZpZyBQQUdFX0NPVU5URVJcbjEwNzM6XHRcdGJvb2xcbjEwNzQ6XHRcbjEwNzU6XHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbjEwNzY6XHRcdGJvb2wgXCYjMzQ7RmF2b3IgZHluYW1pYyBtb2RpZmljYXRpb24gbGF0ZW5jeSByZWR1Y3Rpb24gYnkgZGVmYXVsdFwmIzM0O1xuMTA3NzpcdFx0aGVscFxuMTA3ODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBcJiMzNDtmYXZvcmR5bm1vZHNcJiMzNDsgbW91bnQgb3B0aW9uIGJ5IGRlZmF1bHRcbjEwNzk6XHRcdCAgd2hpY2ggcmVkdWNlcyB0aGUgbGF0ZW5jaWVzIG9mIGR5bmFtaWMgY2dyb3VwIG1vZGlmaWNhdGlvbnMgc3VjaFxuMTA4MDpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwODE6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwODI6XHRcbjEwODM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA4NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk2MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGgga2VybmVsIGRldmVsb3BtZW50OgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCBDb25zdHJ1Y3Rpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYENHUk9VUFNgIGFuZCBgTUVNQ0dgLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGVycml0b3J5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc29tZSBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBvYmplY3QgZmlsZXMgYXJlIGNvbXBpbGVkLiBUbyBzdGFydCwgdGhlIGBtbS9NYWtlZmlsZWAgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgaG93IGBsaXN0X2xydS5vYCBpcyBidWlsdC4gSXQmIzM5O3MgdGltZSB0byBpbnZlc3RpZ2F0ZSB0aGUgYnVpbGQgcHJvY2VzcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlzdF9scnVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuLS1cbm1tL01ha2VmaWxlLTU2LVx0XHRcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXG5tbS9NYWtlZmlsZTo1NzpcdFx0XHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcbm1tL01ha2VmaWxlLTU4LVx0XHRcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI3MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGxpc3RfbHJ1YCBPYmplY3QgRmlsZSBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gYGxpc3RfbHJ1Lm9gIGlzIGRlZmluaXRlbHkgZGVjbGFyZWQgYXMgYG9iai15YCwgbWVhbmluZyBpdCYjMzk7cyBzbGF0ZWQgdG8gYmUgYnVpbHQgaW50byB0aGUga2VybmVsIGltYWdlLiBUaGF0JiMzOTtzIGEga2V5IGZpcnN0IHBvaW50IHRvIG5vdGUuIFRoZW4sIEkgc2VlIHRoYXQgdGhlIGBfX2xpc3RfbHJ1X2luaXRgIGZ1bmN0aW9uIGNvbnRhaW5zIGFuIGAjaWZkZWYgQ09ORklHX01FTUNHYCBibG9jay4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBgTUVNQ0dgIGFzIGEgZGVwZW5kZW5jeSwgYW5kIHdlIGtub3cgYE1FTUNHYCBpdHNlbGYgcmVsaWVzIG9uIGBDR1JPVVBTYC4gVGhlcmVmb3JlLCBpZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9uLCB0aGUgY29kZSB3aXRoaW4gdGhhdCBzcGVjaWZpYyBgI2lmZGVmYCBibG9jayB3aWxsIGJlIGNvbXBpbGVkLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXNlLWNhc2VzIHJlbGF0ZWQgdG8gYGxpc3RfbHJ1YCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGNhbGwgYF9fbGlzdF9scnVfaW5pdGAuIFRoYXQgd2lsbCBpbW1lZGlhdGVseSBnaXZlIG1lIGEgc2Vuc2Ugb2YgdGhlIGluaXRpYWxpemF0aW9uIHBhdGguIEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBtbS9saXN0X2xydS5jYCB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQgYW5kIGhvdyB0aGUgbW9kdWxlIGludGVyYWN0cyB3aXRoIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiBob3cgdGhpcyBtb2R1bGUgZnVuY3Rpb25zIGFuZCB3aGVyZSBpdCBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2xpc3RfbHJ1X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzPTY5PSAgICBwdWIoY3JhdGUpIGZuIHJlZ2lzdGVyKFx1MDAyNiYjMzk7c3RhdGljIHNlbGYsIG5hbWU6IFx1MDAyNkNTdHIpIC1cdTAwM2UgUmVzdWx0XHUwMDNjKClcdTAwM2Uge1xuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5ycy03Ni0gICAgICAgIC8vIFNBRkVUWTogVGhlIGZpZWxkIGlzIG5vdCB5ZXQgdXNlZCwgc28gd2UgY2FuIGluaXRpYWxpemUgaXQuXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnM6Nzc6ICAgICAgICBsZXQgcmV0ID0gdW5zYWZlIHsgYmluZGluZ3M6Ol9fbGlzdF9scnVfaW5pdChzZWxmLmxpc3RfbHJ1LmdldCgpLCBmYWxzZSwgcHRyOjpudWxsX211dCgpKSB9O1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzLTc4LSAgICAgICAgaWYgcmV0ICE9IDAge1xuLS1cbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaD02ND12b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpO1xuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjY1OmludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNjYtXHRcdCAgICBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNjgtI2RlZmluZSBsaXN0X2xydV9pbml0KGxydSlcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg6Njk6XHRfX2xpc3RfbHJ1X2luaXQoKGxydSksIGZhbHNlLCBOVUxMKVxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTcwLSNkZWZpbmUgbGlzdF9scnVfaW5pdF9tZW1jZyhscnUsIHNocmlua2VyKVx0XHRcXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjcxOlx0X19saXN0X2xydV9pbml0KChscnUpLCB0cnVlLCBzaHJpbmtlcilcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC03Mi1cbi0tXG5tbS9saXN0X2xydS5jPTY1OT1zdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuLS1cbm1tL2xpc3RfbHJ1LmMtNjYzLVxubW0vbGlzdF9scnUuYzo2NjQ6aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbm1tL2xpc3RfbHJ1LmMtNjY1LXtcbi0tXG5tbS9saXN0X2xydS5jLTY4OS19XG5tbS9saXN0X2xydS5jOjY5MDpFWFBPUlRfU1lNQk9MX0dQTChfX2xpc3RfbHJ1X2luaXQpO1xubW0vbGlzdF9scnUuYy02OTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjUyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMaXN0IExSVSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGxpc3RfbHJ1YCBpbml0aWFsaXphdGlvbiBjb2RlLiBJdCBsb29rcyBsaWtlIGBfX2xpc3RfbHJ1X2luaXRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLCBjYWxsZWQgdGhyb3VnaCBgbGlzdF9scnVfaW5pdGAgYW5kIGBsaXN0X2xydV9pbml0X21lbWNnYC4gVGhlIGludGVyZXN0aW5nIHBvaW50IGhlcmUgaXMgdGhlIGBsaXN0X2xydV9pbml0X21lbWNnYCB2YXJpYW50LCBzbyBsZXQmIzM5O3MgZGlnIGludG8gaXRzIHVzYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggYGxpc3RfbHJ1X2luaXRfbWVtY2dgIGdldHMgY2FsbGVkLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgaW50ZWdyYXRpb24gd29ya3MgaW4gdGhpcyBgbGlzdF9scnVgIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaXN0X2xydV9pbml0X21lbWNnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25mcy9uZnM0MnhhdHRyLmM9OTgwPXN0YXRpYyBpbnQgX19pbml0IG5mczRfeGF0dHJfc2hyaW5rZXJfaW5pdChzdHJ1Y3Qgc2hyaW5rZXIgKipzaHJpbmtlcixcbi0tXG5mcy9uZnMvbmZzNDJ4YXR0ci5jLTk5MC1cbmZzL25mcy9uZnM0MnhhdHRyLmM6OTkxOlx0cmV0ID0gbGlzdF9scnVfaW5pdF9tZW1jZyhscnUsICpzaHJpbmtlcik7XG5mcy9uZnMvbmZzNDJ4YXR0ci5jLTk5Mi1cdGlmIChyZXQpIHtcbi0tXG5mcy9zdXBlci5jPTMyMz1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLFxuLS1cbmZzL3N1cGVyLmMtMzk2LVxuZnMvc3VwZXIuYzozOTc6XHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcdTAwMjZzLVx1MDAzZXNfZGVudHJ5X2xydSwgcy1cdTAwM2VzX3NocmluaykpXG5mcy9zdXBlci5jLTM5OC1cdFx0Z290byBmYWlsO1xuZnMvc3VwZXIuYzozOTk6XHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcdTAwMjZzLVx1MDAzZXNfaW5vZGVfbHJ1LCBzLVx1MDAzZXNfc2hyaW5rKSlcbmZzL3N1cGVyLmMtNDAwLVx0XHRnb3RvIGZhaWw7XG4tLVxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oPTY1PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsXG4tLVxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTY5LVx0X19saXN0X2xydV9pbml0KChscnUpLCBmYWxzZSwgTlVMTClcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDo3MDojZGVmaW5lIGxpc3RfbHJ1X2luaXRfbWVtY2cobHJ1LCBzaHJpbmtlcilcdFx0XFxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC03MS1cdF9fbGlzdF9scnVfaW5pdCgobHJ1KSwgdHJ1ZSwgc2hyaW5rZXIpXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNzItXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg6NzM6c3RhdGljIGlubGluZSBpbnQgbGlzdF9scnVfaW5pdF9tZW1jZ19rZXkoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNzQtXHRcdFx0XHRcdCAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXG4tLVxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTc4LSNlbmRpZlxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjc5Olx0cmV0dXJuIGxpc3RfbHJ1X2luaXRfbWVtY2cobHJ1LCBzaHJpbmtlcik7XG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtODAtfVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTA3MS1cbm1tL2h1Z2VfbWVtb3J5LmM6MTA3MjpcdGlmIChsaXN0X2xydV9pbml0X21lbWNnX2tleShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXG5tbS9odWdlX21lbW9yeS5jLTEwNzMtXHRcdFx0XHQgICAgZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIsXG4tLVxubW0vc2htZW0uYz01MTU3PXN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxubW0vc2htZW0uYy01MjM3LSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3NobWVtLmM6NTIzODpcdGlmIChsaXN0X2xydV9pbml0X21lbWNnKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBzYi1cdTAwM2VzX3NocmluaykpXG5tbS9zaG1lbS5jLTUyMzktXHRcdGdvdG8gZmFpbGVkO1xuLS1cbm1tL3dvcmtpbmdzZXQuYz03OTM9c3RhdGljIGludCBfX2luaXQgd29ya2luZ3NldF9pbml0KHZvaWQpXG4tLVxubW0vd29ya2luZ3NldC5jLTgyNC1cbm1tL3dvcmtpbmdzZXQuYzo4MjU6XHRyZXQgPSBsaXN0X2xydV9pbml0X21lbWNnX2tleShcdTAwMjZzaGFkb3dfbm9kZXMsIHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLFxubW0vd29ya2luZ3NldC5jLTgyNi1cdFx0XHRcdCAgICAgIFx1MDAyNnNoYWRvd19ub2Rlc19rZXkpO1xuLS1cbm1tL3pzd2FwLmM9MTc1OD1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4tLVxubW0venN3YXAuYy0xNzgzLVx0XHRnb3RvIHNocmlua2VyX2ZhaWw7XG5tbS96c3dhcC5jOjE3ODQ6XHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcdTAwMjZ6c3dhcF9saXN0X2xydSwgenN3YXBfc2hyaW5rZXIpKVxubW0venN3YXAuYy0xNzg1LVx0XHRnb3RvIGxydV9mYWlsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUwOQoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiAyMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRmluYWwgVGhvdWdodHMgb24gYF9fbGlzdF9scnVfaW5pdGAgYW5kIGl0cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYF9fbGlzdF9scnVfaW5pdGAgZnVuY3Rpb24uIEl0JiMzOTtzIGNhbGxlZCBpbiBhIGZldyBrZXkgcGxhY2VzLCBsaWtlIHdoZW4gZmlsZXN5c3RlbXMgYXJlIG1vdW50ZWQgd2l0aCBgYWxsb2Nfc3VwZXJgIGFuZCBkdXJpbmcgenN3YXAgc2V0dXAuIFRoZSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIHRoYXQgc3ltYm9sLgoKV2UmIzM5O3ZlIGdvdCBgV29ydGhGdXp6aW5nYCBzZXQgdG8gdHJ1ZSwgd2hpY2ggSSBhZ3JlZSB3aXRoLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIHRoZSBiYXNlcyBjb3ZlcmVkIGJlZm9yZSB3ZSBzdWJtaXQgdGhpcy4KClRoZSBwYXRjaCYjMzk7cyBsb2dpYyBpcyBzb3VuZC4gSXQgZXNzZW50aWFsbHkgZW5zdXJlcyB0aGF0IGlmIG1lbW9yeSBjZ3JvdXBzIGFyZSBkaXNhYmxlZCB2aWEgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAsIHRoZSBjb2RlIGF2b2lkcyBpbml0aWFsaXppbmcgcGVyLW1lbWNnIExSVSBsaXN0cyB3aXRoaW4gYF9fbGlzdF9scnVfaW5pdGAsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yLiBUaGF04oCZcyBhIGdvb2QgbW9kaWZpY2F0aW9uIHRvIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyB0b3VjaGluZyBsaXN0X2xydXMgaXMgYWx3YXlzIGludGVyZXN0aW5nLCBlc3BlY2lhbGx5IGR1cmluZyBpbml0aWFsaXphdGlvbiBvZiBmaWxlc3lzdGVtcywgYW5kIHRoZSBsb2dpYyBpcyBzb3VuZC4KClRoZSBgRm9jdXNTeW1ib2xzYCBhcmUsIGFwcHJvcHJpYXRlbHksIGBbJiMzNDtfX2xpc3RfbHJ1X2luaXQmIzM0O11gLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBzcG90IG9uLCBpbmNsdWRpbmcgYm90aCBgTUVNQ0dgIGFuZCBgQ0dST1VQU2AuIEnigJltIGNvbmZpZGVudCB3ZSYjMzk7dmUgZ290IGEgc29saWQgcmF0aW9uYWxlLiBXZSYjMzk7cmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2xpc3RfbHJ1X2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBfX2xpc3RfbHJ1X2luaXQoKSB0byBlbnN1cmUgbWVtY2dfYXdhcmUgaXMgc2V0IHRvIGZhbHNlIHdoZW4gbWVtX2Nncm91cF9kaXNhYmxlZCgpIGlzIHRydWUsIHByZXZlbnRpbmcgaW5hcHByb3ByaWF0ZSBpbml0aWFsaXphdGlvbiBvZiBwZXItbWVtY2cgbGlzdCBMUlVzIHdoZW4gbWVtb3J5IGNncm91cHMgYXJlIGRpc2FibGVkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvZGUgaW4ga2VybmVsIGxpc3RfbHJ1IGluaXRpYWxpemF0aW9uIChlLmcuLCBkdXJpbmcgZmlsZXN5c3RlbSBtb3VudCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2xpc3RfbHJ1X2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBfX2xpc3RfbHJ1X2luaXQoKSB0byBlbnN1cmUgbWVtY2dfYXdhcmUgaXMgc2V0IHRvIGZhbHNlIHdoZW4gbWVtX2Nncm91cF9kaXNhYmxlZCgpIGlzIHRydWUsIHByZXZlbnRpbmcgaW5hcHByb3ByaWF0ZSBpbml0aWFsaXphdGlvbiBvZiBwZXItbWVtY2cgbGlzdCBMUlVzIHdoZW4gbWVtb3J5IGNncm91cHMgYXJlIGRpc2FibGVkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvZGUgaW4ga2VybmVsIGxpc3RfbHJ1IGluaXRpYWxpemF0aW9uIChlLmcuLCBkdXJpbmcgZmlsZXN5c3RlbSBtb3VudCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGFsb25nc2lkZSBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHNvIHRoYXQgYG1lbWNnX2F3YXJlYCBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQgYXQgYm9vdC4gVGhpcyBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgY29uZmlndXJhdGlvbiBjaGVjayBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBzdHJ1Y3QgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IG9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTYyZDkyNmQ4NmJiMmU2NmQ0YTgwODYwN2EwNjBkNDI2YWYwYjU0ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDQ6NDY6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuYwppbmRleCAzNjY2MmQwMmZmOTYzLi5hNDUyMmNhOTNlYmNiIDEwMDY0NAotLS0gYS9tbS9saXN0X2xydS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2xpc3RfbHJ1LmMKQEAgLTY3MSw3ICYjNDM7NjcxLDcgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHIKIAllbHNlCiAJCWxydS0mZ3Q7c2hyaW5rZXJfaWQgPSAtMTsKIAotCWlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkKIAkJbWVtY2dfYXdhcmUgPSBmYWxzZTsKICNlbmRpZgogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN1YnRsZSBDaGFuZ2UgaW4gYGxpc3RfbHJ1LmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vbGlzdF9scnUuY2AuIEl0JiMzOTtzIGEgc21hbGwgY2hhbmdlLCBidXQgcG90ZW50aWFsbHkgaW1wb3J0YW50LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb3JlIG9mIGl0IGlzIGFyb3VuZCBsaW5lIDY3MSwgd2hlcmUgaXQmIzM5O3MgY2hlY2tpbmcgd2hldGhlciBvciBub3QgdGhlIG1lbW9yeSBjZ3JvdXAgc3R1ZmYgaXMgZGlzYWJsZWQuIFByZXZpb3VzbHksIGl0IHdhcyBvbmx5IGNoZWNraW5nIGBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKWAuIE5vdywgaXQmIzM5O3MgY2hlY2tpbmcgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKWAuCgpBaCwgSSBzZWUuIFRoZXkmIzM5O3JlIGJyb2FkZW5pbmcgdGhlIGNvbmRpdGlvbiBmb3IgZGlzYWJsaW5nIG1lbW9yeSBjZ3JvdXAgYXdhcmVuZXNzIHdpdGhpbiB0aGUgYGxpc3RfbHJ1YCBjb2RlLiAgT3JpZ2luYWxseSwgaXQgb25seSBhY2NvdW50ZWQgZm9yIHRoZSBrZXJuZWwgbWVtb3J5IGNncm91cCBiZWluZyBkaXNhYmxlZC4gTm93LCBpdCYjMzk7bGwgYWxzbyBkaXNhYmxlIGF3YXJlbmVzcyBpZiB0aGUgZW50aXJlIG1lbW9yeSBjZ3JvdXAgZnVuY3Rpb25hbGl0eSBpcyBkaXNhYmxlZC4gVGhpcyBpcyBhIGdvb2QgbW92ZTsgdGhlIGNvZGUgc2hvdWxkIGFsaWduIHdpdGggdGhlIGdsb2JhbCBzZXR0aW5nLiBUaGlzIHNlZW1zIGxpa2UgYSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZSwgbWFraW5nIGl0IGxlc3MgcHJvbmUgdG8gY29ybmVyIGNhc2VzIG9yIG1pc2NvbmZpZ3VyYXRpb25zIHdoZXJlIHBhcnQgb2YgdGhlIG1lbWNnIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBidXQgdGhlIGtlcm5lbCBtZW1vcnkgcGFydCBpc24mIzM5O3QuIEl0IHdpbGwgbWFrZSB0aGUgY29kZSBtb3JlIHJvYnVzdCBhZ2FpbnN0IGluY29ycmVjdCBjb25maWd1cmF0aW9ucy4gTmljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NTA6XHRcdHJlcyA9IF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcbiA2NTE6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiA2NTI6XHRcdHJldHVybiByZXM7XG4gNjUzOlx0fVxuIDY1NDpcdCNlbHNlXG4gNjU1Olx0c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXG4gNjU2Olx0e1xuIDY1NzpcdH1cbiA2NTg6XHRcbiA2NTk6XHRzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuIDY2MDpcdHtcbiA2NjE6XHR9XG4gNjYyOlx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIDY2MzpcdFxuIDY2NDpcdGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4gNjY1Olx0e1xuIDY2NjpcdFx0aW50IGk7XG4gNjY3Olx0XG4gNjY4Olx0I2lmZGVmIENPTkZJR19NRU1DR1xuIDY2OTpcdFx0aWYgKHNocmlua2VyKVxuIDY3MDpcdFx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cdTAwM2VpZDtcbiA2NzE6XHRcdGVsc2VcbiA2NzI6XHRcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gLTE7XG4gNjczOlx0XG4gNjc0Olx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuIDY3NTpcdFx0XHRtZW1jZ19hd2FyZSA9IGZhbHNlO1xuIDY3NjpcdCNlbmRpZlxuIDY3NzpcdFxuIDY3ODpcdFx0bHJ1LVx1MDAzZW5vZGUgPSBremFsbG9jX29ianMoKmxydS1cdTAwM2Vub2RlLCBucl9ub2RlX2lkcyk7XG4gNjc5Olx0XHRpZiAoIWxydS1cdTAwM2Vub2RlKVxuIDY4MDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA2ODE6XHRcbiA2ODI6XHRcdGZvcl9lYWNoX25vZGUoaSlcbiA2ODM6XHRcdFx0aW5pdF9vbmVfbHJ1KGxydSwgXHUwMDI2bHJ1LVx1MDAzZW5vZGVbaV0ubHJ1KTtcbiA2ODQ6XHRcbiA2ODU6XHRcdG1lbWNnX2luaXRfbGlzdF9scnUobHJ1LCBtZW1jZ19hd2FyZSk7XG4gNjg2Olx0XHRsaXN0X2xydV9yZWdpc3RlcihscnUpO1xuIDY4NzpcdFxuIDY4ODpcdFx0cmV0dXJuIDA7XG4gNjg5Olx0fVxuIDY5MDpcdEVYUE9SVF9TWU1CT0xfR1BMKF9fbGlzdF9scnVfaW5pdCk7XG4gNjkxOlx0XG4gNjkyOlx0dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuIDY5MzpcdHtcbiA2OTQ6XHRcdC8qIEFscmVhZHkgZGVzdHJveWVkIG9yIG5vdCB5ZXQgaW5pdGlhbGl6ZWQ/ICovXG4gNjk1Olx0XHRpZiAoIWxydS1cdTAwM2Vub2RlKVxuIDY5NjpcdFx0XHRyZXR1cm47XG4gNjk3Olx0XG4gNjk4Olx0XHRsaXN0X2xydV91bnJlZ2lzdGVyKGxydSk7XG4gNjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMYXRlc3QgUGF0Y2ggZm9yIExpc3QgTFJVIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCB0aGUgY2hhbmdlIGluIGBfX2xpc3RfbHJ1X2luaXQoKWAuIFByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyBjaGVja2luZyBpZiBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHdhcyB0cnVlIHRvIHNldCBgbWVtY2dfYXdhcmVgIHRvIGZhbHNlLiBOb3csIHRoZSBsb2dpYyBoYXMgYmVlbiBleHBhbmRlZDsgaXQgY2hlY2tzIGlmICplaXRoZXIqIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgICpvciogYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYCBpcyB0cnVlIGJlZm9yZSBkaXNhYmxpbmcgYG1lbWNnX2F3YXJlYC4gVGhhdCYjMzk7cyBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgZGlzdGluY3Rpb24sIG9wZW5pbmcgdXAgdGhlIHBvc3NpYmlsaXR5IG9mIGRpc2FibGluZyBtZW1vcnkgY2dyb3VwIGF3YXJlbmVzcyB1bmRlciBtb3JlIGNpcmN1bXN0YW5jZXMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9zZSBuZXcgY29uZGl0aW9ucyBiZXR0ZXIuCgpOZXh0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGhpZ2hlci1sZXZlbCBjb2RlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgbWVtY2dfaW5pdF9saXN0X2xydWAgbmV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSByZWFsIGNoYW5nZSBvZiBiZWhhdmlvciwgb3IgaWYgdGhpcyBpcyBqdXN0IGEgcmVmYWN0b3JpbmcgdGhhdCBtYWtlcyB0aGUgY29kZSBjbGVhbmVyLiBQZXJoYXBzIHRoaXMgaGVscHMgdG8gbWFuYWdlIGRpZmZlcmVudCBjZ3JvdXAgY29uZmlndXJhdGlvbnMsIG9yIGl0IHNpbXBseSBjb25zb2xpZGF0ZXMgY2hlY2tzLiBUaGUgbmV3IGNoZWNrIG1heSBoYXZlIGNvbnNlcXVlbmNlcyBvbiB0aGUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cywgc28gSSBuZWVkIHRvIGV4cGxvcmUgaXRzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1OTA6XHRcdFx0ICogS2VlcCBmaW5kaW5nIHRoZSBmYXJlc3QgcGFyZW50IHRoYXQgd2FzbiYjMzk7dCBwb3B1bGF0ZWRcbiA1OTE6XHRcdFx0ICogdW50aWwgZm91bmQgbWVtY2cgaXRzZWxmLlxuIDU5MjpcdFx0XHQgKi9cbiA1OTM6XHRcdFx0cG9zID0gbWVtY2c7XG4gNTk0Olx0XHRcdHBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKHBvcyk7XG4gNTk1Olx0XHRcdHdoaWxlICghbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHBhcmVudCwgbHJ1KSkge1xuIDU5NjpcdFx0XHRcdHBvcyA9IHBhcmVudDtcbiA1OTc6XHRcdFx0XHRwYXJlbnQgPSBwYXJlbnRfbWVtX2Nncm91cChwb3MpO1xuIDU5ODpcdFx0XHR9XG4gNTk5Olx0XG4gNjAwOlx0XHRcdGlmICghbWxydSkge1xuIDYwMTpcdFx0XHRcdG1scnUgPSBtZW1jZ19pbml0X2xpc3RfbHJ1X29uZShscnUsIGdmcCk7XG4gNjAyOlx0XHRcdFx0aWYgKCFtbHJ1KVxuIDYwMzpcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNjA0Olx0XHRcdH1cbiA2MDU6XHRcdFx0eGFzX3NldChcdTAwMjZ4YXMsIHBvcy1cdTAwM2VrbWVtY2dfaWQpO1xuIDYwNjpcdFx0XHRkbyB7XG4gNjA3Olx0XHRcdFx0eGFzX2xvY2tfaXJxc2F2ZShcdTAwMjZ4YXMsIGZsYWdzKTtcbiA2MDg6XHRcdFx0XHRpZiAoIXhhc19sb2FkKFx1MDAyNnhhcykgXHUwMDI2XHUwMDI2ICFjc3NfaXNfZHlpbmcoXHUwMDI2cG9zLVx1MDAzZWNzcykpIHtcbiA2MDk6XHRcdFx0XHRcdHhhc19zdG9yZShcdTAwMjZ4YXMsIG1scnUpO1xuIDYxMDpcdFx0XHRcdFx0aWYgKCF4YXNfZXJyb3IoXHUwMDI2eGFzKSlcbiA2MTE6XHRcdFx0XHRcdFx0bWxydSA9IE5VTEw7XG4gNjEyOlx0XHRcdFx0fVxuIDYxMzpcdFx0XHRcdHhhc191bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ4YXMsIGZsYWdzKTtcbiA2MTQ6XHRcdFx0fSB3aGlsZSAoeGFzX25vbWVtKFx1MDAyNnhhcywgZ2ZwKSk7XG4gNjE1Olx0XHR9IHdoaWxlIChwb3MgIT0gbWVtY2cgXHUwMDI2XHUwMDI2ICFjc3NfaXNfZHlpbmcoXHUwMDI2cG9zLVx1MDAzZWNzcykpO1xuIDYxNjpcdFxuIDYxNzpcdFx0aWYgKHVubGlrZWx5KG1scnUpKVxuIDYxODpcdFx0XHRrZnJlZShtbHJ1KTtcbiA2MTk6XHRcbiA2MjA6XHRcdHJldHVybiB4YXNfZXJyb3IoXHUwMDI2eGFzKTtcbiA2MjE6XHR9XG4gNjIyOlx0XG4gNjIzOlx0aW50IG1lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4gNjI0Olx0XHRcdFx0IGdmcF90IGdmcClcbiA2MjU6XHR7XG4gNjI2Olx0XHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgfHwgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKG1lbWNnLCBscnUpKVxuIDYyNzpcdFx0XHRyZXR1cm4gMDtcbiA2Mjg6XHRcdHJldHVybiBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBscnUsIGdmcCk7XG4gNjI5Olx0fVxuIDYzMDpcdFxuIDYzMTpcdGludCBmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiA2MzI6XHRcdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwKVxuIDYzMzpcdHtcbiA2MzQ6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiA2MzU6XHRcdGludCByZXM7XG4gNjM2Olx0XG4gNjM3Olx0XHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpXG4gNjM4Olx0XHRcdHJldHVybiAwO1xuIDYzOTpcdFxuIDY0MDpcdFx0LyogRmFzdCBwYXRoIHdoZW4gbGlzdF9scnUgaGVhZHMgYWxyZWFkeSBleGlzdCAqL1xuIDY0MTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDY0MjpcdFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4gNjQzOlx0XHRyZXMgPSBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQobWVtY2csIGxydSk7XG4gNjQ0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA2NDU6XHRcdGlmIChsaWtlbHkocmVzKSlcbiA2NDY6XHRcdFx0cmV0dXJuIDA7XG4gNjQ3Olx0XG4gNjQ4Olx0XHQvKiBBbGxvY2F0aW9uIG1heSBibG9jaywgcGluIHRoZSBtZW1jZyAqL1xuIDY0OTpcdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYyMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyBgbWVtY2dfaW5pdF9saXN0X2xydWAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYG1lbWNnX2luaXRfbGlzdF9scnVgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgZmVlbHMgc2lnbmlmaWNhbnQg4oCTIGxpa2VseSByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uLCBwb3NzaWJseSB3aXRoaW4gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIChtZW1jZykgc3Vic3lzdGVtLCBhbmQgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgbGlzdCBMUlVzIChMZWFzdCBSZWNlbnRseSBVc2VkIGxpc3RzKS4gS25vd2luZyBob3cgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgbWVtY2cgbWVtb3J5IG1hbmFnZW1lbnQgZmxvdyBkdXJpbmcgYm9vdCBvciBtb2R1bGUgbG9hZCwgZGVwZW5kaW5nIG9uIGl0cyB1c2FnZS4gVGhlIHNwZWNpZmljIExSVSBpbXBsZW1lbnRhdGlvbiBpcyBhbHNvIG9mIGhpZ2ggaW50ZXJlc3QuIFNvLCBsZXQgbWUgZ2V0IHRoYXQgZGVmaW5pdGlvbiBhbmQgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTUwOlx0XHRcdCAqL1xuIDU1MTpcdFx0XHRmb3JfZWFjaF9ub2RlKGkpXG4gNTUyOlx0XHRcdFx0bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKGxydSwgaSwgXHUwMDI2bWxydS1cdTAwM2Vub2RlW2ldLCBwYXJlbnQpO1xuIDU1MzpcdFxuIDU1NDpcdFx0XHR4YV9lcmFzZV9pcnEoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1jZy1cdTAwM2VrbWVtY2dfaWQpO1xuIDU1NTpcdFxuIDU1NjpcdFx0XHQvKlxuIDU1NzpcdFx0XHQgKiBIZXJlIGFsbCBsaXN0X2xydXMgY29ycmVzcG9uZGluZyB0byB0aGUgY2dyb3VwIGFyZSBndWFyYW50ZWVkXG4gNTU4Olx0XHRcdCAqIHRvIHJlbWFpbiBlbXB0eSwgd2UgY2FuIHNhZmVseSBmcmVlIHRoaXMgbHJ1LCBhbnkgZnVydGhlclxuIDU1OTpcdFx0XHQgKiBtZW1jZ19saXN0X2xydV9hbGxvYygpIGNhbGwgd2lsbCBzaW1wbHkgYmFpbCBvdXQuXG4gNTYwOlx0XHRcdCAqL1xuIDU2MTpcdFx0XHRrdmZyZWVfcmN1KG1scnUsIHJjdSk7XG4gNTYyOlx0XHR9XG4gNTYzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9scnVzX211dGV4KTtcbiA1NjQ6XHR9XG4gNTY1Olx0XG4gNTY2Olx0c3RhdGljIGlubGluZSBib29sIG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gNTY3Olx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiA1Njg6XHR7XG4gNTY5Olx0XHRpbnQgaWR4ID0gbWVtY2ctXHUwMDNla21lbWNnX2lkO1xuIDU3MDpcdFxuIDU3MTpcdFx0cmV0dXJuIGlkeCBcdTAwM2MgMCB8fCB4YV9sb2FkKFx1MDAyNmxydS1cdTAwM2V4YSwgaWR4KTtcbiA1NzI6XHR9XG4gNTczOlx0XG4gNTc0Olx0c3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiA1NzU6XHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfbHJ1ICpscnUsIGdmcF90IGdmcClcbiA1NzY6XHR7XG4gNTc3Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDU3ODpcdFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1ID0gTlVMTDtcbiA1Nzk6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwb3MsICpwYXJlbnQ7XG4gNTgwOlx0XHRYQV9TVEFURSh4YXMsIFx1MDAyNmxydS1cdTAwM2V4YSwgMCk7XG4gNTgxOlx0XG4gNTgyOlx0XHRnZnAgXHUwMDI2PSBHRlBfUkVDTEFJTV9NQVNLO1xuIDU4MzpcdFx0LypcbiA1ODQ6XHRcdCAqIEJlY2F1c2UgdGhlIGxpc3RfbHJ1IGNhbiBiZSByZXBhcmVudGVkIHRvIHRoZSBwYXJlbnQgY2dyb3VwJiMzOTtzXG4gNTg1Olx0XHQgKiBsaXN0X2xydSwgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoaXMgY2dyb3VwIGFuZCBhbGwgaXRzXG4gNTg2Olx0XHQgKiBhbmNlc3RvcnMgaGF2ZSBhbGxvY2F0ZWQgbGlzdF9scnVfbWVtY2cuXG4gNTg3Olx0XHQgKi9cbiA1ODg6XHRcdGRvIHtcbiA1ODk6XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhvc2UgbGluZXMgaW4gYG1tL2xpc3RfbHJ1LmNgOgoKKipBbmFseXppbmcgYG1tL2xpc3RfbHJ1LmNgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYG1tL2xpc3RfbHJ1LmNgLiBUaGUgZmlyc3QgdGhpbmcgSSBhbHdheXMgZG8gaXMgZ2V0IGEgZmVlbCBmb3IgdGhlIGZpbGUmIzM5O3MgcHVycG9zZS4gYGxpc3RfbHJ1YCBzdWdnZXN0cyBhIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgY2FjaGUsIGltcGxlbWVudGVkIHVzaW5nIGxpbmtlZCBsaXN0cy4gR2l2ZW4gaXRzIGxvY2F0aW9uIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBkaXJlY3RvcnkgKGBtbWApLCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHBhZ2UgY2FjaGluZyBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGV2aWN0aW9uIGFuZCBhY2Nlc3MgdHJhY2tpbmcuIEkmIzM5O2xsIHByb2JhYmx5IHdhbnQgdG8gbG9vayBhdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGZpcnN0LCB0aGUgYGxpc3RfaGVhZGAgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQuIFRoZW4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGxpc3QgaXMgYmVpbmcgbWFpbnRhaW5lZCBhbmQgbG9vayBmb3IgdGhlIGludGVyZXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBsaXN0X2xydV9hZGRgLCBgbGlzdF9scnVfZ2V0YCBhbmQgYGxpc3RfbHJ1X2RlbGAgdG8gc2VlIGhvdyB0aGUgZWxlbWVudHMgYXJlIGFkZGVkLCBhY2Nlc3NlZCBhbmQgZGVsZXRlZCBmcm9tIHRoZSBMUlUgbGlzdCwgYXMgd2VsbCBhcyB0aGUgZXZpY3Rpb24gcHJvY2Vzcy4gQW5kLCBJIGFzc3VtZSwgdGhlcmUgbWF5IGJlIGxvY2tzIGluIHBsYWNlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3IgdGhlbS4gQWZ0ZXIgdGhhdCwgSSB3aWxsIHRyYWNlIHRoZSBwYXRocywgaG93IHRoZSBwYWdlcyBhcmUgYmVpbmcgaGFuZGxlZCwgaG93IGl0IGlzIGltcGxlbWVudGVkIGFuZCB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2xpc3RfbHJ1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdFxuIDUyMTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZHN0LVx1MDAzZWxvY2spO1xuIDUyMjpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNyYy1cdTAwM2Vsb2NrKTtcbiA1MjM6XHR9XG4gNTI0Olx0XG4gNTI1Olx0dm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIDUyNjpcdHtcbiA1Mjc6XHRcdHN0cnVjdCBsaXN0X2xydSAqbHJ1O1xuIDUyODpcdFx0aW50IGk7XG4gNTI5Olx0XG4gNTMwOlx0XHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XG4gNTMxOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGxydSwgXHUwMDI2bWVtY2dfbGlzdF9scnVzLCBsaXN0KSB7XG4gNTMyOlx0XHRcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydTtcbiA1MzM6XHRcbiA1MzQ6XHRcdFx0LypcbiA1MzU6XHRcdFx0ICogY3NzX2lzX2R5aW5nKCkgY2hlY2sgaW4gbWVtY2dfbGlzdF9scnVfYWxsb2MoKSBhdm9pZHNcbiA1MzY6XHRcdFx0ICogYWxsb2NhdGluZyBhIG5ldyBtbHJ1IHNpbmNlIENTU19EWUlORyBpcyBhbHJlYWR5IHNldCBmb3IgdGhpc1xuIDUzNzpcdFx0XHQgKiBtZW1jZyBhIHJjdSBncmFjZSBwZXJpb2QgYWdvLlxuIDUzODpcdFx0XHQgKi9cbiA1Mzk6XHRcdFx0bWxydSA9IHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1jZy1cdTAwM2VrbWVtY2dfaWQpO1xuIDU0MDpcdFx0XHRpZiAoIW1scnUpXG4gNTQxOlx0XHRcdFx0Y29udGludWU7XG4gNTQyOlx0XG4gNTQzOlx0XHRcdC8qXG4gNTQ0Olx0XHRcdCAqIFJlcGFyZW50IGVhY2ggcGVyLW5vZGUgbGlzdCBhbmQgbWFyayB0aGUgY2hpbGQgZGVhZFxuIDU0NTpcdFx0XHQgKiAoTE9OR19NSU4pIGJlZm9yZSBjbGVhcmluZyB4YXJyYXkgZW50cnkgb3RoZXJ3aXNlIGFcbiA1NDY6XHRcdFx0ICogY29uY3VycmVudCBsaXN0X2xydV9kZWwoKSBtYXkgY29ycnVwdCB0aGUgbGlzdCBpZiBpdCBhcnJpdmVzXG4gNTQ3Olx0XHRcdCAqIGFmdGVyIHhhcnJheSBjbGVhciBidXQgYmVmb3JlIHJlcGFyZW50aW5nIGFzXG4gNTQ4Olx0XHRcdCAqIGxvY2tfbGlzdF9scnVfb2ZfbWVtY2cgd2lsbCBhY3F1aXJlIHBhcmVudCYjMzk7cyBsb2NrIHdoaWxlIHRoZVxuIDU0OTpcdFx0XHQgKiBpdGVtIGlzIHN0aWxsIG9uIGNoaWxkJiMzOTtzIGxpc3QuXG4gNTUwOlx0XHRcdCAqL1xuIDU1MTpcdFx0XHRmb3JfZWFjaF9ub2RlKGkpXG4gNTUyOlx0XHRcdFx0bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKGxydSwgaSwgXHUwMDI2bWxydS1cdTAwM2Vub2RlW2ldLCBwYXJlbnQpO1xuIDU1MzpcdFxuIDU1NDpcdFx0XHR4YV9lcmFzZV9pcnEoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1jZy1cdTAwM2VrbWVtY2dfaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzYxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbWVtY2dfaW5pdF9saXN0X2xydWAgaW4gYG1tL2xpc3RfbHJ1LmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGlzIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIChtZW1jZykgaW50ZWdyYXRpb24gd29ya3Mgd2l0aCB0aGUgYGxpc3RfbHJ1YCBkYXRhIHN0cnVjdHVyZS4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbWVtY2dfaW5pdF9saXN0X2xydWAgc3BlY2lmaWNhbGx5LCBzbyBJJiMzOTttIG5hdmlnYXRpbmcgdG8gYG1tL2xpc3RfbHJ1LmNgIHRvIHNlZSBob3cgaXQgaW5pdGlhbGl6ZXMgYW5kIGludGVncmF0ZXMgdGhpcyBMUlUgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBtZW1jZyBmcmFtZXdvcmsuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGFzc29jaWF0aW5nIGEgc3BlY2lmaWMgYGxpc3RfbHJ1YCBpbnN0YW5jZSB3aXRoIGEgcGFydGljdWxhciBtZW1jZy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWTigJRwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBob3cgdGhlIGBsaXN0X2xydWAgaXRzZWxmIGlzIGluaXRpYWxpemVkLCBob3cgbWVtY2ctc3BlY2lmaWMgZmllbGRzIGFyZSBzZXQsIGFuZCBob3cgdGhpcyBsaW5rcyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBhY2NvdW50aW5nLiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIHBlci1jcHUgTFJVIGxpc3RzLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhhdCYjMzk7cyBoYW5kbGVkIGluIHRoZSBjb250ZXh0IG9mIG1lbWNncy4gVGhpcyBzaG91bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBvdmVyaGVhZCBvZiB1c2luZyBgbGlzdF9scnVgIHdpdGggbWVtY2dzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jZ19pbml0X2xpc3RfbHJ1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9saXN0X2xydS5jPTQ1MT1zdGF0aWMgdm9pZCBpbml0X29uZV9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXG4tLVxubW0vbGlzdF9scnUuYy00NjItI2lmZGVmIENPTkZJR19NRU1DR1xubW0vbGlzdF9scnUuYzo0NjM6c3RhdGljIHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWVtY2dfaW5pdF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGdmcF90IGdmcClcbm1tL2xpc3RfbHJ1LmMtNDY0LXtcbi0tXG5tbS9saXN0X2xydS5jLTQ3Ny1cbm1tL2xpc3RfbHJ1LmM6NDc4OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxubW0vbGlzdF9scnUuYy00Nzkte1xuLS1cbm1tL2xpc3RfbHJ1LmM9NTc0PXN0YXRpYyBpbnQgX19tZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbGlzdF9scnUuYy02MDAtXHRcdGlmICghbWxydSkge1xubW0vbGlzdF9scnUuYzo2MDE6XHRcdFx0bWxydSA9IG1lbWNnX2luaXRfbGlzdF9scnVfb25lKGxydSwgZ2ZwKTtcbm1tL2xpc3RfbHJ1LmMtNjAyLVx0XHRcdGlmICghbWxydSlcbi0tXG5tbS9saXN0X2xydS5jPTYzMT1pbnQgZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4tLVxubW0vbGlzdF9scnUuYy02NTQtI2Vsc2Vcbm1tL2xpc3RfbHJ1LmM6NjU1OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxubW0vbGlzdF9scnUuYy02NTYte1xuLS1cbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02ODQtXG5tbS9saXN0X2xydS5jOjY4NTpcdG1lbWNnX2luaXRfbGlzdF9scnUobHJ1LCBtZW1jZ19hd2FyZSk7XG5tbS9saXN0X2xydS5jLTY4Ni1cdGxpc3RfbHJ1X3JlZ2lzdGVyKGxydSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYG1tL2xpc3RfbHJ1LmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwcm9ibGVtICpzaG91bGQqIGJlIHNvbWV3aGVyZSBhcm91bmQgdGhlIGxpc3QgTFJVIGltcGxlbWVudGF0aW9uLCBzbyBsZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBsaW5lcyA0NzAgdG8gNDkwIGluIGBtbS9saXN0X2xydS5jYC4gVGhhdCBzZWN0aW9uIHVzdWFsbHkgY29udGFpbnMgdGhlIGNvcmUgbG9naWMgZm9yIFtpbnNlcnQgc3BlY2lmaWMgZnVuY3Rpb24gb3IgYXNwZWN0IHlvdSBleHBlY3QgdG8gZmluZCwgZS5nLiwgdGhlIGV2aWN0aW9uIHByb2Nlc3MsIHRoZSBMUlUmIzM5O3MgYWdpbmcgbWVjaGFuaXNtLCB0aGUgaW5zZXJ0aW9uL3JlbW92YWwgb2YgZWxlbWVudHNdLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIFtzcGVjaWZpYyBkZXRhaWxzIGJhc2VkIG9uIHlvdXIgZXhwZXJ0aXNlXS4gSG9wZWZ1bGx5LCBJIGNhbiBwaW5wb2ludCB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBvYnZpb3VzIHJhY2UgY29uZGl0aW9ucywgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbiBpc3N1ZXMsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgcmVsYXRlZCB0byB0aGUgTFJVJiMzOTtzIGludGVybmFsIHN0YXRlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSBsaWtlbHkgaGFwcGVuLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBkaXNzZWN0IHRoZSBjb2RlIGZsb3cgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBbc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIG9wZXJhdGlvbnMgcmVsZXZhbnQgdG8gdGhlIHByb2JsZW1dLiBIb3BlZnVsbHksIHRoYXQmIzM5O2xsIGJlIGVub3VnaCB0byBnaXZlIG1lIHNvbWUgY2x1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcwOlx0XHRcdHJldHVybiBOVUxMO1xuIDQ3MTpcdFxuIDQ3MjpcdFx0Zm9yX2VhY2hfbm9kZShuaWQpXG4gNDczOlx0XHRcdGluaXRfb25lX2xydShscnUsIFx1MDAyNm1scnUtXHUwMDNlbm9kZVtuaWRdKTtcbiA0NzQ6XHRcbiA0NzU6XHRcdHJldHVybiBtbHJ1O1xuIDQ3NjpcdH1cbiA0Nzc6XHRcbiA0Nzg6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfaW5pdF9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSlcbiA0Nzk6XHR7XG4gNDgwOlx0XHRpZiAobWVtY2dfYXdhcmUpXG4gNDgxOlx0XHRcdHhhX2luaXRfZmxhZ3MoXHUwMDI2bHJ1LVx1MDAzZXhhLCBYQV9GTEFHU19MT0NLX0lSUSk7XG4gNDgyOlx0XHRscnUtXHUwMDNlbWVtY2dfYXdhcmUgPSBtZW1jZ19hd2FyZTtcbiA0ODM6XHR9XG4gNDg0Olx0XG4gNDg1Olx0c3RhdGljIHZvaWQgbWVtY2dfZGVzdHJveV9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiA0ODY6XHR7XG4gNDg3Olx0XHRYQV9TVEFURSh4YXMsIFx1MDAyNmxydS1cdTAwM2V4YSwgMCk7XG4gNDg4Olx0XHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnU7XG4gNDg5Olx0XG4gNDkwOlx0XHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpXG4gNDkxOlx0XHRcdHJldHVybjtcbiA0OTI6XHRcbiA0OTM6XHRcdHhhc19sb2NrX2lycShcdTAwMjZ4YXMpO1xuIDQ5NDpcdFx0eGFzX2Zvcl9lYWNoKFx1MDAyNnhhcywgbWxydSwgVUxPTkdfTUFYKSB7XG4gNDk1Olx0XHRcdGtmcmVlKG1scnUpO1xuIDQ5NjpcdFx0XHR4YXNfc3RvcmUoXHUwMDI2eGFzLCBOVUxMKTtcbiA0OTc6XHRcdH1cbiA0OTg6XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4gNDk5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDA2CgkJCQkJCQlvdXRwdXQ6IDE2MgoJCQkJCQkJdGhvdWdodHM6IDQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbWVtY2dfYXdhcmVgIEZsYWcgQWRqdXN0bWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBjaGVja2luZyBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpbiBhZGRpdGlvbiB0byBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHdpdGhpbiBgX19saXN0X2xydV9pbml0KClgLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IGhvdyB3ZSBjb25maWd1cmUgdGhlIGBsaXN0X2xydWAgc3RydWN0dXJlIHdoZW4gbWVtb3J5IGNncm91cHMgYXJlIGRpc2FibGVkLiBTcGVjaWZpY2FsbHksIHdoZW4gYGNncm91cF9kaXNhYmxlPW1lbW9yeWAgaXMgcGFzc2VkLCBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCByZXR1cm5zIHRydWUuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSBgbGlzdF9scnVgIGlzICpub3QqIHRyZWF0ZWQgYXMgbWVtY2ctYXdhcmUgdW5kZXIgc3VjaCBjaXJjdW1zdGFuY2VzLCB3aGljaCBmb3JjZXMgYG1lbWNnX2F3YXJlYCB0byBmYWxzZS4gVGhlIHByaW9yIGNvZGUgbWlnaHQgaGF2ZSBtaXNzZWQgdGhpcyBjcnVjaWFsIHNldHRpbmcuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogV2hhdCYjMzk7cyB0aGUgcmlzayBoZXJlLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gbWVtb3J5IGluaXRpYWxpemF0aW9uLgoKSSYjMzk7dmUgY2FyZWZ1bGx5IGV4YW1pbmVkIHRoZSBjb2RlLiBUaGVyZSYjMzk7cyBubyBkYXRhIGJlaW5nIGxlYWtlZCB0byB1c2VyLXNwYWNlIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWMsIG5vIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGdvaW5nIHVuaW5pdGlhbGl6ZWQgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMsIGFuZCBubyBjb25kaXRpb25hbCBqdW1wcyByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhpcyBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5LW1hbmFnZW1lbnQgY29udHJvbCBmbGFnIChgbWVtY2dfYXdhcmVgKSBhZGp1c3RtZW50IHdpdGhpbiBgbGlzdF9scnVgIGluaXRpYWxpemF0aW9uLgoKUmVnYXJkaW5nIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5kIHJlbGF0ZWQgYnVnIGRldGVjdG9ycywgSSYjMzk7bSBjb25maWRlbnQgdGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIGlzc3Vlcy4gQW55IGZ1bmRhbWVudGFsIGJ1ZywgbGlrZSBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBsb2dpYyBpc3N1ZSBhcmlzaW5nIGZyb20gbWVtY2cgYmVpbmcgZGlzYWJsZWQsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIG9yIEtBU0FOIGR1cmluZyByb3V0aW5lIHRlc3RpbmcuIFRoZXJlIGFyZSBubyBleHBvc2VkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSBsZWFrcyB0aGF0IGNvdWxkIGZpbmQgdGhlaXIgd2F5IGludG8gdXNlciBzcGFjZS4KCkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgYSBsb3ctcmlzayBpbnRlcm5hbCBjb25maWd1cmF0aW9uIGFkanVzdG1lbnQuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjayBidWZmZXJzLCBvciB1c2VyLXNwYWNlIGNvcGllcyBhcmUgaW52b2x2ZWQuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgYXNzZXJ0IHRoYXQgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkgZm9yIHRoaXMgc3BlY2lmaWMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGFsb25nc2lkZSBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHNvIHRoYXQgYG1lbWNnX2F3YXJlYCBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQgYXQgYm9vdC4gVGhpcyBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgY29uZmlndXJhdGlvbiBjaGVjayBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBzdHJ1Y3QgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IG9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX2xpc3RfbHJ1X2luaXQoKWAgdG8gY2hlY2sgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgYWxvbmdzaWRlIGBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKWAgc28gdGhhdCBgbWVtY2dfYXdhcmVgIGlzIHNldCB0byBmYWxzZSB3aGVuIG1lbW9yeSBjZ3JvdXBzIGFyZSBkaXNhYmxlZCBhdCBib290LiBUaGlzIGlzIGFuIGludGVybmFsIGtlcm5lbCBjb25maWd1cmF0aW9uIGNoZWNrIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIHN0cnVjdCBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgb3IgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NjoxMC4wMzcyNzIwOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5Nzg4MTg1OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19saXN0X2xydV9pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGFsb25nc2lkZSBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHNvIHRoYXQgYG1lbWNnX2F3YXJlYCBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQgYXQgYm9vdC4gVGhpcyBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgY29uZmlndXJhdGlvbiBjaGVjayBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBzdHJ1Y3QgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IG9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIF9fbGlzdF9scnVfaW5pdCgpIHRvIGVuc3VyZSBtZW1jZ19hd2FyZSBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgaXMgdHJ1ZSwgcHJldmVudGluZyBpbmFwcHJvcHJpYXRlIGluaXRpYWxpemF0aW9uIG9mIHBlci1tZW1jZyBsaXN0IExSVXMgd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29kZSBpbiBrZXJuZWwgbGlzdF9scnUgaW5pdGlhbGl6YXRpb24gKGUuZy4sIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6MTAuMDM3Mjc3MTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMjA5Mjg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE2MmQ5MjZkODZiYjJlNjZkNGE4MDg2MDdhMDYwZDQyNmFmMGI1NGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAwNDo0NjowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuY1xcbmluZGV4IDM2NjYyZDAyZmY5NjMuLmE0NTIyY2E5M2ViY2IgMTAwNjQ0XFxuLS0tIGEvbW0vbGlzdF9scnUuY1xcbisrKyBiL21tL2xpc3RfbHJ1LmNcXG5AQCAtNjcxLDcgKzY3MSw3IEBAIGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyXFxuIFxcdGVsc2VcXG4gXFx0XFx0bHJ1LVxcdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xcbiBcXG4tXFx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbitcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbiBcXHRcXHRtZW1jZ19hd2FyZSA9IGZhbHNlO1xcbiAjZW5kaWZcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjEwLjY3MDQ4ODAyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjcwNzgxNzUwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2xpc3RfbHJ1X2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIF9fbGlzdF9scnVfaW5pdCgpIHRvIGVuc3VyZSBtZW1jZ19hd2FyZSBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgaXMgdHJ1ZSwgcHJldmVudGluZyBpbmFwcHJvcHJpYXRlIGluaXRpYWxpemF0aW9uIG9mIHBlci1tZW1jZyBsaXN0IExSVXMgd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29kZSBpbiBrZXJuZWwgbGlzdF9scnUgaW5pdGlhbGl6YXRpb24gKGUuZy4sIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTYyZDkyNmQ4NmJiMmU2NmQ0YTgwODYwN2EwNjBkNDI2YWYwYjU0ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDQ6NDY6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuY1xuaW5kZXggMzY2NjJkMDJmZjk2My4uYTQ1MjJjYTkzZWJjYiAxMDA2NDRcbi0tLSBhL21tL2xpc3RfbHJ1LmNcbisrKyBiL21tL2xpc3RfbHJ1LmNcbkBAIC02NzEsNyArNjcxLDcgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJcbiBcdGVsc2VcbiBcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gLTE7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuIFx0XHRtZW1jZ19hd2FyZSA9IGZhbHNlO1xuICNlbmRpZlxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6MTAuNjcwNDkxNTgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU5Mzk5NDEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBsaXN0X2xydS5jYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBzZWVtcyB3ZSdyZSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIHdpdGhpbiBgbW0vbGlzdF9scnUuY2AuIFRoZSBkaWZmIGhpZ2hsaWdodHMgYSBjaGFuZ2UgYXJvdW5kIGxpbmUgNjcxLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIHRoZSBjb25kaXRpb25hbCB0aGF0IGRldGVybWluZXMgdGhlIGBtZW1jZ19hd2FyZWAgZmxhZyBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSwgc28gSSdsbCByZWFkIHRoZSBjb2RlIGFyb3VuZCB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgdG8gZ2V0IHRoZSBmdWxsIGNvbnRleHQuIEZyb20gYSBmaXJzdCBnbGFuY2UsIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBleHRlbmQgdGhlIGNvbmRpdGlvbiB1bmRlciB3aGljaCBgbWVtY2dfYXdhcmVgIGlzIHNldCB0byBgZmFsc2VgLCBhZGRpbmcgYW5vdGhlciBjaGVjayBmb3IgYSBkaXNhYmxlZCBtZW1vcnkgY2dyb3VwLiBMZXQncyBkaWcgZGVlcGVyIHRvIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBuZXcgZmVhdHVyZSwgYSBidWcgZml4LCBvciBhIGdlbmVyYWwgb3B0aW1pemF0aW9uLiBJJ2xsIG5lZWQgdG8gYXNzZXNzIGhvdyBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpbnRlcmFjdHMgd2l0aCBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBmb3IgZGVwZW5kZW5jaWVzIG9uIHRoZXNlIG1lbW9yeSBjZ3JvdXAgY2hlY2tzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGNoYW5nZSBtYWtlcyBzZW5zZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NjoxNy4yNjQ0ODg2MjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbGlzdF9scnUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NTA6XFx0XFx0cmVzID0gX19tZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgbHJ1LCBnZnApO1xcbiA2NTE6XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiA2NTI6XFx0XFx0cmV0dXJuIHJlcztcXG4gNjUzOlxcdH1cXG4gNjU0OlxcdCNlbHNlXFxuIDY1NTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfaW5pdF9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSlcXG4gNjU2OlxcdHtcXG4gNjU3OlxcdH1cXG4gNjU4OlxcdFxcbiA2NTk6XFx0c3RhdGljIHZvaWQgbWVtY2dfZGVzdHJveV9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4gNjYwOlxcdHtcXG4gNjYxOlxcdH1cXG4gNjYyOlxcdCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG4gNjYzOlxcdFxcbiA2NjQ6XFx0aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4gNjY1OlxcdHtcXG4gNjY2OlxcdFxcdGludCBpO1xcbiA2Njc6XFx0XFxuIDY2ODpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuIDY2OTpcXHRcXHRpZiAoc2hyaW5rZXIpXFxuIDY3MDpcXHRcXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXFx1MDAzZWlkO1xcbiA2NzE6XFx0XFx0ZWxzZVxcbiA2NzI6XFx0XFx0XFx0bHJ1LVxcdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xcbiA2NzM6XFx0XFxuIDY3NDpcXHRcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbiA2NzU6XFx0XFx0XFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcXG4gNjc2OlxcdCNlbmRpZlxcbiA2Nzc6XFx0XFxuIDY3ODpcXHRcXHRscnUtXFx1MDAzZW5vZGUgPSBremFsbG9jX29ianMoKmxydS1cXHUwMDNlbm9kZSwgbnJfbm9kZV9pZHMpO1xcbiA2Nzk6XFx0XFx0aWYgKCFscnUtXFx1MDAzZW5vZGUpXFxuIDY4MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNjgxOlxcdFxcbiA2ODI6XFx0XFx0Zm9yX2VhY2hfbm9kZShpKVxcbiA2ODM6XFx0XFx0XFx0aW5pdF9vbmVfbHJ1KGxydSwgXFx1MDAyNmxydS1cXHUwMDNlbm9kZVtpXS5scnUpO1xcbiA2ODQ6XFx0XFxuIDY4NTpcXHRcXHRtZW1jZ19pbml0X2xpc3RfbHJ1KGxydSwgbWVtY2dfYXdhcmUpO1xcbiA2ODY6XFx0XFx0bGlzdF9scnVfcmVnaXN0ZXIobHJ1KTtcXG4gNjg3OlxcdFxcbiA2ODg6XFx0XFx0cmV0dXJuIDA7XFxuIDY4OTpcXHR9XFxuIDY5MDpcXHRFWFBPUlRfU1lNQk9MX0dQTChfX2xpc3RfbHJ1X2luaXQpO1xcbiA2OTE6XFx0XFxuIDY5MjpcXHR2b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuIDY5MzpcXHR7XFxuIDY5NDpcXHRcXHQvKiBBbHJlYWR5IGRlc3Ryb3llZCBvciBub3QgeWV0IGluaXRpYWxpemVkPyAqL1xcbiA2OTU6XFx0XFx0aWYgKCFscnUtXFx1MDAzZW5vZGUpXFxuIDY5NjpcXHRcXHRcXHRyZXR1cm47XFxuIDY5NzpcXHRcXG4gNjk4OlxcdFxcdGxpc3RfbHJ1X3VucmVnaXN0ZXIobHJ1KTtcXG4gNjk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NjoxNy4yNjQ2NDQ1NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDQ0OTE1ODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBFeGFtaW5hdGlvbiBvZiBgX19saXN0X2xydV9pbml0YCBhbmQgTWVtb3J5IENncm91cHMqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgX19saXN0X2xydV9pbml0YCBiZWluZyBjYWxsZWQsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciBpbml0aWFsaXppbmcgYGxpc3RfbHJ1c2Ag4oCTIG1ha2VzIHNlbnNlLiBUaGV5J3JlIHVzZWQgYWxsIG92ZXIgdGhlIHBsYWNlOiBzdXBlcmJsb2NrcywgZGNhY2hlLCBvdGhlciBzdWJzeXN0ZW1zLiBJdCdzIHRoZSBleHBlY3RlZCBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmUgZm9yIHRoZXNlIGRhdGEgc3RydWN0dXJlcy4gTm93LCBJIGhhdmUgYSBxdWljayBxdWVzdGlvbi4gV2hhdCdzIHRoZSBwcmFjdGljYWwgZGlmZmVyZW5jZSBiZXR3ZWVuIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGFuZCBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgPyBBcmUgdGhleSBjaGVja2luZyBmb3IgZGlmZmVyZW50IGFzcGVjdHMgb2YgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXR5IGJlaW5nIHR1cm5lZCBvZmY/IEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRob3NlIHR3byBmb3IgY29udGV4dC4gT2theSwgdGltZSB0byBkbyBhIHF1aWNrIGBncmVwYCBzZWFyY2guIFRoYXQnbGwgZ2l2ZSBtZSB0aGUgdXNhZ2UgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQgZm9yIGJvdGggb2YgdGhvc2UgZnVuY3Rpb25zLiBJJ2xsIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGVpciBzcGVjaWZpYyByb2xlcyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBgbGlzdF9scnVgIGluaXRpYWxpemF0aW9uLiBUaGF0IHNob3VsZCBkbyB0aGUgdHJpY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjE5LjcwOTU3MTMzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzE1NDA2NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNzEwPXN0YXRpYyBpbmxpbmUgaW50IHNocmlua2VyX2lkKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzE2LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzE3OmJvb2wgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MTgtaW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTgwMj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTgwNy0jZWxzZVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4MDg6c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4MDkte1xcbi0tXFxubW0vbGlzdF9scnUuYz02NjQ9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjczLVxcbm1tL2xpc3RfbHJ1LmM6Njc0OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXFxubW0vbGlzdF9scnUuYy02NzUtXFx0XFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMzI9c3RhdGljIERFRklORV9TUElOTE9DSyhvYmpjZ19sb2NrKTtcXG5tbS9tZW1jb250cm9sLmMtMTMzLVxcbm1tL21lbWNvbnRyb2wuYzoxMzQ6Ym9vbCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQodm9pZClcXG5tbS9tZW1jb250cm9sLmMtMTM1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zNzkwPXN0YXRpYyB2b2lkIG1lbWNnX29ubGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtMzc5MS17XFxubW0vbWVtY29udHJvbC5jOjM3OTI6XFx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy0zNzkzLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zODAzPXN0YXRpYyB2b2lkIG1lbWNnX29mZmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzgwNi1cXG5tbS9tZW1jb250cm9sLmM6MzgwNzpcXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXFxubW0vbWVtY29udHJvbC5jLTM4MDgtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vcGVyY3B1LWludGVybmFsLmg9OTA9c3RhdGljIGlubGluZSBib29sIG5lZWRfcGNwdW9ial9leHQodm9pZClcXG4tLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTkzLVxcdFxcdHJldHVybiB0cnVlO1xcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjk0OlxcdGlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXFxubW0vcGVyY3B1LWludGVybmFsLmgtOTUtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD0xNTM9c3RhdGljIGlubGluZSBzaXplX3QgcGNwdV9vYmpfZnVsbF9zaXplKHNpemVfdCBzaXplKVxcbi0tXFxubW0vcGVyY3B1LWludGVybmFsLmgtMTU3LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDoxNTg6XFx0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0xNTktXFx0XFx0ZXh0cmFfc2l6ZSArPSBzaXplIC8gUENQVV9NSU5fQUxMT0NfU0laRSAqIHNpemVvZihzdHJ1Y3Qgb2JqX2Nncm91cCAqKTtcXG4tLVxcbm1tL3Nocmlua2VyLmM9MjI2PXN0YXRpYyBpbnQgc2hyaW5rZXJfbWVtY2dfYWxsb2Moc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL3Nocmlua2VyLmMtMjMxLVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbm1tL3Nocmlua2VyLmM6MjMyOlxcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhKHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX05PTlNMQUIpKVxcbm1tL3Nocmlua2VyLmMtMjMzLVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxubW0vc2xhYi5oPTU4OD1zdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9rbWFsbG9jX25vX29iamV4dCh2b2lkKVxcbi0tXFxubW0vc2xhYi5oLTU5Mi1cXG5tbS9zbGFiLmg6NTkzOlxcdGlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbGFiLmgtNTk0LVxcdFxcdFxcdChLTUFMTE9DX05PUk1BTCA9PSBLTUFMTE9DX1JFQ0xBSU0pKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYz0zMTg9c3RydWN0IGttZW1fY2FjaGUgKl9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyhjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0zNjUtXFx0ICovXFxubW0vc2xhYl9jb21tb24uYzozNjY6XFx0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcXG5tbS9zbGFiX2NvbW1vbi5jLTM2Ny1cXHRcXHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz05NjM9bmV3X2ttYWxsb2NfY2FjaGUoaW50IGlkeCwgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUgdHlwZSlcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtOTcyLVxcdH0gZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpIFxcdTAwMjZcXHUwMDI2ICh0eXBlID09IEtNQUxMT0NfQ0dST1VQKSkge1xcbm1tL3NsYWJfY29tbW9uLmM6OTczOlxcdFxcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkge1xcbm1tL3NsYWJfY29tbW9uLmMtOTc0LVxcdFxcdFxcdGttYWxsb2NfY2FjaGVzW3R5cGVdW2lkeF0gPSBrbWFsbG9jX2NhY2hlc1tLTUFMTE9DX05PUk1BTF1baWR4XTtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTAwMS1cXHQgKi9cXG5tbS9zbGFiX2NvbW1vbi5jOjEwMDI6XFx0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkge1xcbm1tL3NsYWJfY29tbW9uLmMtMTAwMy1cXHRcXHRpZiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCBcXHUwMDI2XFx1MDAyNiBLTUFMTE9DX1JFQ0xBSU0gIT0gS01BTExPQ19OT1JNQUwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjIzLjQyNDk4NTA1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MjcwNTQzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBNZW1vcnkgQ29udHJvbCBMb2dpYyoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBjaGFuZ2UsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzIGdldHRpbmcgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBoaXN0b3J5LiBJIHdhbnQgdG8gc2VlIHRoZSBgZ2l0IGxvZ2Agb3IgY29tbWl0IGhpc3RvcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2hhbmdlLiBTZWVpbmcgdGhlIGV2b2x1dGlvbiBvZiB0aGUgY29kZSwgdGhlIHJlYXNvbmluZyBiZWhpbmQgcHJldmlvdXMgbW9kaWZpY2F0aW9ucywgYW5kIGFueSBkaXNjdXNzaW9ucyB0aGF0IGhhcHBlbmVkIGFyb3VuZCB0aGlzIHNwZWNpZmljIHBhcnQgb2YgdGhlIGNvZGViYXNlIGlzIGludmFsdWFibGUgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuIEZhaWxpbmcgYSBzdHJhaWdodGZvcndhcmQgZ2l0IGhpc3RvcnkgZGl2ZSwgSSdtIGdvaW5nIHRvIHN0YXJ0IGZyb20gYSBzb3VyY2UgY29kZSBsZXZlbCBpbnZlc3RpZ2F0aW9uLlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IHplcm9lcyBpbiBvbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWVtb3J5IGNncm91cCBtYWdpYyBoYXBwZW5zLCBhbmQgc3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYG1lbV9jZ3JvdXBfZGlzYWJsZWRgIGFuZCBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkYC4gVW5kZXJzdGFuZGluZyB0aGVpciByb2xlcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2UgZmxhZ3MgaW1wYWN0IG1lbW9yeSBhY2NvdW50aW5nLCByZXNvdXJjZSBsaW1pdGluZywgYW5kIHBvdGVudGlhbGx5LCB0aGUgYmVoYXZpb3Igb2YgdGhpcyBjaGFuZ2UuIEFyZSB3ZSB0b2dnbGluZyB0aGVtPyBBZmZlY3RpbmcgdGhlbT8gVGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgYXJvdW5kIHRob3NlIHZhcmlhYmxlcyB3aWxsIGJlIHRoZSBrZXkgdG8gaXQuIEl0J3MgdGltZSB0byByZWFkIHNvbWUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjI2Ljg1MjA0ODE0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjU6XFx0XFx0cmV0dXJuIGNvbnRhaW5lcl9vZih2bXByLCBzdHJ1Y3QgbWVtX2Nncm91cCwgdm1wcmVzc3VyZSk7XFxuIDEyNjpcXHR9XFxuIDEyNzpcXHRcXG4gMTI4OlxcdCNkZWZpbmUgU0VRX0JVRl9TSVpFIFNaXzRLXFxuIDEyOTpcXHQjZGVmaW5lIENVUlJFTlRfT0JKQ0dfVVBEQVRFX0JJVCAwXFxuIDEzMDpcXHQjZGVmaW5lIENVUlJFTlRfT0JKQ0dfVVBEQVRFX0ZMQUcgKDFVTCBcXHUwMDNjXFx1MDAzYyBDVVJSRU5UX09CSkNHX1VQREFURV9CSVQpXFxuIDEzMTpcXHRcXG4gMTMyOlxcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob2JqY2dfbG9jayk7XFxuIDEzMzpcXHRcXG4gMTM0OlxcdGJvb2wgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKHZvaWQpXFxuIDEzNTpcXHR7XFxuIDEzNjpcXHRcXHRyZXR1cm4gY2dyb3VwX21lbW9yeV9ub2ttZW07XFxuIDEzNzpcXHR9XFxuIDEzODpcXHRcXG4gMTM5OlxcdHN0YXRpYyB2b2lkIG1lbWNnX3VuY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcXG4gMTQwOlxcdFxcbiAxNDE6XFx0c3RhdGljIHZvaWQgbWVtY2dfdW5jaGFyZ2Vfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4gMTQyOlxcdHtcXG4gMTQzOlxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfS01FTSwgLW5yX3BhZ2VzKTtcXG4gMTQ0OlxcdFxcdG1lbWNnMV9hY2NvdW50X2ttZW0obWVtY2csIC1ucl9wYWdlcyk7XFxuIDE0NTpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXFxuIDE0NjpcXHRcXHRcXHRtZW1jZ191bmNoYXJnZShtZW1jZywgbnJfcGFnZXMpO1xcbiAxNDc6XFx0fVxcbiAxNDg6XFx0XFxuIDE0OTpcXHRzdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG4gMTUwOlxcdHtcXG4gMTUxOlxcdFxcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBvYmpfY2dyb3VwLCByZWZjbnQpO1xcbiAxNTI6XFx0XFx0dW5zaWduZWQgaW50IG5yX2J5dGVzO1xcbiAxNTM6XFx0XFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzO1xcbiAxNTQ6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0LypcXG4gMTU3OlxcdFxcdCAqIEF0IHRoaXMgcG9pbnQgYWxsIGFsbG9jYXRlZCBvYmplY3RzIGFyZSBmcmVlZCwgYW5kXFxuIDE1ODpcXHRcXHQgKiBvYmpjZy1cXHUwMDNlbnJfY2hhcmdlZF9ieXRlcyBjYW4ndCBoYXZlIGFuIGFyYml0cmFyeSBieXRlIHZhbHVlLlxcbiAxNTk6XFx0XFx0ICogSG93ZXZlciwgaXQgY2FuIGJlIFBBR0VfU0laRSBvciAoeCAqIFBBR0VfU0laRSkuXFxuIDE2MDpcXHRcXHQgKlxcbiAxNjE6XFx0XFx0ICogVGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBjYW4gbGVhZCB0byBpdDpcXG4gMTYyOlxcdFxcdCAqIDEpIENQVTA6IG9iamNnIGNhY2hlZCBpbiBvbmUgb2Ygc3RvY2stXFx1MDAzZWNhY2hlZFtpXVxcbiAxNjM6XFx0XFx0ICogMikgQ1BVMTogd2UgZG8gYSBzbWFsbCBhbGxvY2F0aW9uIChlLmcuIDkyIGJ5dGVzKSxcXG4gMTY0OlxcdFxcdCAqICAgICAgICAgIFBBR0VfU0laRSBieXRlcyBhcmUgY2hhcmdlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NjoyNi44NTI2MTQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0OTAyNjUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGZ1bmN0aW9uLiBJIGtub3cgdGhlIGNvcmUgY29uY2VwdCBvZiBtZW1vcnkgY2dyb3Vwcywgb2YgY291cnNlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIElzIHRoaXMgYSBjaGVjayBmb3IgYSBmdW5kYW1lbnRhbCBzeXN0ZW0gc2V0dGluZywgb3IgaXMgaXQgYSBtb3JlIGR5bmFtaWMgcnVudGltZSBjb25maWd1cmF0aW9uPyBJJ20gYmV0dGluZyBpdCdzIHRoZSBmb3JtZXIg4oCTIHRoaXMgZmVlbHMgbGlrZSBpdCBkZXRlcm1pbmVzIG92ZXJhbGwgY2dyb3VwIGJlaGF2aW9yIHJhdGhlciB0aGFuIGEgcGVyLXByb2Nlc3MgcG9saWN5LiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gc2VlIHdoZXJlIGl0J3MgdXNlZC4gS25vd2luZyB3aGVyZSBpdCBpcyBjYWxsZWQgd2lsbCBpbmRpY2F0ZSB0aGUgaW1wb3J0YW5jZSBvZiB0aGUgZnVuY3Rpb24uXG5cbkkgaW1tZWRpYXRlbHkgd2FudCB0byBrbm93OiBXaGF0J3MgdGhlICpyZWFzb24qIGZvciB0aGlzIHN0YXRlPyBJcyBpdCBiZWNhdXNlIHRoZSBrZXJuZWwgd2FzIGJ1aWx0IHdpdGhvdXQgbWVtb3J5IGNncm91cCBzdXBwb3J0LCBvciBpcyB0aGVyZSBzb21lIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBkaXNhYmxpbmcgaXQgZm9yIHNwZWNpZmljIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLCBmb3IgZXhhbXBsZT8gVGhlIGNvbW1lbnQgYmxvY2tzIHNob3VsZCBjb250YWluIHRoYXQgaW5mb3JtYXRpb24sIGlmIHdyaXR0ZW4gcHJvcGVybHkuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZTogV2hhdCBvdGhlciBjb2RlIHBhdGhzIGFyZSBza2lwcGVkIG9yIGVuYWJsZWQgYmFzZWQgb24gdGhpcz8gSG93IGRvZXMgaXQgYWZmZWN0IHRoZSBpbml0aWFsaXphdGlvbiBvZiBtZW1vcnkgYWNjb3VudGluZyBvciB0aGUgYmVoYXZpb3Igb2YgcmVsYXRlZCBzdWJzeXN0ZW1zIGxpa2UgT09NIGhhbmRsaW5nIG9yIHJlc291cmNlIGxpbWl0YXRpb25zPyBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBmYWxsYmFjayBiZWhhdmlvci4gSeKAmW0gdGhpbmtpbmcgaW4gcGFydGljdWxhciBhYm91dCB0aGUgcmFtaWZpY2F0aW9ucyB0byB0aGUgYWNjb3VudGluZyBzdWJzeXN0ZW0uXG5cblVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGFmZmVjdHMgdGhlIHN5c3RlbSdzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBmaXRzIGluIHdpdGggdGhlIGJyb2FkZXIgY2dyb3VwIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk4OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6MzAuMTAxNjQ2MDU4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTI5NTIyODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfZGlzYWJsZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NTMwPXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNTM0LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjUzNTpzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9kaXNhYmxlZCh2b2lkKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTUzNi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD01NDA9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTU0Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo1NDg6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC01NDktXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NTk1PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02MDItXFx0ICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjAzOlxcdHJldHVybiBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSB8fFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTYwNC1cXHRcXHRtZW1jZyA9PSB0YXJnZXQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02NDM9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NDUte1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY0NjpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY0Ny1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY2ND1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2NS17XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjY2OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY3LVxcdFxcdHJldHVybjtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY3Mj1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjczLXtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NzQ6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NzUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjkxPXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjk2LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY5NzpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjk4LVxcdFxcdGxydXZlYyA9IFxcdTAwMjZwZ2RhdC1cXHUwMDNlX19scnV2ZWM7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD03MzI9c3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTczNS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo3MzY6XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFtZW1jZyBcXHUwMDI2XFx1MDAyNiAhbWVtX2Nncm91cF9kaXNhYmxlZCgpLCBmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNzM3LVxcdHJldHVybiBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgZm9saW9fcGdkYXQoZm9saW8pKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTgwOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODEwLXtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4MTE6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MTItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04MzA9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgzMy1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4MzQ6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MzUtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04Nzc9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04Nzgte1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjg3OTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTg4MC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTkyMD1zdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MjQtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTI1OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTI2LVxcdFxcdHJldHVybjtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTk2OD1zdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZXZlbnRzX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTcyLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjk3MzpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk3NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05OTg9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX21lbW9yeV9ldmVudF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTAwMzpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTAxNz1zdGF0aWMgaW5saW5lIHU2NCBjZ3JvdXBfaWRfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMjEtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTAyMjpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMjMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMDkzPXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTA5Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMDk4OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2Rpc2FibGVkKHZvaWQpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTA5OS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNTc2PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE1ODAtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTU4MTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE1ODItXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9NDgyPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb190aHJvdHRsZV9zd2FwcmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDgzLXtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo0ODQ6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00ODUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9NDk2PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDk3LXtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo0OTg6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00OTktXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD01MDQ9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTUwNS17XFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTA2OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA3LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2JwZl9tZW1jb250cm9sLmM9MjM9X19icGZfa2Z1bmMgc3RydWN0IG1lbV9jZ3JvdXAgKmJwZl9nZXRfcm9vdF9tZW1fY2dyb3VwKHZvaWQpXFxubW0vYnBmX21lbWNvbnRyb2wuYy0yNC17XFxubW0vYnBmX21lbWNvbnRyb2wuYzoyNTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL2JwZl9tZW1jb250cm9sLmMtMjYtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9icGZfbWVtY29udHJvbC5jPTQ1PWJwZl9nZXRfbWVtX2Nncm91cChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYy00OS1cXG5tbS9icGZfbWVtY29udHJvbC5jOjUwOlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIXJvb3RfbWVtX2Nncm91cClcXG5tbS9icGZfbWVtY29udHJvbC5jLTUxLVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMDU3PWludCBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA1OC17XFxubW0vaHVnZV9tZW1vcnkuYzoxMDU5OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxubW0vaHVnZV9tZW1vcnkuYy0xMDYwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTAyPWJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1MTAtXFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxMTpcXHRXQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxMi1cXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY3My1cXG5tbS9saXN0X2xydS5jOjY3NDpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbm1tL2xpc3RfbHJ1LmMtNjc1LVxcdFxcdG1lbWNnX2F3YXJlID0gZmFsc2U7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjY5PXZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI3OS1cXG5tbS9tZW1jb250cm9sLXYxLmM6MjgwOlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxubW0vbWVtY29udHJvbC12MS5jLTI4MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDkyPXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00OTctXFxubW0vbWVtY29udHJvbC5jOjQ5ODpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy00OTktXFx0XFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MzM9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzOC1cXG5tbS9tZW1jb250cm9sLmM6NTM5OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxubW0vbWVtY29udHJvbC5jLTU0MC1cXHRcXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NTA9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTU2LVxcbm1tL21lbWNvbnRyb2wuYzo1NTc6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtNTU4LVxcdFxcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGUobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Nzc0PXZvaWQgbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC5jLTc3NS17XFxubW0vbWVtY29udHJvbC5jOjc3NjpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy03NzctXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTkxNj12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MjAtXFxubW0vbWVtY29udHJvbC5jOjkyMTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy05MjItXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTEwMTA9dm9pZCBtb2RfbHJ1dmVjX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTAxNi1cXHQvKiBVcGRhdGUgbWVtY2cgYW5kIGxydXZlYyAqL1xcbm1tL21lbWNvbnRyb2wuYzoxMDE3OlxcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy0xMDE4LVxcdFxcdG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUobHJ1dmVjLCBpZHgsIHZhbCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTA3Mz12b2lkIGNvdW50X21lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTA3OC1cXG5tbS9tZW1jb250cm9sLmM6MTA3OTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy0xMDgwLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMTU3PXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTExNjAtXFxubW0vbWVtY29udHJvbC5jOjExNjE6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtMTE2Mi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMTk5PXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMjAyLVxcbm1tL21lbWNvbnRyb2wuYzoxMjAzOlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxubW0vbWVtY29udHJvbC5jLTEyMDQtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTIyMz1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEyMjYtXFxubW0vbWVtY29udHJvbC5jOjEyMjc6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtMTIyOC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMjU4PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2l0ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTI2Ni1cXG5tbS9tZW1jb250cm9sLmM6MTI2NzpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy0xMjY4LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1Mjg9dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE1MzQtXFxubW0vbWVtY29udHJvbC5jOjE1MzU6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtMTUzNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzAwMj1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMDA1LVxcbm1tL21lbWNvbnRyb2wuYzozMDA2OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxubW0vbWVtY29udHJvbC5jLTMwMDctXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzIxND1zdGF0aWMgc3RydWN0IG9ial9jZ3JvdXAgKnBhZ2Vfb2JqY2coY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzIxNy1cXG5tbS9tZW1jb250cm9sLmM6MzIxODpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19kYXRhKVxcbm1tL21lbWNvbnRyb2wuYy0zMjE5LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTM3Nzg9dm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNzgyLVxcbm1tL21lbWNvbnRyb2wuYzozNzgzOlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKVxcbm1tL21lbWNvbnRyb2wuYy0zNzg0LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MzEyPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM0MS1cXG5tbS9tZW1jb250cm9sLmM6NDM0MjpcXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkgXFx1MDAyNlxcdTAwMjYgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtNDM0My1cXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgXFx1MDAyNnN0YXRzX2ZsdXNoX2R3b3JrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMjg9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMzMtXFxubW0vbWVtY29udHJvbC5jOjUyMzQ6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtNTIzNS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI4Nz1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI5Ni1cXHQgKi9cXG5tbS9tZW1jb250cm9sLmM6NTI5NzpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19odWdldGxiKCkgfHxcXG5tbS9tZW1jb250cm9sLmMtNTI5OC1cXHRcXHQhbWVtY2cgfHwgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTMyMT1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzMjYtXFxubW0vbWVtY29udHJvbC5jOjUzMjc6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtNTMyOC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NDk2PXZvaWQgbWVtX2Nncm91cF9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NTA2LVxcbm1tL21lbWNvbnRyb2wuYzo1NTA3OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxubW0vbWVtY29udHJvbC5jLTU1MDgtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1NTM9dm9pZCBtZW1fY2dyb3VwX21pZ3JhdGUoc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU1NjItXFxubW0vbWVtY29udHJvbC5jOjU1NjM6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtNTU2NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTg0MT1sb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4NDQtXFxubW0vbWVtY29udHJvbC5jOjU4NDU6XFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWRvX21lbXN3X2FjY291bnQoKSlcXG5tbS9tZW1jb250cm9sLmMtNTg0Ni1cXHRcXHRucl9zd2FwX3BhZ2VzID0gbWluKG5yX3N3YXBfcGFnZXMsIHBhZ2VfY291bnRlcl9tYXJnaW4oXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwKSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTg1Nz1sb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTg2MS1cXG5tbS9tZW1jb250cm9sLmM6NTg2MjpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fFxcbm1tL21lbWNvbnRyb2wuYy01ODYzLVxcdCAgICAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjIzMz1zdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX3N3YXBfaW5pdCh2b2lkKVxcbm1tL21lbWNvbnRyb2wuYy02MjM0LXtcXG5tbS9tZW1jb250cm9sLmM6NjIzNTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy02MjM2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTYyNjg9dm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC5jLTYyNjkte1xcbm1tL21lbWNvbnRyb2wuYzo2MjcwOlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxubW0vbWVtY29udHJvbC5jLTYyNzEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vc2hyaW5rZXIuYz0yMjY9c3RhdGljIGludCBzaHJpbmtlcl9tZW1jZ19hbGxvYyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbi0tXFxubW0vc2hyaW5rZXIuYy0yMjktXFxubW0vc2hyaW5rZXIuYzoyMzA6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9zaHJpbmtlci5jLTIzMS1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4tLVxcbm1tL3Nocmlua2VyLmM9NjI0PXVuc2lnbmVkIGxvbmcgc2hyaW5rX3NsYWIoZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Nocmlua2VyLmMtNjM2LVxcdCAqL1xcbm1tL3Nocmlua2VyLmM6NjM3OlxcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxcbm1tL3Nocmlua2VyLmMtNjM4LVxcdFxcdHJldHVybiBzaHJpbmtfc2xhYl9tZW1jZyhnZnBfbWFzaywgbmlkLCBtZW1jZywgcHJpb3JpdHkpO1xcbi0tXFxubW0vc3dhcC5oPTg1PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9zd2FwLmgtODgtXFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2XFxubW0vc3dhcC5oOjg5OlxcdCAgICAhbWVtX2Nncm91cF9kaXNhYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxcbm1tL3N3YXAuaC05MC1cXHRcXHRyZXR1cm4gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2Vzd2FwcGluZXNzKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9NDQ5PXN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcClcXG4tLVxcbm1tL3N3YXBmaWxlLmMtNDcxLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zd2FwZmlsZS5jOjQ3MjpcXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xcbm1tL3N3YXBmaWxlLmMtNDczLVxcdFxcdFZNX1dBUk5fT05fT05DRShjaS1cXHUwMDNlbWVtY2dfdGFibGUpO1xcbi0tXFxubW0vdm1wcmVzc3VyZS5jPTEwNj12b2lkIHZtcHJlc3N1cmUoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCB0cmVlLFxcbi0tXFxubW0vdm1wcmVzc3VyZS5jLTExMC1cXG5tbS92bXByZXNzdXJlLmM6MTExOlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxubW0vdm1wcmVzc3VyZS5jLTExMi1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz0zOTQ9dW5zaWduZWQgbG9uZyBscnV2ZWNfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNDAwLVxcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBscnV2ZWNfcGdkYXQobHJ1dmVjKSwgemlkLCB6b25lX2lkeCkge1xcbm1tL3Ztc2Nhbi5jOjQwMTpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS92bXNjYW4uYy00MDItXFx0XFx0XFx0c2l6ZSArPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGxydXZlYywgbHJ1LCB6aWQpO1xcbi0tXFxubW0vdm1zY2FuLmM9Mjc0OT1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy0yNzYzLSNlbmRpZlxcbm1tL3Ztc2Nhbi5jOjI3NjQ6XFx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xcbm1tL3Ztc2Nhbi5jLTI3NjUtXFxuLS1cXG5tbS92bXNjYW4uYz0yOTA3PXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yOTE3LSNlbmRpZlxcbm1tL3Ztc2Nhbi5jOjI5MTg6XFx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xcbm1tL3Ztc2Nhbi5jLTI5MTktXFxuLS1cXG5tbS92bXNjYW4uYz0zMDE0PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzAyMi1cXHQvKiBmb3IgbW1fdXBkYXRlX25leHRfb3duZXIoKSAqL1xcbm1tL3Ztc2Nhbi5jOjMwMjM6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS92bXNjYW4uYy0zMDI0LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyMzg9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyNjMtXFxubW0vdm1zY2FuLmM6NTI2NDpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL3Ztc2Nhbi5jLTUyNjUtXFx0XFx0c2hyaW5rX29uZShcXHUwMDI2cGdkYXQtXFx1MDAzZV9fbHJ1dmVjLCBzYyk7XFxuLS1cXG5tbS92bXNjYW4uYz01NzMyPXN0YXRpYyBpbnQgcnVuX2NtZChjaGFyIGNtZCwgdTY0IG1lbWNnX2lkLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHNlcSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3NDEtXFxubW0vdm1zY2FuLmM6NTc0MjpcXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xcbm1tL3Ztc2Nhbi5jLTU3NDMtXFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2dldF9mcm9tX2lkKG1lbWNnX2lkKTtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz00MzA9Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxcbi0tXFxubW0vd29ya2luZ3NldC5jLTQ3Ni1cXG5tbS93b3JraW5nc2V0LmM6NDc3OlxcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFldmljdGlvbl9tZW1jZylcXG5tbS93b3JraW5nc2V0LmMtNDc4LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz01OTc9dm9pZCB3b3JraW5nc2V0X2FjdGl2YXRpb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy02MDItXFx0ICovXFxubW0vd29ya2luZ3NldC5jOjYwMzpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKSB7XFxubW0vd29ya2luZ3NldC5jLTYwNC1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLS1cXG5tbS96c3dhcC5jPTExNzk9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3pzd2FwLmMtMTIwNy1cXHQgKi9cXG5tbS96c3dhcC5jOjEyMDg6XFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcXG5tbS96c3dhcC5jLTEyMDktXFx0XFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChtZW1jZyk7XFxuLS1cXG5tbS96c3dhcC5jPTEzMDQ9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5tbS96c3dhcC5jLTEzNjEtXFx0XFx0ICovXFxubW0venN3YXAuYzoxMzYyOlxcdFxcdGlmICghbWVtY2cgXFx1MDAyNlxcdTAwMjYgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xcbm1tL3pzd2FwLmMtMTM2My1cXHRcXHRcXHRpZiAoIWF0dGVtcHRzIFxcdTAwMjZcXHUwMDI2ICsrZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6MzMuMDMxMjI2MDkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODYzNDczMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgLiBUaGUgdmVyeSBuYW1lIHN1Z2dlc3RzIGl0IGhhcyB0byBkbyB3aXRoIG1lbW9yeSBjZ3JvdXBzIGJlaW5nIGRpc2FibGVkLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgaXQncyBkZXNpZ25lZCB0byBkZXRlcm1pbmUgaWYgbWVtb3J5IHJlc291cmNlIGNvbnRyb2wgdmlhIGNncm91cHMgaXMgaW50ZW50aW9uYWxseSB0dXJuZWQgb2ZmLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIExldCdzIHN0YXJ0IGJ5IGZpbmRpbmcgaXQgd2l0aGluIHRoZSBrZXJuZWwgaGVhZGVycywgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGV4cGxpY2l0IGRldGFpbHMgb2YgaXRzIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgdW5kZXJseWluZyBsb2dpYy4gT25jZSBJIGhhdmUgdGhlIGNvZGUsIEkgY2FuIGFjY3VyYXRlbHkgZXhwbGFpbiB3aGF0IGlzIGJlaW5nIGRpc2FibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAyMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjM1LjAxNzU3NjE1MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTMwOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbiA1MzE6XFx0e1xcbiA1MzI6XFx0XFx0cmV0dXJuIG9iamNnLVxcdTAwM2Vpc19yb290O1xcbiA1MzM6XFx0fVxcbiA1MzQ6XFx0XFxuIDUzNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9kaXNhYmxlZCh2b2lkKVxcbiA1MzY6XFx0e1xcbiA1Mzc6XFx0XFx0cmV0dXJuICFjZ3JvdXBfc3Vic3lzX2VuYWJsZWQobWVtb3J5X2NncnBfc3Vic3lzKTtcXG4gNTM4OlxcdH1cXG4gNTM5OlxcdFxcbiA1NDA6XFx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4gNTQxOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIDU0MjpcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyAqbWluLFxcbiA1NDM6XFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKmxvdyxcXG4gNTQ0OlxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICp1c2FnZSlcXG4gNTQ1OlxcdHtcXG4gNTQ2OlxcdFxcdCptaW4gPSAqbG93ID0gKnVzYWdlID0gMDtcXG4gNTQ3OlxcdFxcbiA1NDg6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gNTQ5OlxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6MzUuMDE3NzAwNjMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MDczMDI1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgTWVtb3J5IE1hbmFnZW1lbnQgQnVnKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBib290LXRpbWUgcGFyYW1ldGVyIGludGVyYWN0aW9uIGFuZCBJJ20gc2VlaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGluY29uc2lzdGVuY3kgaW4gaG93IG1lbW9yeSBjZ3JvdXBzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIHdoZW4gYGNncm91cF9kaXNhYmxlPW1lbW9yeWAgaXMgc3BlY2lmaWVkLCBJICpleHBlY3QqIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbSB0byBiZSBjb21wbGV0ZWx5IGRlYWN0aXZhdGVkLiBgY2dyb3VwX3N1YnN5c19lbmFibGVkKG1lbW9yeV9jZ3JwX3N1YnN5cylgIGNvcnJlY3RseSByZWZsZWN0cyB0aGlzLCBhbmQgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgd2lsbCByZXR1cm4gdHJ1ZS4gVGhhdCdzIHRoZSBmaXJzdCBiaXQsIGFsbCBnb29kLlxuXG5Ib3dldmVyLCB0aGUgbG9naWMgbGF0ZXIgb24sIHBhcnRpY3VsYXJseSBpbiBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgLCBzZWVtcyB0byBjaGVjayBgY2dyb3VwX21lbW9yeV9ub2ttZW1gIGluc3RlYWQuIFRoaXMgdmFsdWUgaXMgdGllZCB0byB0aGUgYGNncm91cC5tZW1vcnk9bm9rbWVtYCBib290IHBhcmFtZXRlci4gSGVyZSdzIHdoZXJlIHRoZSBwcm9ibGVtIGFyaXNlczogZXZlbiB3aGVuIGBjZ3JvdXBfZGlzYWJsZT1tZW1vcnlgIGlzIHNldCwgYGNncm91cF9tZW1vcnlfbm9rbWVtYCAqbWlnaHQqIHN0aWxsIGJlIGZhbHNlISBUaGlzIHN1YnRsZSBkaWZmZXJlbmNlIG1lYW5zIHRoYXQgYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYCBjb3VsZCBldmFsdWF0ZSB0byBmYWxzZSwgZXZlbiB3aGVuIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbSBpcyBzdXBwb3NlZCB0byBiZSBkaXNhYmxlZCBnbG9iYWxseS5cblxuVGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZSBpZiBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHJldHVybnMgZmFsc2UsIHRoZSBgX19saXN0X2xydV9pbml0YCBmdW5jdGlvbiB3aWxsIGluY29ycmVjdGx5IHRyZWF0IHRoZSBgbWVtY2dfYXdhcmVgIGZsYWcgYXMgdHJ1ZS4gVGhpcywgaW4gdHVybiwgbGVhZHMgdG8gYSBjYWxsIHRvIGBtZW1jZ19pbml0X2xpc3RfbHJ1YCwgd2hpY2ggdGhlbiBhdHRlbXB0cyB0byBpbml0aWFsaXplIHBlci1tZW1jZyBMUlUgdGFibGVzLiBCdXQgKndoeSogYXJlIHdlIHRyeWluZyB0byBpbml0aWFsaXplIHBlci1tZW1jZyBzdHJ1Y3R1cmVzIGlmIHRoZSBlbnRpcmUgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXR5IGlzIHN1cHBvc2VkbHkgZGlzYWJsZWQ/IEl0J3MgYSBjbGVhciB2aW9sYXRpb24gb2YgZXhwZWN0YXRpb25zLCBhbmQgSSdtIGd1ZXNzaW5nIHRoaXMgY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgdW5leHBlY3RlZCBiZWhhdmlvdXIsIG1lbW9yeSBsZWFrcywgb3IgZXZlbiBjcmFzaGVzLlxuXG5JJ20gbm93IGdvaW5nIHRvIGRpdmUgaW50byB0aGUgYG1lbWNnX2luaXRfbGlzdF9scnVgIGZ1bmN0aW9uIGl0c2VsZiwgZm91bmQgaW4gYG1tL2xpc3RfbHJ1LmNgLCB0byBwaW5wb2ludCB0aGUgZXhhY3QgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoaXMgaW5jb3JyZWN0IGluaXRpYWxpemF0aW9uIG9jY3VycyBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGZhbGxvdXQgY291bGQgYmUuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6MzguNTI1MDA3NTcxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9saXN0X2xydS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHRcXHRcXHRpZiAoIW1scnUpIHtcXG4gNjAxOlxcdFxcdFxcdFxcdG1scnUgPSBtZW1jZ19pbml0X2xpc3RfbHJ1X29uZShscnUsIGdmcCk7XFxuIDYwMjpcXHRcXHRcXHRcXHRpZiAoIW1scnUpXFxuIDYwMzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNjA0OlxcdFxcdFxcdH1cXG4gNjA1OlxcdFxcdFxcdHhhc19zZXQoXFx1MDAyNnhhcywgcG9zLVxcdTAwM2VrbWVtY2dfaWQpO1xcbiA2MDY6XFx0XFx0XFx0ZG8ge1xcbiA2MDc6XFx0XFx0XFx0XFx0eGFzX2xvY2tfaXJxc2F2ZShcXHUwMDI2eGFzLCBmbGFncyk7XFxuIDYwODpcXHRcXHRcXHRcXHRpZiAoIXhhc19sb2FkKFxcdTAwMjZ4YXMpIFxcdTAwMjZcXHUwMDI2ICFjc3NfaXNfZHlpbmcoXFx1MDAyNnBvcy1cXHUwMDNlY3NzKSkge1xcbiA2MDk6XFx0XFx0XFx0XFx0XFx0eGFzX3N0b3JlKFxcdTAwMjZ4YXMsIG1scnUpO1xcbiA2MTA6XFx0XFx0XFx0XFx0XFx0aWYgKCF4YXNfZXJyb3IoXFx1MDAyNnhhcykpXFxuIDYxMTpcXHRcXHRcXHRcXHRcXHRcXHRtbHJ1ID0gTlVMTDtcXG4gNjEyOlxcdFxcdFxcdFxcdH1cXG4gNjEzOlxcdFxcdFxcdFxcdHhhc191bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2eGFzLCBmbGFncyk7XFxuIDYxNDpcXHRcXHRcXHR9IHdoaWxlICh4YXNfbm9tZW0oXFx1MDAyNnhhcywgZ2ZwKSk7XFxuIDYxNTpcXHRcXHR9IHdoaWxlIChwb3MgIT0gbWVtY2cgXFx1MDAyNlxcdTAwMjYgIWNzc19pc19keWluZyhcXHUwMDI2cG9zLVxcdTAwM2Vjc3MpKTtcXG4gNjE2OlxcdFxcbiA2MTc6XFx0XFx0aWYgKHVubGlrZWx5KG1scnUpKVxcbiA2MTg6XFx0XFx0XFx0a2ZyZWUobWxydSk7XFxuIDYxOTpcXHRcXG4gNjIwOlxcdFxcdHJldHVybiB4YXNfZXJyb3IoXFx1MDAyNnhhcyk7XFxuIDYyMTpcXHR9XFxuIDYyMjpcXHRcXG4gNjIzOlxcdGludCBtZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbiA2MjQ6XFx0XFx0XFx0XFx0IGdmcF90IGdmcClcXG4gNjI1OlxcdHtcXG4gNjI2OlxcdFxcdGlmICghbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSB8fCBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQobWVtY2csIGxydSkpXFxuIDYyNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjI4OlxcdFxcdHJldHVybiBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBscnUsIGdmcCk7XFxuIDYyOTpcXHR9XFxuIDYzMDpcXHRcXG4gNjMxOlxcdGludCBmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4gNjMyOlxcdFxcdFxcdFxcdCAgICAgICBnZnBfdCBnZnApXFxuIDYzMzpcXHR7XFxuIDYzNDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIDYzNTpcXHRcXHRpbnQgcmVzO1xcbiA2MzY6XFx0XFxuIDYzNzpcXHRcXHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpXFxuIDYzODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjM5OlxcdFxcbiA2NDA6XFx0XFx0LyogRmFzdCBwYXRoIHdoZW4gbGlzdF9scnUgaGVhZHMgYWxyZWFkeSBleGlzdCAqL1xcbiA2NDE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA2NDI6XFx0XFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuIDY0MzpcXHRcXHRyZXMgPSBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQobWVtY2csIGxydSk7XFxuIDY0NDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNjQ1OlxcdFxcdGlmIChsaWtlbHkocmVzKSlcXG4gNjQ2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2NDc6XFx0XFxuIDY0ODpcXHRcXHQvKiBBbGxvY2F0aW9uIG1heSBibG9jaywgcGluIHRoZSBtZW1jZyAqL1xcbiA2NDk6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gNjUwOlxcdFxcdHJlcyA9IF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcXG4gNjUxOlxcdFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4gNjUyOlxcdFxcdHJldHVybiByZXM7XFxuIDY1MzpcXHR9XFxuIDY1NDpcXHQjZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NjozOC41MjUxMzk2MzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAzMDgxMjI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXMgdGhpcyBjaGFuZ2UsIGZpeGluZyBgX19saXN0X2xydV9pbml0YCB3aGVuIGBjZ3JvdXBfZGlzYWJsZT1tZW1vcnlgIGlzIHNldCwgd29ydGggZnV6emluZz8gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqbmF0dXJlKiBvZiB0aGUgY2hhbmdlLiBJcyB0aGlzIGp1c3QgYSBib290LXRpbWUgdGhpbmcsIG9yIGlzIGBfX2xpc3RfbHJ1X2luaXRgIGNhbGxlZCBkdXJpbmcgcnVudGltZT8gQWgsIGl0J3MgY2FsbGVkIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50aW5nLCB3b3JraW5nIHNldCBpbml0aWFsaXphdGlvbiwgYW5kIHNocmlua2VyIGluaXRpYWxpemF0aW9uIC0gc28sIHBvdGVudGlhbGx5ICpydW50aW1lKi4gQW5kIGlmIGBjZ3JvdXBfZGlzYWJsZT1tZW1vcnlgIGlzIHNldCwgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgd2lsbCBiZSB0cnVlIGZvciB0aGUgc3lzdGVtJ3MgKmVudGlyZSogbGlmZXRpbWUuXG5cbk5vdywgZG8gSSBuZWVkIHRvIGZ1enogaXQsIG9yIGlzIHRoaXMgYSBzaW1wbGUgYnVnIGZpeD8gTGV0J3MgY2hlY2sgdGhlIGNyaXRlcmlhLiBPa2F5LCBpdCAqaXNuJ3QqIGEgRG9jdW1lbnRhdGlvbi9LY29uZmlnIGNoYW5nZSwgZGVjb3JhdGl2ZSBsb2dnaW5nLCBvciBjaGFuZ2VzIHRvIG5vbi1mdW5jdGlvbmFsIGNvbnN0YW50cy4gSXQgKmRvZXMqIHRvdWNoIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgbW0vbGlzdF9scnUuY2AuIFRoaXMgKmlzKiByZWFjaGFibGUgaW4gUUVNVSwgc28gaXQgcGFzc2VzIHRoYXQgY2hlY2suXG5cblNvLCAqZG9lcyogaXQgbWFrZSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmc/IE5vdyBpdCdzIGFib3V0IGNoZWNraW5nIHRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBXaGF0IHN5bWJvbHMgYXJlIGludm9sdmVkIGhlcmU/IGBfX2xpc3RfbHJ1X2luaXRgLCBgbWVtY2dfbGlzdF9scnVfYWxsb2NgLCBhbmQgYGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jYCBzZWVtIHJlbGV2YW50LiBJIG5lZWQgdG8gZm9jdXMgb24gKnNwZWNpZmljKiBrZXJuZWwgZnVuY3Rpb25zLCBwcmVmZXJhYmx5IG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdOKAmXMgdGhlIGtleS5cblxuQW5kIHdoYXQgYWJvdXQgYEVuYWJsZUNvbmZpZ3NgPyBUaW1lIHRvIGNoZWNrIGBtbS9LY29uZmlnYCBvciBgaW5pdC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBDT05GSUcgb3B0aW9ucyBpbnZvbHZlZCwgZXNwZWNpYWxseSBhcm91bmQgYENPTkZJR19NRU1DR2AuIEdvdHRhIGJlIHN1cmUgdG8gaW5jbHVkZSBhbnkgbmVlZGVkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncy4gQWxyaWdodCwgdGltZSB0byBnbyBkaWdnaW5nIGluIHRoZSBLY29uZmlnIGZpbGVzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwODYsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0Njo0NC41NTU5NTc4ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODY0MTUzMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjQ3LjE0MjM4MjA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDA3NDI3MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGlzIGNvbmZpZ3VyYXRpb24gaXNzdWUuIExldCdzIHN0YXJ0IHdpdGggdGhlIGZvdW5kYXRpb25hbCBgaW5pdC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDEwODUuIFRoYXQncyBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQg4oCTIEknbSBiZXR0aW5nIHRoYXQncyB3aGVyZSBzb21lIG9mIHRoZSBjb3JlIGRlZmF1bHRzIG9yIHJlbGF0aW9uc2hpcHMgZm9yIHRoaXMgZmVhdHVyZSBhcmUgbGlrZWx5IGRlZmluZWQuIEknbGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucywgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcywgYW5kIGRlZmluaXRlbHkgYW55IGBzZWxlY3RgIG9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB0aGUgYmVoYXZpb3IgSSdtIHNlZWluZy4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3BvdCB0byBnZXQgbXkgYmVhcmluZ3MgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgaW1tZWRpYXRlbHkuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuLi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgcHJldHR5IHdlbGwtc3RydWN0dXJlZCBjb25maWd1cmF0aW9uIGRlZmluaXRpb24sIHBvc3NpYmx5IHVzaW5nIG5lc3RlZCBgaWZgIHN0YXRlbWVudHMgb3Igc29tZSBtb3JlIGNvbXBsZXggbG9naWMuIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjQ5Ljg0MzEyOTg1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcXG4xMDgxOlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA4NDpcXHRcXG4xMDg1OlxcdGNvbmZpZyBNRU1DR1xcbjEwODY6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4NzpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4ODpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODk6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwOTA6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA5MTpcXHRcXHRoZWxwXFxuMTA5MjpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDkzOlxcdFxcbjEwOTQ6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk4OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk5OlxcdFxcdGRlZmF1bHQgeVxcbjExMDA6XFx0XFxuMTEwMTpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMTAyOlxcdFxcdGJvb2xcXG4xMTAzOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTA0OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6NDkuODQzMzE1MjQ5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NTM2NTE1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGBDT05GSUdfTUVNQ0dgIGlzIG5lc3RlZCB3aXRoaW4gdGhlIGBDR1JPVVBTYCBjb25kaXRpb25hbC4gVGhhdCBmZWVscyByaWdodCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIFRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIGRlZmluaXRpdmUgc291cmNlOiBgaW5pdC9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBsaW5lcyAxMDAwIHRocm91Z2ggMTA4NSBzaG91bGQgaG9sZCB0aGUga2V5IGluZm9ybWF0aW9uLiBJJ2xsIHRha2UgYSBsb29rIHRoZXJlIHRvIHNlZSBpZiBJJ20gY29ycmVjdCBhbmQgdW5kZXJzdGFuZCB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6NTEuNTk2OTcwMDU5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA0MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA0MDpcXHRcXHQgIHRoZSBzYW1lIHByb2Nlc3Mgb250byBhIHNpbmdsZSBMYXN0IExldmVsIENhY2hlIChMTEMpIGRvbWFpbiB3aGVuXFxuMTA0MTpcXHRcXHQgIHBvc3NpYmxlLiBUaGlzIGltcHJvdmVzIGNhY2hlIGxvY2FsaXR5IGJ5IGtlZXBpbmcgdGFza3MgdGhhdCBzaGFyZVxcbjEwNDI6XFx0XFx0ICByZXNvdXJjZXMgd2l0aGluIHRoZSBzYW1lIGNhY2hlIGRvbWFpbiwgcmVkdWNpbmcgY2FjaGUgbWlzc2VzIGFuZFxcbjEwNDM6XFx0XFx0ICBsb3dlcmluZyBkYXRhIGFjY2VzcyBsYXRlbmN5LlxcbjEwNDQ6XFx0XFxuMTA0NTpcXHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXFxuMTA0NjpcXHRcXHRib29sIFxcXCJBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFxcXCJcXG4xMDQ3OlxcdFxcdGRlZmF1bHQgeVxcbjEwNDg6XFx0XFx0ZGVwZW5kcyBvbiBOVU1BX0JBTEFOQ0lOR1xcbjEwNDk6XFx0XFx0aGVscFxcbjEwNTA6XFx0XFx0ICBJZiBzZXQsIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyB3aWxsIGJlIGVuYWJsZWQgaWYgcnVubmluZyBvbiBhIE5VTUFcXG4xMDUxOlxcdFxcdCAgbWFjaGluZS5cXG4xMDUyOlxcdFxcbjEwNTM6XFx0Y29uZmlnIFNMQUJfT0JKX0VYVFxcbjEwNTQ6XFx0XFx0Ym9vbFxcbjEwNTU6XFx0XFxuMTA1NjpcXHRtZW51Y29uZmlnIENHUk9VUFNcXG4xMDU3OlxcdFxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG4xMDU4OlxcdFxcdHNlbGVjdCBLRVJORlNcXG4xMDU5OlxcdFxcdGhlbHBcXG4xMDYwOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBncm91cGluZyBzZXRzIG9mIHByb2Nlc3NlcyB0b2dldGhlciwgZm9yXFxuMTA2MTpcXHRcXHQgIHVzZSB3aXRoIHByb2Nlc3MgY29udHJvbCBzdWJzeXN0ZW1zIHN1Y2ggYXMgQ3B1c2V0cywgQ0ZTLCBtZW1vcnlcXG4xMDYyOlxcdFxcdCAgY29udHJvbHMgb3IgZGV2aWNlIGlzb2xhdGlvbi5cXG4xMDYzOlxcdFxcdCAgU2VlXFxuMTA2NDpcXHRcXHRcXHQtIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMucnN0XFx0KENGUylcXG4xMDY1OlxcdFxcdFxcdC0gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvIChmZWF0dXJlcyBmb3IgZ3JvdXBpbmcsIGlzb2xhdGlvblxcbjEwNjY6XFx0XFx0XFx0XFx0XFx0XFx0ICBhbmQgcmVzb3VyY2UgY29udHJvbClcXG4xMDY3OlxcdFxcbjEwNjg6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA2OTpcXHRcXG4xMDcwOlxcdGlmIENHUk9VUFNcXG4xMDcxOlxcdFxcbjEwNzI6XFx0Y29uZmlnIFBBR0VfQ09VTlRFUlxcbjEwNzM6XFx0XFx0Ym9vbFxcbjEwNzQ6XFx0XFxuMTA3NTpcXHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4xMDc2OlxcdFxcdGJvb2wgXFxcIkZhdm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIGxhdGVuY3kgcmVkdWN0aW9uIGJ5IGRlZmF1bHRcXFwiXFxuMTA3NzpcXHRcXHRoZWxwXFxuMTA3ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFxcXCJmYXZvcmR5bm1vZHNcXFwiIG1vdW50IG9wdGlvbiBieSBkZWZhdWx0XFxuMTA3OTpcXHRcXHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcXG4xMDgwOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA4MTpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwODQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjUxLjU5NzE3NjM2OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDg5ODMyMTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIGtlcm5lbCBkZXZlbG9wbWVudDpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCBDb25zdHJ1Y3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBDR1JPVVBTYCBhbmQgYE1FTUNHYCwgd2hpY2ggbWVhbnMgd2UncmUgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGVycml0b3J5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc29tZSBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBvYmplY3QgZmlsZXMgYXJlIGNvbXBpbGVkLiBUbyBzdGFydCwgdGhlIGBtbS9NYWtlZmlsZWAgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEknbSBnb2luZyB0byBjaGVjayBob3cgYGxpc3RfbHJ1Lm9gIGlzIGJ1aWx0LiBJdCdzIHRpbWUgdG8gaW52ZXN0aWdhdGUgdGhlIGJ1aWxkIHByb2Nlc3MhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTYyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0Njo1My42ODcwMTIyNDRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDY3ODM4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaXN0X2xydVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTU2LVxcdFxcdFxcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1NzpcXHRcXHRcXHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcXFxcbm1tL01ha2VmaWxlLTU4LVxcdFxcdFxcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0Njo1My44MjE2OTk4NDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU3MDQ2MzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBsaXN0X2xydWAgT2JqZWN0IEZpbGUgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gYGxpc3RfbHJ1Lm9gIGlzIGRlZmluaXRlbHkgZGVjbGFyZWQgYXMgYG9iai15YCwgbWVhbmluZyBpdCdzIHNsYXRlZCB0byBiZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIFRoYXQncyBhIGtleSBmaXJzdCBwb2ludCB0byBub3RlLiBUaGVuLCBJIHNlZSB0aGF0IHRoZSBgX19saXN0X2xydV9pbml0YCBmdW5jdGlvbiBjb250YWlucyBhbiBgI2lmZGVmIENPTkZJR19NRU1DR2AgYmxvY2suIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYE1FTUNHYCBhcyBhIGRlcGVuZGVuY3ksIGFuZCB3ZSBrbm93IGBNRU1DR2AgaXRzZWxmIHJlbGllcyBvbiBgQ0dST1VQU2AuIFRoZXJlZm9yZSwgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbiwgdGhlIGNvZGUgd2l0aGluIHRoYXQgc3BlY2lmaWMgYCNpZmRlZmAgYmxvY2sgd2lsbCBiZSBjb21waWxlZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2UtY2FzZXMgcmVsYXRlZCB0byBgbGlzdF9scnVgIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBfX2xpc3RfbHJ1X2luaXRgLiBUaGF0IHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIHNlbnNlIG9mIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoLiBJIGFsc28gd2FudCB0byBpZGVudGlmeSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbW0vbGlzdF9scnUuY2AgdG8gc2VlIGhvdyB0aGV5J3JlIGV4cG9zZWQgYW5kIGhvdyB0aGUgbW9kdWxlIGludGVyYWN0cyB3aXRoIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiBob3cgdGhpcyBtb2R1bGUgZnVuY3Rpb25zIGFuZCB3aGVyZSBpdCBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI3MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjU2LjM5MjE2ODg5MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMDA4Nzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2xpc3RfbHJ1X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzPTY5PSAgICBwdWIoY3JhdGUpIGZuIHJlZ2lzdGVyKFxcdTAwMjYnc3RhdGljIHNlbGYsIG5hbWU6IFxcdTAwMjZDU3RyKSAtXFx1MDAzZSBSZXN1bHRcXHUwMDNjKClcXHUwMDNlIHtcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5ycy03Ni0gICAgICAgIC8vIFNBRkVUWTogVGhlIGZpZWxkIGlzIG5vdCB5ZXQgdXNlZCwgc28gd2UgY2FuIGluaXRpYWxpemUgaXQuXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzOjc3OiAgICAgICAgbGV0IHJldCA9IHVuc2FmZSB7IGJpbmRpbmdzOjpfX2xpc3RfbHJ1X2luaXQoc2VsZi5saXN0X2xydS5nZXQoKSwgZmFsc2UsIHB0cjo6bnVsbF9tdXQoKSkgfTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnMtNzgtICAgICAgICBpZiByZXQgIT0gMCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg9NjQ9dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KTtcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg6NjU6aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSxcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNjYtXFx0XFx0ICAgIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTY4LSNkZWZpbmUgbGlzdF9scnVfaW5pdChscnUpXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDo2OTpcXHRfX2xpc3RfbHJ1X2luaXQoKGxydSksIGZhbHNlLCBOVUxMKVxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC03MC0jZGVmaW5lIGxpc3RfbHJ1X2luaXRfbWVtY2cobHJ1LCBzaHJpbmtlcilcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjcxOlxcdF9fbGlzdF9scnVfaW5pdCgobHJ1KSwgdHJ1ZSwgc2hyaW5rZXIpXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTcyLVxcbi0tXFxubW0vbGlzdF9scnUuYz02NTk9c3RhdGljIHZvaWQgbWVtY2dfZGVzdHJveV9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjYzLVxcbm1tL2xpc3RfbHJ1LmM6NjY0OmludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxubW0vbGlzdF9scnUuYy02NjUte1xcbi0tXFxubW0vbGlzdF9scnUuYy02ODktfVxcbm1tL2xpc3RfbHJ1LmM6NjkwOkVYUE9SVF9TWU1CT0xfR1BMKF9fbGlzdF9scnVfaW5pdCk7XFxubW0vbGlzdF9scnUuYy02OTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjU4LjgyMjI2ODMxMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjE0OTAzNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTGlzdCBMUlUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgbGlzdF9scnVgIGluaXRpYWxpemF0aW9uIGNvZGUuIEl0IGxvb2tzIGxpa2UgYF9fbGlzdF9scnVfaW5pdGAgaXMgdGhlIGNvcmUgZnVuY3Rpb24sIGNhbGxlZCB0aHJvdWdoIGBsaXN0X2xydV9pbml0YCBhbmQgYGxpc3RfbHJ1X2luaXRfbWVtY2dgLiBUaGUgaW50ZXJlc3RpbmcgcG9pbnQgaGVyZSBpcyB0aGUgYGxpc3RfbHJ1X2luaXRfbWVtY2dgIHZhcmlhbnQsIHNvIGxldCdzIGRpZyBpbnRvIGl0cyB1c2FnZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGBsaXN0X2xydV9pbml0X21lbWNnYCBnZXRzIGNhbGxlZC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gaWRlbnRpZnkgdGhlIGNhbGxlcnMgb2YgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGludGVncmF0aW9uIHdvcmtzIGluIHRoaXMgYGxpc3RfbHJ1YCBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNTIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NzowMi4wMzcxNzYzMjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTI0OTk1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGlzdF9scnVfaW5pdF9tZW1jZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZnMvbmZzNDJ4YXR0ci5jPTk4MD1zdGF0aWMgaW50IF9faW5pdCBuZnM0X3hhdHRyX3Nocmlua2VyX2luaXQoc3RydWN0IHNocmlua2VyICoqc2hyaW5rZXIsXFxuLS1cXG5mcy9uZnMvbmZzNDJ4YXR0ci5jLTk5MC1cXG5mcy9uZnMvbmZzNDJ4YXR0ci5jOjk5MTpcXHRyZXQgPSBsaXN0X2xydV9pbml0X21lbWNnKGxydSwgKnNocmlua2VyKTtcXG5mcy9uZnMvbmZzNDJ4YXR0ci5jLTk5Mi1cXHRpZiAocmV0KSB7XFxuLS1cXG5mcy9zdXBlci5jPTMyMz1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLFxcbi0tXFxuZnMvc3VwZXIuYy0zOTYtXFxuZnMvc3VwZXIuYzozOTc6XFx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coXFx1MDAyNnMtXFx1MDAzZXNfZGVudHJ5X2xydSwgcy1cXHUwMDNlc19zaHJpbmspKVxcbmZzL3N1cGVyLmMtMzk4LVxcdFxcdGdvdG8gZmFpbDtcXG5mcy9zdXBlci5jOjM5OTpcXHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcXHUwMDI2cy1cXHUwMDNlc19pbm9kZV9scnUsIHMtXFx1MDAzZXNfc2hyaW5rKSlcXG5mcy9zdXBlci5jLTQwMC1cXHRcXHRnb3RvIGZhaWw7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg9NjU9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC02OS1cXHRfX2xpc3RfbHJ1X2luaXQoKGxydSksIGZhbHNlLCBOVUxMKVxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDo3MDojZGVmaW5lIGxpc3RfbHJ1X2luaXRfbWVtY2cobHJ1LCBzaHJpbmtlcilcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTcxLVxcdF9fbGlzdF9scnVfaW5pdCgobHJ1KSwgdHJ1ZSwgc2hyaW5rZXIpXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTcyLVxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDo3MzpzdGF0aWMgaW5saW5lIGludCBsaXN0X2xydV9pbml0X21lbWNnX2tleShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNzQtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC03OC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg6Nzk6XFx0cmV0dXJuIGxpc3RfbHJ1X2luaXRfbWVtY2cobHJ1LCBzaHJpbmtlcik7XFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTgwLX1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMDcxLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTA3MjpcXHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZ19rZXkoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSxcXG5tbS9odWdlX21lbW9yeS5jLTEwNzMtXFx0XFx0XFx0XFx0ICAgIGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLFxcbi0tXFxubW0vc2htZW0uYz01MTU3PXN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5tbS9zaG1lbS5jLTUyMzctI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmM6NTIzODpcXHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBzYi1cXHUwMDNlc19zaHJpbmspKVxcbm1tL3NobWVtLmMtNTIzOS1cXHRcXHRnb3RvIGZhaWxlZDtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz03OTM9c3RhdGljIGludCBfX2luaXQgd29ya2luZ3NldF9pbml0KHZvaWQpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtODI0LVxcbm1tL3dvcmtpbmdzZXQuYzo4MjU6XFx0cmV0ID0gbGlzdF9scnVfaW5pdF9tZW1jZ19rZXkoXFx1MDAyNnNoYWRvd19ub2Rlcywgd29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXIsXFxubW0vd29ya2luZ3NldC5jLTgyNi1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2hhZG93X25vZGVzX2tleSk7XFxuLS1cXG5tbS96c3dhcC5jPTE3NTg9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xNzgzLVxcdFxcdGdvdG8gc2hyaW5rZXJfZmFpbDtcXG5tbS96c3dhcC5jOjE3ODQ6XFx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCB6c3dhcF9zaHJpbmtlcikpXFxubW0venN3YXAuYy0xNzg1LVxcdFxcdGdvdG8gbHJ1X2ZhaWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjA0LjYyOTY4MzEyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyOTk0Njg1ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpbmFsIFRob3VnaHRzIG9uIGBfX2xpc3RfbHJ1X2luaXRgIGFuZCBpdHMgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgX19saXN0X2xydV9pbml0YCBmdW5jdGlvbi4gSXQncyBjYWxsZWQgaW4gYSBmZXcga2V5IHBsYWNlcywgbGlrZSB3aGVuIGZpbGVzeXN0ZW1zIGFyZSBtb3VudGVkIHdpdGggYGFsbG9jX3N1cGVyYCBhbmQgZHVyaW5nIHpzd2FwIHNldHVwLiBUaGUgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiB0aGF0IHN5bWJvbC5cblxuV2UndmUgZ290IGBXb3J0aEZ1enppbmdgIHNldCB0byB0cnVlLCB3aGljaCBJIGFncmVlIHdpdGguIExldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYWxsIHRoZSBiYXNlcyBjb3ZlcmVkIGJlZm9yZSB3ZSBzdWJtaXQgdGhpcy5cblxuVGhlIHBhdGNoJ3MgbG9naWMgaXMgc291bmQuIEl0IGVzc2VudGlhbGx5IGVuc3VyZXMgdGhhdCBpZiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQgdmlhIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgLCB0aGUgY29kZSBhdm9pZHMgaW5pdGlhbGl6aW5nIHBlci1tZW1jZyBMUlUgbGlzdHMgd2l0aGluIGBfX2xpc3RfbHJ1X2luaXRgLCB3aGljaCBpcyB0aGUgY29ycmVjdCBiZWhhdmlvci4gVGhhdOKAmXMgYSBnb29kIG1vZGlmaWNhdGlvbiB0byBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCDigJMgdG91Y2hpbmcgbGlzdF9scnVzIGlzIGFsd2F5cyBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb2YgZmlsZXN5c3RlbXMsIGFuZCB0aGUgbG9naWMgaXMgc291bmQuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhcmUsIGFwcHJvcHJpYXRlbHksIGBbXCJfX2xpc3RfbHJ1X2luaXRcIl1gLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBzcG90IG9uLCBpbmNsdWRpbmcgYm90aCBgTUVNQ0dgIGFuZCBgQ0dST1VQU2AuIEnigJltIGNvbmZpZGVudCB3ZSd2ZSBnb3QgYSBzb2xpZCByYXRpb25hbGUuIFdlJ3JlIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTA5LCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NzoxNy42MjQzNzIxNjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQyODYxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19saXN0X2xydV9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBfX2xpc3RfbHJ1X2luaXQoKSB0byBlbnN1cmUgbWVtY2dfYXdhcmUgaXMgc2V0IHRvIGZhbHNlIHdoZW4gbWVtX2Nncm91cF9kaXNhYmxlZCgpIGlzIHRydWUsIHByZXZlbnRpbmcgaW5hcHByb3ByaWF0ZSBpbml0aWFsaXphdGlvbiBvZiBwZXItbWVtY2cgbGlzdCBMUlVzIHdoZW4gbWVtb3J5IGNncm91cHMgYXJlIGRpc2FibGVkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvZGUgaW4ga2VybmVsIGxpc3RfbHJ1IGluaXRpYWxpemF0aW9uIChlLmcuLCBkdXJpbmcgZmlsZXN5c3RlbSBtb3VudCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2xpc3RfbHJ1X2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIF9fbGlzdF9scnVfaW5pdCgpIHRvIGVuc3VyZSBtZW1jZ19hd2FyZSBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgaXMgdHJ1ZSwgcHJldmVudGluZyBpbmFwcHJvcHJpYXRlIGluaXRpYWxpemF0aW9uIG9mIHBlci1tZW1jZyBsaXN0IExSVXMgd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29kZSBpbiBrZXJuZWwgbGlzdF9scnUgaW5pdGlhbGl6YXRpb24gKGUuZy4sIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDc6MTcuNzQ4NjY5MDk1WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA3Njc3NTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjE3Ljc0OTgzMjQ1NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIyMDc1NjA3Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGFsb25nc2lkZSBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHNvIHRoYXQgYG1lbWNnX2F3YXJlYCBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQgYXQgYm9vdC4gVGhpcyBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgY29uZmlndXJhdGlvbiBjaGVjayBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBzdHJ1Y3QgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IG9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNjJkOTI2ZDg2YmIyZTY2ZDRhODA4NjA3YTA2MGQ0MjZhZjBiNTRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwNDo0NjowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jXG5pbmRleCAzNjY2MmQwMmZmOTYzLi5hNDUyMmNhOTNlYmNiIDEwMDY0NFxuLS0tIGEvbW0vbGlzdF9scnUuY1xuKysrIGIvbW0vbGlzdF9scnUuY1xuQEAgLTY3MSw3ICs2NzEsNyBAQCBpbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNoclxuIFx0ZWxzZVxuIFx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcbiBcbi1cdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbitcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4gXHRcdG1lbWNnX2F3YXJlID0gZmFsc2U7XG4gI2VuZGlmXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NzoxNy43NDk4MzUzOTVaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc4NzE5MjcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdWJ0bGUgQ2hhbmdlIGluIGBsaXN0X2xydS5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9saXN0X2xydS5jYC4gSXQncyBhIHNtYWxsIGNoYW5nZSwgYnV0IHBvdGVudGlhbGx5IGltcG9ydGFudC4gTGV0J3Mgc2VlLi4uIHRoZSBjb3JlIG9mIGl0IGlzIGFyb3VuZCBsaW5lIDY3MSwgd2hlcmUgaXQncyBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCB0aGUgbWVtb3J5IGNncm91cCBzdHVmZiBpcyBkaXNhYmxlZC4gUHJldmlvdXNseSwgaXQgd2FzIG9ubHkgY2hlY2tpbmcgYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYC4gTm93LCBpdCdzIGNoZWNraW5nIGBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgLlxuXG5BaCwgSSBzZWUuIFRoZXkncmUgYnJvYWRlbmluZyB0aGUgY29uZGl0aW9uIGZvciBkaXNhYmxpbmcgbWVtb3J5IGNncm91cCBhd2FyZW5lc3Mgd2l0aGluIHRoZSBgbGlzdF9scnVgIGNvZGUuICBPcmlnaW5hbGx5LCBpdCBvbmx5IGFjY291bnRlZCBmb3IgdGhlIGtlcm5lbCBtZW1vcnkgY2dyb3VwIGJlaW5nIGRpc2FibGVkLiBOb3csIGl0J2xsIGFsc28gZGlzYWJsZSBhd2FyZW5lc3MgaWYgdGhlIGVudGlyZSBtZW1vcnkgY2dyb3VwIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBnb29kIG1vdmU7IHRoZSBjb2RlIHNob3VsZCBhbGlnbiB3aXRoIHRoZSBnbG9iYWwgc2V0dGluZy4gVGhpcyBzZWVtcyBsaWtlIGEgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUsIG1ha2luZyBpdCBsZXNzIHByb25lIHRvIGNvcm5lciBjYXNlcyBvciBtaXNjb25maWd1cmF0aW9ucyB3aGVyZSBwYXJ0IG9mIHRoZSBtZW1jZyBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgYnV0IHRoZSBrZXJuZWwgbWVtb3J5IHBhcnQgaXNuJ3QuIEl0IHdpbGwgbWFrZSB0aGUgY29kZSBtb3JlIHJvYnVzdCBhZ2FpbnN0IGluY29ycmVjdCBjb25maWd1cmF0aW9ucy4gTmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjIyLjUzNzAzMDU1N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9saXN0X2xydS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY1MDpcXHRcXHRyZXMgPSBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBscnUsIGdmcCk7XFxuIDY1MTpcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIDY1MjpcXHRcXHRyZXR1cm4gcmVzO1xcbiA2NTM6XFx0fVxcbiA2NTQ6XFx0I2Vsc2VcXG4gNjU1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxcbiA2NTY6XFx0e1xcbiA2NTc6XFx0fVxcbiA2NTg6XFx0XFxuIDY1OTpcXHRzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbiA2NjA6XFx0e1xcbiA2NjE6XFx0fVxcbiA2NjI6XFx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiA2NjM6XFx0XFxuIDY2NDpcXHRpbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbiA2NjU6XFx0e1xcbiA2NjY6XFx0XFx0aW50IGk7XFxuIDY2NzpcXHRcXG4gNjY4OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gNjY5OlxcdFxcdGlmIChzaHJpbmtlcilcXG4gNjcwOlxcdFxcdFxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cXHUwMDNlaWQ7XFxuIDY3MTpcXHRcXHRlbHNlXFxuIDY3MjpcXHRcXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gLTE7XFxuIDY3MzpcXHRcXG4gNjc0OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXFxuIDY3NTpcXHRcXHRcXHRtZW1jZ19hd2FyZSA9IGZhbHNlO1xcbiA2NzY6XFx0I2VuZGlmXFxuIDY3NzpcXHRcXG4gNjc4OlxcdFxcdGxydS1cXHUwMDNlbm9kZSA9IGt6YWxsb2Nfb2JqcygqbHJ1LVxcdTAwM2Vub2RlLCBucl9ub2RlX2lkcyk7XFxuIDY3OTpcXHRcXHRpZiAoIWxydS1cXHUwMDNlbm9kZSlcXG4gNjgwOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA2ODE6XFx0XFxuIDY4MjpcXHRcXHRmb3JfZWFjaF9ub2RlKGkpXFxuIDY4MzpcXHRcXHRcXHRpbml0X29uZV9scnUobHJ1LCBcXHUwMDI2bHJ1LVxcdTAwM2Vub2RlW2ldLmxydSk7XFxuIDY4NDpcXHRcXG4gNjg1OlxcdFxcdG1lbWNnX2luaXRfbGlzdF9scnUobHJ1LCBtZW1jZ19hd2FyZSk7XFxuIDY4NjpcXHRcXHRsaXN0X2xydV9yZWdpc3RlcihscnUpO1xcbiA2ODc6XFx0XFxuIDY4ODpcXHRcXHRyZXR1cm4gMDtcXG4gNjg5OlxcdH1cXG4gNjkwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKF9fbGlzdF9scnVfaW5pdCk7XFxuIDY5MTpcXHRcXG4gNjkyOlxcdHZvaWQgbGlzdF9scnVfZGVzdHJveShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4gNjkzOlxcdHtcXG4gNjk0OlxcdFxcdC8qIEFscmVhZHkgZGVzdHJveWVkIG9yIG5vdCB5ZXQgaW5pdGlhbGl6ZWQ/ICovXFxuIDY5NTpcXHRcXHRpZiAoIWxydS1cXHUwMDNlbm9kZSlcXG4gNjk2OlxcdFxcdFxcdHJldHVybjtcXG4gNjk3OlxcdFxcbiA2OTg6XFx0XFx0bGlzdF9scnVfdW5yZWdpc3RlcihscnUpO1xcbiA2OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjIyLjUzNzEyNTA2N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDgwMTAzNTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTGF0ZXN0IFBhdGNoIGZvciBMaXN0IExSVSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UgaW4gYF9fbGlzdF9scnVfaW5pdCgpYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIGNoZWNraW5nIGlmIGBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKWAgd2FzIHRydWUgdG8gc2V0IGBtZW1jZ19hd2FyZWAgdG8gZmFsc2UuIE5vdywgdGhlIGxvZ2ljIGhhcyBiZWVuIGV4cGFuZGVkOyBpdCBjaGVja3MgaWYgKmVpdGhlciogYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgKm9yKiBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIGlzIHRydWUgYmVmb3JlIGRpc2FibGluZyBgbWVtY2dfYXdhcmVgLiBUaGF0J3MgYSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IGRpc3RpbmN0aW9uLCBvcGVuaW5nIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBkaXNhYmxpbmcgbWVtb3J5IGNncm91cCBhd2FyZW5lc3MgdW5kZXIgbW9yZSBjaXJjdW1zdGFuY2VzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvc2UgbmV3IGNvbmRpdGlvbnMgYmV0dGVyLlxuXG5OZXh0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGhpZ2hlci1sZXZlbCBjb2RlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgbWVtY2dfaW5pdF9saXN0X2xydWAgbmV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSByZWFsIGNoYW5nZSBvZiBiZWhhdmlvciwgb3IgaWYgdGhpcyBpcyBqdXN0IGEgcmVmYWN0b3JpbmcgdGhhdCBtYWtlcyB0aGUgY29kZSBjbGVhbmVyLiBQZXJoYXBzIHRoaXMgaGVscHMgdG8gbWFuYWdlIGRpZmZlcmVudCBjZ3JvdXAgY29uZmlndXJhdGlvbnMsIG9yIGl0IHNpbXBseSBjb25zb2xpZGF0ZXMgY2hlY2tzLiBUaGUgbmV3IGNoZWNrIG1heSBoYXZlIGNvbnNlcXVlbmNlcyBvbiB0aGUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cywgc28gSSBuZWVkIHRvIGV4cGxvcmUgaXRzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMwMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjI1LjAxNzIzMjA1MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbGlzdF9scnUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTA6XFx0XFx0XFx0ICogS2VlcCBmaW5kaW5nIHRoZSBmYXJlc3QgcGFyZW50IHRoYXQgd2Fzbid0IHBvcHVsYXRlZFxcbiA1OTE6XFx0XFx0XFx0ICogdW50aWwgZm91bmQgbWVtY2cgaXRzZWxmLlxcbiA1OTI6XFx0XFx0XFx0ICovXFxuIDU5MzpcXHRcXHRcXHRwb3MgPSBtZW1jZztcXG4gNTk0OlxcdFxcdFxcdHBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKHBvcyk7XFxuIDU5NTpcXHRcXHRcXHR3aGlsZSAoIW1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChwYXJlbnQsIGxydSkpIHtcXG4gNTk2OlxcdFxcdFxcdFxcdHBvcyA9IHBhcmVudDtcXG4gNTk3OlxcdFxcdFxcdFxcdHBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKHBvcyk7XFxuIDU5ODpcXHRcXHRcXHR9XFxuIDU5OTpcXHRcXG4gNjAwOlxcdFxcdFxcdGlmICghbWxydSkge1xcbiA2MDE6XFx0XFx0XFx0XFx0bWxydSA9IG1lbWNnX2luaXRfbGlzdF9scnVfb25lKGxydSwgZ2ZwKTtcXG4gNjAyOlxcdFxcdFxcdFxcdGlmICghbWxydSlcXG4gNjAzOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA2MDQ6XFx0XFx0XFx0fVxcbiA2MDU6XFx0XFx0XFx0eGFzX3NldChcXHUwMDI2eGFzLCBwb3MtXFx1MDAzZWttZW1jZ19pZCk7XFxuIDYwNjpcXHRcXHRcXHRkbyB7XFxuIDYwNzpcXHRcXHRcXHRcXHR4YXNfbG9ja19pcnFzYXZlKFxcdTAwMjZ4YXMsIGZsYWdzKTtcXG4gNjA4OlxcdFxcdFxcdFxcdGlmICgheGFzX2xvYWQoXFx1MDAyNnhhcykgXFx1MDAyNlxcdTAwMjYgIWNzc19pc19keWluZyhcXHUwMDI2cG9zLVxcdTAwM2Vjc3MpKSB7XFxuIDYwOTpcXHRcXHRcXHRcXHRcXHR4YXNfc3RvcmUoXFx1MDAyNnhhcywgbWxydSk7XFxuIDYxMDpcXHRcXHRcXHRcXHRcXHRpZiAoIXhhc19lcnJvcihcXHUwMDI2eGFzKSlcXG4gNjExOlxcdFxcdFxcdFxcdFxcdFxcdG1scnUgPSBOVUxMO1xcbiA2MTI6XFx0XFx0XFx0XFx0fVxcbiA2MTM6XFx0XFx0XFx0XFx0eGFzX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ4YXMsIGZsYWdzKTtcXG4gNjE0OlxcdFxcdFxcdH0gd2hpbGUgKHhhc19ub21lbShcXHUwMDI2eGFzLCBnZnApKTtcXG4gNjE1OlxcdFxcdH0gd2hpbGUgKHBvcyAhPSBtZW1jZyBcXHUwMDI2XFx1MDAyNiAhY3NzX2lzX2R5aW5nKFxcdTAwMjZwb3MtXFx1MDAzZWNzcykpO1xcbiA2MTY6XFx0XFxuIDYxNzpcXHRcXHRpZiAodW5saWtlbHkobWxydSkpXFxuIDYxODpcXHRcXHRcXHRrZnJlZShtbHJ1KTtcXG4gNjE5OlxcdFxcbiA2MjA6XFx0XFx0cmV0dXJuIHhhc19lcnJvcihcXHUwMDI2eGFzKTtcXG4gNjIxOlxcdH1cXG4gNjIyOlxcdFxcbiA2MjM6XFx0aW50IG1lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuIDYyNDpcXHRcXHRcXHRcXHQgZ2ZwX3QgZ2ZwKVxcbiA2MjU6XFx0e1xcbiA2MjY6XFx0XFx0aWYgKCFsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpIHx8IG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChtZW1jZywgbHJ1KSlcXG4gNjI3OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2Mjg6XFx0XFx0cmV0dXJuIF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcXG4gNjI5OlxcdH1cXG4gNjMwOlxcdFxcbiA2MzE6XFx0aW50IGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbiA2MzI6XFx0XFx0XFx0XFx0ICAgICAgIGdmcF90IGdmcClcXG4gNjMzOlxcdHtcXG4gNjM0OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4gNjM1OlxcdFxcdGludCByZXM7XFxuIDYzNjpcXHRcXG4gNjM3OlxcdFxcdGlmICghbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSlcXG4gNjM4OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2Mzk6XFx0XFxuIDY0MDpcXHRcXHQvKiBGYXN0IHBhdGggd2hlbiBsaXN0X2xydSBoZWFkcyBhbHJlYWR5IGV4aXN0ICovXFxuIDY0MTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDY0MjpcXHRcXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG4gNjQzOlxcdFxcdHJlcyA9IG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChtZW1jZywgbHJ1KTtcXG4gNjQ0OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA2NDU6XFx0XFx0aWYgKGxpa2VseShyZXMpKVxcbiA2NDY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY0NzpcXHRcXG4gNjQ4OlxcdFxcdC8qIEFsbG9jYXRpb24gbWF5IGJsb2NrLCBwaW4gdGhlIG1lbWNnICovXFxuIDY0OTpcXHRcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NzoyNS4wMTczMzc2NzFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcwMzk0NTQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIGBtZW1jZ19pbml0X2xpc3RfbHJ1YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBtZW1jZ19pbml0X2xpc3RfbHJ1YC4gVGhpcyBmdW5jdGlvbiBuYW1lIGZlZWxzIHNpZ25pZmljYW50IOKAkyBsaWtlbHkgcmVsYXRlZCB0byBpbml0aWFsaXphdGlvbiwgcG9zc2libHkgd2l0aGluIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIHN1YnN5c3RlbSwgYW5kIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGxpc3QgTFJVcyAoTGVhc3QgUmVjZW50bHkgVXNlZCBsaXN0cykuIEtub3dpbmcgaG93IHRoaXMgZnVuY3Rpb24gYmVoYXZlcyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG1lbWNnIG1lbW9yeSBtYW5hZ2VtZW50IGZsb3cgZHVyaW5nIGJvb3Qgb3IgbW9kdWxlIGxvYWQsIGRlcGVuZGluZyBvbiBpdHMgdXNhZ2UuIFRoZSBzcGVjaWZpYyBMUlUgaW1wbGVtZW50YXRpb24gaXMgYWxzbyBvZiBoaWdoIGludGVyZXN0LiBTbywgbGV0IG1lIGdldCB0aGF0IGRlZmluaXRpb24gYW5kIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjIwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NzoyNi43MjEyODU4ODNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2xpc3RfbHJ1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTUwOlxcdFxcdFxcdCAqL1xcbiA1NTE6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZShpKVxcbiA1NTI6XFx0XFx0XFx0XFx0bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKGxydSwgaSwgXFx1MDAyNm1scnUtXFx1MDAzZW5vZGVbaV0sIHBhcmVudCk7XFxuIDU1MzpcXHRcXG4gNTU0OlxcdFxcdFxcdHhhX2VyYXNlX2lycShcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtY2ctXFx1MDAzZWttZW1jZ19pZCk7XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdFxcdC8qXFxuIDU1NzpcXHRcXHRcXHQgKiBIZXJlIGFsbCBsaXN0X2xydXMgY29ycmVzcG9uZGluZyB0byB0aGUgY2dyb3VwIGFyZSBndWFyYW50ZWVkXFxuIDU1ODpcXHRcXHRcXHQgKiB0byByZW1haW4gZW1wdHksIHdlIGNhbiBzYWZlbHkgZnJlZSB0aGlzIGxydSwgYW55IGZ1cnRoZXJcXG4gNTU5OlxcdFxcdFxcdCAqIG1lbWNnX2xpc3RfbHJ1X2FsbG9jKCkgY2FsbCB3aWxsIHNpbXBseSBiYWlsIG91dC5cXG4gNTYwOlxcdFxcdFxcdCAqL1xcbiA1NjE6XFx0XFx0XFx0a3ZmcmVlX3JjdShtbHJ1LCByY3UpO1xcbiA1NjI6XFx0XFx0fVxcbiA1NjM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X2xydXNfbXV0ZXgpO1xcbiA1NjQ6XFx0fVxcbiA1NjU6XFx0XFxuIDU2NjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gNTY3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4gNTY4OlxcdHtcXG4gNTY5OlxcdFxcdGludCBpZHggPSBtZW1jZy1cXHUwMDNla21lbWNnX2lkO1xcbiA1NzA6XFx0XFxuIDU3MTpcXHRcXHRyZXR1cm4gaWR4IFxcdTAwM2MgMCB8fCB4YV9sb2FkKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBpZHgpO1xcbiA1NzI6XFx0fVxcbiA1NzM6XFx0XFxuIDU3NDpcXHRzdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiA1NzU6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9scnUgKmxydSwgZ2ZwX3QgZ2ZwKVxcbiA1NzY6XFx0e1xcbiA1Nzc6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gNTc4OlxcdFxcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9IE5VTEw7XFxuIDU3OTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcG9zLCAqcGFyZW50O1xcbiA1ODA6XFx0XFx0WEFfU1RBVEUoeGFzLCBcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgMCk7XFxuIDU4MTpcXHRcXG4gNTgyOlxcdFxcdGdmcCBcXHUwMDI2PSBHRlBfUkVDTEFJTV9NQVNLO1xcbiA1ODM6XFx0XFx0LypcXG4gNTg0OlxcdFxcdCAqIEJlY2F1c2UgdGhlIGxpc3RfbHJ1IGNhbiBiZSByZXBhcmVudGVkIHRvIHRoZSBwYXJlbnQgY2dyb3VwJ3NcXG4gNTg1OlxcdFxcdCAqIGxpc3RfbHJ1LCB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhpcyBjZ3JvdXAgYW5kIGFsbCBpdHNcXG4gNTg2OlxcdFxcdCAqIGFuY2VzdG9ycyBoYXZlIGFsbG9jYXRlZCBsaXN0X2xydV9tZW1jZy5cXG4gNTg3OlxcdFxcdCAqL1xcbiA1ODg6XFx0XFx0ZG8ge1xcbiA1ODk6XFx0XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDc6MjYuNzIxMzkzNDkzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjI1MzcyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRob3NlIGxpbmVzIGluIGBtbS9saXN0X2xydS5jYDpcblxuKipBbmFseXppbmcgYG1tL2xpc3RfbHJ1LmNgKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBtbS9saXN0X2xydS5jYC4gVGhlIGZpcnN0IHRoaW5nIEkgYWx3YXlzIGRvIGlzIGdldCBhIGZlZWwgZm9yIHRoZSBmaWxlJ3MgcHVycG9zZS4gYGxpc3RfbHJ1YCBzdWdnZXN0cyBhIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgY2FjaGUsIGltcGxlbWVudGVkIHVzaW5nIGxpbmtlZCBsaXN0cy4gR2l2ZW4gaXRzIGxvY2F0aW9uIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBkaXJlY3RvcnkgKGBtbWApLCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHBhZ2UgY2FjaGluZyBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkncmUgaGFuZGxpbmcgZXZpY3Rpb24gYW5kIGFjY2VzcyB0cmFja2luZy4gSSdsbCBwcm9iYWJseSB3YW50IHRvIGxvb2sgYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBmaXJzdCwgdGhlIGBsaXN0X2hlYWRgIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5J3JlIHVzZWQuIFRoZW4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGxpc3QgaXMgYmVpbmcgbWFpbnRhaW5lZCBhbmQgbG9vayBmb3IgdGhlIGludGVyZXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBsaXN0X2xydV9hZGRgLCBgbGlzdF9scnVfZ2V0YCBhbmQgYGxpc3RfbHJ1X2RlbGAgdG8gc2VlIGhvdyB0aGUgZWxlbWVudHMgYXJlIGFkZGVkLCBhY2Nlc3NlZCBhbmQgZGVsZXRlZCBmcm9tIHRoZSBMUlUgbGlzdCwgYXMgd2VsbCBhcyB0aGUgZXZpY3Rpb24gcHJvY2Vzcy4gQW5kLCBJIGFzc3VtZSwgdGhlcmUgbWF5IGJlIGxvY2tzIGluIHBsYWNlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIGZvciB0aGVtLiBBZnRlciB0aGF0LCBJIHdpbGwgdHJhY2UgdGhlIHBhdGhzLCBob3cgdGhlIHBhZ2VzIGFyZSBiZWluZyBoYW5kbGVkLCBob3cgaXQgaXMgaW1wbGVtZW50ZWQgYW5kIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjI4Ljk0MzkzODEyOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbGlzdF9scnUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjA6XFx0XFxuIDUyMTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZHN0LVxcdTAwM2Vsb2NrKTtcXG4gNTIyOlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c3JjLVxcdTAwM2Vsb2NrKTtcXG4gNTIzOlxcdH1cXG4gNTI0OlxcdFxcbiA1MjU6XFx0dm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbiA1MjY6XFx0e1xcbiA1Mjc6XFx0XFx0c3RydWN0IGxpc3RfbHJ1ICpscnU7XFxuIDUyODpcXHRcXHRpbnQgaTtcXG4gNTI5OlxcdFxcbiA1MzA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bGlzdF9scnVzX211dGV4KTtcXG4gNTMxOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobHJ1LCBcXHUwMDI2bWVtY2dfbGlzdF9scnVzLCBsaXN0KSB7XFxuIDUzMjpcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnU7XFxuIDUzMzpcXHRcXG4gNTM0OlxcdFxcdFxcdC8qXFxuIDUzNTpcXHRcXHRcXHQgKiBjc3NfaXNfZHlpbmcoKSBjaGVjayBpbiBtZW1jZ19saXN0X2xydV9hbGxvYygpIGF2b2lkc1xcbiA1MzY6XFx0XFx0XFx0ICogYWxsb2NhdGluZyBhIG5ldyBtbHJ1IHNpbmNlIENTU19EWUlORyBpcyBhbHJlYWR5IHNldCBmb3IgdGhpc1xcbiA1Mzc6XFx0XFx0XFx0ICogbWVtY2cgYSByY3UgZ3JhY2UgcGVyaW9kIGFnby5cXG4gNTM4OlxcdFxcdFxcdCAqL1xcbiA1Mzk6XFx0XFx0XFx0bWxydSA9IHhhX2xvYWQoXFx1MDAyNmxydS1cXHUwMDNleGEsIG1lbWNnLVxcdTAwM2VrbWVtY2dfaWQpO1xcbiA1NDA6XFx0XFx0XFx0aWYgKCFtbHJ1KVxcbiA1NDE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDU0MjpcXHRcXG4gNTQzOlxcdFxcdFxcdC8qXFxuIDU0NDpcXHRcXHRcXHQgKiBSZXBhcmVudCBlYWNoIHBlci1ub2RlIGxpc3QgYW5kIG1hcmsgdGhlIGNoaWxkIGRlYWRcXG4gNTQ1OlxcdFxcdFxcdCAqIChMT05HX01JTikgYmVmb3JlIGNsZWFyaW5nIHhhcnJheSBlbnRyeSBvdGhlcndpc2UgYVxcbiA1NDY6XFx0XFx0XFx0ICogY29uY3VycmVudCBsaXN0X2xydV9kZWwoKSBtYXkgY29ycnVwdCB0aGUgbGlzdCBpZiBpdCBhcnJpdmVzXFxuIDU0NzpcXHRcXHRcXHQgKiBhZnRlciB4YXJyYXkgY2xlYXIgYnV0IGJlZm9yZSByZXBhcmVudGluZyBhc1xcbiA1NDg6XFx0XFx0XFx0ICogbG9ja19saXN0X2xydV9vZl9tZW1jZyB3aWxsIGFjcXVpcmUgcGFyZW50J3MgbG9jayB3aGlsZSB0aGVcXG4gNTQ5OlxcdFxcdFxcdCAqIGl0ZW0gaXMgc3RpbGwgb24gY2hpbGQncyBsaXN0LlxcbiA1NTA6XFx0XFx0XFx0ICovXFxuIDU1MTpcXHRcXHRcXHRmb3JfZWFjaF9ub2RlKGkpXFxuIDU1MjpcXHRcXHRcXHRcXHRtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUobHJ1LCBpLCBcXHUwMDI2bWxydS1cXHUwMDNlbm9kZVtpXSwgcGFyZW50KTtcXG4gNTUzOlxcdFxcbiA1NTQ6XFx0XFx0XFx0eGFfZXJhc2VfaXJxKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBtZW1jZy1cXHUwMDNla21lbWNnX2lkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDc6MjguOTQ2MjE2MzA3WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTU1MTA5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG1lbWNnX2luaXRfbGlzdF9scnVgIGluIGBtbS9saXN0X2xydS5jYCoqXG5cbkFscmlnaHQsIGxldCdzIHRyYWNlIHRoaXMgZnVuY3Rpb24ncyBsb2dpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIGludGVncmF0aW9uIHdvcmtzIHdpdGggdGhlIGBsaXN0X2xydWAgZGF0YSBzdHJ1Y3R1cmUuIEknbSBmb2N1c2luZyBvbiBgbWVtY2dfaW5pdF9saXN0X2xydWAgc3BlY2lmaWNhbGx5LCBzbyBJJ20gbmF2aWdhdGluZyB0byBgbW0vbGlzdF9scnUuY2AgdG8gc2VlIGhvdyBpdCBpbml0aWFsaXplcyBhbmQgaW50ZWdyYXRlcyB0aGlzIExSVSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIG1lbWNnIGZyYW1ld29yay4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciBhc3NvY2lhdGluZyBhIHNwZWNpZmljIGBsaXN0X2xydWAgaW5zdGFuY2Ugd2l0aCBhIHBhcnRpY3VsYXIgbWVtY2cuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWTigJRwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBob3cgdGhlIGBsaXN0X2xydWAgaXRzZWxmIGlzIGluaXRpYWxpemVkLCBob3cgbWVtY2ctc3BlY2lmaWMgZmllbGRzIGFyZSBzZXQsIGFuZCBob3cgdGhpcyBsaW5rcyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBhY2NvdW50aW5nLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcGVyLWNwdSBMUlUgbGlzdHMsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoYXQncyBoYW5kbGVkIGluIHRoZSBjb250ZXh0IG9mIG1lbWNncy4gVGhpcyBzaG91bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBvdmVyaGVhZCBvZiB1c2luZyBgbGlzdF9scnVgIHdpdGggbWVtY2dzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzYxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NzozMS4xNjE3MzA1NDJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjkxODA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jZ19pbml0X2xpc3RfbHJ1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2xpc3RfbHJ1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbGlzdF9scnUuYz00NTE9c3RhdGljIHZvaWQgaW5pdF9vbmVfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxcbi0tXFxubW0vbGlzdF9scnUuYy00NjItI2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmM6NDYzOnN0YXRpYyBzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1lbWNnX2luaXRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBnZnBfdCBnZnApXFxubW0vbGlzdF9scnUuYy00NjQte1xcbi0tXFxubW0vbGlzdF9scnUuYy00NzctXFxubW0vbGlzdF9scnUuYzo0Nzg6c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXFxubW0vbGlzdF9scnUuYy00Nzkte1xcbi0tXFxubW0vbGlzdF9scnUuYz01NzQ9c3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjAwLVxcdFxcdGlmICghbWxydSkge1xcbm1tL2xpc3RfbHJ1LmM6NjAxOlxcdFxcdFxcdG1scnUgPSBtZW1jZ19pbml0X2xpc3RfbHJ1X29uZShscnUsIGdmcCk7XFxubW0vbGlzdF9scnUuYy02MDItXFx0XFx0XFx0aWYgKCFtbHJ1KVxcbi0tXFxubW0vbGlzdF9scnUuYz02MzE9aW50IGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxubW0vbGlzdF9scnUuYy02NTQtI2Vsc2VcXG5tbS9saXN0X2xydS5jOjY1NTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfaW5pdF9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSlcXG5tbS9saXN0X2xydS5jLTY1Ni17XFxuLS1cXG5tbS9saXN0X2xydS5jPTY2ND1pbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbi0tXFxubW0vbGlzdF9scnUuYy02ODQtXFxubW0vbGlzdF9scnUuYzo2ODU6XFx0bWVtY2dfaW5pdF9saXN0X2xydShscnUsIG1lbWNnX2F3YXJlKTtcXG5tbS9saXN0X2xydS5jLTY4Ni1cXHRsaXN0X2xydV9yZWdpc3RlcihscnUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NzozMS43MTg2NTY5MloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjg5MzUyNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYG1tL2xpc3RfbHJ1LmNgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHNlZS4uLiB0aGUgcHJvYmxlbSAqc2hvdWxkKiBiZSBzb21ld2hlcmUgYXJvdW5kIHRoZSBsaXN0IExSVSBpbXBsZW1lbnRhdGlvbiwgc28gbGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBsaW5lcyA0NzAgdG8gNDkwIGluIGBtbS9saXN0X2xydS5jYC4gVGhhdCBzZWN0aW9uIHVzdWFsbHkgY29udGFpbnMgdGhlIGNvcmUgbG9naWMgZm9yIFtpbnNlcnQgc3BlY2lmaWMgZnVuY3Rpb24gb3IgYXNwZWN0IHlvdSBleHBlY3QgdG8gZmluZCwgZS5nLiwgdGhlIGV2aWN0aW9uIHByb2Nlc3MsIHRoZSBMUlUncyBhZ2luZyBtZWNoYW5pc20sIHRoZSBpbnNlcnRpb24vcmVtb3ZhbCBvZiBlbGVtZW50c10uIEknbSBleHBlY3RpbmcgdG8gZmluZCBbc3BlY2lmaWMgZGV0YWlscyBiYXNlZCBvbiB5b3VyIGV4cGVydGlzZV0uIEhvcGVmdWxseSwgSSBjYW4gcGlucG9pbnQgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zLCBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIGlzc3Vlcywgb3IgdW5leHBlY3RlZCBiZWhhdmlvciByZWxhdGVkIHRvIHRoZSBMUlUncyBpbnRlcm5hbCBzdGF0ZS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwcm9ibGVtcykgbGlrZWx5IGhhcHBlbi4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBkaXNzZWN0IHRoZSBjb2RlIGZsb3cgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBbc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIG9wZXJhdGlvbnMgcmVsZXZhbnQgdG8gdGhlIHByb2JsZW1dLiBIb3BlZnVsbHksIHRoYXQnbGwgYmUgZW5vdWdoIHRvIGdpdmUgbWUgc29tZSBjbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjM0LjAwODAxMzI3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9saXN0X2xydS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ3MDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0XFx0Zm9yX2VhY2hfbm9kZShuaWQpXFxuIDQ3MzpcXHRcXHRcXHRpbml0X29uZV9scnUobHJ1LCBcXHUwMDI2bWxydS1cXHUwMDNlbm9kZVtuaWRdKTtcXG4gNDc0OlxcdFxcbiA0NzU6XFx0XFx0cmV0dXJuIG1scnU7XFxuIDQ3NjpcXHR9XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxcbiA0Nzk6XFx0e1xcbiA0ODA6XFx0XFx0aWYgKG1lbWNnX2F3YXJlKVxcbiA0ODE6XFx0XFx0XFx0eGFfaW5pdF9mbGFncyhcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgWEFfRkxBR1NfTE9DS19JUlEpO1xcbiA0ODI6XFx0XFx0bHJ1LVxcdTAwM2VtZW1jZ19hd2FyZSA9IG1lbWNnX2F3YXJlO1xcbiA0ODM6XFx0fVxcbiA0ODQ6XFx0XFxuIDQ4NTpcXHRzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbiA0ODY6XFx0e1xcbiA0ODc6XFx0XFx0WEFfU1RBVEUoeGFzLCBcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgMCk7XFxuIDQ4ODpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnU7XFxuIDQ4OTpcXHRcXG4gNDkwOlxcdFxcdGlmICghbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSlcXG4gNDkxOlxcdFxcdFxcdHJldHVybjtcXG4gNDkyOlxcdFxcbiA0OTM6XFx0XFx0eGFzX2xvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbiA0OTQ6XFx0XFx0eGFzX2Zvcl9lYWNoKFxcdTAwMjZ4YXMsIG1scnUsIFVMT05HX01BWCkge1xcbiA0OTU6XFx0XFx0XFx0a2ZyZWUobWxydSk7XFxuIDQ5NjpcXHRcXHRcXHR4YXNfc3RvcmUoXFx1MDAyNnhhcywgTlVMTCk7XFxuIDQ5NzpcXHRcXHR9XFxuIDQ5ODpcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4gNDk5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDc6MzQuMDA4MjA1OTNaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgxNzIxMDI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbWVtY2dfYXdhcmVgIEZsYWcgQWRqdXN0bWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgY2hlY2tpbmcgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaW4gYWRkaXRpb24gdG8gYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYCB3aXRoaW4gYF9fbGlzdF9scnVfaW5pdCgpYC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBob3cgd2UgY29uZmlndXJlIHRoZSBgbGlzdF9scnVgIHN0cnVjdHVyZSB3aGVuIG1lbW9yeSBjZ3JvdXBzIGFyZSBkaXNhYmxlZC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBjZ3JvdXBfZGlzYWJsZT1tZW1vcnlgIGlzIHBhc3NlZCwgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgcmV0dXJucyB0cnVlLiBUaGUgZ29hbCBpcyB0byBlbnN1cmUgYGxpc3RfbHJ1YCBpcyAqbm90KiB0cmVhdGVkIGFzIG1lbWNnLWF3YXJlIHVuZGVyIHN1Y2ggY2lyY3Vtc3RhbmNlcywgd2hpY2ggZm9yY2VzIGBtZW1jZ19hd2FyZWAgdG8gZmFsc2UuIFRoZSBwcmlvciBjb2RlIG1pZ2h0IGhhdmUgbWlzc2VkIHRoaXMgY3J1Y2lhbCBzZXR0aW5nLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogV2hhdCdzIHRoZSByaXNrIGhlcmUsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIG1lbW9yeSBpbml0aWFsaXphdGlvbi5cblxuSSd2ZSBjYXJlZnVsbHkgZXhhbWluZWQgdGhlIGNvZGUuIFRoZXJlJ3Mgbm8gZGF0YSBiZWluZyBsZWFrZWQgdG8gdXNlci1zcGFjZSB0aGF0IGNvdWxkIGJlIHByb2JsZW1hdGljLCBubyBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBnb2luZyB1bmluaXRpYWxpemVkIHRoYXQgY291bGQgY2F1c2UgaXNzdWVzLCBhbmQgbm8gY29uZGl0aW9uYWwganVtcHMgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYW4gaW50ZXJuYWwga2VybmVsIG1lbW9yeS1tYW5hZ2VtZW50IGNvbnRyb2wgZmxhZyAoYG1lbWNnX2F3YXJlYCkgYWRqdXN0bWVudCB3aXRoaW4gYGxpc3RfbHJ1YCBpbml0aWFsaXphdGlvbi5cblxuUmVnYXJkaW5nIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5kIHJlbGF0ZWQgYnVnIGRldGVjdG9ycywgSSdtIGNvbmZpZGVudCB0aGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBBbnkgZnVuZGFtZW50YWwgYnVnLCBsaWtlIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGxvZ2ljIGlzc3VlIGFyaXNpbmcgZnJvbSBtZW1jZyBiZWluZyBkaXNhYmxlZCwgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgb3IgS0FTQU4gZHVyaW5nIHJvdXRpbmUgdGVzdGluZy4gVGhlcmUgYXJlIG5vIGV4cG9zZWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IGxlYWtzIHRoYXQgY291bGQgZmluZCB0aGVpciB3YXkgaW50byB1c2VyIHNwYWNlLlxuXG5JbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzIGEgbG93LXJpc2sgaW50ZXJuYWwgY29uZmlndXJhdGlvbiBhZGp1c3RtZW50LiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RhY2sgYnVmZmVycywgb3IgdXNlci1zcGFjZSBjb3BpZXMgYXJlIGludm9sdmVkLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IGFzc2VydCB0aGF0IHRoZXJlJ3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkgZm9yIHRoaXMgc3BlY2lmaWMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDA2LCJPdXRwdXRUb2tlbnMiOjE2MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjM5LjgyNTQxOTIzNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbGlzdF9scnVfaW5pdCgpYCB0byBjaGVjayBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBhbG9uZ3NpZGUgYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYCBzbyB0aGF0IGBtZW1jZ19hd2FyZWAgaXMgc2V0IHRvIGZhbHNlIHdoZW4gbWVtb3J5IGNncm91cHMgYXJlIGRpc2FibGVkIGF0IGJvb3QuIFRoaXMgaXMgYW4gaW50ZXJuYWwga2VybmVsIGNvbmZpZ3VyYXRpb24gY2hlY2sgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgc3RydWN0IGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBiZSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBvciBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4sIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbGlzdF9scnVfaW5pdCgpYCB0byBjaGVjayBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBhbG9uZ3NpZGUgYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYCBzbyB0aGF0IGBtZW1jZ19hd2FyZWAgaXMgc2V0IHRvIGZhbHNlIHdoZW4gbWVtb3J5IGNncm91cHMgYXJlIGRpc2FibGVkIGF0IGJvb3QuIFRoaXMgaXMgYW4gaW50ZXJuYWwga2VybmVsIGNvbmZpZ3VyYXRpb24gY2hlY2sgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgc3RydWN0IGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBiZSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBvciBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4sIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow7bflf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 04:23:37 +0000 UTC FinishedAt: 2026-09-03 04:47:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "5e8eeeda633de825e8c4062664bbc5a906a54dfe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "CGROUPS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "5e8eeeda633de825e8c4062664bbc5a906a54dfe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "CGROUPS" ], "series_id": "69e0e629-ef5b-4d51-bfdf-95ffd8537b59" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__list_lru_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2xpc3RfbHJ1X2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGFsb25nc2lkZSBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHNvIHRoYXQgYG1lbWNnX2F3YXJlYCBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQgYXQgYm9vdC4gVGhpcyBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgY29uZmlndXJhdGlvbiBjaGVjayBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBzdHJ1Y3QgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IG9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBfX2xpc3RfbHJ1X2luaXQoKSB0byBlbnN1cmUgbWVtY2dfYXdhcmUgaXMgc2V0IHRvIGZhbHNlIHdoZW4gbWVtX2Nncm91cF9kaXNhYmxlZCgpIGlzIHRydWUsIHByZXZlbnRpbmcgaW5hcHByb3ByaWF0ZSBpbml0aWFsaXphdGlvbiBvZiBwZXItbWVtY2cgbGlzdCBMUlVzIHdoZW4gbWVtb3J5IGNncm91cHMgYXJlIGRpc2FibGVkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvZGUgaW4ga2VybmVsIGxpc3RfbHJ1IGluaXRpYWxpemF0aW9uIChlLmcuLCBkdXJpbmcgZmlsZXN5c3RlbSBtb3VudCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNjJkOTI2ZDg2YmIyZTY2ZDRhODA4NjA3YTA2MGQ0MjZhZjBiNTRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwNDo0NjowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuY1xuaW5kZXggMzY2NjJkMDJmZjk2My4uYTQ1MjJjYTkzZWJjYiAxMDA2NDRcbi0tLSBhL21tL2xpc3RfbHJ1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2xpc3RfbHJ1LmNcbkBAIC02NzEsNyAmIzQzOzY3MSw3IEBAIGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyXG4gXHRlbHNlXG4gXHRcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuIFxuLVx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuJiM0MztcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4gXHRcdG1lbWNnX2F3YXJlID0gZmFsc2U7XG4gI2VuZGlmXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbGlzdF9scnVfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIF9fbGlzdF9scnVfaW5pdCgpIHRvIGVuc3VyZSBtZW1jZ19hd2FyZSBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgaXMgdHJ1ZSwgcHJldmVudGluZyBpbmFwcHJvcHJpYXRlIGluaXRpYWxpemF0aW9uIG9mIHBlci1tZW1jZyBsaXN0IExSVXMgd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29kZSBpbiBrZXJuZWwgbGlzdF9scnUgaW5pdGlhbGl6YXRpb24gKGUuZy4sIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE2MmQ5MjZkODZiYjJlNjZkNGE4MDg2MDdhMDYwZDQyNmFmMGI1NGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDA0OjQ2OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmMKaW5kZXggMzY2NjJkMDJmZjk2My4uYTQ1MjJjYTkzZWJjYiAxMDA2NDQKLS0tIGEvbW0vbGlzdF9scnUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9saXN0X2xydS5jCkBAIC02NzEsNyAmIzQzOzY3MSw3IEBAIGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyCiAJZWxzZQogCQlscnUtJmd0O3Nocmlua2VyX2lkID0gLTE7CiAKLQlpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpCiYjNDM7CWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpCiAJCW1lbWNnX2F3YXJlID0gZmFsc2U7CiAjZW5kaWYKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGxpc3RfbHJ1LmNgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgc2VlbXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBtb2RpZmljYXRpb24gd2l0aGluIGBtbS9saXN0X2xydS5jYC4gVGhlIGRpZmYgaGlnaGxpZ2h0cyBhIGNoYW5nZSBhcm91bmQgbGluZSA2NzEuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBjb25kaXRpb25hbCB0aGF0IGRldGVybWluZXMgdGhlIGBtZW1jZ19hd2FyZWAgZmxhZyBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSwgc28gSSYjMzk7bGwgcmVhZCB0aGUgY29kZSBhcm91bmQgdGhlIGhpZ2hsaWdodGVkIGxpbmVzIHRvIGdldCB0aGUgZnVsbCBjb250ZXh0LiBGcm9tIGEgZmlyc3QgZ2xhbmNlLCB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gZXh0ZW5kIHRoZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggYG1lbWNnX2F3YXJlYCBpcyBzZXQgdG8gYGZhbHNlYCwgYWRkaW5nIGFub3RoZXIgY2hlY2sgZm9yIGEgZGlzYWJsZWQgbWVtb3J5IGNncm91cC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgdG8gc2VlIGlmIHRoaXMgaXMgcmVsYXRlZCB0byBhIG5ldyBmZWF0dXJlLCBhIGJ1ZyBmaXgsIG9yIGEgZ2VuZXJhbCBvcHRpbWl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIGhvdyBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpbnRlcmFjdHMgd2l0aCBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBmb3IgZGVwZW5kZW5jaWVzIG9uIHRoZXNlIG1lbW9yeSBjZ3JvdXAgY2hlY2tzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGNoYW5nZSBtYWtlcyBzZW5zZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NTA6XHRcdHJlcyA9IF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcbiA2NTE6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiA2NTI6XHRcdHJldHVybiByZXM7XG4gNjUzOlx0fVxuIDY1NDpcdCNlbHNlXG4gNjU1Olx0c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXG4gNjU2Olx0e1xuIDY1NzpcdH1cbiA2NTg6XHRcbiA2NTk6XHRzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuIDY2MDpcdHtcbiA2NjE6XHR9XG4gNjYyOlx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIDY2MzpcdFxuIDY2NDpcdGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4gNjY1Olx0e1xuIDY2NjpcdFx0aW50IGk7XG4gNjY3Olx0XG4gNjY4Olx0I2lmZGVmIENPTkZJR19NRU1DR1xuIDY2OTpcdFx0aWYgKHNocmlua2VyKVxuIDY3MDpcdFx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cdTAwM2VpZDtcbiA2NzE6XHRcdGVsc2VcbiA2NzI6XHRcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gLTE7XG4gNjczOlx0XG4gNjc0Olx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuIDY3NTpcdFx0XHRtZW1jZ19hd2FyZSA9IGZhbHNlO1xuIDY3NjpcdCNlbmRpZlxuIDY3NzpcdFxuIDY3ODpcdFx0bHJ1LVx1MDAzZW5vZGUgPSBremFsbG9jX29ianMoKmxydS1cdTAwM2Vub2RlLCBucl9ub2RlX2lkcyk7XG4gNjc5Olx0XHRpZiAoIWxydS1cdTAwM2Vub2RlKVxuIDY4MDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA2ODE6XHRcbiA2ODI6XHRcdGZvcl9lYWNoX25vZGUoaSlcbiA2ODM6XHRcdFx0aW5pdF9vbmVfbHJ1KGxydSwgXHUwMDI2bHJ1LVx1MDAzZW5vZGVbaV0ubHJ1KTtcbiA2ODQ6XHRcbiA2ODU6XHRcdG1lbWNnX2luaXRfbGlzdF9scnUobHJ1LCBtZW1jZ19hd2FyZSk7XG4gNjg2Olx0XHRsaXN0X2xydV9yZWdpc3RlcihscnUpO1xuIDY4NzpcdFxuIDY4ODpcdFx0cmV0dXJuIDA7XG4gNjg5Olx0fVxuIDY5MDpcdEVYUE9SVF9TWU1CT0xfR1BMKF9fbGlzdF9scnVfaW5pdCk7XG4gNjkxOlx0XG4gNjkyOlx0dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuIDY5MzpcdHtcbiA2OTQ6XHRcdC8qIEFscmVhZHkgZGVzdHJveWVkIG9yIG5vdCB5ZXQgaW5pdGlhbGl6ZWQ/ICovXG4gNjk1Olx0XHRpZiAoIWxydS1cdTAwM2Vub2RlKVxuIDY5NjpcdFx0XHRyZXR1cm47XG4gNjk3Olx0XG4gNjk4Olx0XHRsaXN0X2xydV91bnJlZ2lzdGVyKGxydSk7XG4gNjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbml0aWFsIEV4YW1pbmF0aW9uIG9mIGBfX2xpc3RfbHJ1X2luaXRgIGFuZCBNZW1vcnkgQ2dyb3VwcyoqCgpBbHJpZ2h0LCBzbyBJIHNlZSBgX19saXN0X2xydV9pbml0YCBiZWluZyBjYWxsZWQsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciBpbml0aWFsaXppbmcgYGxpc3RfbHJ1c2Ag4oCTIG1ha2VzIHNlbnNlLiBUaGV5JiMzOTtyZSB1c2VkIGFsbCBvdmVyIHRoZSBwbGFjZTogc3VwZXJibG9ja3MsIGRjYWNoZSwgb3RoZXIgc3Vic3lzdGVtcy4gSXQmIzM5O3MgdGhlIGV4cGVjdGVkIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZSBmb3IgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzLiBOb3csIEkgaGF2ZSBhIHF1aWNrIHF1ZXN0aW9uLiBXaGF0JiMzOTtzIHRoZSBwcmFjdGljYWwgZGlmZmVyZW5jZSBiZXR3ZWVuIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGFuZCBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgPyBBcmUgdGhleSBjaGVja2luZyBmb3IgZGlmZmVyZW50IGFzcGVjdHMgb2YgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXR5IGJlaW5nIHR1cm5lZCBvZmY/IEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRob3NlIHR3byBmb3IgY29udGV4dC4gT2theSwgdGltZSB0byBkbyBhIHF1aWNrIGBncmVwYCBzZWFyY2guIFRoYXQmIzM5O2xsIGdpdmUgbWUgdGhlIHVzYWdlIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0IGZvciBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucy4gSSYjMzk7bGwgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIHNwZWNpZmljIHJvbGVzIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGBsaXN0X2xydWAgaW5pdGlhbGl6YXRpb24uIFRoYXQgc2hvdWxkIGRvIHRoZSB0cmljay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcxMD1zdGF0aWMgaW5saW5lIGludCBzaHJpbmtlcl9pZChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MTYtI2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTcxNzpib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MTgtaW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4MDI9c3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODA3LSNlbHNlXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxODA4OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQodm9pZClcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4MDkte1xuLS1cbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02NzMtXG5tbS9saXN0X2xydS5jOjY3NDpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG5tbS9saXN0X2xydS5jLTY3NS1cdFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTMyPXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob2JqY2dfbG9jayk7XG5tbS9tZW1jb250cm9sLmMtMTMzLVxubW0vbWVtY29udHJvbC5jOjEzNDpib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKVxubW0vbWVtY29udHJvbC5jLTEzNS17XG4tLVxubW0vbWVtY29udHJvbC5jPTM3OTA9c3RhdGljIHZvaWQgbWVtY2dfb25saW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC5jLTM3OTEte1xubW0vbWVtY29udHJvbC5jOjM3OTI6XHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtMzc5My1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0zODAzPXN0YXRpYyB2b2lkIG1lbWNnX29mZmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTM4MDYtXG5tbS9tZW1jb250cm9sLmM6MzgwNzpcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wuYy0zODA4LVx0XHRyZXR1cm47XG4tLVxubW0vcGVyY3B1LWludGVybmFsLmg9OTA9c3RhdGljIGlubGluZSBib29sIG5lZWRfcGNwdW9ial9leHQodm9pZClcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC05My1cdFx0cmV0dXJuIHRydWU7XG5tbS9wZXJjcHUtaW50ZXJuYWwuaDo5NDpcdGlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC05NS1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vcGVyY3B1LWludGVybmFsLmg9MTUzPXN0YXRpYyBpbmxpbmUgc2l6ZV90IHBjcHVfb2JqX2Z1bGxfc2l6ZShzaXplX3Qgc2l6ZSlcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0xNTctI2lmZGVmIENPTkZJR19NRU1DR1xubW0vcGVyY3B1LWludGVybmFsLmg6MTU4Olx0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTE1OS1cdFx0ZXh0cmFfc2l6ZSAmIzQzOz0gc2l6ZSAvIFBDUFVfTUlOX0FMTE9DX1NJWkUgKiBzaXplb2Yoc3RydWN0IG9ial9jZ3JvdXAgKik7XG4tLVxubW0vc2hyaW5rZXIuYz0yMjY9c3RhdGljIGludCBzaHJpbmtlcl9tZW1jZ19hbGxvYyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxuLS1cbm1tL3Nocmlua2VyLmMtMjMxLVx0XHRyZXR1cm4gLUVOT1NZUztcbm1tL3Nocmlua2VyLmM6MjMyOlx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSlcbm1tL3Nocmlua2VyLmMtMjMzLVx0XHRyZXR1cm4gLUVOT1NZUztcbi0tXG5tbS9zbGFiLmg9NTg4PXN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXG4tLVxubW0vc2xhYi5oLTU5Mi1cbm1tL3NsYWIuaDo1OTM6XHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNlxubW0vc2xhYi5oLTU5NC1cdFx0XHQoS01BTExPQ19OT1JNQUwgPT0gS01BTExPQ19SRUNMQUlNKSlcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTMxOD1zdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubW0vc2xhYl9jb21tb24uYy0zNjUtXHQgKi9cbm1tL3NsYWJfY29tbW9uLmM6MzY2Olx0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbm1tL3NsYWJfY29tbW9uLmMtMzY3LVx0XHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9OTYzPW5ld19rbWFsbG9jX2NhY2hlKGludCBpZHgsIGVudW0ga21hbGxvY19jYWNoZV90eXBlIHR5cGUpXG4tLVxubW0vc2xhYl9jb21tb24uYy05NzItXHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSBcdTAwMjZcdTAwMjYgKHR5cGUgPT0gS01BTExPQ19DR1JPVVApKSB7XG5tbS9zbGFiX2NvbW1vbi5jOjk3MzpcdFx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7XG5tbS9zbGFiX2NvbW1vbi5jLTk3NC1cdFx0XHRrbWFsbG9jX2NhY2hlc1t0eXBlXVtpZHhdID0ga21hbGxvY19jYWNoZXNbS01BTExPQ19OT1JNQUxdW2lkeF07XG4tLVxubW0vc2xhYl9jb21tb24uYy0xMDAxLVx0ICovXG5tbS9zbGFiX2NvbW1vbi5jOjEwMDI6XHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7XG5tbS9zbGFiX2NvbW1vbi5jLTEwMDMtXHRcdGlmICh0eXBlID09IEtNQUxMT0NfTk9STUFMIFx1MDAyNlx1MDAyNiBLTUFMTE9DX1JFQ0xBSU0gIT0gS01BTExPQ19OT1JNQUwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6CgoqKkRpZ2dpbmcgaW50byB0aGUgTWVtb3J5IENvbnRyb2wgTG9naWMqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBjaGFuZ2UsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzIGdldHRpbmcgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBoaXN0b3J5LiBJIHdhbnQgdG8gc2VlIHRoZSBgZ2l0IGxvZ2Agb3IgY29tbWl0IGhpc3RvcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2hhbmdlLiBTZWVpbmcgdGhlIGV2b2x1dGlvbiBvZiB0aGUgY29kZSwgdGhlIHJlYXNvbmluZyBiZWhpbmQgcHJldmlvdXMgbW9kaWZpY2F0aW9ucywgYW5kIGFueSBkaXNjdXNzaW9ucyB0aGF0IGhhcHBlbmVkIGFyb3VuZCB0aGlzIHNwZWNpZmljIHBhcnQgb2YgdGhlIGNvZGViYXNlIGlzIGludmFsdWFibGUgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuIEZhaWxpbmcgYSBzdHJhaWdodGZvcndhcmQgZ2l0IGhpc3RvcnkgZGl2ZSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBmcm9tIGEgc291cmNlIGNvZGUgbGV2ZWwgaW52ZXN0aWdhdGlvbi4KCk15IG1pbmQgaW1tZWRpYXRlbHkgemVyb2VzIGluIG9uIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgbWVtb3J5IGNncm91cCBtYWdpYyBoYXBwZW5zLCBhbmQgc3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIGBtZW1fY2dyb3VwX2Rpc2FibGVkYCBhbmQgYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZGAuIFVuZGVyc3RhbmRpbmcgdGhlaXIgcm9sZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IGlzIGNydWNpYWwuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIGZsYWdzIGltcGFjdCBtZW1vcnkgYWNjb3VudGluZywgcmVzb3VyY2UgbGltaXRpbmcsIGFuZCBwb3RlbnRpYWxseSwgdGhlIGJlaGF2aW9yIG9mIHRoaXMgY2hhbmdlLiBBcmUgd2UgdG9nZ2xpbmcgdGhlbT8gQWZmZWN0aW5nIHRoZW0/IFRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGFyb3VuZCB0aG9zZSB2YXJpYWJsZXMgd2lsbCBiZSB0aGUga2V5IHRvIGl0LiBJdCYjMzk7cyB0aW1lIHRvIHJlYWQgc29tZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjU6XHRcdHJldHVybiBjb250YWluZXJfb2Yodm1wciwgc3RydWN0IG1lbV9jZ3JvdXAsIHZtcHJlc3N1cmUpO1xuIDEyNjpcdH1cbiAxMjc6XHRcbiAxMjg6XHQjZGVmaW5lIFNFUV9CVUZfU0laRSBTWl80S1xuIDEyOTpcdCNkZWZpbmUgQ1VSUkVOVF9PQkpDR19VUERBVEVfQklUIDBcbiAxMzA6XHQjZGVmaW5lIENVUlJFTlRfT0JKQ0dfVVBEQVRFX0ZMQUcgKDFVTCBcdTAwM2NcdTAwM2MgQ1VSUkVOVF9PQkpDR19VUERBVEVfQklUKVxuIDEzMTpcdFxuIDEzMjpcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob2JqY2dfbG9jayk7XG4gMTMzOlx0XG4gMTM0Olx0Ym9vbCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQodm9pZClcbiAxMzU6XHR7XG4gMTM2Olx0XHRyZXR1cm4gY2dyb3VwX21lbW9yeV9ub2ttZW07XG4gMTM3Olx0fVxuIDEzODpcdFxuIDEzOTpcdHN0YXRpYyB2b2lkIG1lbWNnX3VuY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcbiAxNDA6XHRcbiAxNDE6XHRzdGF0aWMgdm9pZCBtZW1jZ191bmNoYXJnZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuIDE0MjpcdHtcbiAxNDM6XHRcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfS01FTSwgLW5yX3BhZ2VzKTtcbiAxNDQ6XHRcdG1lbWNnMV9hY2NvdW50X2ttZW0obWVtY2csIC1ucl9wYWdlcyk7XG4gMTQ1Olx0XHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXG4gMTQ2Olx0XHRcdG1lbWNnX3VuY2hhcmdlKG1lbWNnLCBucl9wYWdlcyk7XG4gMTQ3Olx0fVxuIDE0ODpcdFxuIDE0OTpcdHN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuIDE1MDpcdHtcbiAxNTE6XHRcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBvYmpfY2dyb3VwLCByZWZjbnQpO1xuIDE1MjpcdFx0dW5zaWduZWQgaW50IG5yX2J5dGVzO1xuIDE1MzpcdFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzO1xuIDE1NDpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAxNTU6XHRcbiAxNTY6XHRcdC8qXG4gMTU3Olx0XHQgKiBBdCB0aGlzIHBvaW50IGFsbCBhbGxvY2F0ZWQgb2JqZWN0cyBhcmUgZnJlZWQsIGFuZFxuIDE1ODpcdFx0ICogb2JqY2ctXHUwMDNlbnJfY2hhcmdlZF9ieXRlcyBjYW4mIzM5O3QgaGF2ZSBhbiBhcmJpdHJhcnkgYnl0ZSB2YWx1ZS5cbiAxNTk6XHRcdCAqIEhvd2V2ZXIsIGl0IGNhbiBiZSBQQUdFX1NJWkUgb3IgKHggKiBQQUdFX1NJWkUpLlxuIDE2MDpcdFx0ICpcbiAxNjE6XHRcdCAqIFRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgY2FuIGxlYWQgdG8gaXQ6XG4gMTYyOlx0XHQgKiAxKSBDUFUwOiBvYmpjZyBjYWNoZWQgaW4gb25lIG9mIHN0b2NrLVx1MDAzZWNhY2hlZFtpXVxuIDE2MzpcdFx0ICogMikgQ1BVMTogd2UgZG8gYSBzbWFsbCBhbGxvY2F0aW9uIChlLmcuIDkyIGJ5dGVzKSxcbiAxNjQ6XHRcdCAqICAgICAgICAgIFBBR0VfU0laRSBieXRlcyBhcmUgY2hhcmdlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5ODkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBmdW5jdGlvbi4gSSBrbm93IHRoZSBjb3JlIGNvbmNlcHQgb2YgbWVtb3J5IGNncm91cHMsIG9mIGNvdXJzZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyB0aGlzIGEgY2hlY2sgZm9yIGEgZnVuZGFtZW50YWwgc3lzdGVtIHNldHRpbmcsIG9yIGlzIGl0IGEgbW9yZSBkeW5hbWljIHJ1bnRpbWUgY29uZmlndXJhdGlvbj8gSSYjMzk7bSBiZXR0aW5nIGl0JiMzOTtzIHRoZSBmb3JtZXIg4oCTIHRoaXMgZmVlbHMgbGlrZSBpdCBkZXRlcm1pbmVzIG92ZXJhbGwgY2dyb3VwIGJlaGF2aW9yIHJhdGhlciB0aGFuIGEgcGVyLXByb2Nlc3MgcG9saWN5LiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyB1c2VkLiBLbm93aW5nIHdoZXJlIGl0IGlzIGNhbGxlZCB3aWxsIGluZGljYXRlIHRoZSBpbXBvcnRhbmNlIG9mIHRoZSBmdW5jdGlvbi4KCkkgaW1tZWRpYXRlbHkgd2FudCB0byBrbm93OiBXaGF0JiMzOTtzIHRoZSAqcmVhc29uKiBmb3IgdGhpcyBzdGF0ZT8gSXMgaXQgYmVjYXVzZSB0aGUga2VybmVsIHdhcyBidWlsdCB3aXRob3V0IG1lbW9yeSBjZ3JvdXAgc3VwcG9ydCwgb3IgaXMgdGhlcmUgc29tZSBydW50aW1lIGNvbmZpZ3VyYXRpb24gZGlzYWJsaW5nIGl0IGZvciBzcGVjaWZpYyBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucywgZm9yIGV4YW1wbGU/IFRoZSBjb21tZW50IGJsb2NrcyBzaG91bGQgY29udGFpbiB0aGF0IGluZm9ybWF0aW9uLCBpZiB3cml0dGVuIHByb3Blcmx5LgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZTogV2hhdCBvdGhlciBjb2RlIHBhdGhzIGFyZSBza2lwcGVkIG9yIGVuYWJsZWQgYmFzZWQgb24gdGhpcz8gSG93IGRvZXMgaXQgYWZmZWN0IHRoZSBpbml0aWFsaXphdGlvbiBvZiBtZW1vcnkgYWNjb3VudGluZyBvciB0aGUgYmVoYXZpb3Igb2YgcmVsYXRlZCBzdWJzeXN0ZW1zIGxpa2UgT09NIGhhbmRsaW5nIG9yIHJlc291cmNlIGxpbWl0YXRpb25zPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZmFsbGJhY2sgYmVoYXZpb3IuIEnigJltIHRoaW5raW5nIGluIHBhcnRpY3VsYXIgYWJvdXQgdGhlIHJhbWlmaWNhdGlvbnMgdG8gdGhlIGFjY291bnRpbmcgc3Vic3lzdGVtLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGZvcm0gYSBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgYWZmZWN0cyB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBmaXRzIGluIHdpdGggdGhlIGJyb2FkZXIgY2dyb3VwIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9kaXNhYmxlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD01MzA9c3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNTM0LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NTM1OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2Rpc2FibGVkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC01MzYte1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTU0MD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTU0Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjU0ODpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC01NDktXHRcdHJldHVybjtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD01OTU9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfdW5wcm90ZWN0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02MDItXHQgKi9cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjYwMzpcdHJldHVybiBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSB8fFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjA0LVx0XHRtZW1jZyA9PSB0YXJnZXQ7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjQzPXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY0NS17XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NDY6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjQ3LVx0XHRyZXR1cm4gMDtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02NjQ9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2NS17XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjY6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY3LVx0XHRyZXR1cm47XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjcyPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY3My17XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NzQ6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjc1LVx0XHRyZXR1cm47XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjkxPXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY5Ni1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY5NzpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY5OC1cdFx0bHJ1dmVjID0gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NzMyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNzM1LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NzM2Olx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFtZW1jZyBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSwgZm9saW8pO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNzM3LVx0cmV0dXJuIG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBmb2xpb19wZ2RhdChmb2xpbykpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTgwOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MTAte1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODExOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgxMi1cdFx0cmV0dXJuIDA7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODMwPXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODMzLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODM0Olx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgzNS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODc3PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04Nzgte1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODc5Olx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTg4MC1cdFx0cmV0dXJuIHRydWU7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9OTIwPXN0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MjQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5MjU6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTI2LVx0XHRyZXR1cm47XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9OTY4PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19ldmVudHNfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTcyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTczOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk3NC1cdFx0cmV0dXJuO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTk5OD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfbWVtb3J5X2V2ZW50X21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDItXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMDAzOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDQtXHRcdHJldHVybjtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMDE3PXN0YXRpYyBpbmxpbmUgdTY0IGNncm91cF9pZF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMjEtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMDIyOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMjMtXHRcdHJldHVybiAwO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEwOTM9c3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTA5Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEwOTg6c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfZGlzYWJsZWQodm9pZClcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwOTkte1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE1NzY9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE1ODAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNTgxOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE1ODItXHRcdHJldHVybjtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD00ODI9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQ4My17XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo0ODQ6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDg1LVx0XHRyZXR1cm47XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9NDk2PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00OTcte1xuaW5jbHVkZS9saW51eC9zd2FwLmg6NDk4Olx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQ5OS1cdFx0cmV0dXJuIDA7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9NTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbmluY2x1ZGUvbGludXgvc3dhcC5oLTUwNS17XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDY6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA3LVx0XHRyZXR1cm47XG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYz0yMz1fX2JwZl9rZnVuYyBzdHJ1Y3QgbWVtX2Nncm91cCAqYnBmX2dldF9yb290X21lbV9jZ3JvdXAodm9pZClcbm1tL2JwZl9tZW1jb250cm9sLmMtMjQte1xubW0vYnBmX21lbWNvbnRyb2wuYzoyNTpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9icGZfbWVtY29udHJvbC5jLTI2LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5tbS9icGZfbWVtY29udHJvbC5jPTQ1PWJwZl9nZXRfbWVtX2Nncm91cChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL2JwZl9tZW1jb250cm9sLmMtNDktXG5tbS9icGZfbWVtY29udHJvbC5jOjUwOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhcm9vdF9tZW1fY2dyb3VwKVxubW0vYnBmX21lbWNvbnRyb2wuYy01MS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMDU3PWludCBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy0xMDU4LXtcbm1tL2h1Z2VfbWVtb3J5LmM6MTA1OTpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9odWdlX21lbW9yeS5jLTEwNjAtXHRcdHJldHVybiAwO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDUwMj1ib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUxMC1cdFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxMTpcdFdBUk5fT05fT05DRSghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpO1xubW0vaHVnZV9tZW1vcnkuYy00NTEyLVxuLS1cbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02NzMtXG5tbS9saXN0X2xydS5jOjY3NDpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG5tbS9saXN0X2xydS5jLTY3NS1cdFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjY5PXZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yNzktXG5tbS9tZW1jb250cm9sLXYxLmM6MjgwOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wtdjEuYy0yODEtXHRcdHJldHVybjtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDkyPXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtNDk3LVxubW0vbWVtY29udHJvbC5jOjQ5ODpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtNDk5LVx0XHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MzM9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MzgtXG5tbS9tZW1jb250cm9sLmM6NTM5Olx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wuYy01NDAtXHRcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NTA9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU1Ni1cbm1tL21lbWNvbnRyb2wuYzo1NTc6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTU1OC1cdFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9Nzc0PXZvaWQgbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNzc1LXtcbm1tL21lbWNvbnRyb2wuYzo3NzY6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTc3Ny1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz05MTY9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTkyMC1cbm1tL21lbWNvbnRyb2wuYzo5MjE6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTkyMi1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xMDEwPXZvaWQgbW9kX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMDE2LVx0LyogVXBkYXRlIG1lbWNnIGFuZCBscnV2ZWMgKi9cbm1tL21lbWNvbnRyb2wuYzoxMDE3Olx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtMTAxOC1cdFx0bW9kX21lbWNnX2xydXZlY19zdGF0ZShscnV2ZWMsIGlkeCwgdmFsKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTA3Mz12b2lkIGNvdW50X21lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTEwNzgtXG5tbS9tZW1jb250cm9sLmM6MTA3OTpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtMTA4MC1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xMTU3PXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMTYwLVxubW0vbWVtY29udHJvbC5jOjExNjE6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTExNjItXHRcdHJldHVybiBOVUxMO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xMTk5PXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTIwMi1cbm1tL21lbWNvbnRyb2wuYzoxMjAzOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wuYy0xMjA0LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTIyMz1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMjI2LVxubW0vbWVtY29udHJvbC5jOjEyMjc6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTEyMjgtXHRcdHJldHVybiBOVUxMO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xMjU4PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2l0ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4tLVxubW0vbWVtY29udHJvbC5jLTEyNjYtXG5tbS9tZW1jb250cm9sLmM6MTI2NzpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtMTI2OC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vbWVtY29udHJvbC5jPTE1Mjg9dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTM0LVxubW0vbWVtY29udHJvbC5jOjE1MzU6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTE1MzYtXHRcdHJldHVybjtcbi0tXG5tbS9tZW1jb250cm9sLmM9MzAwMj1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcbi0tXG5tbS9tZW1jb250cm9sLmMtMzAwNS1cbm1tL21lbWNvbnRyb2wuYzozMDA2Olx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wuYy0zMDA3LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5tbS9tZW1jb250cm9sLmM9MzIxND1zdGF0aWMgc3RydWN0IG9ial9jZ3JvdXAgKnBhZ2Vfb2JqY2coY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtY29udHJvbC5jLTMyMTctXG5tbS9tZW1jb250cm9sLmM6MzIxODpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2RhdGEpXG5tbS9tZW1jb250cm9sLmMtMzIxOS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vbWVtY29udHJvbC5jPTM3Nzg9dm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcbi0tXG5tbS9tZW1jb250cm9sLmMtMzc4Mi1cbm1tL21lbWNvbnRyb2wuYzozNzgzOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpXG5tbS9tZW1jb250cm9sLmMtMzc4NC1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00MzEyPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzNDEtXG5tbS9tZW1jb250cm9sLmM6NDM0MjpcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wuYy00MzQzLVx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2c3RhdHNfZmx1c2hfZHdvcmssXG4tLVxubW0vbWVtY29udHJvbC5jPTUyMjg9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjMzLVxubW0vbWVtY29udHJvbC5jOjUyMzQ6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTUyMzUtXHRcdHJldHVybjtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTI4Nz1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyOTYtXHQgKi9cbm1tL21lbWNvbnRyb2wuYzo1Mjk3Olx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfaHVnZXRsYigpIHx8XG5tbS9tZW1jb250cm9sLmMtNTI5OC1cdFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MzIxPWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4tLVxubW0vbWVtY29udHJvbC5jLTUzMjYtXG5tbS9tZW1jb250cm9sLmM6NTMyNzpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtNTMyOC1cdFx0cmV0dXJuIDA7XG4tLVxubW0vbWVtY29udHJvbC5jPTU0OTY9dm9pZCBtZW1fY2dyb3VwX3JlcGxhY2VfZm9saW8oc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NTA2LVxubW0vbWVtY29udHJvbC5jOjU1MDc6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vbWVtY29udHJvbC5jLTU1MDgtXHRcdHJldHVybjtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTU1Mz12b2lkIG1lbV9jZ3JvdXBfbWlncmF0ZShzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpXG4tLVxubW0vbWVtY29udHJvbC5jLTU1NjItXG5tbS9tZW1jb250cm9sLmM6NTU2MzpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtNTU2NC1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01ODQxPWxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTU4NDQtXG5tbS9tZW1jb250cm9sLmM6NTg0NTpcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZG9fbWVtc3dfYWNjb3VudCgpKVxubW0vbWVtY29udHJvbC5jLTU4NDYtXHRcdG5yX3N3YXBfcGFnZXMgPSBtaW4obnJfc3dhcF9wYWdlcywgcGFnZV9jb3VudGVyX21hcmdpbihcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTU4NTc9bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODYxLVxubW0vbWVtY29udHJvbC5jOjU4NjI6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fFxubW0vbWVtY29udHJvbC5jLTU4NjMtXHQgICAgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKVxuLS1cbm1tL21lbWNvbnRyb2wuYz02MjMzPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXG5tbS9tZW1jb250cm9sLmMtNjIzNC17XG5tbS9tZW1jb250cm9sLmM6NjIzNTpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmMtNjIzNi1cdFx0cmV0dXJuIDA7XG4tLVxubW0vbWVtY29udHJvbC5jPTYyNjg9dm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNjI2OS17XG5tbS9tZW1jb250cm9sLmM6NjI3MDpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtNjI3MS1cdFx0cmV0dXJuO1xuLS1cbm1tL3Nocmlua2VyLmM9MjI2PXN0YXRpYyBpbnQgc2hyaW5rZXJfbWVtY2dfYWxsb2Moc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9zaHJpbmtlci5jLTIyOS1cbm1tL3Nocmlua2VyLmM6MjMwOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL3Nocmlua2VyLmMtMjMxLVx0XHRyZXR1cm4gLUVOT1NZUztcbi0tXG5tbS9zaHJpbmtlci5jPTYyND11bnNpZ25lZCBsb25nIHNocmlua19zbGFiKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vc2hyaW5rZXIuYy02MzYtXHQgKi9cbm1tL3Nocmlua2VyLmM6NjM3Olx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxubW0vc2hyaW5rZXIuYy02MzgtXHRcdHJldHVybiBzaHJpbmtfc2xhYl9tZW1jZyhnZnBfbWFzaywgbmlkLCBtZW1jZywgcHJpb3JpdHkpO1xuLS1cbm1tL3N3YXAuaD04NT1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3N3YXAuaC04OC1cdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSBcdTAwMjZcdTAwMjZcbm1tL3N3YXAuaDo4OTpcdCAgICAhbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbm1tL3N3YXAuaC05MC1cdFx0cmV0dXJuIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTQ0OT1zdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXG4tLVxubW0vc3dhcGZpbGUuYy00NzEtI2lmZGVmIENPTkZJR19NRU1DR1xubW0vc3dhcGZpbGUuYzo0NzI6XHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xubW0vc3dhcGZpbGUuYy00NzMtXHRcdFZNX1dBUk5fT05fT05DRShjaS1cdTAwM2VtZW1jZ190YWJsZSk7XG4tLVxubW0vdm1wcmVzc3VyZS5jPTEwNj12b2lkIHZtcHJlc3N1cmUoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCB0cmVlLFxuLS1cbm1tL3ZtcHJlc3N1cmUuYy0xMTAtXG5tbS92bXByZXNzdXJlLmM6MTExOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL3ZtcHJlc3N1cmUuYy0xMTItXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYz0zOTQ9dW5zaWduZWQgbG9uZyBscnV2ZWNfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTQwMC1cdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBscnV2ZWNfcGdkYXQobHJ1dmVjKSwgemlkLCB6b25lX2lkeCkge1xubW0vdm1zY2FuLmM6NDAxOlx0XHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL3Ztc2Nhbi5jLTQwMi1cdFx0XHRzaXplICYjNDM7PSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGxydXZlYywgbHJ1LCB6aWQpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI3NDk9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLS1cbm1tL3Ztc2Nhbi5jLTI3NjMtI2VuZGlmXG5tbS92bXNjYW4uYzoyNzY0Olx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xubW0vdm1zY2FuLmMtMjc2NS1cbi0tXG5tbS92bXNjYW4uYz0yOTA3PXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjkxNy0jZW5kaWZcbm1tL3Ztc2Nhbi5jOjI5MTg6XHRWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7XG5tbS92bXNjYW4uYy0yOTE5LVxuLS1cbm1tL3Ztc2Nhbi5jPTMwMTQ9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMzAyMi1cdC8qIGZvciBtbV91cGRhdGVfbmV4dF9vd25lcigpICovXG5tbS92bXNjYW4uYzozMDIzOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL3Ztc2Nhbi5jLTMwMjQtXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYz01MjM4PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTI2My1cbm1tL3Ztc2Nhbi5jOjUyNjQ6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vdm1zY2FuLmMtNTI2NS1cdFx0c2hyaW5rX29uZShcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYywgc2MpO1xuLS1cbm1tL3Ztc2Nhbi5jPTU3MzI9c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTU3NDEtXG5tbS92bXNjYW4uYzo1NzQyOlx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbm1tL3Ztc2Nhbi5jLTU3NDMtXHRcdG1lbWNnID0gbWVtX2Nncm91cF9nZXRfZnJvbV9pZChtZW1jZ19pZCk7XG4tLVxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTQ3Ni1cbm1tL3dvcmtpbmdzZXQuYzo0Nzc6XHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWV2aWN0aW9uX21lbWNnKVxubW0vd29ya2luZ3NldC5jLTQ3OC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3dvcmtpbmdzZXQuYz01OTc9dm9pZCB3b3JraW5nc2V0X2FjdGl2YXRpb24oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS93b3JraW5nc2V0LmMtNjAyLVx0ICovXG5tbS93b3JraW5nc2V0LmM6NjAzOlx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBmb2xpb19tZW1jZ19jaGFyZ2VkKGZvbGlvKSkge1xubW0vd29ya2luZ3NldC5jLTYwNC1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLS1cbm1tL3pzd2FwLmM9MTE3OT1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuLS1cbm1tL3pzd2FwLmMtMTIwNy1cdCAqL1xubW0venN3YXAuYzoxMjA4Olx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbm1tL3pzd2FwLmMtMTIwOS1cdFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChtZW1jZyk7XG4tLVxubW0venN3YXAuYz0xMzA0PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbm1tL3pzd2FwLmMtMTM2MS1cdFx0ICovXG5tbS96c3dhcC5jOjEzNjI6XHRcdGlmICghbWVtY2cgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbm1tL3pzd2FwLmMtMTM2My1cdFx0XHRpZiAoIWF0dGVtcHRzIFx1MDAyNlx1MDAyNiAmIzQzOyYjNDM7ZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW1tZWRpYXRlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYC4gVGhlIHZlcnkgbmFtZSBzdWdnZXN0cyBpdCBoYXMgdG8gZG8gd2l0aCBtZW1vcnkgY2dyb3VwcyBiZWluZyBkaXNhYmxlZC4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IGl0JiMzOTtzIGRlc2lnbmVkIHRvIGRldGVybWluZSBpZiBtZW1vcnkgcmVzb3VyY2UgY29udHJvbCB2aWEgY2dyb3VwcyBpcyBpbnRlbnRpb25hbGx5IHR1cm5lZCBvZmYuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGZpbmRpbmcgaXQgd2l0aGluIHRoZSBrZXJuZWwgaGVhZGVycywgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGV4cGxpY2l0IGRldGFpbHMgb2YgaXRzIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgdW5kZXJseWluZyBsb2dpYy4gT25jZSBJIGhhdmUgdGhlIGNvZGUsIEkgY2FuIGFjY3VyYXRlbHkgZXhwbGFpbiB3aGF0IGlzIGJlaW5nIGRpc2FibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MzA6XHRzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2Nncm91cF9pc19yb290KGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiA1MzE6XHR7XG4gNTMyOlx0XHRyZXR1cm4gb2JqY2ctXHUwMDNlaXNfcm9vdDtcbiA1MzM6XHR9XG4gNTM0Olx0XG4gNTM1Olx0c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfZGlzYWJsZWQodm9pZClcbiA1MzY6XHR7XG4gNTM3Olx0XHRyZXR1cm4gIWNncm91cF9zdWJzeXNfZW5hYmxlZChtZW1vcnlfY2dycF9zdWJzeXMpO1xuIDUzODpcdH1cbiA1Mzk6XHRcbiA1NDA6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuIDU0MTpcdFx0XHRcdFx0XHQgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIDU0MjpcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqbWluLFxuIDU0MzpcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqbG93LFxuIDU0NDpcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqdXNhZ2UpXG4gNTQ1Olx0e1xuIDU0NjpcdFx0Km1pbiA9ICpsb3cgPSAqdXNhZ2UgPSAwO1xuIDU0NzpcdFxuIDU0ODpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiA1NDk6XHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUzOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBNZW1vcnkgTWFuYWdlbWVudCBCdWcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYm9vdC10aW1lIHBhcmFtZXRlciBpbnRlcmFjdGlvbiBhbmQgSSYjMzk7bSBzZWVpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgaW5jb25zaXN0ZW5jeSBpbiBob3cgbWVtb3J5IGNncm91cHMgYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgd2hlbiBgY2dyb3VwX2Rpc2FibGU9bWVtb3J5YCBpcyBzcGVjaWZpZWQsIEkgKmV4cGVjdCogdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtIHRvIGJlIGNvbXBsZXRlbHkgZGVhY3RpdmF0ZWQuIGBjZ3JvdXBfc3Vic3lzX2VuYWJsZWQobWVtb3J5X2NncnBfc3Vic3lzKWAgY29ycmVjdGx5IHJlZmxlY3RzIHRoaXMsIGFuZCBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCB3aWxsIHJldHVybiB0cnVlLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBiaXQsIGFsbCBnb29kLgoKSG93ZXZlciwgdGhlIGxvZ2ljIGxhdGVyIG9uLCBwYXJ0aWN1bGFybHkgaW4gYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYCwgc2VlbXMgdG8gY2hlY2sgYGNncm91cF9tZW1vcnlfbm9rbWVtYCBpbnN0ZWFkLiBUaGlzIHZhbHVlIGlzIHRpZWQgdG8gdGhlIGBjZ3JvdXAubWVtb3J5PW5va21lbWAgYm9vdCBwYXJhbWV0ZXIuIEhlcmUmIzM5O3Mgd2hlcmUgdGhlIHByb2JsZW0gYXJpc2VzOiBldmVuIHdoZW4gYGNncm91cF9kaXNhYmxlPW1lbW9yeWAgaXMgc2V0LCBgY2dyb3VwX21lbW9yeV9ub2ttZW1gICptaWdodCogc3RpbGwgYmUgZmFsc2UhIFRoaXMgc3VidGxlIGRpZmZlcmVuY2UgbWVhbnMgdGhhdCBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIGNvdWxkIGV2YWx1YXRlIHRvIGZhbHNlLCBldmVuIHdoZW4gdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtIGlzIHN1cHBvc2VkIHRvIGJlIGRpc2FibGVkIGdsb2JhbGx5LgoKVGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZSBpZiBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHJldHVybnMgZmFsc2UsIHRoZSBgX19saXN0X2xydV9pbml0YCBmdW5jdGlvbiB3aWxsIGluY29ycmVjdGx5IHRyZWF0IHRoZSBgbWVtY2dfYXdhcmVgIGZsYWcgYXMgdHJ1ZS4gVGhpcywgaW4gdHVybiwgbGVhZHMgdG8gYSBjYWxsIHRvIGBtZW1jZ19pbml0X2xpc3RfbHJ1YCwgd2hpY2ggdGhlbiBhdHRlbXB0cyB0byBpbml0aWFsaXplIHBlci1tZW1jZyBMUlUgdGFibGVzLiBCdXQgKndoeSogYXJlIHdlIHRyeWluZyB0byBpbml0aWFsaXplIHBlci1tZW1jZyBzdHJ1Y3R1cmVzIGlmIHRoZSBlbnRpcmUgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXR5IGlzIHN1cHBvc2VkbHkgZGlzYWJsZWQ/IEl0JiMzOTtzIGEgY2xlYXIgdmlvbGF0aW9uIG9mIGV4cGVjdGF0aW9ucywgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiB1bmV4cGVjdGVkIGJlaGF2aW91ciwgbWVtb3J5IGxlYWtzLCBvciBldmVuIGNyYXNoZXMuCgpJJiMzOTttIG5vdyBnb2luZyB0byBkaXZlIGludG8gdGhlIGBtZW1jZ19pbml0X2xpc3RfbHJ1YCBmdW5jdGlvbiBpdHNlbGYsIGZvdW5kIGluIGBtbS9saXN0X2xydS5jYCwgdG8gcGlucG9pbnQgdGhlIGV4YWN0IG1lY2hhbmlzbSBieSB3aGljaCB0aGlzIGluY29ycmVjdCBpbml0aWFsaXphdGlvbiBvY2N1cnMgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBmYWxsb3V0IGNvdWxkIGJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0XHRcdGlmICghbWxydSkge1xuIDYwMTpcdFx0XHRcdG1scnUgPSBtZW1jZ19pbml0X2xpc3RfbHJ1X29uZShscnUsIGdmcCk7XG4gNjAyOlx0XHRcdFx0aWYgKCFtbHJ1KVxuIDYwMzpcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNjA0Olx0XHRcdH1cbiA2MDU6XHRcdFx0eGFzX3NldChcdTAwMjZ4YXMsIHBvcy1cdTAwM2VrbWVtY2dfaWQpO1xuIDYwNjpcdFx0XHRkbyB7XG4gNjA3Olx0XHRcdFx0eGFzX2xvY2tfaXJxc2F2ZShcdTAwMjZ4YXMsIGZsYWdzKTtcbiA2MDg6XHRcdFx0XHRpZiAoIXhhc19sb2FkKFx1MDAyNnhhcykgXHUwMDI2XHUwMDI2ICFjc3NfaXNfZHlpbmcoXHUwMDI2cG9zLVx1MDAzZWNzcykpIHtcbiA2MDk6XHRcdFx0XHRcdHhhc19zdG9yZShcdTAwMjZ4YXMsIG1scnUpO1xuIDYxMDpcdFx0XHRcdFx0aWYgKCF4YXNfZXJyb3IoXHUwMDI2eGFzKSlcbiA2MTE6XHRcdFx0XHRcdFx0bWxydSA9IE5VTEw7XG4gNjEyOlx0XHRcdFx0fVxuIDYxMzpcdFx0XHRcdHhhc191bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ4YXMsIGZsYWdzKTtcbiA2MTQ6XHRcdFx0fSB3aGlsZSAoeGFzX25vbWVtKFx1MDAyNnhhcywgZ2ZwKSk7XG4gNjE1Olx0XHR9IHdoaWxlIChwb3MgIT0gbWVtY2cgXHUwMDI2XHUwMDI2ICFjc3NfaXNfZHlpbmcoXHUwMDI2cG9zLVx1MDAzZWNzcykpO1xuIDYxNjpcdFxuIDYxNzpcdFx0aWYgKHVubGlrZWx5KG1scnUpKVxuIDYxODpcdFx0XHRrZnJlZShtbHJ1KTtcbiA2MTk6XHRcbiA2MjA6XHRcdHJldHVybiB4YXNfZXJyb3IoXHUwMDI2eGFzKTtcbiA2MjE6XHR9XG4gNjIyOlx0XG4gNjIzOlx0aW50IG1lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4gNjI0Olx0XHRcdFx0IGdmcF90IGdmcClcbiA2MjU6XHR7XG4gNjI2Olx0XHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgfHwgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKG1lbWNnLCBscnUpKVxuIDYyNzpcdFx0XHRyZXR1cm4gMDtcbiA2Mjg6XHRcdHJldHVybiBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBscnUsIGdmcCk7XG4gNjI5Olx0fVxuIDYzMDpcdFxuIDYzMTpcdGludCBmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiA2MzI6XHRcdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwKVxuIDYzMzpcdHtcbiA2MzQ6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiA2MzU6XHRcdGludCByZXM7XG4gNjM2Olx0XG4gNjM3Olx0XHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpXG4gNjM4Olx0XHRcdHJldHVybiAwO1xuIDYzOTpcdFxuIDY0MDpcdFx0LyogRmFzdCBwYXRoIHdoZW4gbGlzdF9scnUgaGVhZHMgYWxyZWFkeSBleGlzdCAqL1xuIDY0MTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDY0MjpcdFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4gNjQzOlx0XHRyZXMgPSBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQobWVtY2csIGxydSk7XG4gNjQ0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA2NDU6XHRcdGlmIChsaWtlbHkocmVzKSlcbiA2NDY6XHRcdFx0cmV0dXJuIDA7XG4gNjQ3Olx0XG4gNjQ4Olx0XHQvKiBBbGxvY2F0aW9uIG1heSBibG9jaywgcGluIHRoZSBtZW1jZyAqL1xuIDY0OTpcdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiA2NTA6XHRcdHJlcyA9IF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcbiA2NTE6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiA2NTI6XHRcdHJldHVybiByZXM7XG4gNjUzOlx0fVxuIDY1NDpcdCNlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDg2CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogODIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIElzIHRoaXMgY2hhbmdlLCBmaXhpbmcgYF9fbGlzdF9scnVfaW5pdGAgd2hlbiBgY2dyb3VwX2Rpc2FibGU9bWVtb3J5YCBpcyBzZXQsIHdvcnRoIGZ1enppbmc/IEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKm5hdHVyZSogb2YgdGhlIGNoYW5nZS4gSXMgdGhpcyBqdXN0IGEgYm9vdC10aW1lIHRoaW5nLCBvciBpcyBgX19saXN0X2xydV9pbml0YCBjYWxsZWQgZHVyaW5nIHJ1bnRpbWU/IEFoLCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnRpbmcsIHdvcmtpbmcgc2V0IGluaXRpYWxpemF0aW9uLCBhbmQgc2hyaW5rZXIgaW5pdGlhbGl6YXRpb24gLSBzbywgcG90ZW50aWFsbHkgKnJ1bnRpbWUqLiBBbmQgaWYgYGNncm91cF9kaXNhYmxlPW1lbW9yeWAgaXMgc2V0LCBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCB3aWxsIGJlIHRydWUgZm9yIHRoZSBzeXN0ZW0mIzM5O3MgKmVudGlyZSogbGlmZXRpbWUuCgpOb3csIGRvIEkgbmVlZCB0byBmdXp6IGl0LCBvciBpcyB0aGlzIGEgc2ltcGxlIGJ1ZyBmaXg/IExldCYjMzk7cyBjaGVjayB0aGUgY3JpdGVyaWEuIE9rYXksIGl0ICppc24mIzM5O3QqIGEgRG9jdW1lbnRhdGlvbi9LY29uZmlnIGNoYW5nZSwgZGVjb3JhdGl2ZSBsb2dnaW5nLCBvciBjaGFuZ2VzIHRvIG5vbi1mdW5jdGlvbmFsIGNvbnN0YW50cy4gSXQgKmRvZXMqIHRvdWNoIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgbW0vbGlzdF9scnUuY2AuIFRoaXMgKmlzKiByZWFjaGFibGUgaW4gUUVNVSwgc28gaXQgcGFzc2VzIHRoYXQgY2hlY2suCgpTbywgKmRvZXMqIGl0IG1ha2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nPyBOb3cgaXQmIzM5O3MgYWJvdXQgY2hlY2tpbmcgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIFdoYXQgc3ltYm9scyBhcmUgaW52b2x2ZWQgaGVyZT8gYF9fbGlzdF9scnVfaW5pdGAsIGBtZW1jZ19saXN0X2xydV9hbGxvY2AsIGFuZCBgZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2NgIHNlZW0gcmVsZXZhbnQuIEkgbmVlZCB0byBmb2N1cyBvbiAqc3BlY2lmaWMqIGtlcm5lbCBmdW5jdGlvbnMsIHByZWZlcmFibHkgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF04oCZcyB0aGUga2V5LgoKQW5kIHdoYXQgYWJvdXQgYEVuYWJsZUNvbmZpZ3NgPyBUaW1lIHRvIGNoZWNrIGBtbS9LY29uZmlnYCBvciBgaW5pdC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBDT05GSUcgb3B0aW9ucyBpbnZvbHZlZCwgZXNwZWNpYWxseSBhcm91bmQgYENPTkZJR19NRU1DR2AuIEdvdHRhIGJlIHN1cmUgdG8gaW5jbHVkZSBhbnkgbmVlZGVkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncy4gQWxyaWdodCwgdGltZSB0byBnbyBkaWdnaW5nIGluIHRoZSBLY29uZmlnIGZpbGVzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA4Ni1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwMC1cbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTExMDItXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDctXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTA5LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTU1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgZm91bmRhdGlvbmFsIGBpbml0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTA4NS4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQg4oCTIEkmIzM5O20gYmV0dGluZyB0aGF0JiMzOTtzIHdoZXJlIHNvbWUgb2YgdGhlIGNvcmUgZGVmYXVsdHMgb3IgcmVsYXRpb25zaGlwcyBmb3IgdGhpcyBmZWF0dXJlIGFyZSBsaWtlbHkgZGVmaW5lZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucywgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcywgYW5kIGRlZmluaXRlbHkgYW55IGBzZWxlY3RgIG9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB0aGUgYmVoYXZpb3IgSSYjMzk7bSBzZWVpbmcuIFRoaXMgaXMgcHJvYmFibHkgYSBnb29kIHNwb3QgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IGltbWVkaWF0ZWx5LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIHByZXR0eSB3ZWxsLXN0cnVjdHVyZWQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9uLCBwb3NzaWJseSB1c2luZyBuZXN0ZWQgYGlmYCBzdGF0ZW1lbnRzIG9yIHNvbWUgbW9yZSBjb21wbGV4IGxvZ2ljLiBUaW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODA6XHRcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXG4xMDgxOlx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDgyOlx0XG4xMDgzOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwODQ6XHRcbjEwODU6XHRjb25maWcgTUVNQ0dcbjEwODY6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODc6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODg6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDg5Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDkwOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwOTE6XHRcdGhlbHBcbjEwOTI6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDk1Olx0XHRib29sXG4xMDk2Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDk3Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDk4Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4xMTAwOlx0XG4xMTAxOlx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4xMTAyOlx0XHRib29sXG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTU1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgQ09ORklHX01FTUNHYCBpcyBuZXN0ZWQgd2l0aGluIHRoZSBgQ0dST1VQU2AgY29uZGl0aW9uYWwuIFRoYXQgZmVlbHMgcmlnaHQsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiBUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byBjb25zdWx0IHRoZSBkZWZpbml0aXZlIHNvdXJjZTogYGluaXQvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgbGluZXMgMTAwMCB0aHJvdWdoIDEwODUgc2hvdWxkIGhvbGQgdGhlIGtleSBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgdGhlcmUgdG8gc2VlIGlmIEkmIzM5O20gY29ycmVjdCBhbmQgdW5kZXJzdGFuZCB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA0MDpcdFx0ICB0aGUgc2FtZSBwcm9jZXNzIG9udG8gYSBzaW5nbGUgTGFzdCBMZXZlbCBDYWNoZSAoTExDKSBkb21haW4gd2hlblxuMTA0MTpcdFx0ICBwb3NzaWJsZS4gVGhpcyBpbXByb3ZlcyBjYWNoZSBsb2NhbGl0eSBieSBrZWVwaW5nIHRhc2tzIHRoYXQgc2hhcmVcbjEwNDI6XHRcdCAgcmVzb3VyY2VzIHdpdGhpbiB0aGUgc2FtZSBjYWNoZSBkb21haW4sIHJlZHVjaW5nIGNhY2hlIG1pc3NlcyBhbmRcbjEwNDM6XHRcdCAgbG93ZXJpbmcgZGF0YSBhY2Nlc3MgbGF0ZW5jeS5cbjEwNDQ6XHRcbjEwNDU6XHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG4xMDQ2Olx0XHRib29sIFwmIzM0O0F1dG9tYXRpY2FsbHkgZW5hYmxlIE5VTUEgYXdhcmUgbWVtb3J5L3Rhc2sgcGxhY2VtZW50XCYjMzQ7XG4xMDQ3Olx0XHRkZWZhdWx0IHlcbjEwNDg6XHRcdGRlcGVuZHMgb24gTlVNQV9CQUxBTkNJTkdcbjEwNDk6XHRcdGhlbHBcbjEwNTA6XHRcdCAgSWYgc2V0LCBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgd2lsbCBiZSBlbmFibGVkIGlmIHJ1bm5pbmcgb24gYSBOVU1BXG4xMDUxOlx0XHQgIG1hY2hpbmUuXG4xMDUyOlx0XG4xMDUzOlx0Y29uZmlnIFNMQUJfT0JKX0VYVFxuMTA1NDpcdFx0Ym9vbFxuMTA1NTpcdFxuMTA1NjpcdG1lbnVjb25maWcgQ0dST1VQU1xuMTA1NzpcdFx0Ym9vbCBcJiMzNDtDb250cm9sIEdyb3VwIHN1cHBvcnRcJiMzNDtcbjEwNTg6XHRcdHNlbGVjdCBLRVJORlNcbjEwNTk6XHRcdGhlbHBcbjEwNjA6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBncm91cGluZyBzZXRzIG9mIHByb2Nlc3NlcyB0b2dldGhlciwgZm9yXG4xMDYxOlx0XHQgIHVzZSB3aXRoIHByb2Nlc3MgY29udHJvbCBzdWJzeXN0ZW1zIHN1Y2ggYXMgQ3B1c2V0cywgQ0ZTLCBtZW1vcnlcbjEwNjI6XHRcdCAgY29udHJvbHMgb3IgZGV2aWNlIGlzb2xhdGlvbi5cbjEwNjM6XHRcdCAgU2VlXG4xMDY0Olx0XHRcdC0gRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy5yc3RcdChDRlMpXG4xMDY1Olx0XHRcdC0gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvIChmZWF0dXJlcyBmb3IgZ3JvdXBpbmcsIGlzb2xhdGlvblxuMTA2NjpcdFx0XHRcdFx0XHQgIGFuZCByZXNvdXJjZSBjb250cm9sKVxuMTA2NzpcdFxuMTA2ODpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDY5Olx0XG4xMDcwOlx0aWYgQ0dST1VQU1xuMTA3MTpcdFxuMTA3MjpcdGNvbmZpZyBQQUdFX0NPVU5URVJcbjEwNzM6XHRcdGJvb2xcbjEwNzQ6XHRcbjEwNzU6XHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbjEwNzY6XHRcdGJvb2wgXCYjMzQ7RmF2b3IgZHluYW1pYyBtb2RpZmljYXRpb24gbGF0ZW5jeSByZWR1Y3Rpb24gYnkgZGVmYXVsdFwmIzM0O1xuMTA3NzpcdFx0aGVscFxuMTA3ODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBcJiMzNDtmYXZvcmR5bm1vZHNcJiMzNDsgbW91bnQgb3B0aW9uIGJ5IGRlZmF1bHRcbjEwNzk6XHRcdCAgd2hpY2ggcmVkdWNlcyB0aGUgbGF0ZW5jaWVzIG9mIGR5bmFtaWMgY2dyb3VwIG1vZGlmaWNhdGlvbnMgc3VjaFxuMTA4MDpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwODE6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwODI6XHRcbjEwODM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA4NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk2MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGgga2VybmVsIGRldmVsb3BtZW50OgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCBDb25zdHJ1Y3Rpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYENHUk9VUFNgIGFuZCBgTUVNQ0dgLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGVycml0b3J5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc29tZSBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBvYmplY3QgZmlsZXMgYXJlIGNvbXBpbGVkLiBUbyBzdGFydCwgdGhlIGBtbS9NYWtlZmlsZWAgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgaG93IGBsaXN0X2xydS5vYCBpcyBidWlsdC4gSXQmIzM5O3MgdGltZSB0byBpbnZlc3RpZ2F0ZSB0aGUgYnVpbGQgcHJvY2VzcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlzdF9scnVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuLS1cbm1tL01ha2VmaWxlLTU2LVx0XHRcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXG5tbS9NYWtlZmlsZTo1NzpcdFx0XHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcbm1tL01ha2VmaWxlLTU4LVx0XHRcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI3MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGxpc3RfbHJ1YCBPYmplY3QgRmlsZSBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gYGxpc3RfbHJ1Lm9gIGlzIGRlZmluaXRlbHkgZGVjbGFyZWQgYXMgYG9iai15YCwgbWVhbmluZyBpdCYjMzk7cyBzbGF0ZWQgdG8gYmUgYnVpbHQgaW50byB0aGUga2VybmVsIGltYWdlLiBUaGF0JiMzOTtzIGEga2V5IGZpcnN0IHBvaW50IHRvIG5vdGUuIFRoZW4sIEkgc2VlIHRoYXQgdGhlIGBfX2xpc3RfbHJ1X2luaXRgIGZ1bmN0aW9uIGNvbnRhaW5zIGFuIGAjaWZkZWYgQ09ORklHX01FTUNHYCBibG9jay4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBgTUVNQ0dgIGFzIGEgZGVwZW5kZW5jeSwgYW5kIHdlIGtub3cgYE1FTUNHYCBpdHNlbGYgcmVsaWVzIG9uIGBDR1JPVVBTYC4gVGhlcmVmb3JlLCBpZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9uLCB0aGUgY29kZSB3aXRoaW4gdGhhdCBzcGVjaWZpYyBgI2lmZGVmYCBibG9jayB3aWxsIGJlIGNvbXBpbGVkLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXNlLWNhc2VzIHJlbGF0ZWQgdG8gYGxpc3RfbHJ1YCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGNhbGwgYF9fbGlzdF9scnVfaW5pdGAuIFRoYXQgd2lsbCBpbW1lZGlhdGVseSBnaXZlIG1lIGEgc2Vuc2Ugb2YgdGhlIGluaXRpYWxpemF0aW9uIHBhdGguIEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBtbS9saXN0X2xydS5jYCB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQgYW5kIGhvdyB0aGUgbW9kdWxlIGludGVyYWN0cyB3aXRoIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiBob3cgdGhpcyBtb2R1bGUgZnVuY3Rpb25zIGFuZCB3aGVyZSBpdCBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2xpc3RfbHJ1X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzPTY5PSAgICBwdWIoY3JhdGUpIGZuIHJlZ2lzdGVyKFx1MDAyNiYjMzk7c3RhdGljIHNlbGYsIG5hbWU6IFx1MDAyNkNTdHIpIC1cdTAwM2UgUmVzdWx0XHUwMDNjKClcdTAwM2Uge1xuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5ycy03Ni0gICAgICAgIC8vIFNBRkVUWTogVGhlIGZpZWxkIGlzIG5vdCB5ZXQgdXNlZCwgc28gd2UgY2FuIGluaXRpYWxpemUgaXQuXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnM6Nzc6ICAgICAgICBsZXQgcmV0ID0gdW5zYWZlIHsgYmluZGluZ3M6Ol9fbGlzdF9scnVfaW5pdChzZWxmLmxpc3RfbHJ1LmdldCgpLCBmYWxzZSwgcHRyOjpudWxsX211dCgpKSB9O1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzLTc4LSAgICAgICAgaWYgcmV0ICE9IDAge1xuLS1cbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaD02ND12b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpO1xuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjY1OmludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNjYtXHRcdCAgICBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNjgtI2RlZmluZSBsaXN0X2xydV9pbml0KGxydSlcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg6Njk6XHRfX2xpc3RfbHJ1X2luaXQoKGxydSksIGZhbHNlLCBOVUxMKVxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTcwLSNkZWZpbmUgbGlzdF9scnVfaW5pdF9tZW1jZyhscnUsIHNocmlua2VyKVx0XHRcXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjcxOlx0X19saXN0X2xydV9pbml0KChscnUpLCB0cnVlLCBzaHJpbmtlcilcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC03Mi1cbi0tXG5tbS9saXN0X2xydS5jPTY1OT1zdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuLS1cbm1tL2xpc3RfbHJ1LmMtNjYzLVxubW0vbGlzdF9scnUuYzo2NjQ6aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbm1tL2xpc3RfbHJ1LmMtNjY1LXtcbi0tXG5tbS9saXN0X2xydS5jLTY4OS19XG5tbS9saXN0X2xydS5jOjY5MDpFWFBPUlRfU1lNQk9MX0dQTChfX2xpc3RfbHJ1X2luaXQpO1xubW0vbGlzdF9scnUuYy02OTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjUyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMaXN0IExSVSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGxpc3RfbHJ1YCBpbml0aWFsaXphdGlvbiBjb2RlLiBJdCBsb29rcyBsaWtlIGBfX2xpc3RfbHJ1X2luaXRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLCBjYWxsZWQgdGhyb3VnaCBgbGlzdF9scnVfaW5pdGAgYW5kIGBsaXN0X2xydV9pbml0X21lbWNnYC4gVGhlIGludGVyZXN0aW5nIHBvaW50IGhlcmUgaXMgdGhlIGBsaXN0X2xydV9pbml0X21lbWNnYCB2YXJpYW50LCBzbyBsZXQmIzM5O3MgZGlnIGludG8gaXRzIHVzYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggYGxpc3RfbHJ1X2luaXRfbWVtY2dgIGdldHMgY2FsbGVkLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgaW50ZWdyYXRpb24gd29ya3MgaW4gdGhpcyBgbGlzdF9scnVgIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaXN0X2xydV9pbml0X21lbWNnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25mcy9uZnM0MnhhdHRyLmM9OTgwPXN0YXRpYyBpbnQgX19pbml0IG5mczRfeGF0dHJfc2hyaW5rZXJfaW5pdChzdHJ1Y3Qgc2hyaW5rZXIgKipzaHJpbmtlcixcbi0tXG5mcy9uZnMvbmZzNDJ4YXR0ci5jLTk5MC1cbmZzL25mcy9uZnM0MnhhdHRyLmM6OTkxOlx0cmV0ID0gbGlzdF9scnVfaW5pdF9tZW1jZyhscnUsICpzaHJpbmtlcik7XG5mcy9uZnMvbmZzNDJ4YXR0ci5jLTk5Mi1cdGlmIChyZXQpIHtcbi0tXG5mcy9zdXBlci5jPTMyMz1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLFxuLS1cbmZzL3N1cGVyLmMtMzk2LVxuZnMvc3VwZXIuYzozOTc6XHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcdTAwMjZzLVx1MDAzZXNfZGVudHJ5X2xydSwgcy1cdTAwM2VzX3NocmluaykpXG5mcy9zdXBlci5jLTM5OC1cdFx0Z290byBmYWlsO1xuZnMvc3VwZXIuYzozOTk6XHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcdTAwMjZzLVx1MDAzZXNfaW5vZGVfbHJ1LCBzLVx1MDAzZXNfc2hyaW5rKSlcbmZzL3N1cGVyLmMtNDAwLVx0XHRnb3RvIGZhaWw7XG4tLVxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oPTY1PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsXG4tLVxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTY5LVx0X19saXN0X2xydV9pbml0KChscnUpLCBmYWxzZSwgTlVMTClcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDo3MDojZGVmaW5lIGxpc3RfbHJ1X2luaXRfbWVtY2cobHJ1LCBzaHJpbmtlcilcdFx0XFxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC03MS1cdF9fbGlzdF9scnVfaW5pdCgobHJ1KSwgdHJ1ZSwgc2hyaW5rZXIpXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNzItXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg6NzM6c3RhdGljIGlubGluZSBpbnQgbGlzdF9scnVfaW5pdF9tZW1jZ19rZXkoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNzQtXHRcdFx0XHRcdCAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXG4tLVxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTc4LSNlbmRpZlxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjc5Olx0cmV0dXJuIGxpc3RfbHJ1X2luaXRfbWVtY2cobHJ1LCBzaHJpbmtlcik7XG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtODAtfVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTA3MS1cbm1tL2h1Z2VfbWVtb3J5LmM6MTA3MjpcdGlmIChsaXN0X2xydV9pbml0X21lbWNnX2tleShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXG5tbS9odWdlX21lbW9yeS5jLTEwNzMtXHRcdFx0XHQgICAgZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIsXG4tLVxubW0vc2htZW0uYz01MTU3PXN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxubW0vc2htZW0uYy01MjM3LSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3NobWVtLmM6NTIzODpcdGlmIChsaXN0X2xydV9pbml0X21lbWNnKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBzYi1cdTAwM2VzX3NocmluaykpXG5tbS9zaG1lbS5jLTUyMzktXHRcdGdvdG8gZmFpbGVkO1xuLS1cbm1tL3dvcmtpbmdzZXQuYz03OTM9c3RhdGljIGludCBfX2luaXQgd29ya2luZ3NldF9pbml0KHZvaWQpXG4tLVxubW0vd29ya2luZ3NldC5jLTgyNC1cbm1tL3dvcmtpbmdzZXQuYzo4MjU6XHRyZXQgPSBsaXN0X2xydV9pbml0X21lbWNnX2tleShcdTAwMjZzaGFkb3dfbm9kZXMsIHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLFxubW0vd29ya2luZ3NldC5jLTgyNi1cdFx0XHRcdCAgICAgIFx1MDAyNnNoYWRvd19ub2Rlc19rZXkpO1xuLS1cbm1tL3pzd2FwLmM9MTc1OD1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4tLVxubW0venN3YXAuYy0xNzgzLVx0XHRnb3RvIHNocmlua2VyX2ZhaWw7XG5tbS96c3dhcC5jOjE3ODQ6XHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcdTAwMjZ6c3dhcF9saXN0X2xydSwgenN3YXBfc2hyaW5rZXIpKVxubW0venN3YXAuYy0xNzg1LVx0XHRnb3RvIGxydV9mYWlsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUwOQoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiAyMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRmluYWwgVGhvdWdodHMgb24gYF9fbGlzdF9scnVfaW5pdGAgYW5kIGl0cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYF9fbGlzdF9scnVfaW5pdGAgZnVuY3Rpb24uIEl0JiMzOTtzIGNhbGxlZCBpbiBhIGZldyBrZXkgcGxhY2VzLCBsaWtlIHdoZW4gZmlsZXN5c3RlbXMgYXJlIG1vdW50ZWQgd2l0aCBgYWxsb2Nfc3VwZXJgIGFuZCBkdXJpbmcgenN3YXAgc2V0dXAuIFRoZSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIHRoYXQgc3ltYm9sLgoKV2UmIzM5O3ZlIGdvdCBgV29ydGhGdXp6aW5nYCBzZXQgdG8gdHJ1ZSwgd2hpY2ggSSBhZ3JlZSB3aXRoLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIHRoZSBiYXNlcyBjb3ZlcmVkIGJlZm9yZSB3ZSBzdWJtaXQgdGhpcy4KClRoZSBwYXRjaCYjMzk7cyBsb2dpYyBpcyBzb3VuZC4gSXQgZXNzZW50aWFsbHkgZW5zdXJlcyB0aGF0IGlmIG1lbW9yeSBjZ3JvdXBzIGFyZSBkaXNhYmxlZCB2aWEgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAsIHRoZSBjb2RlIGF2b2lkcyBpbml0aWFsaXppbmcgcGVyLW1lbWNnIExSVSBsaXN0cyB3aXRoaW4gYF9fbGlzdF9scnVfaW5pdGAsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yLiBUaGF04oCZcyBhIGdvb2QgbW9kaWZpY2F0aW9uIHRvIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyB0b3VjaGluZyBsaXN0X2xydXMgaXMgYWx3YXlzIGludGVyZXN0aW5nLCBlc3BlY2lhbGx5IGR1cmluZyBpbml0aWFsaXphdGlvbiBvZiBmaWxlc3lzdGVtcywgYW5kIHRoZSBsb2dpYyBpcyBzb3VuZC4KClRoZSBgRm9jdXNTeW1ib2xzYCBhcmUsIGFwcHJvcHJpYXRlbHksIGBbJiMzNDtfX2xpc3RfbHJ1X2luaXQmIzM0O11gLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBzcG90IG9uLCBpbmNsdWRpbmcgYm90aCBgTUVNQ0dgIGFuZCBgQ0dST1VQU2AuIEnigJltIGNvbmZpZGVudCB3ZSYjMzk7dmUgZ290IGEgc29saWQgcmF0aW9uYWxlLiBXZSYjMzk7cmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2xpc3RfbHJ1X2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBfX2xpc3RfbHJ1X2luaXQoKSB0byBlbnN1cmUgbWVtY2dfYXdhcmUgaXMgc2V0IHRvIGZhbHNlIHdoZW4gbWVtX2Nncm91cF9kaXNhYmxlZCgpIGlzIHRydWUsIHByZXZlbnRpbmcgaW5hcHByb3ByaWF0ZSBpbml0aWFsaXphdGlvbiBvZiBwZXItbWVtY2cgbGlzdCBMUlVzIHdoZW4gbWVtb3J5IGNncm91cHMgYXJlIGRpc2FibGVkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvZGUgaW4ga2VybmVsIGxpc3RfbHJ1IGluaXRpYWxpemF0aW9uIChlLmcuLCBkdXJpbmcgZmlsZXN5c3RlbSBtb3VudCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2xpc3RfbHJ1X2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBfX2xpc3RfbHJ1X2luaXQoKSB0byBlbnN1cmUgbWVtY2dfYXdhcmUgaXMgc2V0IHRvIGZhbHNlIHdoZW4gbWVtX2Nncm91cF9kaXNhYmxlZCgpIGlzIHRydWUsIHByZXZlbnRpbmcgaW5hcHByb3ByaWF0ZSBpbml0aWFsaXphdGlvbiBvZiBwZXItbWVtY2cgbGlzdCBMUlVzIHdoZW4gbWVtb3J5IGNncm91cHMgYXJlIGRpc2FibGVkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvZGUgaW4ga2VybmVsIGxpc3RfbHJ1IGluaXRpYWxpemF0aW9uIChlLmcuLCBkdXJpbmcgZmlsZXN5c3RlbSBtb3VudCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGFsb25nc2lkZSBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHNvIHRoYXQgYG1lbWNnX2F3YXJlYCBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQgYXQgYm9vdC4gVGhpcyBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgY29uZmlndXJhdGlvbiBjaGVjayBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBzdHJ1Y3QgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IG9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTYyZDkyNmQ4NmJiMmU2NmQ0YTgwODYwN2EwNjBkNDI2YWYwYjU0ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDQ6NDY6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuYwppbmRleCAzNjY2MmQwMmZmOTYzLi5hNDUyMmNhOTNlYmNiIDEwMDY0NAotLS0gYS9tbS9saXN0X2xydS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2xpc3RfbHJ1LmMKQEAgLTY3MSw3ICYjNDM7NjcxLDcgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHIKIAllbHNlCiAJCWxydS0mZ3Q7c2hyaW5rZXJfaWQgPSAtMTsKIAotCWlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkKIAkJbWVtY2dfYXdhcmUgPSBmYWxzZTsKICNlbmRpZgogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN1YnRsZSBDaGFuZ2UgaW4gYGxpc3RfbHJ1LmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vbGlzdF9scnUuY2AuIEl0JiMzOTtzIGEgc21hbGwgY2hhbmdlLCBidXQgcG90ZW50aWFsbHkgaW1wb3J0YW50LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb3JlIG9mIGl0IGlzIGFyb3VuZCBsaW5lIDY3MSwgd2hlcmUgaXQmIzM5O3MgY2hlY2tpbmcgd2hldGhlciBvciBub3QgdGhlIG1lbW9yeSBjZ3JvdXAgc3R1ZmYgaXMgZGlzYWJsZWQuIFByZXZpb3VzbHksIGl0IHdhcyBvbmx5IGNoZWNraW5nIGBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKWAuIE5vdywgaXQmIzM5O3MgY2hlY2tpbmcgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKWAuCgpBaCwgSSBzZWUuIFRoZXkmIzM5O3JlIGJyb2FkZW5pbmcgdGhlIGNvbmRpdGlvbiBmb3IgZGlzYWJsaW5nIG1lbW9yeSBjZ3JvdXAgYXdhcmVuZXNzIHdpdGhpbiB0aGUgYGxpc3RfbHJ1YCBjb2RlLiAgT3JpZ2luYWxseSwgaXQgb25seSBhY2NvdW50ZWQgZm9yIHRoZSBrZXJuZWwgbWVtb3J5IGNncm91cCBiZWluZyBkaXNhYmxlZC4gTm93LCBpdCYjMzk7bGwgYWxzbyBkaXNhYmxlIGF3YXJlbmVzcyBpZiB0aGUgZW50aXJlIG1lbW9yeSBjZ3JvdXAgZnVuY3Rpb25hbGl0eSBpcyBkaXNhYmxlZC4gVGhpcyBpcyBhIGdvb2QgbW92ZTsgdGhlIGNvZGUgc2hvdWxkIGFsaWduIHdpdGggdGhlIGdsb2JhbCBzZXR0aW5nLiBUaGlzIHNlZW1zIGxpa2UgYSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZSwgbWFraW5nIGl0IGxlc3MgcHJvbmUgdG8gY29ybmVyIGNhc2VzIG9yIG1pc2NvbmZpZ3VyYXRpb25zIHdoZXJlIHBhcnQgb2YgdGhlIG1lbWNnIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBidXQgdGhlIGtlcm5lbCBtZW1vcnkgcGFydCBpc24mIzM5O3QuIEl0IHdpbGwgbWFrZSB0aGUgY29kZSBtb3JlIHJvYnVzdCBhZ2FpbnN0IGluY29ycmVjdCBjb25maWd1cmF0aW9ucy4gTmljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NTA6XHRcdHJlcyA9IF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcbiA2NTE6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiA2NTI6XHRcdHJldHVybiByZXM7XG4gNjUzOlx0fVxuIDY1NDpcdCNlbHNlXG4gNjU1Olx0c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXG4gNjU2Olx0e1xuIDY1NzpcdH1cbiA2NTg6XHRcbiA2NTk6XHRzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuIDY2MDpcdHtcbiA2NjE6XHR9XG4gNjYyOlx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIDY2MzpcdFxuIDY2NDpcdGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4gNjY1Olx0e1xuIDY2NjpcdFx0aW50IGk7XG4gNjY3Olx0XG4gNjY4Olx0I2lmZGVmIENPTkZJR19NRU1DR1xuIDY2OTpcdFx0aWYgKHNocmlua2VyKVxuIDY3MDpcdFx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cdTAwM2VpZDtcbiA2NzE6XHRcdGVsc2VcbiA2NzI6XHRcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gLTE7XG4gNjczOlx0XG4gNjc0Olx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuIDY3NTpcdFx0XHRtZW1jZ19hd2FyZSA9IGZhbHNlO1xuIDY3NjpcdCNlbmRpZlxuIDY3NzpcdFxuIDY3ODpcdFx0bHJ1LVx1MDAzZW5vZGUgPSBremFsbG9jX29ianMoKmxydS1cdTAwM2Vub2RlLCBucl9ub2RlX2lkcyk7XG4gNjc5Olx0XHRpZiAoIWxydS1cdTAwM2Vub2RlKVxuIDY4MDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA2ODE6XHRcbiA2ODI6XHRcdGZvcl9lYWNoX25vZGUoaSlcbiA2ODM6XHRcdFx0aW5pdF9vbmVfbHJ1KGxydSwgXHUwMDI2bHJ1LVx1MDAzZW5vZGVbaV0ubHJ1KTtcbiA2ODQ6XHRcbiA2ODU6XHRcdG1lbWNnX2luaXRfbGlzdF9scnUobHJ1LCBtZW1jZ19hd2FyZSk7XG4gNjg2Olx0XHRsaXN0X2xydV9yZWdpc3RlcihscnUpO1xuIDY4NzpcdFxuIDY4ODpcdFx0cmV0dXJuIDA7XG4gNjg5Olx0fVxuIDY5MDpcdEVYUE9SVF9TWU1CT0xfR1BMKF9fbGlzdF9scnVfaW5pdCk7XG4gNjkxOlx0XG4gNjkyOlx0dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuIDY5MzpcdHtcbiA2OTQ6XHRcdC8qIEFscmVhZHkgZGVzdHJveWVkIG9yIG5vdCB5ZXQgaW5pdGlhbGl6ZWQ/ICovXG4gNjk1Olx0XHRpZiAoIWxydS1cdTAwM2Vub2RlKVxuIDY5NjpcdFx0XHRyZXR1cm47XG4gNjk3Olx0XG4gNjk4Olx0XHRsaXN0X2xydV91bnJlZ2lzdGVyKGxydSk7XG4gNjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMYXRlc3QgUGF0Y2ggZm9yIExpc3QgTFJVIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCB0aGUgY2hhbmdlIGluIGBfX2xpc3RfbHJ1X2luaXQoKWAuIFByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyBjaGVja2luZyBpZiBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHdhcyB0cnVlIHRvIHNldCBgbWVtY2dfYXdhcmVgIHRvIGZhbHNlLiBOb3csIHRoZSBsb2dpYyBoYXMgYmVlbiBleHBhbmRlZDsgaXQgY2hlY2tzIGlmICplaXRoZXIqIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgICpvciogYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYCBpcyB0cnVlIGJlZm9yZSBkaXNhYmxpbmcgYG1lbWNnX2F3YXJlYC4gVGhhdCYjMzk7cyBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgZGlzdGluY3Rpb24sIG9wZW5pbmcgdXAgdGhlIHBvc3NpYmlsaXR5IG9mIGRpc2FibGluZyBtZW1vcnkgY2dyb3VwIGF3YXJlbmVzcyB1bmRlciBtb3JlIGNpcmN1bXN0YW5jZXMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9zZSBuZXcgY29uZGl0aW9ucyBiZXR0ZXIuCgpOZXh0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGhpZ2hlci1sZXZlbCBjb2RlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgbWVtY2dfaW5pdF9saXN0X2xydWAgbmV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSByZWFsIGNoYW5nZSBvZiBiZWhhdmlvciwgb3IgaWYgdGhpcyBpcyBqdXN0IGEgcmVmYWN0b3JpbmcgdGhhdCBtYWtlcyB0aGUgY29kZSBjbGVhbmVyLiBQZXJoYXBzIHRoaXMgaGVscHMgdG8gbWFuYWdlIGRpZmZlcmVudCBjZ3JvdXAgY29uZmlndXJhdGlvbnMsIG9yIGl0IHNpbXBseSBjb25zb2xpZGF0ZXMgY2hlY2tzLiBUaGUgbmV3IGNoZWNrIG1heSBoYXZlIGNvbnNlcXVlbmNlcyBvbiB0aGUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cywgc28gSSBuZWVkIHRvIGV4cGxvcmUgaXRzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1OTA6XHRcdFx0ICogS2VlcCBmaW5kaW5nIHRoZSBmYXJlc3QgcGFyZW50IHRoYXQgd2FzbiYjMzk7dCBwb3B1bGF0ZWRcbiA1OTE6XHRcdFx0ICogdW50aWwgZm91bmQgbWVtY2cgaXRzZWxmLlxuIDU5MjpcdFx0XHQgKi9cbiA1OTM6XHRcdFx0cG9zID0gbWVtY2c7XG4gNTk0Olx0XHRcdHBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKHBvcyk7XG4gNTk1Olx0XHRcdHdoaWxlICghbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHBhcmVudCwgbHJ1KSkge1xuIDU5NjpcdFx0XHRcdHBvcyA9IHBhcmVudDtcbiA1OTc6XHRcdFx0XHRwYXJlbnQgPSBwYXJlbnRfbWVtX2Nncm91cChwb3MpO1xuIDU5ODpcdFx0XHR9XG4gNTk5Olx0XG4gNjAwOlx0XHRcdGlmICghbWxydSkge1xuIDYwMTpcdFx0XHRcdG1scnUgPSBtZW1jZ19pbml0X2xpc3RfbHJ1X29uZShscnUsIGdmcCk7XG4gNjAyOlx0XHRcdFx0aWYgKCFtbHJ1KVxuIDYwMzpcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNjA0Olx0XHRcdH1cbiA2MDU6XHRcdFx0eGFzX3NldChcdTAwMjZ4YXMsIHBvcy1cdTAwM2VrbWVtY2dfaWQpO1xuIDYwNjpcdFx0XHRkbyB7XG4gNjA3Olx0XHRcdFx0eGFzX2xvY2tfaXJxc2F2ZShcdTAwMjZ4YXMsIGZsYWdzKTtcbiA2MDg6XHRcdFx0XHRpZiAoIXhhc19sb2FkKFx1MDAyNnhhcykgXHUwMDI2XHUwMDI2ICFjc3NfaXNfZHlpbmcoXHUwMDI2cG9zLVx1MDAzZWNzcykpIHtcbiA2MDk6XHRcdFx0XHRcdHhhc19zdG9yZShcdTAwMjZ4YXMsIG1scnUpO1xuIDYxMDpcdFx0XHRcdFx0aWYgKCF4YXNfZXJyb3IoXHUwMDI2eGFzKSlcbiA2MTE6XHRcdFx0XHRcdFx0bWxydSA9IE5VTEw7XG4gNjEyOlx0XHRcdFx0fVxuIDYxMzpcdFx0XHRcdHhhc191bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ4YXMsIGZsYWdzKTtcbiA2MTQ6XHRcdFx0fSB3aGlsZSAoeGFzX25vbWVtKFx1MDAyNnhhcywgZ2ZwKSk7XG4gNjE1Olx0XHR9IHdoaWxlIChwb3MgIT0gbWVtY2cgXHUwMDI2XHUwMDI2ICFjc3NfaXNfZHlpbmcoXHUwMDI2cG9zLVx1MDAzZWNzcykpO1xuIDYxNjpcdFxuIDYxNzpcdFx0aWYgKHVubGlrZWx5KG1scnUpKVxuIDYxODpcdFx0XHRrZnJlZShtbHJ1KTtcbiA2MTk6XHRcbiA2MjA6XHRcdHJldHVybiB4YXNfZXJyb3IoXHUwMDI2eGFzKTtcbiA2MjE6XHR9XG4gNjIyOlx0XG4gNjIzOlx0aW50IG1lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4gNjI0Olx0XHRcdFx0IGdmcF90IGdmcClcbiA2MjU6XHR7XG4gNjI2Olx0XHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgfHwgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKG1lbWNnLCBscnUpKVxuIDYyNzpcdFx0XHRyZXR1cm4gMDtcbiA2Mjg6XHRcdHJldHVybiBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBscnUsIGdmcCk7XG4gNjI5Olx0fVxuIDYzMDpcdFxuIDYzMTpcdGludCBmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiA2MzI6XHRcdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwKVxuIDYzMzpcdHtcbiA2MzQ6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiA2MzU6XHRcdGludCByZXM7XG4gNjM2Olx0XG4gNjM3Olx0XHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpXG4gNjM4Olx0XHRcdHJldHVybiAwO1xuIDYzOTpcdFxuIDY0MDpcdFx0LyogRmFzdCBwYXRoIHdoZW4gbGlzdF9scnUgaGVhZHMgYWxyZWFkeSBleGlzdCAqL1xuIDY0MTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDY0MjpcdFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4gNjQzOlx0XHRyZXMgPSBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQobWVtY2csIGxydSk7XG4gNjQ0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA2NDU6XHRcdGlmIChsaWtlbHkocmVzKSlcbiA2NDY6XHRcdFx0cmV0dXJuIDA7XG4gNjQ3Olx0XG4gNjQ4Olx0XHQvKiBBbGxvY2F0aW9uIG1heSBibG9jaywgcGluIHRoZSBtZW1jZyAqL1xuIDY0OTpcdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYyMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyBgbWVtY2dfaW5pdF9saXN0X2xydWAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYG1lbWNnX2luaXRfbGlzdF9scnVgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgZmVlbHMgc2lnbmlmaWNhbnQg4oCTIGxpa2VseSByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uLCBwb3NzaWJseSB3aXRoaW4gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIChtZW1jZykgc3Vic3lzdGVtLCBhbmQgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgbGlzdCBMUlVzIChMZWFzdCBSZWNlbnRseSBVc2VkIGxpc3RzKS4gS25vd2luZyBob3cgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgbWVtY2cgbWVtb3J5IG1hbmFnZW1lbnQgZmxvdyBkdXJpbmcgYm9vdCBvciBtb2R1bGUgbG9hZCwgZGVwZW5kaW5nIG9uIGl0cyB1c2FnZS4gVGhlIHNwZWNpZmljIExSVSBpbXBsZW1lbnRhdGlvbiBpcyBhbHNvIG9mIGhpZ2ggaW50ZXJlc3QuIFNvLCBsZXQgbWUgZ2V0IHRoYXQgZGVmaW5pdGlvbiBhbmQgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTUwOlx0XHRcdCAqL1xuIDU1MTpcdFx0XHRmb3JfZWFjaF9ub2RlKGkpXG4gNTUyOlx0XHRcdFx0bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKGxydSwgaSwgXHUwMDI2bWxydS1cdTAwM2Vub2RlW2ldLCBwYXJlbnQpO1xuIDU1MzpcdFxuIDU1NDpcdFx0XHR4YV9lcmFzZV9pcnEoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1jZy1cdTAwM2VrbWVtY2dfaWQpO1xuIDU1NTpcdFxuIDU1NjpcdFx0XHQvKlxuIDU1NzpcdFx0XHQgKiBIZXJlIGFsbCBsaXN0X2xydXMgY29ycmVzcG9uZGluZyB0byB0aGUgY2dyb3VwIGFyZSBndWFyYW50ZWVkXG4gNTU4Olx0XHRcdCAqIHRvIHJlbWFpbiBlbXB0eSwgd2UgY2FuIHNhZmVseSBmcmVlIHRoaXMgbHJ1LCBhbnkgZnVydGhlclxuIDU1OTpcdFx0XHQgKiBtZW1jZ19saXN0X2xydV9hbGxvYygpIGNhbGwgd2lsbCBzaW1wbHkgYmFpbCBvdXQuXG4gNTYwOlx0XHRcdCAqL1xuIDU2MTpcdFx0XHRrdmZyZWVfcmN1KG1scnUsIHJjdSk7XG4gNTYyOlx0XHR9XG4gNTYzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9scnVzX211dGV4KTtcbiA1NjQ6XHR9XG4gNTY1Olx0XG4gNTY2Olx0c3RhdGljIGlubGluZSBib29sIG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gNTY3Olx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiA1Njg6XHR7XG4gNTY5Olx0XHRpbnQgaWR4ID0gbWVtY2ctXHUwMDNla21lbWNnX2lkO1xuIDU3MDpcdFxuIDU3MTpcdFx0cmV0dXJuIGlkeCBcdTAwM2MgMCB8fCB4YV9sb2FkKFx1MDAyNmxydS1cdTAwM2V4YSwgaWR4KTtcbiA1NzI6XHR9XG4gNTczOlx0XG4gNTc0Olx0c3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiA1NzU6XHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfbHJ1ICpscnUsIGdmcF90IGdmcClcbiA1NzY6XHR7XG4gNTc3Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDU3ODpcdFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1ID0gTlVMTDtcbiA1Nzk6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwb3MsICpwYXJlbnQ7XG4gNTgwOlx0XHRYQV9TVEFURSh4YXMsIFx1MDAyNmxydS1cdTAwM2V4YSwgMCk7XG4gNTgxOlx0XG4gNTgyOlx0XHRnZnAgXHUwMDI2PSBHRlBfUkVDTEFJTV9NQVNLO1xuIDU4MzpcdFx0LypcbiA1ODQ6XHRcdCAqIEJlY2F1c2UgdGhlIGxpc3RfbHJ1IGNhbiBiZSByZXBhcmVudGVkIHRvIHRoZSBwYXJlbnQgY2dyb3VwJiMzOTtzXG4gNTg1Olx0XHQgKiBsaXN0X2xydSwgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoaXMgY2dyb3VwIGFuZCBhbGwgaXRzXG4gNTg2Olx0XHQgKiBhbmNlc3RvcnMgaGF2ZSBhbGxvY2F0ZWQgbGlzdF9scnVfbWVtY2cuXG4gNTg3Olx0XHQgKi9cbiA1ODg6XHRcdGRvIHtcbiA1ODk6XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhvc2UgbGluZXMgaW4gYG1tL2xpc3RfbHJ1LmNgOgoKKipBbmFseXppbmcgYG1tL2xpc3RfbHJ1LmNgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYG1tL2xpc3RfbHJ1LmNgLiBUaGUgZmlyc3QgdGhpbmcgSSBhbHdheXMgZG8gaXMgZ2V0IGEgZmVlbCBmb3IgdGhlIGZpbGUmIzM5O3MgcHVycG9zZS4gYGxpc3RfbHJ1YCBzdWdnZXN0cyBhIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgY2FjaGUsIGltcGxlbWVudGVkIHVzaW5nIGxpbmtlZCBsaXN0cy4gR2l2ZW4gaXRzIGxvY2F0aW9uIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBkaXJlY3RvcnkgKGBtbWApLCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHBhZ2UgY2FjaGluZyBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGV2aWN0aW9uIGFuZCBhY2Nlc3MgdHJhY2tpbmcuIEkmIzM5O2xsIHByb2JhYmx5IHdhbnQgdG8gbG9vayBhdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGZpcnN0LCB0aGUgYGxpc3RfaGVhZGAgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQuIFRoZW4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGxpc3QgaXMgYmVpbmcgbWFpbnRhaW5lZCBhbmQgbG9vayBmb3IgdGhlIGludGVyZXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBsaXN0X2xydV9hZGRgLCBgbGlzdF9scnVfZ2V0YCBhbmQgYGxpc3RfbHJ1X2RlbGAgdG8gc2VlIGhvdyB0aGUgZWxlbWVudHMgYXJlIGFkZGVkLCBhY2Nlc3NlZCBhbmQgZGVsZXRlZCBmcm9tIHRoZSBMUlUgbGlzdCwgYXMgd2VsbCBhcyB0aGUgZXZpY3Rpb24gcHJvY2Vzcy4gQW5kLCBJIGFzc3VtZSwgdGhlcmUgbWF5IGJlIGxvY2tzIGluIHBsYWNlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3IgdGhlbS4gQWZ0ZXIgdGhhdCwgSSB3aWxsIHRyYWNlIHRoZSBwYXRocywgaG93IHRoZSBwYWdlcyBhcmUgYmVpbmcgaGFuZGxlZCwgaG93IGl0IGlzIGltcGxlbWVudGVkIGFuZCB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2xpc3RfbHJ1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdFxuIDUyMTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZHN0LVx1MDAzZWxvY2spO1xuIDUyMjpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNyYy1cdTAwM2Vsb2NrKTtcbiA1MjM6XHR9XG4gNTI0Olx0XG4gNTI1Olx0dm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIDUyNjpcdHtcbiA1Mjc6XHRcdHN0cnVjdCBsaXN0X2xydSAqbHJ1O1xuIDUyODpcdFx0aW50IGk7XG4gNTI5Olx0XG4gNTMwOlx0XHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XG4gNTMxOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGxydSwgXHUwMDI2bWVtY2dfbGlzdF9scnVzLCBsaXN0KSB7XG4gNTMyOlx0XHRcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydTtcbiA1MzM6XHRcbiA1MzQ6XHRcdFx0LypcbiA1MzU6XHRcdFx0ICogY3NzX2lzX2R5aW5nKCkgY2hlY2sgaW4gbWVtY2dfbGlzdF9scnVfYWxsb2MoKSBhdm9pZHNcbiA1MzY6XHRcdFx0ICogYWxsb2NhdGluZyBhIG5ldyBtbHJ1IHNpbmNlIENTU19EWUlORyBpcyBhbHJlYWR5IHNldCBmb3IgdGhpc1xuIDUzNzpcdFx0XHQgKiBtZW1jZyBhIHJjdSBncmFjZSBwZXJpb2QgYWdvLlxuIDUzODpcdFx0XHQgKi9cbiA1Mzk6XHRcdFx0bWxydSA9IHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1jZy1cdTAwM2VrbWVtY2dfaWQpO1xuIDU0MDpcdFx0XHRpZiAoIW1scnUpXG4gNTQxOlx0XHRcdFx0Y29udGludWU7XG4gNTQyOlx0XG4gNTQzOlx0XHRcdC8qXG4gNTQ0Olx0XHRcdCAqIFJlcGFyZW50IGVhY2ggcGVyLW5vZGUgbGlzdCBhbmQgbWFyayB0aGUgY2hpbGQgZGVhZFxuIDU0NTpcdFx0XHQgKiAoTE9OR19NSU4pIGJlZm9yZSBjbGVhcmluZyB4YXJyYXkgZW50cnkgb3RoZXJ3aXNlIGFcbiA1NDY6XHRcdFx0ICogY29uY3VycmVudCBsaXN0X2xydV9kZWwoKSBtYXkgY29ycnVwdCB0aGUgbGlzdCBpZiBpdCBhcnJpdmVzXG4gNTQ3Olx0XHRcdCAqIGFmdGVyIHhhcnJheSBjbGVhciBidXQgYmVmb3JlIHJlcGFyZW50aW5nIGFzXG4gNTQ4Olx0XHRcdCAqIGxvY2tfbGlzdF9scnVfb2ZfbWVtY2cgd2lsbCBhY3F1aXJlIHBhcmVudCYjMzk7cyBsb2NrIHdoaWxlIHRoZVxuIDU0OTpcdFx0XHQgKiBpdGVtIGlzIHN0aWxsIG9uIGNoaWxkJiMzOTtzIGxpc3QuXG4gNTUwOlx0XHRcdCAqL1xuIDU1MTpcdFx0XHRmb3JfZWFjaF9ub2RlKGkpXG4gNTUyOlx0XHRcdFx0bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKGxydSwgaSwgXHUwMDI2bWxydS1cdTAwM2Vub2RlW2ldLCBwYXJlbnQpO1xuIDU1MzpcdFxuIDU1NDpcdFx0XHR4YV9lcmFzZV9pcnEoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1jZy1cdTAwM2VrbWVtY2dfaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzYxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbWVtY2dfaW5pdF9saXN0X2xydWAgaW4gYG1tL2xpc3RfbHJ1LmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGlzIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIChtZW1jZykgaW50ZWdyYXRpb24gd29ya3Mgd2l0aCB0aGUgYGxpc3RfbHJ1YCBkYXRhIHN0cnVjdHVyZS4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbWVtY2dfaW5pdF9saXN0X2xydWAgc3BlY2lmaWNhbGx5LCBzbyBJJiMzOTttIG5hdmlnYXRpbmcgdG8gYG1tL2xpc3RfbHJ1LmNgIHRvIHNlZSBob3cgaXQgaW5pdGlhbGl6ZXMgYW5kIGludGVncmF0ZXMgdGhpcyBMUlUgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBtZW1jZyBmcmFtZXdvcmsuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGFzc29jaWF0aW5nIGEgc3BlY2lmaWMgYGxpc3RfbHJ1YCBpbnN0YW5jZSB3aXRoIGEgcGFydGljdWxhciBtZW1jZy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWTigJRwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBob3cgdGhlIGBsaXN0X2xydWAgaXRzZWxmIGlzIGluaXRpYWxpemVkLCBob3cgbWVtY2ctc3BlY2lmaWMgZmllbGRzIGFyZSBzZXQsIGFuZCBob3cgdGhpcyBsaW5rcyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBhY2NvdW50aW5nLiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIHBlci1jcHUgTFJVIGxpc3RzLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhhdCYjMzk7cyBoYW5kbGVkIGluIHRoZSBjb250ZXh0IG9mIG1lbWNncy4gVGhpcyBzaG91bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBvdmVyaGVhZCBvZiB1c2luZyBgbGlzdF9scnVgIHdpdGggbWVtY2dzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jZ19pbml0X2xpc3RfbHJ1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9saXN0X2xydS5jPTQ1MT1zdGF0aWMgdm9pZCBpbml0X29uZV9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXG4tLVxubW0vbGlzdF9scnUuYy00NjItI2lmZGVmIENPTkZJR19NRU1DR1xubW0vbGlzdF9scnUuYzo0NjM6c3RhdGljIHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWVtY2dfaW5pdF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGdmcF90IGdmcClcbm1tL2xpc3RfbHJ1LmMtNDY0LXtcbi0tXG5tbS9saXN0X2xydS5jLTQ3Ny1cbm1tL2xpc3RfbHJ1LmM6NDc4OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxubW0vbGlzdF9scnUuYy00Nzkte1xuLS1cbm1tL2xpc3RfbHJ1LmM9NTc0PXN0YXRpYyBpbnQgX19tZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbGlzdF9scnUuYy02MDAtXHRcdGlmICghbWxydSkge1xubW0vbGlzdF9scnUuYzo2MDE6XHRcdFx0bWxydSA9IG1lbWNnX2luaXRfbGlzdF9scnVfb25lKGxydSwgZ2ZwKTtcbm1tL2xpc3RfbHJ1LmMtNjAyLVx0XHRcdGlmICghbWxydSlcbi0tXG5tbS9saXN0X2xydS5jPTYzMT1pbnQgZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4tLVxubW0vbGlzdF9scnUuYy02NTQtI2Vsc2Vcbm1tL2xpc3RfbHJ1LmM6NjU1OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxubW0vbGlzdF9scnUuYy02NTYte1xuLS1cbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02ODQtXG5tbS9saXN0X2xydS5jOjY4NTpcdG1lbWNnX2luaXRfbGlzdF9scnUobHJ1LCBtZW1jZ19hd2FyZSk7XG5tbS9saXN0X2xydS5jLTY4Ni1cdGxpc3RfbHJ1X3JlZ2lzdGVyKGxydSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYG1tL2xpc3RfbHJ1LmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwcm9ibGVtICpzaG91bGQqIGJlIHNvbWV3aGVyZSBhcm91bmQgdGhlIGxpc3QgTFJVIGltcGxlbWVudGF0aW9uLCBzbyBsZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBsaW5lcyA0NzAgdG8gNDkwIGluIGBtbS9saXN0X2xydS5jYC4gVGhhdCBzZWN0aW9uIHVzdWFsbHkgY29udGFpbnMgdGhlIGNvcmUgbG9naWMgZm9yIFtpbnNlcnQgc3BlY2lmaWMgZnVuY3Rpb24gb3IgYXNwZWN0IHlvdSBleHBlY3QgdG8gZmluZCwgZS5nLiwgdGhlIGV2aWN0aW9uIHByb2Nlc3MsIHRoZSBMUlUmIzM5O3MgYWdpbmcgbWVjaGFuaXNtLCB0aGUgaW5zZXJ0aW9uL3JlbW92YWwgb2YgZWxlbWVudHNdLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIFtzcGVjaWZpYyBkZXRhaWxzIGJhc2VkIG9uIHlvdXIgZXhwZXJ0aXNlXS4gSG9wZWZ1bGx5LCBJIGNhbiBwaW5wb2ludCB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBvYnZpb3VzIHJhY2UgY29uZGl0aW9ucywgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbiBpc3N1ZXMsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgcmVsYXRlZCB0byB0aGUgTFJVJiMzOTtzIGludGVybmFsIHN0YXRlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSBsaWtlbHkgaGFwcGVuLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBkaXNzZWN0IHRoZSBjb2RlIGZsb3cgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBbc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIG9wZXJhdGlvbnMgcmVsZXZhbnQgdG8gdGhlIHByb2JsZW1dLiBIb3BlZnVsbHksIHRoYXQmIzM5O2xsIGJlIGVub3VnaCB0byBnaXZlIG1lIHNvbWUgY2x1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcwOlx0XHRcdHJldHVybiBOVUxMO1xuIDQ3MTpcdFxuIDQ3MjpcdFx0Zm9yX2VhY2hfbm9kZShuaWQpXG4gNDczOlx0XHRcdGluaXRfb25lX2xydShscnUsIFx1MDAyNm1scnUtXHUwMDNlbm9kZVtuaWRdKTtcbiA0NzQ6XHRcbiA0NzU6XHRcdHJldHVybiBtbHJ1O1xuIDQ3NjpcdH1cbiA0Nzc6XHRcbiA0Nzg6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfaW5pdF9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSlcbiA0Nzk6XHR7XG4gNDgwOlx0XHRpZiAobWVtY2dfYXdhcmUpXG4gNDgxOlx0XHRcdHhhX2luaXRfZmxhZ3MoXHUwMDI2bHJ1LVx1MDAzZXhhLCBYQV9GTEFHU19MT0NLX0lSUSk7XG4gNDgyOlx0XHRscnUtXHUwMDNlbWVtY2dfYXdhcmUgPSBtZW1jZ19hd2FyZTtcbiA0ODM6XHR9XG4gNDg0Olx0XG4gNDg1Olx0c3RhdGljIHZvaWQgbWVtY2dfZGVzdHJveV9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiA0ODY6XHR7XG4gNDg3Olx0XHRYQV9TVEFURSh4YXMsIFx1MDAyNmxydS1cdTAwM2V4YSwgMCk7XG4gNDg4Olx0XHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnU7XG4gNDg5Olx0XG4gNDkwOlx0XHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpXG4gNDkxOlx0XHRcdHJldHVybjtcbiA0OTI6XHRcbiA0OTM6XHRcdHhhc19sb2NrX2lycShcdTAwMjZ4YXMpO1xuIDQ5NDpcdFx0eGFzX2Zvcl9lYWNoKFx1MDAyNnhhcywgbWxydSwgVUxPTkdfTUFYKSB7XG4gNDk1Olx0XHRcdGtmcmVlKG1scnUpO1xuIDQ5NjpcdFx0XHR4YXNfc3RvcmUoXHUwMDI2eGFzLCBOVUxMKTtcbiA0OTc6XHRcdH1cbiA0OTg6XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4gNDk5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDA2CgkJCQkJCQlvdXRwdXQ6IDE2MgoJCQkJCQkJdGhvdWdodHM6IDQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbWVtY2dfYXdhcmVgIEZsYWcgQWRqdXN0bWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBjaGVja2luZyBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpbiBhZGRpdGlvbiB0byBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHdpdGhpbiBgX19saXN0X2xydV9pbml0KClgLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IGhvdyB3ZSBjb25maWd1cmUgdGhlIGBsaXN0X2xydWAgc3RydWN0dXJlIHdoZW4gbWVtb3J5IGNncm91cHMgYXJlIGRpc2FibGVkLiBTcGVjaWZpY2FsbHksIHdoZW4gYGNncm91cF9kaXNhYmxlPW1lbW9yeWAgaXMgcGFzc2VkLCBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCByZXR1cm5zIHRydWUuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSBgbGlzdF9scnVgIGlzICpub3QqIHRyZWF0ZWQgYXMgbWVtY2ctYXdhcmUgdW5kZXIgc3VjaCBjaXJjdW1zdGFuY2VzLCB3aGljaCBmb3JjZXMgYG1lbWNnX2F3YXJlYCB0byBmYWxzZS4gVGhlIHByaW9yIGNvZGUgbWlnaHQgaGF2ZSBtaXNzZWQgdGhpcyBjcnVjaWFsIHNldHRpbmcuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogV2hhdCYjMzk7cyB0aGUgcmlzayBoZXJlLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gbWVtb3J5IGluaXRpYWxpemF0aW9uLgoKSSYjMzk7dmUgY2FyZWZ1bGx5IGV4YW1pbmVkIHRoZSBjb2RlLiBUaGVyZSYjMzk7cyBubyBkYXRhIGJlaW5nIGxlYWtlZCB0byB1c2VyLXNwYWNlIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWMsIG5vIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGdvaW5nIHVuaW5pdGlhbGl6ZWQgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMsIGFuZCBubyBjb25kaXRpb25hbCBqdW1wcyByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhpcyBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5LW1hbmFnZW1lbnQgY29udHJvbCBmbGFnIChgbWVtY2dfYXdhcmVgKSBhZGp1c3RtZW50IHdpdGhpbiBgbGlzdF9scnVgIGluaXRpYWxpemF0aW9uLgoKUmVnYXJkaW5nIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5kIHJlbGF0ZWQgYnVnIGRldGVjdG9ycywgSSYjMzk7bSBjb25maWRlbnQgdGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIGlzc3Vlcy4gQW55IGZ1bmRhbWVudGFsIGJ1ZywgbGlrZSBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBsb2dpYyBpc3N1ZSBhcmlzaW5nIGZyb20gbWVtY2cgYmVpbmcgZGlzYWJsZWQsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIG9yIEtBU0FOIGR1cmluZyByb3V0aW5lIHRlc3RpbmcuIFRoZXJlIGFyZSBubyBleHBvc2VkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSBsZWFrcyB0aGF0IGNvdWxkIGZpbmQgdGhlaXIgd2F5IGludG8gdXNlciBzcGFjZS4KCkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgYSBsb3ctcmlzayBpbnRlcm5hbCBjb25maWd1cmF0aW9uIGFkanVzdG1lbnQuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjayBidWZmZXJzLCBvciB1c2VyLXNwYWNlIGNvcGllcyBhcmUgaW52b2x2ZWQuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgYXNzZXJ0IHRoYXQgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkgZm9yIHRoaXMgc3BlY2lmaWMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGFsb25nc2lkZSBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHNvIHRoYXQgYG1lbWNnX2F3YXJlYCBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQgYXQgYm9vdC4gVGhpcyBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgY29uZmlndXJhdGlvbiBjaGVjayBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBzdHJ1Y3QgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IG9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX2xpc3RfbHJ1X2luaXQoKWAgdG8gY2hlY2sgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgYWxvbmdzaWRlIGBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKWAgc28gdGhhdCBgbWVtY2dfYXdhcmVgIGlzIHNldCB0byBmYWxzZSB3aGVuIG1lbW9yeSBjZ3JvdXBzIGFyZSBkaXNhYmxlZCBhdCBib290LiBUaGlzIGlzIGFuIGludGVybmFsIGtlcm5lbCBjb25maWd1cmF0aW9uIGNoZWNrIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIHN0cnVjdCBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgb3IgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NjoxMC4wMzcyNzIwOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5Nzg4MTg1OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19saXN0X2xydV9pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGFsb25nc2lkZSBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHNvIHRoYXQgYG1lbWNnX2F3YXJlYCBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQgYXQgYm9vdC4gVGhpcyBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgY29uZmlndXJhdGlvbiBjaGVjayBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBzdHJ1Y3QgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IG9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIF9fbGlzdF9scnVfaW5pdCgpIHRvIGVuc3VyZSBtZW1jZ19hd2FyZSBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgaXMgdHJ1ZSwgcHJldmVudGluZyBpbmFwcHJvcHJpYXRlIGluaXRpYWxpemF0aW9uIG9mIHBlci1tZW1jZyBsaXN0IExSVXMgd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29kZSBpbiBrZXJuZWwgbGlzdF9scnUgaW5pdGlhbGl6YXRpb24gKGUuZy4sIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6MTAuMDM3Mjc3MTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMjA5Mjg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE2MmQ5MjZkODZiYjJlNjZkNGE4MDg2MDdhMDYwZDQyNmFmMGI1NGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAwNDo0NjowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuY1xcbmluZGV4IDM2NjYyZDAyZmY5NjMuLmE0NTIyY2E5M2ViY2IgMTAwNjQ0XFxuLS0tIGEvbW0vbGlzdF9scnUuY1xcbisrKyBiL21tL2xpc3RfbHJ1LmNcXG5AQCAtNjcxLDcgKzY3MSw3IEBAIGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyXFxuIFxcdGVsc2VcXG4gXFx0XFx0bHJ1LVxcdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xcbiBcXG4tXFx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbitcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbiBcXHRcXHRtZW1jZ19hd2FyZSA9IGZhbHNlO1xcbiAjZW5kaWZcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjEwLjY3MDQ4ODAyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjcwNzgxNzUwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2xpc3RfbHJ1X2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIF9fbGlzdF9scnVfaW5pdCgpIHRvIGVuc3VyZSBtZW1jZ19hd2FyZSBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgaXMgdHJ1ZSwgcHJldmVudGluZyBpbmFwcHJvcHJpYXRlIGluaXRpYWxpemF0aW9uIG9mIHBlci1tZW1jZyBsaXN0IExSVXMgd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29kZSBpbiBrZXJuZWwgbGlzdF9scnUgaW5pdGlhbGl6YXRpb24gKGUuZy4sIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTYyZDkyNmQ4NmJiMmU2NmQ0YTgwODYwN2EwNjBkNDI2YWYwYjU0ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDQ6NDY6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuY1xuaW5kZXggMzY2NjJkMDJmZjk2My4uYTQ1MjJjYTkzZWJjYiAxMDA2NDRcbi0tLSBhL21tL2xpc3RfbHJ1LmNcbisrKyBiL21tL2xpc3RfbHJ1LmNcbkBAIC02NzEsNyArNjcxLDcgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJcbiBcdGVsc2VcbiBcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gLTE7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuIFx0XHRtZW1jZ19hd2FyZSA9IGZhbHNlO1xuICNlbmRpZlxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6MTAuNjcwNDkxNTgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU5Mzk5NDEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBsaXN0X2xydS5jYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBzZWVtcyB3ZSdyZSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIHdpdGhpbiBgbW0vbGlzdF9scnUuY2AuIFRoZSBkaWZmIGhpZ2hsaWdodHMgYSBjaGFuZ2UgYXJvdW5kIGxpbmUgNjcxLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIHRoZSBjb25kaXRpb25hbCB0aGF0IGRldGVybWluZXMgdGhlIGBtZW1jZ19hd2FyZWAgZmxhZyBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSwgc28gSSdsbCByZWFkIHRoZSBjb2RlIGFyb3VuZCB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgdG8gZ2V0IHRoZSBmdWxsIGNvbnRleHQuIEZyb20gYSBmaXJzdCBnbGFuY2UsIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBleHRlbmQgdGhlIGNvbmRpdGlvbiB1bmRlciB3aGljaCBgbWVtY2dfYXdhcmVgIGlzIHNldCB0byBgZmFsc2VgLCBhZGRpbmcgYW5vdGhlciBjaGVjayBmb3IgYSBkaXNhYmxlZCBtZW1vcnkgY2dyb3VwLiBMZXQncyBkaWcgZGVlcGVyIHRvIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBuZXcgZmVhdHVyZSwgYSBidWcgZml4LCBvciBhIGdlbmVyYWwgb3B0aW1pemF0aW9uLiBJJ2xsIG5lZWQgdG8gYXNzZXNzIGhvdyBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpbnRlcmFjdHMgd2l0aCBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBmb3IgZGVwZW5kZW5jaWVzIG9uIHRoZXNlIG1lbW9yeSBjZ3JvdXAgY2hlY2tzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGNoYW5nZSBtYWtlcyBzZW5zZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NjoxNy4yNjQ0ODg2MjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbGlzdF9scnUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NTA6XFx0XFx0cmVzID0gX19tZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgbHJ1LCBnZnApO1xcbiA2NTE6XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiA2NTI6XFx0XFx0cmV0dXJuIHJlcztcXG4gNjUzOlxcdH1cXG4gNjU0OlxcdCNlbHNlXFxuIDY1NTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfaW5pdF9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSlcXG4gNjU2OlxcdHtcXG4gNjU3OlxcdH1cXG4gNjU4OlxcdFxcbiA2NTk6XFx0c3RhdGljIHZvaWQgbWVtY2dfZGVzdHJveV9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4gNjYwOlxcdHtcXG4gNjYxOlxcdH1cXG4gNjYyOlxcdCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG4gNjYzOlxcdFxcbiA2NjQ6XFx0aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4gNjY1OlxcdHtcXG4gNjY2OlxcdFxcdGludCBpO1xcbiA2Njc6XFx0XFxuIDY2ODpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuIDY2OTpcXHRcXHRpZiAoc2hyaW5rZXIpXFxuIDY3MDpcXHRcXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXFx1MDAzZWlkO1xcbiA2NzE6XFx0XFx0ZWxzZVxcbiA2NzI6XFx0XFx0XFx0bHJ1LVxcdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xcbiA2NzM6XFx0XFxuIDY3NDpcXHRcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbiA2NzU6XFx0XFx0XFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcXG4gNjc2OlxcdCNlbmRpZlxcbiA2Nzc6XFx0XFxuIDY3ODpcXHRcXHRscnUtXFx1MDAzZW5vZGUgPSBremFsbG9jX29ianMoKmxydS1cXHUwMDNlbm9kZSwgbnJfbm9kZV9pZHMpO1xcbiA2Nzk6XFx0XFx0aWYgKCFscnUtXFx1MDAzZW5vZGUpXFxuIDY4MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNjgxOlxcdFxcbiA2ODI6XFx0XFx0Zm9yX2VhY2hfbm9kZShpKVxcbiA2ODM6XFx0XFx0XFx0aW5pdF9vbmVfbHJ1KGxydSwgXFx1MDAyNmxydS1cXHUwMDNlbm9kZVtpXS5scnUpO1xcbiA2ODQ6XFx0XFxuIDY4NTpcXHRcXHRtZW1jZ19pbml0X2xpc3RfbHJ1KGxydSwgbWVtY2dfYXdhcmUpO1xcbiA2ODY6XFx0XFx0bGlzdF9scnVfcmVnaXN0ZXIobHJ1KTtcXG4gNjg3OlxcdFxcbiA2ODg6XFx0XFx0cmV0dXJuIDA7XFxuIDY4OTpcXHR9XFxuIDY5MDpcXHRFWFBPUlRfU1lNQk9MX0dQTChfX2xpc3RfbHJ1X2luaXQpO1xcbiA2OTE6XFx0XFxuIDY5MjpcXHR2b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuIDY5MzpcXHR7XFxuIDY5NDpcXHRcXHQvKiBBbHJlYWR5IGRlc3Ryb3llZCBvciBub3QgeWV0IGluaXRpYWxpemVkPyAqL1xcbiA2OTU6XFx0XFx0aWYgKCFscnUtXFx1MDAzZW5vZGUpXFxuIDY5NjpcXHRcXHRcXHRyZXR1cm47XFxuIDY5NzpcXHRcXG4gNjk4OlxcdFxcdGxpc3RfbHJ1X3VucmVnaXN0ZXIobHJ1KTtcXG4gNjk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NjoxNy4yNjQ2NDQ1NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDQ0OTE1ODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBFeGFtaW5hdGlvbiBvZiBgX19saXN0X2xydV9pbml0YCBhbmQgTWVtb3J5IENncm91cHMqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgX19saXN0X2xydV9pbml0YCBiZWluZyBjYWxsZWQsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciBpbml0aWFsaXppbmcgYGxpc3RfbHJ1c2Ag4oCTIG1ha2VzIHNlbnNlLiBUaGV5J3JlIHVzZWQgYWxsIG92ZXIgdGhlIHBsYWNlOiBzdXBlcmJsb2NrcywgZGNhY2hlLCBvdGhlciBzdWJzeXN0ZW1zLiBJdCdzIHRoZSBleHBlY3RlZCBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmUgZm9yIHRoZXNlIGRhdGEgc3RydWN0dXJlcy4gTm93LCBJIGhhdmUgYSBxdWljayBxdWVzdGlvbi4gV2hhdCdzIHRoZSBwcmFjdGljYWwgZGlmZmVyZW5jZSBiZXR3ZWVuIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGFuZCBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgPyBBcmUgdGhleSBjaGVja2luZyBmb3IgZGlmZmVyZW50IGFzcGVjdHMgb2YgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXR5IGJlaW5nIHR1cm5lZCBvZmY/IEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRob3NlIHR3byBmb3IgY29udGV4dC4gT2theSwgdGltZSB0byBkbyBhIHF1aWNrIGBncmVwYCBzZWFyY2guIFRoYXQnbGwgZ2l2ZSBtZSB0aGUgdXNhZ2UgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQgZm9yIGJvdGggb2YgdGhvc2UgZnVuY3Rpb25zLiBJJ2xsIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGVpciBzcGVjaWZpYyByb2xlcyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBgbGlzdF9scnVgIGluaXRpYWxpemF0aW9uLiBUaGF0IHNob3VsZCBkbyB0aGUgdHJpY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjE5LjcwOTU3MTMzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzE1NDA2NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNzEwPXN0YXRpYyBpbmxpbmUgaW50IHNocmlua2VyX2lkKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzE2LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzE3OmJvb2wgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MTgtaW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTgwMj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTgwNy0jZWxzZVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4MDg6c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4MDkte1xcbi0tXFxubW0vbGlzdF9scnUuYz02NjQ9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjczLVxcbm1tL2xpc3RfbHJ1LmM6Njc0OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXFxubW0vbGlzdF9scnUuYy02NzUtXFx0XFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMzI9c3RhdGljIERFRklORV9TUElOTE9DSyhvYmpjZ19sb2NrKTtcXG5tbS9tZW1jb250cm9sLmMtMTMzLVxcbm1tL21lbWNvbnRyb2wuYzoxMzQ6Ym9vbCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQodm9pZClcXG5tbS9tZW1jb250cm9sLmMtMTM1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zNzkwPXN0YXRpYyB2b2lkIG1lbWNnX29ubGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtMzc5MS17XFxubW0vbWVtY29udHJvbC5jOjM3OTI6XFx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy0zNzkzLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zODAzPXN0YXRpYyB2b2lkIG1lbWNnX29mZmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzgwNi1cXG5tbS9tZW1jb250cm9sLmM6MzgwNzpcXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXFxubW0vbWVtY29udHJvbC5jLTM4MDgtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vcGVyY3B1LWludGVybmFsLmg9OTA9c3RhdGljIGlubGluZSBib29sIG5lZWRfcGNwdW9ial9leHQodm9pZClcXG4tLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTkzLVxcdFxcdHJldHVybiB0cnVlO1xcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjk0OlxcdGlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXFxubW0vcGVyY3B1LWludGVybmFsLmgtOTUtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD0xNTM9c3RhdGljIGlubGluZSBzaXplX3QgcGNwdV9vYmpfZnVsbF9zaXplKHNpemVfdCBzaXplKVxcbi0tXFxubW0vcGVyY3B1LWludGVybmFsLmgtMTU3LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDoxNTg6XFx0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0xNTktXFx0XFx0ZXh0cmFfc2l6ZSArPSBzaXplIC8gUENQVV9NSU5fQUxMT0NfU0laRSAqIHNpemVvZihzdHJ1Y3Qgb2JqX2Nncm91cCAqKTtcXG4tLVxcbm1tL3Nocmlua2VyLmM9MjI2PXN0YXRpYyBpbnQgc2hyaW5rZXJfbWVtY2dfYWxsb2Moc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL3Nocmlua2VyLmMtMjMxLVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbm1tL3Nocmlua2VyLmM6MjMyOlxcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhKHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX05PTlNMQUIpKVxcbm1tL3Nocmlua2VyLmMtMjMzLVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxubW0vc2xhYi5oPTU4OD1zdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9rbWFsbG9jX25vX29iamV4dCh2b2lkKVxcbi0tXFxubW0vc2xhYi5oLTU5Mi1cXG5tbS9zbGFiLmg6NTkzOlxcdGlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbGFiLmgtNTk0LVxcdFxcdFxcdChLTUFMTE9DX05PUk1BTCA9PSBLTUFMTE9DX1JFQ0xBSU0pKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYz0zMTg9c3RydWN0IGttZW1fY2FjaGUgKl9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyhjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0zNjUtXFx0ICovXFxubW0vc2xhYl9jb21tb24uYzozNjY6XFx0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcXG5tbS9zbGFiX2NvbW1vbi5jLTM2Ny1cXHRcXHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz05NjM9bmV3X2ttYWxsb2NfY2FjaGUoaW50IGlkeCwgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUgdHlwZSlcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtOTcyLVxcdH0gZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpIFxcdTAwMjZcXHUwMDI2ICh0eXBlID09IEtNQUxMT0NfQ0dST1VQKSkge1xcbm1tL3NsYWJfY29tbW9uLmM6OTczOlxcdFxcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkge1xcbm1tL3NsYWJfY29tbW9uLmMtOTc0LVxcdFxcdFxcdGttYWxsb2NfY2FjaGVzW3R5cGVdW2lkeF0gPSBrbWFsbG9jX2NhY2hlc1tLTUFMTE9DX05PUk1BTF1baWR4XTtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTAwMS1cXHQgKi9cXG5tbS9zbGFiX2NvbW1vbi5jOjEwMDI6XFx0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkge1xcbm1tL3NsYWJfY29tbW9uLmMtMTAwMy1cXHRcXHRpZiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCBcXHUwMDI2XFx1MDAyNiBLTUFMTE9DX1JFQ0xBSU0gIT0gS01BTExPQ19OT1JNQUwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjIzLjQyNDk4NTA1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MjcwNTQzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBNZW1vcnkgQ29udHJvbCBMb2dpYyoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBjaGFuZ2UsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzIGdldHRpbmcgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBoaXN0b3J5LiBJIHdhbnQgdG8gc2VlIHRoZSBgZ2l0IGxvZ2Agb3IgY29tbWl0IGhpc3RvcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2hhbmdlLiBTZWVpbmcgdGhlIGV2b2x1dGlvbiBvZiB0aGUgY29kZSwgdGhlIHJlYXNvbmluZyBiZWhpbmQgcHJldmlvdXMgbW9kaWZpY2F0aW9ucywgYW5kIGFueSBkaXNjdXNzaW9ucyB0aGF0IGhhcHBlbmVkIGFyb3VuZCB0aGlzIHNwZWNpZmljIHBhcnQgb2YgdGhlIGNvZGViYXNlIGlzIGludmFsdWFibGUgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuIEZhaWxpbmcgYSBzdHJhaWdodGZvcndhcmQgZ2l0IGhpc3RvcnkgZGl2ZSwgSSdtIGdvaW5nIHRvIHN0YXJ0IGZyb20gYSBzb3VyY2UgY29kZSBsZXZlbCBpbnZlc3RpZ2F0aW9uLlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IHplcm9lcyBpbiBvbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWVtb3J5IGNncm91cCBtYWdpYyBoYXBwZW5zLCBhbmQgc3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYG1lbV9jZ3JvdXBfZGlzYWJsZWRgIGFuZCBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkYC4gVW5kZXJzdGFuZGluZyB0aGVpciByb2xlcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2UgZmxhZ3MgaW1wYWN0IG1lbW9yeSBhY2NvdW50aW5nLCByZXNvdXJjZSBsaW1pdGluZywgYW5kIHBvdGVudGlhbGx5LCB0aGUgYmVoYXZpb3Igb2YgdGhpcyBjaGFuZ2UuIEFyZSB3ZSB0b2dnbGluZyB0aGVtPyBBZmZlY3RpbmcgdGhlbT8gVGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgYXJvdW5kIHRob3NlIHZhcmlhYmxlcyB3aWxsIGJlIHRoZSBrZXkgdG8gaXQuIEl0J3MgdGltZSB0byByZWFkIHNvbWUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjI2Ljg1MjA0ODE0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjU6XFx0XFx0cmV0dXJuIGNvbnRhaW5lcl9vZih2bXByLCBzdHJ1Y3QgbWVtX2Nncm91cCwgdm1wcmVzc3VyZSk7XFxuIDEyNjpcXHR9XFxuIDEyNzpcXHRcXG4gMTI4OlxcdCNkZWZpbmUgU0VRX0JVRl9TSVpFIFNaXzRLXFxuIDEyOTpcXHQjZGVmaW5lIENVUlJFTlRfT0JKQ0dfVVBEQVRFX0JJVCAwXFxuIDEzMDpcXHQjZGVmaW5lIENVUlJFTlRfT0JKQ0dfVVBEQVRFX0ZMQUcgKDFVTCBcXHUwMDNjXFx1MDAzYyBDVVJSRU5UX09CSkNHX1VQREFURV9CSVQpXFxuIDEzMTpcXHRcXG4gMTMyOlxcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sob2JqY2dfbG9jayk7XFxuIDEzMzpcXHRcXG4gMTM0OlxcdGJvb2wgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKHZvaWQpXFxuIDEzNTpcXHR7XFxuIDEzNjpcXHRcXHRyZXR1cm4gY2dyb3VwX21lbW9yeV9ub2ttZW07XFxuIDEzNzpcXHR9XFxuIDEzODpcXHRcXG4gMTM5OlxcdHN0YXRpYyB2b2lkIG1lbWNnX3VuY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcXG4gMTQwOlxcdFxcbiAxNDE6XFx0c3RhdGljIHZvaWQgbWVtY2dfdW5jaGFyZ2Vfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4gMTQyOlxcdHtcXG4gMTQzOlxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfS01FTSwgLW5yX3BhZ2VzKTtcXG4gMTQ0OlxcdFxcdG1lbWNnMV9hY2NvdW50X2ttZW0obWVtY2csIC1ucl9wYWdlcyk7XFxuIDE0NTpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXFxuIDE0NjpcXHRcXHRcXHRtZW1jZ191bmNoYXJnZShtZW1jZywgbnJfcGFnZXMpO1xcbiAxNDc6XFx0fVxcbiAxNDg6XFx0XFxuIDE0OTpcXHRzdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG4gMTUwOlxcdHtcXG4gMTUxOlxcdFxcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBvYmpfY2dyb3VwLCByZWZjbnQpO1xcbiAxNTI6XFx0XFx0dW5zaWduZWQgaW50IG5yX2J5dGVzO1xcbiAxNTM6XFx0XFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzO1xcbiAxNTQ6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0LypcXG4gMTU3OlxcdFxcdCAqIEF0IHRoaXMgcG9pbnQgYWxsIGFsbG9jYXRlZCBvYmplY3RzIGFyZSBmcmVlZCwgYW5kXFxuIDE1ODpcXHRcXHQgKiBvYmpjZy1cXHUwMDNlbnJfY2hhcmdlZF9ieXRlcyBjYW4ndCBoYXZlIGFuIGFyYml0cmFyeSBieXRlIHZhbHVlLlxcbiAxNTk6XFx0XFx0ICogSG93ZXZlciwgaXQgY2FuIGJlIFBBR0VfU0laRSBvciAoeCAqIFBBR0VfU0laRSkuXFxuIDE2MDpcXHRcXHQgKlxcbiAxNjE6XFx0XFx0ICogVGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBjYW4gbGVhZCB0byBpdDpcXG4gMTYyOlxcdFxcdCAqIDEpIENQVTA6IG9iamNnIGNhY2hlZCBpbiBvbmUgb2Ygc3RvY2stXFx1MDAzZWNhY2hlZFtpXVxcbiAxNjM6XFx0XFx0ICogMikgQ1BVMTogd2UgZG8gYSBzbWFsbCBhbGxvY2F0aW9uIChlLmcuIDkyIGJ5dGVzKSxcXG4gMTY0OlxcdFxcdCAqICAgICAgICAgIFBBR0VfU0laRSBieXRlcyBhcmUgY2hhcmdlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NjoyNi44NTI2MTQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0OTAyNjUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGZ1bmN0aW9uLiBJIGtub3cgdGhlIGNvcmUgY29uY2VwdCBvZiBtZW1vcnkgY2dyb3Vwcywgb2YgY291cnNlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIElzIHRoaXMgYSBjaGVjayBmb3IgYSBmdW5kYW1lbnRhbCBzeXN0ZW0gc2V0dGluZywgb3IgaXMgaXQgYSBtb3JlIGR5bmFtaWMgcnVudGltZSBjb25maWd1cmF0aW9uPyBJJ20gYmV0dGluZyBpdCdzIHRoZSBmb3JtZXIg4oCTIHRoaXMgZmVlbHMgbGlrZSBpdCBkZXRlcm1pbmVzIG92ZXJhbGwgY2dyb3VwIGJlaGF2aW9yIHJhdGhlciB0aGFuIGEgcGVyLXByb2Nlc3MgcG9saWN5LiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gc2VlIHdoZXJlIGl0J3MgdXNlZC4gS25vd2luZyB3aGVyZSBpdCBpcyBjYWxsZWQgd2lsbCBpbmRpY2F0ZSB0aGUgaW1wb3J0YW5jZSBvZiB0aGUgZnVuY3Rpb24uXG5cbkkgaW1tZWRpYXRlbHkgd2FudCB0byBrbm93OiBXaGF0J3MgdGhlICpyZWFzb24qIGZvciB0aGlzIHN0YXRlPyBJcyBpdCBiZWNhdXNlIHRoZSBrZXJuZWwgd2FzIGJ1aWx0IHdpdGhvdXQgbWVtb3J5IGNncm91cCBzdXBwb3J0LCBvciBpcyB0aGVyZSBzb21lIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBkaXNhYmxpbmcgaXQgZm9yIHNwZWNpZmljIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLCBmb3IgZXhhbXBsZT8gVGhlIGNvbW1lbnQgYmxvY2tzIHNob3VsZCBjb250YWluIHRoYXQgaW5mb3JtYXRpb24sIGlmIHdyaXR0ZW4gcHJvcGVybHkuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZTogV2hhdCBvdGhlciBjb2RlIHBhdGhzIGFyZSBza2lwcGVkIG9yIGVuYWJsZWQgYmFzZWQgb24gdGhpcz8gSG93IGRvZXMgaXQgYWZmZWN0IHRoZSBpbml0aWFsaXphdGlvbiBvZiBtZW1vcnkgYWNjb3VudGluZyBvciB0aGUgYmVoYXZpb3Igb2YgcmVsYXRlZCBzdWJzeXN0ZW1zIGxpa2UgT09NIGhhbmRsaW5nIG9yIHJlc291cmNlIGxpbWl0YXRpb25zPyBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBmYWxsYmFjayBiZWhhdmlvci4gSeKAmW0gdGhpbmtpbmcgaW4gcGFydGljdWxhciBhYm91dCB0aGUgcmFtaWZpY2F0aW9ucyB0byB0aGUgYWNjb3VudGluZyBzdWJzeXN0ZW0uXG5cblVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGFmZmVjdHMgdGhlIHN5c3RlbSdzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBmaXRzIGluIHdpdGggdGhlIGJyb2FkZXIgY2dyb3VwIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk4OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6MzAuMTAxNjQ2MDU4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTI5NTIyODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfZGlzYWJsZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NTMwPXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNTM0LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjUzNTpzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9kaXNhYmxlZCh2b2lkKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTUzNi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD01NDA9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTU0Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo1NDg6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC01NDktXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NTk1PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02MDItXFx0ICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjAzOlxcdHJldHVybiBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSB8fFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTYwNC1cXHRcXHRtZW1jZyA9PSB0YXJnZXQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02NDM9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NDUte1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY0NjpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY0Ny1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY2ND1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2NS17XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjY2OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY3LVxcdFxcdHJldHVybjtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY3Mj1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjczLXtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NzQ6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NzUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjkxPXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjk2LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY5NzpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjk4LVxcdFxcdGxydXZlYyA9IFxcdTAwMjZwZ2RhdC1cXHUwMDNlX19scnV2ZWM7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD03MzI9c3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTczNS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo3MzY6XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFtZW1jZyBcXHUwMDI2XFx1MDAyNiAhbWVtX2Nncm91cF9kaXNhYmxlZCgpLCBmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNzM3LVxcdHJldHVybiBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgZm9saW9fcGdkYXQoZm9saW8pKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTgwOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODEwLXtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4MTE6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MTItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04MzA9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgzMy1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4MzQ6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MzUtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04Nzc9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04Nzgte1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjg3OTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTg4MC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTkyMD1zdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MjQtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTI1OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTI2LVxcdFxcdHJldHVybjtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTk2OD1zdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZXZlbnRzX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTcyLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjk3MzpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk3NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05OTg9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX21lbW9yeV9ldmVudF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTAwMzpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTAxNz1zdGF0aWMgaW5saW5lIHU2NCBjZ3JvdXBfaWRfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMjEtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTAyMjpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMjMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMDkzPXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTA5Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMDk4OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2Rpc2FibGVkKHZvaWQpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTA5OS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNTc2PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE1ODAtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTU4MTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE1ODItXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9NDgyPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb190aHJvdHRsZV9zd2FwcmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDgzLXtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo0ODQ6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00ODUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9NDk2PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDk3LXtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo0OTg6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00OTktXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD01MDQ9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTUwNS17XFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTA2OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA3LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2JwZl9tZW1jb250cm9sLmM9MjM9X19icGZfa2Z1bmMgc3RydWN0IG1lbV9jZ3JvdXAgKmJwZl9nZXRfcm9vdF9tZW1fY2dyb3VwKHZvaWQpXFxubW0vYnBmX21lbWNvbnRyb2wuYy0yNC17XFxubW0vYnBmX21lbWNvbnRyb2wuYzoyNTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL2JwZl9tZW1jb250cm9sLmMtMjYtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9icGZfbWVtY29udHJvbC5jPTQ1PWJwZl9nZXRfbWVtX2Nncm91cChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYy00OS1cXG5tbS9icGZfbWVtY29udHJvbC5jOjUwOlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIXJvb3RfbWVtX2Nncm91cClcXG5tbS9icGZfbWVtY29udHJvbC5jLTUxLVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMDU3PWludCBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA1OC17XFxubW0vaHVnZV9tZW1vcnkuYzoxMDU5OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxubW0vaHVnZV9tZW1vcnkuYy0xMDYwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTAyPWJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1MTAtXFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxMTpcXHRXQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxMi1cXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY3My1cXG5tbS9saXN0X2xydS5jOjY3NDpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbm1tL2xpc3RfbHJ1LmMtNjc1LVxcdFxcdG1lbWNnX2F3YXJlID0gZmFsc2U7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjY5PXZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI3OS1cXG5tbS9tZW1jb250cm9sLXYxLmM6MjgwOlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxubW0vbWVtY29udHJvbC12MS5jLTI4MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDkyPXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00OTctXFxubW0vbWVtY29udHJvbC5jOjQ5ODpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy00OTktXFx0XFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MzM9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzOC1cXG5tbS9tZW1jb250cm9sLmM6NTM5OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxubW0vbWVtY29udHJvbC5jLTU0MC1cXHRcXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NTA9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTU2LVxcbm1tL21lbWNvbnRyb2wuYzo1NTc6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtNTU4LVxcdFxcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGUobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Nzc0PXZvaWQgbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC5jLTc3NS17XFxubW0vbWVtY29udHJvbC5jOjc3NjpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy03NzctXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTkxNj12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MjAtXFxubW0vbWVtY29udHJvbC5jOjkyMTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy05MjItXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTEwMTA9dm9pZCBtb2RfbHJ1dmVjX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTAxNi1cXHQvKiBVcGRhdGUgbWVtY2cgYW5kIGxydXZlYyAqL1xcbm1tL21lbWNvbnRyb2wuYzoxMDE3OlxcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy0xMDE4LVxcdFxcdG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUobHJ1dmVjLCBpZHgsIHZhbCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTA3Mz12b2lkIGNvdW50X21lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTA3OC1cXG5tbS9tZW1jb250cm9sLmM6MTA3OTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy0xMDgwLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMTU3PXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTExNjAtXFxubW0vbWVtY29udHJvbC5jOjExNjE6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtMTE2Mi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMTk5PXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMjAyLVxcbm1tL21lbWNvbnRyb2wuYzoxMjAzOlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxubW0vbWVtY29udHJvbC5jLTEyMDQtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTIyMz1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEyMjYtXFxubW0vbWVtY29udHJvbC5jOjEyMjc6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtMTIyOC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMjU4PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2l0ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTI2Ni1cXG5tbS9tZW1jb250cm9sLmM6MTI2NzpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy0xMjY4LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1Mjg9dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE1MzQtXFxubW0vbWVtY29udHJvbC5jOjE1MzU6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtMTUzNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzAwMj1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMDA1LVxcbm1tL21lbWNvbnRyb2wuYzozMDA2OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxubW0vbWVtY29udHJvbC5jLTMwMDctXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzIxND1zdGF0aWMgc3RydWN0IG9ial9jZ3JvdXAgKnBhZ2Vfb2JqY2coY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzIxNy1cXG5tbS9tZW1jb250cm9sLmM6MzIxODpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19kYXRhKVxcbm1tL21lbWNvbnRyb2wuYy0zMjE5LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTM3Nzg9dm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNzgyLVxcbm1tL21lbWNvbnRyb2wuYzozNzgzOlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKVxcbm1tL21lbWNvbnRyb2wuYy0zNzg0LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MzEyPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM0MS1cXG5tbS9tZW1jb250cm9sLmM6NDM0MjpcXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkgXFx1MDAyNlxcdTAwMjYgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtNDM0My1cXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgXFx1MDAyNnN0YXRzX2ZsdXNoX2R3b3JrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMjg9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMzMtXFxubW0vbWVtY29udHJvbC5jOjUyMzQ6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtNTIzNS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI4Nz1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI5Ni1cXHQgKi9cXG5tbS9tZW1jb250cm9sLmM6NTI5NzpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19odWdldGxiKCkgfHxcXG5tbS9tZW1jb250cm9sLmMtNTI5OC1cXHRcXHQhbWVtY2cgfHwgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTMyMT1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzMjYtXFxubW0vbWVtY29udHJvbC5jOjUzMjc6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtNTMyOC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NDk2PXZvaWQgbWVtX2Nncm91cF9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NTA2LVxcbm1tL21lbWNvbnRyb2wuYzo1NTA3OlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxubW0vbWVtY29udHJvbC5jLTU1MDgtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1NTM9dm9pZCBtZW1fY2dyb3VwX21pZ3JhdGUoc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU1NjItXFxubW0vbWVtY29udHJvbC5jOjU1NjM6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmMtNTU2NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTg0MT1sb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4NDQtXFxubW0vbWVtY29udHJvbC5jOjU4NDU6XFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWRvX21lbXN3X2FjY291bnQoKSlcXG5tbS9tZW1jb250cm9sLmMtNTg0Ni1cXHRcXHRucl9zd2FwX3BhZ2VzID0gbWluKG5yX3N3YXBfcGFnZXMsIHBhZ2VfY291bnRlcl9tYXJnaW4oXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwKSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTg1Nz1sb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTg2MS1cXG5tbS9tZW1jb250cm9sLmM6NTg2MjpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fFxcbm1tL21lbWNvbnRyb2wuYy01ODYzLVxcdCAgICAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjIzMz1zdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX3N3YXBfaW5pdCh2b2lkKVxcbm1tL21lbWNvbnRyb2wuYy02MjM0LXtcXG5tbS9tZW1jb250cm9sLmM6NjIzNTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy02MjM2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTYyNjg9dm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC5jLTYyNjkte1xcbm1tL21lbWNvbnRyb2wuYzo2MjcwOlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxubW0vbWVtY29udHJvbC5jLTYyNzEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vc2hyaW5rZXIuYz0yMjY9c3RhdGljIGludCBzaHJpbmtlcl9tZW1jZ19hbGxvYyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbi0tXFxubW0vc2hyaW5rZXIuYy0yMjktXFxubW0vc2hyaW5rZXIuYzoyMzA6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9zaHJpbmtlci5jLTIzMS1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4tLVxcbm1tL3Nocmlua2VyLmM9NjI0PXVuc2lnbmVkIGxvbmcgc2hyaW5rX3NsYWIoZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Nocmlua2VyLmMtNjM2LVxcdCAqL1xcbm1tL3Nocmlua2VyLmM6NjM3OlxcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxcbm1tL3Nocmlua2VyLmMtNjM4LVxcdFxcdHJldHVybiBzaHJpbmtfc2xhYl9tZW1jZyhnZnBfbWFzaywgbmlkLCBtZW1jZywgcHJpb3JpdHkpO1xcbi0tXFxubW0vc3dhcC5oPTg1PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9zd2FwLmgtODgtXFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2XFxubW0vc3dhcC5oOjg5OlxcdCAgICAhbWVtX2Nncm91cF9kaXNhYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxcbm1tL3N3YXAuaC05MC1cXHRcXHRyZXR1cm4gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2Vzd2FwcGluZXNzKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9NDQ5PXN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcClcXG4tLVxcbm1tL3N3YXBmaWxlLmMtNDcxLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zd2FwZmlsZS5jOjQ3MjpcXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xcbm1tL3N3YXBmaWxlLmMtNDczLVxcdFxcdFZNX1dBUk5fT05fT05DRShjaS1cXHUwMDNlbWVtY2dfdGFibGUpO1xcbi0tXFxubW0vdm1wcmVzc3VyZS5jPTEwNj12b2lkIHZtcHJlc3N1cmUoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCB0cmVlLFxcbi0tXFxubW0vdm1wcmVzc3VyZS5jLTExMC1cXG5tbS92bXByZXNzdXJlLmM6MTExOlxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxubW0vdm1wcmVzc3VyZS5jLTExMi1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz0zOTQ9dW5zaWduZWQgbG9uZyBscnV2ZWNfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNDAwLVxcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBscnV2ZWNfcGdkYXQobHJ1dmVjKSwgemlkLCB6b25lX2lkeCkge1xcbm1tL3Ztc2Nhbi5jOjQwMTpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS92bXNjYW4uYy00MDItXFx0XFx0XFx0c2l6ZSArPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGxydXZlYywgbHJ1LCB6aWQpO1xcbi0tXFxubW0vdm1zY2FuLmM9Mjc0OT1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy0yNzYzLSNlbmRpZlxcbm1tL3Ztc2Nhbi5jOjI3NjQ6XFx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xcbm1tL3Ztc2Nhbi5jLTI3NjUtXFxuLS1cXG5tbS92bXNjYW4uYz0yOTA3PXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yOTE3LSNlbmRpZlxcbm1tL3Ztc2Nhbi5jOjI5MTg6XFx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xcbm1tL3Ztc2Nhbi5jLTI5MTktXFxuLS1cXG5tbS92bXNjYW4uYz0zMDE0PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzAyMi1cXHQvKiBmb3IgbW1fdXBkYXRlX25leHRfb3duZXIoKSAqL1xcbm1tL3Ztc2Nhbi5jOjMwMjM6XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS92bXNjYW4uYy0zMDI0LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyMzg9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyNjMtXFxubW0vdm1zY2FuLmM6NTI2NDpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL3Ztc2Nhbi5jLTUyNjUtXFx0XFx0c2hyaW5rX29uZShcXHUwMDI2cGdkYXQtXFx1MDAzZV9fbHJ1dmVjLCBzYyk7XFxuLS1cXG5tbS92bXNjYW4uYz01NzMyPXN0YXRpYyBpbnQgcnVuX2NtZChjaGFyIGNtZCwgdTY0IG1lbWNnX2lkLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHNlcSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3NDEtXFxubW0vdm1zY2FuLmM6NTc0MjpcXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xcbm1tL3Ztc2Nhbi5jLTU3NDMtXFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2dldF9mcm9tX2lkKG1lbWNnX2lkKTtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz00MzA9Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxcbi0tXFxubW0vd29ya2luZ3NldC5jLTQ3Ni1cXG5tbS93b3JraW5nc2V0LmM6NDc3OlxcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFldmljdGlvbl9tZW1jZylcXG5tbS93b3JraW5nc2V0LmMtNDc4LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz01OTc9dm9pZCB3b3JraW5nc2V0X2FjdGl2YXRpb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy02MDItXFx0ICovXFxubW0vd29ya2luZ3NldC5jOjYwMzpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKSB7XFxubW0vd29ya2luZ3NldC5jLTYwNC1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLS1cXG5tbS96c3dhcC5jPTExNzk9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3pzd2FwLmMtMTIwNy1cXHQgKi9cXG5tbS96c3dhcC5jOjEyMDg6XFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcXG5tbS96c3dhcC5jLTEyMDktXFx0XFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChtZW1jZyk7XFxuLS1cXG5tbS96c3dhcC5jPTEzMDQ9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5tbS96c3dhcC5jLTEzNjEtXFx0XFx0ICovXFxubW0venN3YXAuYzoxMzYyOlxcdFxcdGlmICghbWVtY2cgXFx1MDAyNlxcdTAwMjYgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xcbm1tL3pzd2FwLmMtMTM2My1cXHRcXHRcXHRpZiAoIWF0dGVtcHRzIFxcdTAwMjZcXHUwMDI2ICsrZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6MzMuMDMxMjI2MDkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODYzNDczMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgLiBUaGUgdmVyeSBuYW1lIHN1Z2dlc3RzIGl0IGhhcyB0byBkbyB3aXRoIG1lbW9yeSBjZ3JvdXBzIGJlaW5nIGRpc2FibGVkLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgaXQncyBkZXNpZ25lZCB0byBkZXRlcm1pbmUgaWYgbWVtb3J5IHJlc291cmNlIGNvbnRyb2wgdmlhIGNncm91cHMgaXMgaW50ZW50aW9uYWxseSB0dXJuZWQgb2ZmLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIExldCdzIHN0YXJ0IGJ5IGZpbmRpbmcgaXQgd2l0aGluIHRoZSBrZXJuZWwgaGVhZGVycywgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGV4cGxpY2l0IGRldGFpbHMgb2YgaXRzIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgdW5kZXJseWluZyBsb2dpYy4gT25jZSBJIGhhdmUgdGhlIGNvZGUsIEkgY2FuIGFjY3VyYXRlbHkgZXhwbGFpbiB3aGF0IGlzIGJlaW5nIGRpc2FibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAyMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjM1LjAxNzU3NjE1MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTMwOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbiA1MzE6XFx0e1xcbiA1MzI6XFx0XFx0cmV0dXJuIG9iamNnLVxcdTAwM2Vpc19yb290O1xcbiA1MzM6XFx0fVxcbiA1MzQ6XFx0XFxuIDUzNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9kaXNhYmxlZCh2b2lkKVxcbiA1MzY6XFx0e1xcbiA1Mzc6XFx0XFx0cmV0dXJuICFjZ3JvdXBfc3Vic3lzX2VuYWJsZWQobWVtb3J5X2NncnBfc3Vic3lzKTtcXG4gNTM4OlxcdH1cXG4gNTM5OlxcdFxcbiA1NDA6XFx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4gNTQxOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIDU0MjpcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyAqbWluLFxcbiA1NDM6XFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKmxvdyxcXG4gNTQ0OlxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICp1c2FnZSlcXG4gNTQ1OlxcdHtcXG4gNTQ2OlxcdFxcdCptaW4gPSAqbG93ID0gKnVzYWdlID0gMDtcXG4gNTQ3OlxcdFxcbiA1NDg6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gNTQ5OlxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6MzUuMDE3NzAwNjMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MDczMDI1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgTWVtb3J5IE1hbmFnZW1lbnQgQnVnKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBib290LXRpbWUgcGFyYW1ldGVyIGludGVyYWN0aW9uIGFuZCBJJ20gc2VlaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGluY29uc2lzdGVuY3kgaW4gaG93IG1lbW9yeSBjZ3JvdXBzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIHdoZW4gYGNncm91cF9kaXNhYmxlPW1lbW9yeWAgaXMgc3BlY2lmaWVkLCBJICpleHBlY3QqIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbSB0byBiZSBjb21wbGV0ZWx5IGRlYWN0aXZhdGVkLiBgY2dyb3VwX3N1YnN5c19lbmFibGVkKG1lbW9yeV9jZ3JwX3N1YnN5cylgIGNvcnJlY3RseSByZWZsZWN0cyB0aGlzLCBhbmQgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgd2lsbCByZXR1cm4gdHJ1ZS4gVGhhdCdzIHRoZSBmaXJzdCBiaXQsIGFsbCBnb29kLlxuXG5Ib3dldmVyLCB0aGUgbG9naWMgbGF0ZXIgb24sIHBhcnRpY3VsYXJseSBpbiBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgLCBzZWVtcyB0byBjaGVjayBgY2dyb3VwX21lbW9yeV9ub2ttZW1gIGluc3RlYWQuIFRoaXMgdmFsdWUgaXMgdGllZCB0byB0aGUgYGNncm91cC5tZW1vcnk9bm9rbWVtYCBib290IHBhcmFtZXRlci4gSGVyZSdzIHdoZXJlIHRoZSBwcm9ibGVtIGFyaXNlczogZXZlbiB3aGVuIGBjZ3JvdXBfZGlzYWJsZT1tZW1vcnlgIGlzIHNldCwgYGNncm91cF9tZW1vcnlfbm9rbWVtYCAqbWlnaHQqIHN0aWxsIGJlIGZhbHNlISBUaGlzIHN1YnRsZSBkaWZmZXJlbmNlIG1lYW5zIHRoYXQgYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYCBjb3VsZCBldmFsdWF0ZSB0byBmYWxzZSwgZXZlbiB3aGVuIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbSBpcyBzdXBwb3NlZCB0byBiZSBkaXNhYmxlZCBnbG9iYWxseS5cblxuVGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZSBpZiBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHJldHVybnMgZmFsc2UsIHRoZSBgX19saXN0X2xydV9pbml0YCBmdW5jdGlvbiB3aWxsIGluY29ycmVjdGx5IHRyZWF0IHRoZSBgbWVtY2dfYXdhcmVgIGZsYWcgYXMgdHJ1ZS4gVGhpcywgaW4gdHVybiwgbGVhZHMgdG8gYSBjYWxsIHRvIGBtZW1jZ19pbml0X2xpc3RfbHJ1YCwgd2hpY2ggdGhlbiBhdHRlbXB0cyB0byBpbml0aWFsaXplIHBlci1tZW1jZyBMUlUgdGFibGVzLiBCdXQgKndoeSogYXJlIHdlIHRyeWluZyB0byBpbml0aWFsaXplIHBlci1tZW1jZyBzdHJ1Y3R1cmVzIGlmIHRoZSBlbnRpcmUgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXR5IGlzIHN1cHBvc2VkbHkgZGlzYWJsZWQ/IEl0J3MgYSBjbGVhciB2aW9sYXRpb24gb2YgZXhwZWN0YXRpb25zLCBhbmQgSSdtIGd1ZXNzaW5nIHRoaXMgY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgdW5leHBlY3RlZCBiZWhhdmlvdXIsIG1lbW9yeSBsZWFrcywgb3IgZXZlbiBjcmFzaGVzLlxuXG5JJ20gbm93IGdvaW5nIHRvIGRpdmUgaW50byB0aGUgYG1lbWNnX2luaXRfbGlzdF9scnVgIGZ1bmN0aW9uIGl0c2VsZiwgZm91bmQgaW4gYG1tL2xpc3RfbHJ1LmNgLCB0byBwaW5wb2ludCB0aGUgZXhhY3QgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoaXMgaW5jb3JyZWN0IGluaXRpYWxpemF0aW9uIG9jY3VycyBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGZhbGxvdXQgY291bGQgYmUuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6MzguNTI1MDA3NTcxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9saXN0X2xydS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHRcXHRcXHRpZiAoIW1scnUpIHtcXG4gNjAxOlxcdFxcdFxcdFxcdG1scnUgPSBtZW1jZ19pbml0X2xpc3RfbHJ1X29uZShscnUsIGdmcCk7XFxuIDYwMjpcXHRcXHRcXHRcXHRpZiAoIW1scnUpXFxuIDYwMzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNjA0OlxcdFxcdFxcdH1cXG4gNjA1OlxcdFxcdFxcdHhhc19zZXQoXFx1MDAyNnhhcywgcG9zLVxcdTAwM2VrbWVtY2dfaWQpO1xcbiA2MDY6XFx0XFx0XFx0ZG8ge1xcbiA2MDc6XFx0XFx0XFx0XFx0eGFzX2xvY2tfaXJxc2F2ZShcXHUwMDI2eGFzLCBmbGFncyk7XFxuIDYwODpcXHRcXHRcXHRcXHRpZiAoIXhhc19sb2FkKFxcdTAwMjZ4YXMpIFxcdTAwMjZcXHUwMDI2ICFjc3NfaXNfZHlpbmcoXFx1MDAyNnBvcy1cXHUwMDNlY3NzKSkge1xcbiA2MDk6XFx0XFx0XFx0XFx0XFx0eGFzX3N0b3JlKFxcdTAwMjZ4YXMsIG1scnUpO1xcbiA2MTA6XFx0XFx0XFx0XFx0XFx0aWYgKCF4YXNfZXJyb3IoXFx1MDAyNnhhcykpXFxuIDYxMTpcXHRcXHRcXHRcXHRcXHRcXHRtbHJ1ID0gTlVMTDtcXG4gNjEyOlxcdFxcdFxcdFxcdH1cXG4gNjEzOlxcdFxcdFxcdFxcdHhhc191bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2eGFzLCBmbGFncyk7XFxuIDYxNDpcXHRcXHRcXHR9IHdoaWxlICh4YXNfbm9tZW0oXFx1MDAyNnhhcywgZ2ZwKSk7XFxuIDYxNTpcXHRcXHR9IHdoaWxlIChwb3MgIT0gbWVtY2cgXFx1MDAyNlxcdTAwMjYgIWNzc19pc19keWluZyhcXHUwMDI2cG9zLVxcdTAwM2Vjc3MpKTtcXG4gNjE2OlxcdFxcbiA2MTc6XFx0XFx0aWYgKHVubGlrZWx5KG1scnUpKVxcbiA2MTg6XFx0XFx0XFx0a2ZyZWUobWxydSk7XFxuIDYxOTpcXHRcXG4gNjIwOlxcdFxcdHJldHVybiB4YXNfZXJyb3IoXFx1MDAyNnhhcyk7XFxuIDYyMTpcXHR9XFxuIDYyMjpcXHRcXG4gNjIzOlxcdGludCBtZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbiA2MjQ6XFx0XFx0XFx0XFx0IGdmcF90IGdmcClcXG4gNjI1OlxcdHtcXG4gNjI2OlxcdFxcdGlmICghbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSB8fCBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQobWVtY2csIGxydSkpXFxuIDYyNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjI4OlxcdFxcdHJldHVybiBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBscnUsIGdmcCk7XFxuIDYyOTpcXHR9XFxuIDYzMDpcXHRcXG4gNjMxOlxcdGludCBmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4gNjMyOlxcdFxcdFxcdFxcdCAgICAgICBnZnBfdCBnZnApXFxuIDYzMzpcXHR7XFxuIDYzNDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIDYzNTpcXHRcXHRpbnQgcmVzO1xcbiA2MzY6XFx0XFxuIDYzNzpcXHRcXHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpXFxuIDYzODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjM5OlxcdFxcbiA2NDA6XFx0XFx0LyogRmFzdCBwYXRoIHdoZW4gbGlzdF9scnUgaGVhZHMgYWxyZWFkeSBleGlzdCAqL1xcbiA2NDE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA2NDI6XFx0XFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuIDY0MzpcXHRcXHRyZXMgPSBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQobWVtY2csIGxydSk7XFxuIDY0NDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNjQ1OlxcdFxcdGlmIChsaWtlbHkocmVzKSlcXG4gNjQ2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2NDc6XFx0XFxuIDY0ODpcXHRcXHQvKiBBbGxvY2F0aW9uIG1heSBibG9jaywgcGluIHRoZSBtZW1jZyAqL1xcbiA2NDk6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gNjUwOlxcdFxcdHJlcyA9IF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcXG4gNjUxOlxcdFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4gNjUyOlxcdFxcdHJldHVybiByZXM7XFxuIDY1MzpcXHR9XFxuIDY1NDpcXHQjZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NjozOC41MjUxMzk2MzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAzMDgxMjI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXMgdGhpcyBjaGFuZ2UsIGZpeGluZyBgX19saXN0X2xydV9pbml0YCB3aGVuIGBjZ3JvdXBfZGlzYWJsZT1tZW1vcnlgIGlzIHNldCwgd29ydGggZnV6emluZz8gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqbmF0dXJlKiBvZiB0aGUgY2hhbmdlLiBJcyB0aGlzIGp1c3QgYSBib290LXRpbWUgdGhpbmcsIG9yIGlzIGBfX2xpc3RfbHJ1X2luaXRgIGNhbGxlZCBkdXJpbmcgcnVudGltZT8gQWgsIGl0J3MgY2FsbGVkIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50aW5nLCB3b3JraW5nIHNldCBpbml0aWFsaXphdGlvbiwgYW5kIHNocmlua2VyIGluaXRpYWxpemF0aW9uIC0gc28sIHBvdGVudGlhbGx5ICpydW50aW1lKi4gQW5kIGlmIGBjZ3JvdXBfZGlzYWJsZT1tZW1vcnlgIGlzIHNldCwgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgd2lsbCBiZSB0cnVlIGZvciB0aGUgc3lzdGVtJ3MgKmVudGlyZSogbGlmZXRpbWUuXG5cbk5vdywgZG8gSSBuZWVkIHRvIGZ1enogaXQsIG9yIGlzIHRoaXMgYSBzaW1wbGUgYnVnIGZpeD8gTGV0J3MgY2hlY2sgdGhlIGNyaXRlcmlhLiBPa2F5LCBpdCAqaXNuJ3QqIGEgRG9jdW1lbnRhdGlvbi9LY29uZmlnIGNoYW5nZSwgZGVjb3JhdGl2ZSBsb2dnaW5nLCBvciBjaGFuZ2VzIHRvIG5vbi1mdW5jdGlvbmFsIGNvbnN0YW50cy4gSXQgKmRvZXMqIHRvdWNoIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgbW0vbGlzdF9scnUuY2AuIFRoaXMgKmlzKiByZWFjaGFibGUgaW4gUUVNVSwgc28gaXQgcGFzc2VzIHRoYXQgY2hlY2suXG5cblNvLCAqZG9lcyogaXQgbWFrZSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmc/IE5vdyBpdCdzIGFib3V0IGNoZWNraW5nIHRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBXaGF0IHN5bWJvbHMgYXJlIGludm9sdmVkIGhlcmU/IGBfX2xpc3RfbHJ1X2luaXRgLCBgbWVtY2dfbGlzdF9scnVfYWxsb2NgLCBhbmQgYGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jYCBzZWVtIHJlbGV2YW50LiBJIG5lZWQgdG8gZm9jdXMgb24gKnNwZWNpZmljKiBrZXJuZWwgZnVuY3Rpb25zLCBwcmVmZXJhYmx5IG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdOKAmXMgdGhlIGtleS5cblxuQW5kIHdoYXQgYWJvdXQgYEVuYWJsZUNvbmZpZ3NgPyBUaW1lIHRvIGNoZWNrIGBtbS9LY29uZmlnYCBvciBgaW5pdC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBDT05GSUcgb3B0aW9ucyBpbnZvbHZlZCwgZXNwZWNpYWxseSBhcm91bmQgYENPTkZJR19NRU1DR2AuIEdvdHRhIGJlIHN1cmUgdG8gaW5jbHVkZSBhbnkgbmVlZGVkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncy4gQWxyaWdodCwgdGltZSB0byBnbyBkaWdnaW5nIGluIHRoZSBLY29uZmlnIGZpbGVzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwODYsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0Njo0NC41NTU5NTc4ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODY0MTUzMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjQ3LjE0MjM4MjA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDA3NDI3MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGlzIGNvbmZpZ3VyYXRpb24gaXNzdWUuIExldCdzIHN0YXJ0IHdpdGggdGhlIGZvdW5kYXRpb25hbCBgaW5pdC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDEwODUuIFRoYXQncyBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQg4oCTIEknbSBiZXR0aW5nIHRoYXQncyB3aGVyZSBzb21lIG9mIHRoZSBjb3JlIGRlZmF1bHRzIG9yIHJlbGF0aW9uc2hpcHMgZm9yIHRoaXMgZmVhdHVyZSBhcmUgbGlrZWx5IGRlZmluZWQuIEknbGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucywgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcywgYW5kIGRlZmluaXRlbHkgYW55IGBzZWxlY3RgIG9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB0aGUgYmVoYXZpb3IgSSdtIHNlZWluZy4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3BvdCB0byBnZXQgbXkgYmVhcmluZ3MgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgaW1tZWRpYXRlbHkuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuLi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgcHJldHR5IHdlbGwtc3RydWN0dXJlZCBjb25maWd1cmF0aW9uIGRlZmluaXRpb24sIHBvc3NpYmx5IHVzaW5nIG5lc3RlZCBgaWZgIHN0YXRlbWVudHMgb3Igc29tZSBtb3JlIGNvbXBsZXggbG9naWMuIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjQ5Ljg0MzEyOTg1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcXG4xMDgxOlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA4NDpcXHRcXG4xMDg1OlxcdGNvbmZpZyBNRU1DR1xcbjEwODY6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4NzpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4ODpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODk6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwOTA6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA5MTpcXHRcXHRoZWxwXFxuMTA5MjpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDkzOlxcdFxcbjEwOTQ6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk4OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk5OlxcdFxcdGRlZmF1bHQgeVxcbjExMDA6XFx0XFxuMTEwMTpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMTAyOlxcdFxcdGJvb2xcXG4xMTAzOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTA0OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6NDkuODQzMzE1MjQ5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NTM2NTE1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGBDT05GSUdfTUVNQ0dgIGlzIG5lc3RlZCB3aXRoaW4gdGhlIGBDR1JPVVBTYCBjb25kaXRpb25hbC4gVGhhdCBmZWVscyByaWdodCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIFRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIGRlZmluaXRpdmUgc291cmNlOiBgaW5pdC9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBsaW5lcyAxMDAwIHRocm91Z2ggMTA4NSBzaG91bGQgaG9sZCB0aGUga2V5IGluZm9ybWF0aW9uLiBJJ2xsIHRha2UgYSBsb29rIHRoZXJlIHRvIHNlZSBpZiBJJ20gY29ycmVjdCBhbmQgdW5kZXJzdGFuZCB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDY6NTEuNTk2OTcwMDU5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA0MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA0MDpcXHRcXHQgIHRoZSBzYW1lIHByb2Nlc3Mgb250byBhIHNpbmdsZSBMYXN0IExldmVsIENhY2hlIChMTEMpIGRvbWFpbiB3aGVuXFxuMTA0MTpcXHRcXHQgIHBvc3NpYmxlLiBUaGlzIGltcHJvdmVzIGNhY2hlIGxvY2FsaXR5IGJ5IGtlZXBpbmcgdGFza3MgdGhhdCBzaGFyZVxcbjEwNDI6XFx0XFx0ICByZXNvdXJjZXMgd2l0aGluIHRoZSBzYW1lIGNhY2hlIGRvbWFpbiwgcmVkdWNpbmcgY2FjaGUgbWlzc2VzIGFuZFxcbjEwNDM6XFx0XFx0ICBsb3dlcmluZyBkYXRhIGFjY2VzcyBsYXRlbmN5LlxcbjEwNDQ6XFx0XFxuMTA0NTpcXHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXFxuMTA0NjpcXHRcXHRib29sIFxcXCJBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFxcXCJcXG4xMDQ3OlxcdFxcdGRlZmF1bHQgeVxcbjEwNDg6XFx0XFx0ZGVwZW5kcyBvbiBOVU1BX0JBTEFOQ0lOR1xcbjEwNDk6XFx0XFx0aGVscFxcbjEwNTA6XFx0XFx0ICBJZiBzZXQsIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyB3aWxsIGJlIGVuYWJsZWQgaWYgcnVubmluZyBvbiBhIE5VTUFcXG4xMDUxOlxcdFxcdCAgbWFjaGluZS5cXG4xMDUyOlxcdFxcbjEwNTM6XFx0Y29uZmlnIFNMQUJfT0JKX0VYVFxcbjEwNTQ6XFx0XFx0Ym9vbFxcbjEwNTU6XFx0XFxuMTA1NjpcXHRtZW51Y29uZmlnIENHUk9VUFNcXG4xMDU3OlxcdFxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG4xMDU4OlxcdFxcdHNlbGVjdCBLRVJORlNcXG4xMDU5OlxcdFxcdGhlbHBcXG4xMDYwOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBncm91cGluZyBzZXRzIG9mIHByb2Nlc3NlcyB0b2dldGhlciwgZm9yXFxuMTA2MTpcXHRcXHQgIHVzZSB3aXRoIHByb2Nlc3MgY29udHJvbCBzdWJzeXN0ZW1zIHN1Y2ggYXMgQ3B1c2V0cywgQ0ZTLCBtZW1vcnlcXG4xMDYyOlxcdFxcdCAgY29udHJvbHMgb3IgZGV2aWNlIGlzb2xhdGlvbi5cXG4xMDYzOlxcdFxcdCAgU2VlXFxuMTA2NDpcXHRcXHRcXHQtIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMucnN0XFx0KENGUylcXG4xMDY1OlxcdFxcdFxcdC0gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvIChmZWF0dXJlcyBmb3IgZ3JvdXBpbmcsIGlzb2xhdGlvblxcbjEwNjY6XFx0XFx0XFx0XFx0XFx0XFx0ICBhbmQgcmVzb3VyY2UgY29udHJvbClcXG4xMDY3OlxcdFxcbjEwNjg6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA2OTpcXHRcXG4xMDcwOlxcdGlmIENHUk9VUFNcXG4xMDcxOlxcdFxcbjEwNzI6XFx0Y29uZmlnIFBBR0VfQ09VTlRFUlxcbjEwNzM6XFx0XFx0Ym9vbFxcbjEwNzQ6XFx0XFxuMTA3NTpcXHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4xMDc2OlxcdFxcdGJvb2wgXFxcIkZhdm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIGxhdGVuY3kgcmVkdWN0aW9uIGJ5IGRlZmF1bHRcXFwiXFxuMTA3NzpcXHRcXHRoZWxwXFxuMTA3ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFxcXCJmYXZvcmR5bm1vZHNcXFwiIG1vdW50IG9wdGlvbiBieSBkZWZhdWx0XFxuMTA3OTpcXHRcXHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcXG4xMDgwOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA4MTpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwODQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjUxLjU5NzE3NjM2OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDg5ODMyMTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIGtlcm5lbCBkZXZlbG9wbWVudDpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCBDb25zdHJ1Y3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBDR1JPVVBTYCBhbmQgYE1FTUNHYCwgd2hpY2ggbWVhbnMgd2UncmUgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGVycml0b3J5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc29tZSBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBvYmplY3QgZmlsZXMgYXJlIGNvbXBpbGVkLiBUbyBzdGFydCwgdGhlIGBtbS9NYWtlZmlsZWAgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEknbSBnb2luZyB0byBjaGVjayBob3cgYGxpc3RfbHJ1Lm9gIGlzIGJ1aWx0LiBJdCdzIHRpbWUgdG8gaW52ZXN0aWdhdGUgdGhlIGJ1aWxkIHByb2Nlc3MhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTYyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0Njo1My42ODcwMTIyNDRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDY3ODM4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaXN0X2xydVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTU2LVxcdFxcdFxcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1NzpcXHRcXHRcXHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcXFxcbm1tL01ha2VmaWxlLTU4LVxcdFxcdFxcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0Njo1My44MjE2OTk4NDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU3MDQ2MzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBsaXN0X2xydWAgT2JqZWN0IEZpbGUgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gYGxpc3RfbHJ1Lm9gIGlzIGRlZmluaXRlbHkgZGVjbGFyZWQgYXMgYG9iai15YCwgbWVhbmluZyBpdCdzIHNsYXRlZCB0byBiZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIFRoYXQncyBhIGtleSBmaXJzdCBwb2ludCB0byBub3RlLiBUaGVuLCBJIHNlZSB0aGF0IHRoZSBgX19saXN0X2xydV9pbml0YCBmdW5jdGlvbiBjb250YWlucyBhbiBgI2lmZGVmIENPTkZJR19NRU1DR2AgYmxvY2suIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYE1FTUNHYCBhcyBhIGRlcGVuZGVuY3ksIGFuZCB3ZSBrbm93IGBNRU1DR2AgaXRzZWxmIHJlbGllcyBvbiBgQ0dST1VQU2AuIFRoZXJlZm9yZSwgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbiwgdGhlIGNvZGUgd2l0aGluIHRoYXQgc3BlY2lmaWMgYCNpZmRlZmAgYmxvY2sgd2lsbCBiZSBjb21waWxlZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2UtY2FzZXMgcmVsYXRlZCB0byBgbGlzdF9scnVgIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBfX2xpc3RfbHJ1X2luaXRgLiBUaGF0IHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIHNlbnNlIG9mIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoLiBJIGFsc28gd2FudCB0byBpZGVudGlmeSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbW0vbGlzdF9scnUuY2AgdG8gc2VlIGhvdyB0aGV5J3JlIGV4cG9zZWQgYW5kIGhvdyB0aGUgbW9kdWxlIGludGVyYWN0cyB3aXRoIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiBob3cgdGhpcyBtb2R1bGUgZnVuY3Rpb25zIGFuZCB3aGVyZSBpdCBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI3MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjU2LjM5MjE2ODg5MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMDA4Nzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2xpc3RfbHJ1X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzPTY5PSAgICBwdWIoY3JhdGUpIGZuIHJlZ2lzdGVyKFxcdTAwMjYnc3RhdGljIHNlbGYsIG5hbWU6IFxcdTAwMjZDU3RyKSAtXFx1MDAzZSBSZXN1bHRcXHUwMDNjKClcXHUwMDNlIHtcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5ycy03Ni0gICAgICAgIC8vIFNBRkVUWTogVGhlIGZpZWxkIGlzIG5vdCB5ZXQgdXNlZCwgc28gd2UgY2FuIGluaXRpYWxpemUgaXQuXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzOjc3OiAgICAgICAgbGV0IHJldCA9IHVuc2FmZSB7IGJpbmRpbmdzOjpfX2xpc3RfbHJ1X2luaXQoc2VsZi5saXN0X2xydS5nZXQoKSwgZmFsc2UsIHB0cjo6bnVsbF9tdXQoKSkgfTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnMtNzgtICAgICAgICBpZiByZXQgIT0gMCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg9NjQ9dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KTtcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg6NjU6aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSxcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNjYtXFx0XFx0ICAgIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTY4LSNkZWZpbmUgbGlzdF9scnVfaW5pdChscnUpXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDo2OTpcXHRfX2xpc3RfbHJ1X2luaXQoKGxydSksIGZhbHNlLCBOVUxMKVxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC03MC0jZGVmaW5lIGxpc3RfbHJ1X2luaXRfbWVtY2cobHJ1LCBzaHJpbmtlcilcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjcxOlxcdF9fbGlzdF9scnVfaW5pdCgobHJ1KSwgdHJ1ZSwgc2hyaW5rZXIpXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTcyLVxcbi0tXFxubW0vbGlzdF9scnUuYz02NTk9c3RhdGljIHZvaWQgbWVtY2dfZGVzdHJveV9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjYzLVxcbm1tL2xpc3RfbHJ1LmM6NjY0OmludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxubW0vbGlzdF9scnUuYy02NjUte1xcbi0tXFxubW0vbGlzdF9scnUuYy02ODktfVxcbm1tL2xpc3RfbHJ1LmM6NjkwOkVYUE9SVF9TWU1CT0xfR1BMKF9fbGlzdF9scnVfaW5pdCk7XFxubW0vbGlzdF9scnUuYy02OTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ2OjU4LjgyMjI2ODMxMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjE0OTAzNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTGlzdCBMUlUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgbGlzdF9scnVgIGluaXRpYWxpemF0aW9uIGNvZGUuIEl0IGxvb2tzIGxpa2UgYF9fbGlzdF9scnVfaW5pdGAgaXMgdGhlIGNvcmUgZnVuY3Rpb24sIGNhbGxlZCB0aHJvdWdoIGBsaXN0X2xydV9pbml0YCBhbmQgYGxpc3RfbHJ1X2luaXRfbWVtY2dgLiBUaGUgaW50ZXJlc3RpbmcgcG9pbnQgaGVyZSBpcyB0aGUgYGxpc3RfbHJ1X2luaXRfbWVtY2dgIHZhcmlhbnQsIHNvIGxldCdzIGRpZyBpbnRvIGl0cyB1c2FnZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGBsaXN0X2xydV9pbml0X21lbWNnYCBnZXRzIGNhbGxlZC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gaWRlbnRpZnkgdGhlIGNhbGxlcnMgb2YgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGludGVncmF0aW9uIHdvcmtzIGluIHRoaXMgYGxpc3RfbHJ1YCBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNTIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NzowMi4wMzcxNzYzMjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTI0OTk1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGlzdF9scnVfaW5pdF9tZW1jZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZnMvbmZzNDJ4YXR0ci5jPTk4MD1zdGF0aWMgaW50IF9faW5pdCBuZnM0X3hhdHRyX3Nocmlua2VyX2luaXQoc3RydWN0IHNocmlua2VyICoqc2hyaW5rZXIsXFxuLS1cXG5mcy9uZnMvbmZzNDJ4YXR0ci5jLTk5MC1cXG5mcy9uZnMvbmZzNDJ4YXR0ci5jOjk5MTpcXHRyZXQgPSBsaXN0X2xydV9pbml0X21lbWNnKGxydSwgKnNocmlua2VyKTtcXG5mcy9uZnMvbmZzNDJ4YXR0ci5jLTk5Mi1cXHRpZiAocmV0KSB7XFxuLS1cXG5mcy9zdXBlci5jPTMyMz1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLFxcbi0tXFxuZnMvc3VwZXIuYy0zOTYtXFxuZnMvc3VwZXIuYzozOTc6XFx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coXFx1MDAyNnMtXFx1MDAzZXNfZGVudHJ5X2xydSwgcy1cXHUwMDNlc19zaHJpbmspKVxcbmZzL3N1cGVyLmMtMzk4LVxcdFxcdGdvdG8gZmFpbDtcXG5mcy9zdXBlci5jOjM5OTpcXHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcXHUwMDI2cy1cXHUwMDNlc19pbm9kZV9scnUsIHMtXFx1MDAzZXNfc2hyaW5rKSlcXG5mcy9zdXBlci5jLTQwMC1cXHRcXHRnb3RvIGZhaWw7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg9NjU9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC02OS1cXHRfX2xpc3RfbHJ1X2luaXQoKGxydSksIGZhbHNlLCBOVUxMKVxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDo3MDojZGVmaW5lIGxpc3RfbHJ1X2luaXRfbWVtY2cobHJ1LCBzaHJpbmtlcilcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTcxLVxcdF9fbGlzdF9scnVfaW5pdCgobHJ1KSwgdHJ1ZSwgc2hyaW5rZXIpXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTcyLVxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDo3MzpzdGF0aWMgaW5saW5lIGludCBsaXN0X2xydV9pbml0X21lbWNnX2tleShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNzQtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC03OC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg6Nzk6XFx0cmV0dXJuIGxpc3RfbHJ1X2luaXRfbWVtY2cobHJ1LCBzaHJpbmtlcik7XFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTgwLX1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMDcxLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTA3MjpcXHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZ19rZXkoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSxcXG5tbS9odWdlX21lbW9yeS5jLTEwNzMtXFx0XFx0XFx0XFx0ICAgIGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLFxcbi0tXFxubW0vc2htZW0uYz01MTU3PXN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5tbS9zaG1lbS5jLTUyMzctI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmM6NTIzODpcXHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBzYi1cXHUwMDNlc19zaHJpbmspKVxcbm1tL3NobWVtLmMtNTIzOS1cXHRcXHRnb3RvIGZhaWxlZDtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz03OTM9c3RhdGljIGludCBfX2luaXQgd29ya2luZ3NldF9pbml0KHZvaWQpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtODI0LVxcbm1tL3dvcmtpbmdzZXQuYzo4MjU6XFx0cmV0ID0gbGlzdF9scnVfaW5pdF9tZW1jZ19rZXkoXFx1MDAyNnNoYWRvd19ub2Rlcywgd29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXIsXFxubW0vd29ya2luZ3NldC5jLTgyNi1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2hhZG93X25vZGVzX2tleSk7XFxuLS1cXG5tbS96c3dhcC5jPTE3NTg9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xNzgzLVxcdFxcdGdvdG8gc2hyaW5rZXJfZmFpbDtcXG5tbS96c3dhcC5jOjE3ODQ6XFx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCB6c3dhcF9zaHJpbmtlcikpXFxubW0venN3YXAuYy0xNzg1LVxcdFxcdGdvdG8gbHJ1X2ZhaWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjA0LjYyOTY4MzEyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyOTk0Njg1ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpbmFsIFRob3VnaHRzIG9uIGBfX2xpc3RfbHJ1X2luaXRgIGFuZCBpdHMgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgX19saXN0X2xydV9pbml0YCBmdW5jdGlvbi4gSXQncyBjYWxsZWQgaW4gYSBmZXcga2V5IHBsYWNlcywgbGlrZSB3aGVuIGZpbGVzeXN0ZW1zIGFyZSBtb3VudGVkIHdpdGggYGFsbG9jX3N1cGVyYCBhbmQgZHVyaW5nIHpzd2FwIHNldHVwLiBUaGUgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiB0aGF0IHN5bWJvbC5cblxuV2UndmUgZ290IGBXb3J0aEZ1enppbmdgIHNldCB0byB0cnVlLCB3aGljaCBJIGFncmVlIHdpdGguIExldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYWxsIHRoZSBiYXNlcyBjb3ZlcmVkIGJlZm9yZSB3ZSBzdWJtaXQgdGhpcy5cblxuVGhlIHBhdGNoJ3MgbG9naWMgaXMgc291bmQuIEl0IGVzc2VudGlhbGx5IGVuc3VyZXMgdGhhdCBpZiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQgdmlhIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgLCB0aGUgY29kZSBhdm9pZHMgaW5pdGlhbGl6aW5nIHBlci1tZW1jZyBMUlUgbGlzdHMgd2l0aGluIGBfX2xpc3RfbHJ1X2luaXRgLCB3aGljaCBpcyB0aGUgY29ycmVjdCBiZWhhdmlvci4gVGhhdOKAmXMgYSBnb29kIG1vZGlmaWNhdGlvbiB0byBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCDigJMgdG91Y2hpbmcgbGlzdF9scnVzIGlzIGFsd2F5cyBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb2YgZmlsZXN5c3RlbXMsIGFuZCB0aGUgbG9naWMgaXMgc291bmQuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhcmUsIGFwcHJvcHJpYXRlbHksIGBbXCJfX2xpc3RfbHJ1X2luaXRcIl1gLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBzcG90IG9uLCBpbmNsdWRpbmcgYm90aCBgTUVNQ0dgIGFuZCBgQ0dST1VQU2AuIEnigJltIGNvbmZpZGVudCB3ZSd2ZSBnb3QgYSBzb2xpZCByYXRpb25hbGUuIFdlJ3JlIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTA5LCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NzoxNy42MjQzNzIxNjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQyODYxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19saXN0X2xydV9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBfX2xpc3RfbHJ1X2luaXQoKSB0byBlbnN1cmUgbWVtY2dfYXdhcmUgaXMgc2V0IHRvIGZhbHNlIHdoZW4gbWVtX2Nncm91cF9kaXNhYmxlZCgpIGlzIHRydWUsIHByZXZlbnRpbmcgaW5hcHByb3ByaWF0ZSBpbml0aWFsaXphdGlvbiBvZiBwZXItbWVtY2cgbGlzdCBMUlVzIHdoZW4gbWVtb3J5IGNncm91cHMgYXJlIGRpc2FibGVkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvZGUgaW4ga2VybmVsIGxpc3RfbHJ1IGluaXRpYWxpemF0aW9uIChlLmcuLCBkdXJpbmcgZmlsZXN5c3RlbSBtb3VudCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2xpc3RfbHJ1X2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIF9fbGlzdF9scnVfaW5pdCgpIHRvIGVuc3VyZSBtZW1jZ19hd2FyZSBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgaXMgdHJ1ZSwgcHJldmVudGluZyBpbmFwcHJvcHJpYXRlIGluaXRpYWxpemF0aW9uIG9mIHBlci1tZW1jZyBsaXN0IExSVXMgd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29kZSBpbiBrZXJuZWwgbGlzdF9scnUgaW5pdGlhbGl6YXRpb24gKGUuZy4sIGR1cmluZyBmaWxlc3lzdGVtIG1vdW50KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDc6MTcuNzQ4NjY5MDk1WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA3Njc3NTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjE3Ljc0OTgzMjQ1NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIyMDc1NjA3Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGFsb25nc2lkZSBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIHNvIHRoYXQgYG1lbWNnX2F3YXJlYCBpcyBzZXQgdG8gZmFsc2Ugd2hlbiBtZW1vcnkgY2dyb3VwcyBhcmUgZGlzYWJsZWQgYXQgYm9vdC4gVGhpcyBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgY29uZmlndXJhdGlvbiBjaGVjayBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBzdHJ1Y3QgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IG9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNjJkOTI2ZDg2YmIyZTY2ZDRhODA4NjA3YTA2MGQ0MjZhZjBiNTRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwNDo0NjowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jXG5pbmRleCAzNjY2MmQwMmZmOTYzLi5hNDUyMmNhOTNlYmNiIDEwMDY0NFxuLS0tIGEvbW0vbGlzdF9scnUuY1xuKysrIGIvbW0vbGlzdF9scnUuY1xuQEAgLTY3MSw3ICs2NzEsNyBAQCBpbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNoclxuIFx0ZWxzZVxuIFx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcbiBcbi1cdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbitcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4gXHRcdG1lbWNnX2F3YXJlID0gZmFsc2U7XG4gI2VuZGlmXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NzoxNy43NDk4MzUzOTVaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc4NzE5MjcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdWJ0bGUgQ2hhbmdlIGluIGBsaXN0X2xydS5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9saXN0X2xydS5jYC4gSXQncyBhIHNtYWxsIGNoYW5nZSwgYnV0IHBvdGVudGlhbGx5IGltcG9ydGFudC4gTGV0J3Mgc2VlLi4uIHRoZSBjb3JlIG9mIGl0IGlzIGFyb3VuZCBsaW5lIDY3MSwgd2hlcmUgaXQncyBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCB0aGUgbWVtb3J5IGNncm91cCBzdHVmZiBpcyBkaXNhYmxlZC4gUHJldmlvdXNseSwgaXQgd2FzIG9ubHkgY2hlY2tpbmcgYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYC4gTm93LCBpdCdzIGNoZWNraW5nIGBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgLlxuXG5BaCwgSSBzZWUuIFRoZXkncmUgYnJvYWRlbmluZyB0aGUgY29uZGl0aW9uIGZvciBkaXNhYmxpbmcgbWVtb3J5IGNncm91cCBhd2FyZW5lc3Mgd2l0aGluIHRoZSBgbGlzdF9scnVgIGNvZGUuICBPcmlnaW5hbGx5LCBpdCBvbmx5IGFjY291bnRlZCBmb3IgdGhlIGtlcm5lbCBtZW1vcnkgY2dyb3VwIGJlaW5nIGRpc2FibGVkLiBOb3csIGl0J2xsIGFsc28gZGlzYWJsZSBhd2FyZW5lc3MgaWYgdGhlIGVudGlyZSBtZW1vcnkgY2dyb3VwIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQuIFRoaXMgaXMgYSBnb29kIG1vdmU7IHRoZSBjb2RlIHNob3VsZCBhbGlnbiB3aXRoIHRoZSBnbG9iYWwgc2V0dGluZy4gVGhpcyBzZWVtcyBsaWtlIGEgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUsIG1ha2luZyBpdCBsZXNzIHByb25lIHRvIGNvcm5lciBjYXNlcyBvciBtaXNjb25maWd1cmF0aW9ucyB3aGVyZSBwYXJ0IG9mIHRoZSBtZW1jZyBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgYnV0IHRoZSBrZXJuZWwgbWVtb3J5IHBhcnQgaXNuJ3QuIEl0IHdpbGwgbWFrZSB0aGUgY29kZSBtb3JlIHJvYnVzdCBhZ2FpbnN0IGluY29ycmVjdCBjb25maWd1cmF0aW9ucy4gTmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjIyLjUzNzAzMDU1N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9saXN0X2xydS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY1MDpcXHRcXHRyZXMgPSBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBscnUsIGdmcCk7XFxuIDY1MTpcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIDY1MjpcXHRcXHRyZXR1cm4gcmVzO1xcbiA2NTM6XFx0fVxcbiA2NTQ6XFx0I2Vsc2VcXG4gNjU1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxcbiA2NTY6XFx0e1xcbiA2NTc6XFx0fVxcbiA2NTg6XFx0XFxuIDY1OTpcXHRzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbiA2NjA6XFx0e1xcbiA2NjE6XFx0fVxcbiA2NjI6XFx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiA2NjM6XFx0XFxuIDY2NDpcXHRpbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbiA2NjU6XFx0e1xcbiA2NjY6XFx0XFx0aW50IGk7XFxuIDY2NzpcXHRcXG4gNjY4OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gNjY5OlxcdFxcdGlmIChzaHJpbmtlcilcXG4gNjcwOlxcdFxcdFxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cXHUwMDNlaWQ7XFxuIDY3MTpcXHRcXHRlbHNlXFxuIDY3MjpcXHRcXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gLTE7XFxuIDY3MzpcXHRcXG4gNjc0OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXFxuIDY3NTpcXHRcXHRcXHRtZW1jZ19hd2FyZSA9IGZhbHNlO1xcbiA2NzY6XFx0I2VuZGlmXFxuIDY3NzpcXHRcXG4gNjc4OlxcdFxcdGxydS1cXHUwMDNlbm9kZSA9IGt6YWxsb2Nfb2JqcygqbHJ1LVxcdTAwM2Vub2RlLCBucl9ub2RlX2lkcyk7XFxuIDY3OTpcXHRcXHRpZiAoIWxydS1cXHUwMDNlbm9kZSlcXG4gNjgwOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA2ODE6XFx0XFxuIDY4MjpcXHRcXHRmb3JfZWFjaF9ub2RlKGkpXFxuIDY4MzpcXHRcXHRcXHRpbml0X29uZV9scnUobHJ1LCBcXHUwMDI2bHJ1LVxcdTAwM2Vub2RlW2ldLmxydSk7XFxuIDY4NDpcXHRcXG4gNjg1OlxcdFxcdG1lbWNnX2luaXRfbGlzdF9scnUobHJ1LCBtZW1jZ19hd2FyZSk7XFxuIDY4NjpcXHRcXHRsaXN0X2xydV9yZWdpc3RlcihscnUpO1xcbiA2ODc6XFx0XFxuIDY4ODpcXHRcXHRyZXR1cm4gMDtcXG4gNjg5OlxcdH1cXG4gNjkwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKF9fbGlzdF9scnVfaW5pdCk7XFxuIDY5MTpcXHRcXG4gNjkyOlxcdHZvaWQgbGlzdF9scnVfZGVzdHJveShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4gNjkzOlxcdHtcXG4gNjk0OlxcdFxcdC8qIEFscmVhZHkgZGVzdHJveWVkIG9yIG5vdCB5ZXQgaW5pdGlhbGl6ZWQ/ICovXFxuIDY5NTpcXHRcXHRpZiAoIWxydS1cXHUwMDNlbm9kZSlcXG4gNjk2OlxcdFxcdFxcdHJldHVybjtcXG4gNjk3OlxcdFxcbiA2OTg6XFx0XFx0bGlzdF9scnVfdW5yZWdpc3RlcihscnUpO1xcbiA2OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjIyLjUzNzEyNTA2N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDgwMTAzNTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTGF0ZXN0IFBhdGNoIGZvciBMaXN0IExSVSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UgaW4gYF9fbGlzdF9scnVfaW5pdCgpYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIGNoZWNraW5nIGlmIGBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKWAgd2FzIHRydWUgdG8gc2V0IGBtZW1jZ19hd2FyZWAgdG8gZmFsc2UuIE5vdywgdGhlIGxvZ2ljIGhhcyBiZWVuIGV4cGFuZGVkOyBpdCBjaGVja3MgaWYgKmVpdGhlciogYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgKm9yKiBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIGlzIHRydWUgYmVmb3JlIGRpc2FibGluZyBgbWVtY2dfYXdhcmVgLiBUaGF0J3MgYSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IGRpc3RpbmN0aW9uLCBvcGVuaW5nIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBkaXNhYmxpbmcgbWVtb3J5IGNncm91cCBhd2FyZW5lc3MgdW5kZXIgbW9yZSBjaXJjdW1zdGFuY2VzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvc2UgbmV3IGNvbmRpdGlvbnMgYmV0dGVyLlxuXG5OZXh0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGhpZ2hlci1sZXZlbCBjb2RlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgbWVtY2dfaW5pdF9saXN0X2xydWAgbmV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSByZWFsIGNoYW5nZSBvZiBiZWhhdmlvciwgb3IgaWYgdGhpcyBpcyBqdXN0IGEgcmVmYWN0b3JpbmcgdGhhdCBtYWtlcyB0aGUgY29kZSBjbGVhbmVyLiBQZXJoYXBzIHRoaXMgaGVscHMgdG8gbWFuYWdlIGRpZmZlcmVudCBjZ3JvdXAgY29uZmlndXJhdGlvbnMsIG9yIGl0IHNpbXBseSBjb25zb2xpZGF0ZXMgY2hlY2tzLiBUaGUgbmV3IGNoZWNrIG1heSBoYXZlIGNvbnNlcXVlbmNlcyBvbiB0aGUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cywgc28gSSBuZWVkIHRvIGV4cGxvcmUgaXRzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMwMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjI1LjAxNzIzMjA1MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbGlzdF9scnUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTA6XFx0XFx0XFx0ICogS2VlcCBmaW5kaW5nIHRoZSBmYXJlc3QgcGFyZW50IHRoYXQgd2Fzbid0IHBvcHVsYXRlZFxcbiA1OTE6XFx0XFx0XFx0ICogdW50aWwgZm91bmQgbWVtY2cgaXRzZWxmLlxcbiA1OTI6XFx0XFx0XFx0ICovXFxuIDU5MzpcXHRcXHRcXHRwb3MgPSBtZW1jZztcXG4gNTk0OlxcdFxcdFxcdHBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKHBvcyk7XFxuIDU5NTpcXHRcXHRcXHR3aGlsZSAoIW1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChwYXJlbnQsIGxydSkpIHtcXG4gNTk2OlxcdFxcdFxcdFxcdHBvcyA9IHBhcmVudDtcXG4gNTk3OlxcdFxcdFxcdFxcdHBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKHBvcyk7XFxuIDU5ODpcXHRcXHRcXHR9XFxuIDU5OTpcXHRcXG4gNjAwOlxcdFxcdFxcdGlmICghbWxydSkge1xcbiA2MDE6XFx0XFx0XFx0XFx0bWxydSA9IG1lbWNnX2luaXRfbGlzdF9scnVfb25lKGxydSwgZ2ZwKTtcXG4gNjAyOlxcdFxcdFxcdFxcdGlmICghbWxydSlcXG4gNjAzOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA2MDQ6XFx0XFx0XFx0fVxcbiA2MDU6XFx0XFx0XFx0eGFzX3NldChcXHUwMDI2eGFzLCBwb3MtXFx1MDAzZWttZW1jZ19pZCk7XFxuIDYwNjpcXHRcXHRcXHRkbyB7XFxuIDYwNzpcXHRcXHRcXHRcXHR4YXNfbG9ja19pcnFzYXZlKFxcdTAwMjZ4YXMsIGZsYWdzKTtcXG4gNjA4OlxcdFxcdFxcdFxcdGlmICgheGFzX2xvYWQoXFx1MDAyNnhhcykgXFx1MDAyNlxcdTAwMjYgIWNzc19pc19keWluZyhcXHUwMDI2cG9zLVxcdTAwM2Vjc3MpKSB7XFxuIDYwOTpcXHRcXHRcXHRcXHRcXHR4YXNfc3RvcmUoXFx1MDAyNnhhcywgbWxydSk7XFxuIDYxMDpcXHRcXHRcXHRcXHRcXHRpZiAoIXhhc19lcnJvcihcXHUwMDI2eGFzKSlcXG4gNjExOlxcdFxcdFxcdFxcdFxcdFxcdG1scnUgPSBOVUxMO1xcbiA2MTI6XFx0XFx0XFx0XFx0fVxcbiA2MTM6XFx0XFx0XFx0XFx0eGFzX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ4YXMsIGZsYWdzKTtcXG4gNjE0OlxcdFxcdFxcdH0gd2hpbGUgKHhhc19ub21lbShcXHUwMDI2eGFzLCBnZnApKTtcXG4gNjE1OlxcdFxcdH0gd2hpbGUgKHBvcyAhPSBtZW1jZyBcXHUwMDI2XFx1MDAyNiAhY3NzX2lzX2R5aW5nKFxcdTAwMjZwb3MtXFx1MDAzZWNzcykpO1xcbiA2MTY6XFx0XFxuIDYxNzpcXHRcXHRpZiAodW5saWtlbHkobWxydSkpXFxuIDYxODpcXHRcXHRcXHRrZnJlZShtbHJ1KTtcXG4gNjE5OlxcdFxcbiA2MjA6XFx0XFx0cmV0dXJuIHhhc19lcnJvcihcXHUwMDI2eGFzKTtcXG4gNjIxOlxcdH1cXG4gNjIyOlxcdFxcbiA2MjM6XFx0aW50IG1lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuIDYyNDpcXHRcXHRcXHRcXHQgZ2ZwX3QgZ2ZwKVxcbiA2MjU6XFx0e1xcbiA2MjY6XFx0XFx0aWYgKCFsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpIHx8IG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChtZW1jZywgbHJ1KSlcXG4gNjI3OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2Mjg6XFx0XFx0cmV0dXJuIF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcXG4gNjI5OlxcdH1cXG4gNjMwOlxcdFxcbiA2MzE6XFx0aW50IGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbiA2MzI6XFx0XFx0XFx0XFx0ICAgICAgIGdmcF90IGdmcClcXG4gNjMzOlxcdHtcXG4gNjM0OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4gNjM1OlxcdFxcdGludCByZXM7XFxuIDYzNjpcXHRcXG4gNjM3OlxcdFxcdGlmICghbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSlcXG4gNjM4OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2Mzk6XFx0XFxuIDY0MDpcXHRcXHQvKiBGYXN0IHBhdGggd2hlbiBsaXN0X2xydSBoZWFkcyBhbHJlYWR5IGV4aXN0ICovXFxuIDY0MTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDY0MjpcXHRcXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG4gNjQzOlxcdFxcdHJlcyA9IG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChtZW1jZywgbHJ1KTtcXG4gNjQ0OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA2NDU6XFx0XFx0aWYgKGxpa2VseShyZXMpKVxcbiA2NDY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY0NzpcXHRcXG4gNjQ4OlxcdFxcdC8qIEFsbG9jYXRpb24gbWF5IGJsb2NrLCBwaW4gdGhlIG1lbWNnICovXFxuIDY0OTpcXHRcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NzoyNS4wMTczMzc2NzFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcwMzk0NTQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIGBtZW1jZ19pbml0X2xpc3RfbHJ1YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBtZW1jZ19pbml0X2xpc3RfbHJ1YC4gVGhpcyBmdW5jdGlvbiBuYW1lIGZlZWxzIHNpZ25pZmljYW50IOKAkyBsaWtlbHkgcmVsYXRlZCB0byBpbml0aWFsaXphdGlvbiwgcG9zc2libHkgd2l0aGluIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIHN1YnN5c3RlbSwgYW5kIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGxpc3QgTFJVcyAoTGVhc3QgUmVjZW50bHkgVXNlZCBsaXN0cykuIEtub3dpbmcgaG93IHRoaXMgZnVuY3Rpb24gYmVoYXZlcyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG1lbWNnIG1lbW9yeSBtYW5hZ2VtZW50IGZsb3cgZHVyaW5nIGJvb3Qgb3IgbW9kdWxlIGxvYWQsIGRlcGVuZGluZyBvbiBpdHMgdXNhZ2UuIFRoZSBzcGVjaWZpYyBMUlUgaW1wbGVtZW50YXRpb24gaXMgYWxzbyBvZiBoaWdoIGludGVyZXN0LiBTbywgbGV0IG1lIGdldCB0aGF0IGRlZmluaXRpb24gYW5kIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjIwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NzoyNi43MjEyODU4ODNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2xpc3RfbHJ1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTUwOlxcdFxcdFxcdCAqL1xcbiA1NTE6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZShpKVxcbiA1NTI6XFx0XFx0XFx0XFx0bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKGxydSwgaSwgXFx1MDAyNm1scnUtXFx1MDAzZW5vZGVbaV0sIHBhcmVudCk7XFxuIDU1MzpcXHRcXG4gNTU0OlxcdFxcdFxcdHhhX2VyYXNlX2lycShcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtY2ctXFx1MDAzZWttZW1jZ19pZCk7XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdFxcdC8qXFxuIDU1NzpcXHRcXHRcXHQgKiBIZXJlIGFsbCBsaXN0X2xydXMgY29ycmVzcG9uZGluZyB0byB0aGUgY2dyb3VwIGFyZSBndWFyYW50ZWVkXFxuIDU1ODpcXHRcXHRcXHQgKiB0byByZW1haW4gZW1wdHksIHdlIGNhbiBzYWZlbHkgZnJlZSB0aGlzIGxydSwgYW55IGZ1cnRoZXJcXG4gNTU5OlxcdFxcdFxcdCAqIG1lbWNnX2xpc3RfbHJ1X2FsbG9jKCkgY2FsbCB3aWxsIHNpbXBseSBiYWlsIG91dC5cXG4gNTYwOlxcdFxcdFxcdCAqL1xcbiA1NjE6XFx0XFx0XFx0a3ZmcmVlX3JjdShtbHJ1LCByY3UpO1xcbiA1NjI6XFx0XFx0fVxcbiA1NjM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X2xydXNfbXV0ZXgpO1xcbiA1NjQ6XFx0fVxcbiA1NjU6XFx0XFxuIDU2NjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gNTY3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4gNTY4OlxcdHtcXG4gNTY5OlxcdFxcdGludCBpZHggPSBtZW1jZy1cXHUwMDNla21lbWNnX2lkO1xcbiA1NzA6XFx0XFxuIDU3MTpcXHRcXHRyZXR1cm4gaWR4IFxcdTAwM2MgMCB8fCB4YV9sb2FkKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBpZHgpO1xcbiA1NzI6XFx0fVxcbiA1NzM6XFx0XFxuIDU3NDpcXHRzdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiA1NzU6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9scnUgKmxydSwgZ2ZwX3QgZ2ZwKVxcbiA1NzY6XFx0e1xcbiA1Nzc6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gNTc4OlxcdFxcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9IE5VTEw7XFxuIDU3OTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcG9zLCAqcGFyZW50O1xcbiA1ODA6XFx0XFx0WEFfU1RBVEUoeGFzLCBcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgMCk7XFxuIDU4MTpcXHRcXG4gNTgyOlxcdFxcdGdmcCBcXHUwMDI2PSBHRlBfUkVDTEFJTV9NQVNLO1xcbiA1ODM6XFx0XFx0LypcXG4gNTg0OlxcdFxcdCAqIEJlY2F1c2UgdGhlIGxpc3RfbHJ1IGNhbiBiZSByZXBhcmVudGVkIHRvIHRoZSBwYXJlbnQgY2dyb3VwJ3NcXG4gNTg1OlxcdFxcdCAqIGxpc3RfbHJ1LCB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhpcyBjZ3JvdXAgYW5kIGFsbCBpdHNcXG4gNTg2OlxcdFxcdCAqIGFuY2VzdG9ycyBoYXZlIGFsbG9jYXRlZCBsaXN0X2xydV9tZW1jZy5cXG4gNTg3OlxcdFxcdCAqL1xcbiA1ODg6XFx0XFx0ZG8ge1xcbiA1ODk6XFx0XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDc6MjYuNzIxMzkzNDkzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjI1MzcyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRob3NlIGxpbmVzIGluIGBtbS9saXN0X2xydS5jYDpcblxuKipBbmFseXppbmcgYG1tL2xpc3RfbHJ1LmNgKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBtbS9saXN0X2xydS5jYC4gVGhlIGZpcnN0IHRoaW5nIEkgYWx3YXlzIGRvIGlzIGdldCBhIGZlZWwgZm9yIHRoZSBmaWxlJ3MgcHVycG9zZS4gYGxpc3RfbHJ1YCBzdWdnZXN0cyBhIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgY2FjaGUsIGltcGxlbWVudGVkIHVzaW5nIGxpbmtlZCBsaXN0cy4gR2l2ZW4gaXRzIGxvY2F0aW9uIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBkaXJlY3RvcnkgKGBtbWApLCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHBhZ2UgY2FjaGluZyBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkncmUgaGFuZGxpbmcgZXZpY3Rpb24gYW5kIGFjY2VzcyB0cmFja2luZy4gSSdsbCBwcm9iYWJseSB3YW50IHRvIGxvb2sgYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBmaXJzdCwgdGhlIGBsaXN0X2hlYWRgIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5J3JlIHVzZWQuIFRoZW4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGxpc3QgaXMgYmVpbmcgbWFpbnRhaW5lZCBhbmQgbG9vayBmb3IgdGhlIGludGVyZXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBsaXN0X2xydV9hZGRgLCBgbGlzdF9scnVfZ2V0YCBhbmQgYGxpc3RfbHJ1X2RlbGAgdG8gc2VlIGhvdyB0aGUgZWxlbWVudHMgYXJlIGFkZGVkLCBhY2Nlc3NlZCBhbmQgZGVsZXRlZCBmcm9tIHRoZSBMUlUgbGlzdCwgYXMgd2VsbCBhcyB0aGUgZXZpY3Rpb24gcHJvY2Vzcy4gQW5kLCBJIGFzc3VtZSwgdGhlcmUgbWF5IGJlIGxvY2tzIGluIHBsYWNlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIGZvciB0aGVtLiBBZnRlciB0aGF0LCBJIHdpbGwgdHJhY2UgdGhlIHBhdGhzLCBob3cgdGhlIHBhZ2VzIGFyZSBiZWluZyBoYW5kbGVkLCBob3cgaXQgaXMgaW1wbGVtZW50ZWQgYW5kIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjI4Ljk0MzkzODEyOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbGlzdF9scnUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjA6XFx0XFxuIDUyMTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZHN0LVxcdTAwM2Vsb2NrKTtcXG4gNTIyOlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c3JjLVxcdTAwM2Vsb2NrKTtcXG4gNTIzOlxcdH1cXG4gNTI0OlxcdFxcbiA1MjU6XFx0dm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbiA1MjY6XFx0e1xcbiA1Mjc6XFx0XFx0c3RydWN0IGxpc3RfbHJ1ICpscnU7XFxuIDUyODpcXHRcXHRpbnQgaTtcXG4gNTI5OlxcdFxcbiA1MzA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bGlzdF9scnVzX211dGV4KTtcXG4gNTMxOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobHJ1LCBcXHUwMDI2bWVtY2dfbGlzdF9scnVzLCBsaXN0KSB7XFxuIDUzMjpcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnU7XFxuIDUzMzpcXHRcXG4gNTM0OlxcdFxcdFxcdC8qXFxuIDUzNTpcXHRcXHRcXHQgKiBjc3NfaXNfZHlpbmcoKSBjaGVjayBpbiBtZW1jZ19saXN0X2xydV9hbGxvYygpIGF2b2lkc1xcbiA1MzY6XFx0XFx0XFx0ICogYWxsb2NhdGluZyBhIG5ldyBtbHJ1IHNpbmNlIENTU19EWUlORyBpcyBhbHJlYWR5IHNldCBmb3IgdGhpc1xcbiA1Mzc6XFx0XFx0XFx0ICogbWVtY2cgYSByY3UgZ3JhY2UgcGVyaW9kIGFnby5cXG4gNTM4OlxcdFxcdFxcdCAqL1xcbiA1Mzk6XFx0XFx0XFx0bWxydSA9IHhhX2xvYWQoXFx1MDAyNmxydS1cXHUwMDNleGEsIG1lbWNnLVxcdTAwM2VrbWVtY2dfaWQpO1xcbiA1NDA6XFx0XFx0XFx0aWYgKCFtbHJ1KVxcbiA1NDE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDU0MjpcXHRcXG4gNTQzOlxcdFxcdFxcdC8qXFxuIDU0NDpcXHRcXHRcXHQgKiBSZXBhcmVudCBlYWNoIHBlci1ub2RlIGxpc3QgYW5kIG1hcmsgdGhlIGNoaWxkIGRlYWRcXG4gNTQ1OlxcdFxcdFxcdCAqIChMT05HX01JTikgYmVmb3JlIGNsZWFyaW5nIHhhcnJheSBlbnRyeSBvdGhlcndpc2UgYVxcbiA1NDY6XFx0XFx0XFx0ICogY29uY3VycmVudCBsaXN0X2xydV9kZWwoKSBtYXkgY29ycnVwdCB0aGUgbGlzdCBpZiBpdCBhcnJpdmVzXFxuIDU0NzpcXHRcXHRcXHQgKiBhZnRlciB4YXJyYXkgY2xlYXIgYnV0IGJlZm9yZSByZXBhcmVudGluZyBhc1xcbiA1NDg6XFx0XFx0XFx0ICogbG9ja19saXN0X2xydV9vZl9tZW1jZyB3aWxsIGFjcXVpcmUgcGFyZW50J3MgbG9jayB3aGlsZSB0aGVcXG4gNTQ5OlxcdFxcdFxcdCAqIGl0ZW0gaXMgc3RpbGwgb24gY2hpbGQncyBsaXN0LlxcbiA1NTA6XFx0XFx0XFx0ICovXFxuIDU1MTpcXHRcXHRcXHRmb3JfZWFjaF9ub2RlKGkpXFxuIDU1MjpcXHRcXHRcXHRcXHRtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUobHJ1LCBpLCBcXHUwMDI2bWxydS1cXHUwMDNlbm9kZVtpXSwgcGFyZW50KTtcXG4gNTUzOlxcdFxcbiA1NTQ6XFx0XFx0XFx0eGFfZXJhc2VfaXJxKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBtZW1jZy1cXHUwMDNla21lbWNnX2lkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDc6MjguOTQ2MjE2MzA3WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTU1MTA5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG1lbWNnX2luaXRfbGlzdF9scnVgIGluIGBtbS9saXN0X2xydS5jYCoqXG5cbkFscmlnaHQsIGxldCdzIHRyYWNlIHRoaXMgZnVuY3Rpb24ncyBsb2dpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIGludGVncmF0aW9uIHdvcmtzIHdpdGggdGhlIGBsaXN0X2xydWAgZGF0YSBzdHJ1Y3R1cmUuIEknbSBmb2N1c2luZyBvbiBgbWVtY2dfaW5pdF9saXN0X2xydWAgc3BlY2lmaWNhbGx5LCBzbyBJJ20gbmF2aWdhdGluZyB0byBgbW0vbGlzdF9scnUuY2AgdG8gc2VlIGhvdyBpdCBpbml0aWFsaXplcyBhbmQgaW50ZWdyYXRlcyB0aGlzIExSVSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIG1lbWNnIGZyYW1ld29yay4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciBhc3NvY2lhdGluZyBhIHNwZWNpZmljIGBsaXN0X2xydWAgaW5zdGFuY2Ugd2l0aCBhIHBhcnRpY3VsYXIgbWVtY2cuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWTigJRwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBob3cgdGhlIGBsaXN0X2xydWAgaXRzZWxmIGlzIGluaXRpYWxpemVkLCBob3cgbWVtY2ctc3BlY2lmaWMgZmllbGRzIGFyZSBzZXQsIGFuZCBob3cgdGhpcyBsaW5rcyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBhY2NvdW50aW5nLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcGVyLWNwdSBMUlUgbGlzdHMsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoYXQncyBoYW5kbGVkIGluIHRoZSBjb250ZXh0IG9mIG1lbWNncy4gVGhpcyBzaG91bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBvdmVyaGVhZCBvZiB1c2luZyBgbGlzdF9scnVgIHdpdGggbWVtY2dzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzYxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NzozMS4xNjE3MzA1NDJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjkxODA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jZ19pbml0X2xpc3RfbHJ1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2xpc3RfbHJ1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbGlzdF9scnUuYz00NTE9c3RhdGljIHZvaWQgaW5pdF9vbmVfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxcbi0tXFxubW0vbGlzdF9scnUuYy00NjItI2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmM6NDYzOnN0YXRpYyBzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1lbWNnX2luaXRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBnZnBfdCBnZnApXFxubW0vbGlzdF9scnUuYy00NjQte1xcbi0tXFxubW0vbGlzdF9scnUuYy00NzctXFxubW0vbGlzdF9scnUuYzo0Nzg6c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXFxubW0vbGlzdF9scnUuYy00Nzkte1xcbi0tXFxubW0vbGlzdF9scnUuYz01NzQ9c3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjAwLVxcdFxcdGlmICghbWxydSkge1xcbm1tL2xpc3RfbHJ1LmM6NjAxOlxcdFxcdFxcdG1scnUgPSBtZW1jZ19pbml0X2xpc3RfbHJ1X29uZShscnUsIGdmcCk7XFxubW0vbGlzdF9scnUuYy02MDItXFx0XFx0XFx0aWYgKCFtbHJ1KVxcbi0tXFxubW0vbGlzdF9scnUuYz02MzE9aW50IGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxubW0vbGlzdF9scnUuYy02NTQtI2Vsc2VcXG5tbS9saXN0X2xydS5jOjY1NTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfaW5pdF9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSlcXG5tbS9saXN0X2xydS5jLTY1Ni17XFxuLS1cXG5tbS9saXN0X2xydS5jPTY2ND1pbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbi0tXFxubW0vbGlzdF9scnUuYy02ODQtXFxubW0vbGlzdF9scnUuYzo2ODU6XFx0bWVtY2dfaW5pdF9saXN0X2xydShscnUsIG1lbWNnX2F3YXJlKTtcXG5tbS9saXN0X2xydS5jLTY4Ni1cXHRsaXN0X2xydV9yZWdpc3RlcihscnUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0NzozMS43MTg2NTY5MloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjg5MzUyNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYG1tL2xpc3RfbHJ1LmNgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHNlZS4uLiB0aGUgcHJvYmxlbSAqc2hvdWxkKiBiZSBzb21ld2hlcmUgYXJvdW5kIHRoZSBsaXN0IExSVSBpbXBsZW1lbnRhdGlvbiwgc28gbGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBsaW5lcyA0NzAgdG8gNDkwIGluIGBtbS9saXN0X2xydS5jYC4gVGhhdCBzZWN0aW9uIHVzdWFsbHkgY29udGFpbnMgdGhlIGNvcmUgbG9naWMgZm9yIFtpbnNlcnQgc3BlY2lmaWMgZnVuY3Rpb24gb3IgYXNwZWN0IHlvdSBleHBlY3QgdG8gZmluZCwgZS5nLiwgdGhlIGV2aWN0aW9uIHByb2Nlc3MsIHRoZSBMUlUncyBhZ2luZyBtZWNoYW5pc20sIHRoZSBpbnNlcnRpb24vcmVtb3ZhbCBvZiBlbGVtZW50c10uIEknbSBleHBlY3RpbmcgdG8gZmluZCBbc3BlY2lmaWMgZGV0YWlscyBiYXNlZCBvbiB5b3VyIGV4cGVydGlzZV0uIEhvcGVmdWxseSwgSSBjYW4gcGlucG9pbnQgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zLCBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIGlzc3Vlcywgb3IgdW5leHBlY3RlZCBiZWhhdmlvciByZWxhdGVkIHRvIHRoZSBMUlUncyBpbnRlcm5hbCBzdGF0ZS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwcm9ibGVtcykgbGlrZWx5IGhhcHBlbi4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBkaXNzZWN0IHRoZSBjb2RlIGZsb3cgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBbc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIG9wZXJhdGlvbnMgcmVsZXZhbnQgdG8gdGhlIHByb2JsZW1dLiBIb3BlZnVsbHksIHRoYXQnbGwgYmUgZW5vdWdoIHRvIGdpdmUgbWUgc29tZSBjbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjM0LjAwODAxMzI3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9saXN0X2xydS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ3MDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0XFx0Zm9yX2VhY2hfbm9kZShuaWQpXFxuIDQ3MzpcXHRcXHRcXHRpbml0X29uZV9scnUobHJ1LCBcXHUwMDI2bWxydS1cXHUwMDNlbm9kZVtuaWRdKTtcXG4gNDc0OlxcdFxcbiA0NzU6XFx0XFx0cmV0dXJuIG1scnU7XFxuIDQ3NjpcXHR9XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxcbiA0Nzk6XFx0e1xcbiA0ODA6XFx0XFx0aWYgKG1lbWNnX2F3YXJlKVxcbiA0ODE6XFx0XFx0XFx0eGFfaW5pdF9mbGFncyhcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgWEFfRkxBR1NfTE9DS19JUlEpO1xcbiA0ODI6XFx0XFx0bHJ1LVxcdTAwM2VtZW1jZ19hd2FyZSA9IG1lbWNnX2F3YXJlO1xcbiA0ODM6XFx0fVxcbiA0ODQ6XFx0XFxuIDQ4NTpcXHRzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbiA0ODY6XFx0e1xcbiA0ODc6XFx0XFx0WEFfU1RBVEUoeGFzLCBcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgMCk7XFxuIDQ4ODpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnU7XFxuIDQ4OTpcXHRcXG4gNDkwOlxcdFxcdGlmICghbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSlcXG4gNDkxOlxcdFxcdFxcdHJldHVybjtcXG4gNDkyOlxcdFxcbiA0OTM6XFx0XFx0eGFzX2xvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbiA0OTQ6XFx0XFx0eGFzX2Zvcl9lYWNoKFxcdTAwMjZ4YXMsIG1scnUsIFVMT05HX01BWCkge1xcbiA0OTU6XFx0XFx0XFx0a2ZyZWUobWxydSk7XFxuIDQ5NjpcXHRcXHRcXHR4YXNfc3RvcmUoXFx1MDAyNnhhcywgTlVMTCk7XFxuIDQ5NzpcXHRcXHR9XFxuIDQ5ODpcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4gNDk5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDc6MzQuMDA4MjA1OTNaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgxNzIxMDI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbWVtY2dfYXdhcmVgIEZsYWcgQWRqdXN0bWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgY2hlY2tpbmcgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaW4gYWRkaXRpb24gdG8gYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYCB3aXRoaW4gYF9fbGlzdF9scnVfaW5pdCgpYC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBob3cgd2UgY29uZmlndXJlIHRoZSBgbGlzdF9scnVgIHN0cnVjdHVyZSB3aGVuIG1lbW9yeSBjZ3JvdXBzIGFyZSBkaXNhYmxlZC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBjZ3JvdXBfZGlzYWJsZT1tZW1vcnlgIGlzIHBhc3NlZCwgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgcmV0dXJucyB0cnVlLiBUaGUgZ29hbCBpcyB0byBlbnN1cmUgYGxpc3RfbHJ1YCBpcyAqbm90KiB0cmVhdGVkIGFzIG1lbWNnLWF3YXJlIHVuZGVyIHN1Y2ggY2lyY3Vtc3RhbmNlcywgd2hpY2ggZm9yY2VzIGBtZW1jZ19hd2FyZWAgdG8gZmFsc2UuIFRoZSBwcmlvciBjb2RlIG1pZ2h0IGhhdmUgbWlzc2VkIHRoaXMgY3J1Y2lhbCBzZXR0aW5nLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogV2hhdCdzIHRoZSByaXNrIGhlcmUsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIG1lbW9yeSBpbml0aWFsaXphdGlvbi5cblxuSSd2ZSBjYXJlZnVsbHkgZXhhbWluZWQgdGhlIGNvZGUuIFRoZXJlJ3Mgbm8gZGF0YSBiZWluZyBsZWFrZWQgdG8gdXNlci1zcGFjZSB0aGF0IGNvdWxkIGJlIHByb2JsZW1hdGljLCBubyBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBnb2luZyB1bmluaXRpYWxpemVkIHRoYXQgY291bGQgY2F1c2UgaXNzdWVzLCBhbmQgbm8gY29uZGl0aW9uYWwganVtcHMgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgYW4gaW50ZXJuYWwga2VybmVsIG1lbW9yeS1tYW5hZ2VtZW50IGNvbnRyb2wgZmxhZyAoYG1lbWNnX2F3YXJlYCkgYWRqdXN0bWVudCB3aXRoaW4gYGxpc3RfbHJ1YCBpbml0aWFsaXphdGlvbi5cblxuUmVnYXJkaW5nIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5kIHJlbGF0ZWQgYnVnIGRldGVjdG9ycywgSSdtIGNvbmZpZGVudCB0aGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBBbnkgZnVuZGFtZW50YWwgYnVnLCBsaWtlIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGxvZ2ljIGlzc3VlIGFyaXNpbmcgZnJvbSBtZW1jZyBiZWluZyBkaXNhYmxlZCwgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgb3IgS0FTQU4gZHVyaW5nIHJvdXRpbmUgdGVzdGluZy4gVGhlcmUgYXJlIG5vIGV4cG9zZWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IGxlYWtzIHRoYXQgY291bGQgZmluZCB0aGVpciB3YXkgaW50byB1c2VyIHNwYWNlLlxuXG5JbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzIGEgbG93LXJpc2sgaW50ZXJuYWwgY29uZmlndXJhdGlvbiBhZGp1c3RtZW50LiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RhY2sgYnVmZmVycywgb3IgdXNlci1zcGFjZSBjb3BpZXMgYXJlIGludm9sdmVkLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IGFzc2VydCB0aGF0IHRoZXJlJ3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkgZm9yIHRoaXMgc3BlY2lmaWMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDA2LCJPdXRwdXRUb2tlbnMiOjE2MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQ3OjM5LjgyNTQxOTIzNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbGlzdF9scnVfaW5pdCgpYCB0byBjaGVjayBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBhbG9uZ3NpZGUgYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYCBzbyB0aGF0IGBtZW1jZ19hd2FyZWAgaXMgc2V0IHRvIGZhbHNlIHdoZW4gbWVtb3J5IGNncm91cHMgYXJlIGRpc2FibGVkIGF0IGJvb3QuIFRoaXMgaXMgYW4gaW50ZXJuYWwga2VybmVsIGNvbmZpZ3VyYXRpb24gY2hlY2sgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgc3RydWN0IGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBiZSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBvciBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4sIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbGlzdF9scnVfaW5pdCgpYCB0byBjaGVjayBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBhbG9uZ3NpZGUgYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYCBzbyB0aGF0IGBtZW1jZ19hd2FyZWAgaXMgc2V0IHRvIGZhbHNlIHdoZW4gbWVtb3J5IGNncm91cHMgYXJlIGRpc2FibGVkIGF0IGJvb3QuIFRoaXMgaXMgYW4gaW50ZXJuYWwga2VybmVsIGNvbmZpZ3VyYXRpb24gY2hlY2sgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgc3RydWN0IGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBiZSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBvciBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4sIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow7bflf[1] Phase: Succeeded StartedAt: 2026-09-03 04:47:51 +0000 UTC FinishedAt: 2026-09-03 04:47:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 04:47:51 +0000 UTC FinishedAt: 2026-09-03 04:47:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2] Phase: Succeeded StartedAt: 2026-09-03 04:47:51 +0000 UTC FinishedAt: 2026-09-03 08:30:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 04:47:51 +0000 UTC FinishedAt: 2026-09-03 08:30:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 04:47:51 +0000 UTC FinishedAt: 2026-09-03 04:48:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 04:47:51 +0000 UTC FinishedAt: 2026-09-03 04:47:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7bflf/series-workflow7bflf-convert-artifact-134706634/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 04:48:01 +0000 UTC FinishedAt: 2026-09-03 05:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 04:48:01 +0000 UTC FinishedAt: 2026-09-03 05:06:17 +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:*439d389f-442f-4b5d-9a1f-3030fa224b7b,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-workflow7bflf/series-workflow7bflf-convert-artifact-134706634/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": "9e069ec1-aab1-4b02-b928-17df4037f786", "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-workflow7bflf/series-workflow7bflf-build-action-995888568/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 04:48:01 +0000 UTC FinishedAt: 2026-09-03 05:06:15 +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:*439d389f-442f-4b5d-9a1f-3030fa224b7b,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-workflow7bflf/series-workflow7bflf-convert-artifact-134706634/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": "9e069ec1-aab1-4b02-b928-17df4037f786", "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-workflow7bflf/series-workflow7bflf-build-action-995888568/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 05:06:17 +0000 UTC FinishedAt: 2026-09-03 05:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 05:06:17 +0000 UTC FinishedAt: 2026-09-03 05:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 05:06:17 +0000 UTC FinishedAt: 2026-09-03 05:06:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 05:06:17 +0000 UTC FinishedAt: 2026-09-03 05:06:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7bflf/series-workflow7bflf-convert-artifact-1870861925/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 05:06:28 +0000 UTC FinishedAt: 2026-09-03 05:08:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 05:06:28 +0000 UTC FinishedAt: 2026-09-03 05:08:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9e069ec1-aab1-4b02-b928-17df4037f786,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-workflow7bflf/series-workflow7bflf-build-action-995888568/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-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 05:08:40 +0000 UTC FinishedAt: 2026-09-03 05:08:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 05:08:40 +0000 UTC FinishedAt: 2026-09-03 05:08:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 05:08:40 +0000 UTC FinishedAt: 2026-09-03 05:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 05:08:40 +0000 UTC FinishedAt: 2026-09-03 05:24:53 +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:*439d389f-442f-4b5d-9a1f-3030fa224b7b,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-workflow7bflf/series-workflow7bflf-convert-artifact-1870861925/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": "9d793eed-662c-4135-b57f-822fa0f2784a", "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-workflow7bflf/series-workflow7bflf-build-action-197520049/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 05:08:40 +0000 UTC FinishedAt: 2026-09-03 05:24:43 +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:*439d389f-442f-4b5d-9a1f-3030fa224b7b,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-workflow7bflf/series-workflow7bflf-convert-artifact-1870861925/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": "9d793eed-662c-4135-b57f-822fa0f2784a", "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-workflow7bflf/series-workflow7bflf-build-action-197520049/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 05:24:53 +0000 UTC FinishedAt: 2026-09-03 05:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 05:24:53 +0000 UTC FinishedAt: 2026-09-03 05:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 05:24:53 +0000 UTC FinishedAt: 2026-09-03 05:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 05:24:53 +0000 UTC FinishedAt: 2026-09-03 05:26:37 +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:*9d793eed-662c-4135-b57f-822fa0f2784a,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-workflow7bflf/series-workflow7bflf-build-action-197520049/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-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 05:26:47 +0000 UTC FinishedAt: 2026-09-03 08:30:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 05:26:47 +0000 UTC FinishedAt: 2026-09-03 08:30:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9e069ec1-aab1-4b02-b928-17df4037f786,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9d793eed-662c-4135-b57f-822fa0f2784a,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-workflow7bflf/series-workflow7bflf-build-action-995888568/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-workflow7bflf/series-workflow7bflf-build-action-197520049/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 05:26:47 +0000 UTC FinishedAt: 2026-09-03 05:27:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 05:26:47 +0000 UTC FinishedAt: 2026-09-03 05:27:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7bflf/series-workflow7bflf-convert-artifact-2396631530/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 05:26:47 +0000 UTC FinishedAt: 2026-09-03 05:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 05:26:47 +0000 UTC FinishedAt: 2026-09-03 05:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 05:26:47 +0000 UTC FinishedAt: 2026-09-03 05:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 05:27:13 +0000 UTC FinishedAt: 2026-09-03 08:30:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bflf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e8eeeda633de825e8c4062664bbc5a906a54dfe","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","CGROUPS"],"series_id":"69e0e629-ef5b-4d51-bfdf-95ffd8537b59","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 05:27:13 +0000 UTC FinishedAt: 2026-09-03 08:29:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9e069ec1-aab1-4b02-b928-17df4037f786,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9d793eed-662c-4135-b57f-822fa0f2784a,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-workflow7bflf/series-workflow7bflf-build-action-995888568/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-workflow7bflf/series-workflow7bflf-build-action-197520049/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-workflow7bflf/series-workflow7bflf-convert-artifact-2396631530/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,}